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
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());
|
|
}
|
|
}
|
|
|
|
|