Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : CGMApp.cpp
3 : : //
4 : : // Purpose : Init and cleanup for CGM
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Byron Hanks
9 : : //
10 : : // Date : 01/09/2002
11 : : //
12 : : // Owner :
13 : : //-------------------------------------------------------------------------
14 : :
15 : : #include "CGMApp.hpp"
16 : : #include "AppUtil.hpp"
17 : :
18 : : #include "GeometryQueryTool.hpp"
19 : : #include "GeometryModifyTool.hpp"
20 : : #include "GeometryFeatureTool.hpp"
21 : : #include "GeometryHealerTool.hpp"
22 : : #include "BoundingBoxTool.hpp"
23 : : #include "RefEntityName.hpp"
24 : : #include "SurfaceOverlapTool.hpp"
25 : : #include "CubitSimpleAttrib.hpp"
26 : : #include "TDUniqueId.hpp"
27 : : #include "MergeTool.hpp"
28 : : #include "OldUnmergeCode.hpp"
29 : : #include "ModelQueryEngine.hpp"
30 : :
31 : : // TODO - I'm not sure this is the place to include all the attributes
32 : : #include "CADefines.hpp"
33 : : #include "CAMergePartner.hpp"
34 : : #include "CAEntityName.hpp"
35 : : #include "CAGroup.hpp"
36 : : #include "CAEntityId.hpp"
37 : : #include "CAUniqueId.hpp"
38 : : #include "CADeferredAttrib.hpp"
39 : : #include "CAEntityColor.hpp"
40 : : #include "CAEntityTol.hpp"
41 : : #include "CAMergeStatus.hpp"
42 : : #include "CASourceFeature.hpp"
43 : : #include "CAEntitySense.hpp"
44 : : #ifdef CAT
45 : : #include "CAProWeld.hpp"
46 : : #endif
47 : :
48 : : CGMApp* CGMApp::instance_ = NULL;
49 : :
50 : : // Returns the singleton instance of the app object.
51 : 948725 : CGMApp* CGMApp::instance()
52 : : {
53 [ + + ]: 948725 : if (instance_ == NULL)
54 : : {
55 [ + - ]: 874 : instance_ = new CGMApp();
56 [ - + ]: 874 : if (!instance_ )
57 : : {
58 [ # # ][ # # ]: 0 : PRINT_ERROR(" *** Unable to initialize application ***\n");
59 : 0 : exit(1);
60 : : }
61 : : }
62 : 948725 : return instance_;
63 : : }
64 : :
65 : 1748 : CGMApp::CGMApp()
66 : : {
67 : 874 : mAppStarted = CUBIT_FALSE;
68 : :
69 : : // CGMApp depends on there being an AppUtil
70 [ + - ]: 874 : AppUtil::instance();
71 : :
72 : : // initialize my settings
73 [ + - ]: 874 : initialize_settings();
74 : :
75 : 874 : caUpdateFlgs = NULL;
76 : 874 : caActuateFlgs = NULL;
77 : 874 : caWriteFlgs = NULL;
78 : 874 : caReadFlgs = NULL;
79 : 874 : }
80 : :
81 : 0 : CGMApp::~CGMApp()
82 : : {
83 : 0 : instance_ = NULL;
84 : 0 : }
85 : :
86 : 852 : void CGMApp::startup(const std::vector<CubitString> &args)
87 : : {
88 [ + + ]: 852 : if (mAppStarted)
89 : 11 : return;
90 : :
91 : : // make sure apputil has started
92 : 841 : AppUtil::instance()->startup();
93 : :
94 : : // register attributes
95 : 841 : register_attributes();
96 : :
97 : 841 : mAppStarted = CUBIT_TRUE;
98 : : }
99 : :
100 : 322 : void CGMApp::shutdown()
101 : : {
102 : 322 : GeometryHealerTool::delete_instance();
103 : 322 : GeometryModifyTool::delete_instance();
104 : 322 : GeometryQueryTool::delete_instance();
105 : 322 : GeometryFeatureTool::delete_instance();
106 : 322 : AnalyticGeometryTool::delete_instance();
107 : 322 : RefEntityName::delete_instance();
108 : 322 : MergeTool::delete_instance();
109 : 322 : ModelQueryEngine::delete_instance();
110 : :
111 : 322 : DAG::delete_instance();
112 : 322 : mAppStarted = CUBIT_FALSE;
113 : 322 : }
114 : :
115 : 874 : void CGMApp::initialize_settings()
116 : : {
117 : 874 : GeometryQueryTool::instance()->initialize_settings();
118 : 874 : GeometryModifyTool::instance()->initialize_settings();
119 : 874 : BoundingBoxTool::initialize_settings();
120 : 874 : CubitSimpleAttrib::initialize_settings();
121 : 874 : RefEntityName::initialize_settings();
122 : 874 : SurfaceOverlapTool::initialize_settings();
123 : 874 : MergeTool::initialize_settings();
124 : 874 : OldUnmergeCode::initialize_settings();
125 : :
126 : 874 : }
127 : :
128 : 841 : void CGMApp::register_attributes()
129 : : {
130 : : CubitStatus result;
131 : : result = mAttribManager.register_attrib_type(CA_MERGE_PARTNER, "merge", "MERGE_PARTNER",
132 : : CAMergePartner_creator, CUBIT_FALSE,
133 : : CUBIT_FALSE, CUBIT_TRUE, CUBIT_TRUE,
134 : 841 : CUBIT_FALSE, CUBIT_FALSE);
135 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
136 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type merge.\n");
137 : 0 : return;
138 : : }
139 : :
140 : : result = mAttribManager.register_attrib_type(CA_ENTITY_NAME, "name", "ENTITY_NAME",
141 : : CAEntityName_creator, CUBIT_TRUE,
142 : : CUBIT_TRUE, CUBIT_TRUE, CUBIT_TRUE,
143 : 841 : CUBIT_TRUE, CUBIT_FALSE);
144 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
145 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type name.\n");
146 : 0 : return;
147 : : }
148 : :
149 : : result = mAttribManager.register_attrib_type(CA_GROUP, "group", "GROUP",
150 : : CAGroup_creator, CUBIT_FALSE,
151 : : CUBIT_FALSE, CUBIT_TRUE, CUBIT_TRUE,
152 : 841 : CUBIT_FALSE, CUBIT_FALSE);
153 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
154 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type group.\n");
155 : 0 : return;
156 : : }
157 : :
158 : : result = mAttribManager.register_attrib_type(CA_ENTITY_ID, "id", "ENTITY_ID",
159 : : CAEntityId_creator, CUBIT_FALSE,
160 : : CUBIT_FALSE, CUBIT_TRUE, CUBIT_TRUE,
161 : 841 : CUBIT_TRUE, CUBIT_FALSE);
162 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
163 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type id.\n");
164 : 0 : return;
165 : : }
166 : :
167 : : result = mAttribManager.register_attrib_type(CA_ENTITY_TOL, "tolerance", "ENTITY_TOL",
168 : : CAEntityTol_creator, CUBIT_FALSE,
169 : : CUBIT_FALSE, CUBIT_TRUE, CUBIT_TRUE,
170 : 841 : CUBIT_FALSE, CUBIT_TRUE);
171 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
172 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type tolerance.\n");
173 : 0 : return;
174 : : }
175 : :
176 : : result = mAttribManager.register_attrib_type(CA_UNIQUE_ID, "unique id", "UNIQUE_ID",
177 : : CAUniqueId_creator, CUBIT_FALSE,
178 : : CUBIT_FALSE, CUBIT_TRUE, CUBIT_TRUE,
179 : 841 : CUBIT_TRUE, CUBIT_FALSE);
180 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
181 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type unique id.\n");
182 : 0 : return;
183 : : }
184 : :
185 : : result = mAttribManager.register_attrib_type(CA_DEFERRED_ATTRIB, "deferred attrib", "DEFERRED_ATTRIB",
186 : : CADeferredAttrib_creator, CUBIT_FALSE,
187 : : CUBIT_FALSE, CUBIT_TRUE, CUBIT_TRUE,
188 : 841 : CUBIT_FALSE, CUBIT_FALSE);
189 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
190 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type deferred attrib.\n");
191 : 0 : return;
192 : : }
193 : :
194 : : result = mAttribManager.register_attrib_type(CA_ENTITY_COLOR, "color", "ENTITY_COLOR",
195 : : CAEntityColor_creator, CUBIT_FALSE,
196 : : CUBIT_FALSE, CUBIT_TRUE, CUBIT_TRUE,
197 : 841 : CUBIT_FALSE, CUBIT_TRUE);
198 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
199 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type color.\n");
200 : 0 : return;
201 : : }
202 : :
203 : : result = mAttribManager.register_attrib_type(CA_MERGE_STATUS, "merge status", "MERGE_STATUS",
204 : : CAMergeStatus_creator, CUBIT_FALSE,
205 : : CUBIT_FALSE, CUBIT_TRUE, CUBIT_TRUE,
206 : 841 : CUBIT_FALSE, CUBIT_FALSE);
207 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
208 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type merge status.\n");
209 : 0 : return;
210 : : }
211 : :
212 : : result = mAttribManager.register_attrib_type(CA_SOURCE_FEATURE, "source feature", "SOURCE_FEATURE",
213 : : CASourceFeature_creator, CUBIT_TRUE,
214 : : CUBIT_TRUE, CUBIT_TRUE, CUBIT_TRUE,
215 : 841 : CUBIT_TRUE, CUBIT_FALSE);
216 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
217 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type source feature.\n");
218 : 0 : return;
219 : : }
220 : :
221 : : result = mAttribManager.register_attrib_type(CA_ENTITY_SENSE, "entity sense", "ENTITY_SENSE",
222 : : CAEntitySense_creator, CUBIT_TRUE,
223 : : CUBIT_TRUE, CUBIT_TRUE, CUBIT_TRUE,
224 : 841 : CUBIT_FALSE, CUBIT_FALSE);
225 [ - + ]: 841 : if (CUBIT_SUCCESS != result) {
226 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to register attribute type entity sense.\n");
227 : 841 : return;
228 : : }
229 : :
230 : : #ifdef CAT
231 : : result = mAttribManager.register_attrib_type(CA_PRO_WELD, "pro weld", "PRO_WELD",
232 : : CAProWeld_creator, CUBIT_TRUE,
233 : : CUBIT_TRUE, CUBIT_TRUE, CUBIT_TRUE,
234 : : CUBIT_TRUE, CUBIT_FALSE);
235 : : if (CUBIT_SUCCESS != result) {
236 : : PRINT_ERROR("Failed to register attribute type pro weld.\n");
237 : : }
238 : : #endif
239 : : }
240 : :
241 : 946913 : CubitAttribManager* CGMApp::attrib_manager()
242 : : {
243 : 946913 : return &mAttribManager;
244 : : }
245 : :
246 : :
247 : 319 : void CGMApp::save_current_attribute_states()
248 : : {
249 : : //all pointers must be NULL
250 [ - + ][ # # ]: 319 : if( !!caUpdateFlgs && !!caActuateFlgs &&
[ # # ]
251 [ # # ]: 0 : !!caWriteFlgs && !!caReadFlgs )
252 : : {
253 [ # # ][ # # ]: 0 : PRINT_ERROR("Problem setting attribute flags\n");
[ # # ][ # # ]
254 : 319 : return;
255 : : }
256 : :
257 [ + - ]: 319 : DLIList<int> attrib_types;
258 [ + - ]: 319 : mAttribManager.get_registered_types(attrib_types);
259 : :
260 [ + - ][ + - ]: 319 : caUpdateFlgs = new CubitBoolean[attrib_types.size()];
261 [ + - ][ + - ]: 319 : caActuateFlgs = new CubitBoolean[attrib_types.size()];
262 [ + - ][ + - ]: 319 : caWriteFlgs = new CubitBoolean[attrib_types.size()];
263 [ + - ][ + - ]: 319 : caReadFlgs = new CubitBoolean[attrib_types.size()];
264 : :
265 [ + - ]: 319 : int num_att = attrib_types.size();
266 [ + - ]: 319 : attrib_types.reset();
267 : : int i;
268 [ + + ]: 5324 : for( i=0; i<num_att; i++ )
269 : : {
270 [ + - ]: 5005 : int att_type = attrib_types.get();
271 [ + - ]: 5005 : caUpdateFlgs[i] = mAttribManager.auto_update_flag( att_type );
272 [ + - ]: 5005 : caActuateFlgs[i] = mAttribManager.auto_actuate_flag( att_type );
273 [ + - ]: 5005 : caWriteFlgs[i] = mAttribManager.auto_write_flag( att_type );
274 [ + - ]: 5005 : caReadFlgs[i] = mAttribManager.auto_read_flag( att_type );
275 [ + - ]: 5005 : attrib_types.step();
276 [ + - ]: 319 : }
277 : : }
278 : :
279 : 319 : void CGMApp::restore_previous_attribute_states()
280 : : {
281 [ + - ]: 319 : DLIList<int> attrib_types;
282 [ + - ]: 319 : mAttribManager.get_registered_types(attrib_types);
283 : :
284 [ + - ]: 319 : int num_att = attrib_types.size();
285 [ + - ]: 319 : attrib_types.reset();
286 : : int i;
287 [ + + ]: 5324 : for( i=0; i<num_att; i++ )
288 : : {
289 [ + - ]: 5005 : int att_type = attrib_types.get();
290 [ + - ]: 5005 : mAttribManager.set_auto_update_flag( att_type, caUpdateFlgs[i] );
291 [ + - ]: 5005 : mAttribManager.set_auto_actuate_flag( att_type, caActuateFlgs[i] );
292 [ + - ]: 5005 : mAttribManager.set_auto_write_flag( att_type, caWriteFlgs[i] );
293 [ + - ]: 5005 : mAttribManager.set_auto_read_flag( att_type, caReadFlgs[i] );
294 [ + - ]: 5005 : attrib_types.step();
295 : : }
296 : :
297 [ + - ]: 319 : delete [] caUpdateFlgs;
298 [ + - ]: 319 : delete [] caActuateFlgs;
299 [ + - ]: 319 : delete [] caWriteFlgs;
300 [ + - ]: 319 : delete [] caReadFlgs;
301 : :
302 : 319 : caUpdateFlgs = NULL;
303 : 319 : caActuateFlgs = NULL;
304 : 319 : caWriteFlgs = NULL;
305 [ + - ]: 319 : caReadFlgs = NULL;
306 [ + - ][ + - ]: 6859 : }
307 : :
|