Branch data Line data Source code
1 : : // *** BEGIN INCLUDES *** //
2 : : #include "GeometryFeatureTool.hpp"
3 : : #include "Body.hpp"
4 : : #include "RefEntityFactory.hpp"
5 : : #include "TopologyEntity.hpp"
6 : : #include "CastTo.hpp"
7 : : #include "RefFace.hpp"
8 : : #include "BasicTopologyEntity.hpp"
9 : : #include "TDSourceFeature.hpp"
10 : : // *** END INCLUDES *** //
11 : :
12 : : GeometryFeatureTool* GeometryFeatureTool::instance_ = 0;
13 : :
14 : : // *** BEGIN PUBLIC FUNCTIONS *** //
15 : 0 : GeometryFeatureTool* GeometryFeatureTool::instance( GeometryFeatureEngine *GFEPtr )
16 : : {
17 : : // Check to see if we have created an instance of the class;
18 : : // if not, proceed to create one.
19 [ # # ]: 0 : if (instance_ == 0)
20 : : {
21 : : // When creating the instance, we should always have a valid
22 : : // gfePtr. If not, complain.
23 [ # # ]: 0 : instance_ = new GeometryFeatureTool(GFEPtr);
24 : :
25 : : // Check to make sure there's a ref entity factory extant:
26 : : // RefEntityFactory *factory =
27 : 0 : RefEntityFactory::instance();
28 : : }
29 : : // If there is an existing instance of the class, check if there
30 : : // is a request to set the default engine. If so, do so.
31 [ # # ][ # # ]: 0 : else if ( GFEPtr != NULL && !instance_->gfeList.move_to(GFEPtr) )
[ # # ]
32 : : {
33 [ # # ]: 0 : delete instance_->gfeList.remove();
34 : 0 : instance_->gfeList.insert(GFEPtr);
35 : : }
36 : :
37 : : // Return the a pointer to the instance of the class.
38 : 0 : return instance_;
39 : : }
40 : :
41 : 0 : GeometryFeatureTool::~GeometryFeatureTool()
42 : : {
43 [ # # ][ # # ]: 0 : for (int i = gfeList.size(); i > 0; i--)
44 [ # # ][ # # ]: 0 : delete gfeList.get_and_step();
[ # # ]
45 : :
46 [ # # ]: 0 : gfeList.clean_out();
47 : 0 : instance_ = NULL;
48 : 0 : }
49 : :
50 : : // *** BEGIN ENGINE OPERATIONS *** //
51 : 0 : void GeometryFeatureTool::add_gfe( GeometryFeatureEngine *gfe_ptr )
52 : : {
53 [ # # ]: 0 : assert(gfe_ptr != 0);
54 : :
55 [ # # ]: 0 : if (!gfeList.move_to(gfe_ptr))
56 : 0 : gfeList.append(gfe_ptr);
57 : 0 : }
58 : :
59 : 0 : GeometryFeatureEngine* GeometryFeatureTool::get_engine( TopologyBridge *tb_ptr ) const
60 : : {
61 : : GeometryFeatureEngine *gfe;
62 : :
63 [ # # ]: 0 : for (int i = 0; i < gfeList.size(); i++)
64 : : {
65 : 0 : gfe = gfeList.next(i);
66 [ # # ]: 0 : if (gfe->is_feature_engine(tb_ptr))
67 : 0 : return gfe;
68 : : }
69 : :
70 : 0 : return NULL;
71 : : }
72 : :
73 : 0 : GeometryFeatureEngine* GeometryFeatureTool::get_engine( TopologyEntity *te_ptr ) const
74 : : {
75 : : GeometryFeatureEngine *gfe;
76 : :
77 : 0 : TopologyBridge *tb_ptr = te_ptr->bridge_manager()->topology_bridge();
78 : :
79 [ # # ]: 0 : for (int i = 0; i < gfeList.size(); i++)
80 : : {
81 : 0 : gfe = gfeList.next(i);
82 [ # # ]: 0 : if (gfe->is_feature_engine(tb_ptr))
83 : 0 : return gfe;
84 : : }
85 : :
86 : 0 : return NULL;
87 : : }
88 : :
89 : 0 : CubitBoolean GeometryFeatureTool::same_feature_engine( DLIList<RefEntity*> &ref_entity_list,
90 : : CubitBoolean check_children ) const
91 : : {
92 [ # # ]: 0 : DLIList<RefEntity*> complete_entity_list;
93 : :
94 : : //Check the check_children option and check all the children if necessary
95 [ # # ]: 0 : if (check_children)
96 : : {
97 : : //Make a complete list of all the RefEntities and their children
98 [ # # ]: 0 : DLIList<RefEntity*> temp = ref_entity_list;
99 : : RefEntity* ref_entity_ptr;
100 : :
101 [ # # ][ # # ]: 0 : for (int i = 0; i < ref_entity_list.size(); i++)
102 : : {
103 [ # # ]: 0 : ref_entity_ptr = ref_entity_list.get_and_step();
104 [ # # ]: 0 : complete_entity_list.clean_out();
105 [ # # ]: 0 : ref_entity_ptr->get_all_child_ref_entities(complete_entity_list);
106 [ # # ]: 0 : temp += complete_entity_list;
107 : : }
108 : :
109 [ # # ]: 0 : complete_entity_list.clean_out();
110 [ # # ][ # # ]: 0 : complete_entity_list.merge_unique(temp);
111 : : }
112 : :
113 : : //Now make sure all the RefEntities are from the same geometry engine
114 [ # # ][ # # ]: 0 : DLIList<TopologyEntity*> te_list;
115 [ # # ][ # # ]: 0 : CAST_LIST(complete_entity_list, te_list, TopologyEntity);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
116 [ # # ][ # # ]: 0 : return same_feature_engine(te_list);
117 : : }
118 : :
119 : 0 : CubitBoolean GeometryFeatureTool::same_feature_engine( DLIList<TopologyEntity*> &topo_list ) const
120 : : {
121 : 0 : GeometryFeatureEngine *gePtr1 = get_engine(topo_list.get_and_step());
122 : : GeometryFeatureEngine *gePtr2;
123 : :
124 [ # # ]: 0 : for (int i = 1; i < topo_list.size(); i++)
125 : : {
126 : 0 : gePtr2 = get_engine(topo_list.get_and_step());
127 [ # # ]: 0 : if (gePtr1 != gePtr2)
128 : : {
129 : 0 : return CUBIT_FALSE;
130 : : }
131 : : }
132 : 0 : return CUBIT_TRUE;
133 : : }
134 : :
135 : : // *** END ENGINE OPERATIONS *** //
136 : :
137 : : // *** BEGIN FEATURE FUNCTIONS *** //
138 : :
139 : : GeometryFeatureEngine::FeatureType
140 : 0 : GeometryFeatureTool::feature_type(BasicTopologyEntity* bte)
141 : : {
142 : : // first check to see if the feature information is in the tool data
143 : 0 : TDSourceFeature *tdss = 0;
144 : : tdss = (TDSourceFeature *)bte->
145 : 0 : get_TD(&TDSourceFeature::is_source_feature);
146 : :
147 [ # # ]: 0 : if(tdss)
148 : 0 : return tdss->source_feature();
149 : :
150 : : // if the feature information is not in the tool data
151 : : // then call the engine specific FeatureEngine
152 : 0 : TopologyEntity* topo_ptr = CAST_TO(bte, TopologyEntity);
153 : :
154 [ # # ]: 0 : if (!topo_ptr)
155 : 0 : return GeometryFeatureEngine::FEATURE_UNDEFINED;
156 : :
157 : 0 : GeometryFeatureEngine* gfe = get_engine(topo_ptr);
158 : :
159 [ # # ]: 0 : if(!gfe)
160 : 0 : return GeometryFeatureEngine::FEATURE_UNDEFINED;
161 : :
162 : 0 : return gfe->feature_type(bte->get_geometry_entity_ptr());
163 : : }
164 : :
165 : 0 : CubitStatus GeometryFeatureTool::get_related_by_feature(
166 : : BasicTopologyEntity* bte,
167 : : DLIList<GeometryEntity*>& return_list)
168 : : {
169 : 0 : TopologyEntity* topo_ptr = CAST_TO(bte, TopologyEntity);
170 : :
171 [ # # ]: 0 : if (!topo_ptr)
172 : 0 : return CUBIT_FAILURE;
173 : :
174 : 0 : GeometryFeatureEngine* gfe = get_engine(topo_ptr);
175 : :
176 [ # # ]: 0 : if(!gfe)
177 : 0 : return CUBIT_FAILURE;
178 : :
179 : 0 : return gfe->get_related_by_feature(bte->get_geometry_entity_ptr(),return_list);
180 : : }
181 : :
182 : : DLIList<GeometryFeatureEngine::FeatureType>
183 : 0 : GeometryFeatureTool::available_feature_types(BasicTopologyEntity* bte)
184 : : {
185 : 0 : TopologyEntity* topo_ptr = CAST_TO(bte, TopologyEntity);
186 [ # # ]: 0 : DLIList<GeometryFeatureEngine::FeatureType> null_list;
187 [ # # ]: 0 : if (!topo_ptr)
188 [ # # ]: 0 : return null_list;
189 : :
190 [ # # ]: 0 : GeometryFeatureEngine* gfe = get_engine(topo_ptr);
191 : :
192 [ # # ]: 0 : if(!gfe)
193 [ # # ]: 0 : return null_list;
194 : :
195 [ # # ][ # # ]: 0 : return gfe->available_feature_types(bte->get_geometry_entity_ptr());
[ # # ]
196 : : }
197 : :
198 : : // *** END PUBLIC FUNCTIONS *** //
199 : :
200 : : // *** BEGIN PROTECTED FUNCTIONS *** //
201 : :
202 : 0 : GeometryFeatureTool::GeometryFeatureTool( GeometryFeatureEngine* GFEPtr )
203 : : {
204 [ # # ]: 0 : if (GFEPtr != NULL)
205 [ # # ]: 0 : add_gfe(GFEPtr);
206 [ + - ][ + - ]: 6540 : }
207 : :
208 : : // *** END PROTECTED FUNCTIONS *** //
209 : :
210 : : // *** BEGIN PRIVATE FUNCTIONS *** //
211 : :
212 : : // *** END PRIVATE FUNCTIONS *** //
|