Estou usando jupyter-cadquery
para visualizar alguns modelos 3D feitos com o CadQuery .
Ao visualizar os modelos em um notebook Jupyter, tudo funciona como esperado.
Mas, ao tentar incorporar o widget em um documento HTML, parece que a câmera, quando carregada, está apontando (0, 0, 0)
, não como o esperado. Depois de interagir com o widget, a câmera apontará para a coordenada esperada.
Aqui está o código para reproduzir o erro e uma animação do problema mencionado (consulte as instruções abaixo sobre como reproduzi-lo com o 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 como a visualização do cubo "salta" repentinamente na interação.
Poderia ser um problema ipywidgets
? Como a visualização é boa quando exibida no notebook.
Como poderia ser consertado?
Como reproduzir
Você pode reproduzi-lo com o Binder, sem precisar criar um ambiente local (é certo que instalar o CadQuery / jupyter-cadquery não é a coisa mais fácil / rápida a fazer):
Basta executar o código acima em um novo caderno vazio. Veja como renderer
mostra o modelo 3D sem problemas no notebook:
Após a execução, um export.html
documento também aparecerá na lista de arquivos à esquerda. Abra-o e clique no botão "Confiar em HTML" na parte superior do visualizador e clique em Atualizar. Se você interagir com a exibição, poderá reproduzir o problema.
Observe que, também, a perspectiva é perdida (que não é uma visão ortogonal). Consertar isso seria uma vantagem! ^^
Respostas:
Isso pode ser reproduzido sem a necessidade de
jupyter-cadquery
, portanto, uma nova pergunta foi aberta:Incorporar widgets com pythreejs: perspectiva incorreta e aparência da câmera
fonte
Demorou alguns dias, não conseguiu que o cadquery funcionasse corretamente, mas sua segunda pergunta sobre esse tópico sem o cadquery tornou possível analisar o problema ...
O salto ocorre porque
orbit.update()
para target não ocorre e a funçãoupdate()
não está disponível em python; somente em c ++ ou c #, etc. A partir dos documentos:O texto pode ser encontrado aqui na página 12. E também discutido aqui no github.
No entanto, o salto pode ser reproduzido no IPython se você aplicar o seguinte:
renderer = Renderer(scene=scene, camera=camera, controls=[orbit], position=target, width=view_width, height=view_height)
aqui
position
é adicionado com as coordenadas alvo [0, 5, 0], mas a atualização é feita apenas quando você clica com o mouse e ajusta a posição do cubo / câmera. O salto é semelhante / igual ao salto, como visto no export.HTML.Conclusão: a posição da câmera programada é vista como um salto após a interferência manual devido à ausência da
.update()
função da classe python OrbitControls e, portanto, não é um erro ou erro.fonte