Moved symmetric to general constrain creation mode framework
That makes all of the non-dimensioned constraints
This commit is contained in:
parent
45cb028f34
commit
5ff6895080
|
@ -4943,10 +4943,22 @@ void CmdSketcherConstrainEqual::applyConstraint(std::vector<SelIdPair> &selSeq,
|
||||||
|
|
||||||
// ======================================================================================
|
// ======================================================================================
|
||||||
|
|
||||||
DEF_STD_CMD_A(CmdSketcherConstrainSymmetric);
|
//DEF_STD_CMD_A(CmdSketcherConstrainSymmetric);
|
||||||
|
|
||||||
|
class CmdSketcherConstrainSymmetric : public CmdSketcherConstraint
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CmdSketcherConstrainSymmetric();
|
||||||
|
virtual ~CmdSketcherConstrainSymmetric(){}
|
||||||
|
virtual const char* className() const
|
||||||
|
{ return "CmdSketcherConstrainSymmetric"; }
|
||||||
|
protected:
|
||||||
|
virtual void activated(int iMsg);
|
||||||
|
virtual void applyConstraint(std::vector<SelIdPair> &selSeq, int seqIndex);
|
||||||
|
};
|
||||||
|
|
||||||
CmdSketcherConstrainSymmetric::CmdSketcherConstrainSymmetric()
|
CmdSketcherConstrainSymmetric::CmdSketcherConstrainSymmetric()
|
||||||
:Command("Sketcher_ConstrainSymmetric")
|
:CmdSketcherConstraint("Sketcher_ConstrainSymmetric")
|
||||||
{
|
{
|
||||||
sAppModule = "Sketcher";
|
sAppModule = "Sketcher";
|
||||||
sGroup = QT_TR_NOOP("Sketcher");
|
sGroup = QT_TR_NOOP("Sketcher");
|
||||||
|
@ -4957,6 +4969,15 @@ CmdSketcherConstrainSymmetric::CmdSketcherConstrainSymmetric()
|
||||||
sPixmap = "Constraint_Symmetric";
|
sPixmap = "Constraint_Symmetric";
|
||||||
sAccel = "S";
|
sAccel = "S";
|
||||||
eType = ForEdit;
|
eType = ForEdit;
|
||||||
|
|
||||||
|
allowedSelSequences = {{SelEdge, SelVertexOrRoot},
|
||||||
|
{SelVertex, SelEdge, SelVertexOrRoot},
|
||||||
|
{SelVertexOrRoot, SelEdge, SelVertex},
|
||||||
|
{SelVertex, SelEdgeOrAxis, SelVertex},
|
||||||
|
{SelVertex, SelVertexOrRoot, SelVertex},
|
||||||
|
{SelVertex, SelVertex, SelVertexOrRoot},
|
||||||
|
{SelVertexOrRoot, SelVertex, SelVertex}};
|
||||||
|
constraintCursor = cursor_genericconstraint;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmdSketcherConstrainSymmetric::activated(int iMsg)
|
void CmdSketcherConstrainSymmetric::activated(int iMsg)
|
||||||
|
@ -4967,9 +4988,12 @@ void CmdSketcherConstrainSymmetric::activated(int iMsg)
|
||||||
|
|
||||||
// only one sketch with its subelements are allowed to be selected
|
// only one sketch with its subelements are allowed to be selected
|
||||||
if (selection.size() != 1) {
|
if (selection.size() != 1) {
|
||||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
// QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||||
QObject::tr("Select two points and a symmetry line, two points and a symmetry point "
|
// QObject::tr("Select two points and a symmetry line, two points and a symmetry point "
|
||||||
"or a line and a symmetry point from the sketch."));
|
// "or a line and a symmetry point from the sketch."));
|
||||||
|
ActivateHandler(getActiveGuiDocument(),
|
||||||
|
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||||
|
getSelection().clearSelection();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5109,9 +5133,99 @@ void CmdSketcherConstrainSymmetric::activated(int iMsg)
|
||||||
"or a line and a symmetry point from the sketch."));
|
"or a line and a symmetry point from the sketch."));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CmdSketcherConstrainSymmetric::isActive(void)
|
void CmdSketcherConstrainSymmetric::applyConstraint(std::vector<SelIdPair> &selSeq, int seqIndex)
|
||||||
{
|
{
|
||||||
return isCreateConstraintActive( getActiveGuiDocument() );
|
SketcherGui::ViewProviderSketch* sketchgui = static_cast<SketcherGui::ViewProviderSketch*>(getActiveGuiDocument()->getInEdit());
|
||||||
|
Sketcher::SketchObject* Obj = sketchgui->getSketchObject();
|
||||||
|
QString strError;
|
||||||
|
|
||||||
|
int GeoId1 = Constraint::GeoUndef, GeoId2 = Constraint::GeoUndef, GeoId3 = Constraint::GeoUndef;
|
||||||
|
Sketcher::PointPos PosId1 = Sketcher::none, PosId2 = Sketcher::none, PosId3 = Sketcher::none;
|
||||||
|
|
||||||
|
switch (seqIndex) {
|
||||||
|
case 0: //{{SelEdge, SelVertexOrRoot}
|
||||||
|
{
|
||||||
|
GeoId1 = GeoId2 = selSeq.at(0).GeoId; GeoId3 = selSeq.at(1).GeoId;
|
||||||
|
PosId1 = Sketcher::start; PosId2 = Sketcher::end; PosId3 = selSeq.at(1).PosId;
|
||||||
|
|
||||||
|
if (GeoId1 == GeoId3) {
|
||||||
|
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||||
|
QObject::tr("Cannot add a symmetry constraint between a line and its end points!"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: //{SelVertex, SelEdge, SelVertexOrRoot}
|
||||||
|
case 2: //{SelVertexOrRoot, SelEdge, SelVertex}
|
||||||
|
case 3: //{SelVertex, SelEdgeOrAxis, SelVertex}
|
||||||
|
{
|
||||||
|
GeoId1 = selSeq.at(0).GeoId; GeoId2 = selSeq.at(2).GeoId; GeoId3 = selSeq.at(1).GeoId;
|
||||||
|
PosId1 = selSeq.at(0).PosId; PosId2 = selSeq.at(2).PosId;
|
||||||
|
|
||||||
|
const Part::Geometry *geom = Obj->getGeometry(GeoId3);
|
||||||
|
if (geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()) {
|
||||||
|
if (GeoId1 == GeoId2 && GeoId2 == GeoId3) {
|
||||||
|
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||||
|
QObject::tr("Cannot add a symmetry constraint between a line and its end points!"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// undo command open
|
||||||
|
openCommand("add symmetric constraint");
|
||||||
|
Gui::Command::doCommand(
|
||||||
|
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Symmetric',%d,%d,%d,%d,%d)) ",
|
||||||
|
Obj->getNameInDocument(),GeoId1,PosId1,GeoId2,PosId2,GeoId3);
|
||||||
|
|
||||||
|
// finish the transaction and update
|
||||||
|
commitCommand();
|
||||||
|
|
||||||
|
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
|
||||||
|
bool autoRecompute = hGrp->GetBool("AutoRecompute",false);
|
||||||
|
|
||||||
|
if(autoRecompute)
|
||||||
|
Gui::Command::updateActive();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||||
|
QObject::tr("Select two points and a symmetry line, two points and a symmetry point "
|
||||||
|
"or a line and a symmetry point from the sketch."));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
case 4: //{SelVertex, SelVertexOrRoot, SelVertex}
|
||||||
|
case 5: //{SelVertex, SelVertex, SelVertexOrRoot}
|
||||||
|
case 6: //{SelVertexOrRoot, SelVertex, SelVertex}
|
||||||
|
{
|
||||||
|
GeoId1 = selSeq.at(0).GeoId; GeoId2 = selSeq.at(2).GeoId; GeoId3 = selSeq.at(1).GeoId;
|
||||||
|
PosId1 = selSeq.at(0).PosId; PosId2 = selSeq.at(2).PosId; PosId3 = selSeq.at(1).PosId;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// undo command open
|
||||||
|
openCommand("add symmetric constraint");
|
||||||
|
Gui::Command::doCommand(
|
||||||
|
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Symmetric',%d,%d,%d,%d,%d,%d)) ",
|
||||||
|
Obj->getNameInDocument(),GeoId1,PosId1,GeoId2,PosId2,GeoId3,PosId3);
|
||||||
|
|
||||||
|
// finish the transaction and update
|
||||||
|
commitCommand();
|
||||||
|
|
||||||
|
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
|
||||||
|
bool autoRecompute = hGrp->GetBool("AutoRecompute",false);
|
||||||
|
|
||||||
|
if(autoRecompute)
|
||||||
|
Gui::Command::updateActive();
|
||||||
|
|
||||||
|
|
||||||
|
// clear the selection (convenience)
|
||||||
|
getSelection().clearSelection();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ======================================================================================
|
// ======================================================================================
|
||||||
|
|
Loading…
Reference in New Issue
Block a user