Branch data Line data Source code
1 : : #include "InitCGMA.hpp"
2 : : #include "CGMApp.hpp"
3 : : #include "VirtualQueryEngine.hpp"
4 : : #include "FacetQueryEngine.hpp"
5 : : #include "FacetModifyEngine.hpp"
6 : : #include "GeometryQueryTool.hpp"
7 : : #include "GeometryModifyTool.hpp"
8 : : #include "CubitUtil.hpp"
9 : : #include "CADefines.hpp"
10 : : #include "CubitAttrib.hpp"
11 : :
12 : : #include <ctype.h>
13 : :
14 : : // This is for fixing the segmentation fault with writing Attribute 43 (must be removed for future versions)
15 [ # # ]: 0 : class CAAssemblyData : public CubitAttrib
16 : : {
17 : : public:
18 : 93472 : CAAssemblyData(RefEntity*, const CubitSimpleAttrib&) : CubitAttrib(NULL) {}
19 : :
20 : 0 : CubitSimpleAttrib cubit_simple_attrib() { return CubitSimpleAttrib(NULL, NULL, NULL); }
21 : :
22 : 0 : CubitStatus actuate() { return CUBIT_SUCCESS; }
23 : :
24 : 61768 : CubitStatus update() { return CUBIT_SUCCESS; }
25 : :
26 : 0 : int int_attrib_type() { return CA_ASSEMBLY_DATA; }
27 : :
28 : 0 : CubitStatus reset() { return CUBIT_SUCCESS; }
29 : : };
30 : :
31 : 46736 : CubitAttrib* CAAssemblyData_creator(RefEntity* entity, const CubitSimpleAttrib& p_csa)
32 : : {
33 [ + - ]: 46736 : return new CAAssemblyData(entity, p_csa);
34 : : }
35 : :
36 : :
37 : : #if defined(HAVE_OCC)
38 : : #include "OCCQueryEngine.hpp"
39 : : #include "OCCModifyEngine.hpp"
40 : : #endif
41 : :
42 : :
43 : 506 : static bool streq_nocase( const char* s, const char* t )
44 : : {
45 [ + + ]: 1309 : for (; *s; ++s, ++t)
46 [ + + ]: 1056 : if (tolower(*s) != tolower(*t))
47 : 253 : return false;
48 : 253 : return !*t;
49 : : }
50 : :
51 : : static bool has_been_initialized = false;
52 : : static char* first_engine_name = NULL;
53 : :
54 : :
55 : 1183 : CubitStatus InitCGMA::initialize_cgma( const char* default_engine_name )
56 : : {
57 [ + + ]: 1183 : if( has_been_initialized ){
58 : : // CGM is already initialized. Return success if previous initialization had
59 : : // the same parameter, failure otherwise.
60 [ + + ]: 342 : if( default_engine_name == first_engine_name ){
61 : 331 : return CUBIT_SUCCESS;
62 : : }
63 [ + - ]: 11 : else if( default_engine_name && first_engine_name &&
[ - + # # ]
[ - + ]
64 : 0 : streq_nocase( default_engine_name, first_engine_name )){
65 : 0 : return CUBIT_SUCCESS;
66 : : }
67 : : else{
68 [ + - ][ + - ]: 11 : PRINT_ERROR( "initialize_cgma() called again, but default engines differ.\n" );
[ + - ][ + - ]
69 : 11 : return CUBIT_FAILURE;
70 : : }
71 : : }
72 : :
73 [ + - ]: 841 : std::vector<CubitString> args;
74 [ + - ][ + - ]: 841 : CGMApp::instance()->startup( args );
75 : 841 : GeometryModifyEngine* default_engine = 0;
76 : 841 : bool ignore_default = false;
77 : :
78 : : // Now register attribute 43 (must be removed as the bug in CUBIT is fixed in future versions)
79 : : // Register CA_ASSEMBLY_DATA (a dummy attribute)
80 : : CGMApp::instance()->attrib_manager()->register_attrib_type(CA_ASSEMBLY_DATA, "assembly data", "ASSEMBLY_DATA",
81 [ + - ][ + - ]: 841 : CAAssemblyData_creator, CUBIT_FALSE, CUBIT_FALSE, CUBIT_FALSE, CUBIT_FALSE, CUBIT_FALSE, CUBIT_FALSE);
[ + - ]
82 : :
83 : : #ifdef HAVE_OCC
84 [ + - ]: 841 : OCCQueryEngine::instance();
85 [ + - ]: 841 : OCCModifyEngine::instance();
86 [ + + ][ + + ]: 841 : if (default_engine_name && streq_nocase("OCC",default_engine_name))
[ + + ]
87 [ + - ]: 231 : default_engine = OCCModifyEngine::instance();
88 : : #endif
89 : :
90 [ + - ]: 841 : FacetQueryEngine::instance();
91 [ + - ]: 841 : FacetModifyEngine::instance();
92 [ + - ][ + - ]: 841 : VirtualQueryEngine::instance()->register_attributes();
93 : :
94 [ + + ][ + + ]: 841 : if (default_engine_name && streq_nocase("FACET",default_engine_name)) {
[ + + ]
95 [ + - ]: 22 : default_engine = FacetModifyEngine::instance();
96 [ + - ][ + - ]: 22 : FacetModifyEngine::instance()->set_modify_enabled(CUBIT_TRUE);
97 : : }
98 : :
99 [ + + ][ + - ]: 841 : if(default_engine_name && !ignore_default) {
100 [ - + ]: 253 : if (!default_engine) {
101 [ # # ][ # # ]: 0 : PRINT_ERROR("Invalid or unsupported engine: '%s'\n", default_engine_name);
[ # # ][ # # ]
102 : 0 : return CUBIT_FAILURE;
103 : : }
104 : :
105 : : CubitStatus rval;
106 [ + - ][ + - ]: 253 : rval = GeometryModifyTool::instance()->set_default_gme(default_engine);
107 [ - + ]: 253 : if (CUBIT_SUCCESS != rval)
108 : 0 : return rval;
109 [ + - ][ + - ]: 253 : rval = GeometryQueryTool::instance()->set_default_gqe(default_engine->get_gqe());
[ + - ]
110 [ - + ]: 253 : if (CUBIT_SUCCESS != rval)
111 : 253 : return rval;
112 : : }
113 : :
114 : : // set has_been_initialized only if everything worked
115 [ + + ]: 841 : if( default_engine_name ){
116 [ + - ]: 253 : first_engine_name = CubitUtil::util_strdup(default_engine_name);
117 : : }
118 : 841 : has_been_initialized = true;
119 : :
120 [ + - ]: 1183 : return CUBIT_SUCCESS;
121 : : }
122 : :
123 : 0 : CubitStatus InitCGMA::deinitialize_cgma()
124 : : {
125 : 0 : CGMApp::instance()->shutdown();
126 : 0 : has_been_initialized = false;
127 : 0 : return CUBIT_SUCCESS;
128 [ + - ][ + - ]: 6364 : }
129 : :
|