+ 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:
logari81 2012-01-01 20:01:43 +00:00
parent 41f6ead7ee
commit 292f7450eb
8 changed files with 196 additions and 5 deletions

View File

@ -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"

View File

@ -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"*/;

View File

@ -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());
}

View File

@ -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);

View File

@ -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 \

View File

@ -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>

View 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;

View File

@ -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"*/;