在 Autodesk Fusion 中,时间线显示 3D 模型上的各个操作:
每个操作都可以随时添加、删除或修改,3D 模型也会相应更新。
在幕后,修改操作可能会按如下方式进行:
for i in range(modified_operation_index, n):
cache[i] = apply_operation(operation=operations[i],
initial_state=cache[operation - 1])
display(cache[n - 1])
这意味着,操作的更改不需要 Fusion 运行所有操作,而只需从修改的操作开始运行。
我希望在 Build123d 中拥有相同的功能,这是一个 Python CAD 库。
# %% Operation 1
from build123d import *
# ... more time-consuming imports ...
# %% Operation 2
box = Box(1, 2, 3)
# %% Operation 3
# ... more code that modifies box ...
# %% Operation 4
circle = Circle(4, 5)
# %% Operation 5
# ... more code that modifies circle ...
# %% Operation ...
# %% Operation n - 1
result = box + circle + ...
# %% Operation n
# show result in viewer
每次我想预览操作 17 代码的更改时,我不想等待操作 1 到 16 完成执行。
有没有办法在 Python 中完成此任务,可能使用外部软件(例如 IPython)?
是的,这很容易做到,而且您已经走在正确的轨道上了。将 build123d 与 VSCode 中的 OCP CAD 查看器扩展以及 Jupyter VSCode 扩展一起使用,可以实现您所追求的行为。只需打开编辑器并添加上面已使用的 IPython 单元格分隔符 (
# %%
)。您可以单击“运行单元”或使用默认键绑定 CTRL-Enter
(在 MacOS 上可能为 CMD-
)。
示例代码:
# %% run imports once
from build123d import *
from ocp_vscode import *
# %% Operation 1
box = Box(1, 2, 3)
# %% Operation 2
cylinder = Cylinder(.4, 5)
# %% Operation 3
result = box + cylinder
show_all() # actually view the object(s) in the 3D viewer
运行单元实际上所做的是将它们发送到 Jupyter 扩展的“交互式窗口”,这类似于 jupyter-lab 提示符或 REPL。当您执行单元格时,例如随后,Python 解释器的命名空间是有状态的(直到交互式窗口的内核重新启动)。我通常还会将“show”语句保留在脚本末尾,并根据需要添加单元格。