/*========================================================================= Program: Visualization Toolkit Module: $RCSfile: vtkCaptionActor2D.h,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. =========================================================================*/ // .NAME vtkCaptionActor2D - draw text label associated with a point // .SECTION Description // vtkCaptionActor2D is a hybrid 2D/3D actor that is used to associate text // with a point (the AttachmentPoint) in the scene. The caption can be // drawn with a rectangular border and a leader connecting // the caption to the attachment point. Optionally, the leader can be // glyphed at its endpoint to create arrow heads or other indicators. // // To use the caption actor, you normally specify the Position and Position2 // coordinates (these are inherited from the vtkActor2D superclass). (Note // that Position2 can be set using vtkActor2D's SetWidth() and SetHeight() // methods.) Position and Position2 define the size of the caption, and a // third point, the AttachmentPoint, defines a point that the caption is // associated with. You must also define the caption text, // whether you want a border around the caption, and whether you want a // leader from the caption to the attachment point. The font attributes of // the text can be set through the vtkTextProperty associated to this actor. // You also indicate whether you want // the leader to be 2D or 3D. (2D leaders are always drawn over the // underlying geometry. 3D leaders may be occluded by the geometry.) The // leader may also be terminated by an optional glyph (e.g., arrow). // // The trickiest part about using this class is setting Position, Position2, // and AttachmentPoint correctly. These instance variables are // vtkCoordinates, and can be set up in various ways. In default usage, the // AttachmentPoint is defined in the world coordinate system, Position is the // lower-left corner of the caption and relative to AttachmentPoint (defined // in display coordaintes, i.e., pixels), and Position2 is relative to // Position and is the upper-right corner (also in display // coordinates). However, the user has full control over the coordinates, and // can do things like place the caption in a fixed position in the renderer, // with the leader moving with the AttachmentPoint. // .SECTION See Also // vtkLegendBoxActor vtkTextMapper vtkTextActor vtkTextProperty // vtkCoordinate #ifndef __vtkCaptionActor2D_h #define __vtkCaptionActor2D_h #include "vtkActor2D.h" class vtkActor; class vtkAppendPolyData; class vtkGlyph2D; class vtkGlyph3D; class vtkPolyData; class vtkPolyDataMapper2D; class vtkPolyDataMapper; class vtkTextActor; class vtkTextMapper; class vtkTextProperty; class VTK_HYBRID_EXPORT vtkCaptionActor2D : public vtkActor2D { public: vtkTypeRevisionMacro(vtkCaptionActor2D,vtkActor2D); void PrintSelf(ostream& os, vtkIndent indent); static vtkCaptionActor2D *New(); // Description: // Define the text to be placed in the caption. The text can be multiple // lines (separated by "\n"). vtkSetStringMacro(Caption); vtkGetStringMacro(Caption); // Description: // Set/Get the attachment point for the caption. By default, the attachment // point is defined in world coordinates, but this can be changed using // vtkCoordinate methods. vtkWorldCoordinateMacro(AttachmentPoint); // Description: // Enable/disable the placement of a border around the text. vtkSetMacro(Border,int); vtkGetMacro(Border,int); vtkBooleanMacro(Border,int); // Description: // Enable/disable drawing a "line" from the caption to the // attachment point. vtkSetMacro(Leader,int); vtkGetMacro(Leader,int); vtkBooleanMacro(Leader,int); // Description: // Indicate whether the leader is 2D (no hidden line) or 3D (z-buffered). vtkSetMacro(ThreeDimensionalLeader,int); vtkGetMacro(ThreeDimensionalLeader,int); vtkBooleanMacro(ThreeDimensionalLeader,int); // Description: // Specify a glyph to be used as the leader "head". This could be something // like an arrow or sphere. If not specified, no glyph is drawn. Note that // the glyph is assumed to be aligned along the x-axis and is rotated about // the origin. virtual void SetLeaderGlyph(vtkPolyData*); vtkGetObjectMacro(LeaderGlyph,vtkPolyData); // Description: // Specify the relative size of the leader head. This is expressed as a // fraction of the size (diagonal length) of the renderer. The leader // head is automatically scaled so that window resize, zooming or other // camera motion results in proportional changes in size to the leader // glyph. vtkSetClampMacro(LeaderGlyphSize,double,0.0,0.1); vtkGetMacro(LeaderGlyphSize,double); // Description: // Specify the maximum size of the leader head (if any) in pixels. This // is used in conjunction with LeaderGlyphSize to cap the maximum size of // the LeaderGlyph. vtkSetClampMacro(MaximumLeaderGlyphSize,int,1,1000); vtkGetMacro(MaximumLeaderGlyphSize,int); // Description: // Set/Get the padding between the caption and the border. The value // is specified in pixels. vtkSetClampMacro(Padding, int, 0, 50); vtkGetMacro(Padding, int); // Description: // Get the text actor used by the caption. This is useful if you want to control // justification and other characteristics of the text actor. vtkGetObjectMacro(TextActor,vtkTextActor); // Description: // Set/Get the text property. virtual void SetCaptionTextProperty(vtkTextProperty *p); vtkGetObjectMacro(CaptionTextProperty,vtkTextProperty); // Description: // Shallow copy of this scaled text actor. Overloads the virtual // vtkProp method. void ShallowCopy(vtkProp *prop); //BTX // Description: // WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE // DO NOT USE THIS METHOD OUTSIDE OF THE RENDERING PROCESS. // Release any graphics resources that are being consumed by this actor. // The parameter window could be used to determine which graphic // resources to release. virtual void ReleaseGraphicsResources(vtkWindow *); // Description: // WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE // DO NOT USE THIS METHOD OUTSIDE OF THE RENDERING PROCESS. // Draw the legend box to the screen. int RenderOpaqueGeometry(vtkViewport* viewport); int RenderTranslucentGeometry(vtkViewport* ) {return 0;} int RenderOverlay(vtkViewport* viewport); //ETX protected: vtkCaptionActor2D(); ~vtkCaptionActor2D(); vtkCoordinate *AttachmentPointCoordinate; char *Caption; int Border; int Leader; int ThreeDimensionalLeader; double LeaderGlyphSize; int MaximumLeaderGlyphSize; vtkPolyData *LeaderGlyph; //what to put on the end of the leader int Padding; private: vtkTextActor *TextActor; vtkTextProperty *CaptionTextProperty; vtkPolyData *BorderPolyData; vtkPolyDataMapper2D *BorderMapper; vtkActor2D *BorderActor; vtkPolyData *HeadPolyData; // single attachment point for glyphing vtkGlyph3D *HeadGlyph; // for 3D leader vtkPolyData *LeaderPolyData; // line represents the leader vtkAppendPolyData *AppendLeader; // append head and leader // for 2D leader vtkCoordinate *MapperCoordinate2D; vtkPolyDataMapper2D *LeaderMapper2D; vtkActor2D *LeaderActor2D; // for 3D leader vtkPolyDataMapper *LeaderMapper3D; vtkActor *LeaderActor3D; private: vtkCaptionActor2D(const vtkCaptionActor2D&); // Not implemented. void operator=(const vtkCaptionActor2D&); // Not implemented. }; #endif