Crates.io | toxicblend |
lib.rs | toxicblend |
version | 0.0.22 |
source | src |
created_at | 2021-02-23 15:14:18.809791 |
updated_at | 2021-12-30 13:50:44.84706 |
description | gRPC based Blender-addons. WIP |
homepage | |
repository | https://github.com/eadf/toxicblend.rs |
max_upload_size | |
id | 359530 |
size | 532,639 |
It is a client-server based addon for Blender written in Rust (and Python for the client side parts).
Follow instructions in install_as_blender_addon.md
Rust 1.56+
Will automatically make use of the fast(er) features hash_drain_filter
and map_first_last
if run on rust +nightly
A blender addon based on a client-server model using grpc and tonic.
The blender addon is the client, and it only connects to localhost
.
The server binds to localhost
as well; so it should not be reachable from any other computer (not thoroughly tested), run it with this command:
cargo +nightly run --bin toxicblend_server --release
or just
cargo run --release
You can enable the saft voxel meshing backend like this:
cargo +nightly run --release --features saft
If the grpc server (for any unimaginable reason) would crash, blender will hang waiting for response.
This can easily be fixed if you run blender from the console. A ctrl
- C
will fix it.
Project is still in development, I will add more operations. The existing operations are pretty much usable as-is.
These operations all operate in blender edit mode:
Will convert a flat mesh object into a 2D outline. Right now the data must be in a plane crossing origin (one axis need to be zero)
Works similarly to the built-in simplify command, but instead of a distance it takes a percentage. This percentage is applied to the largest dimension of the AABB and that value is used as the Ramer–Douglas–Peucker distance. Works on 3D linestrings/polylines (no faces).
This percentage change makes it possible to simplify tiny objects without having to scale them up, simplify and then scale them down again.
Runs the Voronoi sweep-line algorithm on loops of 2D lines and builds a 2½D mesh (input geometry must be on a plane crossing origin).
Note: Edges may only intersect at their end points, use the Knife intersect
operation to make it so.
Takes the output of the 2d_outline command and calculates the 3D centerline.
This operation only works on non-intersecting loops with islands of loops inside. E.g. fonts.
If you only need the 2D centerline, you can simply scale the added dimension to zero.
Keyboard command: s
z
0
for setting Z to zero.
Runs the Voronoi sweep-line algorithm on 2D points and lines (geometry must be on a plane crossing origin).
Takes an edge-only 3D mesh, like the output of the Voronoi operation, and puts voxelized tubes along the edges. This operation does not require flat input.
This operation uses fast-surface-nets or saft for voxel generation.
Takes an edge-only 3D mesh where one of the axis represents a distance. The operation puts voxelized rounded cones along the edges. The third axis represents the radius of the end points of the rounded cones.
Start with any closed loop 2d shape:
Calculate the median axis of that shape with the centerline operation. (deselect the "negative radius" and "keep input edges" options):
Then run the mavoxel operation on that centerline/median axis:
Takes an edge-only mesh, like the output of the Voronoi operation, and puts metaballs along the edges. This operation does not require flat input.
This operation is located under Object
-> Add
-> Metaball
-> MetaVolume
Generates parametric Lindenmayer systems 3d graph/curves.
This operation is located under Object
-> Add
-> Mesh
-> LSystem
Generates a parametric Gyroid
Gyroid intersected with an egg-shape:
Runs on a single flat wire-frame object made of edges (no faces) and tests for self-intersections. If an intersection is found, the intersecting edges will be split at that point.
Selects all wire-frame vertices that only connects to one other vertex. Useful for identifying dangling vertices.
Selects all (wire-frame) vertices that are connected to already selected vertices. It continues doing this until an intersection is detected. Could be useful for deleting strings of vertices generated by 'Knife intersect'
Select edges that are connected to the selected edges, but limit by an angle constraint.
If edge A
is selected and edge B
is directly connected to it, B
will be selected if the angle between A
and B
is smaller than the angle limit. B
will then be used to select more edges and so on.
Selects all vertices that connects to three or more other vertices. Useful for selecting intersections.
Checks a mesh for anomalies, double edges etc. Will print results to the console/terminal.