Fix Detail highlight position for rotated DPGI

- highlight position calculation was not taking into account
  rotation of DPGI due to RotationVector property.
This commit is contained in:
wandererfan
2018-12-16 12:52:17 -05:00
committed by Yorik van Havre
parent c1fdc42fd6
commit bb0bbeef9a
8 changed files with 89 additions and 9 deletions

View File

@@ -195,7 +195,6 @@ gp_Ax2 DrawProjGroupItem::getViewAxis(const Base::Vector3d& pt,
return viewAxis;
}
//obs??
//get the angle between the current RotationVector vector and the original X dir angle
double DrawProjGroupItem::getRotateAngle()
{
@@ -212,8 +211,7 @@ double DrawProjGroupItem::getRotateAngle()
gp_Dir gxDir = viewAxis.XDirection();
Base::Vector3d origX(gxDir.X(),gxDir.Y(),gxDir.Z());
origX.Normalize();
double dot = fabs(origX.Dot(nx));
double angle = acos(dot);
double angle = origX.GetAngle(nx);
Base::Vector3d rotAxis = origX.Cross(nx);
if (rotAxis == Direction.getValue()) {

View File

@@ -207,12 +207,20 @@ App::DocumentObjectExecReturn *DrawViewDetail::execute(void)
if (dpgi != nullptr) {
viewAxis = dpgi->getViewAxis(shapeCenter, dirDetail);
vaBase = TechDrawGeometry::getViewAxis(shapeCenter,dirDetail,false);
if (!vaBase.Direction().IsEqual(viewAxis.Direction(), Precision::Angular())) {
Base::Vector3d vaDir(vaBase.Direction().X(),vaBase.Direction().Y(),vaBase.Direction().Z());
Base::Vector3d vabDir(vaBase.Direction().X(),vaBase.Direction().Y(),vaBase.Direction().Z());
double vaDot = vaDir.Dot(vabDir);
if (DrawUtil::fpCompare(vaDot,-1.0)) { //anti-parallel, flip
myShape = TechDrawGeometry::rotateShape(myShape,
viewAxis,
180.0);
}
if (!vaBase.XDirection().IsEqual(viewAxis.XDirection(), Precision::Angular())) {
Base::Vector3d vaxDir(vaBase.XDirection().X(),vaBase.XDirection().Y(),vaBase.XDirection().Z());
Base::Vector3d vabxDir(vaBase.XDirection().X(),vaBase.XDirection().Y(),vaBase.XDirection().Z());
double vaxDot = vaxDir.Dot(vabxDir);
if (DrawUtil::fpCompare(vaxDot,-1.0)) {
myShape = TechDrawGeometry::rotateShape(myShape,
viewAxis,
180.0);