|
44 | 44 | // DOCUMENTATION ON MAIN PAGE
|
45 | 45 | //===========================================================================
|
46 | 46 |
|
47 |
| -/// \page compositemodel GoTools CompositeModel |
48 |
| -/// |
49 |
| -/// Contains tools for representing composite models. |
50 |
| -/// |
51 |
| -/// \if null |
52 |
| -/// An overview documentation for this module can be found in |
53 |
| -/// \ref compositemodel_doc. |
54 |
| -/// \endif |
55 |
| -/// |
56 |
| -/// This module depends on the following GoTools modules: |
57 |
| -/// - GoTools Core |
58 |
| -/// - GoTools Implicitization |
59 |
| -/// - GoTools Intersection |
60 |
| -/// - GoTools Parametrization |
61 |
| -/// - GoTools Igeslib |
62 |
| -/// - GoTools Topology |
63 |
| -/// |
64 |
| -/// and the following modules external to GoTools: |
65 |
| -/// - SISL (SINTEF) |
66 |
| -/// - TTL (SINTEF) |
67 |
| -/// - The newmat matrix library, which is freely available from <a |
68 |
| -/// href ="http://www.robertnz.net/">www.robertnz.net</a>. |
69 |
| -/// |
70 |
| -/// SISL, TTL and newmat is included for convenience. |
71 |
| - |
72 |
| -// /// \namespace Go |
73 |
| -// /// The Go namespace is the common namespace for all GoTools modules. |
74 |
| - |
75 |
| -// /// \namespace hetriang |
76 |
| -// /// Namespace for classes in the half-edge data structure. |
| 47 | +/** |
77 | 48 |
|
| 49 | +\page compositemodel GoTools CompositeModel |
| 50 | +
|
| 51 | +Contains tools for representing composite models. |
| 52 | +
|
| 53 | +This module depends on the following GoTools modules: |
| 54 | +- GoTools Core |
| 55 | +- GoTools Implicitization |
| 56 | +- GoTools Intersection |
| 57 | +- GoTools Parametrization |
| 58 | +- GoTools Igeslib |
| 59 | +- GoTools Topology |
| 60 | +
|
| 61 | +and the following modules external to GoTools: |
| 62 | +- SISL (SINTEF) |
| 63 | +- TTL (SINTEF) |
| 64 | +- The newmat matrix library, which is freely available from <a |
| 65 | +href ="http://www.robertnz.net/">www.robertnz.net</a>. |
| 66 | +
|
| 67 | +SISL, TTL and newmat is included for convenience. |
| 68 | +
|
| 69 | +\section comp_sec1 Brep topology |
| 70 | +A CAD model can normally not be represented by one geometry entity like |
| 71 | +the ones in gotools-core. The need for sets of entities, adjacency analysis and |
| 72 | +representation of adjacency arises. There is a need for topological structures. |
| 73 | +
|
| 74 | +\link Go::Body \endlink is a boundary represented solid model. It is a virtual volume limited |
| 75 | +by one or more shells, one outer and possibly a number of inner ones. The |
| 76 | +shells are represented by the class SurfaceModel which is also the entity used |
| 77 | +to represent a face set. In addition to being a topological entity, \link Go::SurfaceModel \endlink |
| 78 | +provides an interface which views the set of surfaces as one entity. Thus, an |
| 79 | +operation like closest point computation can be performed without caring |
| 80 | +about which surface is closest to the point. |
| 81 | +
|
| 82 | +The surface model consists of a set of faces represented by the class |
| 83 | + \link Go::ftSurface \endlink. The face represents the abstract idea of a bounded surface, but it also |
| 84 | +has a pointer to the geometric representation of this surface. The geometric |
| 85 | +surface is a \link Go::ParamSurface \endlink, it may be a NURBS surface, an elementary surface |
| 86 | +or a trimmed version thereof. The face is bounded by one or more loops, |
| 87 | +one outer and possibly a number of inner ones. The inner loops represents |
| 88 | +holes in the surface. Then the geometric surface will always be a \link Go::BoundedSurface \endlink. All |
| 89 | +faces have an outer loop which either represents an outer trimming curve in |
| 90 | +the case of a BoundedSurface or the surface boundary. |
| 91 | +
|
| 92 | +A loop consists of a number of edges represented by ftEdge. The edges |
| 93 | +have a geometric representation by a ParamCurve. This is the level where |
| 94 | +adjacency information related to faces or surfaces is stored. An ftEdge is a |
| 95 | +half edge. It knows the face to which it belongs and the geometry of the curve |
| 96 | +it corresponds to. This curve is normally a CurveOnSurface curve. Then, |
| 97 | +both parameter and geometry information are available. The ftEdge has a |
| 98 | +pointer to a twin edge. This edge belongs to the adjacent ftSurface meeting |
| 99 | +the current one along the boundary represented by the current ftEdge. This |
| 100 | +construction is a very flexible one, but it does not automatically ensure C 0 |
| 101 | +continuity as the curves pointed at by the two twin edges, are normally not |
| 102 | +the same. |
| 103 | +An edge is limited by two vertices which has a geometric representation |
| 104 | +as a point. A vertex has knowledge about all edges meeting in this point. |
| 105 | +
|
| 106 | +\section comp_sec2 CompositeModel |
| 107 | +SurfaceModel represents the shell in a boundary represented geometry model, |
| 108 | +but it is also the entity that is used to view a surface set as one unity. In |
| 109 | +this context, it inherits the abstract superclass \link Go::CompositeModel \endlink that defines |
| 110 | +an interface for a unity of geometry entities of the same type. All composite |
| 111 | +models can |
| 112 | +Report how many entities it consist of |
| 113 | +\li Evaluate a given entity in a given parameter or parameter pair |
| 114 | +\li Compute the closest point from a given pont to the entity set |
| 115 | +\li Compute the extremal point of the entity set in a given direction |
| 116 | +\li Intersect itself with a plane |
| 117 | +\li Intersect itself with a line |
| 118 | +\li Compute the bounding box surrounding the entity set |
| 119 | +\li Check whether one specified entity is degenerate |
| 120 | +\li Turn parameter directions corresponding to one or all entities |
| 121 | +\li Tesselate itself |
| 122 | +\li Clone itself |
| 123 | +
|
| 124 | +Tesselation is performed in the gotools-core submodule tesselator. The methods |
| 125 | +here expect information about the tesselation resulution. For each parameter |
| 126 | +direction in the object, the number of tringles or line strips must |
| 127 | +be specified. The resolution is defined from the composite model. This can |
| 128 | +either be done setting a resolution for all entities or by a density parameter |
| 129 | +that governs the resolution. The composite model tesselation routines return |
| 130 | +a vector of shared pointers to a GeneralMesh. The type of meshes used for the |
| 131 | +concrete tesselation results are \link Go::LineStrip \endlink, |
| 132 | + \link Go::RegularMesh \endlink and \link Go::GenericTriMesh \endlink. |
| 133 | +
|
| 134 | +The control polygon of the composite model or a selected subset of the |
| 135 | +model may be tesselated. In that case the output mesh is represented as a |
| 136 | + \link Go::LineCloud \endlink. LineCloud is an entity in gotools-core/geometry. |
| 137 | +
|
| 138 | +\subsection comp_sec2_2 CompositeCurve |
| 139 | +A \link Go::CompositeCurve composite curve \endlink |
| 140 | +is an ordered collection of curves. The class expects a set |
| 141 | +of curves and will orient them order them in a sequence. The curve set should |
| 142 | +preferably be continuous, but also discontinuous set may be represented. |
| 143 | +
|
| 144 | +A composite curve will contain a number of \link Go::ParamCurves \endlink, ordering |
| 145 | +information and continuity information. The curve sequence will be parameterized as a |
| 146 | +unity. Curve indices follow the indices for the curves given as |
| 147 | +input to the object. The class has the following type specific functionality: |
| 148 | +\li Fetch an individual curve |
| 149 | +\li Fetch the parameter interval of the composite curve |
| 150 | +\li Given a parameter value of one individual curve, get the corresponding parameter |
| 151 | +value in the composite curve, and vice versa. Given a |
| 152 | +parameter value of the composite curve, get the index and parameter |
| 153 | +value of the individual curve. |
| 154 | +\li Evaluate the composite curve as one unity |
| 155 | +Hit test. Compute the closest point in the composite curve to a given |
| 156 | +point along a given line |
| 157 | +\li Append a new curve to the composite curve |
| 158 | +
|
| 159 | +All the curves in the composite curve can be tesselated with respect to a |
| 160 | +default value, or a value given by the application, or a given subset of the |
| 161 | +composite curve can be tesselated with respect to the defined resolution. It |
| 162 | +is also possible to set the number of line segments for each curve relative |
| 163 | +to a given density parameter. Then the length of each line segment should |
| 164 | +roughly approximate this density. The density should be set according to |
| 165 | +the total size of the model. An upper bound of the tesselation size exists, |
| 166 | +but a large model combined with a small density will still lead to a heavy |
| 167 | +visualization model. |
| 168 | +
|
| 169 | +\subsection comp_sec2_3 CurveModel |
| 170 | +A \link Go::CurveModel curve model \endlink is an incomplete class |
| 171 | +inheriting a composite model. Not all |
| 172 | +the functionality defined in CompositeModel is implemented in this class. Its |
| 173 | +main purpose is to take a set of curves, for instance read from an IGES file, |
| 174 | +compute the topology of the curve set, use the topology information to order |
| 175 | +the curves into sequences, and return these sequences as composite curves. |
| 176 | +
|
| 177 | +Nevertheless, a curve model may be evaluated, tesselated and we can |
| 178 | +fetch a particular curve in the set by index or find the associated index given |
| 179 | +a curve. The index corresponds to the order of the input curves to this class. |
| 180 | +It is also possible to compute the bounding box surronding the curve set and |
| 181 | +the curve model may copy itself. |
| 182 | +
|
| 183 | +\subsection comp_sec2_4 SurfaceModel |
| 184 | +A \link Go::SurfaceModel surface model \endlink represents a surface set or a shell. |
| 185 | +It contains a number |
| 186 | +of parametric surfaces and topology information representing adjacency |
| 187 | +between surfaces in the set. The input surfaces to a surface model may be |
| 188 | +given as parametric surfaces or faces, i.e. \link Go::ftSurface \endlink. |
| 189 | +In the latter case, the |
| 190 | +adjacency information may be given or not. A surface model may consist of |
| 191 | +several disjoint surface sets. |
| 192 | +SurfaceModel has some specific functionality: |
| 193 | +\li Reset topology tolerances and recompute adjacency information |
| 194 | +Return a specified surface or face |
| 195 | +\li Perform intersection with a line or a plane and represent the output in |
| 196 | +a surface specific manner |
| 197 | +\li Intersect the surface set with a plane, and trim the result with respect |
| 198 | +to the orientation of the plane |
| 199 | +\li Hit test. Compute the closest point in the surface set to a given point |
| 200 | +along a given line |
| 201 | +\li Append one or more new faces to the surface set |
| 202 | +\li Append another surface set to the current one |
| 203 | +\li Return information about the number of boundary loops in the surface |
| 204 | +set. One boundary loop will correspond to either a continuous subset |
| 205 | +of surface or a hole in the surface set. |
| 206 | +\li Return informations of gaps between surfaces in the set |
| 207 | +\li Return informations of kinks between surfaces in the set |
| 208 | +\li Return informations of sharp edges between surfaces in the set |
| 209 | +\li Triangulate the surface set with respect to a density parameter, and join |
| 210 | +the individual triangulations for each surface into one triangulation. |
| 211 | +\li Fetch information about neighbouring surfaces with inconsistent direc- |
| 212 | +tion of the surface normals |
| 213 | +\li Fetch all vertices in the surface set |
| 214 | +\li Fetch vertices lying at the boundaries of the surface set |
| 215 | +
|
| 216 | +Some functionality is special for isogeometric models where each surface |
| 217 | +is expected to be a non-trimmed spline surface and the surfaces should lie in |
| 218 | +a corner-to-corner configuration |
| 219 | +
|
| 220 | +\li Check if all surfaces are splines |
| 221 | +\li Check if the surface configuration is corner-to-corner |
| 222 | +\li Ensure a corner-to-corner configuration if this is not the case. The |
| 223 | +function applies only to spline surfaces |
| 224 | +\li Ensure that the spline surfaces in the model shares the spline space at |
| 225 | +common boundaries |
| 226 | +
|
| 227 | +All the surfaces in the surface model can be tesselated with respect to a |
| 228 | +default value or a pair of values given by the application, or a given subset |
| 229 | +of the surface model can be tesselated with respect to this resolution. The |
| 230 | +application can also specify the approximate number of quads in the tessela- |
| 231 | +tion. Each quad are divided into two triangles. Then a long and thin surface |
| 232 | +will get more triangles in the long direction. It is also possible to set the |
| 233 | +number of triangles in each parameter direction for each surface relative to |
| 234 | +a given density parameter. Then the length of each triangle should roughly |
| 235 | +approximate this density. The density should be set according to the total |
| 236 | +size of the model. An upper bound of the tesselation size exists, but a large |
| 237 | +model combined with a small density will still lead to a heavy visualization |
| 238 | +model. |
| 239 | +
|
| 240 | +*/ |
78 | 241 | #endif // _COMPOSITEMODEL_DOXYMAIN_H
|
0 commit comments