/*========================================================================= Program: Visualization Toolkit Module: $RCSfile: vtkProperty.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 vtkProperty - represent surface properties of a geometric object // .SECTION Description // vtkProperty is an object that represents lighting and other surface // properties of a geometric object. The primary properties that can be // set are colors (overall, ambient, diffuse, specular, and edge color); // specular power; opacity of the object; the representation of the // object (points, wireframe, or surface); and the shading method to be // used (flat, Gouraud, and Phong). Also, some special graphics features // like backface properties can be set and manipulated with this object. // .SECTION See Also // vtkActor vtkPropertyDevice #ifndef __vtkProperty_h #define __vtkProperty_h #include "vtkObject.h" // shading models #define VTK_FLAT 0 #define VTK_GOURAUD 1 #define VTK_PHONG 2 // representation models #define VTK_POINTS 0 #define VTK_WIREFRAME 1 #define VTK_SURFACE 2 class vtkRenderer; class vtkActor; class VTK_RENDERING_EXPORT vtkProperty : public vtkObject { public: vtkTypeRevisionMacro(vtkProperty,vtkObject); void PrintSelf(ostream& os, vtkIndent indent); // Description: // Construct object with object color, ambient color, diffuse color, // specular color, and edge color white; ambient coefficient=0; diffuse // coefficient=0; specular coefficient=0; specular power=1; Gouraud shading; // and surface representation. Backface and frontface culling are off. static vtkProperty *New(); // Description: // Assign one property to another. void DeepCopy(vtkProperty *p); // Description: // This method causes the property to set up whatever is required for // its instance variables. This is actually handled by a subclass of // vtkProperty, which is created automatically. This // method includes the invoking actor as an argument which can // be used by property devices that require the actor. virtual void Render(vtkActor *,vtkRenderer *) {}; // Description: // This method renders the property as a backface property. TwoSidedLighting // must be turned off to see any backface properties. Note that only // colors and opacity are used for backface properties. Other properties // such as Representation, Culling are specified by the Property. virtual void BackfaceRender(vtkActor *,vtkRenderer *) {}; // Description: // Set the shading interpolation method for an object. vtkSetClampMacro(Interpolation,int,VTK_FLAT,VTK_PHONG); vtkGetMacro(Interpolation,int); void SetInterpolationToFlat() {this->SetInterpolation(VTK_FLAT);}; void SetInterpolationToGouraud() {this->SetInterpolation(VTK_GOURAUD);}; void SetInterpolationToPhong() {this->SetInterpolation(VTK_PHONG);}; char *GetInterpolationAsString(); // Description: // Control the surface geometry representation for the object. vtkSetClampMacro(Representation,int,VTK_POINTS,VTK_SURFACE); vtkGetMacro(Representation,int); void SetRepresentationToPoints() {this->SetRepresentation(VTK_POINTS);}; void SetRepresentationToWireframe() { this->SetRepresentation(VTK_WIREFRAME);}; void SetRepresentationToSurface() {this->SetRepresentation(VTK_SURFACE);}; char *GetRepresentationAsString(); // Description: // Set the color of the object. Has the side effect of setting the // ambient diffuse and specular colors as well. This is basically // a quick overall color setting method. void SetColor(double r,double g,double b); void SetColor(double a[3]) { this->SetColor(a[0], a[1], a[2]); }; double *GetColor(); void GetColor(double rgb[3]); // Description: // Set/Get the ambient lighting coefficient. vtkSetClampMacro(Ambient,double,0.0,1.0); vtkGetMacro(Ambient,double); // Description: // Set/Get the diffuse lighting coefficient. vtkSetClampMacro(Diffuse,double,0.0,1.0); vtkGetMacro(Diffuse,double); // Description: // Set/Get the specular lighting coefficient. vtkSetClampMacro(Specular,double,0.0,1.0); vtkGetMacro(Specular,double); // Description: // Set/Get the specular power. vtkSetClampMacro(SpecularPower,double,0.0,100.0); vtkGetMacro(SpecularPower,double); // Description: // Set/Get the object's opacity. 1.0 is totally opaque and 0.0 is completely // transparent. vtkSetClampMacro(Opacity,double,0.0,1.0); vtkGetMacro(Opacity,double); // Description: // Set/Get the ambient surface color. Not all renderers support separate // ambient and diffuse colors. From a physical standpoint it really // doesn't make too much sense to have both. For the rendering // libraries that don't support both, the diffuse color is used. vtkSetVector3Macro(AmbientColor,double); vtkGetVectorMacro(AmbientColor,double,3); // Description: // Set/Get the diffuse surface color. vtkSetVector3Macro(DiffuseColor,double); vtkGetVectorMacro(DiffuseColor,double,3); // Description: // Set/Get the specular surface color. vtkSetVector3Macro(SpecularColor,double); vtkGetVectorMacro(SpecularColor,double,3); // Description: // Turn on/off the visibility of edges. On some renderers it is // possible to render the edges of geometric primitives separately // from the interior. vtkGetMacro(EdgeVisibility,int); vtkSetMacro(EdgeVisibility,int); vtkBooleanMacro(EdgeVisibility,int); // Description: // Set/Get the color of primitive edges (if edge visibility is enabled). vtkSetVector3Macro(EdgeColor,double); vtkGetVectorMacro(EdgeColor,double,3); // Description: // Set/Get the width of a Line. The width is expressed in screen units. // This is only implemented for OpenGL. The default is 1.0. vtkSetClampMacro(LineWidth,float,0,VTK_LARGE_FLOAT); vtkGetMacro(LineWidth,float); // Description: // Set/Get the stippling pattern of a Line, as a 16-bit binary pattern // (1 = pixel on, 0 = pixel off). // This is only implemented for OpenGL. The default is 0xFFFF. vtkSetMacro(LineStipplePattern,int); vtkGetMacro(LineStipplePattern,int); // Description: // Set/Get the stippling repeat factor of a Line, which specifies how // many times each bit in the pattern is to be repeated. // This is only implemented for OpenGL. The default is 1. vtkSetClampMacro(LineStippleRepeatFactor,int,1,VTK_LARGE_INTEGER); vtkGetMacro(LineStippleRepeatFactor,int); // Description: // Set/Get the diameter of a point. The size is expressed in screen units. // This is only implemented for OpenGL. The default is 1.0. vtkSetClampMacro(PointSize,float,0,VTK_LARGE_FLOAT); vtkGetMacro(PointSize,float); // Description: // Turn on/off fast culling of polygons based on orientation of normal // with respect to camera. If backface culling is on, polygons facing // away from camera are not drawn. vtkGetMacro(BackfaceCulling,int); vtkSetMacro(BackfaceCulling,int); vtkBooleanMacro(BackfaceCulling,int); // Description: // Turn on/off fast culling of polygons based on orientation of normal // with respect to camera. If frontface culling is on, polygons facing // towards camera are not drawn. vtkGetMacro(FrontfaceCulling,int); vtkSetMacro(FrontfaceCulling,int); vtkBooleanMacro(FrontfaceCulling,int); protected: vtkProperty(); ~vtkProperty() {}; double Color[3]; double AmbientColor[3]; double DiffuseColor[3]; double SpecularColor[3]; double EdgeColor[3]; double Ambient; double Diffuse; double Specular; double SpecularPower; double Opacity; float PointSize; float LineWidth; int LineStipplePattern; int LineStippleRepeatFactor; int Interpolation; int Representation; int EdgeVisibility; int BackfaceCulling; int FrontfaceCulling; private: vtkProperty(const vtkProperty&); // Not implemented. void operator=(const vtkProperty&); // Not implemented. }; // Description: // Return the method of shading as a descriptive character string. inline char *vtkProperty::GetInterpolationAsString(void) { if ( this->Interpolation == VTK_FLAT ) { return (char *)"Flat"; } else if ( this->Interpolation == VTK_GOURAUD ) { return (char *)"Gouraud"; } else { return (char *)"Phong"; } } // Description: // Return the method of shading as a descriptive character string. inline char *vtkProperty::GetRepresentationAsString(void) { if ( this->Representation == VTK_POINTS ) { return (char *)"Points"; } else if ( this->Representation == VTK_WIREFRAME ) { return (char *)"Wireframe"; } else { return (char *)"Surface"; } } #endif