Skip to main content

Custom PSL Tracers for Grasshopper

Project description

Introduction

This package includes 3 PSL tracing functions that can trace a layout of principal stress lines with custom features inside the GH/Rhino environment. In total there are three functions inside the package ranging from manual seeds point selection, to automated selction and finally to automated force-based selection all tracing a principal stress line field (vector field).

Theory

All tracers are based on the same tracing logic. They are based on biderctional tracing where the RK4 method is utilized to approximate the next point. The interpolation between points in the discrete structured mesh is done using k-nearest neighbours IDW. Additional to the logic all tracers incorporate custom features such as: Edge detection, loop detection, distance thresholds, and optional merging with snapping. This ensures a tool that can be informed by user defined constraints generating a custom layout adhering to geometric rules. It works for 3D shapes and uses projection to stay on the surface.

Tracer A

Tracer A takes a manual selection of seed points as an input and traces those bidirectionally. The order of the seed point list defines the order in which the seeds are traced.

Inputs:

  1. h = step length
  2. num_steps = maximum iterations (steps)
  3. k = k nearest neighbours for interpolation
  4. collision_threshold = distance threshold
  5. snap_radius = radius in which snapping occurs for merging
  6. n_back = if merging is initiated how many steps back the connection is (to avoid 90° connections)
  7. sample_count = sampling of boundaries for edge connection
  8. k_edge = how many edge samples to check for when building the edge connection
  9. seed_points = manually selected seed points
  10. principal_vectors = vector field
  11. points = points of the structural mesh
  12. domain_surface = surface or brep
  13. boundary_curves = edge curves of the surface (OBS: needs to be a list)

a, b = Tracer_A.main(h,num_steps,k,collision_threshold,snap_radius,n_back,sample_count,k_edge,seed_points,principal_vectors,points,domain_surface,boundary_curves):

Outputs:

  1. main_lines = traced PSL's (a)
  2. Edge and merge connections (b)

Tracer B

Tracer B takes one initial seed and generates a equally distributed PSL network automatically.

Inputs:

  1. h = step length
  2. num_steps = maximum iterations (steps)
  3. k = k nearest neighbours for interpolation
  4. collision_threshold = distance threshold
  5. snap_radius = radius in which snapping occurs for merging
  6. n_back = if merging is initiated how many steps back the connection is (to avoid 90° connections)
  7. offset_distance = distance for the offsetting of sample points/seeds
  8. sample_interval = sampling of PSL
  9. sample_count = sampling of boundaries for edge connection
  10. k_edge = how many edge samples to check for when building the edge connection
  11. ratio_minseed_coll = ratio for minimum seed distance based on collision threshold
  12. seed_point = manually selected seed point
  13. principal_vectors = vector field
  14. points = points of the structural mesh
  15. domain_surface = surface or brep
  16. boundary_curves = edge curves of the surface (OBS: needs to be a list)

a, b, c = Tracer_B.main(h,num_steps,k,collision_threshold,snap_radius,n_back,offset_distance,sample_interval,sample_count,k_edge,ratio_minseed_coll,seed_point,principal_vectors,points,domain_surface,boundary_curves):

Outputs:

  1. Traced PSL's (a)
  2. Edge and merge connections (b)
  3. Valid seeds (c)

Tracer C

Tracer C takes one initial seed and generates a equally distributed PSL network automatically based on the forces in the design domain.

Inputs:

  1. ghenv = global GH variable "ghenv"
  2. h = step length
  3. num_steps = maximum iterations (steps)
  4. k = k nearest neighbours for interpolation
  5. collision_threshold = distance threshold
  6. snap_radius = radius in which snapping occurs for merging
  7. n_back = if merging is initiated how many steps back the connection is (to avoid 90° connections)
  8. max_offset_distance = max distance for the offsetting of sample points/seeds
  9. sample_interval = sampling of PSL
  10. sample_count = sampling of boundaries for edge connection
  11. k_edge = how many edge samples to check for when building the edge connection
  12. ratio_minseed_coll = ratio for minimum seed distance based on collision threshold
  13. seed_point = manually selected seed point
  14. principal_vectors = vector field
  15. points = points of the structural mesh
  16. domain_surface = surface or brep
  17. boundary_curves = edge curves of the surface (OBS: needs to be a list)
  18. strength = strength value for inlay
  19. stress_values = stress values from fx Karamba3D (for each point of the points input)

a, b ,c = Tracer_C.main(ghenv,h,num_steps,k,collision_threshold,snap_radius,n_back,max_offset_distance,sample_interval,sample_count,ratio_minseed_coll,seed_point,principal_vectors,points,domain_surface,boundary_curves,strength,stress_values)

Outputs:

  1. Traced PSL's (a)
  2. Edge and merge connections (b)
  3. Valid seeds (c)

Example files

A GH example file can be found on: https://github.com/Brandes21/PyPa/tree/main/Example_files

For any questions or in case of bugs feel free to contact me on: niclasbrandt97@gmail.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

psl_tracer-0.1.8.tar.gz (25.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

psl_tracer-0.1.8-py3-none-any.whl (27.4 kB view details)

Uploaded Python 3

File details

Details for the file psl_tracer-0.1.8.tar.gz.

File metadata

  • Download URL: psl_tracer-0.1.8.tar.gz
  • Upload date:
  • Size: 25.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.1

File hashes

Hashes for psl_tracer-0.1.8.tar.gz
Algorithm Hash digest
SHA256 ad20ce5c431f0515d0af8cf6c051123bc8d43b6de45c5a8425a3e5dc60097214
MD5 ce398eb3f3b7fb3cdb2dbff32f597b84
BLAKE2b-256 ecdadbd0d507cddea6ef720cbffcf1e4be30b584f27d11d1a27d7b45bd383ffa

See more details on using hashes here.

File details

Details for the file psl_tracer-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: psl_tracer-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 27.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.1

File hashes

Hashes for psl_tracer-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 c9313d4e34b50ca364e0a65fb34fdea9f622349f26ae86b7fa57ba2a46d1ecc3
MD5 9a19c773126816f4633d69476aeb65f4
BLAKE2b-256 719dff6d0c682e9a2c6a9ba3d15e124f6a8987a885189f1859386867d37f2f6e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page