
Tue, 01/16/2018 - 11:00
Forums:
I have a circular face from which I want to add a bottle cap like hemisphere.
I have the radius of the circular face but not its center point. I've used the following code but the hemisphere doesn't completely fit.
TopoDS_Face circularFace...;
double ToolRadius = 10;
gp_Dir normal(0,1,0);
GProp_GProps props;
BRepGProp::LinearProperties(circularFace, props);
gp_Pnt centerMass = props.CentreOfMass();//get the center of mass
gp_Ax2 Ax2(centerMass, normal);
TopoDS_Face S2 = BRepPrimAPI_MakeSphere(Ax2, ToolRadius, PI);
I've attached an image of the shapes. How can I make the bottle cap completely fit?
Thank you.
Attachments:
Wed, 01/17/2018 - 08:18
If you know circularFace is "circular", extract its outer edge which should be of type GeomAbs_Arc. from that u could get its center as well as radius and
compute the necessary inputs for the MakeShere API.
regards
PG
Thu, 01/18/2018 - 09:00
Thanks PG. That solution worked.
Here's the code I used.
TopoDS_Edge tnpEdge;
for(TopExp_Explorer explrV(circularFace, TopAbs_EDGE); explrV.More(); explrV.Next()){
tnpEdge = TopoDS::Edge(explrV.Current());
}
Standard_Real first,last;
gp_Pnt pntFst, pntLst,pntMdl;
Handle(Geom_Curve) Projected_Curve = BRep_Tool::Curve(tnpEdge,first,last);
Projected_Curve->D0(first,pntFst);
Projected_Curve->D0((first+last)/2,pntLst);
Projected_Curve->D0((first+ (last-first)/4),pntMdl);
gce_MakeCirc mkCirc(pntFst, pntLst, pntMdl);
gp_Circ circ = mkCirc.Value();
double rad = circ.Radius();
gp_Pnt mid = circ.Location();
gp_Ax2 Ax(mid, norm);
TopoDS_Face S2 = BRepPrimAPI_MakeSphere(Ax, rad, PI);