Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : BasicTopologyEntity.hpp
3 : : //
4 : : // Purpose : This is the interface to the BasicTopologyEntity base class.
5 : : // The main characteristic of specific BasicTopoEntities is
6 : : // that they form the basis of a topological description
7 : : // of a solid model. Having ordered lists of these would
8 : : // be a complete and unambiguous description of a solid
9 : : // model.
10 : : //
11 : : // The other characteristic of BasicTopoEntities is that
12 : : // they contain ("own") various mesh-related entities.
13 : : //
14 : : // Special Notes : Although each BasicTopologyEntity is associated with a set of
15 : : // GroupingEntity's, there is no member data in a BasicTopologyEntity
16 : : // that stores this list. Instead, this connection is
17 : : // established within the Directed Acyclic Graph (DAG)
18 : : // datastructure that captures the relationships between
19 : : // the various TopologyEntity's in the Model.
20 : : //
21 : : // Each BasicTopologyEntity (with the exception of RefVertex) is
22 : : // associated with a set of GroupingEntity's (GrE's). These
23 : : // GrE's are ordered in a list. Hence, the BasicTopologyEntity
24 : : // interface not only provides the ability to get the entire
25 : : // list of GrE's, but also allows you to ask for the "first"
26 : : // associated GrE. By extension, the GrE interface, provides
27 : : // a function to ask for the "next" GrE. The linked
28 : : // list of GrE's ends when the "next" function returns a
29 : : // NULL pointer.
30 : : //
31 : : // Each BasicTopologyEntity HasA GeometryEntity pointer. This
32 : : // pointer is stored explicitly as a member datum because
33 : : // Geometry Entity's are *not* represented by nodes in the
34 : : // Model DAG.
35 : : //
36 : : // This is a pure virtual class, to prevent instantiation.
37 : : //
38 : : // Creator : Malcolm J. Panthaki
39 : : //
40 : : // Creation Date : 10/14/96
41 : : //
42 : : // Owner : Malcolm J. Panthaki
43 : : //-------------------------------------------------------------------------
44 : :
45 : : #ifndef BASIC_TOPOLOGY_ENTITY_HPP
46 : : #define BASIC_TOPOLOGY_ENTITY_HPP
47 : :
48 : : // ********** BEGIN STANDARD INCLUDES **********
49 : : // ********** END STANDARD INCLUDES **********
50 : :
51 : : // ********** BEGIN CUBIT INCLUDES **********
52 : :
53 : : #include "CubitDefines.h"
54 : : #include "GeometryDefines.h"
55 : : #include "TopologyEntity.hpp"
56 : : #include "RefEntity.hpp"
57 : : #include "CubitBox.hpp"
58 : :
59 : : // ********** END CUBIT INCLUDES **********
60 : :
61 : : // ********** BEGIN FORWARD DECLARATIONS **********
62 : :
63 : : template <class X> class DLIList;
64 : : class GroupingEntity;
65 : : class SenseEntity;
66 : : class GeometryEntity;
67 : :
68 : : // ********** END FORWARD DECLARATIONS **********
69 : :
70 : : // ********** BEGIN MACRO DEFINITIONS **********
71 : : // ********** END MACRO DEFINITIONS **********
72 : :
73 : : // ********** BEGIN ENUM DEFINITIONS **********
74 : : // ********** END ENUM DEFINITIONS **********
75 : :
76 : : class CUBIT_GEOM_EXPORT BasicTopologyEntity : public TopologyEntity,
77 : : public RefEntity
78 : : {
79 : : public:
80 : 0 : static const char* get_class_name()
81 : 0 : { return "BasicTopologyEntity"; }
82 : :
83 : 0 : virtual const char* class_name() const
84 : 0 : { return get_class_name(); }
85 : :
86 : : virtual DagType dag_type() const = 0;
87 : :
88 : :
89 : : inline BasicTopologyEntity() ;
90 : : //- Default constructor.
91 : :
92 : : virtual ~BasicTopologyEntity();
93 : :
94 : : CubitStatus get_grouping_entity_list(
95 : : DLIList<GroupingEntity*>& groupingEntityList) const;
96 : : //R CubitStatus
97 : : //R- CUBIT_SUCCESS/FAILURE.
98 : : //O groupingEntityList
99 : : //O- The list of GroupingEntity pointers associated with this
100 : : //O- BasicTopologyEntity.
101 : : //- This function returns a list of pointers to GroupingEntity's
102 : : //- associated with this BasicTopologyEntity.
103 : :
104 : : inline GroupingEntity* get_first_grouping_entity_ptr() const;
105 : : //R GroupingEntity*
106 : : //R- The child GroupingEntity pointer or NULL if none.
107 : :
108 : : CubitStatus get_sense_entity_list( DLIList<SenseEntity*>& senseEntityList ) const;
109 : : //R- CubitStatus
110 : : //O senseEntityList
111 : : //O- The parent SenseEntity pointers for this BTE.
112 : :
113 : : inline SenseEntity* get_first_sense_entity_ptr() const;
114 : :
115 : : CubitStatus add_grouping_entity(GroupingEntity*) ;
116 : : //R CubitStatus
117 : : //R- CUBIT_SUCCESS/FAILURE.
118 : : //I GroupingEntity*
119 : : //I- A pointer to a GroupingEntity which will be added to
120 : : //I- the list of grouping entities associated with this BasicTopologyEntity.
121 : : //- This function is used to add a GroupingEntity to the
122 : : //- list of grouping entities associated with this BasicTopologyEntity.
123 : :
124 : : CubitStatus remove_grouping_entity(GroupingEntity*);
125 : : //R CubitStatus
126 : : //R- CUBIT_SUCCESS/FAILURE.
127 : : //I GroupingEntity*
128 : : //I- A pointer to a GroupingEntity which will be removed from
129 : : //I- the list of grouping entities associated with this BasicTopologyEntity.
130 : : //- This function is used to remove a GroupingEntity from the
131 : : //- list of grouping entities associated with this BasicTopologyEntity.
132 : :
133 : : CubitStatus set_grouping_entity_list( DLIList<GroupingEntity*>& new_list,
134 : : DLIList<GroupingEntity*>& removed_list );
135 : : //R CubitStatus
136 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
137 : : //I new_list
138 : : //I- The list of child grouping entities for this BTE
139 : : //O removed_list
140 : : //O- Any grouping entities disconnected from this BTE
141 : : //- Make the child list of grouping entities for this BTE be
142 : : //- the passed list, in the same order as the passed list.
143 : : //- Pass back any grouping entities that were children of this
144 : : //- BTE but were not in new_list.
145 : :
146 : : CubitStatus add_sense_entity(SenseEntity*);
147 : : //R CubitStatus
148 : : //R- CUBIT_SUCCESS/FAILURE.
149 : : //I SenseEntity*
150 : : //I- A pointer to a SenseEntity which will be added to
151 : : //I- the list of sense entities associated with this BasicTopologyEntity.
152 : : //- This function is used to add a SenseEntity to the
153 : : //- list of sense entities associated with this BasicTopologyEntity.
154 : :
155 : : CubitStatus remove_sense_entity(SenseEntity*);
156 : : //R CubitStatus
157 : : //R- CUBIT_SUCCESS/FAILURE.
158 : : //I SenseEntity*
159 : : //I- A pointer to a SenseEntity which will be removed from
160 : : //I- the list of sense entities associated with this BasicTopologyEntity.
161 : : //- This function is used to remove a SenseEntity from the
162 : : //- list of sense entities associated with this BasicTopologyEntity.
163 : :
164 : : SenseEntity* find_sense_entity(GroupingEntity* gpe) const;
165 : : //R SenseEntity*
166 : : //R- A parent SenseEntity of this BasicTopologEntity, or NULL.
167 : : //I GroupingEntity*
168 : : //I- A immediate parent grouping entity of this basic topology entity.
169 : : //- Find the sense entity connecting this BTE to the passed
170 : : //- grouping entity. Returns NULL if more than one sense entity.
171 : :
172 : : SenseEntity* find_sense_entity(BasicTopologyEntity* bte) const;
173 : : //R SenseEntity*
174 : : //R- A parent SenseEntity of this BasicTopologEntity, or NULL.
175 : : //I BasicTopologyEntity*
176 : : //I- A immediate parent basic topology entity of this basic
177 : : //I- topology entity.
178 : : //- Find the sense entity connecting this BTE to the passed
179 : : //- BTE. Returns NULL if more than one sense entity.
180 : :
181 : : CubitStatus get_sense_entities( DLIList<SenseEntity*>& result,
182 : : GroupingEntity* in_this);
183 : : CubitStatus get_sense_entities( DLIList<SenseEntity*>& result,
184 : : BasicTopologyEntity* in_this);
185 : : //R CubitStatus
186 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
187 : : //I in_this
188 : : //I- Subset of parent sense entities joining this to 'in_this'
189 : : //I- Must be an immediate parent.
190 : : //O result
191 : : //O- List of parent sense entities.
192 : : //- Get parent sense entities, optionally limiting the result
193 : : //- to the subset connecting this to a passed entity.
194 : :
195 : : CubitBoolean is_nonmanifold( GroupingEntity* in_this_parent );
196 : : //R CubitBoolean
197 : : //R- CUBIT_TRUE/CUBIT_FALSE
198 : : //I in_this_parent
199 : : //I- Immediate parent grouping entity to test with respect to.
200 : : //- Result is false if there is exactly one sense entity
201 : : //- connecting this entity to the parent grouping entity.
202 : : //- Result is true if there are more than one sense entities
203 : : //- connecting this entity to the parent grouping entity.
204 : : //- Result is undefined if there are no sense entities connecting
205 : : //- this entity to the passed parent.
206 : :
207 : : GeometryEntity* get_geometry_entity_ptr() const;
208 : : //R GeometryEntity*
209 : : //R- A pointer to the GeometryEntity to which the current
210 : : //R- BasicTopologyEntity points.
211 : : //- This function returns a pointer to the GeometryEntity
212 : : //- which the current BasicTopologyEntity points to.
213 : :
214 : : GeometryType geometry_type() const;
215 : : //R GeometryType
216 : : //R- An enumerated type describing the underlying geometry
217 : : //R- representation
218 : : //- This function returns the type of geometry representation
219 : : //- underlying this entity
220 : :
221 : : virtual CubitBox bounding_box();
222 : : //- Returns the bounding box of this entity
223 : :
224 : : virtual CubitBox unmerged_bounding_box();
225 : : //- Returns the bounding box of all of the bridges in this entity if
226 : : //- it is a merged entity
227 : :
228 : : CubitStatus set_geometry_entity_ptr(GeometryEntity* geometryEntityPtr) ;
229 : : //R CubitStatus
230 : : //R- CUBIT_SUCCESS/FAILURE
231 : : //I geometryEntityPtr
232 : : //I- A pointer to the GeometryEntity that will be associated with
233 : : //I- this RefEntity.
234 : : //- This function sets the GeometryEntity associated with this
235 : : //- RefEntity.
236 : : //- CUBIT_FAILURE is returned if a problem was detected.
237 : :
238 : : double measure();
239 : : //R double
240 : : //R- The numeric value of the measure (its units depend on the dimension
241 : : //R- of the RefEntity being "measured")
242 : : //- A generic geometric extent function.
243 : : //- Returns volume for RefVolumes, area for RefFaces, length for RefEdge,
244 : : //- and 1.0 for RefVertices
245 : :
246 : : virtual int get_parents( DLIList<TopologyEntity*>* list = 0 ) const;
247 : : virtual int get_children(DLIList<TopologyEntity*>* list = 0 ) const;
248 : :
249 : : protected:
250 : : virtual CubitBoolean query_append_parents( DLIList<TopologyEntity*>& list );
251 : : virtual CubitBoolean query_append_children(DLIList<TopologyEntity*>& list );
252 : :
253 : : virtual CubitStatus remove_child_link(TopologyEntity* entity_ptr);
254 : :
255 : : CubitStatus disconnect_all_children( DLIList<TopologyEntity*>* children = 0 );
256 : : CubitStatus disconnect_all_parents( DLIList<TopologyEntity*>* parents = 0 );
257 : :
258 : : private:
259 : :
260 : : SenseEntity* firstSenseEntity;
261 : : SenseEntity* lastSenseEntity;
262 : : GroupingEntity* firstGroupingEntity;
263 : : GroupingEntity* lastGroupingEntity;
264 : :
265 : : BasicTopologyEntity( const BasicTopologyEntity& );
266 : : void operator=( const BasicTopologyEntity& );
267 : : } ;
268 : :
269 : :
270 : : // ********** BEGIN INLINE FUNCTIONS **********
271 : 78626 : BasicTopologyEntity::BasicTopologyEntity()
272 : : : firstSenseEntity(0),
273 : : lastSenseEntity(0),
274 : : firstGroupingEntity(0),
275 [ + - ]: 78626 : lastGroupingEntity(0)
276 : 78626 : {}
277 : :
278 : 1364 : SenseEntity* BasicTopologyEntity::get_first_sense_entity_ptr() const
279 : 1364 : { return firstSenseEntity; }
280 : :
281 : 117834 : GroupingEntity* BasicTopologyEntity::get_first_grouping_entity_ptr() const
282 : 117834 : { return firstGroupingEntity; }
283 : :
284 : : // ********** END INLINE FUNCTIONS **********
285 : :
286 : : // ********** BEGIN FRIEND FUNCTIONS **********
287 : : // ********** END FRIEND FUNCTIONS **********
288 : :
289 : : // ********** BEGIN EXTERN FUNCTIONS **********
290 : : // ********** END EXTERN FUNCTIONS **********
291 : :
292 : : #endif
293 : :
294 : :
|