00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00042 #ifndef __vtkClipClosedSurface_h
00043 #define __vtkClipClosedSurface_h
00044
00045 #include "vtkPolyDataAlgorithm.h"
00046
00047 class vtkPlaneCollection;
00048 class vtkUnsignedCharArray;
00049 class vtkDoubleArray;
00050 class vtkIdTypeArray;
00051 class vtkCellArray;
00052 class vtkPointData;
00053 class vtkCellData;
00054 class vtkPolygon;
00055 class vtkIdList;
00056 class vtkCCSEdgeLocator;
00057
00058 enum {
00059 VTK_CCS_SCALAR_MODE_NONE = 0,
00060 VTK_CCS_SCALAR_MODE_COLORS = 1,
00061 VTK_CCS_SCALAR_MODE_LABELS = 2
00062 };
00063
00064 class VTK_GRAPHICS_EXPORT vtkClipClosedSurface : public vtkPolyDataAlgorithm
00065 {
00066 public:
00067 static vtkClipClosedSurface *New();
00068 vtkTypeMacro(vtkClipClosedSurface,vtkPolyDataAlgorithm);
00069 void PrintSelf(ostream& os, vtkIndent indent);
00070
00072
00073 virtual void SetClippingPlanes(vtkPlaneCollection *planes);
00074 vtkGetObjectMacro(ClippingPlanes,vtkPlaneCollection);
00076
00078
00081 vtkSetMacro(Tolerance, double);
00082 vtkGetMacro(Tolerance, double);
00084
00086
00088 vtkSetMacro(PassPointData, int);
00089 vtkBooleanMacro(PassPointData, int);
00090 vtkGetMacro(PassPointData, int);
00092
00094
00096 vtkSetMacro(GenerateOutline, int);
00097 vtkBooleanMacro(GenerateOutline, int);
00098 vtkGetMacro(GenerateOutline, int);
00100
00102
00104 vtkSetMacro(GenerateFaces, int);
00105 vtkBooleanMacro(GenerateFaces, int);
00106 vtkGetMacro(GenerateFaces, int);
00108
00110
00116 vtkSetClampMacro(ScalarMode, int,
00117 VTK_CCS_SCALAR_MODE_NONE, VTK_CCS_SCALAR_MODE_LABELS);
00118 void SetScalarModeToNone() {
00119 this->SetScalarMode(VTK_CCS_SCALAR_MODE_NONE); };
00120 void SetScalarModeToColors() {
00121 this->SetScalarMode(VTK_CCS_SCALAR_MODE_COLORS); };
00122 void SetScalarModeToLabels() {
00123 this->SetScalarMode(VTK_CCS_SCALAR_MODE_LABELS); };
00124 vtkGetMacro(ScalarMode, int);
00125 const char *GetScalarModeAsString();
00127
00129
00133 vtkSetVector3Macro(BaseColor, double);
00134 vtkGetVector3Macro(BaseColor, double);
00136
00138
00141 vtkSetVector3Macro(ClipColor, double);
00142 vtkGetVector3Macro(ClipColor, double);
00144
00146
00149 vtkSetMacro(ActivePlaneId, int);
00150 vtkGetMacro(ActivePlaneId, int);
00152
00154
00157 vtkSetVector3Macro(ActivePlaneColor, double);
00158 vtkGetVector3Macro(ActivePlaneColor, double);
00160
00162
00166 vtkSetMacro(TriangulationErrorDisplay, int);
00167 vtkBooleanMacro(TriangulationErrorDisplay, int);
00168 vtkGetMacro(TriangulationErrorDisplay, int);
00170
00171
00172 VTK_LEGACY(void SetGenerateColorScalars(int));
00173 VTK_LEGACY(int GetGenerateColorScalars());
00174 VTK_LEGACY(void GenerateColorScalarsOn());
00175 VTK_LEGACY(void GenerateColorScalarsOff());
00176
00177 protected:
00178 vtkClipClosedSurface();
00179 ~vtkClipClosedSurface();
00180
00181 vtkPlaneCollection *ClippingPlanes;
00182
00183 double Tolerance;
00184
00185 int PassPointData;
00186 int GenerateOutline;
00187 int GenerateFaces;
00188 int ActivePlaneId;
00189 int ScalarMode;
00190 double BaseColor[3];
00191 double ClipColor[3];
00192 double ActivePlaneColor[3];
00193
00194 int TriangulationErrorDisplay;
00195
00196 vtkIdList *IdList;
00197 vtkCellArray *CellArray;
00198 vtkPolygon *Polygon;
00199
00200 virtual int ComputePipelineMTime(
00201 vtkInformation* request, vtkInformationVector** inputVector,
00202 vtkInformationVector* outputVector, int requestFromOutputPort,
00203 unsigned long* mtime);
00204
00205 virtual int RequestData(
00206 vtkInformation* request, vtkInformationVector** inputVector,
00207 vtkInformationVector* outputVector);
00208
00210
00211 void ClipLines(
00212 vtkPoints *points, vtkDoubleArray *pointScalars,
00213 vtkPointData *pointData, vtkCCSEdgeLocator *edgeLocator,
00214 vtkCellArray *inputCells, vtkCellArray *outputLines,
00215 vtkCellData *inCellData, vtkCellData *outLineData);
00217
00219
00223 void ClipAndContourPolys(
00224 vtkPoints *points, vtkDoubleArray *pointScalars, vtkPointData *pointData,
00225 vtkCCSEdgeLocator *edgeLocator, int triangulate,
00226 vtkCellArray *inputCells, vtkCellArray *outputPolys,
00227 vtkCellArray *outputLines, vtkCellData *inPolyData,
00228 vtkCellData *outPolyData, vtkCellData *outLineData);
00230
00232
00236 static int InterpolateEdge(
00237 vtkPoints *points, vtkPointData *pointData,
00238 vtkCCSEdgeLocator *edgeLocator, double tol,
00239 vtkIdType i0, vtkIdType i1, double v0, double v1, vtkIdType &i);
00241
00243
00246 int TriangulatePolygon(
00247 vtkIdList *polygon, vtkPoints *points, vtkCellArray *triangles);
00249
00251
00258 void MakePolysFromContours(
00259 vtkPolyData *data, vtkIdType firstLine, vtkIdType numLines,
00260 vtkCellArray *outputPolys, const double normal[3]);
00262
00264
00268 static void BreakPolylines(
00269 vtkCellArray *inputLines, vtkCellArray *outputLines,
00270 vtkUnsignedCharArray *inputScalars, vtkIdType firstLineScalar,
00271 vtkUnsignedCharArray *outputScalars, const unsigned char color[3]);
00273
00275
00278 static void CopyPolygons(
00279 vtkCellArray *inputPolys, vtkCellArray *outputPolys,
00280 vtkUnsignedCharArray *inputScalars, vtkIdType firstPolyScalar,
00281 vtkUnsignedCharArray *outputScalars, const unsigned char color[3]);
00283
00285
00287 static void BreakTriangleStrips(
00288 vtkCellArray *inputStrips, vtkCellArray *outputPolys,
00289 vtkUnsignedCharArray *inputScalars, vtkIdType firstStripScalar,
00290 vtkUnsignedCharArray *outputScalars, const unsigned char color[3]);
00292
00294
00297 static void SqueezeOutputPoints(
00298 vtkPolyData *output, vtkPoints *points, vtkPointData *pointData,
00299 int outputPointDataType);
00301
00303
00304 static void CreateColorValues(
00305 const double color1[3], const double color2[3], const double color3[3],
00306 unsigned char colors[3][3]);
00308
00309 private:
00310 vtkClipClosedSurface(const vtkClipClosedSurface&);
00311 void operator=(const vtkClipClosedSurface&);
00312 };
00313
00314 #endif