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! ^^
Respuestas:
Esto se puede reproducir sin necesidad de
jupyter-cadquery
hacerlo, por lo que se ha abierto una nueva pregunta:Incruste widgets con pythreejs: perspectiva incorrecta y vista de cámara
fuente
Tomó algunos días, no funcionó correctamente la cadquery, pero su segunda pregunta sobre este tema sin cadquery hizo posible analizar el problema ...
El salto ocurre porque
orbit.update()
no se produce el objetivo y la funciónupdate()
no está disponible en python; solo en c ++ o c #, etc. De los documentos:El texto se puede encontrar aquí en la página 12. Y también se discute aquí en github.
Sin embargo, el salto se puede reproducir en IPython si aplica lo siguiente:
renderer = Renderer(scene=scene, camera=camera, controls=[orbit], position=target, width=view_width, height=view_height)
aquí
position
se agrega con las coordenadas del objetivo [0, 5, 0] pero la actualización para esto solo se realiza cuando hace clic con el mouse y se ajusta a la posición del cubo / cámara. El salto es similar / igual al salto como se ve en la exportación. HTML.Conclusión: la posición de la cámara programada se ve como un salto después de la interferencia manual debido a la ausencia de la
.update()
función de la clase de pitón OrbitControls y, por lo tanto, no es un error o error.fuente