Initial version addCosmeticVertex

This commit is contained in:
wandererfan
2019-05-24 19:38:02 -04:00
parent a0497f42fd
commit 59e47de506
32 changed files with 3157 additions and 379 deletions
+2
View File
@@ -123,6 +123,8 @@ SET(Geometry_SRCS
Geometry.h
GeometryObject.cpp
GeometryObject.h
Cosmetic.cpp
Cosmetic.h
)
SET(Python_SRCS
+143
View File
@@ -0,0 +1,143 @@
/***************************************************************************
* Copyright (c) 2019 WandererFan <[email protected]> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#include "PreCompiled.h"
#ifndef _PreComp_
#endif // #ifndef _PreComp_
#include <Base/Console.h>
#include <Base/Exception.h>
#include <Base/Parameter.h>
#include <Base/Vector3D.h>
#include <App/Application.h>
#include <App/Material.h>
#include "DrawUtil.h"
#include "Cosmetic.h"
using namespace TechDraw;
CosmeticVertex::CosmeticVertex()
{
pageLocation = Base::Vector3d(0.0, 0.0, 0.0);
modelLocation = Base::Vector3d(0.0, 0.0, 0.0);
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().GetGroup("BaseApp")->
GetGroup("Preferences")->GetGroup("Mod/TechDraw/Decorations");
App::Color fcColor;
fcColor.setPackedValue(hGrp->GetUnsigned("VertexColor", 0x00000000));
linkGeom = -1;
color = fcColor;
size = 3.0;
style = 1;
visible = true;
}
CosmeticVertex::CosmeticVertex(Base::Vector3d loc)
{
pageLocation = loc;
modelLocation = loc;
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().GetGroup("BaseApp")->
GetGroup("Preferences")->GetGroup("Mod/TechDraw/Decorations");
App::Color fcColor;
fcColor.setPackedValue(hGrp->GetUnsigned("VertexColor", 0xff000000));
linkGeom = -1;
color = fcColor;
//TODO: size = hGrp->getFloat("VertexSize",30.0);
size = 30.0;
style = 1; //TODO: implement styled vertexes
visible = true;
}
std::string CosmeticVertex::toCSV(void) const
{
std::stringstream ss;
ss << pageLocation.x << "," <<
pageLocation.y << "," <<
pageLocation.z << "," <<
modelLocation.x << "," <<
modelLocation.y << "," <<
modelLocation.z << "," <<
linkGeom << "," <<
color.asHexString() << "," <<
size << "," <<
style << "," <<
visible <<
std::endl;
return ss.str();
}
bool CosmeticVertex::fromCSV(std::string& lineSpec)
{
unsigned int maxCells = 11;
if (lineSpec.length() == 0) {
Base::Console().Message( "CosmeticVertex::fromCSV - lineSpec empty\n");
return false;
}
std::vector<std::string> values = split(lineSpec);
Base::Console().Message("CV::fromCSV - values: %d\n",values.size());
if (values.size() < maxCells) {
Base::Console().Message( "CosmeticVertex::fromCSV(%s) invalid CSV entry\n",lineSpec.c_str() );
return false;
}
double x = atof(values[0].c_str());
double y = atof(values[1].c_str());
double z = atof(values[2].c_str());
pageLocation = Base::Vector3d (x,y,z);
x = atof(values[3].c_str());
y = atof(values[4].c_str());
z = atof(values[5].c_str());
modelLocation = Base::Vector3d (x,y,z);
linkGeom = atoi(values[6].c_str());
color.fromHexString(values[7]);
size = atof(values[8].c_str());
style = atoi(values[9].c_str());
visible = atoi(values[10].c_str());
return true;
}
std::vector<std::string> CosmeticVertex::split(std::string csvLine)
{
Base::Console().Message("CV::split - csvLine: %s\n",csvLine.c_str());
std::vector<std::string> result;
std::stringstream lineStream(csvLine);
std::string cell;
while(std::getline(lineStream,cell, ','))
{
result.push_back(cell);
}
return result;
}
void CosmeticVertex::dump(char* title)
{
Base::Console().Message("CV::dump - %s \n",title);
Base::Console().Message("CV::dump - %s \n",toCSV().c_str());
}
+58
View File
@@ -0,0 +1,58 @@
/***************************************************************************
* Copyright (c) 2019 WandererFan <[email protected]> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef TECHDRAW_COSMETIC_H
#define TECHDRAW_COSMETIC_H
#include <Base/Vector3D.h>
#include <App/Material.h>
namespace TechDraw {
class TechDrawExport CosmeticVertex
{
public:
CosmeticVertex();
CosmeticVertex(Base::Vector3d loc);
virtual ~CosmeticVertex() = default;
std::string toCSV(void) const;
bool fromCSV(std::string& lineSpec);
void dump(char* title);
Base::Vector3d pageLocation;
Base::Vector3d modelLocation;
int linkGeom; //connection to corresponding "real" Vertex
App::Color color;
double size;
int style;
bool visible;
protected:
std::vector<std::string> split(std::string csvLine);
};
} //end namespace TechDraw
#endif //TECHDRAW_COSMETIC_H
+5 -8
View File
@@ -39,7 +39,6 @@
#include <Base/Console.h>
#include <Base/UnitsApi.h>
#include "DrawView.h"
#include "DrawPage.h"
#include "DrawViewCollection.h"
#include "DrawViewClip.h"
@@ -47,11 +46,15 @@
#include "DrawProjGroupItem.h"
#include "DrawLeaderLine.h"
#include "DrawUtil.h"
#include "Geometry.h"
#include "Cosmetic.h"
#include <Mod/TechDraw/App/DrawViewPy.h> // generated from DrawViewPy.xml
using namespace TechDraw;
#include "DrawView.h"
using namespace TechDraw;
using namespace TechDrawGeometry;
//===========================================================================
// DrawView
@@ -323,12 +326,6 @@ std::vector<TechDraw::DrawLeaderLine*> DrawView::getLeaders() const
return result;
}
void DrawView::addRandomVertex(Base::Vector3d pos)
{
(void) pos;
Base::Console().Message("DV::addRandomVertex()\n");
}
void DrawView::Restore(Base::XMLReader &reader)
{
// this is temporary code for backwards compat (within v0.17). can probably be deleted once there are no development
+3 -2
View File
@@ -38,6 +38,7 @@ namespace TechDraw
class DrawPage;
class DrawViewClip;
class DrawLeaderLine;
class CosmeticVertex;
/** Base class of all View Features in the drawing module
*/
@@ -90,8 +91,8 @@ public:
void requestPaint(void);
virtual void handleXYLock(void);
virtual bool isLocked(void) const;
virtual void addRandomVertex(Base::Vector3d pos);
std::vector<TechDraw::DrawLeaderLine*> getLeaders() const;
std::vector<TechDraw::DrawLeaderLine*> getLeaders(void) const;
protected:
virtual void onChanged(const App::Property* prop) override;
+111 -4
View File
@@ -102,7 +102,7 @@
#include "DrawPage.h"
#include "EdgeWalker.h"
#include "LineGroup.h"
#include "Cosmetic.h"
#include <Mod/TechDraw/App/DrawViewPartPy.h> // generated from DrawViewPartPy.xml
@@ -117,7 +117,9 @@ using namespace std;
PROPERTY_SOURCE(TechDraw::DrawViewPart, TechDraw::DrawView)
DrawViewPart::DrawViewPart(void) : geometryObject(0)
DrawViewPart::DrawViewPart(void) :
geometryObject(0),
on1(true)
{
static const char *group = "Projection";
static const char *sgroup = "HLR Parameters";
@@ -148,8 +150,16 @@ DrawViewPart::DrawViewPart(void) : geometryObject(0)
ADD_PROPERTY_TYPE(IsoHidden ,(false),sgroup,App::Prop_None,"Hidden Iso u,v lines on/off");
ADD_PROPERTY_TYPE(IsoCount ,(0),sgroup,App::Prop_None,"Number of isoparameters");
ADD_PROPERTY_TYPE(CosmeticVertexList ,(""),sgroup,App::Prop_None,"CosmeticVertex Save/Restore");
geometryObject = nullptr;
getRunControl();
// Base::Vector3d org(0.0,0.0,0.0); //App side coords
// addRandomVertex(org);
// Base::Vector3d pt(11.0,11.0,0.0);
// addRandomVertex(pt);
}
DrawViewPart::~DrawViewPart()
@@ -279,6 +289,13 @@ App::DocumentObjectExecReturn *DrawViewPart::execute(void)
if (!keepUpdated()) {
return App::DocumentObject::StdReturn;
}
//this is ghastly! but no convenient method for "object ready"
if (on1) {
rebuildCosmoVertex();
on1 = false;
}
App::Document* doc = getDocument();
bool isRestoring = doc->testStatus(App::Document::Status::Restoring);
const std::vector<App::DocumentObject*>& links = Source.getValues();
@@ -324,6 +341,13 @@ App::DocumentObjectExecReturn *DrawViewPart::execute(void)
Rotation.getValue());
}
geometryObject = buildGeometryObject(mirroredShape,viewAxis);
//add back the cosmetic vertices
Base::Console().Message("DVP::execute - cosmoVertex: %d \n",cosmoVertex.size());
for (auto& v: cosmoVertex) {
Base::Console().Message("DVP::execute - adding random vertex\n");
int idx = geometryObject->addRandomVertex(v->pageLocation * getScale());
v->linkGeom = idx;
}
#if MOD_TECHDRAW_HANDLE_FACES
auto start = chrono::high_resolution_clock::now();
@@ -380,7 +404,6 @@ short DrawViewPart::mustExecute() const
void DrawViewPart::onChanged(const App::Property* prop)
{
DrawView::onChanged(prop);
//TODO: when scale changes, any Dimensions for this View sb recalculated. DVD should pick this up subject to topological naming issues.
}
@@ -867,10 +890,34 @@ bool DrawViewPart::showSectionEdges(void)
return m_sectionEdges;
}
//build cosmoVertex from CosmeticVertexList
void DrawViewPart::rebuildCosmoVertex(void)
{
Base::Console().Message("DVP::rebuildCosmoVertx()\n");
cosmoVertex.clear();
std::vector<std::string> restoreVerts = CosmeticVertexList.getValues();
Base::Console().Message("DVP::rebuildCosmoVertex - verts in: %d \n",restoreVerts.size());
for (auto& rv: restoreVerts) {
if (!rv.empty()) {
CosmeticVertex* cv = new CosmeticVertex();
bool rc = cv->fromCSV(rv);
if (rc) {
// int idx = geometryObject->addRandomVertex(cv->pageLocation * getScale());
// cv->linkGeom = idx;
cosmoVertex.push_back(cv);
} else {
delete cv;
}
}
}
Base::Console().Message("DVP::rebuildCosmoVertex - cosmoVertexs: %d \n",cosmoVertex.size());
}
//! remove features that are useless without this DVP
//! hatches, geomhatches, dimensions,...
void DrawViewPart::unsetupObject()
{
Base::Console().Message("DVP::unsetupObject()\n");
nowUnsetting = true;
App::Document* doc = getDocument();
std::string docName = doc->getName();
@@ -924,7 +971,6 @@ void DrawViewPart::unsetupObject()
}
}
}
}
//! is this an Isometric projection?
@@ -939,6 +985,67 @@ bool DrawViewPart::isIso(void) const
return result;
}
//********
//* Cosmetics
//********
// adds a cosmetic vertex to cosmoVertex and CosmeticVertexList
int DrawViewPart::addRandomVertex(Base::Vector3d pos)
{
// Base::Console().Message("DVP::addRandomVertex(%s)\n", DrawUtil::formatVector(pos).c_str());
int newIdx = -1;
TechDraw::CosmeticVertex* rVert = new TechDraw::CosmeticVertex(pos);
cosmoVertex.push_back(rVert);
//stuff stringList
std::vector<std::string> saveVerts;
const std::vector<TechDraw::CosmeticVertex*> cosVerts = getCosmeticVertex();
for (auto& cv: cosVerts) {
std::string csv = cv->toCSV();
saveVerts.push_back(csv);
}
CosmeticVertexList.setValues(saveVerts);
Base::Console().Message("DVP::addRandomVertex - saveVerts: %d \n",saveVerts.size());
return newIdx;
}
TechDraw::CosmeticVertex* DrawViewPart::getCosmeticVertexByIndex(int idx) const
{
// Base::Console().Message("DVP::getCosmeticVertexByIndex(%d)\n", idx);
int cosmoOffset = 1000;
int realIdx = idx - cosmoOffset;
CosmeticVertex* result = nullptr;
const std::vector<TechDraw::CosmeticVertex*> verts = getCosmeticVertex();
if ((unsigned) realIdx < verts.size()) {
result = verts.at(realIdx);
}
return result;
}
//find the cosmetic vertex corresponding to geometry vertex idx
TechDraw::CosmeticVertex* DrawViewPart::getCosmeticVertexByLink(int idx) const
{
// Base::Console().Message("DVP::getVosmeticVertexByLinkIndex(%d)\n", idx);
CosmeticVertex* result = nullptr;
const std::vector<TechDraw::CosmeticVertex*> verts = getCosmeticVertex();
for (auto& cv: verts) {
if (cv->linkGeom == idx) {
result = cv;
break;
}
}
return result;
}
void DrawViewPart::clearCV(void)
{
Base::Console().Message("DVP::clearCV()\n");
cosmoVertex.clear();
std::vector<std::string> noVerts;
CosmeticVertexList.setValues(noVerts);
}
PyObject *DrawViewPart::getPyObject(void)
{
if (PythonObject.is(Py::_None())) {
+15 -1
View File
@@ -68,6 +68,7 @@ class DrawProjectSplit;
class DrawViewSection;
class DrawViewDetail;
class DrawViewBalloon;
class CosmeticVertex;
}
namespace TechDraw
@@ -101,6 +102,8 @@ public:
App::PropertyBool IsoHidden;
App::PropertyInteger IsoCount;
App::PropertyStringList CosmeticVertexList;
std::vector<TechDraw::DrawHatch*> getHatches(void) const;
std::vector<TechDraw::DrawGeomHatch*> getGeomHatches(void) const;
std::vector<TechDraw::DrawViewDimension*> getDimensions() const;
@@ -136,7 +139,7 @@ public:
const bool flip=true) const;
virtual short mustExecute() const;
/* virtual void onDocumentRestored() override;*/
// virtual void onDocumentRestored() override;
bool handleFaces(void);
bool showSectionEdges(void);
@@ -162,6 +165,12 @@ public:
virtual TopoDS_Shape getSourceShapeFused(void) const;
bool isIso(void) const;
virtual int addRandomVertex(Base::Vector3d pos);
const std::vector<TechDraw::CosmeticVertex*> & getCosmeticVertex(void) const { return cosmoVertex; }
TechDraw::CosmeticVertex* getCosmeticVertexByIndex(int idx) const;
TechDraw::CosmeticVertex* getCosmeticVertexByLink(int idx) const;
void clearCV(void);
protected:
TechDrawGeometry::GeometryObject *geometryObject;
Base::BoundBox3d bbox;
@@ -183,8 +192,13 @@ protected:
bool m_sectionEdges;
bool m_handleFaces;
//Cosmetics
std::vector<TechDraw::CosmeticVertex*> cosmoVertex;
void rebuildCosmoVertex(void);
private:
bool nowUnsetting;
bool on1;
/* bool m_restoreComplete;*/
};
+5
View File
@@ -13,6 +13,11 @@
<Author Licence="LGPL" Name="WandererFan" EMail="[email protected]" />
<UserDocu>Feature for creating and manipulating Technical Drawing Part Views</UserDocu>
</Documentation>
<Methode Name="clearCV">
<Documentation>
<UserDocu>clearCV() - remove all CosmeticVertices from the View. Returns nothing.</UserDocu>
</Documentation>
</Methode>
<CustomAttributes />
</PythonExport>
</GenerateModel>
@@ -15,6 +15,14 @@ std::string DrawViewPartPy::representation(void) const
return std::string("<DrawViewPart object>");
}
PyObject* DrawViewPartPy::clearCV(PyObject *args)
{
(void) args;
DrawViewPart* item = getDrawViewPartPtr();
item->clearCV();
Py_INCREF(Py_None);
return Py_None;
}
PyObject *DrawViewPartPy::getCustomAttributes(const char* /*attr*/) const
{
+7 -2
View File
@@ -67,11 +67,14 @@
#include <Base/Console.h>
#include <Base/Exception.h>
#include <Base/Tools2D.h>
#include <Base/Parameter.h>
#include <Mod/Part/App/Geometry.h>
#include <App/Application.h>
#include <App/Material.h>
#include "DrawUtil.h"
#include "Geometry.h"
#include "DrawUtil.h"
using namespace TechDrawGeometry;
using namespace TechDraw;
@@ -955,3 +958,5 @@ BaseGeomPtrVector GeometryUtils::chainGeoms(BaseGeomPtrVector geoms)
}
return result;
}
+9
View File
@@ -472,6 +472,15 @@ void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass ca
} //end TopExp
}
int GeometryObject::addRandomVertex(Base::Vector3d pos)
{
// Base::Console().Message("GO::addRandomVertex(%s)\n",DrawUtil::formatVector(pos).c_str());
TechDrawGeometry::Vertex* v = new TechDrawGeometry::Vertex(pos.x, - pos.y);
vertexGeom.push_back(v);
int idx = vertexGeom.size() - 1;
return idx;
}
//! empty Face geometry
void GeometryObject::clearFaceGeom()
{
+3
View File
@@ -125,6 +125,9 @@ public:
TopoDS_Shape getHidSeam(void) { return hidSeam; }
TopoDS_Shape getHidIso(void) { return hidIso; }
int addRandomVertex(Base::Vector3d pos);
protected:
//HLR output
TopoDS_Shape visHard;
+2
View File
@@ -64,6 +64,7 @@
void CreateTechDrawCommands(void);
void CreateTechDrawCommandsDims(void);
void CreateTechDrawCommandsDecorate(void);
void CreateTechDrawCommandsAnnotate(void);
void loadTechDrawResource()
{
@@ -108,6 +109,7 @@ PyMOD_INIT_FUNC(TechDrawGui)
CreateTechDrawCommands();
CreateTechDrawCommandsDims();
CreateTechDrawCommandsDecorate();
CreateTechDrawCommandsAnnotate();
TechDrawGui::Workbench::init();
+8 -1
View File
@@ -41,6 +41,7 @@ set(TechDrawGui_MOC_HDRS
TaskGeomHatch.h
TaskLeaderLine.h
TaskRichAnno.h
TaskCosVertex.h
QGEPath.h
QGTracker.h
QGILeaderLine.h
@@ -72,7 +73,8 @@ set(TechDrawGui_UIC_SRCS
TaskRichAnno.ui
mrichtextedit.ui
TaskBalloon.ui
)
TaskCosVertex.ui
)
if(BUILD_QT5)
qt5_wrap_ui(TechDrawGui_UIC_HDRS ${TechDrawGui_UIC_SRCS})
@@ -102,6 +104,7 @@ SET(TechDrawGui_SRCS
Command.cpp
CommandCreateDims.cpp
CommandDecorate.cpp
CommandAnnotate.cpp
Resources/TechDraw.qrc
PreCompiled.cpp
PreCompiled.h
@@ -137,6 +140,9 @@ SET(TechDrawGui_SRCS
TaskRichAnno.ui
TaskRichAnno.cpp
TaskRichAnno.h
TaskCosVertex.ui
TaskCosVertex.cpp
TaskCosVertex.h
DrawGuiUtil.cpp
DrawGuiUtil.h
Rez.cpp
@@ -285,6 +291,7 @@ SET(TechDrawGuiTaskDlgs_SRCS
TaskGeomHatch.ui
TaskLeaderLine.ui
TaskRichAnno.ui
TaskCosVertex.ui
mrichtextedit.ui
TaskBalloon.ui
)
+1 -44
View File
@@ -63,7 +63,6 @@
#include <Mod/TechDraw/App/DrawViewDimension.h>
#include <Mod/TechDraw/App/DrawViewBalloon.h>
#include <Mod/TechDraw/App/DrawViewClip.h>
#include <Mod/TechDraw/App/DrawViewAnnotation.h>
#include <Mod/TechDraw/App/DrawViewSymbol.h>
#include <Mod/TechDraw/App/DrawViewDraft.h>
#include <Mod/TechDraw/App/DrawViewMulti.h>
@@ -641,46 +640,6 @@ bool CmdTechDrawProjGroup::isActive(void)
// return DrawGuiUtil::needPage(this);
//}
//===========================================================================
// TechDraw_Annotation
//===========================================================================
DEF_STD_CMD_A(CmdTechDrawAnnotation);
CmdTechDrawAnnotation::CmdTechDrawAnnotation()
: Command("TechDraw_Annotation")
{
// setting the Gui eye-candy
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Insert Annotation");
sToolTipText = QT_TR_NOOP("Insert Annotation");
sWhatsThis = "TechDraw_NewAnnotation";
sStatusTip = sToolTipText;
sPixmap = "actions/techdraw-annotation";
}
void CmdTechDrawAnnotation::activated(int iMsg)
{
Q_UNUSED(iMsg);
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
std::string PageName = page->getNameInDocument();
std::string FeatName = getUniqueObjectName("Annotation");
openCommand("Create Annotation");
doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewAnnotation','%s')",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str());
updateActive();
commitCommand();
}
bool CmdTechDrawAnnotation::isActive(void)
{
return DrawGuiUtil::needPage(this);
}
//===========================================================================
// TechDraw_NewBalloon
//===========================================================================
@@ -1292,8 +1251,6 @@ bool CmdTechDrawExportPageDxf::isActive(void)
return DrawGuiUtil::needPage(this);
}
void CreateTechDrawCommands(void)
{
Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager();
@@ -1305,7 +1262,7 @@ void CreateTechDrawCommands(void)
rcCmdMgr.addCommand(new CmdTechDrawNewViewDetail());
// rcCmdMgr.addCommand(new CmdTechDrawNewMulti()); //deprecated
rcCmdMgr.addCommand(new CmdTechDrawProjGroup());
rcCmdMgr.addCommand(new CmdTechDrawAnnotation());
// rcCmdMgr.addCommand(new CmdTechDrawAnnotation());
rcCmdMgr.addCommand(new CmdTechDrawClip());
rcCmdMgr.addCommand(new CmdTechDrawClipPlus());
rcCmdMgr.addCommand(new CmdTechDrawClipMinus());
+406
View File
@@ -0,0 +1,406 @@
/***************************************************************************
* Copyright (c) 2019 WandererFan <[email protected]> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#include "PreCompiled.h"
#ifndef _PreComp_
# include <QMessageBox>
# include <iostream>
# include <string>
# include <sstream>
# include <cstdlib>
# include <exception>
#endif //#ifndef _PreComp_
#include <QGraphicsView>
# include <App/DocumentObject.h>
# include <Gui/Action.h>
# include <Gui/Application.h>
# include <Gui/BitmapFactory.h>
# include <Gui/Command.h>
# include <Gui/Control.h>
# include <Gui/Document.h>
# include <Gui/Selection.h>
# include <Gui/MainWindow.h>
# include <Gui/FileDialog.h>
# include <Gui/ViewProvider.h>
# include <Mod/Part/App/PartFeature.h>
#include <Mod/TechDraw/App/DrawView.h>
#include <Mod/TechDraw/App/DrawViewPart.h>
#include <Mod/TechDraw/App/DrawViewAnnotation.h>
#include <Mod/TechDraw/App/DrawPage.h>
#include <Mod/TechDraw/App/DrawUtil.h>
#include <Mod/TechDraw/Gui/QGVPage.h>
#include "DrawGuiUtil.h"
#include "MDIViewPage.h"
#include "TaskLeaderLine.h"
#include "TaskRichAnno.h"
#include "TaskCosVertex.h"
#include "ViewProviderPage.h"
using namespace TechDrawGui;
using namespace std;
//internal functions
bool _checkSelectionHatch(Gui::Command* cmd);
//===========================================================================
// TechDraw_Leader
//===========================================================================
DEF_STD_CMD_A(CmdTechDrawLeaderLine);
CmdTechDrawLeaderLine::CmdTechDrawLeaderLine()
: Command("TechDraw_LeaderLine")
{
sAppModule = "TechDraw";
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Add a line to a view");
sToolTipText = QT_TR_NOOP("Add a line to a view");
sWhatsThis = "TechDraw_LeaderLine";
sStatusTip = sToolTipText;
sPixmap = "actions/techdraw-mline";
}
void CmdTechDrawLeaderLine::activated(int iMsg)
{
Q_UNUSED(iMsg);
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
if (dlg != nullptr) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
QObject::tr("Close active task dialog and try again."));
return;
}
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx();
TechDraw::DrawView* baseFeat = nullptr;
if (!selection.empty()) {
baseFeat = dynamic_cast<TechDraw::DrawView *>(selection[0].getObject());
if( baseFeat == nullptr ) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
QObject::tr("Can not attach leader. No base View selected."));
return;
}
} else {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
QObject::tr("You must select a base View for the line."));
return;
}
Gui::Control().showDialog(new TechDrawGui::TaskDlgLeaderLine(baseFeat,
page));
}
bool CmdTechDrawLeaderLine::isActive(void)
{
bool havePage = DrawGuiUtil::needPage(this);
bool haveView = DrawGuiUtil::needView(this, false);
return (havePage && haveView);
}
//===========================================================================
// TechDraw_RichAnno
//===========================================================================
DEF_STD_CMD_A(CmdTechDrawRichAnno);
CmdTechDrawRichAnno::CmdTechDrawRichAnno()
: Command("TechDraw_RichAnno")
{
sAppModule = "TechDraw";
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Add a rich text annotation");
sToolTipText = QT_TR_NOOP("Add a rich text annotation");
sWhatsThis = "TechDraw_RichAnno";
sStatusTip = sToolTipText;
sPixmap = "actions/techdraw-textleader";
}
void CmdTechDrawRichAnno::activated(int iMsg)
{
Q_UNUSED(iMsg);
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
if (dlg != nullptr) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
QObject::tr("Close active task dialog and try again."));
return;
}
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx();
TechDraw::DrawView* baseFeat = nullptr;
if (!selection.empty()) {
baseFeat = dynamic_cast<TechDraw::DrawView *>(selection[0].getObject());
// if( baseFeat == nullptr ) {
// QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
// QObject::tr("Can not attach leader. No base View selected."));
// return;
// }
// } else {
// QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
// QObject::tr("You must select a base View for the line."));
// return;
}
Gui::Control().showDialog(new TaskDlgRichAnno(baseFeat,
page));
}
bool CmdTechDrawRichAnno::isActive(void)
{
bool havePage = DrawGuiUtil::needPage(this);
bool haveView = DrawGuiUtil::needView(this, false);
return (havePage && haveView);
}
//===========================================================================
// TechDraw_CosmeticVertex
//===========================================================================
DEF_STD_CMD_A(CmdTechDrawCosmeticVertex);
CmdTechDrawCosmeticVertex::CmdTechDrawCosmeticVertex()
: Command("TechDraw_CosmeticVertex")
{
sAppModule = "TechDraw";
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Add a cosmetic vertex");
sToolTipText = QT_TR_NOOP("Add a cosmetic vertex");
sWhatsThis = "TechDraw_CosmeticVertex";
sStatusTip = sToolTipText;
sPixmap = "actions/techdraw-point";
}
void CmdTechDrawCosmeticVertex::activated(int iMsg)
{
Q_UNUSED(iMsg);
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
if (dlg != nullptr) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
QObject::tr("Close active task dialog and try again."));
return;
}
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
std::vector<App::DocumentObject*> shapes = getSelection().
getObjectsOfType(TechDraw::DrawViewPart::getClassTypeId());
if (shapes.empty()) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
QObject::tr("No DrawViewPart objects in this selection"));
return;
}
TechDraw::DrawViewPart* baseFeat = nullptr;
baseFeat = dynamic_cast<TechDraw::DrawViewPart*>((*shapes.begin()));
if (baseFeat == nullptr) {
Base::Console().Message("CMD::CosmeticVertex - 1st shape is not DVP. WTF?\n");
return;
}
Gui::Control().showDialog(new TaskDlgCosVertex(baseFeat,
page));
}
bool CmdTechDrawCosmeticVertex::isActive(void)
{
bool havePage = DrawGuiUtil::needPage(this);
bool haveView = DrawGuiUtil::needView(this, false);
return (havePage && haveView);
}
//===========================================================================
// TechDraw_Midpoints
//===========================================================================
DEF_STD_CMD_A(CmdTechDrawMidpoints);
CmdTechDrawMidpoints::CmdTechDrawMidpoints()
: Command("TechDraw_Midpoints")
{
sAppModule = "TechDraw";
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Add midpoint vertices");
sToolTipText = QT_TR_NOOP("Add midpoint vertices");
sWhatsThis = "TechDraw_Midpoints";
sStatusTip = sToolTipText;
sPixmap = "actions/techdraw-midpoint";
}
void CmdTechDrawMidpoints::activated(int iMsg)
{
Q_UNUSED(iMsg);
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
if (dlg != nullptr) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
QObject::tr("Close active task dialog and try again."));
return;
}
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx();
// TechDraw::DrawView* baseFeat = nullptr;
// if (!selection.empty()) {
// baseFeat = dynamic_cast<TechDraw::DrawView *>(selection[0].getObject());
// }
// Gui::Control().showDialog(new TaskDlgMidpoints(baseFeat,
// page));
Base::Console().Message("CMD::Midpoints - start dialog here!\n");
}
bool CmdTechDrawMidpoints::isActive(void)
{
bool havePage = DrawGuiUtil::needPage(this);
bool haveView = DrawGuiUtil::needView(this, false);
return (havePage && haveView);
}
//===========================================================================
// TechDraw_Quadrant
//===========================================================================
DEF_STD_CMD_A(CmdTechDrawQuadrant);
CmdTechDrawQuadrant::CmdTechDrawQuadrant()
: Command("TechDraw_Quadrant")
{
sAppModule = "TechDraw";
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Add quadrant vertices");
sToolTipText = QT_TR_NOOP("Add quadrant vertices");
sWhatsThis = "TechDraw_Quadrant";
sStatusTip = sToolTipText;
sPixmap = "actions/techdraw-quadrant";
}
void CmdTechDrawQuadrant::activated(int iMsg)
{
Q_UNUSED(iMsg);
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
if (dlg != nullptr) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
QObject::tr("Close active task dialog and try again."));
return;
}
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx();
// TechDraw::DrawView* baseFeat = nullptr;
// if (!selection.empty()) {
// baseFeat = dynamic_cast<TechDraw::DrawView *>(selection[0].getObject());
// }
// Gui::Control().showDialog(new TaskDlgQuadrant(baseFeat,
// page));
Base::Console().Message("CMD::Quadrant - start dialog here!\n");
}
bool CmdTechDrawQuadrant::isActive(void)
{
bool havePage = DrawGuiUtil::needPage(this);
bool haveView = DrawGuiUtil::needView(this, false);
return (havePage && haveView);
}
//===========================================================================
// TechDraw_Annotation
//===========================================================================
DEF_STD_CMD_A(CmdTechDrawAnnotation);
CmdTechDrawAnnotation::CmdTechDrawAnnotation()
: Command("TechDraw_Annotation")
{
// setting the Gui eye-candy
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Insert Annotation");
sToolTipText = QT_TR_NOOP("Insert Annotation");
sWhatsThis = "TechDraw_NewAnnotation";
sStatusTip = sToolTipText;
sPixmap = "actions/techdraw-annotation";
}
void CmdTechDrawAnnotation::activated(int iMsg)
{
Q_UNUSED(iMsg);
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
std::string PageName = page->getNameInDocument();
std::string FeatName = getUniqueObjectName("Annotation");
openCommand("Create Annotation");
doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewAnnotation','%s')",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str());
updateActive();
commitCommand();
}
bool CmdTechDrawAnnotation::isActive(void)
{
return DrawGuiUtil::needPage(this);
}
void CreateTechDrawCommandsAnnotate(void)
{
Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager();
rcCmdMgr.addCommand(new CmdTechDrawLeaderLine());
rcCmdMgr.addCommand(new CmdTechDrawRichAnno());
rcCmdMgr.addCommand(new CmdTechDrawCosmeticVertex());
rcCmdMgr.addCommand(new CmdTechDrawMidpoints());
rcCmdMgr.addCommand(new CmdTechDrawQuadrant());
rcCmdMgr.addCommand(new CmdTechDrawAnnotation());
}
//===========================================================================
// Selection Validation Helpers
//===========================================================================
+103 -103
View File
@@ -69,103 +69,44 @@ using namespace std;
//internal functions
bool _checkSelectionHatch(Gui::Command* cmd);
//===========================================================================
// TechDraw_Leader
//===========================================================================
////===========================================================================
//// TechDraw_Leader
////===========================================================================
DEF_STD_CMD_A(CmdTechDrawLeaderLine);
//DEF_STD_CMD_A(CmdTechDrawLeaderLine);
CmdTechDrawLeaderLine::CmdTechDrawLeaderLine()
: Command("TechDraw_LeaderLine")
{
sAppModule = "TechDraw";
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Add a line to a view");
sToolTipText = QT_TR_NOOP("Add a line to a view");
sWhatsThis = "TechDraw_LeaderLine";
sStatusTip = sToolTipText;
sPixmap = "actions/techdraw-mline";
}
//CmdTechDrawLeaderLine::CmdTechDrawLeaderLine()
// : Command("TechDraw_LeaderLine")
//{
// sAppModule = "TechDraw";
// sGroup = QT_TR_NOOP("TechDraw");
// sMenuText = QT_TR_NOOP("Add a line to a view");
// sToolTipText = QT_TR_NOOP("Add a line to a view");
// sWhatsThis = "TechDraw_LeaderLine";
// sStatusTip = sToolTipText;
// sPixmap = "actions/techdraw-mline";
//}
void CmdTechDrawLeaderLine::activated(int iMsg)
{
Q_UNUSED(iMsg);
//void CmdTechDrawLeaderLine::activated(int iMsg)
//{
// Q_UNUSED(iMsg);
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
if (dlg != nullptr) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
QObject::tr("Close active task dialog and try again."));
return;
}
// Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
// if (dlg != nullptr) {
// QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
// QObject::tr("Close active task dialog and try again."));
// return;
// }
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
// TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
// if (!page) {
// return;
// }
std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx();
TechDraw::DrawView* baseFeat = nullptr;
if (!selection.empty()) {
baseFeat = dynamic_cast<TechDraw::DrawView *>(selection[0].getObject());
if( baseFeat == nullptr ) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
QObject::tr("Can not attach leader. No base View selected."));
return;
}
} else {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
QObject::tr("You must select a base View for the line."));
return;
}
Gui::Control().showDialog(new TechDrawGui::TaskDlgLeaderLine(baseFeat,
page));
}
bool CmdTechDrawLeaderLine::isActive(void)
{
bool havePage = DrawGuiUtil::needPage(this);
bool haveView = DrawGuiUtil::needView(this, false);
return (havePage && haveView);
}
//===========================================================================
// TechDraw_RichAnno
//===========================================================================
DEF_STD_CMD_A(CmdTechDrawRichAnno);
CmdTechDrawRichAnno::CmdTechDrawRichAnno()
: Command("TechDraw_RichAnno")
{
sAppModule = "TechDraw";
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Add a rich text annotation");
sToolTipText = QT_TR_NOOP("Add a rich text annotation");
sWhatsThis = "TechDraw_RichAnno";
sStatusTip = sToolTipText;
sPixmap = "actions/techdraw-textleader";
}
void CmdTechDrawRichAnno::activated(int iMsg)
{
Q_UNUSED(iMsg);
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
if (dlg != nullptr) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
QObject::tr("Close active task dialog and try again."));
return;
}
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx();
TechDraw::DrawView* baseFeat = nullptr;
if (!selection.empty()) {
baseFeat = dynamic_cast<TechDraw::DrawView *>(selection[0].getObject());
// std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx();
// TechDraw::DrawView* baseFeat = nullptr;
// if (!selection.empty()) {
// baseFeat = dynamic_cast<TechDraw::DrawView *>(selection[0].getObject());
// if( baseFeat == nullptr ) {
// QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
// QObject::tr("Can not attach leader. No base View selected."));
@@ -175,18 +116,77 @@ void CmdTechDrawRichAnno::activated(int iMsg)
// QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
// QObject::tr("You must select a base View for the line."));
// return;
}
// }
Gui::Control().showDialog(new TaskDlgRichAnno(baseFeat,
page));
}
// Gui::Control().showDialog(new TechDrawGui::TaskDlgLeaderLine(baseFeat,
// page));
//}
bool CmdTechDrawRichAnno::isActive(void)
{
bool havePage = DrawGuiUtil::needPage(this);
bool haveView = DrawGuiUtil::needView(this, false);
return (havePage && haveView);
}
//bool CmdTechDrawLeaderLine::isActive(void)
//{
// bool havePage = DrawGuiUtil::needPage(this);
// bool haveView = DrawGuiUtil::needView(this, false);
// return (havePage && haveView);
//}
////===========================================================================
//// TechDraw_RichAnno
////===========================================================================
//DEF_STD_CMD_A(CmdTechDrawRichAnno);
//CmdTechDrawRichAnno::CmdTechDrawRichAnno()
// : Command("TechDraw_RichAnno")
//{
// sAppModule = "TechDraw";
// sGroup = QT_TR_NOOP("TechDraw");
// sMenuText = QT_TR_NOOP("Add a rich text annotation");
// sToolTipText = QT_TR_NOOP("Add a rich text annotation");
// sWhatsThis = "TechDraw_RichAnno";
// sStatusTip = sToolTipText;
// sPixmap = "actions/techdraw-textleader";
//}
//void CmdTechDrawRichAnno::activated(int iMsg)
//{
// Q_UNUSED(iMsg);
// Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
// if (dlg != nullptr) {
// QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Task In Progress"),
// QObject::tr("Close active task dialog and try again."));
// return;
// }
// TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
// if (!page) {
// return;
// }
// std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx();
// TechDraw::DrawView* baseFeat = nullptr;
// if (!selection.empty()) {
// baseFeat = dynamic_cast<TechDraw::DrawView *>(selection[0].getObject());
//// if( baseFeat == nullptr ) {
//// QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
//// QObject::tr("Can not attach leader. No base View selected."));
//// return;
//// }
//// } else {
//// QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"),
//// QObject::tr("You must select a base View for the line."));
//// return;
// }
// Gui::Control().showDialog(new TaskDlgRichAnno(baseFeat,
// page));
//}
//bool CmdTechDrawRichAnno::isActive(void)
//{
// bool havePage = DrawGuiUtil::needPage(this);
// bool haveView = DrawGuiUtil::needView(this, false);
// return (havePage && haveView);
//}
//===========================================================================
// TechDraw_NewHatch
@@ -469,8 +469,8 @@ void CreateTechDrawCommandsDecorate(void)
rcCmdMgr.addCommand(new CmdTechDrawImage());
rcCmdMgr.addCommand(new CmdTechDrawToggleFrame());
// rcCmdMgr.addCommand(new CmdTechDrawRedrawPage());
rcCmdMgr.addCommand(new CmdTechDrawLeaderLine());
rcCmdMgr.addCommand(new CmdTechDrawRichAnno());
// rcCmdMgr.addCommand(new CmdTechDrawLeaderLine());
// rcCmdMgr.addCommand(new CmdTechDrawRichAnno());
}
//===========================================================================
+51 -2
View File
@@ -50,6 +50,7 @@
#include <Base/Vector3D.h>
#include <Gui/ViewProvider.h>
#include <Mod/TechDraw/App/DrawView.h>
#include <Mod/TechDraw/App/DrawUtil.h>
#include <Mod/TechDraw/App/DrawViewPart.h>
#include <Mod/TechDraw/App/DrawViewSection.h>
@@ -57,6 +58,8 @@
#include <Mod/TechDraw/App/DrawGeomHatch.h>
#include <Mod/TechDraw/App/DrawViewDetail.h>
#include <Mod/TechDraw/App/DrawProjGroupItem.h>
#include <Mod/TechDraw/App/Geometry.h>
#include <Mod/TechDraw/App/Cosmetic.h>
#include "Rez.h"
#include "ZVALUE.h"
@@ -77,6 +80,7 @@
#include "ViewProviderViewPart.h"
#include "MDIViewPage.h"
using namespace TechDraw;
using namespace TechDrawGui;
using namespace TechDrawGeometry;
@@ -458,6 +462,23 @@ void QGIViewPart::drawViewPart()
// dumpPath(edgeId.str().c_str(),edgePath);
}
}
// Draw Cosmetic Edges
// int cosmoEdgeStart = 1000;
// const std::vector<TechDrawGreometry::CosmeticEdge *> &cEdges = viewPart->getEdgeCosmetic();
// std::vector<TechDrawGreometry::CosmeticEdge *>::const_iterator itcEdge = cEdges.begin();
// QGIEdge* item;
// for(int i = 0 ; itcEdge != cEdges.end(); itcEdge++, i++) {
// item = new QGIEdge(cosmoEdgeStart + i);
// addToGroup(item);
// item->setPos(0.0,0.0);
//// item->setPath(drawPainterPath(*itcEdge)); //this won't work
// item->setWidth((*itcEdge)->width);
// item->setColor((*itcEdge)->color.asValue<QColor>();
// item->setZValue(ZVALUE::EDGE);
// item->setPrettyNormal();
//
// }
// Draw Vertexs:
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().GetGroup("BaseApp")->
@@ -487,14 +508,42 @@ void QGIViewPart::drawViewPart()
}
} else if(!usePolygonHLR){ //Disable dots WHEN usePolygonHLR
QGIVertex *item = new QGIVertex(i);
item->setNormalColor(vertexColor);
TechDraw::CosmeticVertex* cv = viewPart->getCosmeticVertexByLink(i);
if (cv != nullptr) {
Base::Console().Message("QGIVP::draw - found a cv!\n");
cv->dump("QGIVP::draw");
// item->setNormalColor(vertexColor);
item->setNormalColor(cv->color.asValue<QColor>());
item->setRadius(cv->size);
// item->setRadius(lineWidth * vertexScaleFactor);
// item->setStyle(cv->style);
} else {
item->setNormalColor(vertexColor);
item->setRadius(lineWidth * vertexScaleFactor);
}
item->setPrettyNormal();
addToGroup(item);
item->setPos(Rez::guiX((*vert)->pnt.x), Rez::guiX((*vert)->pnt.y));
item->setRadius(lineWidth * vertexScaleFactor);
item->setZValue(ZVALUE::VERTEX);
}
}
// //draw cosmetic vertices
// int cosmoVertStart = 1000;
// std::vector<CosmeticVertex*> cVerts = viewPart->getCosmeticVertex();
// Base::Console().Message("QGIVP::draw - %s - cVerts: %d\n",getViewName(),cVerts.size());
// std::vector<CosmeticVertex*>::const_iterator itcVert = cVerts.begin();
// for(int i = 0 ; itcVert != cVerts.end(); ++itcVert, i++) {
// QGIVertex *item = new QGIVertex(cosmoVertStart + i);
// item->setNormalColor((*itcVert)->color.asValue<QColor>());
// item->setPrettyNormal();
// addToGroup(item);
// //TODO: need to apply scale to position unless position is already scaled
// item->setPos(Rez::guiX((*itcVert)->pageLocation.x), - Rez::guiX((*itcVert)->pageLocation.y));
// item->setRadius((*itcVert)->size);
// item->setStyle((Qt::PenStyle)(*itcVert)->style);
// item->setZValue(ZVALUE::VERTEX);
// Base::Console().Message("QGIVP::draw - cVert.toCSV: %s \n",(*itcVert)->toCSV().c_str());
// }
}
//draw detail highlights
+1
View File
@@ -35,6 +35,7 @@ class DrawViewSection;
class DrawHatch;
class DrawGeomHatch;
class DrawViewDetail;
class DrawView;
}
namespace TechDrawGui
+15 -7
View File
@@ -181,7 +181,7 @@ void QGTracker::hoverMoveEvent(QGraphicsSceneHoverEvent* event)
void QGTracker::keyPressEvent(QKeyEvent * event)
{
// Base::Console().Message("QGT::keyPressEvent()\n");
Base::Console().Message("QGT::keyPressEvent()\n");
if (event->key() == Qt::Key_Escape) {
terminateDrawing();
}
@@ -237,6 +237,7 @@ QPointF QGTracker::snapToAngle(QPointF dumbPt)
//mouse event reactions
void QGTracker::onMousePress(QPointF pos)
{
Base::Console().Message("QGT::onMousePress(%s)\n", TechDraw::DrawUtil::formatVector(pos).c_str());
m_points.push_back(pos);
TrackerMode mode = getTrackerMode();
if (m_points.size() > 1) {
@@ -254,18 +255,21 @@ void QGTracker::onMousePress(QPointF pos)
break;
case TrackerMode::Point:
//do nothing
// setPoint(m_points);
break;
}
} else if (m_points.size() == 1) { //first point selected
} else if (m_points.size() == 1) { //first point selected
Base::Console().Message("QGT::onMousePress - m_points.size == 1\n");
getPickedQGIV(pos);
setCursor(Qt::CrossCursor);
Q_EMIT qViewPicked(pos, m_qgParent);
// Q_EMIT qViewPicked(pos, m_qgParent); //not in use yet.
if (mode == TrackerMode::Point) {
Base::Console().Message("QGT::onMousePress - mode = Point\n");
setPoint(m_points);
terminateDrawing();
}
}
if ( (m_points.size() == 2) &&
( (getTrackerMode() == TrackerMode::Circle) ||
(getTrackerMode() == TrackerMode::Rectangle) ) ) { //only 2 points for square/circle
@@ -297,8 +301,12 @@ void QGTracker::onMouseMove(QPointF pos)
void QGTracker::onDoubleClick(QPointF pos)
{
// Base::Console().Message("QGTracker::onDoubleClick()\n");
Base::Console().Message("QGTracker::onDoubleClick()\n");
Q_UNUSED(pos);
TrackerMode mode = getTrackerMode();
if (mode == TrackerMode::Point) {
setPoint(m_points);
}
terminateDrawing();
}
@@ -448,7 +456,7 @@ void QGTracker::setPoint(std::vector<QPointF> pts)
prepareGeometryChange();
QPainterPath newPath;
QPointF center = pts.front();
double radius = 5.0;
double radius = 50.0;
newPath.addEllipse(center, radius, radius);
setPath(newPath);
setPrettyNormal();
@@ -466,7 +474,7 @@ std::vector<Base::Vector3d> QGTracker::convertPoints(void)
void QGTracker::terminateDrawing(void)
{
// Base::Console().Message("QGTracker::terminateDrawing()\n");
Base::Console().Message("QGTracker::terminateDrawing()\n");
m_track->hide();
setCursor(Qt::ArrowCursor);
Q_EMIT drawingFinished(m_points, m_qgParent);
@@ -63,6 +63,8 @@
<file>icons/actions/techdraw-mline.svg</file>
<file>icons/actions/techdraw-textleader.svg</file>
<file>icons/actions/techdraw-point.svg</file>
<file>icons/actions/techdraw-midpoint.svg</file>
<file>icons/actions/techdraw-quadrant.svg</file>
<file>icons/actions/section-up.svg</file>
<file>icons/actions/section-down.svg</file>
<file>icons/actions/section-left.svg</file>
@@ -1,123 +1,716 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg2985" version="1.1" inkscape:version="0.48.5 r10040" sodipodi:docname="TechDraw_Tree_Annotation.svg">
<defs id="defs2987">
<linearGradient id="linearGradient3883">
<stop style="stop-color:#ffb400;stop-opacity:1;" offset="0" id="stop3885"/>
<stop style="stop-color:#ffe900;stop-opacity:1;" offset="1" id="stop3887"/>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2985"
version="1.1"
inkscape:version="0.92.4 (unknown)"
sodipodi:docname="techdraw-annotation.svg">
<defs
id="defs2987">
<linearGradient
id="linearGradient3883">
<stop
style="stop-color:#ffb400;stop-opacity:1;"
offset="0"
id="stop3885" />
<stop
style="stop-color:#ffe900;stop-opacity:1;"
offset="1"
id="stop3887" />
</linearGradient>
<linearGradient id="linearGradient3793">
<stop style="stop-color:#000f8a;stop-opacity:1;" offset="0" id="stop3795"/>
<stop style="stop-color:#0066ff;stop-opacity:1;" offset="1" id="stop3797"/>
<linearGradient
id="linearGradient3793">
<stop
style="stop-color:#000f8a;stop-opacity:1;"
offset="0"
id="stop3795" />
<stop
style="stop-color:#0066ff;stop-opacity:1;"
offset="1"
id="stop3797" />
</linearGradient>
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3793-2" id="linearGradient3799-8" x1="12.037806" y1="54.001419" x2="52.882648" y2="9.274148" gradientUnits="userSpaceOnUse"/>
<linearGradient id="linearGradient3793-2">
<stop style="stop-color:#000f8a;stop-opacity:1;" offset="0" id="stop3795-6"/>
<stop style="stop-color:#0066ff;stop-opacity:1;" offset="1" id="stop3797-0"/>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3793-2"
id="linearGradient3799-8"
x1="12.037806"
y1="54.001419"
x2="52.882648"
y2="9.274148"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3793-2">
<stop
style="stop-color:#000f8a;stop-opacity:1;"
offset="0"
id="stop3795-6" />
<stop
style="stop-color:#0066ff;stop-opacity:1;"
offset="1"
id="stop3797-0" />
</linearGradient>
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3883-6" id="linearGradient3889-4" x1="3" y1="31.671875" x2="59.25" y2="31.671875" gradientUnits="userSpaceOnUse" gradientTransform="translate(-1.2727273,-0.18181818)"/>
<linearGradient id="linearGradient3883-6">
<stop style="stop-color:#ffb400;stop-opacity:1;" offset="0" id="stop3885-4"/>
<stop style="stop-color:#ffe900;stop-opacity:1;" offset="1" id="stop3887-5"/>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3883-6"
id="linearGradient3889-4"
x1="3"
y1="31.671875"
x2="59.25"
y2="31.671875"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-1.2727273,-0.18181818)" />
<linearGradient
id="linearGradient3883-6">
<stop
style="stop-color:#ffb400;stop-opacity:1;"
offset="0"
id="stop3885-4" />
<stop
style="stop-color:#ffe900;stop-opacity:1;"
offset="1"
id="stop3887-5" />
</linearGradient>
<radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0526127,0,0,0.7540853,-19.699324,101.21241)" r="225.89062" fy="655.5625" fx="374.42188" cy="655.5625" cx="374.42188" id="radialGradient4475" xlink:href="#linearGradient3533" inkscape:collect="always"/>
<radialGradient r="149.30214" fy="315.40961" fx="298.10294" cy="315.40961" cx="298.10294" gradientTransform="matrix(1.131046,0,0,0.5900932,-22.100471,489.57569)" gradientUnits="userSpaceOnUse" id="radialGradient4466" xlink:href="#linearGradient3364" inkscape:collect="always"/>
<radialGradient r="149.30214" fy="315.40961" fx="298.10294" cy="315.40961" cx="298.10294" gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,282.3446)" gradientUnits="userSpaceOnUse" id="radialGradient4429" xlink:href="#linearGradient3364" inkscape:collect="always"/>
<radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.2871291,0,0,0.588703,-103.70783,273.98098)" r="143.60872" fy="641.82562" fx="361.18896" cy="641.82562" cx="361.18896" id="radialGradient3539" xlink:href="#linearGradient3533" inkscape:collect="always"/>
<radialGradient r="149.30214" fy="315.40961" fx="298.10294" cy="315.40961" cx="298.10294" gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,-17.655402)" gradientUnits="userSpaceOnUse" id="radialGradient3979" xlink:href="#linearGradient3364" inkscape:collect="always"/>
<radialGradient r="141.81195" fy="249.47238" fx="317.86237" cy="249.47238" cx="317.86237" spreadMethod="reflect" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,218.04449,-49.879453)" gradientUnits="userSpaceOnUse" id="radialGradient3976" xlink:href="#linearGradient6692" inkscape:collect="always"/>
<radialGradient r="130.08176" fy="309.10764" fx="298.66852" cy="309.10764" cx="298.66852" gradientTransform="matrix(0.2436217,0.8776417,-1.1344403,0.3149057,586.4121,-25.658023)" gradientUnits="userSpaceOnUse" id="radialGradient3969" xlink:href="#linearGradient3351" inkscape:collect="always"/>
<radialGradient r="149.30214" fy="315.40961" fx="298.10294" cy="315.40961" cx="298.10294" gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,-17.655402)" gradientUnits="userSpaceOnUse" id="radialGradient3813" xlink:href="#linearGradient3364" inkscape:collect="always"/>
<radialGradient r="141.81195" fy="249.47238" fx="317.86237" cy="249.47238" cx="317.86237" spreadMethod="reflect" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,218.04449,-49.879453)" gradientUnits="userSpaceOnUse" id="radialGradient3732" xlink:href="#linearGradient6692" inkscape:collect="always"/>
<radialGradient r="130.08176" fy="314.29395" fx="290.86432" cy="314.29395" cx="290.86432" gradientTransform="matrix(1.4674635,0,0,1.0734203,-127.41403,-8.614628)" gradientUnits="userSpaceOnUse" id="radialGradient3686" xlink:href="#linearGradient3351" inkscape:collect="always"/>
<radialGradient r="130.08176" fy="314.29395" fx="290.86432" cy="314.29395" cx="290.86432" gradientTransform="matrix(1.4674635,0,0,1.0734203,-134.66628,-8.6146276)" gradientUnits="userSpaceOnUse" id="radialGradient3396" xlink:href="#linearGradient3351" inkscape:collect="always"/>
<radialGradient r="141.81195" fy="249.47238" fx="317.86237" cy="249.47238" cx="317.86237" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,210.79224,-49.879453)" gradientUnits="userSpaceOnUse" id="radialGradient3394" xlink:href="#linearGradient6692" inkscape:collect="always"/>
<radialGradient r="149.30214" fy="315.40961" fx="298.10294" cy="315.40961" cx="298.10294" gradientTransform="matrix(1.131046,0,0,1.131204,-29.352716,-17.655402)" gradientUnits="userSpaceOnUse" id="radialGradient3392" xlink:href="#linearGradient3364" inkscape:collect="always"/>
<radialGradient r="179.50987" fy="365.75668" fx="318.06638" cy="365.75668" cx="318.06638" gradientTransform="matrix(1.0565445,0,0,0.5956187,-200.72763,179.91578)" gradientUnits="userSpaceOnUse" id="radialGradient3385" xlink:href="#linearGradient4328" inkscape:collect="always"/>
<radialGradient r="179.38509" fy="244.68217" fx="333.362" cy="244.68217" cx="333.362" gradientTransform="matrix(1.0565445,0,0,0.5952981,-200.72763,124.1879)" gradientUnits="userSpaceOnUse" id="radialGradient3383" xlink:href="#linearGradient4328" inkscape:collect="always"/>
<radialGradient r="179.50987" fy="365.75668" fx="318.06638" cy="365.75668" cx="318.06638" gradientTransform="matrix(1.0565445,0,0,0.5956187,-200.72763,179.91578)" gradientUnits="userSpaceOnUse" id="radialGradient3377" xlink:href="#linearGradient4328" inkscape:collect="always"/>
<radialGradient r="179.38509" fy="244.68217" fx="333.362" cy="244.68217" cx="333.362" gradientTransform="matrix(1.0565445,0,0,0.5952981,-200.72763,124.1879)" gradientUnits="userSpaceOnUse" id="radialGradient3375" xlink:href="#linearGradient4328" inkscape:collect="always"/>
<radialGradient r="141.81195" fy="249.47238" fx="317.86237" cy="249.47238" cx="317.86237" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,-0.1554987,-133.93797)" gradientUnits="userSpaceOnUse" id="radialGradient3373" xlink:href="#linearGradient6692" inkscape:collect="always"/>
<radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.131046,0,0,1.131204,-29.352716,-17.655402)" r="149.30214" fy="315.40961" fx="298.10294" cy="315.40961" cx="298.10294" id="radialGradient3361" xlink:href="#linearGradient3364" inkscape:collect="always"/>
<radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.4674635,0,0,1.0734203,-134.66628,-8.6146276)" r="130.08176" fy="314.29395" fx="290.86432" cy="314.29395" cx="290.86432" id="radialGradient3357" xlink:href="#linearGradient3351" inkscape:collect="always"/>
<radialGradient r="179.50987" fy="365.75668" fx="318.06638" cy="365.75668" cx="318.06638" gradientTransform="matrix(1.0565445,0,0,0.5956187,10.2201,263.97431)" gradientUnits="userSpaceOnUse" id="radialGradient2337" xlink:href="#linearGradient4328" inkscape:collect="always"/>
<linearGradient id="linearGradient4328">
<stop id="stop4330" offset="0" style="stop-color:#398fe5;stop-opacity:1;"/>
<stop id="stop4332" offset="1" style="stop-color:#0066cc;stop-opacity:1"/>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0526127,0,0,0.7540853,-19.699324,101.21241)"
r="225.89062"
fy="655.5625"
fx="374.42188"
cy="655.5625"
cx="374.42188"
id="radialGradient4475"
xlink:href="#linearGradient3533"
inkscape:collect="always" />
<radialGradient
r="149.30214"
fy="315.40961"
fx="298.10294"
cy="315.40961"
cx="298.10294"
gradientTransform="matrix(1.131046,0,0,0.5900932,-22.100471,489.57569)"
gradientUnits="userSpaceOnUse"
id="radialGradient4466"
xlink:href="#linearGradient3364"
inkscape:collect="always" />
<radialGradient
r="149.30214"
fy="315.40961"
fx="298.10294"
cy="315.40961"
cx="298.10294"
gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,282.3446)"
gradientUnits="userSpaceOnUse"
id="radialGradient4429"
xlink:href="#linearGradient3364"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.2871291,0,0,0.588703,-103.70783,273.98098)"
r="143.60872"
fy="641.82562"
fx="361.18896"
cy="641.82562"
cx="361.18896"
id="radialGradient3539"
xlink:href="#linearGradient3533"
inkscape:collect="always" />
<radialGradient
r="149.30214"
fy="315.40961"
fx="298.10294"
cy="315.40961"
cx="298.10294"
gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,-17.655402)"
gradientUnits="userSpaceOnUse"
id="radialGradient3979"
xlink:href="#linearGradient3364"
inkscape:collect="always" />
<radialGradient
r="141.81195"
fy="249.47238"
fx="317.86237"
cy="249.47238"
cx="317.86237"
spreadMethod="reflect"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,218.04449,-49.879453)"
gradientUnits="userSpaceOnUse"
id="radialGradient3976"
xlink:href="#linearGradient6692"
inkscape:collect="always" />
<radialGradient
r="130.08176"
fy="309.10764"
fx="298.66852"
cy="309.10764"
cx="298.66852"
gradientTransform="matrix(0.2436217,0.8776417,-1.1344403,0.3149057,586.4121,-25.658023)"
gradientUnits="userSpaceOnUse"
id="radialGradient3969"
xlink:href="#linearGradient3351"
inkscape:collect="always" />
<radialGradient
r="149.30214"
fy="315.40961"
fx="298.10294"
cy="315.40961"
cx="298.10294"
gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,-17.655402)"
gradientUnits="userSpaceOnUse"
id="radialGradient3813"
xlink:href="#linearGradient3364"
inkscape:collect="always" />
<radialGradient
r="141.81195"
fy="249.47238"
fx="317.86237"
cy="249.47238"
cx="317.86237"
spreadMethod="reflect"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,218.04449,-49.879453)"
gradientUnits="userSpaceOnUse"
id="radialGradient3732"
xlink:href="#linearGradient6692"
inkscape:collect="always" />
<radialGradient
r="130.08176"
fy="314.29395"
fx="290.86432"
cy="314.29395"
cx="290.86432"
gradientTransform="matrix(1.4674635,0,0,1.0734203,-127.41403,-8.614628)"
gradientUnits="userSpaceOnUse"
id="radialGradient3686"
xlink:href="#linearGradient3351"
inkscape:collect="always" />
<radialGradient
r="130.08176"
fy="314.29395"
fx="290.86432"
cy="314.29395"
cx="290.86432"
gradientTransform="matrix(1.4674635,0,0,1.0734203,-134.66628,-8.6146276)"
gradientUnits="userSpaceOnUse"
id="radialGradient3396"
xlink:href="#linearGradient3351"
inkscape:collect="always" />
<radialGradient
r="141.81195"
fy="249.47238"
fx="317.86237"
cy="249.47238"
cx="317.86237"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,210.79224,-49.879453)"
gradientUnits="userSpaceOnUse"
id="radialGradient3394"
xlink:href="#linearGradient6692"
inkscape:collect="always" />
<radialGradient
r="149.30214"
fy="315.40961"
fx="298.10294"
cy="315.40961"
cx="298.10294"
gradientTransform="matrix(1.131046,0,0,1.131204,-29.352716,-17.655402)"
gradientUnits="userSpaceOnUse"
id="radialGradient3392"
xlink:href="#linearGradient3364"
inkscape:collect="always" />
<radialGradient
r="179.50987"
fy="365.75668"
fx="318.06638"
cy="365.75668"
cx="318.06638"
gradientTransform="matrix(1.0565445,0,0,0.5956187,-200.72763,179.91578)"
gradientUnits="userSpaceOnUse"
id="radialGradient3385"
xlink:href="#linearGradient4328"
inkscape:collect="always" />
<radialGradient
r="179.38509"
fy="244.68217"
fx="333.362"
cy="244.68217"
cx="333.362"
gradientTransform="matrix(1.0565445,0,0,0.5952981,-200.72763,124.1879)"
gradientUnits="userSpaceOnUse"
id="radialGradient3383"
xlink:href="#linearGradient4328"
inkscape:collect="always" />
<radialGradient
r="179.50987"
fy="365.75668"
fx="318.06638"
cy="365.75668"
cx="318.06638"
gradientTransform="matrix(1.0565445,0,0,0.5956187,-200.72763,179.91578)"
gradientUnits="userSpaceOnUse"
id="radialGradient3377"
xlink:href="#linearGradient4328"
inkscape:collect="always" />
<radialGradient
r="179.38509"
fy="244.68217"
fx="333.362"
cy="244.68217"
cx="333.362"
gradientTransform="matrix(1.0565445,0,0,0.5952981,-200.72763,124.1879)"
gradientUnits="userSpaceOnUse"
id="radialGradient3375"
xlink:href="#linearGradient4328"
inkscape:collect="always" />
<radialGradient
r="141.81195"
fy="249.47238"
fx="317.86237"
cy="249.47238"
cx="317.86237"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,-0.1554987,-133.93797)"
gradientUnits="userSpaceOnUse"
id="radialGradient3373"
xlink:href="#linearGradient6692"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.131046,0,0,1.131204,-29.352716,-17.655402)"
r="149.30214"
fy="315.40961"
fx="298.10294"
cy="315.40961"
cx="298.10294"
id="radialGradient3361"
xlink:href="#linearGradient3364"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.4674635,0,0,1.0734203,-134.66628,-8.6146276)"
r="130.08176"
fy="314.29395"
fx="290.86432"
cy="314.29395"
cx="290.86432"
id="radialGradient3357"
xlink:href="#linearGradient3351"
inkscape:collect="always" />
<radialGradient
r="179.50987"
fy="365.75668"
fx="318.06638"
cy="365.75668"
cx="318.06638"
gradientTransform="matrix(1.0565445,0,0,0.5956187,10.2201,263.97431)"
gradientUnits="userSpaceOnUse"
id="radialGradient2337"
xlink:href="#linearGradient4328"
inkscape:collect="always" />
<linearGradient
id="linearGradient4328">
<stop
id="stop4330"
offset="0"
style="stop-color:#398fe5;stop-opacity:1;" />
<stop
id="stop4332"
offset="1"
style="stop-color:#0066cc;stop-opacity:1" />
</linearGradient>
<radialGradient r="179.38509" fy="244.68217" fx="333.362" cy="244.68217" cx="333.362" gradientTransform="matrix(1.0565445,0,0,0.5952981,10.2201,208.24643)" gradientUnits="userSpaceOnUse" id="radialGradient2335" xlink:href="#linearGradient4328" inkscape:collect="always"/>
<radialGradient r="141.81195" fy="249.47238" fx="317.86237" cy="249.47238" cx="317.86237" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,210.79224,-49.879453)" gradientUnits="userSpaceOnUse" id="radialGradient2331" xlink:href="#linearGradient6692" inkscape:collect="always"/>
<linearGradient id="linearGradient6692">
<stop id="stop6694" offset="0" style="stop-color:#9bffbd;stop-opacity:1;"/>
<stop style="stop-color:#689e33;stop-opacity:1;" offset="1" id="stop6700"/>
<radialGradient
r="179.38509"
fy="244.68217"
fx="333.362"
cy="244.68217"
cx="333.362"
gradientTransform="matrix(1.0565445,0,0,0.5952981,10.2201,208.24643)"
gradientUnits="userSpaceOnUse"
id="radialGradient2335"
xlink:href="#linearGradient4328"
inkscape:collect="always" />
<radialGradient
r="141.81195"
fy="249.47238"
fx="317.86237"
cy="249.47238"
cx="317.86237"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,210.79224,-49.879453)"
gradientUnits="userSpaceOnUse"
id="radialGradient2331"
xlink:href="#linearGradient6692"
inkscape:collect="always" />
<linearGradient
id="linearGradient6692">
<stop
id="stop6694"
offset="0"
style="stop-color:#9bffbd;stop-opacity:1;" />
<stop
style="stop-color:#689e33;stop-opacity:1;"
offset="1"
id="stop6700" />
</linearGradient>
<linearGradient id="linearGradient3364">
<stop id="stop3366" offset="0" style="stop-color:#79a7fc;stop-opacity:1;"/>
<stop id="stop3368" offset="1" style="stop-color:#1d3340;stop-opacity:1;"/>
<linearGradient
id="linearGradient3364">
<stop
id="stop3366"
offset="0"
style="stop-color:#79a7fc;stop-opacity:1;" />
<stop
id="stop3368"
offset="1"
style="stop-color:#1d3340;stop-opacity:1;" />
</linearGradient>
<linearGradient id="linearGradient3351">
<stop id="stop3353" offset="0" style="stop-color:#ffffff;stop-opacity:0.86734694;"/>
<stop id="stop3355" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
<linearGradient
id="linearGradient3351">
<stop
id="stop3353"
offset="0"
style="stop-color:#ffffff;stop-opacity:0.86734694;" />
<stop
id="stop3355"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<radialGradient r="19.966738" fy="578.88593" fx="82.9272" cy="578.88593" cx="82.9272" gradientTransform="matrix(7.6237907,4.4015976,-5.0675166,8.7771962,2328.4492,-5270.6109)" gradientUnits="userSpaceOnUse" id="radialGradient2333" xlink:href="#linearGradient3364" inkscape:collect="always"/>
<linearGradient id="linearGradient3615">
<stop id="stop3619" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
<stop style="stop-color:#398fe5;stop-opacity:1;" offset="1" id="stop3621"/>
<radialGradient
r="19.966738"
fy="578.88593"
fx="82.9272"
cy="578.88593"
cx="82.9272"
gradientTransform="matrix(7.6237907,4.4015976,-5.0675166,8.7771962,2328.4492,-5270.6109)"
gradientUnits="userSpaceOnUse"
id="radialGradient2333"
xlink:href="#linearGradient3364"
inkscape:collect="always" />
<linearGradient
id="linearGradient3615">
<stop
id="stop3619"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
style="stop-color:#398fe5;stop-opacity:1;"
offset="1"
id="stop3621" />
</linearGradient>
<linearGradient id="linearGradient3624">
<stop style="stop-color:#398fe5;stop-opacity:1;" offset="0" id="stop3628"/>
<stop id="stop3630" offset="1" style="stop-color:#acc1d5;stop-opacity:1;"/>
<linearGradient
id="linearGradient3624">
<stop
style="stop-color:#398fe5;stop-opacity:1;"
offset="0"
id="stop3628" />
<stop
id="stop3630"
offset="1"
style="stop-color:#acc1d5;stop-opacity:1;" />
</linearGradient>
<linearGradient id="linearGradient3533">
<stop id="stop3535" offset="0" style="stop-color:#3a3a3a;stop-opacity:1;"/>
<stop id="stop3537" offset="1" style="stop-color:#ffffff;stop-opacity:1;"/>
<linearGradient
id="linearGradient3533">
<stop
id="stop3535"
offset="0"
style="stop-color:#3a3a3a;stop-opacity:1;" />
<stop
id="stop3537"
offset="1"
style="stop-color:#ffffff;stop-opacity:1;" />
</linearGradient>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3364" id="radialGradient3258" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,-17.655402)" cx="298.10294" cy="315.40961" fx="298.10294" fy="315.40961" r="149.30214"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient6692" id="radialGradient3260" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,218.04449,-49.879453)" spreadMethod="reflect" cx="317.86237" cy="249.47238" fx="317.86237" fy="249.47238" r="141.81195"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3351" id="radialGradient3262" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2436217,0.8776417,-1.1344403,0.3149057,586.4121,-25.658023)" cx="298.66852" cy="309.10764" fx="298.66852" fy="309.10764" r="130.08176"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3364" id="radialGradient3268" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,-17.655402)" cx="298.10294" cy="315.40961" fx="298.10294" fy="315.40961" r="149.30214"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient6692" id="radialGradient3270" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,218.04449,-49.879453)" spreadMethod="reflect" cx="317.86237" cy="249.47238" fx="317.86237" fy="249.47238" r="141.81195"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3351" id="radialGradient3272" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2436217,0.8776417,-1.1344403,0.3149057,586.4121,-25.658023)" cx="298.66852" cy="309.10764" fx="298.66852" fy="309.10764" r="130.08176"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3351" id="radialGradient3275" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2436217,0.8776417,-1.1344403,0.3149057,23.62227,-368.49652)" cx="298.66852" cy="309.10764" fx="298.66852" fy="309.10764" r="130.08176"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient6692" id="radialGradient3278" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,-344.74534,-392.71795)" spreadMethod="reflect" cx="317.86237" cy="249.47238" fx="317.86237" fy="249.47238" r="141.81195"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3364" id="radialGradient3281" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.1174411,0,0,0.1174575,-18.224818,-25.892201)" cx="298.10294" cy="315.40961" fx="298.10294" fy="315.40961" r="149.30214"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient6692" id="radialGradient3284" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,-344.74534,-392.71795)" spreadMethod="reflect" cx="317.86237" cy="249.47238" fx="317.86237" fy="249.47238" r="141.81195"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient6692" id="radialGradient3287" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,-344.74534,-392.71795)" spreadMethod="reflect" cx="317.86237" cy="249.47238" fx="317.86237" fy="249.47238" r="141.81195"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient6692" id="radialGradient3290" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.09579247,0.05710226,-0.06363172,0.11021335,6.7104086,-29.238154)" spreadMethod="reflect" cx="317.86237" cy="249.47238" fx="317.86237" fy="249.47238" r="141.81195"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3364-1" id="radialGradient3281-8" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.1174411,0,0,0.1174575,-18.224818,-25.892201)" cx="298.10294" cy="315.40961" fx="298.10294" fy="315.40961" r="149.30214"/>
<linearGradient id="linearGradient3364-1">
<stop id="stop3366-0" offset="0" style="stop-color:#79a7fc;stop-opacity:1;"/>
<stop id="stop3368-2" offset="1" style="stop-color:#1d3340;stop-opacity:1;"/>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3364"
id="radialGradient3258"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,-17.655402)"
cx="298.10294"
cy="315.40961"
fx="298.10294"
fy="315.40961"
r="149.30214" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6692"
id="radialGradient3260"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,218.04449,-49.879453)"
spreadMethod="reflect"
cx="317.86237"
cy="249.47238"
fx="317.86237"
fy="249.47238"
r="141.81195" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3351"
id="radialGradient3262"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2436217,0.8776417,-1.1344403,0.3149057,586.4121,-25.658023)"
cx="298.66852"
cy="309.10764"
fx="298.66852"
fy="309.10764"
r="130.08176" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3364"
id="radialGradient3268"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.131046,0,0,1.131204,-22.100471,-17.655402)"
cx="298.10294"
cy="315.40961"
fx="298.10294"
fy="315.40961"
r="149.30214" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6692"
id="radialGradient3270"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,218.04449,-49.879453)"
spreadMethod="reflect"
cx="317.86237"
cy="249.47238"
fx="317.86237"
fy="249.47238"
r="141.81195" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3351"
id="radialGradient3272"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2436217,0.8776417,-1.1344403,0.3149057,586.4121,-25.658023)"
cx="298.66852"
cy="309.10764"
fx="298.66852"
fy="309.10764"
r="130.08176" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3351"
id="radialGradient3275"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2436217,0.8776417,-1.1344403,0.3149057,23.62227,-368.49652)"
cx="298.66852"
cy="309.10764"
fx="298.66852"
fy="309.10764"
r="130.08176" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6692"
id="radialGradient3278"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,-344.74534,-392.71795)"
spreadMethod="reflect"
cx="317.86237"
cy="249.47238"
fx="317.86237"
fy="249.47238"
r="141.81195" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3364"
id="radialGradient3281"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.1174411,0,0,0.1174575,-18.224818,-25.892201)"
cx="298.10294"
cy="315.40961"
fx="298.10294"
fy="315.40961"
r="149.30214" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6692"
id="radialGradient3284"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,-344.74534,-392.71795)"
spreadMethod="reflect"
cx="317.86237"
cy="249.47238"
fx="317.86237"
fy="249.47238"
r="141.81195" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6692"
id="radialGradient3287"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9225535,0.5499376,-0.6128212,1.0614374,-344.74534,-392.71795)"
spreadMethod="reflect"
cx="317.86237"
cy="249.47238"
fx="317.86237"
fy="249.47238"
r="141.81195" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6692"
id="radialGradient3290"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.09579247,0.05710226,-0.06363172,0.11021335,6.7104086,-29.238154)"
spreadMethod="reflect"
cx="317.86237"
cy="249.47238"
fx="317.86237"
fy="249.47238"
r="141.81195" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3364-1"
id="radialGradient3281-8"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.1174411,0,0,0.1174575,-18.224818,-25.892201)"
cx="298.10294"
cy="315.40961"
fx="298.10294"
fy="315.40961"
r="149.30214" />
<linearGradient
id="linearGradient3364-1">
<stop
id="stop3366-0"
offset="0"
style="stop-color:#79a7fc;stop-opacity:1;" />
<stop
id="stop3368-2"
offset="1"
style="stop-color:#1d3340;stop-opacity:1;" />
</linearGradient>
<radialGradient r="149.30214" fy="315.40961" fx="298.10294" cy="315.40961" cx="298.10294" gradientTransform="matrix(0.1174411,0,0,0.1174575,-24.327872,-29.478297)" gradientUnits="userSpaceOnUse" id="radialGradient4075" xlink:href="#linearGradient3364-1" inkscape:collect="always"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3364-7" id="radialGradient3281-0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.1174411,0,0,0.1174575,-18.224818,-25.892201)" cx="298.10294" cy="315.40961" fx="298.10294" fy="315.40961" r="149.30214"/>
<linearGradient id="linearGradient3364-7">
<stop id="stop3366-6" offset="0" style="stop-color:#79a7fc;stop-opacity:1;"/>
<stop id="stop3368-3" offset="1" style="stop-color:#1d3340;stop-opacity:1;"/>
<radialGradient
r="149.30214"
fy="315.40961"
fx="298.10294"
cy="315.40961"
cx="298.10294"
gradientTransform="matrix(0.1174411,0,0,0.1174575,-24.327872,-29.478297)"
gradientUnits="userSpaceOnUse"
id="radialGradient4075"
xlink:href="#linearGradient3364-1"
inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3364-7"
id="radialGradient3281-0"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.1174411,0,0,0.1174575,-18.224818,-25.892201)"
cx="298.10294"
cy="315.40961"
fx="298.10294"
fy="315.40961"
r="149.30214" />
<linearGradient
id="linearGradient3364-7">
<stop
id="stop3366-6"
offset="0"
style="stop-color:#79a7fc;stop-opacity:1;" />
<stop
id="stop3368-3"
offset="1"
style="stop-color:#1d3340;stop-opacity:1;" />
</linearGradient>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3364" id="radialGradient4158" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.1174411,0,0,0.1174575,-18.224818,-25.892201)" cx="298.10294" cy="315.40961" fx="298.10294" fy="315.40961" r="149.30214"/>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient6692" id="radialGradient4160" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.09579247,0.05710226,-0.06363172,0.11021335,6.7104086,-29.238154)" spreadMethod="reflect" cx="317.86237" cy="249.47238" fx="317.86237" fy="249.47238" r="141.81195"/>
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3866" id="linearGradient3872" x1="35" y1="53" x2="24" y2="9" gradientUnits="userSpaceOnUse"/>
<linearGradient inkscape:collect="always" id="linearGradient3866">
<stop style="stop-color:#d3d7cf;stop-opacity:1" offset="0" id="stop3868"/>
<stop style="stop-color:#ffffff;stop-opacity:1" offset="1" id="stop3870"/>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3364"
id="radialGradient4158"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.1174411,0,0,0.1174575,-18.224818,-25.892201)"
cx="298.10294"
cy="315.40961"
fx="298.10294"
fy="315.40961"
r="149.30214" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6692"
id="radialGradient4160"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.09579247,0.05710226,-0.06363172,0.11021335,6.7104086,-29.238154)"
spreadMethod="reflect"
cx="317.86237"
cy="249.47238"
fx="317.86237"
fy="249.47238"
r="141.81195" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3874"
id="linearGradient3880"
x1="56"
y1="47"
x2="53"
y2="39"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient3874">
<stop
style="stop-color:#555753;stop-opacity:1"
offset="0"
id="stop3876" />
<stop
style="stop-color:#babdb6;stop-opacity:1"
offset="1"
id="stop3878" />
</linearGradient>
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3874" id="linearGradient3880" x1="56" y1="47" x2="53" y2="39" gradientUnits="userSpaceOnUse"/>
<linearGradient inkscape:collect="always" id="linearGradient3874">
<stop style="stop-color:#555753;stop-opacity:1" offset="0" id="stop3876"/>
<stop style="stop-color:#babdb6;stop-opacity:1" offset="1" id="stop3878"/>
</linearGradient>
<linearGradient y2="39" x2="53" y1="47" x1="56" gradientUnits="userSpaceOnUse" id="linearGradient3120" xlink:href="#linearGradient3874" inkscape:collect="always"/>
</defs>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="7.2080077" inkscape:cx="33.768585" inkscape:cy="36.655572" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="1920" inkscape:window-height="1017" inkscape:window-x="1912" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:snap-bbox="true" inkscape:snap-nodes="false" inkscape:snap-global="true">
<inkscape:grid type="xygrid" id="grid3147" empspacing="2" visible="true" enabled="true" snapvisiblegridlinesonly="true" units="px" spacingx="1px" spacingy="1px"/>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.0968311"
inkscape:cx="8.7150898"
inkscape:cy="47.990969"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1358"
inkscape:window-height="703"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1"
inkscape:snap-bbox="true"
inkscape:snap-nodes="false"
inkscape:snap-global="true"
showguides="true"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3147"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
units="px"
spacingx="1px"
spacingy="1px" />
<sodipodi:guide
position="20,90"
orientation="0,1"
id="guide1944"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata id="metadata2990">
<metadata
id="metadata2990">
<rdf:RDF>
<cc:Work rdf:about="">
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:creator>
<cc:Agent>
<dc:title>[WandererFan]</dc:title>
@@ -146,19 +739,30 @@
</cc:Work>
</rdf:RDF>
</metadata>
<g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer">
<g id="layer2" inkscape:label="layer2" transform="translate(-562.78983,-342.8385)"/>
<g id="g4153-1" style="fill:#d3d7cf">
<path d="M 3,9 3,53 51,53 61,43 61,9 z" id="rect3005-7" style="color:#000000;fill:url(#linearGradient3872);fill-opacity:1;fill-rule:evenodd;stroke:#3f3f3f;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/>
<path style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 5,51 0,-40 54,0 0,32 -6,8 z" id="path3096" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/>
<path d="m 61,43 c 0,-1 -4,-4 -8,-4 0,0 2,10 -2,14 z" id="path3778-4" style="color:#000000;fill:url(#linearGradient3120);fill-opacity:1;fill-rule:evenodd;stroke:#3f3f3f;stroke-width:1.95121026;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/>
</g>
<rect style="fill:none;stroke:#2e3436;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4,8;stroke-dashoffset:2.04" id="rect4138-7" width="38" height="26" x="11" y="17"/>
<g style="font-size:20.2219677px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:#2e3436;stroke-width:0.99594045;font-family:FreeSans;-inkscape-font-specification:FreeSans" id="text3207-0" transform="matrix(0.98883029,0,0,1.019557,0.7080064,-3.5238926)">
<path d="m 15.970378,40.236977 5.700223,-14.712272 2.116069,0 6.157075,14.71173 -2.254012,0 -1.797119,-4.620494 -6.206459,0 -1.668894,4.621036 z m 4.282761,-6.18113 5.031992,0 L 23.736047,30.047 c -0.472495,-1.217783 -0.823485,-2.218348 -1.052972,-3.001698 -0.189001,0.928169 -0.45562,1.849742 -0.799854,2.764722 z" style="font-weight:bold;fill:#2e3436;stroke:#2e3436;stroke-width:0.99594045;-inkscape-font-specification:FreeSans Bold" id="path3150" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccc"/>
<path d="m 33.807773,40.236437 -1.867833,5.4e-4 0,-14.71173 1.996195,-5.4e-4 0,5.164106 c 0.750421,-0.941312 1.708199,-1.411973 2.873336,-1.411983 0.645096,10e-6 1.255638,0.130018 1.831629,0.390023 0.575975,0.260026 1.049927,0.625364 1.421857,1.096015 0.371911,0.47067 0.663194,1.038425 0.87385,1.703266 0.210635,0.664857 0.315957,1.375785 0.315968,2.132786 -1.1e-5,1.797073 -0.44434,3.186015 -1.332991,4.166831 -0.888669,0.980818 -1.955061,1.471227 -3.199179,1.471227 -1.237547,0 -2.20849,-0.516739 -2.912832,-1.550219 z m -0.01975,-5.558525 c -3e-6,1.257294 0.171146,2.165702 0.513448,2.725226 0.559524,0.914993 1.31653,1.372488 2.271022,1.372487 0.776749,1e-6 1.448181,-0.33736 2.014298,-1.012086 0.566101,-0.674721 0.849156,-1.680223 0.849164,-3.016509 -8e-6,-1.369189 -0.271543,-2.379628 -0.814605,-3.03132 -0.543078,-0.651676 -1.199699,-0.977518 -1.969865,-0.977527 -0.77676,9e-6 -1.448192,0.337371 -2.014297,1.012086 -0.566113,0.674731 -0.849168,1.650611 -0.849165,2.927643 z" style="font-weight:bold;fill:#2e3436;stroke:#2e3436;stroke-width:0.99594045;-inkscape-font-specification:FreeSans Bold" id="path3152" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccssccscsscccss"/>
</g>
<path style="fill:none;stroke:#babdb6;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 53.085507,48.1244 6.658435,-6.453618" id="path3125" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
<path d="m 61,43 c 0,-1 -4,-4 -8,-4 0,0 2,10 -2,14 z" id="path3778-3" style="color:#000000;fill:none;stroke:#3f3f3f;stroke-width:1.95121026;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="layer2"
inkscape:label="layer2"
transform="translate(-562.78983,-342.8385)" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path909"
d="m 4.142024,12.083884 55.720897,-0.196201 v 40.22107 L 4.3382244,51.716352 Z"
style="fill:#eeeeec;fill-rule:evenodd;stroke:#204a87;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:8, 2;stroke-dashoffset:20;stroke-opacity:1" />
<text
id="text1938"
y="40.947266"
x="10.232422"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:FreeSans;letter-spacing:0px;word-spacing:0px;fill:#729fcf;fill-opacity:1;stroke:#204a87;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="fill:#729fcf;fill-opacity:1;stroke:#204a87;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
y="40.947266"
x="10.232422"
id="tspan1936"
sodipodi:role="line">Abc</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 24 KiB

@@ -0,0 +1,290 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="64"
height="64"
id="svg3085"
sodipodi:docname="techdraw-midpoint.svg"
inkscape:version="0.92.4 (unknown)">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1358"
inkscape:window-height="703"
id="namedview983"
showgrid="true"
inkscape:zoom="4"
inkscape:cx="2.140625"
inkscape:cy="15"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1"
inkscape:current-layer="svg3085"
inkscape:snap-global="false"
showguides="false"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid985"
empspacing="2" />
<sodipodi:guide
position="30.30631,52.366005"
orientation="0,1"
id="guide1038"
inkscape:locked="false" />
<sodipodi:guide
position="30.100144,12.369922"
orientation="0,1"
id="guide1040"
inkscape:locked="false" />
<sodipodi:guide
position="51.953674,37.934428"
orientation="1,0"
id="guide1042"
inkscape:locked="false" />
<sodipodi:guide
position="11.957592,68.240738"
orientation="1,0"
id="guide1044"
inkscape:locked="false" />
</sodipodi:namedview>
<defs
id="defs3087">
<linearGradient
inkscape:collect="always"
id="linearGradient5062">
<stop
style="stop-color:#729fcf;stop-opacity:1"
offset="0"
id="stop5058" />
<stop
style="stop-color:#204a87;stop-opacity:1"
offset="1"
id="stop5060" />
</linearGradient>
<linearGradient
id="linearGradient3836-0">
<stop
id="stop5008"
offset="0"
style="stop-color:#c4a000;stop-opacity:1;" />
<stop
id="stop5010"
offset="1"
style="stop-color:#fce94f;stop-opacity:1;" />
</linearGradient>
<inkscape:path-effect
effect="skeletal"
id="path-effect3066"
is_visible="true"
pattern="M 0,0 H 1"
copytype="single_stretched"
prop_scale="1"
scale_y_rel="false"
spacing="0"
normal_offset="0"
tang_offset="0"
prop_units="false"
vertical_pattern="false"
fuse_tolerance="0" />
<linearGradient
id="linearGradient7597">
<stop
id="stop7599"
style="stop-color:#000003;stop-opacity:1"
offset="0" />
<stop
id="stop7601"
style="stop-color:#000003;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3893">
<stop
id="stop3895"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3897"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
x1="15.71482"
y1="22.299377"
x2="34.136208"
y2="22.299377"
id="linearGradient7603"
xlink:href="#linearGradient7597"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3836-0-3">
<stop
style="stop-color:#c4a000;stop-opacity:1;"
offset="0"
id="stop3838-2" />
<stop
style="stop-color:#fce94f;stop-opacity:1;"
offset="1"
id="stop3840-5" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5062"
id="linearGradient5064"
x1="33.055637"
y1="43.596096"
x2="42.195377"
y2="57.417107"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5062"
id="linearGradient5072"
x1="3.8125484"
y1="51.68948"
x2="19.800535"
y2="51.68948"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5062"
id="linearGradient5080"
x1="13.818283"
y1="25.689482"
x2="29.806271"
y2="25.689482"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5062"
id="linearGradient5088"
x1="43.818283"
y1="11.684036"
x2="59.806271"
y2="11.684036"
gradientUnits="userSpaceOnUse" />
</defs>
<metadata
id="metadata3090">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<text
x="13.788582"
y="46.145554"
id="text3130"
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.28200001;marker:none;enable-background:accumulate"><tspan
x="13.788582"
y="46.145554"
id="tspan3132" /></text>
<g
id="g1769">
<path
inkscape:connector-curvature="0"
id="path1058"
d="M 8,6 56,6.4533587 V 56 H 8 Z"
style="fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.43847871;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.31934762;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 16,14.850112 32,0.311106 v 34 H 16 Z"
id="path1065"
inkscape:connector-curvature="0" />
<rect
y="7.9072881"
x="10.324164"
height="45.934795"
width="43.934795"
id="rect1893"
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.06520438;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
transform="matrix(0.8,0,0,0.8,34.389942,11.45757)"
id="g982">
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-8"
d="M 14.970374,19.82823 A 8.993818,8.9934077 0.02042283 1 1 28.632785,31.527845 8.993818,8.9934077 0.02042283 1 1 14.970374,19.82823 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5080);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-8"
d="M 16.49299,21.139192 A 6.9999997,7.0000001 0 1 1 27.126578,30.245604 6.9999997,7.0000001 0 0 1 16.49299,21.139192 Z" />
</g>
<g
transform="matrix(0.8,0,0,0.8,22.563325,-30.744336)"
id="g986">
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-1"
d="M 4.964639,45.82823 A 8.993818,8.9934077 0.02042283 1 1 18.62705,57.527845 8.993818,8.9934077 0.02042283 1 1 4.964639,45.82823 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5072);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-5"
d="M 6.487255,47.139192 A 6.9999997,7.0000001 0 1 1 17.120843,56.245604 6.9999997,7.0000001 0 0 1 6.487255,47.139192 Z" />
</g>
<g
transform="matrix(0.8,0,0,0.8,2.3662411,6.520154)"
id="g1063">
<g
id="g994"
transform="translate(-39.970374,20.177215)">
<path
d="M 44.970374,5.822785 A 8.993818,8.9934077 0.02042283 1 1 58.632785,17.5224 8.993818,8.9934077 0.02042283 1 1 44.970374,5.822785 Z"
id="path4250-71"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
d="M 46.49299,7.133747 A 6.9999997,7.0000001 0 1 1 57.126578,16.240159 6.9999997,7.0000001 0 0 1 46.49299,7.133747 Z"
id="path4250-7-3"
style="fill:url(#linearGradient5088);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="matrix(0.8,0,0,0.8,1.7587364,10.543703)"
id="g990">
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6"
d="M 30.970374,45.82823 A 8.993818,8.9934077 0.02042283 1 1 44.632785,57.527845 8.993818,8.9934077 0.02042283 1 1 30.970374,45.82823 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5064);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2"
d="M 32.49299,47.139192 A 6.9999997,7.0000001 0 1 1 43.126578,56.245604 6.9999997,7.0000001 0 0 1 32.49299,47.139192 Z" />
</g>
<path
inkscape:connector-curvature="0"
id="path1067"
d="M 16,16 H 48 V 48 H 16 Z"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

@@ -15,7 +15,7 @@
height="64"
id="svg3085"
sodipodi:docname="techdraw-mline.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
inkscape:version="0.92.4 (unknown)">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
@@ -31,7 +31,7 @@
showgrid="true"
inkscape:zoom="8.03125"
inkscape:cx="32"
inkscape:cy="32"
inkscape:cy="5.2857789"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1"
@@ -166,7 +166,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -179,80 +179,83 @@
x="13.788582"
y="46.145554"
id="tspan3132" /></text>
<path
style="fill:#d3d7cf;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 39.867728,50.432299 -5.043926,3.249433 -14.37481,-26.019768 5.043926,-3.249432 z"
id="path3061-2-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 37.798712,50.675315 24.245786,26.416728"
id="path3063-7-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:#d3d7cf;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 14.384846,55.128496 8.5892901,53.575582 18.204445,25.447086 24,27 Z"
id="path3061-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 10.858731,52.833317 8.939981,-25.6087"
id="path3063-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:#d3d7cf;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 40.599427,54.421192 34.803871,52.868278 50.204445,7.8977836 56,9.450698 Z"
id="path3061"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 37.073312,52.126013 51.798712,9.675315"
id="path3063"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71"
d="M 44.970374,5.822785 A 8.993818,8.9934077 0.02042283 1 1 58.632785,17.5224 8.993818,8.9934077 0.02042283 1 1 44.970374,5.822785 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5088);fill-opacity:1.0;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3"
d="M 46.49299,7.133747 A 6.9999997,7.0000001 0 1 1 57.126578,16.240159 6.9999997,7.0000001 0 0 1 46.49299,7.133747 Z" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6"
d="M 30.970374,45.82823 A 8.993818,8.9934077 0.02042283 1 1 44.632785,57.527845 8.993818,8.9934077 0.02042283 1 1 30.970374,45.82823 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5064);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2"
d="M 32.49299,47.139192 A 6.9999997,7.0000001 0 1 1 43.126578,56.245604 6.9999997,7.0000001 0 0 1 32.49299,47.139192 Z" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-8"
d="M 14.970374,19.82823 A 8.993818,8.9934077 0.02042283 1 1 28.632785,31.527845 8.993818,8.9934077 0.02042283 1 1 14.970374,19.82823 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5080);fill-opacity:1.0;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-8"
d="M 16.49299,21.139192 A 6.9999997,7.0000001 0 1 1 27.126578,30.245604 6.9999997,7.0000001 0 0 1 16.49299,21.139192 Z" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-1"
d="M 4.964639,45.82823 A 8.993818,8.9934077 0.02042283 1 1 18.62705,57.527845 8.993818,8.9934077 0.02042283 1 1 4.964639,45.82823 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5072);fill-opacity:1.0;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-5"
d="M 6.487255,47.139192 A 6.9999997,7.0000001 0 1 1 17.120843,56.245604 6.9999997,7.0000001 0 0 1 6.487255,47.139192 Z" />
<g
id="g1815">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3061-2-6"
d="m 39.867728,50.432299 -5.043926,3.249433 -14.37481,-26.019768 5.043926,-3.249432 z"
style="fill:#d3d7cf;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3063-7-1"
d="M 37.798712,50.675315 24.245786,26.416728"
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3061-2"
d="M 14.384846,55.128496 8.5892901,53.575582 18.204445,25.447086 24,27 Z"
style="fill:#d3d7cf;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3063-7"
d="m 10.858731,52.833317 8.939981,-25.6087"
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3061"
d="M 40.599427,54.421192 34.803871,52.868278 50.204445,7.8977836 56,9.450698 Z"
style="fill:#d3d7cf;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3063"
d="M 37.073312,52.126013 51.798712,9.675315"
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
d="M 44.970374,5.822785 A 8.993818,8.9934077 0.02042283 1 1 58.632785,17.5224 8.993818,8.9934077 0.02042283 1 1 44.970374,5.822785 Z"
id="path4250-71"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
d="M 46.49299,7.133747 A 6.9999997,7.0000001 0 1 1 57.126578,16.240159 6.9999997,7.0000001 0 0 1 46.49299,7.133747 Z"
id="path4250-7-3"
style="fill:url(#linearGradient5088);fill-opacity:1.0;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
d="M 30.970374,45.82823 A 8.993818,8.9934077 0.02042283 1 1 44.632785,57.527845 8.993818,8.9934077 0.02042283 1 1 30.970374,45.82823 Z"
id="path4250-71-6"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
d="M 32.49299,47.139192 A 6.9999997,7.0000001 0 1 1 43.126578,56.245604 6.9999997,7.0000001 0 0 1 32.49299,47.139192 Z"
id="path4250-7-3-2"
style="fill:url(#linearGradient5064);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
d="M 14.970374,19.82823 A 8.993818,8.9934077 0.02042283 1 1 28.632785,31.527845 8.993818,8.9934077 0.02042283 1 1 14.970374,19.82823 Z"
id="path4250-71-8"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
d="M 16.49299,21.139192 A 6.9999997,7.0000001 0 1 1 27.126578,30.245604 6.9999997,7.0000001 0 0 1 16.49299,21.139192 Z"
id="path4250-7-3-8"
style="fill:url(#linearGradient5080);fill-opacity:1.0;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
d="M 4.964639,45.82823 A 8.993818,8.9934077 0.02042283 1 1 18.62705,57.527845 8.993818,8.9934077 0.02042283 1 1 4.964639,45.82823 Z"
id="path4250-71-1"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
d="M 6.487255,47.139192 A 6.9999997,7.0000001 0 1 1 17.120843,56.245604 6.9999997,7.0000001 0 0 1 6.487255,47.139192 Z"
id="path4250-7-3-5"
style="fill:url(#linearGradient5072);fill-opacity:1.0;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

@@ -30,8 +30,8 @@
id="namedview983"
showgrid="true"
inkscape:zoom="8.03125"
inkscape:cx="39.769112"
inkscape:cy="41.31852"
inkscape:cx="17.107633"
inkscape:cy="40.322411"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1"
@@ -139,7 +139,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -154,7 +154,7 @@
id="tspan3132" /></text>
<g
id="g963"
transform="translate(-5.8015795,-19.678038)">
transform="matrix(2,0,0,2,-43.603159,-71.356076)">
<path
d="M 30.970374,45.82823 A 8.993818,8.9934077 0.02042283 1 1 44.632785,57.527845 8.993818,8.9934077 0.02042283 1 1 30.970374,45.82823 Z"
id="path4250-71-6"

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

@@ -0,0 +1,295 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="64"
height="64"
id="svg3085"
sodipodi:docname="techdraw-quadrant.svg"
inkscape:version="0.92.4 (unknown)">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1358"
inkscape:window-height="703"
id="namedview983"
showgrid="true"
inkscape:zoom="2.8394757"
inkscape:cx="-30.446358"
inkscape:cy="39.774609"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1"
inkscape:current-layer="svg3085"
inkscape:snap-global="false"
showguides="false"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid985"
empspacing="2" />
<sodipodi:guide
position="30.30631,52.366005"
orientation="0,1"
id="guide1038"
inkscape:locked="false" />
<sodipodi:guide
position="30.100144,12.369922"
orientation="0,1"
id="guide1040"
inkscape:locked="false" />
<sodipodi:guide
position="51.953674,37.934428"
orientation="1,0"
id="guide1042"
inkscape:locked="false" />
<sodipodi:guide
position="11.957592,68.240738"
orientation="1,0"
id="guide1044"
inkscape:locked="false" />
</sodipodi:namedview>
<defs
id="defs3087">
<linearGradient
inkscape:collect="always"
id="linearGradient5062">
<stop
style="stop-color:#729fcf;stop-opacity:1"
offset="0"
id="stop5058" />
<stop
style="stop-color:#204a87;stop-opacity:1"
offset="1"
id="stop5060" />
</linearGradient>
<linearGradient
id="linearGradient3836-0">
<stop
id="stop5008"
offset="0"
style="stop-color:#c4a000;stop-opacity:1;" />
<stop
id="stop5010"
offset="1"
style="stop-color:#fce94f;stop-opacity:1;" />
</linearGradient>
<inkscape:path-effect
effect="skeletal"
id="path-effect3066"
is_visible="true"
pattern="M 0,0 H 1"
copytype="single_stretched"
prop_scale="1"
scale_y_rel="false"
spacing="0"
normal_offset="0"
tang_offset="0"
prop_units="false"
vertical_pattern="false"
fuse_tolerance="0" />
<linearGradient
id="linearGradient7597">
<stop
id="stop7599"
style="stop-color:#000003;stop-opacity:1"
offset="0" />
<stop
id="stop7601"
style="stop-color:#000003;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3893">
<stop
id="stop3895"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3897"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
x1="15.71482"
y1="22.299377"
x2="34.136208"
y2="22.299377"
id="linearGradient7603"
xlink:href="#linearGradient7597"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3836-0-3">
<stop
style="stop-color:#c4a000;stop-opacity:1;"
offset="0"
id="stop3838-2" />
<stop
style="stop-color:#fce94f;stop-opacity:1;"
offset="1"
id="stop3840-5" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5062"
id="linearGradient5064"
x1="33.055637"
y1="43.596096"
x2="42.195377"
y2="57.417107"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5062"
id="linearGradient5072"
x1="3.8125484"
y1="51.68948"
x2="19.800535"
y2="51.68948"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5062"
id="linearGradient5080"
x1="13.818283"
y1="25.689482"
x2="29.806271"
y2="25.689482"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5062"
id="linearGradient5088"
x1="43.818283"
y1="11.684036"
x2="59.806271"
y2="11.684036"
gradientUnits="userSpaceOnUse" />
</defs>
<metadata
id="metadata3090">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<text
x="13.788582"
y="46.145554"
id="text3130"
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.28200001;marker:none;enable-background:accumulate"><tspan
x="13.788582"
y="46.145554"
id="tspan3132" /></text>
<g
id="g3438">
<ellipse
ry="22.000866"
rx="22.000868"
cy="32"
cx="32"
id="path1917"
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<circle
r="18.709618"
cy="32"
cx="32"
id="path1921"
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.58076358;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<ellipse
ry="17.082438"
rx="17.082436"
cy="32"
cx="32"
id="path1923"
style="opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#d3d7cf;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<ellipse
ry="14.994234"
rx="15.060382"
cy="32"
cx="32"
id="path1925"
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
transform="matrix(0.8,0,0,0.8,34.558736,11.590457)"
id="g982">
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-8"
d="M 14.970374,19.82823 A 8.993818,8.9934077 0.02042283 1 1 28.632785,31.527845 8.993818,8.9934077 0.02042283 1 1 14.970374,19.82823 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5080);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-8"
d="M 16.49299,21.139192 A 6.9999997,7.0000001 0 1 1 27.126578,30.245604 6.9999997,7.0000001 0 0 1 16.49299,21.139192 Z" />
</g>
<g
transform="matrix(0.8,0,0,0.8,22.73212,-29.361449)"
id="g986">
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-1"
d="M 4.964639,45.82823 A 8.993818,8.9934077 0.02042283 1 1 18.62705,57.527845 8.993818,8.9934077 0.02042283 1 1 4.964639,45.82823 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5072);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-5"
d="M 6.487255,47.139192 A 6.9999997,7.0000001 0 1 1 17.120843,56.245604 6.9999997,7.0000001 0 0 1 6.487255,47.139192 Z" />
</g>
<g
transform="matrix(0.8,0,0,0.8,2.5350356,6.6530409)"
id="g1063">
<g
id="g994"
transform="translate(-39.970374,20.177215)">
<path
d="M 44.970374,5.822785 A 8.993818,8.9934077 0.02042283 1 1 58.632785,17.5224 8.993818,8.9934077 0.02042283 1 1 44.970374,5.822785 Z"
id="path4250-71"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
d="M 46.49299,7.133747 A 6.9999997,7.0000001 0 1 1 57.126578,16.240159 6.9999997,7.0000001 0 0 1 46.49299,7.133747 Z"
id="path4250-7-3"
style="fill:url(#linearGradient5088);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="matrix(0.8,0,0,0.8,1.9275309,10.67659)"
id="g990">
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#2e2900;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6"
d="M 30.970374,45.82823 A 8.993818,8.9934077 0.02042283 1 1 44.632785,57.527845 8.993818,8.9934077 0.02042283 1 1 30.970374,45.82823 Z" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5064);fill-opacity:1;stroke:#729fcf;stroke-width:1.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2"
d="M 32.49299,47.139192 A 6.9999997,7.0000001 0 1 1 43.126578,56.245604 6.9999997,7.0000001 0 0 1 32.49299,47.139192 Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

+5
View File
@@ -85,6 +85,11 @@ Base::Vector3d Rez::appX(Base::Vector3d v)
return result;
}
QPointF Rez::appX(QPointF p)
{
return appPt(p);
}
//Misc conversions
QPointF Rez::guiPt(QPointF p)
+1
View File
@@ -47,6 +47,7 @@ public:
static double appX(double x);
static Base::Vector2d appX(Base::Vector2d v);
static Base::Vector3d appX(Base::Vector3d v);
static QPointF appX(QPointF p);
static QPointF guiPt(QPointF p);
static QPointF appPt(QPointF p);
+391
View File
@@ -0,0 +1,391 @@
/***************************************************************************
* Copyright (c) 2019 Wandererfan <[email protected] *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#include "PreCompiled.h"
#ifndef _PreComp_
#include <cmath>
#endif // #ifndef _PreComp_
#include <QStatusBar>
#include <QGraphicsScene>
#include <Base/Console.h>
#include <Base/Tools.h>
#include <Gui/Application.h>
#include <Gui/BitmapFactory.h>
#include <Gui/Command.h>
#include <Gui/Control.h>
#include <Gui/Document.h>
#include <Gui/MainWindow.h>
#include <Gui/Selection.h>
#include <Gui/ViewProvider.h>
#include <Gui/WaitCursor.h>
#include <Mod/TechDraw/App/DrawPage.h>
#include <Mod/TechDraw/App/DrawUtil.h>
#include <Mod/TechDraw/App/DrawView.h>
#include <Mod/TechDraw/App/DrawViewPart.h>
#include <Mod/TechDraw/App/Cosmetic.h>
#include <Mod/TechDraw/Gui/ui_TaskCosVertex.h>
#include "DrawGuiStd.h"
#include "QGVPage.h"
#include "QGIView.h"
#include "QGIPrimPath.h"
#include "MDIViewPage.h"
#include "ViewProviderPage.h"
#include "QGTracker.h"
#include "QGEPath.h"
#include "Rez.h"
#include "TaskCosVertex.h"
using namespace Gui;
using namespace TechDraw;
using namespace TechDrawGui;
//ctor for creation
TaskCosVertex::TaskCosVertex(TechDraw::DrawViewPart* baseFeat,
TechDraw::DrawPage* page) :
ui(new Ui_TaskCosVertex),
m_tracker(nullptr),
m_baseFeat(baseFeat),
m_basePage(page),
m_createMode(true),
m_inProgressLock(false),
m_pbTrackerState(TRACKERPICK),
m_savePoint(QPointF(0.0,0.0)),
pointFromTracker(false)
{
if ( (m_basePage == nullptr) ||
(m_baseFeat == nullptr) ) {
//should be caught in CMD caller
Base::Console().Error("TaskCosVertex - bad parameters. Can not proceed.\n");
return;
}
ui->setupUi(this);
Gui::Document* activeGui = Gui::Application::Instance->getDocument(m_basePage->getDocument());
Gui::ViewProvider* vp = activeGui->getViewProvider(m_basePage);
ViewProviderPage* vpp = static_cast<ViewProviderPage*>(vp);
m_mdi = vpp->getMDIViewPage();
m_scene = m_mdi->m_scene;
m_view = m_mdi->getQGVPage();
setUiPrimary();
connect(ui->pbTracker, SIGNAL(clicked(bool)),
this, SLOT(onTrackerClicked(bool)));
m_trackerMode = QGTracker::TrackerMode::Point;
}
TaskCosVertex::~TaskCosVertex()
{
delete ui;
}
void TaskCosVertex::updateTask()
{
// blockUpdate = true;
// blockUpdate = false;
}
void TaskCosVertex::changeEvent(QEvent *e)
{
if (e->type() == QEvent::LanguageChange) {
ui->retranslateUi(this);
}
}
void TaskCosVertex::setUiPrimary()
{
// Base::Console().Message("TCV::setUiPrimary()\n");
setWindowTitle(QObject::tr("New Cosmetic Vertex"));
if (m_baseFeat != nullptr) {
std::string baseName = m_baseFeat->getNameInDocument();
ui->leBaseView->setText(Base::Tools::fromStdString(baseName));
}
ui->pbTracker->setText(QString::fromUtf8("Point Picker"));
ui->pbTracker->setEnabled(true);
ui->qsbX->setEnabled(true);
ui->qsbY->setEnabled(true);
ui->qsbZ->setEnabled(false);
}
void TaskCosVertex::updateUi(void)
{
//need to unscale & unRez m_savePoint for display
// double scale = m_baseFeat->getScale();
// double x = Rez::appX(m_savePoint.x() / scale);
// double y = Rez::appX(- m_savePoint.y() / scale) ;
double x = m_savePoint.x();
double y = - m_savePoint.y();
double z = 0.0;
ui->qsbX->setValue(x);
ui->qsbY->setValue(y);
ui->qsbZ->setValue(z);
}
void TaskCosVertex::addCosVertex(QPointF qPos)
{
// Base::Console().Message("TCV::addCosVertex(%s)\n", TechDraw::DrawUtil::formatVector(qPos).c_str());
Base::Vector3d pos(qPos.x(), -qPos.y());
// int idx =
(void) m_baseFeat->addRandomVertex(pos);
m_baseFeat->requestPaint();
}
//********** Tracker routines *******************************************************************
void TaskCosVertex::onTrackerClicked(bool b)
{
Q_UNUSED(b);
Base::Console().Message("TCV::onTrackerClicked() m_pbTrackerState: %d\n",
m_pbTrackerState);
if (m_pbTrackerState == TRACKERCANCEL) {
removeTracker();
m_pbTrackerState = TRACKERPICK;
ui->pbTracker->setText(QString::fromUtf8("Pick Points"));
enableTaskButtons(true);
setEditCursor(Qt::ArrowCursor);
return;
}
if (getCreateMode()) {
m_inProgressLock = true;
m_saveContextPolicy = m_mdi->contextMenuPolicy();
m_mdi->setContextMenuPolicy(Qt::PreventContextMenu);
m_trackerMode = QGTracker::TrackerMode::Point;
setEditCursor(Qt::CrossCursor);
startTracker();
QString msg = tr("Pick a point for cosmetic vertex");
getMainWindow()->statusBar()->show();
Gui::getMainWindow()->showMessage(msg,3000);
ui->pbTracker->setText(QString::fromUtf8("Escape picking"));
ui->pbTracker->setEnabled(true);
m_pbTrackerState = TRACKERCANCEL;
enableTaskButtons(false);
}
}
void TaskCosVertex::startTracker(void)
{
// Base::Console().Message("TCV::startTracker()\n");
if (m_trackerMode == QGTracker::TrackerMode::None) {
return;
}
if (m_tracker == nullptr) {
m_tracker = new QGTracker(m_scene, m_trackerMode);
QObject::connect(
m_tracker, SIGNAL(drawingFinished(std::vector<QPointF>, QGIView*)),
this , SLOT (onTrackerFinished(std::vector<QPointF>, QGIView*))
);
} else {
//this is too harsh. but need to avoid restarting process
throw Base::RuntimeError("TechDrawNewLeader - tracker already active\n");
}
setEditCursor(Qt::CrossCursor);
QString msg = tr("Left click to set a point");
Gui::getMainWindow()->statusBar()->show();
Gui::getMainWindow()->showMessage(msg,3000);
}
void TaskCosVertex::onTrackerFinished(std::vector<QPointF> pts, QGIView* qgParent)
{
Base::Console().Message("TCV::onTrackerFinished()\n");
if (pts.empty()) {
Base::Console().Error("TaskCosVertex - no points available\n");
return;
}
if (qgParent != nullptr) {
m_qgParent = qgParent;
} else {
//if vertex is outside of baseFeat, qgParent will be nullptr
QGVPage* qgvp = m_mdi->getQGVPage();
QGIView* qgiv = qgvp->findQViewForDocObj(m_baseFeat);
m_qgParent = qgiv;
Base::Console().Message("TaskCosVertex - qgParent is nullptr\n");
// return;
}
//save point unscaled.
double scale = m_baseFeat->getScale();
QPointF temp = pts.front();
QPointF temp2 = m_qgParent->mapFromScene(temp) / scale;
m_savePoint = Rez::appX(temp2);
pointFromTracker = true;
updateUi();
m_tracker->sleep(true);
m_inProgressLock = false;
ui->pbTracker->setEnabled(false);
enableTaskButtons(true);
setEditCursor(Qt::ArrowCursor);
}
void TaskCosVertex::removeTracker(void)
{
// Base::Console().Message("TCV::removeTracker()\n");
if ( (m_tracker != nullptr) &&
(m_tracker->scene() != nullptr) ) {
m_scene->removeItem(m_tracker);
delete m_tracker;
m_tracker = nullptr;
}
}
void TaskCosVertex::setEditCursor(QCursor c)
{
if (m_baseFeat != nullptr) {
QGIView* qgivBase = m_view->findQViewForDocObj(m_baseFeat);
qgivBase->setCursor(c);
}
}
void TaskCosVertex::abandonEditSession(void)
{
QString msg = tr("In progress edit abandoned. Start over.");
getMainWindow()->statusBar()->show();
Gui::getMainWindow()->showMessage(msg,4000);
ui->pbTracker->setEnabled(true);
setEditCursor(Qt::ArrowCursor);
}
void TaskCosVertex::saveButtons(QPushButton* btnOK,
QPushButton* btnCancel)
{
m_btnOK = btnOK;
m_btnCancel = btnCancel;
}
void TaskCosVertex::enableTaskButtons(bool b)
{
m_btnOK->setEnabled(b);
m_btnCancel->setEnabled(b);
}
//******************************************************************************
bool TaskCosVertex::accept()
{
// Base::Console().Message("TCV::accept()\n");
Gui::Document* doc = Gui::Application::Instance->getDocument(m_basePage->getDocument());
if (!doc) return false;
removeTracker();
if (pointFromTracker) {
addCosVertex(m_savePoint);
} else {
double x = ui->qsbX->rawValue();
double y = ui->qsbY->rawValue();
// double z = ui->qsbZ->rawValue();
QPointF uiPoint(x,-y);
addCosVertex(uiPoint);
}
m_baseFeat->recomputeFeature();
m_baseFeat->requestPaint();
m_mdi->setContextMenuPolicy(m_saveContextPolicy);
m_trackerMode = QGTracker::TrackerMode::None;
Gui::Command::doCommand(Gui::Command::Gui,"Gui.ActiveDocument.resetEdit()");
return true;
}
bool TaskCosVertex::reject()
{
Gui::Document* doc = Gui::Application::Instance->getDocument(m_basePage->getDocument());
if (!doc) return false;
if (m_mdi != nullptr) {
m_mdi->setContextMenuPolicy(m_saveContextPolicy);
}
m_trackerMode = QGTracker::TrackerMode::None;
//make sure any dangling objects are cleaned up
Gui::Command::doCommand(Gui::Command::Gui,"App.activeDocument().recompute()");
Gui::Command::doCommand(Gui::Command::Gui,"Gui.ActiveDocument.resetEdit()");
return false;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TaskDlgCosVertex::TaskDlgCosVertex(TechDraw::DrawViewPart* baseFeat,
TechDraw::DrawPage* page)
: TaskDialog()
{
widget = new TaskCosVertex(baseFeat,page);
taskbox = new Gui::TaskView::TaskBox(Gui::BitmapFactory().pixmap("actions/techdraw-mline"),
widget->windowTitle(), true, 0);
taskbox->groupLayout()->addWidget(widget);
Content.push_back(taskbox);
}
TaskDlgCosVertex::~TaskDlgCosVertex()
{
}
void TaskDlgCosVertex::update()
{
// widget->updateTask();
}
void TaskDlgCosVertex::modifyStandardButtons(QDialogButtonBox* box)
{
QPushButton* btnOK = box->button(QDialogButtonBox::Ok);
QPushButton* btnCancel = box->button(QDialogButtonBox::Cancel);
widget->saveButtons(btnOK, btnCancel);
}
//==== calls from the TaskView ===============================================================
void TaskDlgCosVertex::open()
{
}
void TaskDlgCosVertex::clicked(int)
{
}
bool TaskDlgCosVertex::accept()
{
widget->accept();
return true;
}
bool TaskDlgCosVertex::reject()
{
widget->reject();
return true;
}
#include <Mod/TechDraw/Gui/moc_TaskCosVertex.cpp>
+175
View File
@@ -0,0 +1,175 @@
/***************************************************************************
* Copyright (c) 2019 WandererFan <[email protected]> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef TECHDRAWGUI_TASKCOSVERTEX_H
#define TECHDRAWGUI_TASKCOSVERTEX_H
#include <App/DocumentObject.h>
#include <Base/Vector3D.h>
#include <Gui/TaskView/TaskView.h>
#include <Gui/TaskView/TaskDialog.h>
#include <Mod/TechDraw/Gui/ui_TaskCosVertex.h>
#include "QGTracker.h"
//TODO: make this a proper enum
#define TRACKERPICK 0
#define TRACKEREDIT 1
#define TRACKERCANCEL 2
#define TRACKERCANCELEDIT 3
class Ui_TaskCosVertex;
namespace App {
class DocumentObject;
}
namespace TechDraw
{
class DrawPage;
class DrawView;
class DrawCosVertex;
}
namespace TechDrawGui
{
class QGVPage;
class QGIView;
class QGIPrimPath;
class MDIViewPage;
class QGTracker;
class QGEPath;
class QGMText;
class QGICosVertex;
class ViewProviderLeader;
class TaskCosVertex : public QWidget
{
Q_OBJECT
public:
TaskCosVertex(TechDraw::DrawViewPart* baseFeat,
TechDraw::DrawPage* page);
/* TaskCosVertex(TechDrawGui::ViewProviderLeader* leadVP);*/
~TaskCosVertex();
public Q_SLOTS:
void onTrackerClicked(bool b);
void onTrackerFinished(std::vector<QPointF> pts, QGIView* qgParent);
public:
virtual bool accept();
virtual bool reject();
virtual void setCreateMode(bool b) { m_createMode = b; }
virtual bool getCreateMode(void) { return m_createMode; }
void updateTask();
void saveButtons(QPushButton* btnOK,
QPushButton* btnCancel);
void enableTaskButtons(bool b);
/*protected Q_SLOTS:*/
/* void onPointPicked(QPointF pt);*/
protected:
void changeEvent(QEvent *e);
void startTracker(void);
void removeTracker(void);
void abandonEditSession(void);
void addCosVertex(QPointF qPos);
void blockButtons(bool b);
void setUiPrimary(void);
void updateUi(void);
void setEditCursor(QCursor c);
QGIView* findParentQGIV();
private:
Ui_TaskCosVertex * ui;
bool blockUpdate;
QGTracker* m_tracker;
MDIViewPage* m_mdi;
QGraphicsScene* m_scene;
QGVPage* m_view;
/* ViewProviderLeader* m_lineVP;*/
TechDraw::DrawViewPart* m_baseFeat;
TechDraw::DrawPage* m_basePage;
/* TechDraw::DrawCosVertex* m_lineFeat;*/
/* std::string m_leaderName;*/
/* std::string m_leaderType;*/
QGIView* m_qgParent;
std::string m_qgParentName;
bool m_createMode;
QGTracker::TrackerMode m_trackerMode;
Qt::ContextMenuPolicy m_saveContextPolicy;
bool m_inProgressLock;
QPushButton* m_btnOK;
QPushButton* m_btnCancel;
int m_pbTrackerState;
QPointF m_savePoint;
bool pointFromTracker;
};
class TaskDlgCosVertex : public Gui::TaskView::TaskDialog
{
Q_OBJECT
public:
TaskDlgCosVertex(TechDraw::DrawViewPart* baseFeat,
TechDraw::DrawPage* page);
~TaskDlgCosVertex();
public:
/// is called the TaskView when the dialog is opened
virtual void open();
/// is called by the framework if an button is clicked which has no accept or reject role
virtual void clicked(int);
/// is called by the framework if the dialog is accepted (Ok)
virtual bool accept();
/// is called by the framework if the dialog is rejected (Cancel)
virtual bool reject();
/// is called by the framework if the user presses the help button
virtual void helpRequested() { return;}
virtual bool isAllowedAlterDocument(void) const
{ return false; }
void update();
void modifyStandardButtons(QDialogButtonBox* box);
protected:
private:
TaskCosVertex * widget;
Gui::TaskView::TaskBox* taskbox;
};
} //namespace TechDrawGui
#endif // #ifndef TECHDRAWGUI_TASKCOSVERTEX_H
+211
View File
@@ -0,0 +1,211 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TechDrawGui::TaskCosVertex</class>
<widget class="QWidget" name="TechDrawGui::TaskCosVertex">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>409</width>
<height>405</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>250</width>
<height>0</height>
</size>
</property>
<property name="windowTitle">
<string>Cosmetic Vertex</string>
</property>
<property name="windowIcon">
<iconset resource="Resources/TechDraw.qrc">
<normaloff>:/icons/actions/techdraw-point.svg</normaloff>:/icons/actions/techdraw-point.svg</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QFrame" name="frame">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::Box</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QLineEdit" name="leBaseView">
<property name="enabled">
<bool>false</bool>
</property>
<property name="mouseTracking">
<bool>false</bool>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Base View</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pbTracker">
<property name="text">
<string>Point Picker</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="3,0,3">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>X</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="Gui::QuantitySpinBox" name="qsbX">
<property name="unit" stdset="0">
<string notr="true"/>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2">
<widget class="Gui::QuantitySpinBox" name="qsbY">
<property name="unit" stdset="0">
<string notr="true"/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Z</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Y</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="Gui::QuantitySpinBox" name="qsbZ">
<property name="unit" stdset="0">
<string notr="true"/>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>Gui::QuantitySpinBox</class>
<extends>QWidget</extends>
<header>Gui/QuantitySpinBox.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="Resources/TechDraw.qrc"/>
</resources>
<connections/>
</ui>
+27 -8
View File
@@ -21,7 +21,6 @@
* *
***************************************************************************/
#include "PreCompiled.h"
#ifndef _PreComp_
@@ -61,7 +60,6 @@ Gui::MenuItem* Workbench::setupMenuBar() const
*draw << "TechDraw_NewViewSection";
*draw << "TechDraw_NewViewDetail";
*draw << "Separator";
*draw << "TechDraw_Annotation";
*draw << "TechDraw_DraftView";
*draw << "TechDraw_ArchView";
*draw << "TechDraw_Spreadsheet";
@@ -89,8 +87,12 @@ Gui::MenuItem* Workbench::setupMenuBar() const
*draw << "TechDraw_Image";
*draw << "TechDraw_ToggleFrame";
// *decor << "TechDraw_RedrawPage";
*draw << "TechDraw_Annotation";
*draw << "TechDraw_LeaderLine";
*draw << "TechDraw_RichAnno";
*draw << "TechDraw_CosmeticVertex";
*draw << "TechDraw_Midpoints";
*draw << "TechDraw_Quadrant";
return root;
}
@@ -110,7 +112,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
*views << "TechDraw_ProjGroup";
*views << "TechDraw_NewViewSection";
*views << "TechDraw_NewViewDetail";
*views << "TechDraw_Annotation";
// *views << "TechDraw_Annotation";
*views << "TechDraw_DraftView";
*views << "TechDraw_ArchView";
*views << "TechDraw_Spreadsheet";
@@ -147,8 +149,16 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
*decor << "TechDraw_Image";
*decor << "TechDraw_ToggleFrame";
// *decor << "TechDraw_RedrawPage";
*decor << "TechDraw_LeaderLine";
*decor << "TechDraw_RichAnno";
Gui::ToolBarItem *anno = new Gui::ToolBarItem(root);
anno->setCommand("TechDraw Annotation");
*anno << "TechDraw_Annotation";
*anno << "TechDraw_LeaderLine";
*anno << "TechDraw_RichAnno";
*anno << "TechDraw_CosmeticVertex";
*anno << "TechDraw_Midpoints";
*anno << "TechDraw_Quadrant";
return root;
}
@@ -167,7 +177,7 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const
*views << "TechDraw_ProjGroup";
*views << "TechDraw_NewViewSection";
*views << "TechDraw_NewViewDetail";
*views << "TechDraw_Annotation";
// *views << "TechDraw_Annotation";
*views << "TechDraw_DraftView";
*views << "TechDraw_Spreadsheet";
@@ -203,8 +213,17 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const
*decor << "TechDraw_Image";
*decor << "TechDraw_ToggleFrame";
// *decor << "TechDraw_RedrawPage";
*decor << "TechDraw_LeaderLine";
*decor << "TechDraw_RichAnno";
// *decor << "TechDraw_LeaderLine";
// *decor << "TechDraw_RichAnno";
Gui::ToolBarItem *anno = new Gui::ToolBarItem(root);
anno->setCommand("TechDraw Annotation");
*anno << "TechDraw_Annotation";
*anno << "TechDraw_LeaderLine";
*anno << "TechDraw_RichAnno";
*anno << "TechDraw_CosmeticVertex";
*anno << "TechDraw_Midpoints";
*anno << "TechDraw_Quadrant";
return root;
}