Merge remote-tracking branch 'svn/trunk'
Conflicts: src/Mod/Draft/importSVG.py
This commit is contained in:
commit
1779de274c
|
@ -424,6 +424,16 @@ void Command::doCommand(DoCmd_Type eType,const char* sCmd,...)
|
||||||
free (format);
|
free (format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Run a App level Action
|
||||||
|
void Command::runCommand(DoCmd_Type eType,const char* sCmd)
|
||||||
|
{
|
||||||
|
if (eType == Gui)
|
||||||
|
Gui::Application::Instance->macroManager()->addLine(MacroManager::Gui,sCmd);
|
||||||
|
else
|
||||||
|
Gui::Application::Instance->macroManager()->addLine(MacroManager::Base,sCmd);
|
||||||
|
Base::Interpreter().runString(sCmd);
|
||||||
|
}
|
||||||
|
|
||||||
void Command::copyVisual(const char* to, const char* attr, const char* from)
|
void Command::copyVisual(const char* to, const char* attr, const char* from)
|
||||||
{
|
{
|
||||||
doCommand(Gui,"Gui.ActiveDocument.%s.%s=Gui.ActiveDocument.%s.%s", to, attr, from, attr);
|
doCommand(Gui,"Gui.ActiveDocument.%s.%s=Gui.ActiveDocument.%s.%s", to, attr, from, attr);
|
||||||
|
|
|
@ -234,6 +234,7 @@ public:
|
||||||
static void blockCommand(bool);
|
static void blockCommand(bool);
|
||||||
/// Run a App level Action
|
/// Run a App level Action
|
||||||
static void doCommand(DoCmd_Type eType,const char* sCmd,...);
|
static void doCommand(DoCmd_Type eType,const char* sCmd,...);
|
||||||
|
static void runCommand(DoCmd_Type eType,const char* sCmd);
|
||||||
static void copyVisual(const char* to, const char* attr, const char* from);
|
static void copyVisual(const char* to, const char* attr, const char* from);
|
||||||
static void copyVisual(const char* to, const char* attr_to, const char* from, const char* attr_from);
|
static void copyVisual(const char* to, const char* attr_to, const char* from, const char* attr_from);
|
||||||
/// import an external module only once
|
/// import an external module only once
|
||||||
|
|
|
@ -282,6 +282,7 @@ MainWindow::MainWindow(QWidget * parent, Qt::WFlags f)
|
||||||
d->mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
d->mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||||
d->mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
d->mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||||
d->mdiArea->setOption(QMdiArea::DontMaximizeSubWindowOnActivation, false);
|
d->mdiArea->setOption(QMdiArea::DontMaximizeSubWindowOnActivation, false);
|
||||||
|
d->mdiArea->setActivationOrder(QMdiArea::ActivationHistoryOrder);
|
||||||
QPixmap backgnd((const char**) background);
|
QPixmap backgnd((const char**) background);
|
||||||
d->mdiArea->setBackground(backgnd);
|
d->mdiArea->setBackground(backgnd);
|
||||||
setCentralWidget(d->mdiArea);
|
setCentralWidget(d->mdiArea);
|
||||||
|
|
|
@ -341,7 +341,7 @@ PyObject* Workbench::getPyObject()
|
||||||
return new WorkbenchPy(this);
|
return new WorkbenchPy(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Workbench::addTaskWatcher(std::vector<Gui::TaskView::TaskWatcher*> &Watcher)
|
void Workbench::addTaskWatcher(const std::vector<Gui::TaskView::TaskWatcher*> &Watcher)
|
||||||
{
|
{
|
||||||
Gui::TaskView::TaskView* taskView = Control().taskPanel();
|
Gui::TaskView::TaskView* taskView = Control().taskPanel();
|
||||||
if (taskView)
|
if (taskView)
|
||||||
|
|
|
@ -90,7 +90,7 @@ public:
|
||||||
virtual void deactivated();
|
virtual void deactivated();
|
||||||
|
|
||||||
/// helper to add TaskWatcher to the TaskView
|
/// helper to add TaskWatcher to the TaskView
|
||||||
void addTaskWatcher(std::vector<Gui::TaskView::TaskWatcher*> &Watcher);
|
void addTaskWatcher(const std::vector<Gui::TaskView::TaskWatcher*> &Watcher);
|
||||||
/// remove the added TaskWatcher
|
/// remove the added TaskWatcher
|
||||||
void removeTaskWatcher(void);
|
void removeTaskWatcher(void);
|
||||||
|
|
||||||
|
|
|
@ -592,35 +592,22 @@ class svgHandler(xml.sax.ContentHandler):
|
||||||
path = []
|
path = []
|
||||||
point = []
|
point = []
|
||||||
command = None
|
command = None
|
||||||
#elif (len(point)==6) and (command=="cubic"):
|
elif (len(point)==6) and (command=="curve"):
|
||||||
elif (command=="cubic") and (((smooth==False) and (len(point)==6)) or (smooth==True and (len(point)==4))) :
|
if relative:
|
||||||
if smooth:
|
currentvec = lastvec.add(Vector(point[4],-point[5],0))
|
||||||
if relative:
|
pole1 = lastvec.add(Vector(point[0],-point[1],0))
|
||||||
currentvec = lastvec.add(Vector(point[2],-point[3],0))
|
pole2 = lastvec.add(Vector(point[2],-point[3],0))
|
||||||
pole2 = lastvec.add(Vector(point[0],-point[1],0))
|
else:
|
||||||
else:
|
currentvec = Vector(point[4],-point[5],0)
|
||||||
currentvec = Vector(point[2],-point[3],0)
|
pole1 = Vector(point[0],-point[1],0)
|
||||||
pole2 = Vector(point[0],-point[1],0)
|
pole2 = Vector(point[2],-point[3],0)
|
||||||
if lastpole is not None and lastpole[0]=='cubic':
|
|
||||||
pole1 = lastvec.sub(lastpole[1]).add(lastvec)
|
|
||||||
else:
|
|
||||||
pole1 = lastvec
|
|
||||||
else: #not smooth
|
|
||||||
if relative:
|
|
||||||
currentvec = lastvec.add(Vector(point[4],-point[5],0))
|
|
||||||
pole1 = lastvec.add(Vector(point[0],-point[1],0))
|
|
||||||
pole2 = lastvec.add(Vector(point[2],-point[3],0))
|
|
||||||
else:
|
|
||||||
currentvec = Vector(point[4],-point[5],0)
|
|
||||||
pole1 = Vector(point[0],-point[1],0)
|
|
||||||
pole2 = Vector(point[2],-point[3],0)
|
|
||||||
|
|
||||||
if not fcvec.equals(currentvec,lastvec):
|
if not fcvec.equals(currentvec,lastvec):
|
||||||
mainv = currentvec.sub(lastvec)
|
mainv = currentvec.sub(lastvec)
|
||||||
pole1v = lastvec.add(pole1)
|
pole1v = lastvec.add(pole1)
|
||||||
pole2v = currentvec.add(pole2)
|
pole2v = currentvec.add(pole2)
|
||||||
print "cubic curve data:",mainv.normalize(),pole1v.normalize(),pole2v.normalize()
|
print "curve data:",mainv.normalize(),pole1v.normalize(),pole2v.normalize()
|
||||||
if pole1.distanceToLine(lastvec,currentvec) < 10**(-1*Draft.precision()) and pole2.distanceToLine(lastvec,currentvec) < 10**(-1*Draft.precision()):
|
if (round(mainv.getAngle(pole1v),Draft.precision()) in [0,round(math.pi,Draft.precision())]) \
|
||||||
|
and (round(mainv.getAngle(pole2v),Draft.precision()) in [0,round(math.pi,Draft.precision())]):
|
||||||
print "straight segment"
|
print "straight segment"
|
||||||
seg = Part.Line(lastvec,currentvec).toShape()
|
seg = Part.Line(lastvec,currentvec).toShape()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -249,7 +249,7 @@ CmdDrawingNewView::CmdDrawingNewView()
|
||||||
void CmdDrawingNewView::activated(int iMsg)
|
void CmdDrawingNewView::activated(int iMsg)
|
||||||
{
|
{
|
||||||
std::vector<App::DocumentObject*> shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId());
|
std::vector<App::DocumentObject*> shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId());
|
||||||
if (shapes.size() != 1) {
|
if (shapes.empty()) {
|
||||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||||
QObject::tr("Select a Part object."));
|
QObject::tr("Select a Part object."));
|
||||||
return;
|
return;
|
||||||
|
@ -262,19 +262,19 @@ void CmdDrawingNewView::activated(int iMsg)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string FeatName = getUniqueObjectName("View");
|
|
||||||
std::string PageName = pages.front()->getNameInDocument();
|
std::string PageName = pages.front()->getNameInDocument();
|
||||||
|
|
||||||
std::vector<Gui::SelectionSingleton::SelObj> Sel = getSelection().getSelection();
|
|
||||||
|
|
||||||
openCommand("Create view");
|
openCommand("Create view");
|
||||||
doCommand(Doc,"App.activeDocument().addObject('Drawing::FeatureViewPart','%s')",FeatName.c_str());
|
for (std::vector<App::DocumentObject*>::iterator it = shapes.begin(); it != shapes.end(); ++it) {
|
||||||
doCommand(Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",FeatName.c_str(),shapes.front()->getNameInDocument());
|
std::string FeatName = getUniqueObjectName("View");
|
||||||
doCommand(Doc,"App.activeDocument().%s.Direction = (0.0,0.0,1.0)",FeatName.c_str());
|
doCommand(Doc,"App.activeDocument().addObject('Drawing::FeatureViewPart','%s')",FeatName.c_str());
|
||||||
doCommand(Doc,"App.activeDocument().%s.X = 10.0",FeatName.c_str());
|
doCommand(Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",FeatName.c_str(),(*it)->getNameInDocument());
|
||||||
doCommand(Doc,"App.activeDocument().%s.Y = 10.0",FeatName.c_str());
|
doCommand(Doc,"App.activeDocument().%s.Direction = (0.0,0.0,1.0)",FeatName.c_str());
|
||||||
doCommand(Doc,"App.activeDocument().%s.Scale = 1.0",FeatName.c_str());
|
doCommand(Doc,"App.activeDocument().%s.X = 10.0",FeatName.c_str());
|
||||||
doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str());
|
doCommand(Doc,"App.activeDocument().%s.Y = 10.0",FeatName.c_str());
|
||||||
|
doCommand(Doc,"App.activeDocument().%s.Scale = 1.0",FeatName.c_str());
|
||||||
|
doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str());
|
||||||
|
}
|
||||||
updateActive();
|
updateActive();
|
||||||
commitCommand();
|
commitCommand();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "PreCompiled.h"
|
#include "PreCompiled.h"
|
||||||
#ifndef _PreComp_
|
#ifndef _PreComp_
|
||||||
|
# include <sstream>
|
||||||
# include <QString>
|
# include <QString>
|
||||||
# include <QDir>
|
# include <QDir>
|
||||||
# include <QFileInfo>
|
# include <QFileInfo>
|
||||||
|
@ -295,17 +296,18 @@ void CmdPartCommon::activated(int iMsg)
|
||||||
std::string FeatName = getUniqueObjectName("Common");
|
std::string FeatName = getUniqueObjectName("Common");
|
||||||
|
|
||||||
std::vector<Gui::SelectionSingleton::SelObj> Sel = getSelection().getSelection();
|
std::vector<Gui::SelectionSingleton::SelObj> Sel = getSelection().getSelection();
|
||||||
std::string ObjectBuf;
|
std::stringstream str;
|
||||||
std::vector<std::string> tempSelNames;
|
std::vector<std::string> tempSelNames;
|
||||||
|
str << "App.activeDocument()." << FeatName << ".Shapes = [";
|
||||||
for (std::vector<Gui::SelectionSingleton::SelObj>::iterator it = Sel.begin(); it != Sel.end(); ++it){
|
for (std::vector<Gui::SelectionSingleton::SelObj>::iterator it = Sel.begin(); it != Sel.end(); ++it){
|
||||||
ObjectBuf += std::string("App.activeDocument().") + it->FeatName + ",";
|
str << "App.activeDocument()." << it->FeatName << ",";
|
||||||
tempSelNames.push_back(it->FeatName);
|
tempSelNames.push_back(it->FeatName);
|
||||||
}
|
}
|
||||||
ObjectBuf.erase(--ObjectBuf.end());
|
str << "]";
|
||||||
|
|
||||||
openCommand("Common");
|
openCommand("Common");
|
||||||
doCommand(Doc,"App.activeDocument().addObject(\"Part::MultiCommon\",\"%s\")",FeatName.c_str());
|
doCommand(Doc,"App.activeDocument().addObject(\"Part::MultiCommon\",\"%s\")",FeatName.c_str());
|
||||||
doCommand(Doc,"App.activeDocument().%s.Shapes = [%s]",FeatName.c_str(),ObjectBuf.c_str());
|
runCommand(Doc,str.str().c_str());
|
||||||
for (std::vector<std::string>::iterator it = tempSelNames.begin(); it != tempSelNames.end(); ++it)
|
for (std::vector<std::string>::iterator it = tempSelNames.begin(); it != tempSelNames.end(); ++it)
|
||||||
doCommand(Gui,"Gui.activeDocument().%s.Visibility=False",it->c_str());
|
doCommand(Gui,"Gui.activeDocument().%s.Visibility=False",it->c_str());
|
||||||
copyVisual(FeatName.c_str(), "ShapeColor", tempSelNames.front().c_str());
|
copyVisual(FeatName.c_str(), "ShapeColor", tempSelNames.front().c_str());
|
||||||
|
@ -348,17 +350,18 @@ void CmdPartFuse::activated(int iMsg)
|
||||||
std::string FeatName = getUniqueObjectName("Fusion");
|
std::string FeatName = getUniqueObjectName("Fusion");
|
||||||
|
|
||||||
std::vector<Gui::SelectionSingleton::SelObj> Sel = getSelection().getSelection();
|
std::vector<Gui::SelectionSingleton::SelObj> Sel = getSelection().getSelection();
|
||||||
std::string ObjectBuf;
|
std::stringstream str;
|
||||||
std::vector<std::string> tempSelNames;
|
std::vector<std::string> tempSelNames;
|
||||||
|
str << "App.activeDocument()." << FeatName << ".Shapes = [";
|
||||||
for (std::vector<Gui::SelectionSingleton::SelObj>::iterator it = Sel.begin(); it != Sel.end(); ++it){
|
for (std::vector<Gui::SelectionSingleton::SelObj>::iterator it = Sel.begin(); it != Sel.end(); ++it){
|
||||||
ObjectBuf += std::string("App.activeDocument().") + it->FeatName + ",";
|
str << "App.activeDocument()." << it->FeatName << ",";
|
||||||
tempSelNames.push_back(it->FeatName);
|
tempSelNames.push_back(it->FeatName);
|
||||||
}
|
}
|
||||||
ObjectBuf.erase(--ObjectBuf.end());
|
str << "]";
|
||||||
|
|
||||||
openCommand("Fusion");
|
openCommand("Fusion");
|
||||||
doCommand(Doc,"App.activeDocument().addObject(\"Part::MultiFuse\",\"%s\")",FeatName.c_str());
|
doCommand(Doc,"App.activeDocument().addObject(\"Part::MultiFuse\",\"%s\")",FeatName.c_str());
|
||||||
doCommand(Doc,"App.activeDocument().%s.Shapes = [%s]",FeatName.c_str(),ObjectBuf.c_str());
|
runCommand(Doc,str.str().c_str());
|
||||||
for (std::vector<std::string>::iterator it = tempSelNames.begin(); it != tempSelNames.end(); ++it)
|
for (std::vector<std::string>::iterator it = tempSelNames.begin(); it != tempSelNames.end(); ++it)
|
||||||
doCommand(Gui,"Gui.activeDocument().%s.Visibility=False",it->c_str());
|
doCommand(Gui,"Gui.activeDocument().%s.Visibility=False",it->c_str());
|
||||||
copyVisual(FeatName.c_str(), "ShapeColor", tempSelNames.front().c_str());
|
copyVisual(FeatName.c_str(), "ShapeColor", tempSelNames.front().c_str());
|
||||||
|
|
|
@ -24,15 +24,22 @@
|
||||||
#include "PreCompiled.h"
|
#include "PreCompiled.h"
|
||||||
#ifndef _PreComp_
|
#ifndef _PreComp_
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
|
#include <gp_Ax1.hxx>
|
||||||
#include <gp_Ax3.hxx>
|
#include <gp_Ax3.hxx>
|
||||||
#include <gp_Dir.hxx>
|
#include <gp_Dir.hxx>
|
||||||
#include <gp_Pnt.hxx>
|
#include <gp_Pnt.hxx>
|
||||||
|
#include <GC_MakeArcOfCircle.hxx>
|
||||||
|
#include <Geom_Circle.hxx>
|
||||||
|
#include <Geom_TrimmedCurve.hxx>
|
||||||
|
#include <Handle_Geom_Circle.hxx>
|
||||||
|
#include <Handle_Geom_TrimmedCurve.hxx>
|
||||||
#include <Inventor/SoPickedPoint.h>
|
#include <Inventor/SoPickedPoint.h>
|
||||||
#include <Inventor/events/SoMouseButtonEvent.h>
|
#include <Inventor/events/SoMouseButtonEvent.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <Base/Interpreter.h>
|
#include <Base/Interpreter.h>
|
||||||
#include <Base/Rotation.h>
|
#include <Base/Rotation.h>
|
||||||
|
#include <Base/Tools.h>
|
||||||
#include <App/Application.h>
|
#include <App/Application.h>
|
||||||
#include <App/Document.h>
|
#include <App/Document.h>
|
||||||
#include <Gui/Application.h>
|
#include <Gui/Application.h>
|
||||||
|
@ -47,6 +54,130 @@
|
||||||
|
|
||||||
using namespace PartGui;
|
using namespace PartGui;
|
||||||
|
|
||||||
|
namespace PartGui {
|
||||||
|
|
||||||
|
const char* gce_ErrorStatusText(gce_ErrorType et)
|
||||||
|
{
|
||||||
|
switch (et)
|
||||||
|
{
|
||||||
|
case gce_Done:
|
||||||
|
return "Construction was successful";
|
||||||
|
case gce_ConfusedPoints:
|
||||||
|
return "Two points are coincident";
|
||||||
|
case gce_NegativeRadius:
|
||||||
|
return "Radius value is negative";
|
||||||
|
case gce_ColinearPoints:
|
||||||
|
return "Three points are collinear";
|
||||||
|
case gce_IntersectionError:
|
||||||
|
return "Intersection cannot be computed";
|
||||||
|
case gce_NullAxis:
|
||||||
|
return "Axis is undefined";
|
||||||
|
case gce_NullAngle:
|
||||||
|
return "Angle value is invalid (usually null)";
|
||||||
|
case gce_NullRadius:
|
||||||
|
return "Radius is null";
|
||||||
|
case gce_InvertAxis:
|
||||||
|
return "Axis value is invalid";
|
||||||
|
case gce_BadAngle:
|
||||||
|
return "Angle value is invalid";
|
||||||
|
case gce_InvertRadius:
|
||||||
|
return "Radius value is incorrect (usually with respect to another radius)";
|
||||||
|
case gce_NullFocusLength:
|
||||||
|
return "Focal distance is null";
|
||||||
|
case gce_NullVector:
|
||||||
|
return "Vector is null";
|
||||||
|
case gce_BadEquation:
|
||||||
|
return "Coefficients are incorrect (applies to the equation of a geometric object)";
|
||||||
|
default:
|
||||||
|
return "Creation of geometry failed";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Picker::createPrimitive(QWidget* widget, const QString& descr, Gui::Document* doc)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
App::Document* app = doc->getDocument();
|
||||||
|
QString cmd = this->command(app);
|
||||||
|
|
||||||
|
// Execute the Python block
|
||||||
|
doc->openCommand(descr.toUtf8());
|
||||||
|
Gui::Command::doCommand(Gui::Command::Doc, (const char*)cmd.toAscii());
|
||||||
|
doc->commitCommand();
|
||||||
|
Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.recompute()");
|
||||||
|
Gui::Command::doCommand(Gui::Command::Gui, "Gui.SendMsgToActiveView(\"ViewFit\")");
|
||||||
|
}
|
||||||
|
catch (const Base::Exception& e) {
|
||||||
|
QMessageBox::warning(widget, descr, QString::fromLatin1(e.what()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Picker::toPlacement(const gp_Ax2& axis) const
|
||||||
|
{
|
||||||
|
gp_Dir dir = axis.Direction();
|
||||||
|
gp_Pnt pnt = gp_Pnt(0.0,0.0,0.0);
|
||||||
|
gp_Ax3 ax3(pnt, dir, axis.XDirection());
|
||||||
|
|
||||||
|
gp_Trsf Trf;
|
||||||
|
Trf.SetTransformation(ax3);
|
||||||
|
Trf.Invert();
|
||||||
|
|
||||||
|
gp_XYZ theAxis(0,0,1);
|
||||||
|
Standard_Real theAngle = 0.0;
|
||||||
|
Trf.GetRotation(theAxis,theAngle);
|
||||||
|
|
||||||
|
Base::Rotation rot(Base::convertTo<Base::Vector3d>(theAxis), theAngle);
|
||||||
|
gp_Pnt loc = axis.Location();
|
||||||
|
|
||||||
|
return QString::fromAscii("Base.Placement(Base.Vector(%1,%2,%3),Base.Rotation(%4,%5,%6,%7))")
|
||||||
|
.arg(loc.X(),0,'f',2)
|
||||||
|
.arg(loc.Y(),0,'f',2)
|
||||||
|
.arg(loc.Z(),0,'f',2)
|
||||||
|
.arg(rot[0],0,'f',2)
|
||||||
|
.arg(rot[1],0,'f',2)
|
||||||
|
.arg(rot[2],0,'f',2)
|
||||||
|
.arg(rot[3],0,'f',2);
|
||||||
|
}
|
||||||
|
|
||||||
|
class CircleFromThreePoints : public Picker
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CircleFromThreePoints() : Picker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
bool pickedPoint(const SoPickedPoint * point)
|
||||||
|
{
|
||||||
|
SbVec3f pnt = point->getPoint();
|
||||||
|
points.push_back(gp_Pnt(pnt[0],pnt[1],pnt[2]));
|
||||||
|
return points.size() == 3;
|
||||||
|
}
|
||||||
|
QString command(App::Document* doc) const
|
||||||
|
{
|
||||||
|
GC_MakeArcOfCircle arc(points[0], points[1], points[2]);
|
||||||
|
if (!arc.IsDone())
|
||||||
|
throw Base::Exception(gce_ErrorStatusText(arc.Status()));
|
||||||
|
Handle_Geom_TrimmedCurve trim = arc.Value();
|
||||||
|
Handle_Geom_Circle circle = Handle_Geom_Circle::DownCast(trim->BasisCurve());
|
||||||
|
|
||||||
|
QString name = QString::fromAscii(doc->getUniqueObjectName("Circle").c_str());
|
||||||
|
return QString::fromAscii(
|
||||||
|
"App.ActiveDocument.addObject(\"Part::Circle\",\"%1\")\n"
|
||||||
|
"App.ActiveDocument.%1.Radius=%2\n"
|
||||||
|
"App.ActiveDocument.%1.Angle0=%3\n"
|
||||||
|
"App.ActiveDocument.%1.Angle1=%4\n"
|
||||||
|
"App.ActiveDocument.%1.Placement=%5\n")
|
||||||
|
.arg(name)
|
||||||
|
.arg(circle->Radius(),0,'f',2)
|
||||||
|
.arg(Base::toDegrees(trim->FirstParameter()),0,'f',2)
|
||||||
|
.arg(Base::toDegrees(trim->LastParameter ()),0,'f',2)
|
||||||
|
.arg(toPlacement(circle->Position()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<gp_Pnt> points;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* TRANSLATOR PartGui::DlgPrimitives */
|
/* TRANSLATOR PartGui::DlgPrimitives */
|
||||||
|
|
||||||
DlgPrimitives::DlgPrimitives(QWidget* parent)
|
DlgPrimitives::DlgPrimitives(QWidget* parent)
|
||||||
|
@ -136,6 +267,66 @@ DlgPrimitives::~DlgPrimitives()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DlgPrimitives::pickCallback(void * ud, SoEventCallback * n)
|
||||||
|
{
|
||||||
|
const SoMouseButtonEvent * mbe = static_cast<const SoMouseButtonEvent*>(n->getEvent());
|
||||||
|
Gui::View3DInventorViewer* view = reinterpret_cast<Gui::View3DInventorViewer*>(n->getUserData());
|
||||||
|
|
||||||
|
// Mark all incoming mouse button events as handled, especially, to deactivate the selection node
|
||||||
|
n->setHandled();
|
||||||
|
if (mbe->getButton() == SoMouseButtonEvent::BUTTON1) {
|
||||||
|
if (mbe->getState() == SoButtonEvent::DOWN) {
|
||||||
|
const SoPickedPoint * point = n->getPickedPoint();
|
||||||
|
if (point) {
|
||||||
|
Picker* pick = reinterpret_cast<Picker*>(ud);
|
||||||
|
if (pick->pickedPoint(point)) {
|
||||||
|
pick->loop.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (mbe->getButton() == SoMouseButtonEvent::BUTTON2) {
|
||||||
|
if (mbe->getState() == SoButtonEvent::UP) {
|
||||||
|
Picker* pick = reinterpret_cast<Picker*>(ud);
|
||||||
|
pick->loop.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DlgPrimitives::executeCallback(Picker* p)
|
||||||
|
{
|
||||||
|
Gui::Document* doc = Gui::Application::Instance->activeDocument();
|
||||||
|
if (!doc) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Gui::View3DInventor* view = static_cast<Gui::View3DInventor*>(doc->getActiveView());
|
||||||
|
if (view) {
|
||||||
|
Gui::View3DInventorViewer* viewer = view->getViewer();
|
||||||
|
if (!viewer->isEditing()) {
|
||||||
|
viewer->setEditing(true);
|
||||||
|
viewer->setRedirectToSceneGraph(true);
|
||||||
|
viewer->addEventCallback(SoMouseButtonEvent::getClassTypeId(), pickCallback, p);
|
||||||
|
this->setDisabled(true);
|
||||||
|
int ret = p->loop.exec();
|
||||||
|
this->setEnabled(true);
|
||||||
|
viewer->setEditing(false);
|
||||||
|
viewer->setRedirectToSceneGraph(false);
|
||||||
|
viewer->removeEventCallback(SoMouseButtonEvent::getClassTypeId(), pickCallback, p);
|
||||||
|
|
||||||
|
if (ret == 0) {
|
||||||
|
p->createPrimitive(this, ui.comboBox1->currentText(), doc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DlgPrimitives::on_buttonCircleFromThreePoints_clicked()
|
||||||
|
{
|
||||||
|
CircleFromThreePoints pp;
|
||||||
|
executeCallback(&pp);
|
||||||
|
}
|
||||||
|
|
||||||
void DlgPrimitives::createPrimitive(const QString& placement)
|
void DlgPrimitives::createPrimitive(const QString& placement)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
@ -384,9 +575,6 @@ void DlgPrimitives::createPrimitive(const QString& placement)
|
||||||
Location::Location(QWidget* parent)
|
Location::Location(QWidget* parent)
|
||||||
{
|
{
|
||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
|
|
||||||
connect(ui.viewPositionButton, SIGNAL(clicked()),
|
|
||||||
this, SLOT(on_viewPositionButton_clicked()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Location::~Location()
|
Location::~Location()
|
||||||
|
|
|
@ -23,15 +23,37 @@
|
||||||
#ifndef PARTGUI_DLGPRIMITIVES_H
|
#ifndef PARTGUI_DLGPRIMITIVES_H
|
||||||
#define PARTGUI_DLGPRIMITIVES_H
|
#define PARTGUI_DLGPRIMITIVES_H
|
||||||
|
|
||||||
|
#include <QEventLoop>
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
#include <Gui/TaskView/TaskDialog.h>
|
#include <Gui/TaskView/TaskDialog.h>
|
||||||
#include "ui_DlgPrimitives.h"
|
#include "ui_DlgPrimitives.h"
|
||||||
#include "ui_Location.h"
|
#include "ui_Location.h"
|
||||||
|
|
||||||
|
class gp_Ax2;
|
||||||
class SoEventCallback;
|
class SoEventCallback;
|
||||||
|
|
||||||
|
namespace App { class Document; }
|
||||||
|
namespace Gui { class Document; }
|
||||||
namespace PartGui {
|
namespace PartGui {
|
||||||
|
|
||||||
|
class Picker
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Picker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
virtual ~Picker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool pickedPoint(const SoPickedPoint * point) = 0;
|
||||||
|
virtual QString command(App::Document*) const = 0;
|
||||||
|
void createPrimitive(QWidget* widget, const QString&, Gui::Document*);
|
||||||
|
QString toPlacement(const gp_Ax2&) const;
|
||||||
|
|
||||||
|
QEventLoop loop;
|
||||||
|
};
|
||||||
|
|
||||||
class DlgPrimitives : public QWidget
|
class DlgPrimitives : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -41,6 +63,13 @@ public:
|
||||||
~DlgPrimitives();
|
~DlgPrimitives();
|
||||||
void createPrimitive(const QString&);
|
void createPrimitive(const QString&);
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void on_buttonCircleFromThreePoints_clicked();
|
||||||
|
|
||||||
|
private:
|
||||||
|
static void pickCallback(void * ud, SoEventCallback * n);
|
||||||
|
void executeCallback(Picker*);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui_DlgPrimitives ui;
|
Ui_DlgPrimitives ui;
|
||||||
};
|
};
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user