Standard_Boolean ShHealOper_ChangeOrientation::Perform() { BRep_Builder B; if (myInitShape.ShapeType() == TopAbs_SHELL) { myResultShape = myInitShape.EmptyCopied(); TopoDS_Iterator itr (myInitShape); while (itr.More()) { B.Add(myResultShape,itr.Value().Reversed()); itr.Next(); } } else if (myInitShape.ShapeType() == TopAbs_FACE) { myResultShape = myInitShape.EmptyCopied(); TopoDS_Iterator itr (myInitShape); while (itr.More()) { B.Add(myResultShape,itr.Value()); itr.Next(); } myResultShape.Reverse(); } else if ( myInitShape.ShapeType() == TopAbs_WIRE || myInitShape.ShapeType() == TopAbs_EDGE) { myResultShape = myInitShape.EmptyCopied(); TopoDS_Iterator itr (myInitShape); while (itr.More()) { B.Add(myResultShape,itr.Value()); itr.Next(); } myResultShape.Reverse(); } else { BRepBuilderAPI_Copy Copy (myInitShape); if (!Copy.IsDone()) return false; myResultShape = Copy.Shape(); if (myResultShape.IsNull()) return false; if (myResultShape.Orientation() == TopAbs_FORWARD) myResultShape.Orientation(TopAbs_REVERSED); else myResultShape.Orientation(TopAbs_FORWARD); } return true; }
OCCWire *OCCWire::copy(bool deepCopy = false) { OCCWire *ret = new OCCWire(); try { if (deepCopy) { BRepBuilderAPI_Copy A; A.Perform(this->getWire()); ret->setShape(A.Shape()); } else { ret->setShape(this->getShape()); } } catch(Standard_Failure &err) { Handle_Standard_Failure e = Standard_Failure::Caught(); const Standard_CString msg = e->GetMessageString(); if (msg != NULL && strlen(msg) > 1) { setErrorMessage(msg); } else { setErrorMessage("Failed to copy wire"); } return NULL; } return ret; }