Sketcher: New Command to select geometric elements with dependent parameters

This commit is contained in:
Abdullah Tahiri
2018-02-14 19:12:49 +01:00
committed by wmayer
parent 6f7e06fa49
commit ce4503ae40
2 changed files with 105 additions and 9 deletions

View File

@@ -703,6 +703,99 @@ bool CmdSketcherSelectElementsAssociatedWithConstraints::isActive(void)
return isSketcherAcceleratorActive( getActiveGuiDocument(), true );
}
DEF_STD_CMD_A(CmdSketcherSelectFullyConstraintElements);
CmdSketcherSelectFullyConstraintElements::CmdSketcherSelectFullyConstraintElements()
:Command("Sketcher_SelectFullyConstraintElements")
{
sAppModule = "Sketcher";
sGroup = QT_TR_NOOP("Sketcher");
sMenuText = QT_TR_NOOP("Select fully constraint elements");
sToolTipText = QT_TR_NOOP("Select elements that are already fully constraint");
sWhatsThis = "Sketcher_SelectFullyConstraintElements";
sStatusTip = sToolTipText;
sPixmap = "Sketcher_SelectFullyConstraintElements";
sAccel = "";
eType = ForEdit;
}
void CmdSketcherSelectFullyConstraintElements::activated(int iMsg)
{
Q_UNUSED(iMsg);
getSelection().clearSelection();
Gui::Document * doc= getActiveGuiDocument();
SketcherGui::ViewProviderSketch* vp = static_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit());
Sketcher::SketchObject* Obj= vp->getSketchObject();
std::string doc_name = Obj->getDocument()->getName();
std::string obj_name = Obj->getNameInDocument();
std::stringstream ss;
auto geos = Obj->getInternalGeometry();
auto testselectvertex = [&Obj,&ss,&doc_name,&obj_name](int geoId, PointPos pos){
ss.str(std::string());
if(Obj->getSolvedSketch().hasDependentParameters(geoId, pos)) {
int vertex = Obj->getVertexIndexGeoPos(geoId, pos);
if(vertex>-1) {
ss << "Vertex" << vertex + 1;
Gui::Selection().addSelection(doc_name.c_str(), obj_name.c_str(), ss.str().c_str());
}
}
};
auto testselectedge = [&Obj,&ss,&doc_name,&obj_name](int geoId){
ss.str(std::string());
if(Obj->getSolvedSketch().hasDependentParameters(geoId, Sketcher::none)) {
ss << "Edge" << geoId + 1;
Gui::Selection().addSelection(doc_name.c_str(), obj_name.c_str(), ss.str().c_str());
}
};
int geoid = 0;
for(auto geo : geos) {
if(geo->getTypeId() == Part::GeomPoint::getClassTypeId()) {
testselectvertex(geoid, Sketcher::start);
}
else if(geo->getTypeId() == Part::GeomLineSegment::getClassTypeId() ||
geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) {
testselectvertex(geoid, Sketcher::start);
testselectvertex(geoid, Sketcher::end);
testselectedge(geoid);
}
else if(geo->getTypeId() == Part::GeomCircle::getClassTypeId() ||
geo->getTypeId() == Part::GeomEllipse::getClassTypeId() ) {
testselectvertex(geoid, Sketcher::mid);
testselectedge(geoid);
}
else if(geo->getTypeId() == Part::GeomArcOfCircle::getClassTypeId() ||
geo->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId() ||
geo->getTypeId() == Part::GeomArcOfHyperbola::getClassTypeId() ||
geo->getTypeId() == Part::GeomArcOfParabola::getClassTypeId() ) {
testselectvertex(geoid, Sketcher::start);
testselectvertex(geoid, Sketcher::end);
testselectvertex(geoid, Sketcher::mid);
testselectedge(geoid);
}
geoid++;
}
}
bool CmdSketcherSelectFullyConstraintElements::isActive(void)
{
return isSketcherAcceleratorActive( getActiveGuiDocument(), false );
}
DEF_STD_CMD_A(CmdSketcherRestoreInternalAlignmentGeometry);
CmdSketcherRestoreInternalAlignmentGeometry::CmdSketcherRestoreInternalAlignmentGeometry()
@@ -1816,6 +1909,7 @@ void CreateSketcherCommandsConstraintAccel(void)
rcCmdMgr.addCommand(new CmdSketcherSelectRedundantConstraints());
rcCmdMgr.addCommand(new CmdSketcherSelectConflictingConstraints());
rcCmdMgr.addCommand(new CmdSketcherSelectElementsAssociatedWithConstraints());
rcCmdMgr.addCommand(new CmdSketcherSelectFullyConstraintElements());
rcCmdMgr.addCommand(new CmdSketcherRestoreInternalAlignmentGeometry());
rcCmdMgr.addCommand(new CmdSketcherSymmetry());
rcCmdMgr.addCommand(new CmdSketcherCopy());

View File

@@ -265,7 +265,8 @@ inline void SketcherAddWorkbenchTools(T& consaccel);
template <>
inline void SketcherAddWorkbenchTools<Gui::MenuItem>(Gui::MenuItem& consaccel){
consaccel << "Sketcher_CloseShape"
consaccel << "Sketcher_SelectFullyConstraintElements"
<< "Sketcher_CloseShape"
<< "Sketcher_ConnectLines"
<< "Sketcher_SelectConstraints"
<< "Sketcher_SelectOrigin"
@@ -283,14 +284,15 @@ inline void SketcherAddWorkbenchTools<Gui::MenuItem>(Gui::MenuItem& consaccel){
}
template <>
inline void SketcherAddWorkbenchTools<Gui::ToolBarItem>(Gui::ToolBarItem& consaccel){
consaccel << "Sketcher_CloseShape"
<< "Sketcher_ConnectLines"
<< "Sketcher_SelectConstraints"
<< "Sketcher_SelectElementsAssociatedWithConstraints"
<< "Sketcher_RestoreInternalAlignmentGeometry"
<< "Sketcher_Symmetry"
<< "Sketcher_CompCopy"
<< "Sketcher_RectangularArray";
consaccel << "Sketcher_SelectFullyConstraintElements"
<< "Sketcher_CloseShape"
<< "Sketcher_ConnectLines"
<< "Sketcher_SelectConstraints"
<< "Sketcher_SelectElementsAssociatedWithConstraints"
<< "Sketcher_RestoreInternalAlignmentGeometry"
<< "Sketcher_Symmetry"
<< "Sketcher_CompCopy"
<< "Sketcher_RectangularArray";
}
template <typename T>