Added more regular polygons to the sketcher gui
This commit is contained in:
parent
4528b31d6e
commit
7fadaa0a55
|
@ -22,6 +22,7 @@ link_directories(${OCC_LIBRARY_DIR})
|
|||
set(PartDesignGui_LIBS
|
||||
PartDesign
|
||||
PartGui
|
||||
SketcherGui
|
||||
FreeCADGui
|
||||
)
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#endif
|
||||
|
||||
#include "Workbench.h"
|
||||
#include <Mod/Sketcher/Gui/Workbench.h>
|
||||
#include <Gui/Application.h>
|
||||
#include <Gui/Command.h>
|
||||
#include <Gui/MenuManager.h>
|
||||
|
@ -166,53 +167,17 @@ Gui::MenuItem* Workbench::setupMenuBar() const
|
|||
|
||||
Gui::MenuItem* geom = new Gui::MenuItem();
|
||||
geom->setCommand("Sketcher geometries");
|
||||
*geom << "Sketcher_CreatePoint"
|
||||
<< "Sketcher_CreateArc"
|
||||
<< "Sketcher_Create3PointArc"
|
||||
<< "Sketcher_CreateCircle"
|
||||
<< "Sketcher_Create3PointCircle"
|
||||
<< "Sketcher_CreateLine"
|
||||
<< "Sketcher_CreatePolyline"
|
||||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateSlot"
|
||||
<< "Separator"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
SketcherGui::addSketcherWorkbenchGeometries( *geom );
|
||||
|
||||
Gui::MenuItem* cons = new Gui::MenuItem();
|
||||
cons->setCommand("Sketcher constraints");
|
||||
*cons << "Sketcher_ConstrainCoincident"
|
||||
<< "Sketcher_ConstrainPointOnObject"
|
||||
<< "Sketcher_ConstrainVertical"
|
||||
<< "Sketcher_ConstrainHorizontal"
|
||||
<< "Sketcher_ConstrainParallel"
|
||||
<< "Sketcher_ConstrainPerpendicular"
|
||||
<< "Sketcher_ConstrainTangent"
|
||||
<< "Sketcher_ConstrainEqual"
|
||||
<< "Sketcher_ConstrainSymmetric"
|
||||
<< "Separator"
|
||||
<< "Sketcher_ConstrainLock"
|
||||
<< "Sketcher_ConstrainDistanceX"
|
||||
<< "Sketcher_ConstrainDistanceY"
|
||||
<< "Sketcher_ConstrainDistance"
|
||||
<< "Sketcher_ConstrainRadius"
|
||||
<< "Sketcher_ConstrainAngle";
|
||||
SketcherGui::addSketcherWorkbenchConstraints( *cons );
|
||||
|
||||
Gui::MenuItem* part = new Gui::MenuItem;
|
||||
root->insertItem(item, part);
|
||||
part->setCommand("&Part Design");
|
||||
*part << "Sketcher_NewSketch"
|
||||
<< "Sketcher_EditSketch"
|
||||
<< "Sketcher_LeaveSketch"
|
||||
<< "Sketcher_ViewSketch"
|
||||
<< "Sketcher_MapSketch"
|
||||
<< "Sketcher_ReorientSketch"
|
||||
<< "Sketcher_ValidateSketch"
|
||||
<< geom
|
||||
SketcherGui::addSketcherWorkbenchSketchActions( *part );
|
||||
*part << geom
|
||||
<< cons
|
||||
<< "Separator"
|
||||
<< "PartDesign_Pad"
|
||||
|
@ -243,11 +208,8 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
|
|||
Gui::ToolBarItem* root = StdWorkbench::setupToolBars();
|
||||
Gui::ToolBarItem* part = new Gui::ToolBarItem(root);
|
||||
part->setCommand("Part Design");
|
||||
*part << "Sketcher_NewSketch"
|
||||
<< "Sketcher_ViewSketch"
|
||||
<< "Sketcher_MapSketch"
|
||||
<< "Sketcher_LeaveSketch"
|
||||
<< "Separator"
|
||||
SketcherGui::addSketcherWorkbenchSketchActions( *part );
|
||||
*part << "Separator"
|
||||
<< "PartDesign_Pad"
|
||||
<< "PartDesign_Pocket"
|
||||
<< "PartDesign_Revolution"
|
||||
|
@ -263,41 +225,13 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
|
|||
|
||||
Gui::ToolBarItem* geom = new Gui::ToolBarItem(root);
|
||||
geom->setCommand("Sketcher geometries");
|
||||
*geom << "Sketcher_CreatePoint"
|
||||
<< "Sketcher_CompCreateArc"
|
||||
<< "Sketcher_CompCreateCircle"
|
||||
<< "Sketcher_CreateLine"
|
||||
<< "Sketcher_CreatePolyline"
|
||||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateSlot"
|
||||
<< "Separator"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
SketcherGui::addSketcherWorkbenchGeometries( *geom );
|
||||
|
||||
Gui::ToolBarItem* cons = new Gui::ToolBarItem(root);
|
||||
cons->setCommand("Sketcher constraints");
|
||||
*cons << "Sketcher_ConstrainCoincident"
|
||||
<< "Sketcher_ConstrainPointOnObject"
|
||||
<< "Sketcher_ConstrainVertical"
|
||||
<< "Sketcher_ConstrainHorizontal"
|
||||
<< "Sketcher_ConstrainParallel"
|
||||
<< "Sketcher_ConstrainPerpendicular"
|
||||
<< "Sketcher_ConstrainTangent"
|
||||
<< "Sketcher_ConstrainEqual"
|
||||
<< "Sketcher_ConstrainSymmetric"
|
||||
<< "Separator"
|
||||
<< "Sketcher_ConstrainLock"
|
||||
<< "Sketcher_ConstrainDistanceX"
|
||||
<< "Sketcher_ConstrainDistanceY"
|
||||
<< "Sketcher_ConstrainDistance"
|
||||
<< "Sketcher_ConstrainRadius"
|
||||
<< "Sketcher_ConstrainAngle";
|
||||
SketcherGui::addSketcherWorkbenchConstraints( *cons );
|
||||
|
||||
return root;
|
||||
return root;
|
||||
}
|
||||
|
||||
Gui::ToolBarItem* Workbench::setupCommandBars() const
|
||||
|
|
|
@ -3097,6 +3097,475 @@ bool CmdSketcherCreateSlot::isActive(void)
|
|||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
|
||||
/* Create Regular Polygon ==============================================*/
|
||||
|
||||
/* XPM */
|
||||
static const char *cursor_createregularpolygon[]={
|
||||
"32 32 3 1",
|
||||
"+ c white",
|
||||
"# c red",
|
||||
". c None",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"................................",
|
||||
"+++++...+++++...................",
|
||||
"................................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+................###......",
|
||||
"......+.......##########.##.....",
|
||||
".............#.........###......",
|
||||
"............#.............#.....",
|
||||
"...........#...............#....",
|
||||
"...........#...............#....",
|
||||
"..........#.................#...",
|
||||
".........#...................#..",
|
||||
".........#...................#..",
|
||||
"........#.........###.........#.",
|
||||
".......#..........#.#..........#",
|
||||
"........#.........###.........#.",
|
||||
".........#...................#..",
|
||||
".........#...................#..",
|
||||
"..........#.................#...",
|
||||
"...........#...............#....",
|
||||
"...........#...............#....",
|
||||
"............#.............#.....",
|
||||
".............#...........#......",
|
||||
"..............###########.......",
|
||||
"................................"};
|
||||
|
||||
class DrawSketchHandlerRegularPolygon: public DrawSketchHandler
|
||||
{
|
||||
public:
|
||||
DrawSketchHandlerRegularPolygon( size_t nof_corners ):
|
||||
Corners( nof_corners ),
|
||||
AngleOfSeparation( 2.0*M_PI/static_cast<double>(Corners) ),
|
||||
cos_v( cos( AngleOfSeparation ) ),
|
||||
sin_v( sin( AngleOfSeparation ) ),
|
||||
Mode(STATUS_SEEK_First),
|
||||
EditCurve(Corners+1)
|
||||
{
|
||||
}
|
||||
virtual ~DrawSketchHandlerRegularPolygon(){}
|
||||
/// mode table
|
||||
enum SelectMode {
|
||||
STATUS_SEEK_First, /**< enum value ----. */
|
||||
STATUS_SEEK_Second, /**< enum value ----. */
|
||||
STATUS_End
|
||||
};
|
||||
|
||||
virtual void activated(ViewProviderSketch *sketchgui)
|
||||
{
|
||||
setCursor(QPixmap(cursor_createregularpolygon),7,7);
|
||||
}
|
||||
|
||||
virtual void mouseMove(Base::Vector2D onSketchPos)
|
||||
{
|
||||
|
||||
if (Mode==STATUS_SEEK_First) {
|
||||
setPositionText(onSketchPos);
|
||||
if (seekAutoConstraint(sugConstr1, onSketchPos, Base::Vector2D(0.f,0.f))) {
|
||||
renderSuggestConstraintsCursor(sugConstr1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (Mode==STATUS_SEEK_Second) {
|
||||
EditCurve[0]= Base::Vector2D(onSketchPos.fX, onSketchPos.fY);
|
||||
EditCurve[Corners]= Base::Vector2D(onSketchPos.fX, onSketchPos.fY);
|
||||
|
||||
Base::Vector2D dV = onSketchPos - StartPos;
|
||||
double rx = dV.fX;
|
||||
double ry = dV.fY;
|
||||
for (int i=1; i < static_cast<int>(Corners); i++) {
|
||||
const double old_rx = rx;
|
||||
rx = cos_v * rx - sin_v * ry;
|
||||
ry = cos_v * ry + sin_v * old_rx;
|
||||
EditCurve[i] = Base::Vector2D(StartPos.fX + rx, StartPos.fY + ry);
|
||||
}
|
||||
|
||||
// Display radius for user
|
||||
const float radius = dV.Length();
|
||||
const float angle = ( 180.0 / M_PI ) * atan2( dV.fY, dV.fX );
|
||||
|
||||
SbString text;
|
||||
text.sprintf(" (%.1fR %.1fdeg)", radius, angle );
|
||||
setPositionText(onSketchPos, text);
|
||||
|
||||
sketchgui->drawEdit(EditCurve);
|
||||
if (seekAutoConstraint(sugConstr2, onSketchPos, dV)) {
|
||||
renderSuggestConstraintsCursor(sugConstr2);
|
||||
return;
|
||||
}
|
||||
}
|
||||
applyCursor();
|
||||
}
|
||||
|
||||
virtual bool pressButton(Base::Vector2D onSketchPos)
|
||||
{
|
||||
if (Mode==STATUS_SEEK_First){
|
||||
StartPos = onSketchPos;
|
||||
Mode = STATUS_SEEK_Second;
|
||||
}
|
||||
else {
|
||||
Mode = STATUS_End;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool releaseButton(Base::Vector2D onSketchPos)
|
||||
{
|
||||
static const char* AddLineCommand =
|
||||
"App.ActiveDocument.%s.addGeometry(Part.Line(App.Vector(%f,%f,0),App.Vector(%f,%f,0)))";
|
||||
static const char* AddConstraintCoincideCommand =
|
||||
"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%i,2,%i,1))";
|
||||
static const char* AddConstraintEqualCommand =
|
||||
"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Equal',%i,%i)) ";
|
||||
static const char* AddConstraintAngleCommand =
|
||||
"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Angle',%i,1,%i,2,%f))";
|
||||
|
||||
if (Mode==STATUS_End){
|
||||
unsetCursor();
|
||||
resetPositionText();
|
||||
Gui::Command::openCommand("Add hexagon");
|
||||
int firstCurve = getHighestCurveIndex() + 1;
|
||||
// add the geometry to the sketch
|
||||
|
||||
try {
|
||||
for( int i = 0; i < static_cast<int>(Corners); i++ ){
|
||||
Gui::Command::doCommand(Gui::Command::Doc, AddLineCommand,
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
EditCurve[i].fX,EditCurve[i].fY,EditCurve[i+1].fX,EditCurve[i+1].fY);
|
||||
}
|
||||
// make line ends coincide and all lines equal length
|
||||
Gui::Command::doCommand(Gui::Command::Doc, AddConstraintCoincideCommand,
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
firstCurve+(Corners-1),firstCurve);
|
||||
for( int i = 1; i < static_cast<int>(Corners); i++ ){
|
||||
Gui::Command::doCommand(Gui::Command::Doc, AddConstraintCoincideCommand,
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
firstCurve+(i-1),firstCurve+i);
|
||||
Gui::Command::doCommand(Gui::Command::Doc,AddConstraintEqualCommand,
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
firstCurve,firstCurve+i);
|
||||
}
|
||||
double angle_constraint_diff = (1. * Corners)/( 1. * Corners - 3.0 );
|
||||
for( int i = 0; i < (Corners-3); i++ ){
|
||||
int angle_constraint_index = angle_constraint_diff * i;
|
||||
Gui::Command::doCommand(Gui::Command::Doc,AddConstraintAngleCommand,
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
firstCurve + ( angle_constraint_index + 1 ),
|
||||
firstCurve + ( angle_constraint_index ),
|
||||
( M_PI - AngleOfSeparation ) );
|
||||
}
|
||||
|
||||
Gui::Command::commitCommand();
|
||||
Gui::Command::updateActive();
|
||||
|
||||
// add auto constraints at the start of the first side
|
||||
if (sugConstr1.size() > 0) {
|
||||
createAutoConstraints(sugConstr1, getHighestCurveIndex() - 3 , Sketcher::mid);
|
||||
sugConstr1.clear();
|
||||
}
|
||||
|
||||
// add auto constraints at the end of the second side
|
||||
if (sugConstr2.size() > 0) {
|
||||
createAutoConstraints(sugConstr2, getHighestCurveIndex() - 2, Sketcher::end);
|
||||
sugConstr2.clear();
|
||||
}
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
Base::Console().Error("%s\n", e.what());
|
||||
Gui::Command::abortCommand();
|
||||
Gui::Command::updateActive();
|
||||
}
|
||||
|
||||
EditCurve.clear();
|
||||
sketchgui->drawEdit(EditCurve);
|
||||
sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
|
||||
}
|
||||
return true;
|
||||
}
|
||||
protected:
|
||||
const size_t Corners;
|
||||
const double AngleOfSeparation;
|
||||
const double cos_v, sin_v;
|
||||
SelectMode Mode;
|
||||
Base::Vector2D StartPos;
|
||||
std::vector<Base::Vector2D> EditCurve;
|
||||
std::vector<AutoConstraint> sugConstr1, sugConstr2;
|
||||
};
|
||||
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherCreateTriangle);
|
||||
CmdSketcherCreateTriangle::CmdSketcherCreateTriangle()
|
||||
: Command("Sketcher_CreateTriangle")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create equilateral triangle");
|
||||
sToolTipText = QT_TR_NOOP("Create an equilateral triangle in the sketch");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_CreateTriangle";
|
||||
sAccel = "";
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherCreateTriangle::activated(int iMsg)
|
||||
{
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(3) );
|
||||
}
|
||||
|
||||
bool CmdSketcherCreateTriangle::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherCreateSquare);
|
||||
CmdSketcherCreateSquare::CmdSketcherCreateSquare()
|
||||
: Command("Sketcher_CreateSquare")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create square");
|
||||
sToolTipText = QT_TR_NOOP("Create a square in the sketch");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_CreateSquare";
|
||||
sAccel = "";
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherCreateSquare::activated(int iMsg)
|
||||
{
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(4) );
|
||||
}
|
||||
|
||||
bool CmdSketcherCreateSquare::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherCreatePentagon);
|
||||
CmdSketcherCreatePentagon::CmdSketcherCreatePentagon()
|
||||
: Command("Sketcher_CreatePentagon")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create pentagon");
|
||||
sToolTipText = QT_TR_NOOP("Create a pentagon in the sketch");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_CreatePentagon";
|
||||
sAccel = "";
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherCreatePentagon::activated(int iMsg)
|
||||
{
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(5) );
|
||||
}
|
||||
|
||||
bool CmdSketcherCreatePentagon::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherCreateHexagon);
|
||||
CmdSketcherCreateHexagon::CmdSketcherCreateHexagon()
|
||||
: Command("Sketcher_CreateHexagon")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create hexagon");
|
||||
sToolTipText = QT_TR_NOOP("Create a hexagon in the sketch");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_CreateHexagon";
|
||||
sAccel = "";
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherCreateHexagon::activated(int iMsg)
|
||||
{
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(6) );
|
||||
}
|
||||
|
||||
bool CmdSketcherCreateHexagon::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherCreateHeptagon);
|
||||
CmdSketcherCreateHeptagon::CmdSketcherCreateHeptagon()
|
||||
: Command("Sketcher_CreateHeptagon")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create heptagon");
|
||||
sToolTipText = QT_TR_NOOP("Create a heptagon in the sketch");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_CreateHeptagon";
|
||||
sAccel = "";
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherCreateHeptagon::activated(int iMsg)
|
||||
{
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(7) );
|
||||
}
|
||||
|
||||
bool CmdSketcherCreateHeptagon::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherCreateOctagon);
|
||||
CmdSketcherCreateOctagon::CmdSketcherCreateOctagon()
|
||||
: Command("Sketcher_CreateOctagon")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create octagon");
|
||||
sToolTipText = QT_TR_NOOP("Create an octagon in the sketch");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_CreateOctagon";
|
||||
sAccel = "";
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherCreateOctagon::activated(int iMsg)
|
||||
{
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(8) );
|
||||
}
|
||||
|
||||
bool CmdSketcherCreateOctagon::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
|
||||
DEF_STD_CMD_ACL(CmdSketcherCompCreateRegularPolygon);
|
||||
|
||||
CmdSketcherCompCreateRegularPolygon::CmdSketcherCompCreateRegularPolygon()
|
||||
: Command("Sketcher_CompCreateRegularPolygon")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create regular polygon");
|
||||
sToolTipText = QT_TR_NOOP("Create an regular polygon in the sketcher");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherCompCreateRegularPolygon::activated(int iMsg)
|
||||
{
|
||||
switch( iMsg ){
|
||||
case 0:
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(3)); break;
|
||||
case 1:
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(4)); break;
|
||||
case 2:
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(5)); break;
|
||||
case 3:
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(6)); break;
|
||||
case 4:
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(7)); break;
|
||||
case 5:
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerRegularPolygon(8)); break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
// Since the default icon is reset when enabing/disabling the command we have
|
||||
// to explicitly set the icon of the used command.
|
||||
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
|
||||
QList<QAction*> a = pcAction->actions();
|
||||
|
||||
assert(iMsg < a.size());
|
||||
pcAction->setIcon(a[iMsg]->icon());
|
||||
}
|
||||
|
||||
Gui::Action * CmdSketcherCompCreateRegularPolygon::createAction(void)
|
||||
{
|
||||
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
|
||||
pcAction->setDropDownMenu(true);
|
||||
applyCommandData(pcAction);
|
||||
|
||||
QAction* triangle = pcAction->addAction(QString());
|
||||
triangle->setIcon(Gui::BitmapFactory().pixmapFromSvg("Sketcher_CreateTriangle", QSize(24,24)));
|
||||
QAction* square = pcAction->addAction(QString());
|
||||
square->setIcon(Gui::BitmapFactory().pixmapFromSvg("Sketcher_CreateSquare", QSize(24,24)));
|
||||
QAction* pentagon = pcAction->addAction(QString());
|
||||
pentagon->setIcon(Gui::BitmapFactory().pixmapFromSvg("Sketcher_CreatePentagon", QSize(24,24)));
|
||||
QAction* hexagon = pcAction->addAction(QString());
|
||||
hexagon->setIcon(Gui::BitmapFactory().pixmapFromSvg("Sketcher_CreateHexagon", QSize(24,24)));
|
||||
QAction* heptagon = pcAction->addAction(QString());
|
||||
heptagon->setIcon(Gui::BitmapFactory().pixmapFromSvg("Sketcher_CreateHeptagon", QSize(24,24)));
|
||||
QAction* octagon = pcAction->addAction(QString());
|
||||
octagon->setIcon(Gui::BitmapFactory().pixmapFromSvg("Sketcher_CreateOctagon", QSize(24,24)));
|
||||
|
||||
_pcAction = pcAction;
|
||||
languageChange();
|
||||
|
||||
pcAction->setIcon(hexagon->icon());
|
||||
int defaultId = 3;
|
||||
pcAction->setProperty("defaultAction", QVariant(defaultId));
|
||||
|
||||
return pcAction;
|
||||
}
|
||||
|
||||
void CmdSketcherCompCreateRegularPolygon::languageChange()
|
||||
{
|
||||
Command::languageChange();
|
||||
|
||||
if (!_pcAction)
|
||||
return;
|
||||
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
|
||||
QList<QAction*> a = pcAction->actions();
|
||||
|
||||
QAction* triangle = a[0];
|
||||
triangle->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon","Triangle"));
|
||||
triangle->setToolTip(QApplication::translate("Sketcher_CreateTriangle","Create an equilateral triangle by its center and by one corner"));
|
||||
triangle->setStatusTip(QApplication::translate("Sketcher_CreateTriangle","Create an equilateral triangle by its center and by one corner"));
|
||||
QAction* square = a[1];
|
||||
square->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon","Square"));
|
||||
square->setToolTip(QApplication::translate("Sketcher_CreateSquare","Create a square by its center and by one corner"));
|
||||
square->setStatusTip(QApplication::translate("Sketcher_CreateSquare","Create a square by its center and by one corner"));
|
||||
QAction* pentagon = a[2];
|
||||
pentagon->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon","Pentagon"));
|
||||
pentagon->setToolTip(QApplication::translate("Sketcher_CreatePentagon","Create a pentagon by its center and by one corner"));
|
||||
pentagon->setStatusTip(QApplication::translate("Sketcher_CreatePentagon","Create a pentagon by its center and by one corner"));
|
||||
QAction* hexagon = a[3];
|
||||
hexagon->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon","Hexagon"));
|
||||
hexagon->setToolTip(QApplication::translate("Sketcher_CreateHexagon","Create a hexagon by its center and by one corner"));
|
||||
hexagon->setStatusTip(QApplication::translate("Sketcher_CreateHexagon","Create a hexagon by its center and by one corner"));
|
||||
QAction* heptagon = a[4];
|
||||
heptagon->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon","Heptagon"));
|
||||
heptagon->setToolTip(QApplication::translate("Sketcher_CreateHeptagon","Create a heptagon by its center and by one corner"));
|
||||
heptagon->setStatusTip(QApplication::translate("Sketcher_CreateHeptagon","Create a heptagon by its center and by one corner"));
|
||||
QAction* octagon = a[5];
|
||||
octagon->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon","Octagon"));
|
||||
octagon->setToolTip(QApplication::translate("Sketcher_CreateOctagon","Create an octagon by its center and by one corner"));
|
||||
octagon->setStatusTip(QApplication::translate("Sketcher_CreateOctagon","Create an octagon by its center and by one corner"));
|
||||
}
|
||||
|
||||
bool CmdSketcherCompCreateRegularPolygon::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CreateSketcherCommandsCreateGeo(void)
|
||||
{
|
||||
Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager();
|
||||
|
@ -3111,6 +3580,13 @@ void CreateSketcherCommandsCreateGeo(void)
|
|||
rcCmdMgr.addCommand(new CmdSketcherCreateLine());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreatePolyline());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateRectangle());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCompCreateRegularPolygon());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateTriangle());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateSquare());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreatePentagon());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateHexagon());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateHeptagon());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateOctagon());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateSlot());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateFillet());
|
||||
//rcCmdMgr.addCommand(new CmdSketcherCreateText());
|
||||
|
|
|
@ -60,6 +60,12 @@
|
|||
<file>icons/Sketcher_CreateRectangle.svg</file>
|
||||
<file>icons/Sketcher_CreateSlot.svg</file>
|
||||
<file>icons/Sketcher_CreateFillet.svg</file>
|
||||
<file>icons/Sketcher_CreateTriangle.svg</file>
|
||||
<file>icons/Sketcher_CreateSquare.svg</file>
|
||||
<file>icons/Sketcher_CreatePentagon.svg</file>
|
||||
<file>icons/Sketcher_CreateHexagon.svg</file>
|
||||
<file>icons/Sketcher_CreateHeptagon.svg</file>
|
||||
<file>icons/Sketcher_CreateOctagon.svg</file>
|
||||
<file>icons/Sketcher_CreateText.svg</file>
|
||||
<file>icons/Sketcher_DraftLine.svg</file>
|
||||
<file>icons/Sketcher_Trimming.svg</file>
|
||||
|
|
|
@ -763,6 +763,7 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe
|
|||
<< "Sketcher_CreateLine"
|
||||
<< "Sketcher_CreatePolyline"
|
||||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateHexagon"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
|
|
|
@ -69,54 +69,16 @@ Gui::MenuItem* Workbench::setupMenuBar() const
|
|||
sketch->setCommand("S&ketch");
|
||||
Gui::MenuItem* geom = new Gui::MenuItem();
|
||||
geom->setCommand("Sketcher geometries");
|
||||
*geom << "Sketcher_CreatePoint"
|
||||
<< "Sketcher_CreateLine"
|
||||
<< "Sketcher_CreateArc"
|
||||
<< "Sketcher_Create3PointArc"
|
||||
<< "Sketcher_CreateCircle"
|
||||
<< "Sketcher_Create3PointCircle"
|
||||
<< "Separator"
|
||||
<< "Sketcher_CreatePolyline"
|
||||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateSlot"
|
||||
<< "Separator"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
addSketcherWorkbenchGeometries( *geom );
|
||||
|
||||
Gui::MenuItem* cons = new Gui::MenuItem();
|
||||
cons->setCommand("Sketcher constraints");
|
||||
*cons << "Sketcher_ConstrainCoincident"
|
||||
<< "Sketcher_ConstrainPointOnObject"
|
||||
<< "Sketcher_ConstrainVertical"
|
||||
<< "Sketcher_ConstrainHorizontal"
|
||||
<< "Sketcher_ConstrainParallel"
|
||||
<< "Sketcher_ConstrainPerpendicular"
|
||||
<< "Sketcher_ConstrainTangent"
|
||||
<< "Sketcher_ConstrainEqual"
|
||||
<< "Sketcher_ConstrainSymmetric"
|
||||
<< "Separator"
|
||||
<< "Sketcher_ConstrainLock"
|
||||
<< "Sketcher_ConstrainDistanceX"
|
||||
<< "Sketcher_ConstrainDistanceY"
|
||||
<< "Sketcher_ConstrainDistance"
|
||||
<< "Sketcher_ConstrainRadius"
|
||||
<< "Sketcher_ConstrainAngle";
|
||||
addSketcherWorkbenchConstraints(*cons);
|
||||
|
||||
*sketch
|
||||
<< "Sketcher_NewSketch"
|
||||
<< "Sketcher_EditSketch"
|
||||
<< "Sketcher_LeaveSketch"
|
||||
<< "Sketcher_ViewSketch"
|
||||
<< "Sketcher_MapSketch"
|
||||
<< "Sketcher_ReorientSketch"
|
||||
<< "Sketcher_ValidateSketch"
|
||||
<< geom
|
||||
<< cons
|
||||
;
|
||||
|
||||
addSketcherWorkbenchSketchActions( *sketch );
|
||||
*sketch << geom
|
||||
<< cons;
|
||||
|
||||
return root;
|
||||
}
|
||||
|
@ -127,48 +89,17 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
|
|||
|
||||
Gui::ToolBarItem* part = new Gui::ToolBarItem(root);
|
||||
part->setCommand("Sketcher");
|
||||
*part << "Sketcher_NewSketch"
|
||||
<< "Sketcher_ViewSketch"
|
||||
<< "Sketcher_MapSketch"
|
||||
<< "Sketcher_LeaveSketch";
|
||||
addSketcherWorkbenchSketchActions( *part );
|
||||
|
||||
Gui::ToolBarItem* geom = new Gui::ToolBarItem(root);
|
||||
geom->setCommand("Sketcher geometries");
|
||||
*geom << "Sketcher_CreatePoint"
|
||||
<< "Sketcher_CreateLine"
|
||||
<< "Sketcher_CompCreateArc"
|
||||
<< "Sketcher_CompCreateCircle"
|
||||
<< "Separator"
|
||||
<< "Sketcher_CreatePolyline"
|
||||
<< "Sketcher_CreateRectangle"
|
||||
<< "Sketcher_CreateSlot"
|
||||
<< "Separator"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
addSketcherWorkbenchGeometries(*geom);
|
||||
|
||||
Gui::ToolBarItem* cons = new Gui::ToolBarItem(root);
|
||||
cons->setCommand("Sketcher constraints");
|
||||
*cons << "Sketcher_ConstrainCoincident"
|
||||
<< "Sketcher_ConstrainPointOnObject"
|
||||
<< "Sketcher_ConstrainVertical"
|
||||
<< "Sketcher_ConstrainHorizontal"
|
||||
<< "Sketcher_ConstrainParallel"
|
||||
<< "Sketcher_ConstrainPerpendicular"
|
||||
<< "Sketcher_ConstrainTangent"
|
||||
<< "Sketcher_ConstrainEqual"
|
||||
<< "Sketcher_ConstrainSymmetric"
|
||||
<< "Separator"
|
||||
<< "Sketcher_ConstrainLock"
|
||||
<< "Sketcher_ConstrainDistanceX"
|
||||
<< "Sketcher_ConstrainDistanceY"
|
||||
<< "Sketcher_ConstrainDistance"
|
||||
<< "Sketcher_ConstrainRadius"
|
||||
<< "Sketcher_ConstrainAngle";
|
||||
return root;
|
||||
addSketcherWorkbenchConstraints( *cons );
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
Gui::ToolBarItem* Workbench::setupCommandBars() const
|
||||
|
@ -178,3 +109,128 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const
|
|||
return root;
|
||||
}
|
||||
|
||||
|
||||
namespace SketcherGui {
|
||||
|
||||
template <typename T>
|
||||
void SketcherAddWorkbenchConstraints( T& cons );
|
||||
template <typename T>
|
||||
void Sketcher_addWorkbenchSketchActions( T& sketch );
|
||||
template <typename T>
|
||||
void SketcherAddWorkbenchGeometries( T& geom );
|
||||
|
||||
|
||||
|
||||
template <typename T>
|
||||
void SketcherAddWorkspaceArcs(T& geom);
|
||||
template <>
|
||||
inline void SketcherAddWorkspaceArcs<Gui::MenuItem>(Gui::MenuItem& geom){
|
||||
geom << "Sketcher_CreateArc"
|
||||
<< "Sketcher_Create3PointArc"
|
||||
<< "Sketcher_CreateCircle"
|
||||
<< "Sketcher_Create3PointCircle";
|
||||
}
|
||||
template <>
|
||||
inline void SketcherAddWorkspaceArcs<Gui::ToolBarItem>(Gui::ToolBarItem& geom){
|
||||
geom << "Sketcher_CompCreateArc"
|
||||
<< "Sketcher_CompCreateCircle";
|
||||
}
|
||||
template <typename T>
|
||||
void SketcherAddWorkspaceRegularPolygon(T& geom);
|
||||
template <>
|
||||
inline void SketcherAddWorkspaceRegularPolygon<Gui::MenuItem>(Gui::MenuItem& geom){
|
||||
geom << "Sketcher_CreateTriangle"
|
||||
<< "Sketcher_CreateSquare"
|
||||
<< "Sketcher_CreatePentagon"
|
||||
<< "Sketcher_CreateHexagon"
|
||||
<< "Sketcher_CreateHeptagon"
|
||||
<< "Sketcher_CreateOctagon";
|
||||
}
|
||||
template <>
|
||||
inline void SketcherAddWorkspaceRegularPolygon<Gui::ToolBarItem>(Gui::ToolBarItem& geom){
|
||||
geom << "Sketcher_CompCreateRegularPolygon";
|
||||
}
|
||||
template <typename T>
|
||||
inline void SketcherAddWorkbenchGeometries(T& geom){
|
||||
geom << "Sketcher_CreatePoint"
|
||||
<< "Sketcher_CreateLine";
|
||||
SketcherAddWorkspaceArcs( geom );
|
||||
geom << "Separator"
|
||||
<< "Sketcher_CreatePolyline"
|
||||
<< "Sketcher_CreateRectangle";
|
||||
SketcherAddWorkspaceRegularPolygon( geom );
|
||||
geom << "Sketcher_CreateSlot"
|
||||
<< "Separator"
|
||||
<< "Sketcher_CreateFillet"
|
||||
<< "Sketcher_Trimming"
|
||||
<< "Sketcher_External"
|
||||
<< "Sketcher_ToggleConstruction"
|
||||
/*<< "Sketcher_CreateText"*/
|
||||
/*<< "Sketcher_CreateDraftLine"*/;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
inline void SketcherAddWorkbenchConstraints(T& cons){
|
||||
cons << "Sketcher_ConstrainCoincident"
|
||||
<< "Sketcher_ConstrainPointOnObject"
|
||||
<< "Sketcher_ConstrainVertical"
|
||||
<< "Sketcher_ConstrainHorizontal"
|
||||
<< "Sketcher_ConstrainParallel"
|
||||
<< "Sketcher_ConstrainPerpendicular"
|
||||
<< "Sketcher_ConstrainTangent"
|
||||
<< "Sketcher_ConstrainEqual"
|
||||
<< "Sketcher_ConstrainSymmetric"
|
||||
<< "Separator"
|
||||
<< "Sketcher_ConstrainLock"
|
||||
<< "Sketcher_ConstrainDistanceX"
|
||||
<< "Sketcher_ConstrainDistanceY"
|
||||
<< "Sketcher_ConstrainDistance"
|
||||
<< "Sketcher_ConstrainRadius"
|
||||
<< "Sketcher_ConstrainAngle";
|
||||
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline void SketcherAddWorkspaceSketchExtra(T& sketch){
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void SketcherAddWorkspaceSketchExtra<Gui::MenuItem>(Gui::MenuItem& sketch){
|
||||
sketch << "Sketcher_ReorientSketch"
|
||||
<< "Sketcher_ValidateSketch";
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline void Sketcher_addWorkbenchSketchActions(T& sketch){
|
||||
sketch << "Sketcher_NewSketch"
|
||||
<< "Sketcher_EditSketch"
|
||||
<< "Sketcher_LeaveSketch"
|
||||
<< "Sketcher_ViewSketch"
|
||||
<< "Sketcher_MapSketch";
|
||||
SketcherAddWorkspaceSketchExtra( sketch );
|
||||
}
|
||||
|
||||
|
||||
|
||||
void addSketcherWorkbenchConstraints( Gui::MenuItem& cons ){
|
||||
SketcherAddWorkbenchConstraints( cons );
|
||||
}
|
||||
void addSketcherWorkbenchSketchActions( Gui::MenuItem& sketch ){
|
||||
Sketcher_addWorkbenchSketchActions( sketch );
|
||||
}
|
||||
void addSketcherWorkbenchGeometries( Gui::MenuItem& geom ){
|
||||
SketcherAddWorkbenchGeometries(geom);
|
||||
}
|
||||
|
||||
void addSketcherWorkbenchConstraints( Gui::ToolBarItem& cons ){
|
||||
SketcherAddWorkbenchConstraints( cons );
|
||||
}
|
||||
void addSketcherWorkbenchSketchActions( Gui::ToolBarItem& sketch ){
|
||||
Sketcher_addWorkbenchSketchActions( sketch );
|
||||
}
|
||||
void addSketcherWorkbenchGeometries( Gui::ToolBarItem& geom ){
|
||||
SketcherAddWorkbenchGeometries(geom);
|
||||
}
|
||||
|
||||
} /* namespace SketcherGui */
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
#define IMAGE_WORKBENCH_H
|
||||
|
||||
#include <Gui/Workbench.h>
|
||||
#include <Gui/MenuManager.h>
|
||||
#include <Gui/ToolBarManager.h>
|
||||
|
||||
namespace SketcherGui {
|
||||
|
||||
|
@ -45,6 +47,17 @@ protected:
|
|||
Gui::ToolBarItem* setupCommandBars() const;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
SketcherGuiExport void addSketcherWorkbenchConstraints( Gui::MenuItem& cons );
|
||||
SketcherGuiExport void addSketcherWorkbenchSketchActions( Gui::MenuItem& sketch );
|
||||
SketcherGuiExport void addSketcherWorkbenchGeometries( Gui::MenuItem& geom );
|
||||
|
||||
SketcherGuiExport void addSketcherWorkbenchConstraints( Gui::ToolBarItem& cons );
|
||||
SketcherGuiExport void addSketcherWorkbenchSketchActions( Gui::ToolBarItem& sketch );
|
||||
SketcherGuiExport void addSketcherWorkbenchGeometries( Gui::ToolBarItem& geom );
|
||||
|
||||
} // namespace SketcherGui
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user