| VRS - The Virtual Rendering System |
| version 3.3 |
00001 #ifndef VRS_TRIANGLESETTOOL_H 00002 #define VRS_TRIANGLESETTOOL_H 00003 00004 #include <vrs/triangleset.h> 00005 00006 namespace VRS { 00007 class PolygonSet; 00008 class Facet; 00009 00010 class VRS_CORE_API TriangleSetTool { 00011 public: 00012 static SO<TriangleSet> convertToIndexedForm( 00013 SO<TriangleSet> triangleSet 00014 ); 00015 00016 static SO<TriangleSet> convertToNonIndexedForm( 00017 SO<TriangleSet> triangleSet 00018 ); 00019 00020 static SO<TriangleSet> fromPolygonSet(SO<PolygonSet> polygonSet); 00021 00022 static void computeFaceNormals(SO<TriangleSet> triangleSet); 00023 00024 static void computeVertexNormals(SO<TriangleSet> triangleSet); 00025 00026 static void invertNormals(SO<TriangleSet> triangleSet); 00027 00028 static void invertOrientation(SO<TriangleSet> triangleSet); 00029 00030 static void removeUnusedVertices(SO<TriangleSet> triangleSet); 00031 00032 static SO<TriangleSet> mergeSets( 00033 SO<Iterator<SO<TriangleSet> > > triangleSets 00034 ); 00035 00036 static void transform( 00037 SO<TriangleSet> triangleSet, 00038 const Matrix& matrix 00039 ); 00040 00041 /*static void compress(SO<TriangleSet> triangleSet); 00042 00043 static void computeSphericalTexCoords( 00044 SO<TriangleSet> triangleSet, 00045 UINT texUnitIndex, 00046 const Vector& center 00047 ); 00048 00049 static void computeTangents( 00050 SO<TriangleSet> triangleSet, 00051 UINT texUnitIndex 00052 ); 00053 00054 static SO<TriangleSet> mergeSets( 00055 SO<Iterator<SO<TriangleSet> > > triangleSets 00056 ); 00057 00058 00059 enum ClipMethod { 00060 KEEP_INTERSECTING_TRIANGLES, 00061 REMOVE_INTERSECTING_TRIANGLES, 00062 CLIP_INTERSECTING_TRIANGLES 00063 }; 00064 static SO<TriangleSet> clip( 00065 SO<TriangleSet> triangleSet, 00066 Bounds clipBounds, 00067 ClipMethod method 00068 ); 00069 00070 static SO<TriangleSet> clip( 00071 SO<TriangleSet> triangleSet, 00072 const Vector& onPlane, 00073 const Vector& planeNormal, 00074 ClipMethod method 00075 ); 00076 00077 static SO<TriangleSet> createSphere( 00078 Vector midpoint, 00079 double radius, 00080 UINT subdivisions 00081 ); 00082 00083 static SO<TriangleSet> extrudeEdges( 00084 SO<Facet> facet, 00085 double height, 00086 bool stripes, 00087 Vector direction 00088 ); 00089 00090 static bool canBeMerged( 00091 SO<TriangleSet> a, 00092 SO<TriangleSet> b 00093 ); 00094 00095 static SO<TriangleSet> splitTriangles( 00096 SO<TriangleSet> triangleSet, 00097 double maxEdgeLength 00098 ); 00099 00100 static SO<TriangleSet> filterTriangles( 00101 SO<TriangleSet> triangleSet, 00102 const Vector& normal, 00103 double maxAngle, 00104 bool complement = false 00105 ); 00106 00107 static SO<Iterator<SO<TriangleSet> > > forceMerge( 00108 SO<Iterator<SO<TriangleSet> > > triangleSets, 00109 bool indexed, 00110 int maxVertices = 65535 00111 ); 00112 00113 static SO<TriangleSet> forceTriangleMerge( 00114 SO<Iterator<SO<TriangleSet> > > triangleSets, 00115 bool indexed 00116 ); 00117 00118 static SO<TriangleSet> extrudeSurface( 00119 SO<TriangleSet> surface, 00120 const Vector& shift, 00121 bool createTopSurface, 00122 bool createBottomSurface 00123 ); 00124 00125 void computeSmoothingNormals( 00126 SO<TriangleSet> triangleSet, 00127 double maxAngle 00128 ); 00129 00130 static SO<Iterator<SO<TriangleSet> > > split( 00131 SO<TriangleSet> triangleSet, 00132 unsigned int maxElements = 10000, 00133 bool allowSplitX = true, 00134 bool allowSplitY = true, 00135 bool allowSplitZ = true 00136 ); 00137 00138 // TESTCODE 00139 static bool compare( 00140 SO<TriangleSet> a, 00141 SO<TriangleSet> b 00142 );*/ 00143 }; 00144 00145 } // namespace VRS 00146 00147 #endif