Add vertex-edge dimension

This commit is contained in:
WandererFan
2016-08-01 20:03:53 -04:00
committed by wmayer
parent 0805e7c854
commit ff12c020e0
7 changed files with 223 additions and 135 deletions

View File

@@ -114,6 +114,7 @@ bool _checkPartFeature(Gui::Command* cmd);
int _isValidSingleEdge(Gui::Command* cmd);
bool _isValidVertexes(Gui::Command* cmd);
int _isValidEdgeToEdge(Gui::Command* cmd);
bool _isValidVertexToEdge(Gui::Command* cmd);
enum EdgeType{
isInvalid,
@@ -218,6 +219,12 @@ void CmdTechDrawNewDimension::activated(int iMsg)
default:
break;
}
} else if (_isValidVertexToEdge(this)) {
dimType = "Distance";
objs.push_back(objFeat);
objs.push_back(objFeat);
subs.push_back(SubNames[0]);
subs.push_back(SubNames[1]);
} else {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Incorrect Selection"),
QObject::tr("Can't make a Dimension from this selection"));
@@ -512,6 +519,11 @@ void CmdTechDrawNewLengthDimension::activated(int iMsg)
objs.push_back(objFeat);
subs.push_back(SubNames[0]);
subs.push_back(SubNames[1]);
} else if (_isValidVertexToEdge(this)) {
objs.push_back(objFeat);
objs.push_back(objFeat);
subs.push_back(SubNames[0]);
subs.push_back(SubNames[1]);
} else {
std::stringstream edgeMsg;
edgeMsg << "Can't make a length Dimension from this selection (edge type: " << edgeType << ")";
@@ -608,6 +620,11 @@ void CmdTechDrawNewDistanceXDimension::activated(int iMsg)
objs.push_back(objFeat);
subs.push_back(SubNames[0]);
subs.push_back(SubNames[1]);
} else if (_isValidVertexToEdge(this)) {
objs.push_back(objFeat);
objs.push_back(objFeat);
subs.push_back(SubNames[0]);
subs.push_back(SubNames[1]);
} else {
std::stringstream edgeMsg;
edgeMsg << "Can't make a horizontal Dimension from this selection (edge type: " << edgeType << ")";
@@ -705,6 +722,11 @@ void CmdTechDrawNewDistanceYDimension::activated(int iMsg)
objs.push_back(objFeat);
subs.push_back(SubNames[0]);
subs.push_back(SubNames[1]);
} else if (_isValidVertexToEdge(this)) {
objs.push_back(objFeat);
objs.push_back(objFeat);
subs.push_back(SubNames[0]);
subs.push_back(SubNames[1]);
} else {
std::stringstream edgeMsg;
edgeMsg << "Can't make a vertical Dimension from this selection (edge type: " << edgeType << ")";
@@ -1063,3 +1085,39 @@ int _isValidEdgeToEdge(Gui::Command* cmd) {
}
return edgeType;
}
//! verify that the Selection contains valid geometries for a Vertex to Edge Dimension
bool _isValidVertexToEdge(Gui::Command* cmd) {
bool result = false;
std::vector<Gui::SelectionObject> selection = cmd->getSelection().getSelectionEx();
TechDraw::DrawViewPart* objFeat0 = dynamic_cast<TechDraw::DrawViewPart *>(selection[0].getObject());
//TechDraw::DrawViewPart* objFeat1 = dynamic_cast<TechDraw::DrawViewPart *>(selection[1].getObject());
const std::vector<std::string> SubNames = selection[0].getSubNames();
if(SubNames.size() == 2) { //there are 2
int eId,vId;
TechDrawGeometry::BaseGeom* e;
TechDrawGeometry::Vertex* v;
if (TechDraw::DrawUtil::getGeomTypeFromName(SubNames[0]) == "Edge" &&
TechDraw::DrawUtil::getGeomTypeFromName(SubNames[1]) == "Vertex") {
eId = TechDraw::DrawUtil::getIndexFromName(SubNames[0]);
vId = TechDraw::DrawUtil::getIndexFromName(SubNames[1]);
} else if (TechDraw::DrawUtil::getGeomTypeFromName(SubNames[1]) == "Edge" &&
TechDraw::DrawUtil::getGeomTypeFromName(SubNames[0]) == "Vertex") {
eId = TechDraw::DrawUtil::getIndexFromName(SubNames[1]);
vId = TechDraw::DrawUtil::getIndexFromName(SubNames[0]);
} else {
return false;
}
e = objFeat0->getProjEdgeByIndex(eId);
v = objFeat0->getProjVertexByIndex(vId);
if ((!e) || (!v)) {
Base::Console().Error("Logic Error: no geometry for GeoId: %d or GeoId: %d\n",eId,vId);
return false;
}
if (e->geomType != TechDrawGeometry::GENERIC) { //only vertex-line for now.
return false;
}
result = true;
}
return result;
}