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.
 
 
 
 
 
 

283 lines
6.9 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkActor2D.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 "vtkActor2D.h"
#include "vtkProperty2D.h"
#include "vtkMapper2D.h"
#include "vtkPropCollection.h"
#include "vtkObjectFactory.h"
vtkCxxRevisionMacro(vtkActor2D, "$Revision: 1.1 $");
vtkStandardNewMacro(vtkActor2D);
vtkCxxSetObjectMacro(vtkActor2D,Property, vtkProperty2D);
// Creates an actor2D with the following defaults:
// position -1, -1 (view coordinates)
// orientation 0, scale (1,1), layer 0, visibility on
vtkActor2D::vtkActor2D()
{
this->Mapper = (vtkMapper2D*) NULL;
this->LayerNumber = 0;
this->Property = (vtkProperty2D*) NULL;
//
this->PositionCoordinate = vtkCoordinate::New();
this->PositionCoordinate->SetCoordinateSystem(VTK_VIEWPORT);
//
this->Position2Coordinate = vtkCoordinate::New();
this->Position2Coordinate->SetCoordinateSystemToNormalizedViewport();
this->Position2Coordinate->SetValue(0.5, 0.5);
this->Position2Coordinate->SetReferenceCoordinate(this->PositionCoordinate);
}
// Destroy an actor2D.
vtkActor2D::~vtkActor2D()
{
if (this->Property)
{
this->Property->UnRegister(this);
this->Property = NULL;
}
if (this->PositionCoordinate)
{
this->PositionCoordinate->Delete();
this->PositionCoordinate = NULL;
}
if (this->Position2Coordinate)
{
this->Position2Coordinate->Delete();
this->Position2Coordinate = NULL;
}
if (this->Mapper != NULL)
{
this->Mapper->UnRegister(this);
this->Mapper = NULL;
}
}
void vtkActor2D::ReleaseGraphicsResources(vtkWindow *win)
{
// pass this information onto the mapper
if (this->Mapper)
{
this->Mapper->ReleaseGraphicsResources(win);
}
}
// Renders an actor2D's property and then it's mapper.
int vtkActor2D::RenderOverlay(vtkViewport* viewport)
{
vtkDebugMacro(<< "vtkActor2D::RenderOverlay");
if (!this->Property)
{
vtkDebugMacro(<< "vtkActor2D::Render - Creating Property2D");
// Force creation of default property
this->GetProperty();
}
this->Property->Render(viewport);
if (!this->Mapper)
{
vtkErrorMacro(<< "vtkActor2D::Render - No mapper set");
return 0;
}
this->Mapper->RenderOverlay(viewport, this);
return 1;
}
// Renders an actor2D's property and then it's mapper.
int vtkActor2D::RenderOpaqueGeometry(vtkViewport* viewport)
{
vtkDebugMacro(<< "vtkActor2D::RenderOpaqueGeometry");
if (!this->Property)
{
vtkDebugMacro(<< "vtkActor2D::Render - Creating Property2D");
// Force creation of default property
this->GetProperty();
}
this->Property->Render(viewport);
if (!this->Mapper)
{
vtkErrorMacro(<< "vtkActor2D::Render - No mapper set");
return 0;
}
this->Mapper->RenderOpaqueGeometry(viewport, this);
return 1;
}
// Renders an actor2D's property and then it's mapper.
int vtkActor2D::RenderTranslucentGeometry(vtkViewport* viewport)
{
vtkDebugMacro(<< "vtkActor2D::RenderTranslucentGeometry");
if (!this->Property)
{
vtkDebugMacro(<< "vtkActor2D::Render - Creating Property2D");
// Force creation of default property
this->GetProperty();
}
this->Property->Render(viewport);
if (!this->Mapper)
{
vtkErrorMacro(<< "vtkActor2D::Render - No mapper set");
return 0;
}
this->Mapper->RenderTranslucentGeometry(viewport, this);
return 1;
}
void vtkActor2D::SetMapper(vtkMapper2D *mapper)
{
if (this->Mapper != mapper)
{
if (this->Mapper != NULL)
{
this->Mapper->UnRegister(this);
}
this->Mapper = mapper;
if (this->Mapper != NULL)
{
this->Mapper->Register(this);
}
this->Modified();
}
}
unsigned long int vtkActor2D::GetMTime()
{
unsigned long mTime=this->Superclass::GetMTime();
unsigned long time;
time = this->PositionCoordinate->GetMTime();
mTime = ( time > mTime ? time : mTime );
time = this->Position2Coordinate->GetMTime();
mTime = ( time > mTime ? time : mTime );
if ( this->Property != NULL )
{
time = this->Property->GetMTime();
mTime = ( time > mTime ? time : mTime );
}
return mTime;
}
// Set the Prop2D's position in display coordinates.
void vtkActor2D::SetDisplayPosition(int XPos, int YPos)
{
this->PositionCoordinate->SetCoordinateSystem(VTK_DISPLAY);
this->PositionCoordinate->SetValue((float)XPos,(float)YPos,0.0);
}
void vtkActor2D::SetWidth(double w)
{
double *pos;
pos = this->Position2Coordinate->GetValue();
this->Position2Coordinate->SetCoordinateSystemToNormalizedViewport();
this->Position2Coordinate->SetValue(w,pos[1]);
}
void vtkActor2D::SetHeight(double w)
{
double *pos;
pos = this->Position2Coordinate->GetValue();
this->Position2Coordinate->SetCoordinateSystemToNormalizedViewport();
this->Position2Coordinate->SetValue(pos[0],w);
}
double vtkActor2D::GetWidth()
{
return this->Position2Coordinate->GetValue()[0];
}
double vtkActor2D::GetHeight()
{
return this->Position2Coordinate->GetValue()[1];
}
// Returns an Prop2D's property2D. Creates a property if one
// doesn't already exist.
vtkProperty2D *vtkActor2D::GetProperty()
{
if (this->Property == NULL)
{
this->Property = vtkProperty2D::New();
this->Property->Register(this);
this->Property->Delete();
this->Modified();
}
return this->Property;
}
void vtkActor2D::GetActors2D(vtkPropCollection *ac)
{
ac->AddItem(this);
}
void vtkActor2D::ShallowCopy(vtkProp *prop)
{
vtkActor2D *a = vtkActor2D::SafeDownCast(prop);
if ( a != NULL )
{
this->SetMapper(a->GetMapper());
this->SetLayerNumber(a->GetLayerNumber());
this->SetProperty(a->GetProperty());
this->SetPosition(a->GetPosition());
this->SetPosition2(a->GetPosition2());
}
// Now do superclass
this->vtkProp::ShallowCopy(prop);
}
void vtkActor2D::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os,indent);
os << indent << "Layer Number: " << this->LayerNumber << "\n";
os << indent << "PositionCoordinate: " << this->PositionCoordinate << "\n";
this->PositionCoordinate->PrintSelf(os, indent.GetNextIndent());
os << indent << "Position2 Coordinate: " << this->Position2Coordinate << "\n";
this->Position2Coordinate->PrintSelf(os, indent.GetNextIndent());
os << indent << "Property: " << this->Property << "\n";
if (this->Property)
{
this->Property->PrintSelf(os, indent.GetNextIndent());
}
os << indent << "Mapper: " << this->Mapper << "\n";
if (this->Mapper)
{
this->Mapper->PrintSelf(os, indent.GetNextIndent());
}
}