/*////////////////////////////////////////////////////////////////////////////// // CMT Cosmic Muon Tomography project ////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// Copyright (c) 2014, Universita' degli Studi Padova, INFN sez. di Padova All rights reserved Authors: Andrea Rigoni Garola < andrea.rigoni@pd.infn.it > //////////////////////////////////////////////////////////////////////////////*/ #include "vtkBoxSolid.h" #include "Core/Monitor.h" #include #include #include #include #include #include #include #include #include "Vtk/Math/vtkDense.h" namespace uLib { namespace Vtk { vtkBoxSolid::vtkBoxSolid(Geant::BoxSolid *content) : vtkGeantSolid(content), m_BoxContent(content) { this->InstallPipe(); // Connect the model's Updated event to updateTransform to ensure VTK sync m_UpdateConnection = Object::connect(m_BoxContent, &uLib::Object::Updated, this, &vtkBoxSolid::Update); // Initial sync this->Update(); } vtkBoxSolid::~vtkBoxSolid() { } void vtkBoxSolid::Update() { ConnectionBlock blocker(m_UpdateConnection); this->UpdateGeometry(); // Ensure base Puppet properties (color, opacity, etc) and transform are applied this->Puppet::Update(); } void vtkBoxSolid::SyncFromVtk() { this->Puppet::SyncFromVtk(); if (auto* proxy = vtkProp3D::SafeDownCast(this->GetProxyProp())) { if (vtkMatrix4x4* mat = proxy->GetUserMatrix()) { m_BoxContent->SetTransform(VtkToMatrix4f(mat)); } } } void vtkBoxSolid::UpdateGeometry() { // Sync geometry from G4VSolid provided by vtkGeantSolid (tessellation) vtkGeantSolid::UpdateGeometry(); } void vtkBoxSolid::UpdateTransform() { // Take transform from Puppet base (which uses GetContent() -> ContainerBox TRS) this->Puppet::Update(); } void vtkBoxSolid::serialize_display(uLib::Archive::display_properties_archive &ar, const unsigned int version) { // Expose Geant solid properties and underlying Box/TRS properties this->Puppet::serialize_display(ar, version); if (m_BoxContent) { ar & NVP("Box", *m_BoxContent); if (m_BoxContent->GetObject()) { ar & NVP("Container", *m_BoxContent->GetObject()); } } } void vtkBoxSolid::InstallPipe() { vtkGeantSolid::InstallPipe(); } } // namespace Vtk } // namespace uLib