Branch data Line data Source code
1 : : //- Class: CubitAttrib
2 : : //- Owner: Greg Nielson
3 : : //- Description: pure virtual base class from which all the specific
4 : : //- cubit attributes are derived.
5 : : //- Checked By:
6 : : //- Version:
7 : :
8 : : #ifndef CUBIT_ATTRIB_HPP
9 : : #define CUBIT_ATTRIB_HPP
10 : :
11 : : #include "CubitString.hpp"
12 : : #include "CubitDefines.h"
13 : : #include "CubitVector.hpp"
14 : :
15 : : #include "CubitAttribManager.hpp"
16 : : #include "CGMApp.hpp"
17 : : #include "CGMGeomConfigure.h"
18 : : #include "CubitSimpleAttrib.hpp"
19 : :
20 : : class RefEntity;
21 : : template <class X> class DLIList;
22 : : class CubitSimpleAttrib;
23 : : class CubitAttribUser;
24 : :
25 : : // this enum used to index static arrays; first attribute must start at 0,
26 : : // last attribute must be CA_LAST_CA (some static arrays dimensioned using
27 : : // this item)
28 : : /*
29 : : enum CubitAttributeType {
30 : : CA_UNDEFINED = -1,
31 : : CA_MERGE_PARTNER = 0, // must be 0!!!
32 : : CA_ENTITY_NAME,
33 : : CA_GROUP,
34 : : CA_ENTITY_ID,
35 : : // CA_PARTITION_VG,
36 : : // CA_COMPOSITE_VG,
37 : : // CA_VIRTUAL_VG,
38 : : CA_UNIQUE_ID,
39 : : CA_DEFERRED_ATTRIB,
40 : : CA_MESH_INTERVAL,
41 : : CA_MESH_RELATIVE_LENGTH,
42 : : CA_GENESIS_ENTITY,
43 : : CA_MESH_SCHEME,
44 : : CA_SMOOTH_SCHEME,
45 : : CA_VERTEX_TYPE,
46 : : CA_MESH_CONTAINER,
47 : : CA_BODIES,
48 : : CA_ENTITY_COLOR,
49 : : #ifdef CAT
50 : : CA_VERTEX_FORCE,
51 : : CA_SURFACE_FORCE,
52 : : CA_CURVE_FORCE,
53 : : CA_VERTEX_DISPLACEMENT,
54 : : CA_SURFACE_DISPLACEMENT,
55 : : CA_CURVE_DISPLACEMENT,
56 : : CA_VOLUME_DISPLACEMENT,
57 : : CA_SURFACE_PRESSURE,
58 : : CA_CURVE_PRESSURE,
59 : : CA_SURFACE_TEMPERATURE,
60 : : CA_CURVE_TEMPERATURE,
61 : : CA_VERTEX_TEMPERATURE,
62 : : CA_SURFACE_HEATFLUX,
63 : : CA_CURVE_HEATFLUX,
64 : : CA_SURFACE_CONVECTION,
65 : : CA_CURVE_CONVECTION,
66 : : CA_SURFACE_CONTACT,
67 : : CA_CURVE_CONTACT,
68 : : #endif
69 : : CA_MERGE_STATUS,
70 : : CA_LAST_CA // must be last item!!!
71 : : };
72 : : */
73 : : class CubitAttrib;
74 : :
75 : : class CUBIT_GEOM_EXPORT CubitAttribFactory
76 : : {
77 : : public:
78 : : friend class CubitAttrib;
79 : :
80 : : protected:
81 : : CubitAttribFactory() {};
82 : :
83 : : virtual ~CubitAttribFactory() {};
84 : :
85 : : private:
86 : : virtual CubitAttrib *create_cubit_attrib(const int attrib_type,
87 : : RefEntity *entity) = 0;
88 : :
89 : : virtual CubitAttrib *create_cubit_attrib(CubitSimpleAttrib *csa_ptr,
90 : : RefEntity *entity) = 0;
91 : : };
92 : :
93 : : class CUBIT_GEOM_EXPORT CubitAttrib
94 : : {
95 : : public:
96 : :
97 : : CubitAttrib(RefEntity *attrib_owner);
98 : : //- bare constructor
99 : :
100 : : virtual ~CubitAttrib();
101 : : //- destructor
102 : :
103 : : // static CubitAttrib *create_cubit_attrib(const int attrib_type,
104 : : // RefEntity *entity);
105 : : //- create a cubit attribute of the specified type and pass it back
106 : :
107 : : // static CubitAttrib *create_cubit_attrib(CubitSimpleAttrib *csa_ptr,
108 : : // RefEntity *entity);
109 : : //- create a cubit attribute from a CSA and pass it back
110 : :
111 : : //HEADER-: get/set functions
112 : :
113 : 76700 : RefEntity* attrib_owner() {return attribOwnerEntity;}
114 : : void attrib_owner(RefEntity* new_attrib_owner)
115 : : {attribOwnerEntity = new_attrib_owner;}
116 : : //- get/set the attrib owner
117 : :
118 : 28884 : CubitBoolean has_actuated() {return hasActuated;}
119 : 0 : void has_actuated(CubitBoolean set_has_actuated)
120 : 0 : { hasActuated = set_has_actuated;}
121 : : //- get/set hasActuated
122 : :
123 : 414300 : CubitBoolean has_updated() {return hasUpdated;}
124 : 15489 : void has_updated(CubitBoolean set_has_updated)
125 : 15489 : { hasUpdated = set_has_updated;}
126 : : //- get/set hasUpdated
127 : :
128 : : virtual CubitBoolean has_written() const;
129 : : virtual void has_written(CubitBoolean set_has_written);
130 : : //- get/set hasWritten
131 : :
132 : 246070 : void delete_attrib(CubitBoolean set_remove) {deleteAttrib = set_remove;}
133 : 577254 : CubitBoolean delete_attrib() {return deleteAttrib;}
134 : : //- get/set the deleteAttrib flag
135 : :
136 : 10480858 : CubitAttrib* next_attrib() {return nextAttrib;}
137 : : CubitStatus set_next_attrib(CubitAttrib* next_attrib_ptr);
138 : : //- get/set the next attribute in the chain
139 : :
140 : : // static CubitStatus auto_create_attribs(CubitAttribUser *cau);
141 : : //- create attribs whose auto update flag is set
142 : :
143 : : // static CubitStatus auto_update_attribs(CubitAttribUser *cau);
144 : : //- create attribs whose auto update flag is set
145 : :
146 : : // static void auto_actuate_flag(int attrib_type, CubitBoolean value);
147 : : // static CubitBoolean auto_actuate_flag(int attrib_type);
148 : : // static void auto_update_flag(int attrib_type, CubitBoolean value);
149 : : // static CubitBoolean auto_update_flag(int attrib_type);
150 : : // static void auto_write_flag(int attrib_type, CubitBoolean value);
151 : : // static CubitBoolean auto_write_flag(int attrib_type);
152 : : // static void auto_read_flag(int attrib_type, CubitBoolean value);
153 : : // static CubitBoolean auto_read_flag(int attrib_type);
154 : : //- get/set actuate, update, write, and read flags, static versions
155 : :
156 : : // static CubitBoolean* auto_read_flag_ptr(int attrib_type);
157 : : // static CubitBoolean* auto_actuate_flag_ptr(int attrib_type);
158 : : // static CubitBoolean* auto_update_flag_ptr(int attrib_type);
159 : : // static CubitBoolean* auto_write_flag_ptr(int attrib_type);
160 : : //- get array ptr for actuate, update, write, and read flags, static versions
161 : :
162 : : // static void auto_flag(int flag);
163 : : // static int auto_flag();
164 : : //- get/set all attribute flags
165 : : //- returns -1, 0 or 1.
166 : :
167 : : void auto_actuate_flag(CubitBoolean value);
168 : : CubitBoolean auto_actuate_flag();
169 : : void auto_update_flag(CubitBoolean value);
170 : : CubitBoolean auto_update_flag();
171 : : void auto_write_flag(CubitBoolean value);
172 : : CubitBoolean auto_write_flag();
173 : : void auto_read_flag(CubitBoolean value);
174 : : CubitBoolean auto_read_flag();
175 : : //- get/set actuate, update, write, and read flags, non-static versions
176 : :
177 : : CubitBoolean actuate_in_constructor();
178 : : //- return value of actuateInConstructor for this attribute type
179 : :
180 : : CubitBoolean actuate_after_geom_changes();
181 : : //- return value of actuateAfterGeomChanges for this attribute type
182 : :
183 : : // static CubitBoolean overwrite_flag() {return overwriteFlag;}
184 : : // static void overwrite_flag(CubitBoolean flag) {overwriteFlag = flag;}
185 : : //- get/set overwriteFlag
186 : :
187 : : virtual CubitSimpleAttrib cubit_simple_attrib() = 0;
188 : : //- return a cubitSimpleAttrib for this CA
189 : :
190 : : virtual CubitStatus actuate() = 0;
191 : : //- actuate this attrib
192 : :
193 : : virtual CubitStatus actuate_list(DLIList<RefEntity*>);
194 : : //- actuate this attrib on each of the entities passed in
195 : :
196 : : virtual CubitStatus update() = 0;
197 : : //- update this attrib
198 : :
199 : : virtual CubitStatus reset() = 0;
200 : : //- reset any lists or other info in this attribute
201 : :
202 : : virtual CubitSimpleAttrib split_owner();
203 : : //- split this attrib; pass back a new simple attrib if desired
204 : :
205 : : virtual void merge_owner(CubitAttrib *deletable_ca_ptr);
206 : : //- merge this attrib with deletable_ca_ptr (keep this)
207 : :
208 : : virtual void transf_owner(const CubitVector &matrow1,
209 : : const CubitVector &matrow2,
210 : : const CubitVector &matrow3,
211 : : const CubitVector &translate_vec,
212 : : const double scale_factor);
213 : : //- transform this attrib with the data passed in
214 : :
215 : : virtual int int_attrib_type() = 0;
216 : : //- return the enumerated type of attribute
217 : :
218 : 212532 : const char *att_internal_name() {
219 : 212532 : return CGMApp::instance()->attrib_manager()->att_internal_name( int_attrib_type() );
220 : : }
221 : : //- return the internal name of this attribute
222 : :
223 : : // static const char *att_internal_name(CubitAttributeType attrib_type) {
224 : : // return (attrib_type < 0 || attrib_type > CA_LAST_CA)
225 : : // ? NULL : attInternalNames[attrib_type];
226 : : // }
227 : : //- return the internal name of this CA given the enumerated attribute type
228 : :
229 : : // static const char *att_name(CubitAttributeType attrib_type) {
230 : : // return (attrib_type < 0 || attrib_type > CA_LAST_CA)
231 : : // ? NULL : attTypeNames[attrib_type];
232 : : // }
233 : : //- return the internal name of this CA given the enumerated attribute type
234 : :
235 : : // static CubitAttributeType attrib_type(const char* name);
236 : : //- Converts a string to the corresponding int
237 : :
238 : : // static CubitAttributeType attrib_type_from_internal_name(const char* name);
239 : : //- Converts an "internal name" string to the corresponding int
240 : :
241 : : // static CubitAttributeType attrib_type(CubitSimpleAttrib *csa_ptr);
242 : : //- returns the type given a simple attribute
243 : :
244 : : // static int equivalent(CubitAttrib* first_attrib_ptr,
245 : : // CubitAttrib* second_attrib_ptr);
246 : : //- return true if the two ca's are equivalent
247 : :
248 : : int equivalent(const CubitSimpleAttrib& csa_ptr);
249 : : //- return true if the csa and this are equivalent
250 : :
251 : : // static CubitBoolean attrib_exists(int attrib_type, CubitBoolean print = CUBIT_TRUE);
252 : : //- find if the attrib exists, and print some details
253 : :
254 : : virtual void print();
255 : : //- print some details about this attrib
256 : :
257 : : // static CubitStatus import_actuate(DLIList<RefEntity*> &entity_list);
258 : : //- given a Body list, actuates first the merge partner attribute
259 : : //- on all entities in the list, then actuates all other types of
260 : : //- attributes
261 : :
262 : : // static void set_cubit_attrib_factory(CubitAttribFactory *factory)
263 : : // {cubitAttribFactory = factory;}
264 : : //- user-provided attribute factory
265 : :
266 : : // static int number_of_attributes();
267 : : //- Returns number of defined attributes
268 : :
269 : : // static void clear_attrib_importeds();
270 : : //- clear the attribImported array
271 : :
272 : : // static void report_attrib_importeds();
273 : : //- print info on the attribImported array
274 : :
275 : : protected:
276 : :
277 : : virtual void remove_attribute();
278 : : //- Removes 'this' attribute
279 : : virtual void add_attribute();
280 : : //- and adds a new one with the changed data.
281 : :
282 : : CubitBoolean hasActuated;
283 : : //- flag telling whether this CA has actuated
284 : :
285 : : CubitBoolean hasUpdated;
286 : : //- flag telling whether this CA has updated
287 : :
288 : : CubitBoolean hasWritten;
289 : : //- flag telling whether this CA has a corresponding geometry attribute
290 : : //- (on the geometric entity assoc'd with the owner)
291 : :
292 : : CubitBoolean deleteAttrib;
293 : : //- flag telling whether this CA should be deleted
294 : :
295 : : RefEntity* attribOwnerEntity;
296 : : //- ref entity to which this CA is associated
297 : :
298 : : CubitAttrib* nextAttrib;
299 : : //- next attribute in the chain
300 : :
301 : : // static const char* attTypeNames[];
302 : : //- names of attribute types
303 : :
304 : : // static const char* attInternalNames[];
305 : : //- names of attributes, used in acis files; can't be the same as
306 : : //- attTypeNames because those have to be user-recognizable and can
307 : : //- be multiple words (e.g. "entity name")
308 : :
309 : : // static CubitBoolean autoActuateFlag[CA_LAST_CA];
310 : : // static CubitBoolean autoUpdateFlag[CA_LAST_CA];
311 : : // static CubitBoolean autoWriteFlag[CA_LAST_CA];
312 : : // static CubitBoolean autoReadFlag[CA_LAST_CA];
313 : : // static CubitBoolean actuateInConstructor[CA_LAST_CA];
314 : : // static CubitBoolean actuateAfterGeomChanges[CA_LAST_CA];
315 : : //- auto flags for each type of CA
316 : :
317 : : // static bool attribImported[CA_LAST_CA];
318 : : //- static flag used in import type reporting
319 : :
320 : : // static CubitBoolean overwriteFlag;
321 : : //- if CUBIT_TRUE, any attribute can overwrite default files
322 : : //- (used for mesh container attribute default filenames)
323 : :
324 : : private:
325 : :
326 : : // static CubitAttribFactory *cubitAttribFactory;
327 : : //- application-provided attribute factory
328 : :
329 : : };
330 : :
331 : : // static versions
332 : : //inline CubitBoolean CubitAttrib::auto_actuate_flag(int attrib_type)
333 : : //{return autoActuateFlag[attrib_type];}
334 : :
335 : : //inline CubitBoolean CubitAttrib::auto_update_flag(int attrib_type)
336 : : //{return autoUpdateFlag[attrib_type];}
337 : :
338 : : //inline CubitBoolean CubitAttrib::auto_write_flag(int attrib_type)
339 : : //{return autoWriteFlag[attrib_type];}
340 : :
341 : : //inline CubitBoolean CubitAttrib::auto_read_flag(int attrib_type)
342 : : //{return autoReadFlag[attrib_type];}
343 : :
344 : : //inline CubitBoolean* CubitAttrib::auto_read_flag_ptr(int attrib_type)
345 : : //{return &autoReadFlag[attrib_type];}
346 : :
347 : : //inline CubitBoolean* CubitAttrib::auto_actuate_flag_ptr(int attrib_type)
348 : : //{return &autoActuateFlag[attrib_type];}
349 : :
350 : : //inline CubitBoolean* CubitAttrib::auto_update_flag_ptr(int attrib_type)
351 : : //{return &autoUpdateFlag[attrib_type];}
352 : :
353 : : //inline CubitBoolean* CubitAttrib::auto_write_flag_ptr(int attrib_type)
354 : : //{return &autoWriteFlag[attrib_type];}
355 : :
356 : : // non-static versions
357 : : inline void CubitAttrib::auto_actuate_flag(CubitBoolean value)
358 : : {
359 : : CGMApp::instance()->attrib_manager()->set_auto_actuate_flag(int_attrib_type(), value);
360 : : }
361 : :
362 : 16466 : inline CubitBoolean CubitAttrib::auto_actuate_flag()
363 : : {
364 : 16466 : return CGMApp::instance()->attrib_manager()->auto_actuate_flag(int_attrib_type());
365 : : }
366 : :
367 : 6317 : inline CubitBoolean CubitAttrib::actuate_in_constructor()
368 : : {
369 : 6317 : return CGMApp::instance()->attrib_manager()->actuate_in_constructor(int_attrib_type());
370 : : }
371 : : //- get/set actuate, update, write, and read flags, non-static versions
372 : :
373 : 7621 : inline CubitBoolean CubitAttrib::actuate_after_geom_changes()
374 : : {
375 : 7621 : return CGMApp::instance()->attrib_manager()->actuate_after_geom_changes(int_attrib_type());
376 : : }
377 : : //- get/set actuate, update, write, and read flags, non-static versions
378 : :
379 : 263386 : inline CubitStatus CubitAttrib::set_next_attrib(CubitAttrib* next_attrib_ptr)
380 : : {
381 : 263386 : nextAttrib = next_attrib_ptr;
382 : 263386 : return CUBIT_SUCCESS;
383 : : }
384 : :
385 : 0 : inline CubitSimpleAttrib CubitAttrib::split_owner()
386 : : {
387 : : //- split this attrib; pass back a new simple attrib if desired
388 : :
389 : : // by default, get rid of this attribute and don't copy to new entity
390 : 0 : deleteAttrib = CUBIT_TRUE;
391 : 0 : return CubitSimpleAttrib();
392 : : }
393 : :
394 : 0 : inline void CubitAttrib::merge_owner(CubitAttrib *)
395 : : {
396 : : //- merge this attrib with deletable_ca_ptr (keep this)
397 : :
398 : : // by default, get rid of this attribute
399 : 0 : deleteAttrib = CUBIT_TRUE;
400 : 0 : return;
401 : : }
402 : :
403 : 0 : inline void CubitAttrib::transf_owner(const CubitVector &,
404 : : const CubitVector &,
405 : : const CubitVector &,
406 : : const CubitVector &,
407 : : const double)
408 : : {
409 : : //- by default, do nothing
410 : 0 : }
411 : :
412 : : //inline int CubitAttrib::number_of_attributes()
413 : : //{return CA_LAST_CA;}
414 : :
415 : : #endif
416 : :
|