Author: janehu Date: 2008-03-19 14:15:46 -0500 (Wed, 19 Mar 2008) New Revision: 1673 Modified: cgm/trunk/geom/OCC/OCCModifyEngine.cpp Log: Fine tuned subtract function. Modified: cgm/trunk/geom/OCC/OCCModifyEngine.cpp =================================================================== --- cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2008-03-18 15:43:32 UTC (rev 1672) +++ cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2008-03-19 19:15:46 UTC (rev 1673) @@ -1599,8 +1599,9 @@ DLIList<TopologyBridge*> tbs; for (int i = 0; i < from_bodies_copy.size(); i++) { - BodySM* from_body = from_bodies.get_and_step(); + BodySM* from_body = from_bodies.get(); CubitBox box1 = CAST_TO(from_body, OCCBody)->get_bounding_box(); + int count = 0; //count for not preforming cut for(int j = 0; j < tool_body_list.size(); j ++) { if (cmi->Interrupt()) @@ -1616,17 +1617,31 @@ } CubitBox tool_box = *tool_boxes.get_and_step(); if(!tool_box.overlap(tol,box1)) + { + count++; continue; - + } TopoDS_Shape* tool_shape = tool_bodies_copy.get_and_step(); //bodies overlap, proceed with the subtract TopoDS_Shape cut_shape = BRepAlgoAPI_Cut(*from_shape, *tool_shape); + if(!from_shape->Modified()) + { + count++; + continue; + } delete from_shape; from_shape = new TopoDS_Shape(cut_shape); } //ok, we're done wih all cuts, construct new Body' - tbs = OCCQueryEngine::instance()->populate_topology_bridge(*from_shape); + if (count < tool_body_list.size()) + tbs += OCCQueryEngine::instance()->populate_topology_bridge(*from_shape); + else + { + PRINT_INFO("The %d body did not change because cutting tools are not interscting with it.\n", i+1); + from_bodies.change_to(NULL); + } + from_bodies.step(); from_shape = from_bodies_copy.step_and_get(); // done with this j iteration; write out count, if necessary @@ -1636,14 +1651,14 @@ if ((100 - frac_done) < fraction_remaining) { fraction_remaining = 100 - frac_done; - PRINT_INFO("%d% remaining. ", fraction_remaining); + PRINT_INFO("%d% remaining.\n ", fraction_remaining); } } } for (int i = 0; i< tbs.size(); i++) { - BodySM* bodysm = CAST_TO(tbs.get(), BodySM); + BodySM* bodysm = CAST_TO(tbs.get_and_step(), BodySM); if (bodysm) new_bodies.append(bodysm); } @@ -1655,6 +1670,7 @@ delete tool_bodies_copy.pop(); if (!keep_old) { + from_bodies.remove_all_with_value(NULL); OCCQueryEngine::instance()->delete_solid_model_entities(from_bodies); OCCQueryEngine::instance()->delete_solid_model_entities( tool_body_list); }
participants (1)
-
janehu@mcs.anl.gov