add assembly

This commit is contained in:
AndreaRigoni
2026-03-25 22:48:04 +00:00
parent 422113a0e9
commit 2c5d6842c3
18 changed files with 800 additions and 171 deletions

View File

@@ -1,6 +1,7 @@
#include "vtkObjectsContext.h"
#include "Vtk/Math/vtkContainerBox.h"
#include "Vtk/Math/vtkCylinder.h"
#include "Vtk/Math/vtkAssembly.h"
#include "HEP/Detectors/vtkDetectorChamber.h"
#include <vtkAssembly.h>
@@ -42,12 +43,8 @@ void vtkObjectsContext::Synchronize() {
it->second->DisconnectRenderer(nullptr); // If we have a ref to a renderer we should disconnect but Puppet doesn't store it easily
// Actually Puppet::DisconnectRenderer(vtkRenderer*) needs the renderer.
// For now we just remove from assembly
vtkPropCollection* props = it->second->GetProps();
props->InitTraversal();
while(vtkProp* prop = props->GetNextProp()) {
if (vtkProp3D* p3d = vtkProp3D::SafeDownCast(prop))
m_Assembly->RemovePart(p3d);
}
if (auto* p3d = vtkProp3D::SafeDownCast(it->second->GetProp()))
m_Assembly->RemovePart(p3d);
this->PuppetRemoved(it->second);
delete it->second;
it = m_Puppets.erase(it);
@@ -62,12 +59,8 @@ void vtkObjectsContext::Synchronize() {
Puppet* puppet = this->CreatePuppet(obj);
if (puppet) {
m_Puppets[obj] = puppet;
vtkPropCollection* props = puppet->GetProps();
props->InitTraversal();
while(vtkProp* prop = props->GetNextProp()) {
if (vtkProp3D* p3d = vtkProp3D::SafeDownCast(prop))
m_Assembly->AddPart(p3d);
}
if (auto* p3d = vtkProp3D::SafeDownCast(puppet->GetProp()))
m_Assembly->AddPart(p3d);
this->PuppetAdded(puppet);
}
}
@@ -80,12 +73,8 @@ void vtkObjectsContext::OnObjectAdded(uLib::Object* obj) {
Puppet* puppet = this->CreatePuppet(obj);
if (puppet) {
m_Puppets[obj] = puppet;
vtkPropCollection* props = puppet->GetProps();
props->InitTraversal();
while(vtkProp* prop = props->GetNextProp()) {
if (vtkProp3D* p3d = vtkProp3D::SafeDownCast(prop))
m_Assembly->AddPart(p3d);
}
if (auto* p3d = vtkProp3D::SafeDownCast(puppet->GetProp()))
m_Assembly->AddPart(p3d);
this->PuppetAdded(puppet);
}
}
@@ -97,12 +86,8 @@ void vtkObjectsContext::OnObjectRemoved(uLib::Object* obj) {
if (it != m_Puppets.end()) {
// For now we just remove from assembly.
// Puppet::DisconnectRenderer(vtkRenderer*) needs the renderer, but we don't have it here easily.
vtkPropCollection* props = it->second->GetProps();
props->InitTraversal();
while(vtkProp* prop = props->GetNextProp()) {
if (vtkProp3D* p3d = vtkProp3D::SafeDownCast(prop))
m_Assembly->RemovePart(p3d);
}
if (auto* p3d = vtkProp3D::SafeDownCast(it->second->GetProp()))
m_Assembly->RemovePart(p3d);
this->PuppetRemoved(it->second);
delete it->second;
m_Puppets.erase(it);
@@ -131,6 +116,8 @@ Puppet* vtkObjectsContext::CreatePuppet(uLib::Object* obj) {
return new vtkDetectorChamber(static_cast<uLib::DetectorChamber*>(obj));
} else if (std::strcmp(className, "Cylinder") == 0) {
return new vtkCylinder(static_cast<uLib::Cylinder*>(obj));
} else if (std::strcmp(className, "Assembly") == 0) {
return new Assembly(static_cast<uLib::Assembly*>(obj));
}
// Fallback if we don't know the exact class but it might be a context itself