Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : RefEntityFactory.hpp
3 : : //
4 : : // Purpose : This file produces RefEntity and derived classes; it is
5 : : // the interface through which RE's should be created;
6 : : // applications of the geometry module can provide their
7 : : // own factory, otherwise this factory is used
8 : : //
9 : : // Creator : Tim Tautges (in its new state)
10 : : //
11 : : // Creation Date : 9/99
12 : : //-------------------------------------------------------------------------
13 : :
14 : : #ifndef REFENTITYFACTORY_HPP
15 : : #define REFENTITYFACTORY_HPP
16 : :
17 : : #include "CubitObserver.hpp"
18 : : #include "CubitDefines.h"
19 : : #include "CGMGeomConfigure.h"
20 : :
21 : : class RefVertex;
22 : : class RefEdge;
23 : : class RefFace;
24 : : class RefVolume;
25 : : class RefGroup;
26 : : class Body;
27 : : class RefEntity;
28 : : #ifdef PROE
29 : : class RefAssembly;
30 : : class RefPart;
31 : : #endif
32 : : class TBPoint;
33 : : class Curve;
34 : : class Surface;
35 : : class Lump;
36 : : class BodySM;
37 : :
38 : : class RefVertex;
39 : : class RefEdge;
40 : : class RefFace;
41 : : class RefGroup;
42 : : class RefVolume;
43 : : template <class X> class DLIList;
44 : : class CubitEntity;
45 : :
46 : : class CUBIT_GEOM_EXPORT RefEntityFactory : public CubitObserver
47 : : {
48 : : public:
49 : :
50 : : static RefEntityFactory *instance();
51 : : //- the function used to access the singleton instance
52 : :
53 : : static void delete_instance();
54 : :
55 : : virtual RefVertex *construct_RefVertex(TBPoint *point = NULL);
56 : :
57 : : virtual RefEdge *construct_RefEdge(Curve *curve = NULL);
58 : :
59 : : virtual RefFace *construct_RefFace(Surface *surface = NULL);
60 : :
61 : : virtual RefVolume *construct_RefVolume(Lump *lump = NULL);
62 : :
63 : : virtual Body *construct_Body(BodySM *body_sm = NULL);
64 : :
65 : : virtual RefGroup *construct_RefGroup(const char* name = NULL);
66 : : virtual RefGroup *construct_RefGroup (DLIList<RefEntity*>& entity_list);
67 : :
68 : : virtual CubitStatus ref_entity_list( char const* keyword,
69 : : DLIList<RefEntity*> &entity_list,
70 : : const CubitBoolean print_errors = CUBIT_TRUE);
71 : : //- return entities of type keyword from the global list in entity_list;
72 : : //- virtual to allow derived factories to work from their native lists
73 : :
74 : : virtual void bodies (DLIList<Body*> &bodies);
75 : : virtual void ref_volumes (DLIList<RefVolume*> &ref_volumes);
76 : : virtual void ref_groups (DLIList<RefGroup*> &ref_groups);
77 : : virtual void ref_faces (DLIList<RefFace*> &ref_faces);
78 : : virtual void ref_edges (DLIList<RefEdge*> &ref_edges);
79 : : virtual void ref_vertices (DLIList<RefVertex*> &ref_vertices);
80 : : #ifdef PROE
81 : : virtual void ref_parts (DLIList<RefPart*> &ref_parts);
82 : : virtual void ref_assemblies (DLIList<RefAssembly*> &ref_assemblies);
83 : : #endif
84 : :
85 : : virtual int num_bodies() const;
86 : : virtual int num_ref_volumes() const;
87 : : virtual int num_ref_groups() const;
88 : : virtual int num_ref_faces() const;
89 : : virtual int num_ref_edges() const;
90 : : virtual int num_ref_vertices() const;
91 : :
92 : : virtual RefEntity *get_ref_entity (const char *type, int id);
93 : : virtual RefEntity *get_ref_entity (const std::type_info& type, int id);
94 : : virtual Body *get_body ( int id );
95 : : virtual RefVolume *get_ref_volume ( int id );
96 : : virtual RefGroup *get_ref_group ( int id );
97 : : virtual RefFace *get_ref_face ( int id );
98 : : virtual RefEdge *get_ref_edge ( int id );
99 : : virtual RefVertex *get_ref_vertex ( int id );
100 : :
101 : : virtual Body *get_first_body ();
102 : : virtual RefVolume *get_first_ref_volume ();
103 : : virtual RefGroup *get_first_ref_group ();
104 : : virtual RefFace *get_first_ref_face ();
105 : : virtual RefEdge *get_first_ref_edge ();
106 : : virtual RefVertex *get_first_ref_vertex ();
107 : :
108 : : virtual Body *get_next_body ();
109 : : virtual RefVolume *get_next_ref_volume ();
110 : : virtual RefGroup *get_next_ref_group ();
111 : : virtual RefFace *get_next_ref_face ();
112 : : virtual RefEdge *get_next_ref_edge ();
113 : : virtual RefVertex *get_next_ref_vertex ();
114 : :
115 : : virtual Body *get_last_body ();
116 : : virtual RefVolume *get_last_ref_volume ();
117 : : virtual RefGroup *get_last_ref_group ();
118 : : virtual RefFace *get_last_ref_face ();
119 : : virtual RefEdge *get_last_ref_edge ();
120 : : virtual RefVertex *get_last_ref_vertex ();
121 : :
122 : : virtual void add ( RefEntity *ref_entity );
123 : : virtual void add ( Body *bodyPtr );
124 : : virtual void add ( RefVolume *refVolumePtr );
125 : : virtual void add ( RefGroup *refGroupPtr );
126 : : virtual void add ( RefFace *refFacePtr );
127 : : virtual void add ( RefEdge *refEdgePtr );
128 : : virtual void add ( RefVertex *refVertexPtr );
129 : :
130 : : virtual void remove (RefEntity *ref_entity );
131 : : virtual void remove (RefVertex* refVertexPtr);
132 : : virtual void remove (RefEdge* refEdgePtr);
133 : : virtual void remove (RefFace* refFacePtr);
134 : : virtual void remove (RefGroup* refGroupPtr);
135 : : virtual void remove (RefVolume* refVolumePtr);
136 : : virtual void remove (Body* bodyPtr);
137 : :
138 : : int next_body_id ();
139 : : int next_ref_volume_id ();
140 : : int next_ref_group_id ();
141 : : int next_ref_face_id ();
142 : : int next_ref_edge_id ();
143 : : int next_ref_vertex_id ();
144 : : int next_surf_sub_domain_id ();
145 : : int next_curve_sub_domain_id();
146 : : #ifdef PROE
147 : : int next_ref_assembly_id();
148 : : int next_ref_part_id();
149 : : #endif
150 : :
151 : 0 : int current_body_id() {return maxBodyId;};
152 : 0 : int current_volume_id() {return maxRefVolumeId;};
153 : : int current_group_id() {return maxRefGroupId;};
154 : 0 : int current_face_id() {return maxRefFaceId;};
155 : 0 : int current_edge_id() {return maxRefEdgeId;};
156 : 0 : int current_vertex_id() {return maxRefVertexId;};
157 : :
158 : : void incorporate_id (RefEntity *ref_ent);
159 : :
160 : : int maximum_id(const char *entity_type);
161 : : int maximum_id (RefEntity *ref_ent);
162 : : //- get max id of specified type
163 : :
164 : : void maximum_id (const std::type_info& type, int max_id);
165 : : //- set max id of specified type
166 : :
167 : : void compress_ref_ids(const char *entity_type, int retain_max_id);
168 : : //- take out holes in the id space; make virtual so that factory can work
169 : : //- off of native lists
170 : :
171 : : static void compress_ids(DLIList<CubitEntity*> &list);
172 : : //- compress ids of the entities in this list; this function should really be
173 : : //- in CubitEntity, but it references label drawing functions, which aren't
174 : : //- accessable from CubitEntity
175 : :
176 : : void reset_ids();
177 : : //- resets all the id counters to 0
178 : :
179 : : virtual void renumber_geometry_by_properties(CubitBoolean retain_max_ids);
180 : : //- Renumbers all geometry based on geometric properties such as volume,
181 : : //- bounding box, etc. Used to get consistent numbering, no matter
182 : : //- what order the entities appear in the input file.
183 : :
184 : : void notify_observer(const CubitEvent *observer_event);
185 : : //- handle MODEL_ENTITY_DESTRUCTED/MODEL_ENTITY_CONSTRUCTED events
186 : :
187 : : protected:
188 : :
189 : : RefEntityFactory(bool make_lists = true) ;
190 : : //- This is a singleton class, but derived classes need to be able
191 : : //- to instantiate it
192 : : virtual ~RefEntityFactory ();
193 : :
194 : : static RefEntityFactory *instance_;
195 : : //- the singleton instance
196 : :
197 : : bool ManageListSorting;
198 : : int maxBodyId;
199 : : int maxRefVolumeId;
200 : : int maxRefGroupId;
201 : : int maxRefFaceId;
202 : : int maxRefEdgeId;
203 : : int maxRefVertexId;
204 : : int maxRefCoordSysId;
205 : : int maxSurfSubDomainId;
206 : : int maxCurveSubDomainId;
207 : : #ifdef PROE
208 : : int maxRefAssemblyId;
209 : : int maxRefPartId;
210 : : #endif
211 : :
212 : : private:
213 : :
214 : : bool refVertexListIsSorted;
215 : : bool refEdgeListIsSorted;
216 : : bool refFaceListIsSorted;
217 : : bool refVolumeListIsSorted;
218 : : bool bodyListIsSorted;
219 : : bool refGroupListIsSorted;
220 : :
221 : : DLIList<RefVertex*> *refVertexList;
222 : : DLIList<RefEdge*> *refEdgeList;
223 : : DLIList<RefFace*> *refFaceList;
224 : : DLIList<RefGroup*> *refGroupList;
225 : : DLIList<RefVolume*> *refVolumeList;
226 : : DLIList<Body*> *bodyList;
227 : : #ifdef PROE
228 : : DLIList<RefAssembly*> *refAssemblyList;
229 : : DLIList<RefPart*> *refPartList;
230 : : #endif
231 : :
232 : : };
233 : :
234 : : #endif
235 : :
|