#voronoi #voxel #lindenmayer #grpc-server #centerline #blender-addon

bin+lib toxicblend

基于 gRPC 的 Blender 插件。进行中

19 个版本

0.0.22 2021 年 12 月 30 日
0.0.21 2021 年 11 月 24 日
0.0.19 2021 年 10 月 26 日
0.0.12 2021 年 7 月 11 日
0.0.1 2021 年 2 月 23 日

#647 in 数学

Download history 50/week @ 2024-04-01

56 每月下载量

AGPL-3.0

400KB
9K SLoC

Rust 6K SLoC // 0.1% comments Python 2.5K SLoC // 0.1% comments

toxicblend.rs

crates.io Workflow dependency status license

这是一个基于客户端-服务器架构的 Blender 插件,使用 Rust 编写(客户端部分使用 Python)。

Blender 插件安装

遵循 install_as_blender_addon.md 中的说明

Rust 要求

Rust 1.56+

如果运行在 rust +nightly 上,将自动使用更快的特性 hash_drain_filtermap_first_last

运行本地服务器

一个基于客户端-服务器模型,使用 grpctonic 的 Blender 插件。Blender 插件是客户端,它仅连接到 localhost。服务器也绑定到 localhost;因此,它不应从任何其他计算机访问(未彻底测试),使用以下命令运行

cargo +nightly run --bin toxicblend_server --release

或者只是

cargo run --release

Saft 后端

您可以通过这种方式启用 saft 网格化后端

cargo +nightly run --release --features saft

运行 Blender

如果 gRPC 服务器(由于任何不可想象的原因)崩溃,Blender 将挂起等待响应。如果您从控制台运行 Blender,则可以轻松修复此问题。按 ctrl - C 即可修复。

开发状态

项目仍在开发中,我将添加更多操作。现有操作基本上可以直接使用。

插件操作

这些操作都在 Blender 编辑模式下运行

操作:2D 轮廓

将平面网格对象转换为 2D 轮廓。目前,数据必须在一个穿过原点的平面上(一个轴需要为零)

from

from

操作:简化

与内置的简化命令类似,但不是使用距离,而是使用百分比。这个百分比应用于AABB的最大维度,该值用作Ramer-Douglas-Peucker距离。适用于3D线字符串/多段线(没有面)。

from

这种百分比变化使得在不放大对象的情况下简化微小的对象成为可能,简化后再将其缩小。

操作:Voronoi网格

在2D线环上运行Voronoi扫描线算法,并构建一个2½D网格(输入几何必须在通过原点的平面上)。

注意:边只能在它们的端点相交,使用Knife intersect操作来实现。

from

操作:中心线

使用2d_outline命令的输出计算3D中心线。

此操作仅适用于不交叉的环,其中包含环岛。例如,字体。

如果您只需要2D中心线,可以将添加的维度简单地缩放为零。

键盘命令: s z 0 将Z设置为零。

from

操作:Voronoi

在2D点和线上的2D点运行Voronoi扫描线算法(几何必须在通过原点的平面上)。

from

操作:体素

from

接受像Voronoi操作输出的边仅3D网格,并沿着边缘放置体素化管。此操作不需要平坦的输入。

此操作使用fast-surface-netssaft进行体素生成。

操作:中轴线体素(MaVoxel)

接受一个边仅3D网格,其中一个轴表示距离。该操作将体素化圆锥沿边缘放置。第三个轴表示圆锥端点的半径。

从任何封闭的2D形状开始

metavolume

使用中心线操作计算该形状的中轴线。(取消选择“负半径”和“保留输入边缘”选项)

metavolume

然后对那个中心线/中轴线运行mavoxel操作

metavolume

操作:元体积(对象操作)

接受像Voronoi操作输出的边仅网格,并沿着边缘放置元球。此操作不需要平坦的输入。

此操作位于Object -> Add -> Metaball -> MetaVolume

metavolume

操作:L系统(对象操作)

生成参数化Lindenmayer系统3D图形/曲线。此操作位于Object -> Add -> Mesh -> LSystem

dragon_3d

dragon_curve

plant

arrowhead

hilbert

dragon_curve_3d

操作:Gyroid(对象操作)

生成参数化Gyroid

gyroid

Gyroid与蛋形相交

egg

操作:刀片相交

在由边缘(没有面)组成的单个平坦线框对象上运行并检查自相交。如果发现交叉,交叉的边缘将在该点分割。

操作:选择端顶点

选择只连接到另一个顶点的所有线框顶点。对于识别悬挂顶点很有用。

操作:选择直到交叉的顶点

选择所有(线框)顶点,它们连接到已选择的顶点。它继续这样做,直到检测到交叉。对于删除由'Knife intersect'生成的顶点字符串可能很有用。

操作:选择共线边

选择与选定边相连的边,但限制角度约束。如果选择边 A,并且边 B 直接连接到它,那么当 AB 之间的角度小于角度限制时,将选择 B。然后使用 B 选择更多边,依此类推。

操作:选择交点顶点

选择连接到三个或更多其他顶点的所有顶点。用于选择交点。

操作:调试对象

检查网格中的异常,如重复边等。将结果打印到控制台/终端。

待办事项

  • 向服务器添加命令行选项,设置绑定地址和端口。可能出于安全原因而受功能门限制。
  • 将其他操作从 我的旧 Scala 项目 移植过来
  • 取消“平面度”限制,任何平面上的平面就足够了。
  • 创建 Docker 发布镜像
  • 当一切稳定后,删除 gRPC 层,并直接使用 Rust 二进制文件作为 Python 包发布。

变更日志

0.0.22

  • saft 0.27
  • tokio 1.15
  • boostvoronoi 0.10.3

0.0.21

  • 添加基准代码
  • saft 0.26
  • boostvoronoi 0.10
  • linestring 0.8
  • centerline 0.7
  • tokio 1.14

0.0.20

  • tokio 1.13
  • saft 0.25
  • 添加了中轴线体(mavoxel)操作
  • 为中心线操作添加了一些参数

0.0.19

  • saft 0.24
  • tonic 0.6
  • prost 0.9
  • smallvec 1.7

0.0.18

  • building_blocks 替换为 fast_surface_nets
  • 重构 Lindenmayer 系统
  • 确保有一个空 voxel 包围几何形状
  • Rust 1.56.0 和 2021 版本
  • 依赖项更新

0.0.17(GitHub 发布)

0.0.16(GitHub 发布)

依赖项

~19MB
~343K SLoC