+ add GUI command for addExternal in the Sketcher
git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5377 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
This commit is contained in:
parent
41f6ead7ee
commit
292f7450eb
|
@ -260,6 +260,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const
|
|||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
<< "Separator"
|
||||
<< "Sketcher_ConstrainLock"
|
||||
|
@ -487,6 +488,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
|
|||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
<< "Separator"
|
||||
<< "Sketcher_ConstrainLock"
|
||||
|
|
|
@ -132,6 +132,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const
|
|||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
|
@ -198,6 +199,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
|
|||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
|
|
|
@ -39,6 +39,10 @@
|
|||
#include "ViewProviderSketch.h"
|
||||
#include "DrawSketchHandler.h"
|
||||
|
||||
#include <Gui/View3DInventor.h>
|
||||
#include <Gui/View3DInventorViewer.h>
|
||||
#include <Gui/SoFCUnifiedSelection.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace SketcherGui;
|
||||
|
||||
|
@ -1530,6 +1534,166 @@ bool CmdSketcherTrimming::isActive(void)
|
|||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
// ======================================================================================
|
||||
|
||||
namespace SketcherGui {
|
||||
class ExternalSelection : public Gui::SelectionFilterGate
|
||||
{
|
||||
App::DocumentObject* object;
|
||||
public:
|
||||
ExternalSelection(App::DocumentObject* obj)
|
||||
: Gui::SelectionFilterGate((Gui::SelectionFilter*)0), object(obj)
|
||||
{}
|
||||
|
||||
bool allow(App::Document *pDoc, App::DocumentObject *pObj, const char *sSubName)
|
||||
{
|
||||
Sketcher::SketchObject *sketch = static_cast<Sketcher::SketchObject*>(object);
|
||||
App::DocumentObject *support = sketch->Support.getValue();
|
||||
// for the moment we allow external constraints only from the support
|
||||
if (pObj != support)
|
||||
return false;
|
||||
if (!sSubName || sSubName[0] == '\0')
|
||||
return false;
|
||||
std::string element(sSubName);
|
||||
// for the moment we allow only edges
|
||||
if (element.substr(0,4) == "Edge") {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
/* XPM */
|
||||
static const char *cursor_external[]={
|
||||
"32 32 3 1",
|
||||
"+ c white",
|
||||
"* c red",
|
||||
". c None",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"................................",
|
||||
"+++++...+++++...................",
|
||||
"................................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+....***************......",
|
||||
".........**...............***...",
|
||||
"........**................***...",
|
||||
".......**................**.*...",
|
||||
"......*.................*...*...",
|
||||
"....**................**....*...",
|
||||
"...**................**.....*...",
|
||||
"..**................**......*...",
|
||||
"..******************........*...",
|
||||
"..*................*........*...",
|
||||
"..*................*........*...",
|
||||
"..*................*........*...",
|
||||
"..*................*............",
|
||||
"..*................*............",
|
||||
"..*................*............",
|
||||
"..*................*............",
|
||||
"..*................*............",
|
||||
"..*................*............",
|
||||
"................................",
|
||||
"................................"};
|
||||
|
||||
class DrawSketchHandlerExternal: public DrawSketchHandler
|
||||
{
|
||||
public:
|
||||
DrawSketchHandlerExternal() {}
|
||||
virtual ~DrawSketchHandlerExternal()
|
||||
{
|
||||
Gui::Selection().rmvSelectionGate();
|
||||
}
|
||||
|
||||
virtual void activated(ViewProviderSketch *sketchgui)
|
||||
{
|
||||
Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView();
|
||||
Gui::View3DInventorViewer *viewer;
|
||||
viewer = static_cast<Gui::View3DInventor *>(mdi)->getViewer();
|
||||
|
||||
SoNode* root = viewer->getSceneGraph();
|
||||
static_cast<Gui::SoFCUnifiedSelection*>(root)->selectionRole.setValue(TRUE);
|
||||
|
||||
Gui::Selection().clearSelection();
|
||||
Gui::Selection().rmvSelectionGate();
|
||||
Gui::Selection().addSelectionGate(new ExternalSelection(sketchgui->getObject()));
|
||||
setCursor(QPixmap(cursor_external),7,7);
|
||||
}
|
||||
|
||||
virtual void mouseMove(Base::Vector2D onSketchPos)
|
||||
{
|
||||
applyCursor();
|
||||
}
|
||||
|
||||
virtual bool pressButton(Base::Vector2D onSketchPos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool releaseButton(Base::Vector2D onSketchPos)
|
||||
{
|
||||
sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool onSelectionChanged(const Gui::SelectionChanges& msg)
|
||||
{
|
||||
if (msg.Type == Gui::SelectionChanges::AddSelection) {
|
||||
std::string subName(msg.pSubName);
|
||||
if (subName.size() > 4 && subName.substr(0,4) == "Edge") {
|
||||
try {
|
||||
Gui::Command::openCommand("Add external geometry");
|
||||
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.addExternal(\"%s\",\"%s\")",
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
msg.pObjectName, msg.pSubName);
|
||||
Gui::Command::commitCommand();
|
||||
Gui::Command::updateActive();
|
||||
Gui::Selection().clearSelection();
|
||||
sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
Base::Console().Error("%s\n", e.what());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherExternal);
|
||||
|
||||
CmdSketcherExternal::CmdSketcherExternal()
|
||||
: Command("Sketcher_External")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("External geometry");
|
||||
sToolTipText = QT_TR_NOOP("Create an edge linked to an external geometry");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_External";
|
||||
sAccel = "E";
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherExternal::activated(int iMsg)
|
||||
{
|
||||
ActivateHandler(getActiveGuiDocument(), new DrawSketchHandlerExternal());
|
||||
}
|
||||
|
||||
bool CmdSketcherExternal::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
|
||||
void CreateSketcherCommandsCreateGeo(void)
|
||||
{
|
||||
|
@ -1545,4 +1709,5 @@ void CreateSketcherCommandsCreateGeo(void)
|
|||
//rcCmdMgr.addCommand(new CmdSketcherCreateText());
|
||||
//rcCmdMgr.addCommand(new CmdSketcherCreateDraftLine());
|
||||
rcCmdMgr.addCommand(new CmdSketcherTrimming());
|
||||
rcCmdMgr.addCommand(new CmdSketcherExternal());
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include <Base/Tools2D.h>
|
||||
#include <Mod/Sketcher/App/Constraint.h>
|
||||
#include <Gui/Selection.h>
|
||||
|
||||
class QPixmap;
|
||||
|
||||
|
@ -70,6 +71,7 @@ public:
|
|||
virtual void mouseMove(Base::Vector2D onSketchPos)=0;
|
||||
virtual bool pressButton(Base::Vector2D onSketchPos)=0;
|
||||
virtual bool releaseButton(Base::Vector2D onSketchPos)=0;
|
||||
virtual bool onSelectionChanged(const Gui::SelectionChanges& msg) { return false; };
|
||||
|
||||
virtual void quit(void);
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
noinst_LTLIBRARIES=libResources.la
|
||||
|
||||
BUILT_SOURCES=\
|
||||
qrc_Sketcher.cpp
|
||||
qrc_Sketcher.cpp
|
||||
|
||||
nodist_libResources_la_SOURCES=\
|
||||
qrc_Sketcher.cpp
|
||||
qrc_Sketcher.cpp
|
||||
|
||||
EXTRA_DIST = \
|
||||
icons/Constraint_PointOnObject.svg \
|
||||
|
@ -70,6 +70,7 @@ icons/Constraint_PointOnObject.svg \
|
|||
icons/Sketcher_CreateText.svg \
|
||||
icons/Sketcher_DraftLine.svg \
|
||||
icons/Sketcher_Trimming.svg \
|
||||
icons/Sketcher_External.svg \
|
||||
icons/Sketcher_LeaveSketch.svg \
|
||||
icons/Sketcher_NewSketch.svg \
|
||||
icons/Sketcher_Sketch.svg \
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
<file>icons/Sketcher_CreateText.svg</file>
|
||||
<file>icons/Sketcher_DraftLine.svg</file>
|
||||
<file>icons/Sketcher_Trimming.svg</file>
|
||||
<file>icons/Sketcher_External.svg</file>
|
||||
<file>icons/Sketcher_LeaveSketch.svg</file>
|
||||
<file>icons/Sketcher_NewSketch.svg</file>
|
||||
<file>icons/Sketcher_Sketch.svg</file>
|
||||
|
|
|
@ -251,9 +251,18 @@ void ViewProviderSketch::purgeHandler(void)
|
|||
{
|
||||
assert(edit);
|
||||
assert(edit->sketchHandler != 0);
|
||||
edit->sketchHandler->unsetCursor();
|
||||
delete(edit->sketchHandler);
|
||||
edit->sketchHandler = 0;
|
||||
Mode = STATUS_NONE;
|
||||
|
||||
// ensure that we are in sketch only selection mode
|
||||
Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView();
|
||||
Gui::View3DInventorViewer *viewer;
|
||||
viewer = static_cast<Gui::View3DInventor *>(mdi)->getViewer();
|
||||
|
||||
SoNode* root = viewer->getSceneGraph();
|
||||
static_cast<Gui::SoFCUnifiedSelection*>(root)->selectionRole.setValue(FALSE);
|
||||
}
|
||||
|
||||
// **********************************************************************************
|
||||
|
@ -609,6 +618,7 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe
|
|||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
|
@ -1043,6 +1053,13 @@ void ViewProviderSketch::onSelectionChanged(const Gui::SelectionChanges& msg)
|
|||
{
|
||||
// are we in edit?
|
||||
if (edit) {
|
||||
bool handled=false;
|
||||
if (Mode == STATUS_SKETCH_UseHandler) {
|
||||
handled = edit->sketchHandler->onSelectionChanged(msg);
|
||||
}
|
||||
if (handled)
|
||||
return;
|
||||
|
||||
std::string temp;
|
||||
if (msg.Type == Gui::SelectionChanges::ClrSelection) {
|
||||
// if something selected in this object?
|
||||
|
@ -2894,10 +2911,9 @@ void ViewProviderSketch::unsetEdit(int ModNum)
|
|||
edit->EditRoot->removeAllChildren();
|
||||
pcRoot->removeChild(edit->EditRoot);
|
||||
|
||||
if (edit->sketchHandler) {
|
||||
edit->sketchHandler->unsetCursor();
|
||||
if (edit->sketchHandler)
|
||||
purgeHandler();
|
||||
}
|
||||
|
||||
delete edit;
|
||||
edit = 0;
|
||||
|
||||
|
|
|
@ -68,6 +68,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const
|
|||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
|
@ -119,6 +120,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
|
|||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
|
|
Loading…
Reference in New Issue
Block a user