23
#include "PreCompiled.h"
25
# include <QApplication>
26
# include <QMessageBox>
30
# include <App/Document.h>
31
# include <App/DocumentObject.h>
32
# include <Base/Console.h>
33
# include <Base/Type.h>
34
# include <Gui/Action.h>
35
# include <Gui/Application.h>
36
# include <Gui/BitmapFactory.h>
37
# include <Gui/Command.h>
38
# include <Gui/Control.h>
39
# include <Gui/MainWindow.h>
40
# include <Gui/Selection.h>
41
# include <Gui/SelectionObject.h>
43
# include <Mod/TechDraw/App/Cosmetic.h>
44
# include <Mod/TechDraw/App/DrawViewBalloon.h>
45
# include <Mod/TechDraw/App/DrawViewDimension.h>
46
# include <Mod/TechDraw/App/DrawPage.h>
47
# include <Mod/TechDraw/App/DrawUtil.h>
48
# include <Mod/TechDraw/App/DrawViewPart.h>
49
# include <Mod/TechDraw/App/Preferences.h>
51
#include "DlgTemplateField.h"
52
#include "DrawGuiUtil.h"
53
#include "TaskCustomizeFormat.h"
54
#include "TaskSelectLineAttributes.h"
57
using namespace TechDrawGui;
58
using namespace TechDraw;
60
namespace TechDrawGui {
69
bool operator()(dimVertex a, dimVertex b) const { return a.point.x < b.point.x; }
73
bool operator()(dimVertex a, dimVertex b) const { return a.point.y < b.point.y; }
77
void _selectDimensionAttributes(Gui::Command* cmd);
78
std::vector<TechDraw::DrawViewDimension*>_getDimensions(std::vector<Gui::SelectionObject> selection, std::string needDimType);
79
std::vector<dimVertex> _getVertexInfo(TechDraw::DrawViewPart* objFeat,
80
std::vector<std::string> subNames);
81
TechDraw::DrawViewDimension* _createLinDimension(Gui::Command* cmd,
82
TechDraw::DrawViewPart* objFeat,
83
std::string startVertex,
84
std::string endVertex,
86
bool _checkSelection(Gui::Command* cmd,
87
std::vector<Gui::SelectionObject>& selection,
89
bool _checkSelAndObj(Gui::Command* cmd,
90
std::vector<Gui::SelectionObject>& selection,
91
TechDraw::DrawViewPart*& objFeat,
93
bool _checkSelObjAndSubs(Gui::Command* cmd,
94
std::vector<Gui::SelectionObject>& selection,
95
TechDraw::DrawViewPart*& objFeat,
103
void execInsertPrefixChar(Gui::Command* cmd, std::string prefixFormat, const QAction *action = nullptr) {
105
std::vector<Gui::SelectionObject> selection;
106
if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("Command","TechDraw Insert Prefix"))) {
110
std::string prefixText(prefixFormat);
111
if (prefixFormat.find("%s") != std::string::npos) {
113
const int MAX_PREFIX_LENGTH = 31;
116
if (action->objectName() == QString::fromUtf8("TechDraw_ExtensionInsertRepetition")) {
117
ui.setFieldName(QT_TR_NOOP("Repeat Count"));
121
ui.setFieldLength(MAX_PREFIX_LENGTH);
122
ui.setFieldContent("");
123
if (ui.exec() != QDialog::Accepted) {
127
char prefixData[(MAX_PREFIX_LENGTH + 1)*4];
128
snprintf(prefixData, sizeof(prefixData), prefixFormat.c_str(), ui.getFieldContent().toUtf8().constData());
129
prefixText = prefixData;
132
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Insert Prefix"));
133
for (auto selected : selection) {
134
auto object = selected.getObject();
135
if (object->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId())) {
136
auto dim = static_cast<TechDraw::DrawViewDimension*>(selected.getObject());
137
std::string formatSpec = dim->FormatSpec.getStrValue();
138
formatSpec = prefixText + formatSpec;
139
dim->FormatSpec.setValue(formatSpec);
142
Gui::Command::commitCommand();
145
DEF_STD_CMD_A(CmdTechDrawExtensionInsertDiameter)
147
CmdTechDrawExtensionInsertDiameter::CmdTechDrawExtensionInsertDiameter()
148
: Command("TechDraw_ExtensionInsertDiameter")
150
sAppModule = "TechDraw";
151
sGroup = QT_TR_NOOP("TechDraw");
152
sMenuText = QT_TR_NOOP("Insert '⌀' Prefix");
153
sToolTipText = QT_TR_NOOP("Insert a '⌀' symbol at the beginning of the dimension text:<br>\
154
- Select one or more dimensions<br>\
156
sWhatsThis = "TechDraw_ExtensionInsertDiameter";
157
sStatusTip = sMenuText;
158
sPixmap = "TechDraw_ExtensionInsertDiameter";
161
void CmdTechDrawExtensionInsertDiameter::activated(int iMsg)
164
execInsertPrefixChar(this, "⌀");
167
bool CmdTechDrawExtensionInsertDiameter::isActive()
169
bool havePage = DrawGuiUtil::needPage(this);
170
bool haveView = DrawGuiUtil::needView(this);
171
return (havePage && haveView);
178
DEF_STD_CMD_A(CmdTechDrawExtensionInsertSquare)
180
CmdTechDrawExtensionInsertSquare::CmdTechDrawExtensionInsertSquare()
181
: Command("TechDraw_ExtensionInsertSquare")
183
sAppModule = "TechDraw";
184
sGroup = QT_TR_NOOP("TechDraw");
185
sMenuText = QT_TR_NOOP("Insert '□' Prefix");
186
sToolTipText = QT_TR_NOOP("Insert a '□' symbol at the beginning of the dimension text:<br>\
187
- Select one or more dimensions<br>\
189
sWhatsThis = "TechDraw_ExtensionInsertSquare";
190
sStatusTip = sMenuText;
191
sPixmap = "TechDraw_ExtensionInsertSquare";
194
void CmdTechDrawExtensionInsertSquare::activated(int iMsg)
197
execInsertPrefixChar(this, "□");
200
bool CmdTechDrawExtensionInsertSquare::isActive()
202
bool havePage = DrawGuiUtil::needPage(this);
203
bool haveView = DrawGuiUtil::needView(this);
204
return (havePage && haveView);
211
DEF_STD_CMD_A(CmdTechDrawExtensionInsertRepetition)
213
CmdTechDrawExtensionInsertRepetition::CmdTechDrawExtensionInsertRepetition()
214
: Command("TechDraw_ExtensionInsertRepetition")
216
sAppModule = "TechDraw";
217
sGroup = QT_TR_NOOP("TechDraw");
218
sMenuText = QT_TR_NOOP("Insert 'n×' Prefix");
219
sToolTipText = QT_TR_NOOP("Insert repeated feature count at the beginning of the dimension text:<br>\
220
- Select one or more dimensions<br>\
222
sWhatsThis = "TechDraw_ExtensionInsertRepetition";
223
sStatusTip = sMenuText;
224
sPixmap = "TechDraw_ExtensionInsertRepetition";
227
void CmdTechDrawExtensionInsertRepetition::activated(int iMsg)
231
execInsertPrefixChar(this, "%s× ", this->getAction()->action());
234
bool CmdTechDrawExtensionInsertRepetition::isActive()
236
bool havePage = DrawGuiUtil::needPage(this);
237
bool haveView = DrawGuiUtil::needView(this);
238
return (havePage && haveView);
245
void execRemovePrefixChar(Gui::Command* cmd) {
247
std::vector<Gui::SelectionObject> selection;
248
if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("Command","TechDraw Remove Prefix"))) {
252
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Remove Prefix"));
253
for (auto selected : selection)
255
auto object = selected.getObject();
256
if (object->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId())) {
257
auto dim = static_cast<TechDraw::DrawViewDimension*>(selected.getObject());
258
std::string formatSpec = dim->FormatSpec.getStrValue();
259
int pos = formatSpec.find("%.");
262
formatSpec = formatSpec.substr(pos);
263
dim->FormatSpec.setValue(formatSpec);
267
Gui::Command::commitCommand();
270
DEF_STD_CMD_A(CmdTechDrawExtensionRemovePrefixChar)
272
CmdTechDrawExtensionRemovePrefixChar::CmdTechDrawExtensionRemovePrefixChar()
273
: Command("TechDraw_ExtensionRemovePrefixChar")
275
sAppModule = "TechDraw";
276
sGroup = QT_TR_NOOP("TechDraw");
277
sMenuText = QT_TR_NOOP("Remove Prefix");
278
sToolTipText = QT_TR_NOOP("Remove prefix symbols at the beginning of the dimension text:<br>\
279
- Select one or more dimensions<br>\
281
sWhatsThis = "TechDraw_ExtensionRemovePrefixChar";
282
sStatusTip = sMenuText;
283
sPixmap = "TechDraw_ExtensionRemovePrefixChar";
286
void CmdTechDrawExtensionRemovePrefixChar::activated(int iMsg)
289
execRemovePrefixChar(this);
292
bool CmdTechDrawExtensionRemovePrefixChar::isActive()
294
bool havePage = DrawGuiUtil::needPage(this);
295
bool haveView = DrawGuiUtil::needView(this);
296
return (havePage && haveView);
303
DEF_STD_CMD_ACL(CmdTechDrawExtensionInsertPrefixGroup)
305
CmdTechDrawExtensionInsertPrefixGroup::CmdTechDrawExtensionInsertPrefixGroup()
306
: Command("TechDraw_ExtensionInsertPrefixGroup")
308
sAppModule = "TechDraw";
309
sGroup = QT_TR_NOOP("TechDraw");
310
sMenuText = QT_TR_NOOP("Insert '⌀' Prefix");
311
sToolTipText = QT_TR_NOOP("Insert a '⌀' symbol at the beginning of the dimension text:<br>\
312
- Select one or more dimensions<br>\
314
sWhatsThis = "TechDraw_ExtensionInsertPrefixGroup";
315
sStatusTip = sMenuText;
318
void CmdTechDrawExtensionInsertPrefixGroup::activated(int iMsg)
321
Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog();
323
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
324
QObject::tr("Close active task dialog and try again."));
328
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
329
pcAction->setIcon(pcAction->actions().at(iMsg)->icon());
332
execInsertPrefixChar(this, "⌀");
335
execInsertPrefixChar(this, "□");
338
execInsertPrefixChar(this, "%s× ", pcAction->actions().at(iMsg));
341
execRemovePrefixChar(this);
344
Base::Console().Message("CMD::CVGrp - invalid iMsg: %d\n", iMsg);
348
Gui::Action* CmdTechDrawExtensionInsertPrefixGroup::createAction()
350
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
351
pcAction->setDropDownMenu(true);
352
applyCommandData(this->className(), pcAction);
354
QAction* p1 = pcAction->addAction(QString());
355
p1->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionInsertDiameter"));
356
p1->setObjectName(QString::fromLatin1("TechDraw_ExtensionInsertDiameter"));
357
p1->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionInsertDiameter"));
358
QAction* p2 = pcAction->addAction(QString());
359
p2->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionInsertSquare"));
360
p2->setObjectName(QString::fromLatin1("TechDraw_ExtensionInsertSquare"));
361
p2->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionInsertSquare"));
362
QAction* p3 = pcAction->addAction(QString());
363
p3->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionInsertRepetition"));
364
p3->setObjectName(QString::fromLatin1("TechDraw_ExtensionInsertRepetition"));
365
p3->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionInsertRepetition"));
366
QAction* p4 = pcAction->addAction(QString());
367
p4->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionRemovePrefixChar"));
368
p4->setObjectName(QString::fromLatin1("TechDraw_ExtensionRemovePrefixChar"));
369
p4->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionRemovePrefixChar"));
371
_pcAction = pcAction;
374
pcAction->setIcon(p1->icon());
376
pcAction->setProperty("defaultAction", QVariant(defaultId));
381
void CmdTechDrawExtensionInsertPrefixGroup::languageChange()
383
Command::languageChange();
387
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
388
QList<QAction*> a = pcAction->actions();
390
QAction* arc1 = a[0];
391
arc1->setText(QApplication::translate("CmdTechDrawExtensionInsertDiameter", "Insert '⌀' Prefix"));
392
arc1->setToolTip(QApplication::translate("CmdTechDrawExtensionInsertDiameter",
393
"Insert a '⌀' symbol at the beginning of the dimension text:<br>\
394
- Select one or more dimensions<br>\
396
arc1->setStatusTip(arc1->text());
397
QAction* arc2 = a[1];
398
arc2->setText(QApplication::translate("CmdTechDrawExtensionInsertSquare", "Insert '□' Prefix"));
399
arc2->setToolTip(QApplication::translate("CmdTechDrawExtensionInsertSquare",
400
"Insert a '□' symbol at the beginning of the dimension text:<br>\
401
- Select one or more dimensions<br>\
403
arc2->setStatusTip(arc2->text());
404
QAction* arc3 = a[2];
405
arc3->setText(QApplication::translate("CmdTechDrawExtensionInsertRepetition", "Insert 'n×' Prefix"));
406
arc3->setToolTip(QApplication::translate("CmdTechDrawExtensionInsertRepetition",
407
"Insert repeated feature count at the beginning of the dimension text:<br>\
408
- Select one or more dimensions<br>\
410
arc3->setStatusTip(arc3->text());
411
QAction* arc4 = a[3];
412
arc4->setText(QApplication::translate("TechDraw_ExtensionremovePrefixChar", "Remove Prefix"));
413
arc4->setToolTip(QApplication::translate("TechDraw_ExtensionremovePrefixChar",
414
"Remove prefix symbols at the beginning of the dimension text:<br>\
415
- Select one or more dimensions<br>\
417
arc4->setStatusTip(arc4->text());
420
bool CmdTechDrawExtensionInsertPrefixGroup::isActive()
422
bool havePage = DrawGuiUtil::needPage(this);
423
bool haveView = DrawGuiUtil::needView(this, true);
424
return (havePage && haveView);
431
void execIncreaseDecreaseDecimal(Gui::Command* cmd, int delta) {
433
std::vector<Gui::SelectionObject> selection;
434
if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("QObject","TechDraw Increase/Decrease Decimal"))) {
438
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Increase/Decrease Decimal"));
440
for (auto selected : selection) {
441
auto object = selected.getObject();
442
if (object->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId())) {
443
auto dim = static_cast<TechDraw::DrawViewDimension*>(selected.getObject());
444
std::string formatSpec = dim->FormatSpec.getStrValue();
445
std::string searchStr("%.");
446
int numFound = formatSpec.find(searchStr) + 2;
447
numStr = formatSpec[numFound];
448
int numInt = std::stoi(numStr, nullptr);
449
numInt = numInt + delta;
450
if (numInt >= 0 && numInt <= 9) {
451
numStr = std::to_string(numInt);
452
formatSpec.replace(numFound, 1, numStr);
453
dim->FormatSpec.setValue(formatSpec);
457
Gui::Command::commitCommand();
460
DEF_STD_CMD_A(CmdTechDrawExtensionIncreaseDecimal)
462
CmdTechDrawExtensionIncreaseDecimal::CmdTechDrawExtensionIncreaseDecimal()
463
: Command("TechDraw_ExtensionIncreaseDecimal")
465
sAppModule = "TechDraw";
466
sGroup = QT_TR_NOOP("TechDraw");
467
sMenuText = QT_TR_NOOP("Increase Decimal Places");
468
sToolTipText = QT_TR_NOOP("Increase the number of decimal places of the dimension text:<br>\
469
- Select one or more dimensions<br>\
471
sWhatsThis = "TechDraw_ExtensionIncreaseDecimal";
472
sStatusTip = sMenuText;
473
sPixmap = "TechDraw_ExtensionIncreaseDecimal";
476
void CmdTechDrawExtensionIncreaseDecimal::activated(int iMsg)
479
execIncreaseDecreaseDecimal(this, 1);
482
bool CmdTechDrawExtensionIncreaseDecimal::isActive()
484
bool havePage = DrawGuiUtil::needPage(this);
485
bool haveView = DrawGuiUtil::needView(this);
486
return (havePage && haveView);
493
DEF_STD_CMD_A(CmdTechDrawExtensionDecreaseDecimal)
495
CmdTechDrawExtensionDecreaseDecimal::CmdTechDrawExtensionDecreaseDecimal()
496
: Command("TechDraw_ExtensionDecreaseDecimal")
498
sAppModule = "TechDraw";
499
sGroup = QT_TR_NOOP("TechDraw");
500
sMenuText = QT_TR_NOOP("Decrease Decimal Places");
501
sToolTipText = QT_TR_NOOP("Decrease the number of decimal places of the dimension text:<br>\
502
- Select one or more dimensions<br>\
504
sWhatsThis = "TechDraw_ExtensionDecreaseDecimal";
505
sStatusTip = sMenuText;
506
sPixmap = "TechDraw_ExtensionDecreaseDecimal";
509
void CmdTechDrawExtensionDecreaseDecimal::activated(int iMsg)
512
execIncreaseDecreaseDecimal(this, -1);
515
bool CmdTechDrawExtensionDecreaseDecimal::isActive()
517
bool havePage = DrawGuiUtil::needPage(this);
518
bool haveView = DrawGuiUtil::needView(this);
519
return (havePage && haveView);
526
DEF_STD_CMD_ACL(CmdTechDrawExtensionIncreaseDecreaseGroup)
528
CmdTechDrawExtensionIncreaseDecreaseGroup::CmdTechDrawExtensionIncreaseDecreaseGroup()
529
: Command("TechDraw_ExtensionIncreaseDecreaseGroup")
531
sAppModule = "TechDraw";
532
sGroup = QT_TR_NOOP("TechDraw");
533
sMenuText = QT_TR_NOOP("Increase Decimal Places");
534
sToolTipText = QT_TR_NOOP("Increase the number of decimal places of the dimension text:<br>\
535
- Select one or more dimensions<br>\
537
sWhatsThis = "TechDraw_ExtensionIncreaseDecreaseGroup";
538
sStatusTip = sMenuText;
541
void CmdTechDrawExtensionIncreaseDecreaseGroup::activated(int iMsg)
544
Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog();
546
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
547
QObject::tr("Close active task dialog and try again."));
551
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
552
pcAction->setIcon(pcAction->actions().at(iMsg)->icon());
555
execIncreaseDecreaseDecimal(this, 1);
558
execIncreaseDecreaseDecimal(this, -1);
561
Base::Console().Message("CMD::CVGrp - invalid iMsg: %d\n", iMsg);
565
Gui::Action* CmdTechDrawExtensionIncreaseDecreaseGroup::createAction()
567
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
568
pcAction->setDropDownMenu(true);
569
applyCommandData(this->className(), pcAction);
571
QAction* p1 = pcAction->addAction(QString());
572
p1->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionIncreaseDecimal"));
573
p1->setObjectName(QString::fromLatin1("TechDraw_ExtensionIncreaseDecimal"));
574
p1->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionIncreaseDecimal"));
575
QAction* p2 = pcAction->addAction(QString());
576
p2->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionDecreaseDecimal"));
577
p2->setObjectName(QString::fromLatin1("TechDraw_ExtensionDecreaseDecimal"));
578
p2->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionDecreaseDecimal"));
580
_pcAction = pcAction;
583
pcAction->setIcon(p1->icon());
585
pcAction->setProperty("defaultAction", QVariant(defaultId));
590
void CmdTechDrawExtensionIncreaseDecreaseGroup::languageChange()
592
Command::languageChange();
596
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
597
QList<QAction*> a = pcAction->actions();
599
QAction* arc1 = a[0];
600
arc1->setText(QApplication::translate("CmdTechDrawExtensionIncreaseDecimal", "Increase Decimal Places"));
601
arc1->setToolTip(QApplication::translate("CmdTechDrawExtensionIncreaseDecimal",
602
"Increase the number of decimal places of the dimension text:<br>\
603
- Select one or more dimensions<br>\
605
arc1->setStatusTip(arc1->text());
606
QAction* arc2 = a[1];
607
arc2->setText(QApplication::translate("CmdTechDrawExtensionDecreaseDecimal", "Decrease Decimal Places"));
608
arc2->setToolTip(QApplication::translate("CmdTechDrawExtensionDecreaseDecimal",
609
"Decrease the number of decimal places of the dimension text:<br>\
610
- Select one or more dimensions<br>\
612
arc2->setStatusTip(arc2->text());
615
bool CmdTechDrawExtensionIncreaseDecreaseGroup::isActive()
617
bool havePage = DrawGuiUtil::needPage(this);
618
bool haveView = DrawGuiUtil::needView(this, true);
619
return (havePage && haveView);
626
void execPosHorizChainDimension(Gui::Command* cmd) {
628
std::vector<Gui::SelectionObject> selection;
629
if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("QObject","TechDraw PosHorizChainDimension"))) {
633
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Pos Horiz Chain Dim"));
634
std::vector<TechDraw::DrawViewDimension*> validDimension;
635
validDimension = _getDimensions(selection, "DistanceX");
636
if (validDimension.empty()) {
637
QMessageBox::warning(Gui::getMainWindow(),
638
QObject::tr("TechDraw PosHorizChainDimension"),
639
QObject::tr("No horizontal dimensions selected"));
642
float yMaster = validDimension[0]->Y.getValue();
643
for (auto dim : validDimension) {
644
dim->Y.setValue(yMaster);
645
pointPair pp = dim->getLinearPoints();
646
Base::Vector3d p1 = pp.first();
647
Base::Vector3d p2 = pp.second();
648
dim->X.setValue((p1.x + p2.x) / 2.0);
650
Gui::Command::commitCommand();
653
DEF_STD_CMD_A(CmdTechDrawExtensionPosHorizChainDimension)
655
CmdTechDrawExtensionPosHorizChainDimension::CmdTechDrawExtensionPosHorizChainDimension()
656
: Command("TechDraw_ExtensionPosHorizChainDimension")
658
sAppModule = "TechDraw";
659
sGroup = QT_TR_NOOP("TechDraw");
660
sMenuText = QT_TR_NOOP("Position Horizontal Chain Dimensions");
661
sToolTipText = QT_TR_NOOP("Align horizontal dimensions to create a chain dimension:<br>\
662
- Select two or more horizontal dimensions<br>\
663
- The first dimension defines the position<br>\
665
sWhatsThis = "TechDraw_ExtensionPosHorizChainDimension";
666
sStatusTip = sMenuText;
667
sPixmap = "TechDraw_ExtensionPosHorizChainDimension";
670
void CmdTechDrawExtensionPosHorizChainDimension::activated(int iMsg)
673
execPosHorizChainDimension(this);
676
bool CmdTechDrawExtensionPosHorizChainDimension::isActive()
678
bool havePage = DrawGuiUtil::needPage(this);
679
bool haveView = DrawGuiUtil::needView(this);
680
return (havePage && haveView);
687
void execPosVertChainDimension(Gui::Command* cmd) {
689
std::vector<Gui::SelectionObject> selection;
690
if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("QObject","TechDraw PosVertChainDimension"))) {
694
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Pos Vert Chain Dim"));
695
std::vector<TechDraw::DrawViewDimension*> validDimension;
696
validDimension = _getDimensions(selection, "DistanceY");
697
if (validDimension.empty()) {
698
QMessageBox::warning(Gui::getMainWindow(),
699
QObject::tr("TechDraw PosVertChainDimension"),
700
QObject::tr("No vertical dimensions selected"));
703
float xMaster = validDimension[0]->X.getValue();
704
double fontSize = Preferences::dimFontSizeMM();
705
for (auto dim : validDimension) {
706
dim->X.setValue(xMaster);
707
pointPair pp = dim->getLinearPoints();
708
Base::Vector3d p1 = pp.first();
709
Base::Vector3d p2 = pp.second();
710
dim->Y.setValue((p1.y + p2.y) / -2.0 + 0.5 * fontSize);
712
Gui::Command::commitCommand();
715
DEF_STD_CMD_A(CmdTechDrawExtensionPosVertChainDimension)
717
CmdTechDrawExtensionPosVertChainDimension::CmdTechDrawExtensionPosVertChainDimension()
718
: Command("TechDraw_ExtensionPosVertChainDimension")
720
sAppModule = "TechDraw";
721
sGroup = QT_TR_NOOP("TechDraw");
722
sMenuText = QT_TR_NOOP("Position Vertical Chain Dimensions");
723
sToolTipText = QT_TR_NOOP("Align vertical dimensions to create a chain dimension:<br>\
724
- Select two or more vertical dimensions<br>\
725
- The first dimension defines the position<br>\
727
sWhatsThis = "TechDraw_ExtensionPosVertChainDimension";
728
sStatusTip = sMenuText;
729
sPixmap = "TechDraw_ExtensionPosVertChainDimension";
732
void CmdTechDrawExtensionPosVertChainDimension::activated(int iMsg)
735
execPosVertChainDimension(this);
738
bool CmdTechDrawExtensionPosVertChainDimension::isActive()
740
bool havePage = DrawGuiUtil::needPage(this);
741
bool haveView = DrawGuiUtil::needView(this);
742
return (havePage && haveView);
749
void execPosObliqueChainDimension(Gui::Command* cmd) {
751
std::vector<Gui::SelectionObject> selection;
752
if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("QObject","TechDraw PosObliqueChainDimension"))) {
756
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Pos Oblique Chain Dim"));
757
std::vector<TechDraw::DrawViewDimension*> validDimension;
758
validDimension = _getDimensions(selection, "Distance");
759
if (validDimension.empty()) {
760
QMessageBox::warning(Gui::getMainWindow(),
761
QObject::tr("TechDraw PosObliqueChainDimension"),
762
QObject::tr("No oblique dimensions selected"));
765
float xMaster = validDimension[0]->X.getValue();
766
float yMaster = validDimension[0]->Y.getValue();
767
Base::Vector3d pMaster(xMaster, yMaster, 0.0);
768
pointPair pp = validDimension[0]->getLinearPoints();
769
Base::Vector3d dirMaster = pp.second() - pp.first();
770
dirMaster.y = -dirMaster.y;
771
for (auto dim : validDimension) {
772
float xDim = dim->X.getValue();
773
float yDim = dim->Y.getValue();
774
Base::Vector3d pDim(xDim, yDim, 0.0);
775
Base::Vector3d p3 = DrawUtil::getTrianglePoint(pMaster, dirMaster, pDim);
776
dim->X.setValue(p3.x);
777
dim->Y.setValue(p3.y);
779
Gui::Command::commitCommand();
782
DEF_STD_CMD_A(CmdTechDrawExtensionPosObliqueChainDimension)
784
CmdTechDrawExtensionPosObliqueChainDimension::CmdTechDrawExtensionPosObliqueChainDimension()
785
: Command("TechDraw_ExtensionPosObliqueChainDimension")
787
sAppModule = "TechDraw";
788
sGroup = QT_TR_NOOP("TechDraw");
789
sMenuText = QT_TR_NOOP("Position Oblique Chain Dimensions");
790
sToolTipText = QT_TR_NOOP("Align oblique dimensions to create a chain dimension:<br>\
791
- Select two or more parallel oblique dimensions<br>\
792
- The first dimension defines the position<br>\
794
sWhatsThis = "TechDraw_ExtensionPosObliqueChainDimension";
795
sStatusTip = sMenuText;
796
sPixmap = "TechDraw_ExtensionPosObliqueChainDimension";
799
void CmdTechDrawExtensionPosObliqueChainDimension::activated(int iMsg)
802
execPosObliqueChainDimension(this);
806
bool CmdTechDrawExtensionPosObliqueChainDimension::isActive()
808
bool havePage = DrawGuiUtil::needPage(this);
809
bool haveView = DrawGuiUtil::needView(this);
810
return (havePage && haveView);
817
DEF_STD_CMD_ACL(CmdTechDrawExtensionPosChainDimensionGroup)
819
CmdTechDrawExtensionPosChainDimensionGroup::CmdTechDrawExtensionPosChainDimensionGroup()
820
: Command("TechDraw_ExtensionPosChainDimensionGroup")
822
sAppModule = "TechDraw";
823
sGroup = QT_TR_NOOP("TechDraw");
824
sMenuText = QT_TR_NOOP("Position Horizontal Chain Dimensions");
825
sToolTipText = QT_TR_NOOP("Align horizontal dimensions to create a chain dimension:<br>\
826
- Select two or more horizontal dimensions<br>\
827
- The first dimension defines the position<br>\
829
sWhatsThis = "TechDraw_ExtensionPosChainDimensionGroup";
830
sStatusTip = sMenuText;
833
void CmdTechDrawExtensionPosChainDimensionGroup::activated(int iMsg)
836
Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog();
838
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
839
QObject::tr("Close active task dialog and try again."));
843
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
844
pcAction->setIcon(pcAction->actions().at(iMsg)->icon());
847
execPosHorizChainDimension(this);
850
execPosVertChainDimension(this);
853
execPosObliqueChainDimension(this);
856
Base::Console().Message("CMD::CVGrp - invalid iMsg: %d\n", iMsg);
860
Gui::Action* CmdTechDrawExtensionPosChainDimensionGroup::createAction()
862
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
863
pcAction->setDropDownMenu(true);
864
applyCommandData(this->className(), pcAction);
866
QAction* p1 = pcAction->addAction(QString());
867
p1->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionPosHorizChainDimension"));
868
p1->setObjectName(QString::fromLatin1("TechDraw_ExtensionPosHorizChainDimension"));
869
p1->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionPosHorizChainDimension"));
870
QAction* p2 = pcAction->addAction(QString());
871
p2->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionPosVertChainDimension"));
872
p2->setObjectName(QString::fromLatin1("TechDraw_ExtensionPosVertChainDimension"));
873
p2->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionPosVertChainDimension"));
874
QAction* p3 = pcAction->addAction(QString());
875
p3->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionPosObliqueChainDimension"));
876
p3->setObjectName(QString::fromLatin1("TechDraw_ExtensionPosObliqueChainDimension"));
877
p3->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionPosObliqueChainDimension"));
879
_pcAction = pcAction;
882
pcAction->setIcon(p1->icon());
884
pcAction->setProperty("defaultAction", QVariant(defaultId));
889
void CmdTechDrawExtensionPosChainDimensionGroup::languageChange()
891
Command::languageChange();
895
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
896
QList<QAction*> a = pcAction->actions();
898
QAction* arc1 = a[0];
899
arc1->setText(QApplication::translate("CmdTechDrawExtensionPosHorizChainDimension", "Position Horizontal Chain Dimensions"));
900
arc1->setToolTip(QApplication::translate("CmdTechDrawExtensionPosHorizChainDimension",
901
"Align horizontal dimensions to create a chain dimension:<br>\
902
- Select two or more horizontal dimensions<br>\
903
- The first dimension defines the position<br>\
905
arc1->setStatusTip(arc1->text());
906
QAction* arc2 = a[1];
907
arc2->setText(QApplication::translate("CmdTechDrawExtensionPosVertChainDimension", "Position Vertical Chain Dimensions"));
908
arc2->setToolTip(QApplication::translate("CmdTechDrawExtensionPosVertChainDimension",
909
"Align vertical dimensions to create a chain dimension:<br>\
910
- Select two or more vertical dimensions<br>\
911
- The first dimension defines the position<br>\
913
arc2->setStatusTip(arc2->text());
914
QAction* arc3 = a[2];
915
arc3->setText(QApplication::translate("CmdTechDrawExtensionPosObliqueChainDimension", "Position Oblique Chain Dimensions"));
916
arc3->setToolTip(QApplication::translate("CmdTechDrawExtensionPosObliqueChainDimension",
917
"Align oblique dimensions to create a chain dimension:<br>\
918
- Select two or more parallel oblique dimensions<br>\
919
- The first dimension defines the position<br>\
921
arc3->setStatusTip(arc3->text());
924
bool CmdTechDrawExtensionPosChainDimensionGroup::isActive()
926
bool havePage = DrawGuiUtil::needPage(this);
927
bool haveView = DrawGuiUtil::needView(this, true);
928
return (havePage && haveView);
935
void execCascadeHorizDimension(Gui::Command* cmd) {
937
std::vector<Gui::SelectionObject> selection;
938
if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("QObject","TechDraw CascadeHorizDimension"))) {
942
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Cascade Horiz Dim"));
943
std::vector<TechDraw::DrawViewDimension*> validDimension;
944
validDimension = _getDimensions(selection, "DistanceX");
945
if (validDimension.empty()) {
946
QMessageBox::warning(Gui::getMainWindow(),
947
QObject::tr("TechDraw CascadeHorizDimension"),
948
QObject::tr("No horizontal dimensions selected"));
951
float yMaster = validDimension[0]->Y.getValue();
952
float dimDistance = activeDimAttributes.getCascadeSpacing();
953
if (std::signbit(yMaster))
954
dimDistance = -dimDistance;
955
for (auto dim : validDimension) {
956
dim->Y.setValue(yMaster);
957
pointPair pp = dim->getLinearPoints();
958
Base::Vector3d p1 = pp.first();
959
Base::Vector3d p2 = pp.second();
960
dim->X.setValue((p1.x + p2.x) / 2.0);
961
yMaster = yMaster + dimDistance;
963
Gui::Command::commitCommand();
966
DEF_STD_CMD_A(CmdTechDrawExtensionCascadeHorizDimension)
968
CmdTechDrawExtensionCascadeHorizDimension::CmdTechDrawExtensionCascadeHorizDimension()
969
: Command("TechDraw_ExtensionCascadeHorizDimension")
971
sAppModule = "TechDraw";
972
sGroup = QT_TR_NOOP("TechDraw");
973
sMenuText = QT_TR_NOOP("Cascade Horizontal Dimensions");
974
sToolTipText = QT_TR_NOOP("Evenly space horizontal dimensions:<br>\
975
- Specify the cascade spacing (optional)<br>\
976
- Select two or more horizontal dimensions<br>\
977
- The first dimension defines the position<br>\
979
sWhatsThis = "TechDraw_ExtensionCascadeHorizDimension";
980
sStatusTip = sMenuText;
981
sPixmap = "TechDraw_ExtensionCascadeHorizDimension";
984
void CmdTechDrawExtensionCascadeHorizDimension::activated(int iMsg)
987
execCascadeHorizDimension(this);
990
bool CmdTechDrawExtensionCascadeHorizDimension::isActive()
992
bool havePage = DrawGuiUtil::needPage(this);
993
bool haveView = DrawGuiUtil::needView(this);
994
return (havePage && haveView);
1001
void execCascadeVertDimension(Gui::Command* cmd) {
1003
std::vector<Gui::SelectionObject> selection;
1004
if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("QObject","TechDraw CascadeVertDimension"))) {
1008
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Cascade Vert Dim"));
1009
std::vector<TechDraw::DrawViewDimension*> validDimension;
1010
validDimension = _getDimensions(selection, "DistanceY");
1011
if (validDimension.empty()) {
1012
QMessageBox::warning(Gui::getMainWindow(),
1013
QObject::tr("TechDraw CascadeVertDimension"),
1014
QObject::tr("No vertical dimensions selected"));
1017
float xMaster = validDimension[0]->X.getValue();
1018
float dimDistance = activeDimAttributes.getCascadeSpacing();
1019
if (std::signbit(xMaster))
1020
dimDistance = -dimDistance;
1021
double fontSize = Preferences::dimFontSizeMM();
1022
for (auto dim : validDimension) {
1023
dim->X.setValue(xMaster);
1024
pointPair pp = dim->getLinearPoints();
1025
Base::Vector3d p1 = pp.first();
1026
Base::Vector3d p2 = pp.second();
1027
dim->Y.setValue((p1.y + p2.y) / -2.0 + 0.5 * fontSize);
1028
xMaster = xMaster + dimDistance;
1030
Gui::Command::commitCommand();
1033
DEF_STD_CMD_A(CmdTechDrawExtensionCascadeVertDimension)
1035
CmdTechDrawExtensionCascadeVertDimension::CmdTechDrawExtensionCascadeVertDimension()
1036
: Command("TechDraw_ExtensionCascadeVertDimension")
1038
sAppModule = "TechDraw";
1039
sGroup = QT_TR_NOOP("TechDraw");
1040
sMenuText = QT_TR_NOOP("Cascade Vertical Dimensions");
1041
sToolTipText = QT_TR_NOOP("Evenly space vertical dimensions:<br>\
1042
- Specify the cascade spacing (optional)<br>\
1043
- Select two or more vertical dimensions<br>\
1044
- The first dimension defines the position<br>\
1046
sWhatsThis = "TechDraw_ExtensionCascadeVertDimension";
1047
sStatusTip = sMenuText;
1048
sPixmap = "TechDraw_ExtensionCascadeVertDimension";
1051
void CmdTechDrawExtensionCascadeVertDimension::activated(int iMsg)
1054
execCascadeVertDimension(this);
1057
bool CmdTechDrawExtensionCascadeVertDimension::isActive()
1059
bool havePage = DrawGuiUtil::needPage(this);
1060
bool haveView = DrawGuiUtil::needView(this);
1061
return (havePage && haveView);
1068
void execCascadeObliqueDimension(Gui::Command* cmd) {
1070
std::vector<Gui::SelectionObject> selection;
1071
if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("QObject","TechDraw CascadeObliqueDimension"))) {
1075
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Cascade Oblique Dim"));
1076
std::vector<TechDraw::DrawViewDimension*> validDimension;
1077
validDimension = _getDimensions(selection, "Distance");
1078
if (validDimension.empty()) {
1079
QMessageBox::warning(Gui::getMainWindow(),
1080
QObject::tr("TechDraw CascadeObliqueDimension"),
1081
QObject::tr("No oblique dimensions selected"));
1084
float xMaster = validDimension[0]->X.getValue();
1085
float yMaster = validDimension[0]->Y.getValue();
1086
Base::Vector3d pMaster(xMaster, yMaster, 0.0);
1087
pointPair pp = validDimension[0]->getLinearPoints();
1088
Base::Vector3d dirMaster = pp.second() - pp.first();
1089
dirMaster.y = -dirMaster.y;
1090
Base::Vector3d origin(0.0, 0.0, 0.0);
1091
Base::Vector3d ipDelta = DrawUtil::getTrianglePoint(pMaster, dirMaster, origin);
1092
float dimDistance = activeDimAttributes.getCascadeSpacing();
1093
Base::Vector3d delta = ipDelta.Normalize() * dimDistance;
1095
for (auto dim : validDimension) {
1096
float xDim = dim->X.getValue();
1097
float yDim = dim->Y.getValue();
1098
Base::Vector3d pDim(xDim, yDim, 0.0);
1099
Base::Vector3d p3 = DrawUtil::getTrianglePoint(pMaster, dirMaster, pDim);
1100
p3 = p3 + delta * i;
1101
dim->X.setValue(p3.x);
1102
dim->Y.setValue(p3.y);
1105
Gui::Command::commitCommand();
1108
DEF_STD_CMD_A(CmdTechDrawExtensionCascadeObliqueDimension)
1110
CmdTechDrawExtensionCascadeObliqueDimension::CmdTechDrawExtensionCascadeObliqueDimension()
1111
: Command("TechDraw_ExtensionCascadeObliqueDimension")
1113
sAppModule = "TechDraw";
1114
sGroup = QT_TR_NOOP("TechDraw");
1115
sMenuText = QT_TR_NOOP("Cascade Oblique Dimensions");
1116
sToolTipText = QT_TR_NOOP("Evenly space oblique dimensions:<br>\
1117
- Specify the cascade spacing (optional)<br>\
1118
- Select two or more parallel oblique dimensions<br>\
1119
- The first dimension defines the position<br>\
1121
sWhatsThis = "TechDraw_ExtensionCascadeObliqueDimension";
1122
sStatusTip = sMenuText;
1123
sPixmap = "TechDraw_ExtensionCascadeObliqueDimension";
1126
void CmdTechDrawExtensionCascadeObliqueDimension::activated(int iMsg)
1129
execCascadeObliqueDimension(this);
1133
bool CmdTechDrawExtensionCascadeObliqueDimension::isActive()
1135
bool havePage = DrawGuiUtil::needPage(this);
1136
bool haveView = DrawGuiUtil::needView(this);
1137
return (havePage && haveView);
1144
DEF_STD_CMD_ACL(CmdTechDrawExtensionCascadeDimensionGroup)
1146
CmdTechDrawExtensionCascadeDimensionGroup::CmdTechDrawExtensionCascadeDimensionGroup()
1147
: Command("TechDraw_ExtensionCascadeDimensionGroup")
1149
sAppModule = "TechDraw";
1150
sGroup = QT_TR_NOOP("TechDraw");
1151
sMenuText = QT_TR_NOOP("Cascade Horizontal Dimensions");
1152
sToolTipText = QT_TR_NOOP("Evenly space horizontal dimensions:<br>\
1153
- Specify the cascade spacing (optional)<br>\
1154
- Select two or more horizontal dimensions<br>\
1155
- The first dimension defines the position<br>\
1157
sWhatsThis = "TechDraw_ExtensionCascadeDimensionGroup";
1158
sStatusTip = sMenuText;
1161
void CmdTechDrawExtensionCascadeDimensionGroup::activated(int iMsg)
1164
Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog();
1166
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
1167
QObject::tr("Close active task dialog and try again."));
1171
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
1172
pcAction->setIcon(pcAction->actions().at(iMsg)->icon());
1175
execCascadeHorizDimension(this);
1178
execCascadeVertDimension(this);
1181
execCascadeObliqueDimension(this);
1184
Base::Console().Message("CMD::CVGrp - invalid iMsg: %d\n", iMsg);
1188
Gui::Action* CmdTechDrawExtensionCascadeDimensionGroup::createAction()
1190
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
1191
pcAction->setDropDownMenu(true);
1192
applyCommandData(this->className(), pcAction);
1194
QAction* p1 = pcAction->addAction(QString());
1195
p1->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCascadeHorizDimension"));
1196
p1->setObjectName(QString::fromLatin1("TechDraw_ExtensionCascadeHorizDimension"));
1197
p1->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCascadeHorizDimension"));
1198
QAction* p2 = pcAction->addAction(QString());
1199
p2->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCascadeVertDimension"));
1200
p2->setObjectName(QString::fromLatin1("TechDraw_ExtensionCascadeVertDimension"));
1201
p2->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCascadeVertDimension"));
1202
QAction* p3 = pcAction->addAction(QString());
1203
p3->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCascadeObliqueDimension"));
1204
p3->setObjectName(QString::fromLatin1("TechDraw_ExtensionCascadeObliqueDimension"));
1205
p3->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCascadeObliqueDimension"));
1207
_pcAction = pcAction;
1210
pcAction->setIcon(p1->icon());
1212
pcAction->setProperty("defaultAction", QVariant(defaultId));
1217
void CmdTechDrawExtensionCascadeDimensionGroup::languageChange()
1219
Command::languageChange();
1223
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
1224
QList<QAction*> a = pcAction->actions();
1226
QAction* arc1 = a[0];
1227
arc1->setText(QApplication::translate("CmdTechDrawExtensionCascadeHorizDimension", "Cascade Horizontal Dimensions"));
1228
arc1->setToolTip(QApplication::translate("CmdTechDrawExtensionCascadeHorizDimension",
1229
"Evenly space horizontal dimensions:<br>\
1230
- Specify the cascade spacing (optional)<br>\
1231
- Select two or more horizontal dimensions<br>\
1232
- The first dimension defines the position<br>\
1233
- Click this tool"));
1234
arc1->setStatusTip(arc1->text());
1235
QAction* arc2 = a[1];
1236
arc2->setText(QApplication::translate("CmdTechDrawExtensionCascadeVertDimension", "Cascade Vertical Dimensions"));
1237
arc2->setToolTip(QApplication::translate("CmdTechDrawExtensionCascadeVertDimension",
1238
"Evenly space vertical dimensions:<br>\
1239
- Specify the cascade spacing (optional)<br>\
1240
- Select two or more vertical dimensions<br>\
1241
- The first dimension defines the position<br>\
1242
- Click this tool"));
1243
arc2->setStatusTip(arc2->text());
1244
QAction* arc3 = a[2];
1245
arc3->setText(QApplication::translate("CmdTechDrawExtensionCascadeObliqueDimension", "Cascade Oblique Dimensions"));
1246
arc3->setToolTip(QApplication::translate("CmdTechDrawExtensionCascadeObliqueDimension",
1247
"Evenly space oblique dimensions:<br>\
1248
- Specify the cascade spacing (optional)<br>\
1249
- Select two or more parallel oblique dimensions<br>\
1250
- The first dimension defines the position<br>\
1251
- Click this tool"));
1252
arc3->setStatusTip(arc3->text());
1255
bool CmdTechDrawExtensionCascadeDimensionGroup::isActive()
1257
bool havePage = DrawGuiUtil::needPage(this);
1258
bool haveView = DrawGuiUtil::needView(this, true);
1259
return (havePage && haveView);
1266
void execCreateHorizChainDimension(Gui::Command* cmd) {
1268
std::vector<Gui::SelectionObject> selection;
1269
TechDraw::DrawViewPart* objFeat;
1270
if (!_checkSelObjAndSubs(cmd, selection, objFeat, QT_TRANSLATE_NOOP("QObject","TechDraw Create Horizontal Chain Dimension"))) {
1274
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create Horiz Chain Dim"));
1275
const std::vector<std::string> subNames = selection[0].getSubNames();
1276
std::vector<dimVertex> allVertexes;
1277
allVertexes = _getVertexInfo(objFeat, subNames);
1278
if (!allVertexes.empty() && allVertexes.size() > 1) {
1279
std::sort(allVertexes.begin(), allVertexes.end(), sortX);
1280
float yMaster = 0.0;
1281
for (long unsigned int n = 0; n < allVertexes.size() - 1; n++) {
1282
TechDraw::DrawViewDimension* dim;
1283
dim = _createLinDimension(cmd, objFeat, allVertexes[n].name, allVertexes[n + 1].name, "DistanceX");
1284
TechDraw::pointPair pp = dim->getLinearPoints();
1285
Base::Vector3d mid = (pp.first() + pp.second()) / 2.0;
1286
dim->X.setValue(mid.x);
1289
dim->Y.setValue(yMaster);
1292
objFeat->refreshCEGeoms();
1293
objFeat->requestPaint();
1294
cmd->getSelection().clearSelection();
1295
Gui::Command::commitCommand();
1298
DEF_STD_CMD_A(CmdTechDrawExtensionCreateHorizChainDimension)
1300
CmdTechDrawExtensionCreateHorizChainDimension::CmdTechDrawExtensionCreateHorizChainDimension()
1301
: Command("TechDraw_ExtensionCreateHorizChainDimension")
1303
sAppModule = "TechDraw";
1304
sGroup = QT_TR_NOOP("TechDraw");
1305
sMenuText = QT_TR_NOOP("Create Horizontal Chain Dimensions");
1306
sToolTipText = QT_TR_NOOP("Create a sequence of aligned horizontal dimensions:<br>\
1307
- Select three or more vertexes<br>\
1309
sWhatsThis = "TechDraw_ExtensionCreateHorizChainDimension";
1310
sStatusTip = sMenuText;
1311
sPixmap = "TechDraw_ExtensionCreateHorizChainDimension";
1314
void CmdTechDrawExtensionCreateHorizChainDimension::activated(int iMsg)
1317
execCreateHorizChainDimension(this);
1321
bool CmdTechDrawExtensionCreateHorizChainDimension::isActive()
1323
bool havePage = DrawGuiUtil::needPage(this);
1324
bool haveView = DrawGuiUtil::needView(this);
1325
return (havePage && haveView);
1332
void execCreateVertChainDimension(Gui::Command* cmd) {
1334
std::vector<Gui::SelectionObject> selection;
1335
TechDraw::DrawViewPart* objFeat;
1336
if (!_checkSelObjAndSubs(cmd, selection, objFeat, QT_TRANSLATE_NOOP("QObject","TechDraw Create Vertical Chain Dimension"))) {
1340
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create Vert Chain Dim"));
1341
const std::vector<std::string> subNames = selection[0].getSubNames();
1342
std::vector<dimVertex> allVertexes;
1343
allVertexes = _getVertexInfo(objFeat, subNames);
1344
if (!allVertexes.empty() && allVertexes.size() > 1) {
1345
std::sort(allVertexes.begin(), allVertexes.end(), sortY);
1346
float xMaster = 0.0;
1347
double fontSize = Preferences::dimFontSizeMM();
1348
for (long unsigned int n = 0; n < allVertexes.size() - 1; n++) {
1349
TechDraw::DrawViewDimension* dim;
1350
dim = _createLinDimension(cmd, objFeat, allVertexes[n].name, allVertexes[n + 1].name, "DistanceY");
1351
TechDraw::pointPair pp = dim->getLinearPoints();
1352
Base::Vector3d mid = (pp.first() + pp.second()) / 2.0;
1355
dim->X.setValue(xMaster);
1356
dim->Y.setValue(-mid.y + 0.5 * fontSize);
1359
objFeat->refreshCEGeoms();
1360
objFeat->requestPaint();
1361
cmd->getSelection().clearSelection();
1362
Gui::Command::commitCommand();
1365
DEF_STD_CMD_A(CmdTechDrawExtensionCreateVertChainDimension)
1367
CmdTechDrawExtensionCreateVertChainDimension::CmdTechDrawExtensionCreateVertChainDimension()
1368
: Command("TechDraw_ExtensionCreateVertChainDimension")
1370
sAppModule = "TechDraw";
1371
sGroup = QT_TR_NOOP("TechDraw");
1372
sMenuText = QT_TR_NOOP("Create Vertical Chain Dimensions");
1373
sToolTipText = QT_TR_NOOP("Create a sequence of aligned vertical dimensions:<br>\
1374
- Select three or more vertexes<br>\
1376
sWhatsThis = "TechDraw_ExtensionCreateVertChainDimension";
1377
sStatusTip = sMenuText;
1378
sPixmap = "TechDraw_ExtensionCreateVertChainDimension";
1381
void CmdTechDrawExtensionCreateVertChainDimension::activated(int iMsg)
1384
execCreateVertChainDimension(this);
1387
bool CmdTechDrawExtensionCreateVertChainDimension::isActive()
1389
bool havePage = DrawGuiUtil::needPage(this);
1390
bool haveView = DrawGuiUtil::needView(this);
1391
return (havePage && haveView);
1398
void execCreateObliqueChainDimension(Gui::Command* cmd) {
1400
std::vector<Gui::SelectionObject> selection;
1401
TechDraw::DrawViewPart* objFeat;
1402
if (!_checkSelObjAndSubs(cmd, selection, objFeat, QT_TRANSLATE_NOOP("QObject","TechDraw Create Oblique Chain Dimension"))){
1406
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create Oblique Chain Dim"));
1407
const std::vector<std::string> subNames = selection[0].getSubNames();
1408
std::vector<dimVertex> allVertexes, carrierVertexes;
1409
allVertexes = _getVertexInfo(objFeat, subNames);
1410
if (!allVertexes.empty() && allVertexes.size() > 1) {
1411
Base::Vector3d pMaster = allVertexes[0].point;
1412
Base::Vector3d dirMaster = pMaster - allVertexes[1].point;
1413
Base::Vector3d origin(0.0, 0.0, 0.0);
1414
Base::Vector3d delta = DrawUtil::getTrianglePoint(pMaster, dirMaster, origin);
1415
float dimDistance = activeDimAttributes.getCascadeSpacing();
1416
delta = delta.Normalize() * dimDistance;
1417
double scale = objFeat->getScale();
1418
for (dimVertex oldVertex : allVertexes) {
1419
Base::Vector3d nextPoint = DrawUtil::getTrianglePoint(pMaster, dirMaster, oldVertex.point);
1420
nextPoint.y = -nextPoint.y;
1421
oldVertex.point.y = -oldVertex.point.y;
1422
if ((oldVertex.point - nextPoint).Length() > 0.01) {
1423
Base::Vector3d cvPoint = CosmeticVertex::makeCanonicalPoint(objFeat, nextPoint);
1424
std::string vertTag = objFeat->addCosmeticVertex(cvPoint);
1425
int vertNumber = objFeat->add1CVToGV(vertTag);
1426
std::stringstream ss;
1427
ss << "Vertex" << vertNumber;
1428
dimVertex newVertex;
1429
newVertex.name = ss.str();
1430
newVertex.point = nextPoint;
1431
carrierVertexes.push_back(newVertex);
1432
std::string edgeTag = objFeat->addCosmeticEdge(oldVertex.point / scale, nextPoint / scale);
1433
auto edge = objFeat->getCosmeticEdge(edgeTag);
1434
edge->m_format.m_style = 1;
1435
edge->m_format.m_lineNumber = 1;
1436
edge->m_format.m_weight = 0.15;
1437
edge->m_format.m_color = App::Color(0.0f, 0.0f, 0.0f);
1440
carrierVertexes.push_back(oldVertex);
1442
std::sort(carrierVertexes.begin(), carrierVertexes.end(), sortX);
1443
double fontSize = Preferences::dimFontSizeMM();
1444
for (long unsigned int n = 0; n < allVertexes.size() - 1; n++) {
1445
TechDraw::DrawViewDimension* dim;
1446
dim = _createLinDimension(cmd, objFeat, carrierVertexes[n].name, carrierVertexes[n + 1].name, "Distance");
1447
TechDraw::pointPair pp = dim->getLinearPoints();
1448
Base::Vector3d mid = (pp.first() + pp.second()) / 2.0 + delta;
1449
dim->X.setValue(mid.x);
1450
dim->Y.setValue(-mid.y + 0.5 * fontSize);
1452
objFeat->refreshCEGeoms();
1453
objFeat->requestPaint();
1454
cmd->getSelection().clearSelection();
1455
Gui::Command::commitCommand();
1459
DEF_STD_CMD_A(CmdTechDrawExtensionCreateObliqueChainDimension)
1461
CmdTechDrawExtensionCreateObliqueChainDimension::CmdTechDrawExtensionCreateObliqueChainDimension()
1462
: Command("TechDraw_ExtensionCreateObliqueChainDimension")
1464
sAppModule = "TechDraw";
1465
sGroup = QT_TR_NOOP("TechDraw");
1466
sMenuText = QT_TR_NOOP("Create Oblique Chain Dimensions");
1467
sToolTipText = QT_TR_NOOP("Create a sequence of aligned oblique dimensions:<br>\
1468
- Select three or more vertexes<br>\
1469
- The first two vertexes define the direction<br>\
1471
sWhatsThis = "TechDraw_ExtensionCreateObliqueChainDimension";
1472
sStatusTip = sMenuText;
1473
sPixmap = "TechDraw_ExtensionCreateObliqueChainDimension";
1476
void CmdTechDrawExtensionCreateObliqueChainDimension::activated(int iMsg)
1479
execCreateObliqueChainDimension(this);
1482
bool CmdTechDrawExtensionCreateObliqueChainDimension::isActive()
1484
bool havePage = DrawGuiUtil::needPage(this);
1485
bool haveView = DrawGuiUtil::needView(this);
1486
return (havePage && haveView);
1493
DEF_STD_CMD_ACL(CmdTechDrawExtensionCreateChainDimensionGroup)
1495
CmdTechDrawExtensionCreateChainDimensionGroup::CmdTechDrawExtensionCreateChainDimensionGroup()
1496
: Command("TechDraw_ExtensionCreateChainDimensionGroup")
1498
sAppModule = "TechDraw";
1499
sGroup = QT_TR_NOOP("TechDraw");
1500
sMenuText = QT_TR_NOOP("Create Horizontal Chain Dimensions");
1501
sToolTipText = QT_TR_NOOP("Create a sequence of aligned horizontal dimensions:<br>\
1502
- Select three or more vertexes<br>\
1504
sWhatsThis = "TechDraw_ExtensionCreateChainDimensionGroup";
1505
sStatusTip = sMenuText;
1508
void CmdTechDrawExtensionCreateChainDimensionGroup::activated(int iMsg)
1511
Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog();
1513
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
1514
QObject::tr("Close active task dialog and try again."));
1518
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
1519
pcAction->setIcon(pcAction->actions().at(iMsg)->icon());
1522
execCreateHorizChainDimension(this);
1525
execCreateVertChainDimension(this);
1528
execCreateObliqueChainDimension(this);
1531
Base::Console().Message("CMD::CVGrp - invalid iMsg: %d\n", iMsg);
1535
Gui::Action* CmdTechDrawExtensionCreateChainDimensionGroup::createAction()
1537
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
1538
pcAction->setDropDownMenu(true);
1539
applyCommandData(this->className(), pcAction);
1541
QAction* p1 = pcAction->addAction(QString());
1542
p1->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCreateHorizChainDimension"));
1543
p1->setObjectName(QString::fromLatin1("TechDraw_ExtensionCreateHorizChainDimension"));
1544
p1->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCreateHorizChainDimension"));
1545
QAction* p2 = pcAction->addAction(QString());
1546
p2->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCreateVertChainDimension"));
1547
p2->setObjectName(QString::fromLatin1("TechDraw_ExtensionCreateVertChainDimension"));
1548
p2->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCreateVertChainDimension"));
1549
QAction* p3 = pcAction->addAction(QString());
1550
p3->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCreateObliqueChainDimension"));
1551
p3->setObjectName(QString::fromLatin1("TechDraw_ExtensionCreateObliqueChainDimension"));
1552
p3->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCreateObliqueChainDimension"));
1554
_pcAction = pcAction;
1557
pcAction->setIcon(p1->icon());
1559
pcAction->setProperty("defaultAction", QVariant(defaultId));
1564
void CmdTechDrawExtensionCreateChainDimensionGroup::languageChange()
1566
Command::languageChange();
1570
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
1571
QList<QAction*> a = pcAction->actions();
1573
QAction* arc1 = a[0];
1574
arc1->setText(QApplication::translate("CmdTechDrawExtensionCreateHorizChainDimension", "Create Horizontal Chain Dimensions"));
1575
arc1->setToolTip(QApplication::translate("CmdTechDrawExtensionCreateHorizChainDimension",
1576
"Create a sequence of aligned horizontal dimensions:<br>\
1577
- Select three or more vertexes<br>\
1578
- Click this tool"));
1579
arc1->setStatusTip(arc1->text());
1580
QAction* arc2 = a[1];
1581
arc2->setText(QApplication::translate("CmdTechDrawExtensionCreateVertChainDimension", "Create Vertical Chain Dimensions"));
1582
arc2->setToolTip(QApplication::translate("CmdTechDrawExtensionCreateVertChainDimension",
1583
"Create a sequence of aligned vertical dimensions:<br>\
1584
- Select three or more vertexes<br>\
1585
- Click this tool"));
1586
arc2->setStatusTip(arc2->text());
1587
QAction* arc3 = a[2];
1588
arc3->setText(QApplication::translate("CmdTechDrawExtensionCreateObliqueChainDimension", "Create Oblique Chain Dimensions"));
1589
arc3->setToolTip(QApplication::translate("CmdTechDrawExtensionCreateObliqueChainDimension",
1590
"Create a sequence of aligned oblique dimensions:<br>\
1591
- Select three or more vertexes<br>\
1592
- The first two vertexes define the direction<br>\
1593
- Click this tool"));
1594
arc3->setStatusTip(arc3->text());
1597
bool CmdTechDrawExtensionCreateChainDimensionGroup::isActive()
1599
bool havePage = DrawGuiUtil::needPage(this);
1600
bool haveView = DrawGuiUtil::needView(this, true);
1601
return (havePage && haveView);
1608
void execCreateHorizCoordDimension(Gui::Command* cmd) {
1610
std::vector<Gui::SelectionObject> selection;
1611
TechDraw::DrawViewPart* objFeat;
1612
if (!_checkSelObjAndSubs(cmd, selection, objFeat, QT_TRANSLATE_NOOP("QObject","TechDraw Create Horizontal Coord Dimension"))) {
1616
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create Horiz Coord Dim"));
1617
const std::vector<std::string> subNames = selection[0].getSubNames();
1618
std::vector<dimVertex> allVertexes;
1619
allVertexes = _getVertexInfo(objFeat, subNames);
1620
if (!allVertexes.empty() && allVertexes.size() > 1) {
1621
dimVertex firstVertex = allVertexes[0];
1622
dimVertex secondVertex = allVertexes[1];
1623
std::sort(allVertexes.begin(), allVertexes.end(), sortX);
1624
if (firstVertex.point.x > secondVertex.point.x) {
1625
std::reverse(allVertexes.begin(), allVertexes.end());
1627
float dimDistance = activeDimAttributes.getCascadeSpacing();
1628
float yMaster = allVertexes[0].point.y - dimDistance;
1629
if (std::signbit(yMaster))
1630
dimDistance = -dimDistance;
1631
for (long unsigned int n = 0; n < allVertexes.size() - 1; n++) {
1632
TechDraw::DrawViewDimension* dim;
1633
dim = _createLinDimension(cmd, objFeat, allVertexes[0].name, allVertexes[n + 1].name, "DistanceX");
1634
TechDraw::pointPair pp = dim->getLinearPoints();
1635
Base::Vector3d mid = (pp.first() + pp.second()) / 2.0;
1636
dim->X.setValue(mid.x);
1637
dim->Y.setValue(-yMaster - dimDistance * n);
1640
objFeat->refreshCEGeoms();
1641
objFeat->requestPaint();
1642
cmd->getSelection().clearSelection();
1643
Gui::Command::commitCommand();
1646
DEF_STD_CMD_A(CmdTechDrawExtensionCreateHorizCoordDimension)
1648
CmdTechDrawExtensionCreateHorizCoordDimension::CmdTechDrawExtensionCreateHorizCoordDimension()
1649
: Command("TechDraw_ExtensionCreateHorizCoordDimension")
1651
sAppModule = "TechDraw";
1652
sGroup = QT_TR_NOOP("TechDraw");
1653
sMenuText = QT_TR_NOOP("Create Horizontal Coordinate Dimensions");
1654
sToolTipText = QT_TR_NOOP("Create multiple evenly spaced horizontal dimensions starting from the same baseline:<br>\
1655
- Specify the cascade spacing (optional)<br>\
1656
- Select three or more vertexes<br>\
1657
- The selection order of the first two vertexes determines the position of the baseline<br>\
1659
sWhatsThis = "TechDraw_ExtensionCreateHorizCoordDimension";
1660
sStatusTip = sMenuText;
1661
sPixmap = "TechDraw_ExtensionCreateHorizCoordDimension";
1664
void CmdTechDrawExtensionCreateHorizCoordDimension::activated(int iMsg)
1667
execCreateHorizCoordDimension(this);
1670
bool CmdTechDrawExtensionCreateHorizCoordDimension::isActive()
1672
bool havePage = DrawGuiUtil::needPage(this);
1673
bool haveView = DrawGuiUtil::needView(this);
1674
return (havePage && haveView);
1681
void execCreateVertCoordDimension(Gui::Command* cmd) {
1683
std::vector<Gui::SelectionObject> selection;
1684
TechDraw::DrawViewPart* objFeat;
1685
if (!_checkSelObjAndSubs(cmd, selection, objFeat, QT_TRANSLATE_NOOP("QObject","TechDraw Create Vertical Coord Dimension"))) {
1688
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create Vert Coord Dim"));
1689
const std::vector<std::string> subNames = selection[0].getSubNames();
1690
std::vector<dimVertex> allVertexes;
1691
allVertexes = _getVertexInfo(objFeat, subNames);
1692
if (!allVertexes.empty() && allVertexes.size() > 1) {
1693
dimVertex firstVertex = allVertexes[0];
1694
dimVertex secondVertex = allVertexes[1];
1695
std::sort(allVertexes.begin(), allVertexes.end(), sortY);
1696
if (firstVertex.point.y > secondVertex.point.y) {
1697
std::reverse(allVertexes.begin(), allVertexes.end());
1699
float dimDistance = activeDimAttributes.getCascadeSpacing();
1700
float xMaster = allVertexes[0].point.x + dimDistance;
1701
if (std::signbit(xMaster))
1702
dimDistance = -dimDistance;
1703
double fontSize = Preferences::dimFontSizeMM();
1704
for (long unsigned int n = 0; n < allVertexes.size() - 1; n++) {
1705
TechDraw::DrawViewDimension* dim;
1706
dim = _createLinDimension(cmd, objFeat, allVertexes[0].name, allVertexes[n + 1].name, "DistanceY");
1707
TechDraw::pointPair pp = dim->getLinearPoints();
1708
Base::Vector3d mid = (pp.first() + pp.second()) / 2.0;
1709
dim->X.setValue(xMaster + dimDistance * n);
1710
dim->Y.setValue(-mid.y + 0.5 * fontSize);
1713
objFeat->refreshCEGeoms();
1714
objFeat->requestPaint();
1715
cmd->getSelection().clearSelection();
1716
Gui::Command::commitCommand();
1719
DEF_STD_CMD_A(CmdTechDrawExtensionCreateVertCoordDimension)
1721
CmdTechDrawExtensionCreateVertCoordDimension::CmdTechDrawExtensionCreateVertCoordDimension()
1722
: Command("TechDraw_ExtensionCreateVertCoordDimension")
1724
sAppModule = "TechDraw";
1725
sGroup = QT_TR_NOOP("TechDraw");
1726
sMenuText = QT_TR_NOOP("Create Vertical Coordinate Dimensions");
1727
sToolTipText = QT_TR_NOOP("Create multiple evenly spaced vertical dimensions starting from the same baseline:<br>\
1728
- Specify the cascade spacing (optional)<br>\
1729
- Select three or more vertexes<br>\
1730
- The selection order of the first two vertexes determines the position of the baseline<br>\
1732
sWhatsThis = "TechDraw_ExtensionCreateVertCoordDimension";
1733
sStatusTip = sMenuText;
1734
sPixmap = "TechDraw_ExtensionCreateVertCoordDimension";
1737
void CmdTechDrawExtensionCreateVertCoordDimension::activated(int iMsg)
1740
execCreateVertCoordDimension(this);
1743
bool CmdTechDrawExtensionCreateVertCoordDimension::isActive()
1745
bool havePage = DrawGuiUtil::needPage(this);
1746
bool haveView = DrawGuiUtil::needView(this);
1747
return (havePage && haveView);
1754
void execCreateObliqueCoordDimension(Gui::Command* cmd) {
1756
std::vector<Gui::SelectionObject> selection;
1757
TechDraw::DrawViewPart* objFeat;
1758
if (!_checkSelObjAndSubs(cmd, selection, objFeat, QT_TRANSLATE_NOOP("QObject","TechDraw Create Oblique Coord Dimension"))) {
1762
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create Oblique Coord Dim"));
1763
const std::vector<std::string> subNames = selection[0].getSubNames();
1764
std::vector<dimVertex> allVertexes, carrierVertexes;
1765
allVertexes = _getVertexInfo(objFeat, subNames);
1766
if (!allVertexes.empty() && allVertexes.size() > 1) {
1767
Base::Vector3d pMaster = allVertexes[0].point;
1768
Base::Vector3d dirMaster = pMaster - allVertexes[1].point;
1769
Base::Vector3d origin(0.0, 0.0, 0.0);
1770
Base::Vector3d delta = DrawUtil::getTrianglePoint(pMaster, dirMaster, origin);
1771
float dimDistance = activeDimAttributes.getCascadeSpacing();
1772
delta = delta.Normalize() * dimDistance;
1773
double scale = objFeat->getScale();
1774
for (dimVertex oldVertex : allVertexes) {
1775
Base::Vector3d nextPoint = DrawUtil::getTrianglePoint(pMaster, dirMaster, oldVertex.point);
1776
nextPoint.y = -nextPoint.y;
1777
oldVertex.point.y = -oldVertex.point.y;
1778
if ((oldVertex.point - nextPoint).Length() > 0.01) {
1779
Base::Vector3d cvPoint = CosmeticVertex::makeCanonicalPoint(objFeat, nextPoint);
1780
std::string vertTag = objFeat->addCosmeticVertex(cvPoint);
1781
int vertNumber = objFeat->add1CVToGV(vertTag);
1782
std::stringstream ss;
1783
ss << "Vertex" << vertNumber;
1784
dimVertex newVertex;
1785
newVertex.name = ss.str();
1786
newVertex.point = nextPoint;
1787
carrierVertexes.push_back(newVertex);
1788
std::string edgeTag = objFeat->addCosmeticEdge(oldVertex.point / scale, nextPoint / scale);
1789
auto edge = objFeat->getCosmeticEdge(edgeTag);
1790
edge->m_format.m_style = 1;
1791
edge->m_format.m_lineNumber = 1;
1792
edge->m_format.m_weight = 0.15;
1793
edge->m_format.m_color = App::Color(0.0f, 0.0f, 0.0f);
1796
carrierVertexes.push_back(oldVertex);
1798
dimVertex firstVertex = carrierVertexes[0];
1799
dimVertex secondVertex = carrierVertexes[1];
1800
std::sort(carrierVertexes.begin(), carrierVertexes.end(), sortX);
1801
if (firstVertex.point.x > secondVertex.point.x) {
1802
std::reverse(carrierVertexes.begin(), carrierVertexes.end());
1804
double fontSize = Preferences::dimFontSizeMM();
1805
for (long unsigned int n = 0; n < allVertexes.size() - 1; n++) {
1806
TechDraw::DrawViewDimension* dim;
1807
dim = _createLinDimension(cmd, objFeat, carrierVertexes[0].name, carrierVertexes[n + 1].name, "Distance");
1808
TechDraw::pointPair pp = dim->getLinearPoints();
1809
Base::Vector3d mid = (pp.first() + pp.second()) / 2.0 + delta * (n + 1);
1810
dim->X.setValue(mid.x);
1811
dim->Y.setValue(-mid.y + 0.5 * fontSize);
1814
objFeat->refreshCEGeoms();
1815
objFeat->requestPaint();
1816
cmd->getSelection().clearSelection();
1817
Gui::Command::commitCommand();
1820
DEF_STD_CMD_A(CmdTechDrawExtensionCreateObliqueCoordDimension)
1822
CmdTechDrawExtensionCreateObliqueCoordDimension::CmdTechDrawExtensionCreateObliqueCoordDimension()
1823
: Command("TechDraw_ExtensionCreateObliqueCoordDimension")
1825
sAppModule = "TechDraw";
1826
sGroup = QT_TR_NOOP("TechDraw");
1827
sMenuText = QT_TR_NOOP("Create Oblique Coordinate Dimensions");
1828
sToolTipText = QT_TR_NOOP("Create multiple evenly spaced oblique dimensions starting from the same baseline:<br>\
1829
- Specify the cascade spacing (optional)<br>\
1830
- Select three or more vertexes<br>\
1831
- The selection order of the first two vertexes determines the position of the baseline<br>\
1832
- The first two vertexes also define the direction<br>\
1834
sWhatsThis = "TechDraw_ExtensionCreateObliqueCoordDimension";
1835
sStatusTip = sMenuText;
1836
sPixmap = "TechDraw_ExtensionCreateObliqueCoordDimension";
1839
void CmdTechDrawExtensionCreateObliqueCoordDimension::activated(int iMsg)
1842
execCreateObliqueCoordDimension(this);
1845
bool CmdTechDrawExtensionCreateObliqueCoordDimension::isActive()
1847
bool havePage = DrawGuiUtil::needPage(this);
1848
bool haveView = DrawGuiUtil::needView(this);
1849
return (havePage && haveView);
1856
DEF_STD_CMD_ACL(CmdTechDrawExtensionCreateCoordDimensionGroup)
1858
CmdTechDrawExtensionCreateCoordDimensionGroup::CmdTechDrawExtensionCreateCoordDimensionGroup()
1859
: Command("TechDraw_ExtensionCreateCoordDimensionGroup")
1861
sAppModule = "TechDraw";
1862
sGroup = QT_TR_NOOP("TechDraw");
1863
sMenuText = QT_TR_NOOP("Create Horizontal Coordinate Dimensions");
1864
sToolTipText = QT_TR_NOOP("Create multiple evenly spaced horizontal dimensions starting from the same baseline:<br>\
1865
- Specify the cascade spacing (optional)<br>\
1866
- Select three or more vertexes<br>\
1867
- The selection order of the first two vertexes determines the position of the baseline<br>\
1869
sWhatsThis = "TechDraw_ExtensionCreateCoordDimensionGroup";
1870
sStatusTip = sMenuText;
1873
void CmdTechDrawExtensionCreateCoordDimensionGroup::activated(int iMsg)
1876
Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog();
1878
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
1879
QObject::tr("Close active task dialog and try again."));
1883
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
1884
pcAction->setIcon(pcAction->actions().at(iMsg)->icon());
1887
execCreateHorizCoordDimension(this);
1890
execCreateVertCoordDimension(this);
1893
execCreateObliqueCoordDimension(this);
1896
Base::Console().Message("CMD::CVGrp - invalid iMsg: %d\n", iMsg);
1900
Gui::Action* CmdTechDrawExtensionCreateCoordDimensionGroup::createAction()
1902
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
1903
pcAction->setDropDownMenu(true);
1904
applyCommandData(this->className(), pcAction);
1906
QAction* p1 = pcAction->addAction(QString());
1907
p1->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCreateHorizCoordDimension"));
1908
p1->setObjectName(QString::fromLatin1("TechDraw_ExtensionCreateHorizCoordDimension"));
1909
p1->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCreateHorizCoordDimension"));
1910
QAction* p2 = pcAction->addAction(QString());
1911
p2->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCreateVertCoordDimension"));
1912
p2->setObjectName(QString::fromLatin1("TechDraw_ExtensionCreateVertCoordDimension"));
1913
p2->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCreateVertCoordDimension"));
1914
QAction* p3 = pcAction->addAction(QString());
1915
p3->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCreateObliqueCoordDimension"));
1916
p3->setObjectName(QString::fromLatin1("TechDraw_ExtensionCreateObliqueCoordDimension"));
1917
p3->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCreateObliqueCoordDimension"));
1919
_pcAction = pcAction;
1922
pcAction->setIcon(p1->icon());
1924
pcAction->setProperty("defaultAction", QVariant(defaultId));
1929
void CmdTechDrawExtensionCreateCoordDimensionGroup::languageChange()
1931
Command::languageChange();
1935
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
1936
QList<QAction*> a = pcAction->actions();
1938
QAction* arc1 = a[0];
1939
arc1->setText(QApplication::translate("CmdTechDrawExtensionCreateHorizCoordDimension", "Create Horizontal Coordinate Dimensions"));
1940
arc1->setToolTip(QApplication::translate("CmdTechDrawExtensionCreateHorizCoordDimension",
1941
"Create multiple evenly spaced horizontal dimensions starting from the same baseline:<br>\
1942
- Specify the cascade spacing (optional)<br>\
1943
- Select three or more vertexes<br>\
1944
- The selection order of the first two vertexes determines the position of the baseline<br>\
1945
- Click this tool"));
1946
arc1->setStatusTip(arc1->text());
1947
QAction* arc2 = a[1];
1948
arc2->setText(QApplication::translate("CmdTechDrawExtensionCreateVertCoordDimension", "Create Vertical Coordinate Dimensions"));
1949
arc2->setToolTip(QApplication::translate("CmdTechDrawExtensionCreateVertCoordDimension",
1950
"Create multiple evenly spaced vertical dimensions starting from the same baseline:<br>\
1951
- Specify the cascade spacing (optional)<br>\
1952
- Select three or more vertexes<br>\
1953
- The selection order of the first two vertexes determines the position of the baseline<br>\
1954
- Click this tool"));
1955
arc2->setStatusTip(arc2->text());
1956
QAction* arc3 = a[2];
1957
arc3->setText(QApplication::translate("CmdTechDrawExtensionCreateObliqueCoordDimension", "Create Oblique Coordinate Dimensions"));
1958
arc3->setToolTip(QApplication::translate("CmdTechDrawExtensionCreateObliqueCoordDimension",
1959
"Create multiple evenly spaced oblique dimensions starting from the same baseline:<br>\
1960
- Specify the cascade spacing (optional)<br>\
1961
- Select three or more vertexes<br>\
1962
- The selection order of the first two vertexes determines the position of the baseline<br>\
1963
- The first two vertexes also define the direction<br>\
1964
- Click this tool"));
1965
arc3->setStatusTip(arc3->text());
1968
bool CmdTechDrawExtensionCreateCoordDimensionGroup::isActive()
1970
bool havePage = DrawGuiUtil::needPage(this);
1971
bool haveView = DrawGuiUtil::needView(this, true);
1972
return (havePage && haveView);
1979
void execCreateHorizChamferDimension(Gui::Command* cmd) {
1981
std::vector<Gui::SelectionObject> selection;
1982
TechDraw::DrawViewPart* objFeat;
1983
if (!_checkSelObjAndSubs(cmd, selection, objFeat, QT_TRANSLATE_NOOP("QObject","TechDraw Create Horizontal Chamfer Dimension"))) {
1987
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create Horiz Chamfer Dim"));
1988
const std::vector<std::string> subNames = selection[0].getSubNames();
1989
std::vector<dimVertex> allVertexes;
1990
allVertexes = _getVertexInfo(objFeat, subNames);
1991
if (!allVertexes.empty() && allVertexes.size() > 1) {
1992
const auto Pi180 = 180.0 / M_PI;
1993
TechDraw::DrawViewDimension* dim;
1994
dim = _createLinDimension(cmd, objFeat, allVertexes[0].name, allVertexes[1].name, "DistanceX");
1995
float yMax = std::max(abs(allVertexes[0].point.y), abs(allVertexes[1].point.y)) + 7.0;
1996
if (std::signbit(allVertexes[0].point.y))
1998
TechDraw::pointPair pp = dim->getLinearPoints();
1999
Base::Vector3d mid = (pp.first() + pp.second()) / 2.0;
2000
dim->X.setValue(mid.x);
2001
dim->Y.setValue(-yMax);
2002
float dx = allVertexes[0].point.x - allVertexes[1].point.x;
2003
float dy = allVertexes[0].point.y - allVertexes[1].point.y;
2004
float alpha = round(abs(atan(dy / dx)) * Pi180);
2005
std::string sAlpha = std::to_string((int)alpha);
2006
std::string formatSpec = dim->FormatSpec.getStrValue();
2007
formatSpec = formatSpec + " x" + sAlpha + "°";
2008
dim->FormatSpec.setValue(formatSpec);
2009
objFeat->requestPaint();
2010
cmd->getSelection().clearSelection();
2012
Gui::Command::commitCommand();
2015
DEF_STD_CMD_A(CmdTechDrawExtensionCreateHorizChamferDimension)
2017
CmdTechDrawExtensionCreateHorizChamferDimension::CmdTechDrawExtensionCreateHorizChamferDimension()
2018
: Command("TechDraw_ExtensionCreateHorizChamferDimension")
2020
sAppModule = "TechDraw";
2021
sGroup = QT_TR_NOOP("TechDraw");
2022
sMenuText = QT_TR_NOOP("Create Horizontal Chamfer Dimension");
2023
sToolTipText = QT_TR_NOOP("Create a horizontal size and angle dimension for a chamfer:<br>\
2024
- Select two vertexes<br>\
2026
sWhatsThis = "TechDraw_ExtensionCreateHorizChamferDimension";
2027
sStatusTip = sMenuText;
2028
sPixmap = "TechDraw_ExtensionCreateHorizChamferDimension";
2031
void CmdTechDrawExtensionCreateHorizChamferDimension::activated(int iMsg)
2034
execCreateHorizChamferDimension(this);
2037
bool CmdTechDrawExtensionCreateHorizChamferDimension::isActive()
2039
bool havePage = DrawGuiUtil::needPage(this);
2040
bool haveView = DrawGuiUtil::needView(this);
2041
return (havePage && haveView);
2048
void execCreateVertChamferDimension(Gui::Command* cmd) {
2050
std::vector<Gui::SelectionObject> selection;
2051
TechDraw::DrawViewPart* objFeat;
2052
if (!_checkSelObjAndSubs(cmd, selection, objFeat, QT_TRANSLATE_NOOP("QObject","TechDraw Create Vertical Chamfer Dimension"))) {
2056
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create Vert Chamfer Dim"));
2057
const std::vector<std::string> subNames = selection[0].getSubNames();
2058
std::vector<dimVertex> allVertexes;
2059
allVertexes = _getVertexInfo(objFeat, subNames);
2060
if (!allVertexes.empty() && allVertexes.size() > 1) {
2061
const auto Pi180 = 180.0 / M_PI;
2062
TechDraw::DrawViewDimension* dim;
2063
dim = _createLinDimension(cmd, objFeat, allVertexes[0].name, allVertexes[1].name, "DistanceY");
2064
float xMax = std::max(abs(allVertexes[0].point.x), abs(allVertexes[1].point.x)) + 7.0;
2065
if (std::signbit(allVertexes[0].point.x))
2067
TechDraw::pointPair pp = dim->getLinearPoints();
2068
Base::Vector3d mid = (pp.first() + pp.second()) / 2.0;
2069
dim->X.setValue(xMax);
2070
dim->Y.setValue(-mid.y);
2071
float dx = allVertexes[0].point.x - allVertexes[1].point.x;
2072
float dy = allVertexes[0].point.y - allVertexes[1].point.y;
2073
float alpha = round(abs(atan(dx / dy)) * Pi180);
2074
std::string sAlpha = std::to_string((int)alpha);
2075
std::string formatSpec = dim->FormatSpec.getStrValue();
2076
formatSpec = formatSpec + " x" + sAlpha + "°";
2077
dim->FormatSpec.setValue(formatSpec);
2078
objFeat->requestPaint();
2079
cmd->getSelection().clearSelection();
2081
Gui::Command::commitCommand();
2084
DEF_STD_CMD_A(CmdTechDrawExtensionCreateVertChamferDimension)
2086
CmdTechDrawExtensionCreateVertChamferDimension::CmdTechDrawExtensionCreateVertChamferDimension()
2087
: Command("TechDraw_ExtensionCreateVertChamferDimension")
2089
sAppModule = "TechDraw";
2090
sGroup = QT_TR_NOOP("TechDraw");
2091
sMenuText = QT_TR_NOOP("Create Vertical Chamfer Dimension");
2092
sToolTipText = QT_TR_NOOP("Create a vertical size and angle dimension for a chamfer:<br>\
2093
- Select two vertexes<br>\
2095
sWhatsThis = "TechDraw_ExtensionCreateVertChamferDimension";
2096
sStatusTip = sMenuText;
2097
sPixmap = "TechDraw_ExtensionCreateVertChamferDimension";
2100
void CmdTechDrawExtensionCreateVertChamferDimension::activated(int iMsg)
2103
execCreateVertChamferDimension(this);
2106
bool CmdTechDrawExtensionCreateVertChamferDimension::isActive()
2108
bool havePage = DrawGuiUtil::needPage(this);
2109
bool haveView = DrawGuiUtil::needView(this);
2110
return (havePage && haveView);
2117
DEF_STD_CMD_ACL(CmdTechDrawExtensionChamferDimensionGroup)
2119
CmdTechDrawExtensionChamferDimensionGroup::CmdTechDrawExtensionChamferDimensionGroup()
2120
: Command("TechDraw_ExtensionChamferDimensionGroup")
2122
sAppModule = "TechDraw";
2123
sGroup = QT_TR_NOOP("TechDraw");
2124
sMenuText = QT_TR_NOOP("Create Horizontal Chamfer Dimension");
2125
sToolTipText = QT_TR_NOOP("Create a horizontal size and angle dimension for a chamfer:<br>\
2126
- Select two vertexes<br>\
2128
sWhatsThis = "TechDraw_ExtensionChamferDimensionGroup";
2129
sStatusTip = sMenuText;
2132
void CmdTechDrawExtensionChamferDimensionGroup::activated(int iMsg)
2135
Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog();
2137
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
2138
QObject::tr("Close active task dialog and try again."));
2142
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
2143
pcAction->setIcon(pcAction->actions().at(iMsg)->icon());
2146
execCreateHorizChamferDimension(this);
2149
execCreateVertChamferDimension(this);
2152
Base::Console().Message("CMD::CVGrp - invalid iMsg: %d\n", iMsg);
2156
Gui::Action* CmdTechDrawExtensionChamferDimensionGroup::createAction()
2158
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
2159
pcAction->setDropDownMenu(true);
2160
applyCommandData(this->className(), pcAction);
2162
QAction* p1 = pcAction->addAction(QString());
2163
p1->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCreateHorizChamferDimension"));
2164
p1->setObjectName(QString::fromLatin1("TechDraw_ExtensionCreateHorizChamferDimension"));
2165
p1->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCreateHorizChamferDimension"));
2166
QAction* p2 = pcAction->addAction(QString());
2167
p2->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionCreateVertChamferDimension"));
2168
p2->setObjectName(QString::fromLatin1("TechDraw_ExtensionCreateVertChamferDimension"));
2169
p2->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionCreateVertChamferDimension"));
2171
_pcAction = pcAction;
2174
pcAction->setIcon(p1->icon());
2176
pcAction->setProperty("defaultAction", QVariant(defaultId));
2181
void CmdTechDrawExtensionChamferDimensionGroup::languageChange()
2183
Command::languageChange();
2187
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
2188
QList<QAction*> a = pcAction->actions();
2190
QAction* arc1 = a[0];
2191
arc1->setText(QApplication::translate("CmdTechDrawExtensionCreateHorizChamferDimension", "Create Horizontal Chamfer Dimension"));
2192
arc1->setToolTip(QApplication::translate("CmdTechDrawExtensionCreateHorizChamferDimension",
2193
"Create a horizontal size and angle dimension for a chamfer:<br>\
2194
- Select two vertexes<br>\
2195
- Click this tool"));
2196
arc1->setStatusTip(arc1->text());
2197
QAction* arc2 = a[1];
2198
arc2->setText(QApplication::translate("CmdTechDrawExtensionCreateVertChamferDimension", "Create Vertical Chamfer Dimension"));
2199
arc2->setToolTip(QApplication::translate("CmdTechDrawExtensionCreateVertChamferDimension",
2200
"Create a vertical size and angle dimension for a chamfer:<br>\
2201
- Select two vertexes<br>\
2202
- Click this tool"));
2203
arc2->setStatusTip(arc2->text());
2206
bool CmdTechDrawExtensionChamferDimensionGroup::isActive()
2208
bool havePage = DrawGuiUtil::needPage(this);
2209
bool haveView = DrawGuiUtil::needView(this, true);
2210
return (havePage && haveView);
2217
DEF_STD_CMD_A(CmdTechDrawExtensionCreateLengthArc)
2219
CmdTechDrawExtensionCreateLengthArc::CmdTechDrawExtensionCreateLengthArc()
2220
: Command("TechDraw_ExtensionCreateLengthArc")
2222
sAppModule = "TechDraw";
2223
sGroup = QT_TR_NOOP("TechDraw");
2224
sMenuText = QT_TR_NOOP("Create Arc Length Dimension");
2225
sToolTipText = QT_TR_NOOP("Create an arc length dimension:<br>\
2226
- Select a single arc<br>\
2228
sWhatsThis = "TechDraw_ExtensionCreateLengthArc";
2229
sStatusTip = sMenuText;
2230
sPixmap = "TechDraw_ExtensionCreateLengthArc";
2233
void CmdTechDrawExtensionCreateLengthArc::activated(int iMsg) {
2236
std::vector<Gui::SelectionObject> selection;
2237
TechDraw::DrawViewPart* objFeat;
2238
if (!_checkSelObjAndSubs(this, selection, objFeat, QT_TRANSLATE_NOOP("QObject","TechDraw Create Arc Length Dimension"))) {
2242
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create Arc Length Dim"));
2243
const std::vector<std::string> subNames = selection[0].getSubNames();
2244
int geoId = TechDraw::DrawUtil::getIndexFromName(subNames[0]);
2245
TechDraw::BaseGeomPtr geom = objFeat->getGeomByIndex(geoId);
2246
std::string geoType = TechDraw::DrawUtil::getGeomTypeFromName(subNames[0]);
2247
if (geoType == "Edge" && geom->getGeomType() == TechDraw::ARCOFCIRCLE) {
2248
TechDraw::AOCPtr arcTag = std::static_pointer_cast<TechDraw::AOC>(geom);
2249
float radius = arcTag->radius;
2250
Base::Vector3d centerPt = arcTag->center;
2251
centerPt.y = -centerPt.y;
2252
Base::Vector3d startPt = arcTag->startPnt;
2253
startPt.y = -startPt.y;
2254
Base::Vector3d endPt = arcTag->endPnt;
2256
std::stringstream startName, endName, formatSpec;
2257
double scale = objFeat->getScale();
2258
Base::Vector3d cvPoint = CosmeticVertex::makeCanonicalPoint(objFeat, startPt);
2259
std::string startVertTag = objFeat->addCosmeticVertex(cvPoint);
2260
int startVertNumber = objFeat->add1CVToGV(startVertTag);
2261
startName << "Vertex" << startVertNumber;
2262
cvPoint = CosmeticVertex::makeCanonicalPoint(objFeat, endPt);
2263
std::string endVertTag = objFeat->addCosmeticVertex(cvPoint);
2264
int endVertNumber = objFeat->add1CVToGV(endVertTag);
2265
endName << "Vertex" << endVertNumber;
2266
TechDraw::DrawViewDimension* dim;
2267
dim = _createLinDimension(this, objFeat, startName.str(), endName.str(), "Distance");
2268
TechDraw::pointPair pp = dim->getLinearPoints();
2269
Base::Vector3d mid = (pp.first() + pp.second()) / 2.0;
2270
dim->X.setValue(mid.x);
2271
dim->Y.setValue(-mid.y);
2272
Base::Vector3d radVec1 = startPt - centerPt;
2273
Base::Vector3d radVec2 = endPt - centerPt;
2274
float alpha = acos((radVec1 * radVec2) / (radVec1.Length() * radVec2.Length()));
2275
float arcLength = alpha * radius / scale;
2276
dim->Arbitrary.setValue(true);
2277
formatSpec << "◠ " << arcLength;
2278
dim->FormatSpec.setValue(formatSpec.str());
2279
objFeat->refreshCEGeoms();
2280
objFeat->requestPaint();
2281
getSelection().clearSelection();
2283
Gui::Command::commitCommand();
2286
bool CmdTechDrawExtensionCreateLengthArc::isActive()
2288
bool havePage = DrawGuiUtil::needPage(this);
2289
bool haveView = DrawGuiUtil::needView(this);
2290
return (havePage && haveView);
2297
DEF_STD_CMD_A(CmdTechDrawExtensionCustomizeFormat)
2299
CmdTechDrawExtensionCustomizeFormat::CmdTechDrawExtensionCustomizeFormat()
2300
: Command("TechDraw_ExtensionCustomizeFormat")
2302
sAppModule = "TechDraw";
2303
sGroup = QT_TR_NOOP("TechDraw");
2304
sMenuText = QT_TR_NOOP("Customize Format Label");
2305
sToolTipText = QT_TR_NOOP("Select a dimension or a balloon<br>\
2306
- click this tool<br>\
2307
- edit the Format field, using the keyboard and/or the special buttons");
2308
sWhatsThis = "TechDraw_ExtensionCustomizeFormat";
2309
sStatusTip = sToolTipText;
2310
sPixmap = "TechDraw_ExtensionCustomizeFormat";
2313
void CmdTechDrawExtensionCustomizeFormat::activated(int iMsg)
2316
std::vector<Gui::SelectionObject> selected;
2317
if (!_checkSelection(this, selected, QT_TRANSLATE_NOOP("QObject","TechDraw Customize Format")))
2319
auto object = selected[0].getObject();
2320
if (object->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId()) ||
2321
object->isDerivedFrom(TechDraw::DrawViewBalloon::getClassTypeId()))
2322
Gui::Control().showDialog(new TaskDlgCustomizeFormat(object));
2325
bool CmdTechDrawExtensionCustomizeFormat::isActive()
2327
bool havePage = DrawGuiUtil::needPage(this);
2328
bool haveView = DrawGuiUtil::needView(this);
2329
return (havePage && haveView);
2332
namespace TechDrawGui {
2337
bool _checkSelection(Gui::Command* cmd,
2338
std::vector<Gui::SelectionObject>& selection,
2339
std::string message) {
2341
selection = cmd->getSelection().getSelectionEx();
2342
if (selection.empty()) {
2343
QMessageBox::warning(Gui::getMainWindow(),
2344
QObject::tr(message.c_str()),
2345
QObject::tr("Selection is empty"));
2351
bool _checkSelAndObj(Gui::Command* cmd,
2352
std::vector<Gui::SelectionObject>& selection,
2353
TechDraw::DrawViewPart*& objFeat,
2354
std::string message) {
2356
if (_checkSelection(cmd, selection, message)) {
2357
objFeat = dynamic_cast<TechDraw::DrawViewPart*>(selection[0].getObject());
2359
QMessageBox::warning(Gui::getMainWindow(),
2360
QObject::tr(message.c_str()),
2361
QObject::tr("No object selected"));
2371
bool _checkSelObjAndSubs(Gui::Command* cmd,
2372
std::vector<Gui::SelectionObject>& selection,
2373
TechDraw::DrawViewPart*& objFeat,
2374
std::string message) {
2376
if (_checkSelAndObj(cmd, selection, objFeat, message)) {
2377
auto subs = selection[0].getSubNames();
2379
QMessageBox::warning(Gui::getMainWindow(),
2380
QObject::tr(message.c_str()),
2381
QObject::tr("No subelements selected"));
2390
TechDraw::DrawViewDimension* _createLinDimension(Gui::Command* cmd,
2391
TechDraw::DrawViewPart* objFeat,
2392
std::string startVertex,
2393
std::string endVertex,
2394
std::string dimType)
2397
TechDraw::DrawPage* page = objFeat->findParentPage();
2398
std::string PageName = page->getNameInDocument();
2399
TechDraw::DrawViewDimension* dim = nullptr;
2400
std::string FeatName = cmd->getUniqueObjectName("Dimension");
2401
std::vector<App::DocumentObject*> objs;
2402
std::vector<std::string> subs;
2403
objs.push_back(objFeat);
2404
objs.push_back(objFeat);
2405
subs.push_back(startVertex);
2406
subs.push_back(endVertex);
2407
cmd->doCommand(cmd->Doc, "App.activeDocument().addObject('TechDraw::DrawViewDimension', '%s')", FeatName.c_str());
2408
cmd->doCommand(cmd->Doc, "App.activeDocument().%s.Type = '%s'", FeatName.c_str(), dimType.c_str());
2409
dim = dynamic_cast<TechDraw::DrawViewDimension*>(cmd->getDocument()->getObject(FeatName.c_str()));
2411
throw Base::TypeError("CmdTechDrawExtensionCreateLinDimension - dim not found\n");
2412
dim->References2D.setValues(objs, subs);
2413
cmd->doCommand(cmd->Doc, "App.activeDocument().%s.addView(App.activeDocument().%s)", PageName.c_str(), FeatName.c_str());
2417
dim->recomputeFeature();
2421
std::vector<dimVertex> _getVertexInfo(TechDraw::DrawViewPart* objFeat,
2422
std::vector<std::string> subNames) {
2424
std::vector<dimVertex> vertexes;
2425
dimVertex nextVertex;
2426
for (const std::string& name : subNames) {
2427
std::string geoType = TechDraw::DrawUtil::getGeomTypeFromName(name);
2428
if (geoType == "Vertex") {
2429
int geoId = TechDraw::DrawUtil::getIndexFromName(name);
2430
TechDraw::VertexPtr vert = objFeat->getProjVertexByIndex(geoId);
2431
nextVertex.name = name;
2432
nextVertex.point.x = vert->point().x;
2433
nextVertex.point.y = vert->point().y;
2434
nextVertex.point.z = 0.0;
2435
vertexes.push_back(nextVertex);
2441
std::vector<TechDraw::DrawViewDimension*>_getDimensions(std::vector<Gui::SelectionObject> selection, std::string needDimType) {
2443
std::vector<TechDraw::DrawViewDimension*> validDimension;
2444
for (auto selected : selection) {
2445
auto object = selected.getObject();
2446
if (object->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId())) {
2447
auto dim = static_cast<TechDraw::DrawViewDimension*>(selected.getObject());
2448
std::string dimType = dim->Type.getValueAsString();
2449
if (dimType == needDimType)
2450
validDimension.push_back(dim);
2453
return validDimension;
2458
void CreateTechDrawCommandsExtensionDims()
2460
Gui::CommandManager& rcCmdMgr = Gui::Application::Instance->commandManager();
2462
rcCmdMgr.addCommand(new CmdTechDrawExtensionInsertPrefixGroup());
2463
rcCmdMgr.addCommand(new CmdTechDrawExtensionInsertDiameter());
2464
rcCmdMgr.addCommand(new CmdTechDrawExtensionInsertSquare());
2465
rcCmdMgr.addCommand(new CmdTechDrawExtensionInsertRepetition());
2466
rcCmdMgr.addCommand(new CmdTechDrawExtensionRemovePrefixChar());
2467
rcCmdMgr.addCommand(new CmdTechDrawExtensionIncreaseDecreaseGroup());
2468
rcCmdMgr.addCommand(new CmdTechDrawExtensionIncreaseDecimal());
2469
rcCmdMgr.addCommand(new CmdTechDrawExtensionDecreaseDecimal());
2470
rcCmdMgr.addCommand(new CmdTechDrawExtensionPosChainDimensionGroup());
2471
rcCmdMgr.addCommand(new CmdTechDrawExtensionPosHorizChainDimension());
2472
rcCmdMgr.addCommand(new CmdTechDrawExtensionPosVertChainDimension());
2473
rcCmdMgr.addCommand(new CmdTechDrawExtensionPosObliqueChainDimension());
2474
rcCmdMgr.addCommand(new CmdTechDrawExtensionCascadeDimensionGroup());
2475
rcCmdMgr.addCommand(new CmdTechDrawExtensionCascadeHorizDimension());
2476
rcCmdMgr.addCommand(new CmdTechDrawExtensionCascadeVertDimension());
2477
rcCmdMgr.addCommand(new CmdTechDrawExtensionCascadeObliqueDimension());
2478
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateChainDimensionGroup());
2479
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateHorizChainDimension());
2480
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateVertChainDimension());
2481
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateObliqueChainDimension());
2482
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateCoordDimensionGroup());
2483
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateHorizCoordDimension());
2484
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateVertCoordDimension());
2485
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateObliqueCoordDimension());
2486
rcCmdMgr.addCommand(new CmdTechDrawExtensionChamferDimensionGroup());
2487
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateHorizChamferDimension());
2488
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateVertChamferDimension());
2489
rcCmdMgr.addCommand(new CmdTechDrawExtensionCreateLengthArc());
2490
rcCmdMgr.addCommand(new CmdTechDrawExtensionCustomizeFormat());