8

jupyter-cadquery用来可视化一些用CadQuery制作的 3D 模型。

在 Jupyter 笔记本上可视化模型时,一切都按预期工作。

但是,当尝试将小部件嵌入 HTML 文档时,加载时的摄像头似乎指向(0, 0, 0),而不是预期的那样。与小部件交互后,相机将指向预期的坐标。

这是重现错误的代码和上述问题的动画(请参阅下面的说明,了解如何使用 Binder 重现它):

from cadquery import Workplane
from ipywidgets import embed
from jupyter_cadquery.cad_view import CadqueryView
from jupyter_cadquery.cadquery import Assembly
from jupyter_cadquery.cadquery import Part


# Create a simple assembly
box1 = Workplane('XY').box(10, 10, 10).translate((0, 0, 5))
a1 = Assembly([Part(box1)], "example 1")

# Generate HTML
a1.collect_shapes()
view = CadqueryView()
for shape in a1.collect_shapes():
    view.add_shape(shape["name"], shape["shape"], shape["color"])
renderer = view.render()
embed.embed_minimal_html('export.html', views=renderer, title='Renderer')

renderer

输出

注意立方体的视图是如何在交互时突然“跳跃”的。

这可能是一个问题ipywidgets吗?由于在笔记本中显示时视图没问题。

怎么可能修好?

如何重现

您可以使用 Binder 重现它,而无需创建本地环境(诚然,安装 CadQuery/jupyter-cadquery 并不是最简单/最快的事情):

https://mybinder.org/v2/gh/bernhard-42/jupyter-cadquery/master?urlpath=lab&filepath=examples%2Fcadquery.ipynb

只需在一个新的空笔记本中执行上面的代码。看看renderer笔记本上如何显示 3D 模型而没有任何问题:

截图来自 2019-12-23 21-28-42

执行后,export.html左侧的文件列表中也会出现一个文档。打开它并确保单击查看器顶部的“信任 HTML”按钮并点击刷新。如果您与视图交互,则可以重现该问题。

截图来自 2019-12-23 21-25-21

请注意,还丢失了透视图(这不是正交视图)。修复那将是一个加号!^^

4

2 回答 2

0

这可以在不需要 的情况下复制jupyter-cadquery,因此已经打开了一个新问题:

使用 pythreejs 嵌入小部件:错误的视角和相机查看

于 2020-01-04T00:40:26.260 回答
0

花了几天时间,没有让 cadquery 正常工作,但是你在没有 cadquery 的情况下关于这个主题的第二个问题使得有可能查看这个问题......

发生跳转是因为orbit.update()for target 没有发生并且该函数update()在 python 中不可用;仅在 c++ 或 c# 等中。来自文档:

在为上面的相机旋转设置动画时,我们使用了相机的四元数。这是动画自由形式旋转的最强大的方法。例如,上面的动画是通过首先手动移动相机,然后在想要的视图中读取它的位置和四元数属性来创建的......

文本可以在第 12 页找到也可以github 上讨论。

但是,如果您应用以下内容,则可以在 IPython 中重现跳跃:

renderer = Renderer(scene=scene, camera=camera, controls=[orbit], position=target, width=view_width, height=view_height)

这里position添加了目标坐标 [0, 5, 0] 但仅当您单击鼠标并调整到立方体/相机的位置时才完成此更新。跳转类似于/等于在 export.HTML 中看到的跳转。

结论:由于没有OrbitControls python类的功能,编程的相机位置被视为手动干预后的跳跃.update(),因此不是错误或错误。

于 2020-01-04T15:03:59.850 回答