Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/Common/vtkPlane.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkPlane.h,v $ 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00030 #ifndef __vtkPlane_h 00031 #define __vtkPlane_h 00032 00033 #include "vtkImplicitFunction.h" 00034 00035 class VTK_COMMON_EXPORT vtkPlane : public vtkImplicitFunction 00036 { 00037 public: 00039 static vtkPlane *New(); 00040 00041 vtkTypeRevisionMacro(vtkPlane,vtkImplicitFunction); 00042 void PrintSelf(ostream& os, vtkIndent indent); 00043 00045 00046 double EvaluateFunction(double x[3]); 00047 double EvaluateFunction(double x, double y, double z) 00048 {return this->vtkImplicitFunction::EvaluateFunction(x, y, z); } ; 00050 00052 void EvaluateGradient(double x[3], double g[3]); 00053 00055 00056 vtkSetVector3Macro(Normal,double); 00057 vtkGetVectorMacro(Normal,double,3); 00059 00061 00063 vtkSetVector3Macro(Origin,double); 00064 vtkGetVectorMacro(Origin,double,3); 00066 00069 void Push(double distance); 00070 00072 00075 static void ProjectPoint(double x[3], double origin[3], double normal[3], 00076 double xproj[3]); 00078 00080 00083 static void GeneralizedProjectPoint(double x[3], double origin[3], 00084 double normal[3], double xproj[3]); 00086 00088 static double Evaluate(double normal[3], double origin[3], double x[3]); 00089 00092 static double DistanceToPlane(double x[3], double n[3], double p0[3]); 00093 00095 00101 static int IntersectWithLine(double p1[3], double p2[3], double n[3], 00102 double p0[3], double& t, double x[3]); 00104 00105 00106 protected: 00107 vtkPlane(); 00108 ~vtkPlane() {}; 00109 00110 double Normal[3]; 00111 double Origin[3]; 00112 00113 private: 00114 vtkPlane(const vtkPlane&); // Not implemented. 00115 void operator=(const vtkPlane&); // Not implemented. 00116 }; 00117 00118 inline double vtkPlane::Evaluate(double normal[3], 00119 double origin[3], double x[3]) 00120 { 00121 return normal[0]*(x[0]-origin[0]) + normal[1]*(x[1]-origin[1]) + 00122 normal[2]*(x[2]-origin[2]); 00123 } 00124 00125 inline double vtkPlane::DistanceToPlane(double x[3], double n[3], double p0[3]) 00126 { 00127 #define vtkPlaneAbs(x) ((x)<0?-(x):(x)) 00128 return (vtkPlaneAbs(n[0]*(x[0]-p0[0]) + n[1]*(x[1]-p0[1]) + 00129 n[2]*(x[2]-p0[2]))); 00130 } 00131 00132 #endif 00133 00134