Sketcher: modernize type checking

This commit is contained in:
Florian Foinant-Willig
2023-10-15 21:39:00 +02:00
parent cd403748f8
commit c0e8fa1e75
26 changed files with 352 additions and 406 deletions

View File

@@ -117,8 +117,7 @@ public:
if (SegmentMode == SEGMENT_MODE_Line) {
switch (TransitionMode) {
case TRANSITION_MODE_Free:
if (geom->getTypeId()
== Part::GeomArcOfCircle::getClassTypeId()) { // 3rd mode
if (geom->is<Part::GeomArcOfCircle>()) { // 3rd mode
SegmentMode = SEGMENT_MODE_Arc;
TransitionMode = TRANSITION_MODE_Tangent;
}
@@ -127,7 +126,7 @@ public:
}
break;
case TRANSITION_MODE_Perpendicular_L: // 2nd mode
if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) {
if (geom->is<Part::GeomArcOfCircle>()) {
TransitionMode = TRANSITION_MODE_Free;
}
else {
@@ -135,8 +134,7 @@ public:
}
break;
case TRANSITION_MODE_Tangent:
if (geom->getTypeId()
== Part::GeomArcOfCircle::getClassTypeId()) { // 1st mode
if (geom->is<Part::GeomArcOfCircle>()) { // 1st mode
TransitionMode = TRANSITION_MODE_Perpendicular_L;
}
else { // 3rd mode
@@ -159,7 +157,7 @@ public:
break;
default: // 6th mode (Perpendicular_R) + unexpected mode
SegmentMode = SEGMENT_MODE_Line;
if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) {
if (geom->is<Part::GeomArcOfCircle>()) {
TransitionMode = TRANSITION_MODE_Tangent;
}
else {
@@ -342,15 +340,14 @@ public:
if (sugConstr1[i].Type == Sketcher::Coincident) {
const Part::Geometry* geom =
sketchgui->getSketchObject()->getGeometry(sugConstr1[i].GeoId);
if ((geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()
|| geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId())
if ((geom->is<Part::GeomLineSegment>() || geom->is<Part::GeomArcOfCircle>())
&& (sugConstr1[i].PosId == Sketcher::PointPos::start
|| sugConstr1[i].PosId == Sketcher::PointPos::end)) {
previousCurve = sugConstr1[i].GeoId;
previousPosId = sugConstr1[i].PosId;
updateTransitionData(previousCurve,
previousPosId); // -> dirVec, EditCurve[0]
if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) {
if (geom->is<Part::GeomArcOfCircle>()) {
TransitionMode = TRANSITION_MODE_Tangent;
SnapMode = SNAP_MODE_Free;
}
@@ -785,7 +782,7 @@ protected:
// Use updated startPoint/endPoint as autoconstraints can modify the position
const Part::Geometry* geom = sketchgui->getSketchObject()->getGeometry(GeoId);
if (geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()) {
if (geom->is<Part::GeomLineSegment>()) {
const Part::GeomLineSegment* lineSeg = static_cast<const Part::GeomLineSegment*>(geom);
dirVec.Set(lineSeg->getEndPoint().x - lineSeg->getStartPoint().x,
lineSeg->getEndPoint().y - lineSeg->getStartPoint().y,
@@ -799,7 +796,7 @@ protected:
EditCurve[0] = Base::Vector2d(lineSeg->getEndPoint().x, lineSeg->getEndPoint().y);
}
}
else if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) {
else if (geom->is<Part::GeomArcOfCircle>()) {
const Part::GeomArcOfCircle* arcSeg = static_cast<const Part::GeomArcOfCircle*>(geom);
if (PosId == Sketcher::PointPos::start) {
EditCurve[0] = Base::Vector2d(arcSeg->getStartPoint(/*emulateCCW=*/true).x,