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