Initial version addCosmeticVertex
@@ -123,6 +123,8 @@ SET(Geometry_SRCS
|
||||
Geometry.h
|
||||
GeometryObject.cpp
|
||||
GeometryObject.h
|
||||
Cosmetic.cpp
|
||||
Cosmetic.h
|
||||
)
|
||||
|
||||
SET(Python_SRCS
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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())) {
|
||||
|
||||
@@ -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;*/
|
||||
|
||||
};
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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
|
||||
//===========================================================================
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -35,6 +35,7 @@ class DrawViewSection;
|
||||
class DrawHatch;
|
||||
class DrawGeomHatch;
|
||||
class DrawViewDetail;
|
||||
class DrawView;
|
||||
}
|
||||
|
||||
namespace TechDrawGui
|
||||
|
||||
@@ -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 |
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
|
||||