Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

186 lines
4.5 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkProp.cxx,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkProp.h"
#include "vtkObjectFactory.h"
#include "vtkAssemblyPaths.h"
#include "vtkCommand.h"
vtkCxxRevisionMacro(vtkProp, "$Revision: 1.25 $");
// Creates an Prop with the following defaults: visibility on.
vtkProp::vtkProp()
{
this->Visibility = 1; // ON
this->Pickable = 1;
this->Dragable = 1;
this->AllocatedRenderTime = 10.0;
this->EstimatedRenderTime = 0.0;
this->RenderTimeMultiplier = 1.0;
this->Paths = NULL;
this->NumberOfConsumers = 0;
this->Consumers = 0;
}
vtkProp::~vtkProp()
{
if ( this->Paths )
{
this->Paths->Delete();
}
if (this->Consumers)
{
delete [] this->Consumers;
}
}
// This method is invoked if the prop is picked.
void vtkProp::Pick()
{
this->InvokeEvent(vtkCommand::PickEvent,NULL);
}
// Shallow copy of vtkProp.
void vtkProp::ShallowCopy(vtkProp *prop)
{
this->Visibility = prop->GetVisibility();
this->Pickable = prop->GetPickable();
this->Dragable = prop->GetDragable();
}
void vtkProp::InitPathTraversal()
{
if ( this->Paths == NULL )
{
this->Paths = vtkAssemblyPaths::New();
vtkAssemblyPath *path = vtkAssemblyPath::New();
path->AddNode(this,NULL);
this->BuildPaths(this->Paths,path);
path->Delete();
}
this->Paths->InitTraversal();
}
vtkAssemblyPath *vtkProp::GetNextPath()
{
if ( ! this->Paths)
{
return NULL;
}
return this->Paths->GetNextItem();
}
// This method is used in conjunction with the assembly object to build a copy
// of the assembly hierarchy. This hierarchy can then be traversed for
// rendering, picking or other operations.
void vtkProp::BuildPaths(vtkAssemblyPaths *paths, vtkAssemblyPath *path)
{
// This is a leaf node in the assembly hierarchy so we
// copy the path in preparation to assingning it to paths.
vtkAssemblyPath *childPath = vtkAssemblyPath::New();
childPath->ShallowCopy(path);
// We can add this path to the list of paths
paths->AddItem(childPath);
childPath->Delete(); //okay, reference counting
}
void vtkProp::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os,indent);
os << indent << "Dragable: " << (this->Dragable ? "On\n" : "Off\n");
os << indent << "Pickable: " << (this->Pickable ? "On\n" : "Off\n");
os << indent << "AllocatedRenderTime: "
<< this->AllocatedRenderTime << endl;
os << indent << "EstimatedRenderTime: "
<< this->EstimatedRenderTime << endl;
os << indent << "NumberOfConsumers: " << this->NumberOfConsumers << endl;
os << indent << "RenderTimeMultiplier: "
<< this->RenderTimeMultiplier << endl;
os << indent << "Visibility: " << (this->Visibility ? "On\n" : "Off\n");
}
void vtkProp::AddConsumer(vtkObject *c)
{
// make sure it isn't already there
if (this->IsConsumer(c))
{
return;
}
// add it to the list, reallocate memory
vtkObject **tmp = this->Consumers;
this->NumberOfConsumers++;
this->Consumers = new vtkObject* [this->NumberOfConsumers];
for (int i = 0; i < (this->NumberOfConsumers-1); i++)
{
this->Consumers[i] = tmp[i];
}
this->Consumers[this->NumberOfConsumers-1] = c;
// free old memory
delete [] tmp;
}
void vtkProp::RemoveConsumer(vtkObject *c)
{
// make sure it is already there
if (!this->IsConsumer(c))
{
return;
}
// remove it from the list, reallocate memory
vtkObject **tmp = this->Consumers;
this->NumberOfConsumers--;
this->Consumers = new vtkObject* [this->NumberOfConsumers];
int cnt = 0;
int i;
for (i = 0; i <= this->NumberOfConsumers; i++)
{
if (tmp[i] != c)
{
this->Consumers[cnt] = tmp[i];
cnt++;
}
}
// free old memory
delete [] tmp;
}
int vtkProp::IsConsumer(vtkObject *c)
{
int i;
for (i = 0; i < this->NumberOfConsumers; i++)
{
if (this->Consumers[i] == c)
{
return 1;
}
}
return 0;
}
vtkObject *vtkProp::GetConsumer(int i)
{
if (i >= this->NumberOfConsumers)
{
return 0;
}
return this->Consumers[i];
}