[TD]fix crash on bad centerline selection
This commit is contained in:
@@ -581,13 +581,13 @@ void CmdTechDrawCenterLineGroup::activated(int iMsg)
|
||||
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
|
||||
pcAction->setIcon(pcAction->actions().at(iMsg)->icon());
|
||||
switch(iMsg) {
|
||||
case 0:
|
||||
case 0: //faces
|
||||
execCenterLine(this);
|
||||
break;
|
||||
case 1:
|
||||
case 1: //2 lines
|
||||
exec2LineCenterLine(this);
|
||||
break;
|
||||
case 2:
|
||||
case 2: //2 points
|
||||
exec2PointCenterLine(this);
|
||||
break;
|
||||
default:
|
||||
@@ -743,29 +743,23 @@ void execCenterLine(Gui::Command* cmd)
|
||||
if (!faceNames.empty()) {
|
||||
Gui::Control().showDialog(new TaskDlgCenterLine(baseFeat,
|
||||
page,
|
||||
faceNames));
|
||||
faceNames,
|
||||
false));
|
||||
} else if (edgeNames.empty()) {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong Selection"),
|
||||
QObject::tr("No CenterLine in selection."));
|
||||
return;
|
||||
} else {
|
||||
std::string edgeName = edgeNames.front();
|
||||
int geomIdx = DrawUtil::getIndexFromName(edgeName);
|
||||
const std::vector<TechDraw::BaseGeom *> &geoms = baseFeat->getEdgeGeometry();
|
||||
BaseGeom* bg = geoms.at(geomIdx);
|
||||
// int clIdx = bg->sourceIndex();
|
||||
// TechDraw::CenterLine* cl = baseFeat->getCenterLineByIndex(clIdx);
|
||||
std::string tag = bg->getCosmeticTag();
|
||||
TechDraw::CenterLine* cl = baseFeat->getCenterLine(tag);
|
||||
TechDraw::CenterLine* cl = baseFeat->getCenterLineBySelection(edgeNames.front());
|
||||
if (cl == nullptr) {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong Selection"),
|
||||
QObject::tr("No CenterLine in selection."));
|
||||
QObject::tr("Selection is not a CenterLine."));
|
||||
return;
|
||||
}
|
||||
|
||||
Gui::Control().showDialog(new TaskDlgCenterLine(baseFeat,
|
||||
page,
|
||||
edgeNames.front()));
|
||||
edgeNames.front(),
|
||||
true));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -825,25 +819,19 @@ void exec2LineCenterLine(Gui::Command* cmd)
|
||||
if (selectedEdges.size() == 2) {
|
||||
Gui::Control().showDialog(new TaskDlgCenterLine(dvp,
|
||||
page,
|
||||
selectedEdges));
|
||||
selectedEdges,
|
||||
false));
|
||||
} else if (selectedEdges.size() == 1) {
|
||||
std::string edgeName = selectedEdges.front();
|
||||
int geomIdx = DrawUtil::getIndexFromName(edgeName);
|
||||
const std::vector<TechDraw::BaseGeom *> &geoms = dvp->getEdgeGeometry();
|
||||
BaseGeom* bg = geoms.at(geomIdx);
|
||||
// int clIdx = bg->sourceIndex();
|
||||
// TechDraw::CenterLine* cl = dvp->getCenterLineByIndex(clIdx);
|
||||
std::string tag = bg->getCosmeticTag();
|
||||
TechDraw::CenterLine* cl = dvp->getCenterLine(tag);
|
||||
TechDraw::CenterLine* cl = dvp->getCenterLineBySelection(selectedEdges.front());
|
||||
if (cl == nullptr) {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong Selection"),
|
||||
QObject::tr("No CenterLine in selection."));
|
||||
QObject::tr("Selection is not a CenterLine."));
|
||||
return;
|
||||
} else {
|
||||
// Base::Console().Message("CMD::2LineCenter - show edit dialog here\n");
|
||||
Gui::Control().showDialog(new TaskDlgCenterLine(dvp,
|
||||
page,
|
||||
selectedEdges.front()));
|
||||
selectedEdges.front(),
|
||||
true));
|
||||
}
|
||||
} else { //not create, not edit, what is this???
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong Selection"),
|
||||
@@ -942,14 +930,23 @@ void exec2PointCenterLine(Gui::Command* cmd)
|
||||
if (!vertexNames.empty() && (vertexNames.size() == 2)) {
|
||||
Gui::Control().showDialog(new TaskDlgCenterLine(baseFeat,
|
||||
page,
|
||||
vertexNames));
|
||||
vertexNames,
|
||||
false));
|
||||
} else if (!edgeNames.empty() && (edgeNames.size() == 1)) {
|
||||
TechDraw::CenterLine* cl = baseFeat->getCenterLineBySelection(edgeNames.front());
|
||||
if (cl == nullptr) {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong Selection"),
|
||||
QObject::tr("Selection is not a CenterLine."));
|
||||
return;
|
||||
}
|
||||
|
||||
Gui::Control().showDialog(new TaskDlgCenterLine(baseFeat,
|
||||
page,
|
||||
edgeNames.front()));
|
||||
edgeNames.front(),
|
||||
false));
|
||||
} else if (vertexNames.empty()) {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong Selection"),
|
||||
QObject::tr("No CenterLine in selection."));
|
||||
QObject::tr("Need 2 Vertices or 1 CenterLine."));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,15 +74,16 @@ using namespace TechDrawGui;
|
||||
//ctor for edit
|
||||
TaskCenterLine::TaskCenterLine(TechDraw::DrawViewPart* partFeat,
|
||||
TechDraw::DrawPage* page,
|
||||
std::string edgeName) :
|
||||
std::string edgeName,
|
||||
bool editMode) :
|
||||
ui(new Ui_TaskCenterLine),
|
||||
m_partFeat(partFeat),
|
||||
m_basePage(page),
|
||||
m_createMode(false),
|
||||
m_edgeName(edgeName),
|
||||
m_type(0), //0 - Face, 1 - 2 Lines, 2 - 2 points
|
||||
m_mode(0) //0 - vertical, 1 - horizontal, 2 - aligned
|
||||
|
||||
m_mode(0), //0 - vertical, 1 - horizontal, 2 - aligned
|
||||
m_editMode(editMode)
|
||||
{
|
||||
// Base::Console().Message("TCL::TCL() - edit mode\n");
|
||||
ui->setupUi(this);
|
||||
@@ -104,14 +105,16 @@ TaskCenterLine::TaskCenterLine(TechDraw::DrawViewPart* partFeat,
|
||||
//ctor for creation
|
||||
TaskCenterLine::TaskCenterLine(TechDraw::DrawViewPart* partFeat,
|
||||
TechDraw::DrawPage* page,
|
||||
std::vector<std::string> subNames) :
|
||||
std::vector<std::string> subNames,
|
||||
bool editMode) :
|
||||
ui(new Ui_TaskCenterLine),
|
||||
m_partFeat(partFeat),
|
||||
m_basePage(page),
|
||||
m_createMode(true),
|
||||
m_subNames(subNames),
|
||||
m_type(0), //0 - Face, 1 - 2 Lines, 2 - 2 points
|
||||
m_mode(0) //0 - vertical, 1 - horizontal, 2 - aligned
|
||||
m_mode(0), //0 - vertical, 1 - horizontal, 2 - aligned
|
||||
m_editMode(editMode)
|
||||
{
|
||||
// Base::Console().Message("TCL::TCL() - create mode\n");
|
||||
if ( (m_basePage == nullptr) ||
|
||||
@@ -501,10 +504,11 @@ bool TaskCenterLine::reject()
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
TaskDlgCenterLine::TaskDlgCenterLine(TechDraw::DrawViewPart* partFeat,
|
||||
TechDraw::DrawPage* page,
|
||||
std::vector<std::string> subNames)
|
||||
std::vector<std::string> subNames,
|
||||
bool editMode)
|
||||
: TaskDialog()
|
||||
{
|
||||
widget = new TaskCenterLine(partFeat,page,subNames);
|
||||
widget = new TaskCenterLine(partFeat,page,subNames, editMode);
|
||||
taskbox = new Gui::TaskView::TaskBox(Gui::BitmapFactory().pixmap("actions/techdraw-facecenterline"),
|
||||
widget->windowTitle(), true, 0);
|
||||
taskbox->groupLayout()->addWidget(widget);
|
||||
@@ -513,10 +517,11 @@ TaskDlgCenterLine::TaskDlgCenterLine(TechDraw::DrawViewPart* partFeat,
|
||||
|
||||
TaskDlgCenterLine::TaskDlgCenterLine(TechDraw::DrawViewPart* partFeat,
|
||||
TechDraw::DrawPage* page,
|
||||
std::string edgeName)
|
||||
std::string edgeName,
|
||||
bool editMode)
|
||||
: TaskDialog()
|
||||
{
|
||||
widget = new TaskCenterLine(partFeat,page, edgeName);
|
||||
widget = new TaskCenterLine(partFeat,page, edgeName, editMode);
|
||||
taskbox = new Gui::TaskView::TaskBox(Gui::BitmapFactory().pixmap("actions/techdraw-facecenterline"),
|
||||
widget->windowTitle(), true, 0);
|
||||
taskbox->groupLayout()->addWidget(widget);
|
||||
|
||||
@@ -75,10 +75,12 @@ class TaskCenterLine : public QWidget
|
||||
public:
|
||||
TaskCenterLine(TechDraw::DrawViewPart* baseFeat,
|
||||
TechDraw::DrawPage* page,
|
||||
std::vector<std::string> subNames);
|
||||
std::vector<std::string> subNames,
|
||||
bool editMode);
|
||||
TaskCenterLine(TechDraw::DrawViewPart* baseFeat,
|
||||
TechDraw::DrawPage* page,
|
||||
std::string edgeName);
|
||||
std::string edgeName,
|
||||
bool editMode);
|
||||
~TaskCenterLine();
|
||||
|
||||
public Q_SLOTS:
|
||||
@@ -145,6 +147,7 @@ private:
|
||||
int m_clIdx;
|
||||
int m_type;
|
||||
int m_mode;
|
||||
bool m_editMode;
|
||||
};
|
||||
|
||||
class TaskDlgCenterLine : public Gui::TaskView::TaskDialog
|
||||
@@ -154,10 +157,12 @@ class TaskDlgCenterLine : public Gui::TaskView::TaskDialog
|
||||
public:
|
||||
TaskDlgCenterLine(TechDraw::DrawViewPart* baseFeat,
|
||||
TechDraw::DrawPage* page,
|
||||
std::vector<std::string> subNames);
|
||||
std::vector<std::string> subNames,
|
||||
bool editMode);
|
||||
TaskDlgCenterLine(TechDraw::DrawViewPart* baseFeat,
|
||||
TechDraw::DrawPage* page,
|
||||
std::string edgeName);
|
||||
std::string edgeName,
|
||||
bool editMode);
|
||||
~TaskDlgCenterLine();
|
||||
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user