Moved point on object to general constraint mode framework
This commit is contained in:
parent
643e61ccf6
commit
a39d2545a6
|
@ -1744,7 +1744,7 @@ bool CmdSketcherConstrainDistance::isActive(void)
|
||||||
// ======================================================================================
|
// ======================================================================================
|
||||||
|
|
||||||
/* XPM */
|
/* XPM */
|
||||||
static char * cursor_createpointonobj[] = {
|
static const char * cursor_createpointonobj[] = {
|
||||||
"32 32 3 1",
|
"32 32 3 1",
|
||||||
" c None",
|
" c None",
|
||||||
". c #FFFFFF",
|
". c #FFFFFF",
|
||||||
|
@ -1782,11 +1782,22 @@ static char * cursor_createpointonobj[] = {
|
||||||
" ++ ",
|
" ++ ",
|
||||||
" ++ "};
|
" ++ "};
|
||||||
|
|
||||||
|
class CmdSketcherConstrainPointOnObject : public CmdSketcherConstraint
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CmdSketcherConstrainPointOnObject();
|
||||||
|
virtual ~CmdSketcherConstrainPointOnObject(){}
|
||||||
|
virtual const char* className() const
|
||||||
|
{ return "CmdSketcherConstrainPointOnObject"; }
|
||||||
|
protected:
|
||||||
|
virtual void activated(int iMsg);
|
||||||
|
virtual void applyConstraint(std::vector<SelIdPair> &selSeq, int seqIndex);
|
||||||
|
};
|
||||||
|
|
||||||
DEF_STD_CMD_A(CmdSketcherConstrainPointOnObject);
|
//DEF_STD_CMD_A(CmdSketcherConstrainPointOnObject);
|
||||||
|
|
||||||
CmdSketcherConstrainPointOnObject::CmdSketcherConstrainPointOnObject()
|
CmdSketcherConstrainPointOnObject::CmdSketcherConstrainPointOnObject()
|
||||||
:Command("Sketcher_ConstrainPointOnObject")
|
:CmdSketcherConstraint("Sketcher_ConstrainPointOnObject")
|
||||||
{
|
{
|
||||||
sAppModule = "Sketcher";
|
sAppModule = "Sketcher";
|
||||||
sGroup = QT_TR_NOOP("Sketcher");
|
sGroup = QT_TR_NOOP("Sketcher");
|
||||||
|
@ -1797,6 +1808,13 @@ CmdSketcherConstrainPointOnObject::CmdSketcherConstrainPointOnObject()
|
||||||
sPixmap = "Constraint_PointOnObject";
|
sPixmap = "Constraint_PointOnObject";
|
||||||
sAccel = "SHIFT+O";
|
sAccel = "SHIFT+O";
|
||||||
eType = ForEdit;
|
eType = ForEdit;
|
||||||
|
|
||||||
|
allowedSelSequences = {{SelVertex, SelEdge}, {SelEdge, SelVertex},
|
||||||
|
{SelRoot, SelEdge}, {SelEdge, SelRoot},
|
||||||
|
{SelVertex, SelHAxis}, {SelHAxis, SelVertex},
|
||||||
|
{SelVertex, SelVAxis}, {SelVAxis, SelVertex}};
|
||||||
|
constraintCursor = cursor_createpointonobj;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmdSketcherConstrainPointOnObject::activated(int iMsg)
|
void CmdSketcherConstrainPointOnObject::activated(int iMsg)
|
||||||
|
@ -1807,8 +1825,11 @@ void CmdSketcherConstrainPointOnObject::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 vertexes from the sketch."));
|
// QObject::tr("Select vertexes from the sketch."));
|
||||||
|
|
||||||
|
ActivateHandler(getActiveGuiDocument(),
|
||||||
|
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1875,9 +1896,73 @@ void CmdSketcherConstrainPointOnObject::activated(int iMsg)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CmdSketcherConstrainPointOnObject::isActive(void)
|
void CmdSketcherConstrainPointOnObject::applyConstraint(std::vector<SelIdPair> &selSeq, int seqIndex)
|
||||||
{
|
{
|
||||||
return isCreateConstraintActive( getActiveGuiDocument() );
|
int GeoIdVt, GeoIdCrv;
|
||||||
|
Sketcher::PointPos PosIdVt, PosIdCrv;
|
||||||
|
|
||||||
|
switch (seqIndex) {
|
||||||
|
case 0: // {SelVertex, SelEdge}
|
||||||
|
case 2: // {SelRoot, SelEdge}
|
||||||
|
case 4: // {SelVertex, SelHAxis}
|
||||||
|
case 6: // {SelVertex, SelVAxis}
|
||||||
|
GeoIdVt = selSeq.at(0).GeoId; GeoIdCrv = selSeq.at(1).GeoId;
|
||||||
|
PosIdVt = selSeq.at(0).PosId; PosIdCrv = selSeq.at(1).PosId;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 1: // {SelEdge, SelVertex}
|
||||||
|
case 3: // {SelEdge, SelRoot}
|
||||||
|
case 5: // {SelHAxis, SelVertex}
|
||||||
|
case 7: // {SelVAxis, SelVertex}
|
||||||
|
GeoIdVt = selSeq.at(1).GeoId; GeoIdCrv = selSeq.at(0).GeoId;
|
||||||
|
PosIdVt = selSeq.at(1).PosId; PosIdCrv = selSeq.at(0).PosId;
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SketcherGui::ViewProviderSketch* sketchgui = static_cast<SketcherGui::ViewProviderSketch*>(getActiveGuiDocument()->getInEdit());
|
||||||
|
Sketcher::SketchObject* Obj = sketchgui->getSketchObject();
|
||||||
|
|
||||||
|
openCommand("add point on object constraint");
|
||||||
|
bool allOK = true;
|
||||||
|
if (checkBothExternal(GeoIdVt, GeoIdCrv)){
|
||||||
|
showNoConstraintBetweenExternal();
|
||||||
|
allOK = false;
|
||||||
|
}
|
||||||
|
if (GeoIdVt == GeoIdCrv)
|
||||||
|
allOK = false; //constraining a point of an element onto the element is a bad idea...
|
||||||
|
|
||||||
|
const Part::Geometry *geom = Obj->getGeometry(GeoIdCrv);
|
||||||
|
|
||||||
|
if( geom && geom->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ){
|
||||||
|
// unsupported until normal to BSpline at any point implemented.
|
||||||
|
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||||
|
QObject::tr("Point on BSpline edge currently unsupported."));
|
||||||
|
allOK = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (allOK) {
|
||||||
|
Gui::Command::doCommand(
|
||||||
|
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('PointOnObject',%d,%d,%d)) ",
|
||||||
|
sketchgui->getObject()->getNameInDocument(), GeoIdVt, PosIdVt, GeoIdCrv);
|
||||||
|
|
||||||
|
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 {
|
||||||
|
abortCommand();
|
||||||
|
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||||
|
QObject::tr("None of the selected points were constrained onto the respective curves, either "
|
||||||
|
"because they are parts of the same element, or because they are both external geometry."));
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ======================================================================================
|
// ======================================================================================
|
||||||
|
|
Loading…
Reference in New Issue
Block a user