+ use standard views if plane normal is parallel to main axis
git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5131 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
This commit is contained in:
parent
fe05bdc942
commit
84be918bec
|
@ -94,19 +94,47 @@ Base::Placement Part2DObject::positionBySupport(const TopoDS_Face &face, const B
|
|||
if (Reverse)
|
||||
Normal.Reverse();
|
||||
|
||||
Handle (Geom_Plane) gPlane = new Geom_Plane(plane);
|
||||
GeomAPI_ProjectPointOnSurf projector(ObjOrg,gPlane);
|
||||
|
||||
gp_Pnt SketchBasePoint = projector.NearestPoint();
|
||||
|
||||
// check the angle against the Y Axis
|
||||
Standard_Real a = Normal.Angle(gp_Ax1(gp_Pnt(0,0,0),gp_Dir(0,1,0)));
|
||||
|
||||
gp_Dir dir = Normal.Direction();
|
||||
gp_Pnt pos = Normal.Location();
|
||||
gp_Ax3 SketchPos;
|
||||
if (fabs(a)<0.1 || fabs((fabs(a)-M_PI))< 0.1)
|
||||
SketchPos = gp_Ax3(SketchBasePoint,Normal._CSFDB_Getgp_Ax1vdir(),gp_Dir(1,0,0));
|
||||
else
|
||||
SketchPos = gp_Ax3(SketchBasePoint,Normal._CSFDB_Getgp_Ax1vdir());
|
||||
// +X
|
||||
if (dir.IsEqual(gp::DX(),0)) {
|
||||
SketchPos = gp_Ax3(pos, dir, gp_Dir(0,1,0));
|
||||
}
|
||||
// -X
|
||||
else if (dir.IsOpposite(gp::DX(),0)) {
|
||||
SketchPos = gp_Ax3(pos, dir, gp_Dir(0,-1,0));
|
||||
}
|
||||
// +Y
|
||||
else if (dir.IsEqual(gp::DY(),0)) {
|
||||
SketchPos = gp_Ax3(pos, dir, gp_Dir(-1,0,0));
|
||||
}
|
||||
// -Y
|
||||
else if (dir.IsOpposite(gp::DY(),0)) {
|
||||
SketchPos = gp_Ax3(pos, dir, gp_Dir(1,0,0));
|
||||
}
|
||||
// +Z
|
||||
else if (dir.IsEqual(gp::DZ(),0)) {
|
||||
SketchPos = gp_Ax3(pos, dir, gp_Dir(1,0,0));
|
||||
}
|
||||
// -Z
|
||||
else if (dir.IsOpposite(gp::DZ(),0)) {
|
||||
SketchPos = gp_Ax3(pos, dir, gp_Dir(1,0,0));
|
||||
}
|
||||
else {
|
||||
Handle (Geom_Plane) gPlane = new Geom_Plane(plane);
|
||||
GeomAPI_ProjectPointOnSurf projector(ObjOrg,gPlane);
|
||||
|
||||
gp_Pnt SketchBasePoint = projector.NearestPoint();
|
||||
|
||||
// check the angle against the Y Axis
|
||||
Standard_Real a = Normal.Angle(gp_Ax1(gp_Pnt(0,0,0),gp_Dir(0,1,0)));
|
||||
|
||||
if (fabs(a)<0.1 || fabs((fabs(a)-M_PI))< 0.1)
|
||||
SketchPos = gp_Ax3(SketchBasePoint,Normal._CSFDB_Getgp_Ax1vdir(),gp_Dir(1,0,0));
|
||||
else
|
||||
SketchPos = gp_Ax3(SketchBasePoint,Normal._CSFDB_Getgp_Ax1vdir());
|
||||
}
|
||||
|
||||
gp_Trsf Trf;
|
||||
Trf.SetTransformation(SketchPos);
|
||||
|
|
Loading…
Reference in New Issue
Block a user