From fc58bd83d1fbf9b42157095b24a64d04d4ce0fa3 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Thu, 25 Jan 2024 10:49:50 -0500 Subject: [PATCH] [TD]fix extension Extend function re scale/rotate --- src/Mod/TechDraw/Gui/CommandExtensionPack.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Mod/TechDraw/Gui/CommandExtensionPack.cpp b/src/Mod/TechDraw/Gui/CommandExtensionPack.cpp index c3008c25c2..a35be20152 100644 --- a/src/Mod/TechDraw/Gui/CommandExtensionPack.cpp +++ b/src/Mod/TechDraw/Gui/CommandExtensionPack.cpp @@ -1475,10 +1475,16 @@ void execExtendShortenLine(Gui::Command* cmd, bool extend) TechDraw::BaseGeomPtr baseGeo = objFeat->getGeomByIndex(num); if (baseGeo) { if (baseGeo->getGeomType() == TechDraw::GENERIC) { - TechDraw::GenericPtr genLine = - std::static_pointer_cast(baseGeo); - Base::Vector3d P0 = genLine->points.at(0); - Base::Vector3d P1 = genLine->points.at(1); + // start and end points are scaled and rotated. invert the points + // so the canonicalPoint math works correctly. + Base::Vector3d P0 = DU::invertY(baseGeo->getStartPoint()); + Base::Vector3d P1 = DU::invertY(baseGeo->getEndPoint()); + // convert start and end to unscaled, unrotated. + P0 = CosmeticVertex::makeCanonicalPoint(objFeat, P0); + P1 = CosmeticVertex::makeCanonicalPoint(objFeat, P1); + // put the points back into weird Qt coord system. + P0 = DU::invertY(P0); + P1 = DU::invertY(P1); bool isCenterLine = false; TechDraw::CenterLine* centerEdge = nullptr; if (baseGeo->getCosmetic()) { @@ -1499,7 +1505,7 @@ void execExtendShortenLine(Gui::Command* cmd, bool extend) isCenterLine = true; centerEdge = objFeat->getCenterLine(uniTag); } - double scale = objFeat->getScale(); + // double scale = objFeat->getScale(); Base::Vector3d direction = (P1 - P0).Normalize(); Base::Vector3d delta = direction * activeDimAttributes.getLineStretch(); Base::Vector3d startPt, endPt; @@ -1519,7 +1525,7 @@ void execExtendShortenLine(Gui::Command* cmd, bool extend) } else { std::string lineTag = - objFeat->addCosmeticEdge(startPt / scale, endPt / scale); + objFeat->addCosmeticEdge(startPt, endPt); TechDraw::CosmeticEdge* lineEdge = objFeat->getCosmeticEdge(lineTag); _setLineAttributes(lineEdge, oldStyle, oldWeight, oldColor); objFeat->refreshCEGeoms();