//======================================================================= //function : Execute //purpose : //======================================================================= Standard_Integer GEOMImpl_SphereDriver::Execute(TFunction_Logbook& log) const { if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); GEOMImpl_ISphere aCI (aFunction); Standard_Integer aType = aFunction->GetType(); TopoDS_Shape aShape; char aMsg[] = "Sphere creation aborted: radius value less than 1e-07 is not acceptable"; if (aType == SPHERE_R) { double anR = aCI.GetR(); if (anR < Precision::Confusion()) Standard_ConstructionError::Raise(aMsg); aShape = BRepPrimAPI_MakeSphere(anR).Shape(); } else if (aType == SPHERE_PNT_R) { double anR = aCI.GetR(); if (anR < Precision::Confusion()) Standard_ConstructionError::Raise(aMsg); Handle(GEOM_Function) aRefPoint = aCI.GetPoint(); TopoDS_Shape aShapePnt = aRefPoint->GetValue(); if (aShapePnt.ShapeType() != TopAbs_VERTEX) Standard_ConstructionError::Raise("Invalid shape given for sphere center: it must be a point"); gp_Pnt aP = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt)); aShape = BRepPrimAPI_MakeSphere(aP, anR).Shape(); } else { } if (aShape.IsNull()) return 0; aFunction->SetValue(aShape); log.SetTouched(Label()); return 1; }
//======================================================================= //function : Execute //purpose : //======================================================================= Standard_Integer GEOMImpl_SphereDriver::Execute(TFunction_Logbook& log) const { if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); GEOMImpl_ISphere aCI (aFunction); Standard_Integer aType = aFunction->GetType(); TopoDS_Shape aShape; char aMsg[] = "Sphere creation aborted: radius value less than 1e-07 is not acceptable"; double theAngle = aCI.GetAngle(); if (theAngle == 0.) theAngle = PI * 2.; double theVCoordStart = aCI.GetVCoordStart(); double theVCoordEnd = aCI.GetVCoordEnd(); if (aType == SPHERE_R) { double anR = aCI.GetR(); if (anR < Precision::Confusion()) Standard_ConstructionError::Raise(aMsg); //There seems to be an issue with the BRepPrimAPI_MakeSphere command concerning //the limitations on V coodinates of its parametric space ... (Will not be used for the moment) aShape = BRepPrimAPI_MakeSphere(anR /*, theVCoordStart, theVCoordEnd*/ , theAngle).Shape(); } else if (aType == SPHERE_PNT_R) { double anR = aCI.GetR(); if (anR < Precision::Confusion()) Standard_ConstructionError::Raise(aMsg); Handle(GEOM_Function) aRefPoint = aCI.GetPoint(); TopoDS_Shape aShapePnt = aRefPoint->GetValue(); if (aShapePnt.ShapeType() != TopAbs_VERTEX) Standard_ConstructionError::Raise("Invalid shape given for sphere center: it must be a point"); gp_Pnt aP = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt)); aShape = BRepPrimAPI_MakeSphere(aP, anR/*, theVCoordStart, theVCoordEnd*/, theAngle).Shape(); } else { } if (aShape.IsNull()) return 0; aFunction->SetValue(aShape); log.SetTouched(Label()); return 1; }