diff --git a/src/Mod/TechDraw/Gui/TaskCenterLine.cpp b/src/Mod/TechDraw/Gui/TaskCenterLine.cpp index 1cd5d2de6e92..4ad219d9e7bd 100644 --- a/src/Mod/TechDraw/Gui/TaskCenterLine.cpp +++ b/src/Mod/TechDraw/Gui/TaskCenterLine.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include @@ -197,6 +198,8 @@ void TaskCenterLine::setUiPrimary() ui->dsbWeight->setValue(getCenterWidth()); ui->cboxStyle->setCurrentIndex(getCenterStyle()); ui->qsbExtend->setValue(getExtendBy()); + int precision = Base::UnitsApi::getDecimals(); + ui->dsbRotate->setDecimals(precision); } //void TaskCenterLine::enableVPUi(bool b) @@ -227,8 +230,13 @@ void TaskCenterLine::createCenterLine(void) if (ui->rbVertical->isChecked()) { vertical = true; } + double hShift = ui->qsbHorizShift->rawValue(); + double vShift = ui->qsbVertShift->rawValue(); + double rotate = ui->dsbRotate->value(); m_extendBy = ui->qsbExtend->rawValue(); - TechDraw::CosmeticEdge* ce = calcEndPoints(m_subNames,vertical,m_extendBy); + TechDraw::CosmeticEdge* ce = calcEndPoints(m_subNames,vertical, + m_extendBy, + hShift, vShift, rotate); m_partFeat->addCosmeticEdge(ce); m_partFeat->requestPaint(); Gui::Command::updateActive(); @@ -287,7 +295,10 @@ void TaskCenterLine::enableTaskButtons(bool b) m_btnCancel->setEnabled(b); } -TechDraw::CosmeticEdge* TaskCenterLine::calcEndPoints(std::vector faceNames, bool vert, double ext) +TechDraw::CosmeticEdge* TaskCenterLine::calcEndPoints(std::vector faceNames, + bool vert, double ext, + double hShift, double vShift, + double rotate) { // Base::Console().Message("TCL::calcEndPoints(%d, %d) \n",faceNames.size(), vert); TechDraw::CosmeticEdge* result = nullptr; @@ -296,6 +307,9 @@ TechDraw::CosmeticEdge* TaskCenterLine::calcEndPoints(std::vector f faceBox.SetGap(0.0); double scale = m_partFeat->getScale(); + double hss = hShift * scale; + double vss = vShift * scale; + for (auto& fn: faceNames) { if (TechDraw::DrawUtil::getGeomTypeFromName(fn) != "Face") { @@ -324,21 +338,33 @@ TechDraw::CosmeticEdge* TaskCenterLine::calcEndPoints(std::vector f Yspan = (Yspan / 2.0) + ext; double Ymid = Ymin + fabs(Ymax - Ymin) / 2.0; - Base::Vector3d bbxCenter(Xmid, Ymid, 0.0); - Base::Vector3d p1, p2; if (vert) { - Base::Vector3d top(Xmid, Ymid - Yspan, 0.0); - Base::Vector3d bottom(Xmid, Ymid + Yspan, 0.0); + Base::Vector3d top(Xmid + hss, (Ymid - Yspan) + vss, 0.0); + Base::Vector3d bottom(Xmid + hss, (Ymid + Yspan) + vss, 0.0); p1 = top; p2 = bottom; } else { - Base::Vector3d left(Xmid - Xspan, Ymid, 0.0); - Base::Vector3d right(Xmid + Xspan, Ymid, 0.0); + Base::Vector3d left((Xmid - Xspan) + hss, Ymid + vss, 0.0); + Base::Vector3d right((Xmid + Xspan) + hss, Ymid + vss, 0.0); p1 = left; p2 = right; } + Base::Vector3d bbxCenter(Xmid, Ymid, 0.0); + if (!DrawUtil::fpCompare(rotate, 0.0)) { + double cosTheta = cos(rotate * M_PI / 180.0); + double sinTheta = sin(rotate * M_PI / 180.0); + Base::Vector3d toOrg = p1 - bbxCenter; + double xRot = toOrg.x * cosTheta - toOrg.y * sinTheta; + double yRot = toOrg.y * cosTheta + toOrg.x * sinTheta; + p1 = Base::Vector3d(xRot, yRot, 0.0) + bbxCenter; + toOrg = p2 - bbxCenter; + xRot = toOrg.x * cosTheta - toOrg.y * sinTheta; + yRot = toOrg.y * cosTheta + toOrg.x * sinTheta; + p2 = Base::Vector3d(xRot, yRot, 0.0) + bbxCenter; + } + result = new TechDraw::CosmeticEdge(p1 / scale, p2 / scale); //p1 & p2 are as found in GO. App::Color ac; ac.setValue(ui->cpLineColor->color()); diff --git a/src/Mod/TechDraw/Gui/TaskCenterLine.h b/src/Mod/TechDraw/Gui/TaskCenterLine.h index 20437d52e48a..82f2ae9dc5e7 100644 --- a/src/Mod/TechDraw/Gui/TaskCenterLine.h +++ b/src/Mod/TechDraw/Gui/TaskCenterLine.h @@ -109,8 +109,9 @@ protected Q_SLOTS: void updateCenterLine(void); void removeCenterLine(void); TechDraw::CosmeticEdge* calcEndPoints(std::vector faceNames, - bool vert, - double ext); + bool vert, double ext, + double hShift, double vShift, + double rotate); void saveState(void); void restoreState(void); diff --git a/src/Mod/TechDraw/Gui/TaskCenterLine.ui b/src/Mod/TechDraw/Gui/TaskCenterLine.ui index c5aa98ba3921..d543cebf94e4 100644 --- a/src/Mod/TechDraw/Gui/TaskCenterLine.ui +++ b/src/Mod/TechDraw/Gui/TaskCenterLine.ui @@ -7,7 +7,7 @@ 0 0 409 - 405 + 460 @@ -125,6 +125,64 @@ + + + + + + Shift Horiz + + + + + + + Shift Vert + + + + + + + Rotate + + + + + + + Rotate line +CCW or -CW + + + -360.000000000000000 + + + 360.000000000000000 + + + + + + + Move line +Up or -Down + + + + + + + + + + Move line -Left or +Right + + + + + + + +