fixed vtk containerbox handler
This commit is contained in:
@@ -45,8 +45,9 @@
|
||||
|
||||
#include <vtkActor.h>
|
||||
#include <vtkPropCollection.h>
|
||||
#include <vtkProp3DCollection.h>
|
||||
#include <vtkRendererCollection.h>
|
||||
#include <vtkPropAssembly.h>
|
||||
#include <vtkAssembly.h>
|
||||
#include <vtkOutlineSource.h>
|
||||
#include <vtkPolyDataMapper.h>
|
||||
#include <vtkCubeAxesActor.h>
|
||||
@@ -82,7 +83,7 @@ class PuppetData {
|
||||
public:
|
||||
PuppetData() :
|
||||
m_Renderers(vtkSmartPointer<vtkRendererCollection>::New()),
|
||||
m_Assembly(vtkSmartPointer<vtkPropAssembly>::New()),
|
||||
m_Assembly(vtkSmartPointer<vtkAssembly>::New()),
|
||||
m_ShowBoundingBox(false),
|
||||
m_ShowScaleMeasures(false),
|
||||
m_Representation(-1),
|
||||
@@ -99,7 +100,7 @@ public:
|
||||
|
||||
// members //
|
||||
vtkSmartPointer<vtkRendererCollection> m_Renderers;
|
||||
vtkSmartPointer<vtkPropAssembly> m_Assembly;
|
||||
vtkSmartPointer<vtkAssembly> m_Assembly;
|
||||
|
||||
vtkSmartPointer<vtkOutlineSource> m_OutlineSource;
|
||||
vtkSmartPointer<vtkActor> m_OutlineActor;
|
||||
@@ -160,19 +161,16 @@ public:
|
||||
m_HighlightActor->GetProperty()->SetLighting(0);
|
||||
}
|
||||
|
||||
// Update highlight data and transform from first actor
|
||||
vtkPropCollection *parts = m_Assembly->GetParts();
|
||||
parts->InitTraversal();
|
||||
for (int i = 0; i < parts->GetNumberOfItems(); ++i) {
|
||||
vtkActor *actor = vtkActor::SafeDownCast(parts->GetNextProp());
|
||||
if (actor) {
|
||||
// Sync transform
|
||||
m_HighlightActor->SetUserTransform(actor->GetUserTransform());
|
||||
m_HighlightActor->SetPosition(actor->GetPosition());
|
||||
m_HighlightActor->SetOrientation(actor->GetOrientation());
|
||||
m_HighlightActor->SetScale(actor->GetScale());
|
||||
break;
|
||||
}
|
||||
// Update highlight matrix from the root prop
|
||||
vtkProp3D* root = nullptr;
|
||||
if (m_Assembly->GetParts()->GetNumberOfItems() == 1) {
|
||||
root = vtkProp3D::SafeDownCast(m_Assembly->GetParts()->GetLastProp());
|
||||
} else {
|
||||
root = m_Assembly;
|
||||
}
|
||||
|
||||
if (root) {
|
||||
m_HighlightActor->SetUserMatrix(root->GetMatrix());
|
||||
}
|
||||
|
||||
m_Renderers->InitTraversal();
|
||||
@@ -209,18 +207,17 @@ Puppet::~Puppet()
|
||||
vtkProp *Puppet::GetProp()
|
||||
{
|
||||
if (d->m_Assembly->GetParts()->GetNumberOfItems() == 1)
|
||||
{
|
||||
// d->m_Assembly->GetParts()->InitTraversal();
|
||||
// return d->m_Assembly->GetParts()->GetNextProp();
|
||||
return d->m_Assembly->GetParts()->GetLastProp();
|
||||
}
|
||||
else return d->m_Assembly;
|
||||
else
|
||||
return d->m_Assembly;
|
||||
}
|
||||
|
||||
void Puppet::SetProp(vtkProp *prop)
|
||||
{
|
||||
if(prop) {
|
||||
d->m_Assembly->AddPart(prop);
|
||||
if (auto* p3d = vtkProp3D::SafeDownCast(prop)) {
|
||||
d->m_Assembly->AddPart(p3d);
|
||||
}
|
||||
d->ApplyAppearance(prop);
|
||||
}
|
||||
}
|
||||
@@ -240,14 +237,8 @@ void Puppet::ConnectRenderer(vtkRenderer *renderer)
|
||||
{
|
||||
if(renderer) {
|
||||
this->GetRenderers()->AddItem(renderer);
|
||||
if(d->m_Assembly->GetParts()->GetNumberOfItems() == 1)
|
||||
renderer->AddActor(this->GetProp());
|
||||
else if(d->m_Assembly->GetParts()->GetNumberOfItems() >0)
|
||||
{
|
||||
vtkPropCollection *props = d->m_Assembly->GetParts();
|
||||
props->InitTraversal();
|
||||
for (int i=0; i<props->GetNumberOfItems(); ++i)
|
||||
renderer->AddActor(props->GetNextProp());
|
||||
if(vtkProp* prop = this->GetProp()) {
|
||||
renderer->AddViewProp(prop);
|
||||
}
|
||||
|
||||
if (d->m_ShowBoundingBox && d->m_OutlineActor) renderer->AddActor(d->m_OutlineActor);
|
||||
@@ -265,15 +256,8 @@ void Puppet::ConnectRenderer(vtkRenderer *renderer)
|
||||
void Puppet::DisconnectRenderer(vtkRenderer *renderer)
|
||||
{
|
||||
if(renderer) {
|
||||
if(this->GetProp())
|
||||
renderer->RemoveViewProp(this->GetProp());
|
||||
else if(d->m_Assembly->GetParts()->GetNumberOfItems() >0)
|
||||
{
|
||||
vtkPropCollection *props = d->m_Assembly->GetParts();
|
||||
props->InitTraversal();
|
||||
for (int i=0; i<props->GetNumberOfItems(); ++i)
|
||||
renderer->RemoveViewProp(props->GetNextProp());
|
||||
}
|
||||
if(vtkProp* prop = this->GetProp())
|
||||
renderer->RemoveViewProp(prop);
|
||||
|
||||
if (d->m_ShowBoundingBox && d->m_OutlineActor) renderer->RemoveActor(d->m_OutlineActor);
|
||||
if (d->m_ShowScaleMeasures && d->m_CubeAxesActor) renderer->RemoveActor(d->m_CubeAxesActor);
|
||||
@@ -382,10 +366,10 @@ void Puppet::SetRepresentation(Representation mode)
|
||||
}
|
||||
d->m_Representation = rep;
|
||||
|
||||
vtkPropCollection *props = d->m_Assembly->GetParts();
|
||||
vtkProp3DCollection *props = d->m_Assembly->GetParts();
|
||||
props->InitTraversal();
|
||||
for (int i = 0; i < props->GetNumberOfItems(); ++i) {
|
||||
d->ApplyAppearance(props->GetNextProp());
|
||||
d->ApplyAppearance(props->GetNextProp3D());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -403,10 +387,10 @@ void Puppet::SetColor(double r, double g, double b)
|
||||
d->m_Color[1] = g;
|
||||
d->m_Color[2] = b;
|
||||
|
||||
vtkPropCollection *props = d->m_Assembly->GetParts();
|
||||
vtkProp3DCollection *props = d->m_Assembly->GetParts();
|
||||
props->InitTraversal();
|
||||
for (int i = 0; i < props->GetNumberOfItems(); ++i) {
|
||||
d->ApplyAppearance(props->GetNextProp());
|
||||
d->ApplyAppearance(props->GetNextProp3D());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -414,10 +398,10 @@ void Puppet::SetOpacity(double alpha)
|
||||
{
|
||||
d->m_Opacity = alpha;
|
||||
|
||||
vtkPropCollection *props = d->m_Assembly->GetParts();
|
||||
vtkProp3DCollection *props = d->m_Assembly->GetParts();
|
||||
props->InitTraversal();
|
||||
for (int i = 0; i < props->GetNumberOfItems(); ++i) {
|
||||
d->ApplyAppearance(props->GetNextProp());
|
||||
d->ApplyAppearance(props->GetNextProp3D());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -450,6 +434,24 @@ bool Puppet::IsSelected() const
|
||||
return d->m_Selected;
|
||||
}
|
||||
|
||||
void Puppet::Update()
|
||||
{
|
||||
if (d->m_Selected) {
|
||||
d->UpdateHighlight();
|
||||
}
|
||||
|
||||
if (d->m_ShowBoundingBox) {
|
||||
double* bounds = d->m_Assembly->GetBounds();
|
||||
d->m_OutlineSource->SetBounds(bounds);
|
||||
d->m_OutlineSource->Update();
|
||||
}
|
||||
|
||||
if (d->m_ShowScaleMeasures) {
|
||||
double* bounds = d->m_Assembly->GetBounds();
|
||||
d->m_CubeAxesActor->SetBounds(bounds);
|
||||
}
|
||||
}
|
||||
|
||||
void Puppet::ConnectInteractor(vtkRenderWindowInteractor *interactor)
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user