Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : GroupingEntity.hpp
3 : : //
4 : : // Purpose : This file contains the declarations of the class
5 : : // GroupingEntity.
6 : : // This class is the base class of all the grouping entities
7 : : // Body, Shell, Loop, Chain.
8 : : //
9 : : // Special Notes : Each GroupingEntity is associated with a set of
10 : : // SenseEntity's (SE's). These SE's are ordered in a
11 : : // list. Hence the GroupingEntity interface
12 : : // not only provides the ability to get the entire list
13 : : // of SE's, but also allows you to ask for the "first"
14 : : // associated SE. The SE interface thus provides a
15 : : // function to ask for the "next" SE. The linked
16 : : // list of SE's ends when the next function returns a
17 : : // NULL pointer.
18 : : //
19 : : // The same is true of GroupingEntities themselves. They
20 : : // are an ordered list in the DAG, implying that a next()
21 : : // function needs to be provided.
22 : : //
23 : : // This is a pure virtual class.
24 : : //
25 : : // Creator : Xuechen Liu
26 : : //
27 : : // Creation Date : 07/11/96
28 : : //
29 : : // Owner : Malcolm J. Panthaki
30 : : //-------------------------------------------------------------------------
31 : :
32 : : #ifndef GROUPING_ENTITY_HPP
33 : : #define GROUPING_ENTITY_HPP
34 : :
35 : : // ********** BEGIN STANDARD INCLUDES **********
36 : : // ********** END STANDARD INCLUDES **********
37 : :
38 : : // ********** BEGIN CUBIT INCLUDES **********
39 : : #include "CubitDefines.h"
40 : : #include "TopologyEntity.hpp"
41 : : // ********** END CUBIT INCLUDES **********
42 : :
43 : : // ********** BEGIN MACROS DEFINITIONS **********
44 : : // ********** END MACROS DEFINITIONS **********
45 : :
46 : : // ********** BEGIN FORWARD DECLARATIONS **********
47 : : class SenseEntity;
48 : : class BasicTopologyEntity;
49 : :
50 : : // ********** END FORWARD DECLARATIONS **********
51 : :
52 : : class CUBIT_GEOM_EXPORT GroupingEntity : public TopologyEntity
53 : : {
54 : : public :
55 : :
56 : : inline GroupingEntity() ;
57 : : //- The default constructor
58 : :
59 : : virtual ~GroupingEntity();
60 : :
61 : : inline SenseEntity* get_first_sense_entity_ptr();
62 : : inline SenseEntity* get_last_sense_entity_ptr();
63 : : //R SenseEntity*
64 : : //R- A pointer to the first of the list of SenseEntitys pointed
65 : : //R- to by this object.
66 : : //- This function returns a pointer to the first of the list of
67 : : //- SenseEntity's pointed to by this GroupingEntity.
68 : :
69 : : CubitStatus get_sense_entity_list(DLIList<SenseEntity*>& list);
70 : : //R CubitStatus
71 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
72 : : //O list
73 : : //O- A list of SenseEntity pointers.
74 : : //- This function returns a list of SenseEntity pointers
75 : : //- associated with this GroupingEntity. If there are none, then
76 : : //- CUBIT_FAILURE is returned.
77 : :
78 : : CubitStatus set_sense_entity_list(DLIList<SenseEntity*>& list,
79 : : DLIList<SenseEntity*>& removed);
80 : : //R CubitStatus
81 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
82 : : //I list
83 : : //I- New set of child SenseEntitys for this GroupingEntity.
84 : : //O removed
85 : : //O- List of child SenseEntitys removed from this GroupingEntity
86 : : //- Change/reorder child list.
87 : : //- It is an error for any input SenseEntity to have a parent
88 : : //- GroupingEntity unless that parent GroupingEntity is this.
89 : :
90 : :
91 : : inline GroupingEntity* next();
92 : : //R GroupingEntity*
93 : : //R- A GroupingEntity pointer
94 : : //- This function returns a pointer to the GroupingEntity that is
95 : : //- a child of this one in the DAG. If it is the end of the line,
96 : : //- then a NULL pointer is returned.
97 : :
98 : : inline GroupingEntity* previous();
99 : : //R GroupingEntity*
100 : : //R- A GroupingEntity pointer
101 : : //- This function returns a pointer to the GroupingEntity that is
102 : : //- a child of this one in the DAG. If it is the end of the line,
103 : : //- then a NULL pointer is returned.
104 : :
105 : : inline BasicTopologyEntity* get_basic_topology_entity_ptr();
106 : : //R BasicTopologyEntity*
107 : : //R- A pointer to the BasicTopologyEntity which the current grouping
108 : : //R- entity is associated with.
109 : : //- This function returns a pointer to the BasicTopologyEntity which
110 : : //- the current sense entity is associated with.
111 : :
112 : : CubitStatus add_sense_entity(SenseEntity *sense_entity_ptr,
113 : : SenseEntity *after_this = 0) ;
114 : : //R CubitStatus
115 : : //I senseEntityPtr
116 : : //I- The pointer to a SenseEntity which will be added to the
117 : : //I- list of sense entities of the grouping entity.
118 : : //- This function is used to add a SenseEntity to the list of
119 : : //- sense entities of a grouping entity. If the input sense entity
120 : : //- is not the appropriate type, nothing is done and the function
121 : : //- returns CUBIT_FAILURE. If the sense entity is added successfully,
122 : : //- the function returns CUBIT_SUCCESS.
123 : :
124 : : CubitStatus remove_sense_entity(SenseEntity* sense_entity_ptr);
125 : :
126 : : void reverse_direction();
127 : : // reverse order and sense of child sense entities
128 : :
129 : : virtual int get_parents( DLIList<TopologyEntity*>* list = 0 ) const;
130 : : virtual int get_children(DLIList<TopologyEntity*>* list = 0 ) const;
131 : :
132 : : protected :
133 : :
134 : : virtual CubitBoolean query_append_parents( DLIList<TopologyEntity*>& list );
135 : : virtual CubitBoolean query_append_children(DLIList<TopologyEntity*>& list );
136 : :
137 : : virtual CubitStatus remove_child_link( TopologyEntity* child_ptr );
138 : :
139 : : CubitStatus disconnect_all_children( DLIList<TopologyEntity*>* children = 0 );
140 : : CubitStatus disconnect_all_parents( DLIList<TopologyEntity*>* parents = 0 );
141 : :
142 : : private :
143 : :
144 : : // for use by BasicTopologyEntity only
145 : : friend class BasicTopologyEntity;
146 : : inline CubitStatus remove_from_list();
147 : : inline void set_basic_topology_entity_ptr( BasicTopologyEntity* );
148 : : inline CubitStatus insert_after(GroupingEntity* next);
149 : : inline CubitStatus insert_before(GroupingEntity* prev);
150 : :
151 : : BasicTopologyEntity* myParent;
152 : : GroupingEntity* nextInParent;
153 : : GroupingEntity* prevInParent;
154 : : SenseEntity* firstSenseEntity;
155 : : SenseEntity* lastSenseEntity;
156 : :
157 : : GroupingEntity( const GroupingEntity& );
158 : : void operator=( const GroupingEntity& );
159 : : };
160 : :
161 : : // ********** BEGIN HELPER CLASSES **********
162 : : // ********** END HELPER CLASSES **********
163 : :
164 : : // ********** BEGIN INLINE FUNCTIONS **********
165 : :
166 : 58215 : inline GroupingEntity::GroupingEntity()
167 : : : myParent(0),
168 : : nextInParent(0),
169 : : prevInParent(0),
170 : : firstSenseEntity(0),
171 : 58215 : lastSenseEntity(0)
172 : 58215 : {}
173 : :
174 : 20425 : inline SenseEntity* GroupingEntity::get_first_sense_entity_ptr()
175 : 20425 : { return firstSenseEntity; }
176 : :
177 : 20370 : inline SenseEntity* GroupingEntity::get_last_sense_entity_ptr()
178 : 20370 : { return lastSenseEntity; }
179 : :
180 : 680112 : inline GroupingEntity* GroupingEntity::next()
181 : 680112 : { return nextInParent; }
182 : :
183 : 34190 : inline GroupingEntity* GroupingEntity::previous()
184 : 34190 : { return prevInParent; }
185 : :
186 : 190431 : inline BasicTopologyEntity* GroupingEntity::get_basic_topology_entity_ptr()
187 : 190431 : { return myParent; }
188 : :
189 : 34190 : inline CubitStatus GroupingEntity::remove_from_list()
190 : : {
191 [ + + ]: 34190 : if (nextInParent)
192 : 545 : nextInParent->prevInParent = prevInParent;
193 [ + + ]: 34190 : if (prevInParent)
194 : 227 : prevInParent->nextInParent = nextInParent;
195 : 34190 : prevInParent = nextInParent = 0;
196 : 34190 : return CUBIT_SUCCESS;
197 : : }
198 : :
199 : 1184 : inline CubitStatus GroupingEntity::insert_after( GroupingEntity* next_ptr )
200 : : {
201 : 1184 : prevInParent = next_ptr;
202 : 1184 : nextInParent = next_ptr->nextInParent;
203 [ + + ]: 1184 : if (nextInParent)
204 : 192 : nextInParent->prevInParent = this;
205 : 1184 : next_ptr->nextInParent = this;
206 : 1184 : return CUBIT_SUCCESS;
207 : : }
208 : :
209 : 183 : inline CubitStatus GroupingEntity::insert_before( GroupingEntity* prev_ptr )
210 : : {
211 : 183 : nextInParent = prev_ptr;
212 : 183 : prevInParent = prev_ptr->prevInParent;
213 [ - + ]: 183 : if (prevInParent)
214 : 0 : prevInParent->nextInParent = this;
215 : 183 : prev_ptr->prevInParent = this;
216 : 183 : return CUBIT_SUCCESS;
217 : : }
218 : :
219 : 89689 : inline void GroupingEntity::set_basic_topology_entity_ptr( BasicTopologyEntity* bte_ptr )
220 : : {
221 [ + + ][ - + ]: 89689 : assert(!myParent || !bte_ptr);
222 : 89689 : myParent = bte_ptr;
223 : 89689 : }
224 : :
225 : :
226 : : // ********** END INLINE FUNCTIONS **********
227 : :
228 : : // ********** BEGIN FRIEND FUNCTIONS **********
229 : : // ********** END FRIEND FUNCTIONS **********
230 : :
231 : : // ********** BEGIN EXTERN FUNCTIONS **********
232 : : // ********** END EXTERN FUNCTIONS **********
233 : :
234 : : #endif
235 : :
|