From 84be918bec558d01d97b1b503f162d6f50cdfc30 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 14 Nov 2011 18:17:41 +0000 Subject: [PATCH] + 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 --- src/Mod/Part/App/Part2DObject.cpp | 52 ++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/src/Mod/Part/App/Part2DObject.cpp b/src/Mod/Part/App/Part2DObject.cpp index d674c1f2d..69b4693e4 100644 --- a/src/Mod/Part/App/Part2DObject.cpp +++ b/src/Mod/Part/App/Part2DObject.cpp @@ -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);