Python 中类似 Fusion 的时间线

问题描述 投票:0回答:1

在 Autodesk Fusion 中,时间线显示 3D 模型上的各个操作:

a timeline containing operations on a 3D model

每个操作都可以随时添加、删除或修改,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)?

python jupyter-notebook 3d
1个回答
0
投票

是的,这很容易做到,而且您已经走在正确的轨道上了。将 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”语句保留在脚本末尾,并根据需要添加单元格。

© www.soinside.com 2019 - 2024. All rights reserved.