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

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 =========================================================================*/
00043 #ifndef __vtkPlane_h
00044 #define __vtkPlane_h
00045 
00046 #include "vtkImplicitFunction.h"
00047 
00048 class VTK_COMMON_EXPORT vtkPlane : public vtkImplicitFunction
00049 {
00050 public:
00052   static vtkPlane *New();
00053 
00054   vtkTypeRevisionMacro(vtkPlane,vtkImplicitFunction);
00055   void PrintSelf(ostream& os, vtkIndent indent);
00056 
00058 
00059   double EvaluateFunction(double x[3]);
00060   double EvaluateFunction(double x, double y, double z)
00061     {return this->vtkImplicitFunction::EvaluateFunction(x, y, z); } ;
00063 
00065   void EvaluateGradient(double x[3], double g[3]);
00066 
00068 
00069   vtkSetVector3Macro(Normal,double);
00070   vtkGetVectorMacro(Normal,double,3);
00072 
00074 
00076   vtkSetVector3Macro(Origin,double);
00077   vtkGetVectorMacro(Origin,double,3);
00079 
00082   void Push(double distance);
00083 
00085 
00088   static void ProjectPoint(double x[3], double origin[3], double normal[3], 
00089                            double xproj[3]);
00091 
00093 
00096   static void GeneralizedProjectPoint(double x[3], double origin[3],
00097                                       double normal[3], double xproj[3]);
00099   
00101   static double Evaluate(double normal[3], double origin[3], double x[3]);
00102 
00105   static double DistanceToPlane(double x[3], double n[3], double p0[3]);
00106   
00108 
00114   static int IntersectWithLine(double p1[3], double p2[3], double n[3], 
00115                                double p0[3], double& t, double x[3]);
00117 
00118 
00119 protected:
00120   vtkPlane();
00121   ~vtkPlane() {};
00122 
00123   double Normal[3];
00124   double Origin[3];
00125 
00126 private:
00127   vtkPlane(const vtkPlane&);  // Not implemented.
00128   void operator=(const vtkPlane&);  // Not implemented.
00129 };
00130 
00131 inline double vtkPlane::Evaluate(double normal[3], 
00132                                  double origin[3], double x[3])
00133 {
00134   return normal[0]*(x[0]-origin[0]) + normal[1]*(x[1]-origin[1]) + 
00135          normal[2]*(x[2]-origin[2]);
00136 }
00137 
00138 inline double vtkPlane::DistanceToPlane(double x[3], double n[3], double p0[3])
00139 {
00140 #define vtkPlaneAbs(x) ((x)<0?-(x):(x))
00141   return (vtkPlaneAbs(n[0]*(x[0]-p0[0]) + n[1]*(x[1]-p0[1]) + 
00142                       n[2]*(x[2]-p0[2])));
00143 }
00144 
00145 #endif
00146 
00147