vtkGeantEvent
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
#endif
|
||||
|
||||
|
||||
#include <string>
|
||||
#include <vtkVersion.h>
|
||||
#include <vtkProp.h>
|
||||
#include <vtkActor.h>
|
||||
@@ -46,10 +47,13 @@
|
||||
#include <vtkPropCollection.h>
|
||||
#include <vtkRendererCollection.h>
|
||||
#include <vtkPropAssembly.h>
|
||||
#include <vtkOutlineSource.h>
|
||||
#include <vtkPolyDataMapper.h>
|
||||
#include <vtkCubeAxesActor.h>
|
||||
#include <vtkRenderer.h>
|
||||
#include <vtkProperty.h>
|
||||
#include <vtkCamera.h>
|
||||
|
||||
#include <vtkPolyData.h>
|
||||
#include <vtkPolyDataWriter.h>
|
||||
#include <vtkXMLPolyDataWriter.h>
|
||||
|
||||
#include "uLibVtkInterface.h"
|
||||
|
||||
@@ -64,46 +68,6 @@ namespace Vtk {
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// POLYDATA //
|
||||
|
||||
|
||||
void Polydata::SaveToFile(const char *vtk_file)
|
||||
{
|
||||
vtkSmartPointer<vtkPolyDataWriter> writer =
|
||||
vtkSmartPointer<vtkPolyDataWriter>::New();
|
||||
writer->SetFileName(vtk_file);
|
||||
vtkPolyData * data = GetPolyData();
|
||||
if(data) {
|
||||
# if VTK_MAJOR_VERSION <= 5
|
||||
writer->SetInputConnection(data->GetProducerPort());
|
||||
# else
|
||||
writer->SetInputData(data);
|
||||
# endif
|
||||
writer->Update();
|
||||
}
|
||||
}
|
||||
|
||||
void Polydata::SaveToXMLFile(const char *vtp_file)
|
||||
{
|
||||
vtkSmartPointer<vtkXMLPolyDataWriter> writer =
|
||||
vtkSmartPointer<vtkXMLPolyDataWriter>::New();
|
||||
writer->SetFileName(vtp_file);
|
||||
vtkPolyData * data = GetPolyData();
|
||||
if(data) {
|
||||
# if VTK_MAJOR_VERSION <= 5
|
||||
writer->SetInputConnection(data->GetProducerPort());
|
||||
# else
|
||||
writer->SetInputData(data);
|
||||
# endif
|
||||
writer->Update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -115,19 +79,59 @@ class PuppetData {
|
||||
public:
|
||||
PuppetData() :
|
||||
m_Renderers(vtkRendererCollection::New()),
|
||||
m_Assembly(vtkPropAssembly::New())
|
||||
{}
|
||||
m_Assembly(vtkPropAssembly::New()),
|
||||
m_OutlineSource(NULL),
|
||||
m_OutlineActor(NULL),
|
||||
m_CubeAxesActor(NULL),
|
||||
m_ShowBoundingBox(false),
|
||||
m_ShowScaleMeasures(false),
|
||||
m_Representation(-1),
|
||||
m_Opacity(-1.0)
|
||||
{
|
||||
m_Color[0] = m_Color[1] = m_Color[2] = -1.0;
|
||||
}
|
||||
|
||||
~PuppetData() {
|
||||
m_Renderers->RemoveAllItems();
|
||||
m_Assembly->GetParts()->RemoveAllItems();
|
||||
m_Renderers->Delete();
|
||||
m_Assembly->Delete();
|
||||
if (m_OutlineSource) m_OutlineSource->Delete();
|
||||
if (m_OutlineActor) m_OutlineActor->Delete();
|
||||
if (m_CubeAxesActor) m_CubeAxesActor->Delete();
|
||||
}
|
||||
|
||||
// members //
|
||||
vtkRendererCollection *m_Renderers;
|
||||
vtkPropAssembly *m_Assembly;
|
||||
|
||||
vtkOutlineSource *m_OutlineSource;
|
||||
vtkActor *m_OutlineActor;
|
||||
vtkCubeAxesActor *m_CubeAxesActor;
|
||||
|
||||
bool m_ShowBoundingBox;
|
||||
bool m_ShowScaleMeasures;
|
||||
|
||||
int m_Representation;
|
||||
double m_Color[3];
|
||||
double m_Opacity;
|
||||
|
||||
void ApplyAppearance(vtkProp *p) {
|
||||
vtkActor *actor = vtkActor::SafeDownCast(p);
|
||||
if (!actor) return;
|
||||
|
||||
if (m_Representation != -1) {
|
||||
actor->GetProperty()->SetRepresentation(m_Representation);
|
||||
}
|
||||
|
||||
if (m_Color[0] != -1.0) {
|
||||
actor->GetProperty()->SetColor(m_Color);
|
||||
}
|
||||
|
||||
if (m_Opacity != -1.0) {
|
||||
actor->GetProperty()->SetOpacity(m_Opacity);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// -------------------------------------------------------------------------- //
|
||||
@@ -155,7 +159,10 @@ vtkProp *Puppet::GetProp()
|
||||
|
||||
void Puppet::SetProp(vtkProp *prop)
|
||||
{
|
||||
if(prop) d->m_Assembly->AddPart(prop);
|
||||
if(prop) {
|
||||
d->m_Assembly->AddPart(prop);
|
||||
d->ApplyAppearance(prop);
|
||||
}
|
||||
}
|
||||
|
||||
void Puppet::RemoveProp(vtkProp *prop)
|
||||
@@ -182,6 +189,12 @@ void Puppet::ConnectRenderer(vtkRenderer *renderer)
|
||||
for (int i=0; i<props->GetNumberOfItems(); ++i)
|
||||
renderer->AddActor(props->GetNextProp());
|
||||
}
|
||||
|
||||
if (d->m_ShowBoundingBox && d->m_OutlineActor) renderer->AddActor(d->m_OutlineActor);
|
||||
if (d->m_ShowScaleMeasures && d->m_CubeAxesActor) {
|
||||
d->m_CubeAxesActor->SetCamera(renderer->GetActiveCamera());
|
||||
renderer->AddActor(d->m_CubeAxesActor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,6 +210,10 @@ void Puppet::DisconnectRenderer(vtkRenderer *renderer)
|
||||
for (int i=0; i<props->GetNumberOfItems(); ++i)
|
||||
renderer->RemoveViewProp(props->GetNextProp());
|
||||
}
|
||||
|
||||
if (d->m_ShowBoundingBox && d->m_OutlineActor) renderer->RemoveActor(d->m_OutlineActor);
|
||||
if (d->m_ShowScaleMeasures && d->m_CubeAxesActor) renderer->RemoveActor(d->m_CubeAxesActor);
|
||||
|
||||
this->GetRenderers()->RemoveItem(renderer);
|
||||
}
|
||||
}
|
||||
@@ -225,6 +242,121 @@ void Puppet::PrintSelf(std::ostream &o) const
|
||||
d->m_Renderers->PrintSelf(o,vtkIndent(1));
|
||||
}
|
||||
|
||||
void Puppet::ShowBoundingBox(bool show)
|
||||
{
|
||||
if (d->m_ShowBoundingBox == show) return;
|
||||
d->m_ShowBoundingBox = show;
|
||||
if (show) {
|
||||
if (!d->m_OutlineActor) {
|
||||
d->m_OutlineSource = vtkOutlineSource::New();
|
||||
d->m_OutlineActor = vtkActor::New();
|
||||
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
|
||||
mapper->SetInputConnection(d->m_OutlineSource->GetOutputPort());
|
||||
d->m_OutlineActor->SetMapper(mapper);
|
||||
d->m_OutlineActor->GetProperty()->SetColor(1.0, 1.0, 1.0);
|
||||
}
|
||||
|
||||
double* bounds = d->m_Assembly->GetBounds();
|
||||
d->m_OutlineSource->SetBounds(bounds);
|
||||
d->m_OutlineSource->Update();
|
||||
|
||||
d->m_Renderers->InitTraversal();
|
||||
for (int i = 0; i < d->m_Renderers->GetNumberOfItems(); ++i) {
|
||||
vtkRenderer *renderer = d->m_Renderers->GetNextItem();
|
||||
renderer->AddActor(d->m_OutlineActor);
|
||||
}
|
||||
} else {
|
||||
if (d->m_OutlineActor) {
|
||||
d->m_Renderers->InitTraversal();
|
||||
for (int i = 0; i < d->m_Renderers->GetNumberOfItems(); ++i) {
|
||||
vtkRenderer *renderer = d->m_Renderers->GetNextItem();
|
||||
renderer->RemoveActor(d->m_OutlineActor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Puppet::ShowScaleMeasures(bool show)
|
||||
{
|
||||
if (d->m_ShowScaleMeasures == show) return;
|
||||
d->m_ShowScaleMeasures = show;
|
||||
if (show) {
|
||||
if (!d->m_CubeAxesActor) {
|
||||
d->m_CubeAxesActor = vtkCubeAxesActor::New();
|
||||
d->m_CubeAxesActor->SetFlyModeToOuterEdges();
|
||||
d->m_CubeAxesActor->SetUseTextActor3D(1);
|
||||
d->m_CubeAxesActor->GetProperty()->SetColor(1.0, 1.0, 1.0);
|
||||
}
|
||||
|
||||
double* bounds = d->m_Assembly->GetBounds();
|
||||
d->m_CubeAxesActor->SetBounds(bounds);
|
||||
|
||||
d->m_Renderers->InitTraversal();
|
||||
for (int i = 0; i < d->m_Renderers->GetNumberOfItems(); ++i) {
|
||||
vtkRenderer *renderer = d->m_Renderers->GetNextItem();
|
||||
d->m_CubeAxesActor->SetCamera(renderer->GetActiveCamera());
|
||||
renderer->AddActor(d->m_CubeAxesActor);
|
||||
}
|
||||
} else {
|
||||
if (d->m_CubeAxesActor) {
|
||||
d->m_Renderers->InitTraversal();
|
||||
for (int i = 0; i < d->m_Renderers->GetNumberOfItems(); ++i) {
|
||||
vtkRenderer *renderer = d->m_Renderers->GetNextItem();
|
||||
renderer->RemoveActor(d->m_CubeAxesActor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Puppet::SetRepresentation(Representation mode)
|
||||
{
|
||||
int rep = VTK_SURFACE;
|
||||
switch (mode) {
|
||||
case Points: rep = VTK_POINTS; break;
|
||||
case Wireframe: rep = VTK_WIREFRAME; break;
|
||||
case Surface: rep = VTK_SURFACE; break;
|
||||
}
|
||||
d->m_Representation = rep;
|
||||
|
||||
vtkPropCollection *props = d->m_Assembly->GetParts();
|
||||
props->InitTraversal();
|
||||
for (int i = 0; i < props->GetNumberOfItems(); ++i) {
|
||||
d->ApplyAppearance(props->GetNextProp());
|
||||
}
|
||||
}
|
||||
|
||||
void Puppet::SetRepresentation(const char *mode)
|
||||
{
|
||||
std::string s(mode);
|
||||
if (s == "points") SetRepresentation(Points);
|
||||
else if (s == "wireframe") SetRepresentation(Wireframe);
|
||||
else if (s == "shaded" || s == "surface") SetRepresentation(Surface);
|
||||
}
|
||||
|
||||
void Puppet::SetColor(double r, double g, double b)
|
||||
{
|
||||
d->m_Color[0] = r;
|
||||
d->m_Color[1] = g;
|
||||
d->m_Color[2] = b;
|
||||
|
||||
vtkPropCollection *props = d->m_Assembly->GetParts();
|
||||
props->InitTraversal();
|
||||
for (int i = 0; i < props->GetNumberOfItems(); ++i) {
|
||||
d->ApplyAppearance(props->GetNextProp());
|
||||
}
|
||||
}
|
||||
|
||||
void Puppet::SetOpacity(double alpha)
|
||||
{
|
||||
d->m_Opacity = alpha;
|
||||
|
||||
vtkPropCollection *props = d->m_Assembly->GetParts();
|
||||
props->InitTraversal();
|
||||
for (int i = 0; i < props->GetNumberOfItems(); ++i) {
|
||||
d->ApplyAppearance(props->GetNextProp());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user