Estoy usando jupyter-cadquery
para visualizar algunos modelos 3D hechos con CadQuery .
Al visualizar los modelos en una computadora portátil Jupyter, todo funciona como se esperaba.
Pero cuando intenta incrustar el widget en un documento HTML, parece que la cámara, al cargar, apunta (0, 0, 0)
, no como se esperaba. Una vez que interactúa con el widget, la cámara apuntará a la coordenada esperada.
Aquí está el código para reproducir el error y una animación del problema mencionado (vea las instrucciones a continuación sobre cómo reproducirlo con 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
Observe cómo la vista del cubo "salta" repentinamente en la interacción.
¿Podría ser un problema con ipywidgets
? Dado que la vista está bien cuando se muestra en el cuaderno.
¿Cómo podría ser reparado?
Como reproducir
Puede reproducirlo con Binder, sin necesidad de crear un entorno local (es cierto que instalar CadQuery / jupyter-cadquery no es lo más fácil / rápido):
Simplemente ejecute el código anterior en un nuevo cuaderno vacío. Vea cómo renderer
muestra el modelo 3D sin problemas en el portátil:
Después de la ejecución, export.html
también aparecerá un documento en la lista de archivos a la izquierda. Ábralo y asegúrese de hacer clic en el botón "Confiar en HTML" en la parte superior del visor y presione actualizar. Si interactúa con la vista, puede reproducir el problema.
Tenga en cuenta que, también, se pierde la perspectiva (que no es una vista ortogonal). ¡Arreglar eso sería una ventaja! ^^