Sketcher Ellipse bug fix:
- Fix placement of equality symbols at ellipses and arcs of ellipses
This commit is contained in:
parent
a067a7c25a
commit
f24b589d67
|
@ -3126,73 +3126,91 @@ Restart:
|
|||
if (geo1->getTypeId() != Part::GeomLineSegment::getClassTypeId() ||
|
||||
geo2->getTypeId() != Part::GeomLineSegment::getClassTypeId()) {
|
||||
if (Constr->Type == Equal) {
|
||||
double r1,r2,angle1,angle2;
|
||||
double r1a,r1b,r2a,r2b;
|
||||
double angle1,angle1plus=0., angle2, angle2plus=0.;//angle1 = rotation of object as a whole; angle1plus = arc angle (t parameter for ellipses).
|
||||
if (geo1->getTypeId() == Part::GeomCircle::getClassTypeId()) { // TODO: ellipse
|
||||
const Part::GeomCircle *circle = dynamic_cast<const Part::GeomCircle *>(geo1);
|
||||
r1 = circle->getRadius();
|
||||
r1a = circle->getRadius();
|
||||
r1b=r1a;
|
||||
angle1 = M_PI/4;
|
||||
midpos1 = circle->getCenter();
|
||||
} else if (geo1->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) {
|
||||
const Part::GeomArcOfCircle *arc = dynamic_cast<const Part::GeomArcOfCircle *>(geo1);
|
||||
r1 = arc->getRadius();
|
||||
r1a = arc->getRadius();
|
||||
r1b=r1a;
|
||||
double startangle, endangle;
|
||||
arc->getRange(startangle, endangle);
|
||||
angle1 = (startangle + endangle)/2;
|
||||
midpos1 = arc->getCenter();
|
||||
} else if (geo1->getTypeId() == Part::GeomEllipse::getClassTypeId()) {
|
||||
// TODO: ellipse
|
||||
const Part::GeomEllipse *ellipse = dynamic_cast<const Part::GeomEllipse *>(geo1);
|
||||
r1 = ellipse->getMajorRadius();
|
||||
angle1 = -ellipse->getAngleXU();
|
||||
r1a = ellipse->getMajorRadius();
|
||||
r1b = ellipse->getMinorRadius();
|
||||
angle1 = ellipse->getAngleXU();
|
||||
angle1plus = M_PI/4;
|
||||
midpos1 = ellipse->getCenter();
|
||||
} else if (geo1->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId()) {
|
||||
// TODO: ellipse
|
||||
const Part::GeomArcOfEllipse *aoe = dynamic_cast<const Part::GeomArcOfEllipse *>(geo1);
|
||||
r1 = aoe->getMajorRadius();
|
||||
r1a = aoe->getMajorRadius();
|
||||
r1b = aoe->getMinorRadius();
|
||||
double startangle, endangle;
|
||||
aoe->getRange(startangle, endangle);
|
||||
angle1 = (startangle + endangle)/2-aoe->getAngleXU();
|
||||
angle1 = aoe->getAngleXU();
|
||||
angle1plus = (startangle + endangle)/2;
|
||||
midpos1 = aoe->getCenter();
|
||||
} else
|
||||
break;
|
||||
|
||||
if (geo2->getTypeId() == Part::GeomCircle::getClassTypeId()) {
|
||||
const Part::GeomCircle *circle = dynamic_cast<const Part::GeomCircle *>(geo2);
|
||||
r2 = circle->getRadius();
|
||||
r2a = circle->getRadius();
|
||||
r2b=r2a;
|
||||
angle2 = M_PI/4;
|
||||
midpos2 = circle->getCenter();
|
||||
} else if (geo2->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) {
|
||||
const Part::GeomArcOfCircle *arc = dynamic_cast<const Part::GeomArcOfCircle *>(geo2);
|
||||
r2 = arc->getRadius();
|
||||
r2a = arc->getRadius();
|
||||
r2b=r2a;
|
||||
double startangle, endangle;
|
||||
arc->getRange(startangle, endangle);
|
||||
angle2 = (startangle + endangle)/2;
|
||||
midpos2 = arc->getCenter();
|
||||
} else if (geo2->getTypeId() == Part::GeomEllipse::getClassTypeId()) {
|
||||
// TODO: ellipse
|
||||
const Part::GeomEllipse *ellipse = dynamic_cast<const Part::GeomEllipse *>(geo2);
|
||||
r2 = ellipse->getMajorRadius();
|
||||
angle2 = -ellipse->getAngleXU();
|
||||
r2a = ellipse->getMajorRadius();
|
||||
r2b = ellipse->getMinorRadius();
|
||||
angle2 = ellipse->getAngleXU();
|
||||
angle2plus = M_PI/4;
|
||||
midpos2 = ellipse->getCenter();
|
||||
} else if (geo2->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId()) {
|
||||
// TODO: ellipse
|
||||
const Part::GeomArcOfEllipse *aoe = dynamic_cast<const Part::GeomArcOfEllipse *>(geo2);
|
||||
r2 = aoe->getMajorRadius();
|
||||
r2a = aoe->getMajorRadius();
|
||||
r2b = aoe->getMinorRadius();
|
||||
double startangle, endangle;
|
||||
aoe->getRange(startangle, endangle);
|
||||
angle1 = (startangle + endangle)/2-aoe->getAngleXU();
|
||||
midpos1 = aoe->getCenter();
|
||||
angle2 = aoe->getAngleXU();
|
||||
angle2plus = (startangle + endangle)/2;
|
||||
midpos2 = aoe->getCenter();
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
norm1 = Base::Vector3d(cos(angle1),sin(angle1),0);
|
||||
dir1 = Base::Vector3d(-norm1.y,norm1.x,0);
|
||||
midpos1 += r1*norm1;
|
||||
Base::Vector3d majDir, minDir, rvec;
|
||||
majDir = Base::Vector3d(cos(angle1),sin(angle1),0);//direction of major axis of ellipse
|
||||
minDir = Base::Vector3d(-majDir.y,majDir.x,0);//direction of minor axis of ellipse
|
||||
rvec = (r1a*cos(angle1plus)) * majDir + (r1b*sin(angle1plus)) * minDir;
|
||||
midpos1 += rvec;
|
||||
rvec.Normalize();
|
||||
norm1 = rvec;
|
||||
dir1 = Base::Vector3d(-rvec.y,rvec.x,0);//DeepSOIC: I'm not sure what dir is supposed to mean.
|
||||
|
||||
norm2 = Base::Vector3d(cos(angle2),sin(angle2),0);
|
||||
dir2 = Base::Vector3d(-norm2.y,norm2.x,0);
|
||||
midpos2 += r2*norm2;
|
||||
majDir = Base::Vector3d(cos(angle2),sin(angle2),0);//direction of major axis of ellipse
|
||||
minDir = Base::Vector3d(-majDir.y,majDir.x,0);//direction of minor axis of ellipse
|
||||
rvec = (r2a*cos(angle2plus)) * majDir + (r2b*sin(angle2plus)) * minDir;
|
||||
midpos2 += rvec;
|
||||
rvec.Normalize();
|
||||
norm2 = rvec;
|
||||
dir2 = Base::Vector3d(-rvec.y,rvec.x,0);
|
||||
} else // Parallel can only apply to a GeomLineSegment
|
||||
break;
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue
Block a user