Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : Loop.hpp
3 : : //
4 : : // Purpose : Represents a loop of edges of a face of a model.
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Xuechen Liu
9 : : //
10 : : // Creation Date : 08/02/96
11 : : //
12 : : // Owner : Malcolm J. Panthaki
13 : : //-------------------------------------------------------------------------
14 : :
15 : : #ifndef LOOP_HPP
16 : : #define LOOP_HPP
17 : :
18 : : // ********** BEGIN STANDARD INCLUDES **********
19 : : // ********** END STANDARD INCLUDES **********
20 : :
21 : : // ********** BEGIN CUBIT INCLUDES **********
22 : : #include "CubitDefines.h"
23 : : #include "GeometryDefines.h"
24 : : #include "CubitBox.hpp"
25 : : #include "GroupingEntity.hpp"
26 : : // ********** END CUBIT INCLUDES **********
27 : :
28 : : // ********** BEGIN FORWARD DECLARATIONS **********
29 : : class CoEdge;
30 : : class RefFace;
31 : : class RefEdge;
32 : : class RefVertex;
33 : : class CubitVector;
34 : : class LoopSM;
35 : : // ********** END FORWARD DECLARATIONS **********
36 : :
37 [ - + ]: 42592 : class CUBIT_GEOM_EXPORT Loop : public GroupingEntity
38 : : {
39 : : public :
40 : :
41 : : Loop() ;
42 : : //- The default constructor.
43 : :
44 : : Loop(LoopSM* OSMEPtr) ;
45 : : //- The constructor with a pointer to an other solid model entity.
46 : :
47 : 193856 : DagType dag_type() const { return DagType::loop_type(); }
48 : :
49 : : LoopType loop_type() const;
50 : : //R LoopType
51 : : //- Gets the type of this loop. See LoopType enum for more details.
52 : :
53 : : CubitStatus get_angle_metric(double& angle_metric);
54 : : //R CubitStatus
55 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
56 : : //O angle_metric
57 : : //O- Angle metric value
58 : : //- Gets the angle metric for this Loop. The value of the angle
59 : : //- metric returned is
60 : : //- ( sum(interior_angles_at_vertices)/pi - n ).
61 : : //- For planar faces this metric is 2.0 for internal
62 : : //- Loops and -2.0 for
63 : : //- external Loops.
64 : :
65 : : CubitStatus ordered_ref_edges( DLIList<RefEdge*>& ordered_edge_list );
66 : : //R CubitStatus
67 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
68 : : //O ordered_edge_list
69 : : //O- Ordered list of ref edges with respect to this loop.
70 : : //- This function works through the co_edges to get the correct
71 : : //- ref_edges with respect to this loop.
72 : :
73 : : CubitStatus ordered_co_edges (DLIList<CoEdge*>& ordered_coedge_list);
74 : : //R CubitStatus
75 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
76 : : //O ordered_edge_list
77 : : //O- Ordered list of co edges with respect to this loop.
78 : : //- This function is differnt than the simple co_edges function.
79 : : //- You must use this function if you want the co_edges to respect
80 : : //- the loop in their list.
81 : :
82 : : RefFace* get_ref_face_ptr( );
83 : : //R RefFace*
84 : : //R- A pointer to the parent RefFace.
85 : :
86 : : CoEdge* get_co_edge_ptr( RefEdge* ref_edge_ptr );
87 : : //R CoEdge*
88 : : //R- A pointer to a child CoEdge
89 : : //I ref_edge_ptr
90 : : //I- A pointer to a child RefEdge
91 : : //- This method returns the child CoEdge connecting the
92 : : //- passed RefEdge to this Loop. If the RefEdge occurs
93 : : //- more than once in the Loop, only the first CoEdge
94 : : //- encountered will be returned.
95 : :
96 : :
97 : : CubitBox bounding_box();
98 : : //R CubitBox
99 : : //R- The bounding box of this loop.
100 : : //- This method returns the bounding box of a Loop
101 : : //- as the union of the bounding boxes of its child
102 : : //- RefEdges.
103 : :
104 : : CubitStatus tangents( RefVertex* vertex_ptr,
105 : : CubitVector& first_vector,
106 : : CubitVector& second_vector ) ;
107 : : //R CubitStatus
108 : : //I veretx_ptr
109 : : //I- A pointer to a vertex in this loop.
110 : : //O first_vector
111 : : //O- For the first edge on the loop which contains the passed
112 : : //O- vertex, this is (an approximation of) the tangent of that
113 : : //O- edge at the location of the vertex, pointing outwards from
114 : : //O- the vertex.
115 : : //O second_vector
116 : : //O- For the second edge on the loop which contains the passed
117 : : //O- vertex, this is (an approximation of) the tangent of that
118 : : //O- edge at the location of the vertex, pointing outwards from
119 : : //O- the vertex.
120 : : //- Get the tangent vectors of the loop at the location of the
121 : : //- passed vertex, pointing outwards from the vertex.
122 : : //-
123 : : //- NOTE: Both returned vectors point outward from the vertex.
124 : : //- To have both tangents pointing in the direction of
125 : : //- the loop, reverse first_vector.
126 : :
127 : : CubitBoolean validate() ;
128 : : //R CubitBoolean
129 : : //R- CUBIT_TRUE if the Loop is topologically valid.
130 : : //R- CUBIT_FALSE otherwise.
131 : : //- Validate the Loop.
132 : : //- Returns CubitFalse if:
133 : : //- * The Loop has no CoEdges.
134 : : //- * Any CoEdge has no child RefEdge.
135 : : //- * Any CoEdge has an undefined sense (sense is CUBIT_UNKNOWN).
136 : : //- * The Loop is not topologically closed.
137 : : //- * The sense of a CoEdge does not correspond to
138 : : //- the order of the vertices on its child RefEdge.
139 : : //- * The Loop has two child RefEdges which form a topological
140 : : //- figure-eight (there is only one child vertex of the Loop.)
141 : :
142 : : LoopSM* get_loop_sm_ptr() const;
143 : :
144 : : CubitBoolean about_spatially_equal( DLIList<CoEdge*>& other_loop_coedges,
145 : : CubitSense relative_sense,
146 : : double tolerance_factor = 1.0,
147 : : CubitBoolean notify_refEntity
148 : : = CUBIT_FALSE );
149 : :
150 : :
151 : : protected:
152 : :
153 : : private:
154 : : Loop( const Loop& );
155 : : void operator=( const Loop&);
156 : : } ;
157 : :
158 : : // ********** BEGIN INLINE FUNCTIONS **********
159 : : // ********** END INLINE FUNCTIONS **********
160 : :
161 : : // ********** BEGIN FRIEND FUNCTIONS **********
162 : : // ********** END FRIEND FUNCTIONS **********
163 : :
164 : : // ********** BEGIN EXTERN FUNCTIONS **********
165 : : // ********** END EXTERN FUNCTIONS **********
166 : :
167 : : #endif
168 : :
|