Merge pull request #447 from abdullahtahiriyo/bspline_2017
Bspline 2017
|
@ -460,6 +460,7 @@ PyMODINIT_FUNC initPart()
|
|||
Part::Geometry ::init();
|
||||
Part::GeomPoint ::init();
|
||||
Part::GeomCurve ::init();
|
||||
Part::GeomBoundedCurve ::init();
|
||||
Part::GeomBezierCurve ::init();
|
||||
Part::GeomBSplineCurve ::init();
|
||||
Part::GeomConic ::init();
|
||||
|
|
|
@ -71,7 +71,21 @@ int BSplineCurvePy::PyInit(PyObject* args, PyObject* /*kwd*/)
|
|||
return 0;
|
||||
}
|
||||
|
||||
PyObject* obj;
|
||||
// poles, [ periodic, degree, interpolate ]
|
||||
|
||||
obj = buildFromPoles(args);
|
||||
|
||||
if (obj) {
|
||||
Py_DECREF(obj);
|
||||
return 0;
|
||||
}
|
||||
else if (PyErr_ExceptionMatches(PartExceptionOCCError)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
PyErr_SetString(PyExc_TypeError, "B-Spline constructor accepts:\n"
|
||||
"-- poles, [ periodic, degree, interpolate ]\n"
|
||||
"-- empty parameter list\n");
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -421,10 +421,37 @@ bool GeomCurve::closestParameterToBasicCurve(const Base::Vector3d& point, double
|
|||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------
|
||||
TYPESYSTEM_SOURCE_ABSTRACT(Part::GeomBoundedCurve, Part::GeomCurve)
|
||||
|
||||
GeomBoundedCurve::GeomBoundedCurve()
|
||||
{
|
||||
}
|
||||
|
||||
GeomBoundedCurve::~GeomBoundedCurve()
|
||||
{
|
||||
}
|
||||
|
||||
Base::Vector3d GeomBoundedCurve::getStartPoint() const
|
||||
{
|
||||
Handle_Geom_BoundedCurve curve = Handle_Geom_BoundedCurve::DownCast(handle());
|
||||
gp_Pnt pnt = curve->StartPoint();
|
||||
|
||||
return Base::Vector3d(pnt.X(), pnt.Y(), pnt.Z());
|
||||
}
|
||||
|
||||
Base::Vector3d GeomBoundedCurve::getEndPoint() const
|
||||
{
|
||||
Handle_Geom_BoundedCurve curve = Handle_Geom_BoundedCurve::DownCast(handle());
|
||||
gp_Pnt pnt = curve->EndPoint();
|
||||
|
||||
return Base::Vector3d(pnt.X(), pnt.Y(), pnt.Z());
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------
|
||||
|
||||
TYPESYSTEM_SOURCE(Part::GeomBezierCurve,Part::GeomCurve)
|
||||
TYPESYSTEM_SOURCE(Part::GeomBezierCurve,Part::GeomBoundedCurve)
|
||||
|
||||
GeomBezierCurve::GeomBezierCurve()
|
||||
{
|
||||
|
@ -473,7 +500,7 @@ PyObject *GeomBezierCurve::getPyObject(void)
|
|||
|
||||
// -------------------------------------------------
|
||||
|
||||
TYPESYSTEM_SOURCE(Part::GeomBSplineCurve,Part::GeomCurve)
|
||||
TYPESYSTEM_SOURCE(Part::GeomBSplineCurve,Part::GeomBoundedCurve)
|
||||
|
||||
GeomBSplineCurve::GeomBSplineCurve()
|
||||
{
|
||||
|
@ -538,6 +565,27 @@ void GeomBSplineCurve::setPole(int index, const Base::Vector3d& pole, double wei
|
|||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setPoles(const std::vector<Base::Vector3d>& poles, const std::vector<double>& weights)
|
||||
{
|
||||
Standard_Integer index=0;
|
||||
|
||||
std::vector<Base::Vector3d>::const_iterator it1;
|
||||
std::vector<double>::const_iterator it2;
|
||||
|
||||
for(it1 = poles.begin(), it2 = weights.begin(); it1 != poles.end() && it2 != weights.end(); ++it1, ++it2, index++){
|
||||
setPole(index, (*it1), (*it2) );
|
||||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setPoles(const std::vector<Base::Vector3d>& poles)
|
||||
{
|
||||
Standard_Integer index=0;
|
||||
|
||||
for(std::vector<Base::Vector3d>::const_iterator it1 = poles.begin(); it1 != poles.end(); ++it1, index++){
|
||||
setPole(index, (*it1));
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<Base::Vector3d> GeomBSplineCurve::getPoles() const
|
||||
{
|
||||
std::vector<Base::Vector3d> poles;
|
||||
|
@ -552,6 +600,109 @@ std::vector<Base::Vector3d> GeomBSplineCurve::getPoles() const
|
|||
return poles;
|
||||
}
|
||||
|
||||
std::vector<double> GeomBSplineCurve::getWeights() const
|
||||
{
|
||||
std::vector<double> weights;
|
||||
weights.reserve(myCurve->NbPoles());
|
||||
TColStd_Array1OfReal w(1,myCurve->NbPoles());
|
||||
myCurve->Weights(w);
|
||||
|
||||
for (Standard_Integer i=w.Lower(); i<=w.Upper(); i++) {
|
||||
const Standard_Real& real = w(i);
|
||||
weights.push_back(real);
|
||||
}
|
||||
return weights;
|
||||
}
|
||||
|
||||
|
||||
void GeomBSplineCurve::setWeights(const std::vector<double>& weights)
|
||||
{
|
||||
try {
|
||||
Standard_Integer index=0;
|
||||
|
||||
for(std::vector<double>::const_iterator it = weights.begin(); it != weights.end(); ++it, index++){
|
||||
myCurve->SetWeight(index,(*it));
|
||||
}
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
std::cout << e->GetMessageString() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setKnot(int index, const double val, int mult)
|
||||
{
|
||||
try {
|
||||
if (mult < 0)
|
||||
myCurve->SetKnot(index+1, val);
|
||||
else
|
||||
myCurve->SetKnot(index+1, val, mult);
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
std::cout << e->GetMessageString() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setKnots(const std::vector<double>& knots)
|
||||
{
|
||||
Standard_Integer index=0;
|
||||
|
||||
for(std::vector<double>::const_iterator it1 = knots.begin(); it1 != knots.end(); ++it1, index++){
|
||||
setKnot(index, (*it1));
|
||||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setKnots(const std::vector<double>& knots, const std::vector<int>& multiplicities)
|
||||
{
|
||||
Standard_Integer index=0;
|
||||
|
||||
std::vector<double>::const_iterator it1;
|
||||
std::vector<int>::const_iterator it2;
|
||||
|
||||
for(it1 = knots.begin(), it2 = multiplicities.begin(); it1 != knots.end() && it2 != multiplicities.end(); ++it1, ++it2, index++){
|
||||
setKnot(index, (*it1), (*it2) );
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<double> GeomBSplineCurve::getKnots() const
|
||||
{
|
||||
std::vector<double> knots;
|
||||
knots.reserve(myCurve->NbKnots());
|
||||
TColStd_Array1OfReal k(1,myCurve->NbKnots());
|
||||
myCurve->Knots(k);
|
||||
|
||||
for (Standard_Integer i=k.Lower(); i<=k.Upper(); i++) {
|
||||
const Standard_Real& real = k(i);
|
||||
knots.push_back(real);
|
||||
}
|
||||
return knots;
|
||||
}
|
||||
|
||||
std::vector<int> GeomBSplineCurve::getMultiplicities() const
|
||||
{
|
||||
std::vector<int> mults;
|
||||
mults.reserve(myCurve->NbKnots());
|
||||
TColStd_Array1OfInteger m(1,myCurve->NbKnots());
|
||||
myCurve->Multiplicities(m);
|
||||
|
||||
for (Standard_Integer i=m.Lower(); i<=m.Upper(); i++) {
|
||||
const Standard_Integer& nm = m(i);
|
||||
mults.push_back(nm);
|
||||
}
|
||||
return mults;
|
||||
}
|
||||
|
||||
int GeomBSplineCurve::getDegree() const
|
||||
{
|
||||
return myCurve->Degree();
|
||||
}
|
||||
|
||||
bool GeomBSplineCurve::isPeriodic() const
|
||||
{
|
||||
return myCurve->IsPeriodic()==Standard_True;
|
||||
}
|
||||
|
||||
bool GeomBSplineCurve::join(const Handle_Geom_BSplineCurve& spline)
|
||||
{
|
||||
GeomConvert_CompCurveToBSplineCurve ccbc(this->myCurve);
|
||||
|
@ -651,9 +802,121 @@ void GeomBSplineCurve::makeC1Continuous(double tol, double ang_tol)
|
|||
}
|
||||
|
||||
// Persistence implementer
|
||||
unsigned int GeomBSplineCurve::getMemSize (void) const {assert(0); return 0;/* not implemented yet */}
|
||||
void GeomBSplineCurve::Save (Base::Writer &/*writer*/) const {assert(0); /* not implemented yet */}
|
||||
void GeomBSplineCurve::Restore (Base::XMLReader &/*reader*/) {assert(0); /* not implemented yet */}
|
||||
unsigned int GeomBSplineCurve::getMemSize (void) const
|
||||
{
|
||||
return sizeof(Geom_BSplineCurve);
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::Save(Base::Writer& writer) const
|
||||
{
|
||||
// save the attributes of the father class
|
||||
GeomCurve::Save(writer);
|
||||
|
||||
std::vector<Base::Vector3d> poles = this->getPoles();
|
||||
std::vector<double> weights = this->getWeights();
|
||||
std::vector<double> knots = this->getKnots();
|
||||
std::vector<int> mults = this->getMultiplicities();
|
||||
int degree = this->getDegree();
|
||||
bool isperiodic = this->isPeriodic();
|
||||
|
||||
writer.Stream()
|
||||
<< writer.ind()
|
||||
<< "<BSplineCurve "
|
||||
<< "PolesCount=\"" << poles.size() <<
|
||||
"\" KnotsCount=\"" << knots.size() <<
|
||||
"\" Degree=\"" << degree <<
|
||||
"\" IsPeriodic=\"" << (int) isperiodic <<
|
||||
"\">" << endl;
|
||||
|
||||
writer.incInd();
|
||||
|
||||
std::vector<Base::Vector3d>::const_iterator itp;
|
||||
std::vector<double>::const_iterator itw;
|
||||
|
||||
for(itp = poles.begin(), itw = weights.begin(); itp != poles.end() && itw != weights.end(); ++itp, ++itw){
|
||||
writer.Stream()
|
||||
<< writer.ind()
|
||||
<< "<Pole "
|
||||
<< "X=\"" << (*itp).x <<
|
||||
"\" Y=\"" << (*itp).y <<
|
||||
"\" Z=\"" << (*itp).z <<
|
||||
"\" Weight=\"" << (*itw) <<
|
||||
"\"/>" << endl;
|
||||
}
|
||||
|
||||
std::vector<double>::const_iterator itk;
|
||||
std::vector<int>::const_iterator itm;
|
||||
|
||||
for(itk = knots.begin(), itm = mults.begin(); itk != knots.end() && itm != mults.end(); ++itk, ++itm){
|
||||
writer.Stream()
|
||||
<< writer.ind()
|
||||
<< "<Knot "
|
||||
<< "Value=\"" << (*itk)
|
||||
<< "\" Mult=\"" << (*itm) <<
|
||||
"\"/>" << endl;
|
||||
}
|
||||
|
||||
writer.decInd();
|
||||
writer.Stream() << writer.ind() << "</BSplineCurve>" << endl ;
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::Restore(Base::XMLReader& reader)
|
||||
{
|
||||
// read the attributes of the father class
|
||||
GeomCurve::Restore(reader);
|
||||
|
||||
reader.readElement("BSplineCurve");
|
||||
// get the value of my attribute
|
||||
int polescount = reader.getAttributeAsInteger("PolesCount");
|
||||
int knotscount = reader.getAttributeAsInteger("KnotsCount");
|
||||
int degree = reader.getAttributeAsInteger("Degree");
|
||||
bool isperiodic = (bool) reader.getAttributeAsInteger("IsPeriodic");
|
||||
|
||||
// Handle_Geom_BSplineCurve spline = new
|
||||
// Geom_BSplineCurve(occpoles,occweights,occknots,occmults,degree,
|
||||
// PyObject_IsTrue(periodic) ? Standard_True : Standard_False,
|
||||
// PyObject_IsTrue(CheckRational) ? Standard_True : Standard_False);
|
||||
|
||||
TColgp_Array1OfPnt p(1,polescount);
|
||||
TColStd_Array1OfReal w(1,polescount);
|
||||
TColStd_Array1OfReal k(1,knotscount);
|
||||
TColStd_Array1OfInteger m(1,knotscount);
|
||||
|
||||
for (int i = 1; i <= polescount; i++) {
|
||||
reader.readElement("Pole");
|
||||
double X = reader.getAttributeAsFloat("X");
|
||||
double Y = reader.getAttributeAsFloat("Y");
|
||||
double Z = reader.getAttributeAsFloat("Z");
|
||||
double W = reader.getAttributeAsFloat("Weight");
|
||||
p.SetValue(i, gp_Pnt(X,Y,Z));
|
||||
w.SetValue(i, W);
|
||||
}
|
||||
|
||||
for (int i = 1; i <= knotscount; i++) {
|
||||
reader.readElement("Knot");
|
||||
double val = reader.getAttributeAsFloat("Value");
|
||||
Standard_Integer mult = reader.getAttributeAsInteger("Mult");
|
||||
k.SetValue(i, val);
|
||||
m.SetValue(i, mult);
|
||||
}
|
||||
|
||||
reader.readEndElement("BSplineCurve");
|
||||
// Geom_BSplineCurve(occpoles,occweights,occknots,occmults,degree,periodic,CheckRational
|
||||
|
||||
try {
|
||||
Handle_Geom_BSplineCurve spline = new Geom_BSplineCurve(p, w, k, m, degree, isperiodic==true?Standard_True:Standard_False, Standard_False);
|
||||
|
||||
if (!spline.IsNull())
|
||||
this->myCurve = spline;
|
||||
else
|
||||
throw Base::Exception("BSpline restore failed");
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PyObject *GeomBSplineCurve::getPyObject(void)
|
||||
{
|
||||
|
|
|
@ -130,7 +130,19 @@ public:
|
|||
bool closestParameterToBasicCurve(const Base::Vector3d& point, double &u) const;
|
||||
};
|
||||
|
||||
class PartExport GeomBezierCurve : public GeomCurve
|
||||
class PartExport GeomBoundedCurve : public GeomCurve
|
||||
{
|
||||
TYPESYSTEM_HEADER();
|
||||
public:
|
||||
GeomBoundedCurve();
|
||||
virtual ~GeomBoundedCurve();
|
||||
|
||||
// Geometry helper
|
||||
virtual Base::Vector3d getStartPoint() const;
|
||||
virtual Base::Vector3d getEndPoint() const;
|
||||
};
|
||||
|
||||
class PartExport GeomBezierCurve : public GeomBoundedCurve
|
||||
{
|
||||
TYPESYSTEM_HEADER();
|
||||
public:
|
||||
|
@ -153,7 +165,7 @@ private:
|
|||
Handle_Geom_BezierCurve myCurve;
|
||||
};
|
||||
|
||||
class PartExport GeomBSplineCurve : public GeomCurve
|
||||
class PartExport GeomBSplineCurve : public GeomBoundedCurve
|
||||
{
|
||||
TYPESYSTEM_HEADER();
|
||||
public:
|
||||
|
@ -183,7 +195,18 @@ public:
|
|||
|
||||
int countPoles() const;
|
||||
void setPole(int index, const Base::Vector3d&, double weight=-1);
|
||||
void setPoles(const std::vector<Base::Vector3d>& poles, const std::vector<double>& weights);
|
||||
void setPoles(const std::vector<Base::Vector3d>& poles);
|
||||
void setWeights(const std::vector<double>& weights);
|
||||
void setKnot(int index, const double val, int mult=-1);
|
||||
void setKnots(const std::vector<double>& knots);
|
||||
void setKnots(const std::vector<double>& knots, const std::vector<int>& multiplicities);
|
||||
std::vector<Base::Vector3d> getPoles() const;
|
||||
std::vector<double> getWeights() const;
|
||||
std::vector<double> getKnots() const;
|
||||
std::vector<int> getMultiplicities() const;
|
||||
int getDegree() const;
|
||||
bool isPeriodic() const;
|
||||
bool join(const Handle_Geom_BSplineCurve&);
|
||||
void makeC1Continuous(double, double);
|
||||
std::list<Geometry*> toBiArcs(double tolerance) const;
|
||||
|
|
|
@ -56,7 +56,8 @@ Constraint::Constraint()
|
|||
ThirdPos(none),
|
||||
LabelDistance(10.f),
|
||||
LabelPosition(0.f),
|
||||
isDriving(true)
|
||||
isDriving(true),
|
||||
InternalAlignmentIndex(-1)
|
||||
{
|
||||
// Initialize a random number generator, to avoid Valgrind false positives.
|
||||
static boost::mt19937 ran;
|
||||
|
@ -85,7 +86,8 @@ Constraint::Constraint(const Constraint& from)
|
|||
LabelDistance(from.LabelDistance),
|
||||
LabelPosition(from.LabelPosition),
|
||||
isDriving(from.isDriving),
|
||||
tag(from.tag)
|
||||
tag(from.tag),
|
||||
InternalAlignmentIndex(from.InternalAlignmentIndex)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -114,6 +116,7 @@ Constraint *Constraint::copy(void) const
|
|||
temp->LabelDistance = this->LabelDistance;
|
||||
temp->LabelPosition = this->LabelPosition;
|
||||
temp->isDriving = this->isDriving;
|
||||
temp->InternalAlignmentIndex = this->InternalAlignmentIndex;
|
||||
// Do not copy tag, otherwise it is considered a clone, and a "rename" by the expression engine.
|
||||
return temp;
|
||||
}
|
||||
|
@ -172,22 +175,24 @@ unsigned int Constraint::getMemSize (void) const
|
|||
void Constraint::Save (Writer &writer) const
|
||||
{
|
||||
writer.Stream() << writer.ind() << "<Constrain "
|
||||
<< "Name=\"" << Name << "\" "
|
||||
<< "Type=\"" << (int)Type << "\" ";
|
||||
<< "Name=\"" << Name << "\" "
|
||||
<< "Type=\"" << (int)Type << "\" ";
|
||||
if(this->Type==InternalAlignment)
|
||||
writer.Stream()
|
||||
<< "InternalAlignmentType=\"" << (int)AlignmentType << "\" ";
|
||||
<< "InternalAlignmentType=\"" << (int)AlignmentType << "\" "
|
||||
<< "InternalAlignmentIndex=\"" << InternalAlignmentIndex << "\" ";
|
||||
writer.Stream()
|
||||
<< "Value=\"" << Value << "\" "
|
||||
<< "First=\"" << First << "\" "
|
||||
<< "FirstPos=\"" << (int) FirstPos << "\" "
|
||||
<< "Second=\"" << Second << "\" "
|
||||
<< "SecondPos=\"" << (int) SecondPos << "\" "
|
||||
<< "Third=\"" << Third << "\" "
|
||||
<< "ThirdPos=\"" << (int) ThirdPos << "\" "
|
||||
<< "LabelDistance=\"" << LabelDistance << "\" "
|
||||
<< "LabelPosition=\"" << LabelPosition << "\" "
|
||||
<< "IsDriving=\"" << (int)isDriving << "\" />"
|
||||
<< "Value=\"" << Value << "\" "
|
||||
<< "First=\"" << First << "\" "
|
||||
<< "FirstPos=\"" << (int) FirstPos << "\" "
|
||||
<< "Second=\"" << Second << "\" "
|
||||
<< "SecondPos=\"" << (int) SecondPos << "\" "
|
||||
<< "Third=\"" << Third << "\" "
|
||||
<< "ThirdPos=\"" << (int) ThirdPos << "\" "
|
||||
<< "LabelDistance=\"" << LabelDistance << "\" "
|
||||
<< "LabelPosition=\"" << LabelPosition << "\" "
|
||||
<< "IsDriving=\"" << (int)isDriving << "\" />"
|
||||
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
|
@ -202,10 +207,15 @@ void Constraint::Restore(XMLReader &reader)
|
|||
Second = reader.getAttributeAsInteger("Second");
|
||||
SecondPos = (PointPos) reader.getAttributeAsInteger("SecondPos");
|
||||
|
||||
if(this->Type==InternalAlignment)
|
||||
if(this->Type==InternalAlignment) {
|
||||
AlignmentType = (InternalAlignmentType) reader.getAttributeAsInteger("InternalAlignmentType");
|
||||
else
|
||||
|
||||
if (reader.hasAttribute("InternalAlignmentIndex"))
|
||||
InternalAlignmentIndex = reader.getAttributeAsInteger("InternalAlignmentIndex");
|
||||
}
|
||||
else {
|
||||
AlignmentType = Undef;
|
||||
}
|
||||
|
||||
// read the third geo group if present
|
||||
if (reader.hasAttribute("Third")) {
|
||||
|
|
|
@ -67,7 +67,8 @@ enum InternalAlignmentType {
|
|||
HyperbolaMajor = 5,
|
||||
HyperbolaMinor = 6,
|
||||
HyperbolaFocus = 7,
|
||||
ParabolaFocus = 8
|
||||
ParabolaFocus = 8,
|
||||
BSplineControlPoint = 9 // in this constraint "Third" is used to indicate the index of the control point (0-poles), it is not a GeoId
|
||||
};
|
||||
|
||||
/// define if you want to use the end or start point
|
||||
|
@ -110,11 +111,12 @@ public:
|
|||
PointPos FirstPos;
|
||||
int Second;
|
||||
PointPos SecondPos;
|
||||
int Third;
|
||||
int Third;
|
||||
PointPos ThirdPos;
|
||||
float LabelDistance;
|
||||
float LabelPosition;
|
||||
bool isDriving;
|
||||
int InternalAlignmentIndex; // Note: for InternalAlignment Type this index indexes equal internal geometry elements (e.g. index of pole in a bspline). It is not a GeoId!!
|
||||
|
||||
protected:
|
||||
boost::uuids::uuid tag;
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
#include <Mod/Part/App/ParabolaPy.h>
|
||||
#include <Mod/Part/App/ArcOfParabolaPy.h>
|
||||
#include <Mod/Part/App/LineSegmentPy.h>
|
||||
#include <Mod/Part/App/BSplineCurvePy.h>
|
||||
|
||||
#include <TopoDS.hxx>
|
||||
#include <TopoDS_Edge.hxx>
|
||||
|
@ -87,6 +88,7 @@ void Sketch::clear(void)
|
|||
ArcsOfEllipse.clear();
|
||||
ArcsOfHyperbola.clear();
|
||||
ArcsOfParabola.clear();
|
||||
BSplines.clear();
|
||||
|
||||
// deleting the doubles allocated with new
|
||||
for (std::vector<double*>::iterator it = Parameters.begin(); it != Parameters.end(); ++it)
|
||||
|
@ -182,6 +184,8 @@ const char* nameByType(Sketch::GeoType type)
|
|||
return "arcofhyperbola";
|
||||
case Sketch::ArcOfParabola:
|
||||
return "arcofparabola";
|
||||
case Sketch::BSpline:
|
||||
return "bspline";
|
||||
case Sketch::None:
|
||||
default:
|
||||
return "unknown";
|
||||
|
@ -224,6 +228,10 @@ int Sketch::addGeometry(const Part::Geometry *geo, bool fixed)
|
|||
const GeomArcOfParabola *aop = dynamic_cast<const GeomArcOfParabola*>(geo);
|
||||
// create the definition struct for that geom
|
||||
return addArcOfParabola(*aop, fixed);
|
||||
} else if (geo->getTypeId() == GeomBSplineCurve::getClassTypeId()) { // add a bspline
|
||||
const GeomBSplineCurve *bsp = static_cast<const GeomBSplineCurve*>(geo);
|
||||
// create the definition struct for that geom
|
||||
return addBSpline(*bsp, fixed);
|
||||
}
|
||||
else {
|
||||
throw Base::TypeError("Sketch::addGeometry(): Unknown or unsupported type added to a sketch");
|
||||
|
@ -646,6 +654,113 @@ int Sketch::addArcOfParabola(const Part::GeomArcOfParabola ¶bolaSegment, boo
|
|||
return Geoms.size()-1;
|
||||
}
|
||||
|
||||
int Sketch::addBSpline(const Part::GeomBSplineCurve &bspline, bool fixed)
|
||||
{
|
||||
std::vector<double *> ¶ms = fixed ? FixParameters : Parameters;
|
||||
|
||||
// create our own copy
|
||||
GeomBSplineCurve *bsp = static_cast<GeomBSplineCurve*>(bspline.clone());
|
||||
// create the definition struct for that geom
|
||||
GeoDef def;
|
||||
def.geo = bsp;
|
||||
def.type = BSpline;
|
||||
|
||||
std::vector<Base::Vector3d> poles = bsp->getPoles();
|
||||
std::vector<double> weights = bsp->getWeights();
|
||||
std::vector<double> knots = bsp->getKnots();
|
||||
std::vector<int> mult = bsp->getMultiplicities();
|
||||
int degree = bsp->getDegree();
|
||||
bool periodic = bsp->isPeriodic();
|
||||
|
||||
Base::Vector3d startPnt = bsp->getStartPoint();
|
||||
Base::Vector3d endPnt = bsp->getEndPoint();
|
||||
|
||||
std::vector<GCS::Point> spoles;
|
||||
|
||||
for(std::vector<Base::Vector3d>::const_iterator it = poles.begin(); it != poles.end(); ++it){
|
||||
params.push_back(new double( (*it).x ));
|
||||
params.push_back(new double( (*it).y ));
|
||||
|
||||
GCS::Point p;
|
||||
p.x = params[params.size()-2];
|
||||
p.y = params[params.size()-1];
|
||||
|
||||
spoles.push_back(p);
|
||||
}
|
||||
|
||||
std::vector<double *> sweights;
|
||||
|
||||
for(std::vector<double>::const_iterator it = weights.begin(); it != weights.end(); ++it) {
|
||||
params.push_back(new double( (*it) ));
|
||||
sweights.push_back(params[params.size()-1]);
|
||||
}
|
||||
|
||||
std::vector<double *> sknots;
|
||||
|
||||
for(std::vector<double>::const_iterator it = knots.begin(); it != knots.end(); ++it) {
|
||||
double * knot = new double( (*it) );
|
||||
//params.push_back(knot);
|
||||
sknots.push_back(knot);
|
||||
}
|
||||
|
||||
GCS::Point p1, p2;
|
||||
|
||||
double * p1x = new double(startPnt.x);
|
||||
double * p1y = new double(startPnt.y);
|
||||
|
||||
// if periodic, startpoint and endpoint do not play a role in the solver, this removes unnecesarry DoF of determining where in the curve
|
||||
// the start and the stop should be
|
||||
if(!periodic) {
|
||||
params.push_back(p1x);
|
||||
params.push_back(p1y);
|
||||
}
|
||||
|
||||
p1.x = p1x;
|
||||
p1.y = p1y;
|
||||
|
||||
double * p2x = new double(endPnt.x);
|
||||
double * p2y = new double(endPnt.y);
|
||||
|
||||
// if periodic, startpoint and endpoint do not play a role in the solver, this removes unnecesarry DoF of determining where in the curve
|
||||
// the start and the stop should be
|
||||
if(!periodic) {
|
||||
params.push_back(p2x);
|
||||
params.push_back(p2y);
|
||||
}
|
||||
p2.x = p2x;
|
||||
p2.y = p2y;
|
||||
|
||||
def.startPointId = Points.size();
|
||||
Points.push_back(p1);
|
||||
def.endPointId = Points.size();
|
||||
Points.push_back(p2);
|
||||
|
||||
GCS::BSpline bs;
|
||||
bs.start = p1;
|
||||
bs.end = p2;
|
||||
bs.poles = spoles;
|
||||
bs.weights = sweights;
|
||||
bs.knots = sknots;
|
||||
bs.mult = mult;
|
||||
bs.degree = degree;
|
||||
bs.periodic = periodic;
|
||||
def.index = BSplines.size();
|
||||
BSplines.push_back(bs);
|
||||
|
||||
// store complete set
|
||||
Geoms.push_back(def);
|
||||
|
||||
// WARNING: This is only valid where the multiplicity of the endpoints conforms with a BSpline
|
||||
// only then the startpoint is the first control point and the endpoint is the last control point
|
||||
// accordingly, it is never the case for a periodic BSpline.
|
||||
if(!bs.periodic && bs.mult[0] > bs.degree && bs.mult[mult.size()-1] > bs.degree) {
|
||||
GCSsys.addConstraintP2PCoincident(*(bs.poles.begin()),bs.start);
|
||||
GCSsys.addConstraintP2PCoincident(*(bs.poles.end()-1),bs.end);
|
||||
}
|
||||
// return the position of the newly added geometry
|
||||
return Geoms.size()-1;
|
||||
}
|
||||
|
||||
int Sketch::addCircle(const Part::GeomCircle &cir, bool fixed)
|
||||
{
|
||||
std::vector<double *> ¶ms = fixed ? FixParameters : Parameters;
|
||||
|
@ -789,6 +904,9 @@ Py::Tuple Sketch::getPyGeometry(void) const
|
|||
} else if (it->type == ArcOfParabola) {
|
||||
GeomArcOfParabola *aop = dynamic_cast<GeomArcOfParabola*>(it->geo->clone());
|
||||
tuple[i] = Py::asObject(new ArcOfParabolaPy(aop));
|
||||
} else if (it->type == BSpline) {
|
||||
GeomBSplineCurve *bsp = dynamic_cast<GeomBSplineCurve*>(it->geo->clone());
|
||||
tuple[i] = Py::asObject(new BSplineCurvePy(bsp));
|
||||
} else {
|
||||
// not implemented type in the sketch!
|
||||
}
|
||||
|
@ -830,6 +948,9 @@ GCS::Curve* Sketch::getGCSCurveByGeoId(int geoId)
|
|||
case ArcOfParabola:
|
||||
return &ArcsOfParabola[Geoms[geoId].index];
|
||||
break;
|
||||
case BSpline:
|
||||
return &BSplines[Geoms[geoId].index];
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
};
|
||||
|
@ -1095,6 +1216,8 @@ int Sketch::addConstraint(const Constraint *constraint)
|
|||
case ParabolaFocus:
|
||||
rtn = addInternalAlignmentParabolaFocus(constraint->First,constraint->Second);
|
||||
break;
|
||||
case BSplineControlPoint:
|
||||
rtn = addInternalAlignmentBSplineControlPoint(constraint->First,constraint->Second, constraint->InternalAlignmentIndex);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -2294,6 +2417,32 @@ int Sketch::addInternalAlignmentParabolaFocus(int geoId1, int geoId2)
|
|||
return -1;
|
||||
}
|
||||
|
||||
int Sketch::addInternalAlignmentBSplineControlPoint(int geoId1, int geoId2, int poleindex)
|
||||
{
|
||||
std::swap(geoId1, geoId2);
|
||||
|
||||
geoId1 = checkGeoId(geoId1);
|
||||
geoId2 = checkGeoId(geoId2);
|
||||
|
||||
if (Geoms[geoId1].type != BSpline)
|
||||
return -1;
|
||||
if (Geoms[geoId2].type != Circle)
|
||||
return -1;
|
||||
|
||||
int pointId1 = getPointId(geoId2, mid);
|
||||
|
||||
if (pointId1 >= 0 && pointId1 < int(Points.size())) {
|
||||
GCS::Circle &c = Circles[Geoms[geoId2].index];
|
||||
|
||||
GCS::BSpline &b = BSplines[Geoms[geoId1].index];
|
||||
|
||||
int tag = ++ConstraintsCounter;
|
||||
GCSsys.addConstraintInternalAlignmentBSplineControlPoint(b, c, poleindex, tag);
|
||||
return ConstraintsCounter;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
double Sketch::calculateAngleViaPoint(int geoId1, int geoId2, double px, double py)
|
||||
{
|
||||
geoId1 = checkGeoId(geoId1);
|
||||
|
@ -2454,6 +2603,37 @@ bool Sketch::updateGeometry()
|
|||
aop->setFocal(fd.Length());
|
||||
|
||||
aop->setRange(*myArc.startAngle, *myArc.endAngle, /*emulateCCW=*/true);
|
||||
} else if (it->type == BSpline) {
|
||||
GCS::BSpline &mybsp = BSplines[it->index];
|
||||
|
||||
GeomBSplineCurve *bsp = dynamic_cast<GeomBSplineCurve*>(it->geo);
|
||||
|
||||
std::vector<Base::Vector3d> poles;
|
||||
std::vector<double> weights;
|
||||
|
||||
std::vector<GCS::Point>::const_iterator it1;
|
||||
std::vector<double *>::const_iterator it2;
|
||||
|
||||
for( it1 = mybsp.poles.begin(), it2 = mybsp.weights.begin(); it1 != mybsp.poles.end() && it2 != mybsp.weights.end(); ++it1, ++it2) {
|
||||
poles.push_back(Vector3d( *(*it1).x , *(*it1).y , 0.0));
|
||||
weights.push_back(*(*it2));
|
||||
}
|
||||
|
||||
bsp->setPoles(poles, weights);
|
||||
|
||||
std::vector<double> knots;
|
||||
std::vector<int> mult;
|
||||
|
||||
std::vector<double *>::const_iterator it3;
|
||||
std::vector<int>::const_iterator it4;
|
||||
|
||||
for( it3 = mybsp.knots.begin(), it4 = mybsp.mult.begin(); it3 != mybsp.knots.end() && it4 != mybsp.mult.end(); ++it3, ++it4) {
|
||||
knots.push_back(*(*it3));
|
||||
mult.push_back((*it4));
|
||||
}
|
||||
|
||||
bsp->setKnots(knots,mult);
|
||||
|
||||
}
|
||||
} catch (Base::Exception e) {
|
||||
Base::Console().Error("Updating geometry: Error build geometry(%d): %s\n",
|
||||
|
@ -2828,6 +3008,41 @@ int Sketch::initMove(int geoId, PointPos pos, bool fine)
|
|||
GCSsys.rescaleConstraint(i-1, 0.01);
|
||||
GCSsys.rescaleConstraint(i, 0.01);
|
||||
|
||||
}
|
||||
} else if (Geoms[geoId].type == BSpline) {
|
||||
if (pos == start || pos == end) {
|
||||
MoveParameters.resize(2); // x,y
|
||||
GCS::Point p0;
|
||||
p0.x = &MoveParameters[0];
|
||||
p0.y = &MoveParameters[1];
|
||||
if (pos == start) {
|
||||
GCS::Point &p = Points[Geoms[geoId].startPointId];
|
||||
*p0.x = *p.x;
|
||||
*p0.y = *p.y;
|
||||
GCSsys.addConstraintP2PCoincident(p0,p,-1);
|
||||
} else if (pos == end) {
|
||||
GCS::Point &p = Points[Geoms[geoId].endPointId];
|
||||
*p0.x = *p.x;
|
||||
*p0.y = *p.y;
|
||||
GCSsys.addConstraintP2PCoincident(p0,p,-1);
|
||||
}
|
||||
} else if (pos == none || pos == mid) {
|
||||
GCS::BSpline &bsp = BSplines[Geoms[geoId].index];
|
||||
MoveParameters.resize(bsp.poles.size()*2); // x0,y0,x1,y1,....xp,yp
|
||||
|
||||
int mvindex = 0;
|
||||
for(std::vector<GCS::Point>::iterator it = bsp.poles.begin(); it != bsp.poles.end() ; it++, mvindex++) {
|
||||
GCS::Point p1;
|
||||
p1.x = &MoveParameters[mvindex];
|
||||
mvindex++;
|
||||
p1.y = &MoveParameters[mvindex];
|
||||
|
||||
*p1.x = *(*it).x;
|
||||
*p1.y = *(*it).y;
|
||||
|
||||
GCSsys.addConstraintP2PCoincident(p1,(*it),-1);
|
||||
}
|
||||
|
||||
}
|
||||
} else if (Geoms[geoId].type == Arc) {
|
||||
GCS::Point ¢er = Points[Geoms[geoId].midPointId];
|
||||
|
@ -2936,7 +3151,30 @@ int Sketch::movePoint(int geoId, PointPos pos, Base::Vector3d toPoint, bool rela
|
|||
MoveParameters[0] = toPoint.x;
|
||||
MoveParameters[1] = toPoint.y;
|
||||
}
|
||||
}
|
||||
} else if (Geoms[geoId].type == BSpline) {
|
||||
if (pos == start || pos == end) {
|
||||
MoveParameters[0] = toPoint.x;
|
||||
MoveParameters[1] = toPoint.y;
|
||||
} else if (pos == none || pos == mid) {
|
||||
GCS::BSpline &bsp = BSplines[Geoms[geoId].index];
|
||||
|
||||
double cx = 0, cy = 0; // geometric center
|
||||
for (int i=0; i < int(InitParameters.size()-1); i+=2) {
|
||||
cx += InitParameters[i];
|
||||
cy += InitParameters[i+1];
|
||||
}
|
||||
|
||||
cx /= bsp.poles.size();
|
||||
cy /= bsp.poles.size();
|
||||
|
||||
for (int i=0; i < int(MoveParameters.size()-1); i+=2) {
|
||||
|
||||
MoveParameters[i] = toPoint.x + InitParameters[i] - cx;
|
||||
MoveParameters[i+1] = toPoint.y + InitParameters[i+1] - cy;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return solve();
|
||||
}
|
||||
|
|
|
@ -132,6 +132,8 @@ public:
|
|||
int addArcOfHyperbola(const Part::GeomArcOfHyperbola &hyperbolaSegment, bool fixed=false);
|
||||
/// add an arc of parabola
|
||||
int addArcOfParabola(const Part::GeomArcOfParabola ¶bolaSegment, bool fixed=false);
|
||||
/// add a BSpline
|
||||
int addBSpline(const Part::GeomBSplineCurve &spline, bool fixed=false);
|
||||
//@}
|
||||
|
||||
|
||||
|
@ -312,6 +314,7 @@ public:
|
|||
int addInternalAlignmentHyperbolaMinorDiameter(int geoId1, int geoId2);
|
||||
int addInternalAlignmentHyperbolaFocus(int geoId1, int geoId2);
|
||||
int addInternalAlignmentParabolaFocus(int geoId1, int geoId2);
|
||||
int addInternalAlignmentBSplineControlPoint(int geoId1, int geoId2, int poleindex);
|
||||
//@}
|
||||
public:
|
||||
//This func is to be used during angle-via-point constraint creation. It calculates
|
||||
|
@ -339,7 +342,8 @@ public:
|
|||
Ellipse = 5, // 1 Point(mid), 5 Parameters(x,y,r1,r2,phi) phi=angle xaxis of elipse with respect of sketch xaxis
|
||||
ArcOfEllipse = 6,
|
||||
ArcOfHyperbola = 7,
|
||||
ArcOfParabola = 8
|
||||
ArcOfParabola = 8,
|
||||
BSpline = 9
|
||||
};
|
||||
|
||||
float SolveTime;
|
||||
|
@ -388,6 +392,7 @@ protected:
|
|||
std::vector<GCS::ArcOfEllipse> ArcsOfEllipse;
|
||||
std::vector<GCS::ArcOfHyperbola> ArcsOfHyperbola;
|
||||
std::vector<GCS::ArcOfParabola> ArcsOfParabola;
|
||||
std::vector<GCS::BSpline> BSplines;
|
||||
|
||||
bool isInitMove;
|
||||
bool isFine;
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
# include <Geom_Ellipse.hxx>
|
||||
# include <Geom_Hyperbola.hxx>
|
||||
# include <Geom_Parabola.hxx>
|
||||
# include <Geom_BSplineCurve.hxx>
|
||||
# include <Geom_TrimmedCurve.hxx>
|
||||
# include <GeomAPI_ProjectPointOnSurf.hxx>
|
||||
# include <BRepOffsetAPI_NormalProjection.hxx>
|
||||
|
@ -514,6 +515,12 @@ Base::Vector3d SketchObject::getPoint(int GeoId, PointPos PosId) const
|
|||
return aop->getEndPoint();
|
||||
else if (PosId == mid)
|
||||
return aop->getCenter();
|
||||
} else if (geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
const Part::GeomBSplineCurve *bsp = static_cast<const Part::GeomBSplineCurve*>(geo);
|
||||
if (PosId == start)
|
||||
return bsp->getStartPoint();
|
||||
else if (PosId == end)
|
||||
return bsp->getEndPoint();
|
||||
}
|
||||
|
||||
return Base::Vector3d();
|
||||
|
@ -571,6 +578,7 @@ bool SketchObject::isSupportedGeometry(const Part::Geometry *geo) const
|
|||
geo->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomArcOfHyperbola::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomArcOfParabola::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomLineSegment::getClassTypeId()) {
|
||||
return true;
|
||||
}
|
||||
|
@ -2132,6 +2140,20 @@ int SketchObject::addSymmetric(const std::vector<int> &geoIdList, int refGeoId,
|
|||
geosymaoe->setRange(theta1,theta2,true);
|
||||
isStartEndInverted.insert(std::make_pair(*it, true));
|
||||
}
|
||||
else if(geosym->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){
|
||||
Part::GeomBSplineCurve *geosymbsp = static_cast<Part::GeomBSplineCurve *>(geosym);
|
||||
|
||||
std::vector<Base::Vector3d> poles = geosymbsp->getPoles();
|
||||
|
||||
for(std::vector<Base::Vector3d>::iterator it = poles.begin(); it != poles.end(); ++it){
|
||||
|
||||
(*it) = (*it) + 2.0*((*it).Perpendicular(refGeoLine->getStartPoint(),vectline)-(*it));
|
||||
}
|
||||
|
||||
geosymbsp->setPoles(poles);
|
||||
|
||||
isStartEndInverted.insert(std::make_pair(*it, false));
|
||||
}
|
||||
else if(geosym->getTypeId() == Part::GeomPoint::getClassTypeId()){
|
||||
Part::GeomPoint *geosympoint = static_cast<Part::GeomPoint *>(geosym);
|
||||
Base::Vector3d cp = geosympoint->getPoint();
|
||||
|
@ -2181,6 +2203,9 @@ int SketchObject::addSymmetric(const std::vector<int> &geoIdList, int refGeoId,
|
|||
else if(georef->getTypeId() == Part::GeomArcOfParabola::getClassTypeId()){
|
||||
const Part::GeomArcOfParabola *geosymaoe = static_cast<const Part::GeomArcOfParabola *>(georef);
|
||||
refpoint = geosymaoe->getStartPoint(true);
|
||||
} else if(georef->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){
|
||||
const Part::GeomBSplineCurve *geosymbsp = static_cast<const Part::GeomBSplineCurve *>(georef);
|
||||
refpoint = geosymbsp->getStartPoint();
|
||||
}
|
||||
break;
|
||||
case Sketcher::end:
|
||||
|
@ -2204,6 +2229,10 @@ int SketchObject::addSymmetric(const std::vector<int> &geoIdList, int refGeoId,
|
|||
const Part::GeomArcOfParabola *geosymaoe = static_cast<const Part::GeomArcOfParabola *>(georef);
|
||||
refpoint = geosymaoe->getEndPoint(true);
|
||||
}
|
||||
else if(georef->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){
|
||||
const Part::GeomBSplineCurve *geosymbsp = static_cast<const Part::GeomBSplineCurve *>(georef);
|
||||
refpoint = geosymbsp->getEndPoint();
|
||||
}
|
||||
break;
|
||||
case Sketcher::mid:
|
||||
if(georef->getTypeId() == Part::GeomCircle::getClassTypeId()){
|
||||
|
@ -2375,6 +2404,20 @@ int SketchObject::addSymmetric(const std::vector<int> &geoIdList, int refGeoId,
|
|||
geosymaoe->setRange(theta1,theta2,true);
|
||||
isStartEndInverted.insert(std::make_pair(*it, false));
|
||||
}
|
||||
else if(geosym->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){
|
||||
Part::GeomBSplineCurve *geosymbsp = static_cast<Part::GeomBSplineCurve *>(geosym);
|
||||
|
||||
std::vector<Base::Vector3d> poles = geosymbsp->getPoles();
|
||||
|
||||
for(std::vector<Base::Vector3d>::iterator it = poles.begin(); it != poles.end(); ++it){
|
||||
|
||||
(*it) = (*it) + 2.0*(refpoint-(*it));
|
||||
}
|
||||
|
||||
geosymbsp->setPoles(poles);
|
||||
|
||||
//isStartEndInverted.insert(std::make_pair(*it, false));
|
||||
}
|
||||
else if(geosym->getTypeId() == Part::GeomPoint::getClassTypeId()){
|
||||
Part::GeomPoint *geosympoint = static_cast<Part::GeomPoint *>(geosym);
|
||||
Base::Vector3d cp = geosympoint->getPoint();
|
||||
|
@ -2624,7 +2667,22 @@ int SketchObject::addCopy(const std::vector<int> &geoIdList, const Base::Vector3
|
|||
|
||||
if(it == geoIdList.begin())
|
||||
iterfirstpoint = geoaoe->getStartPoint(true);
|
||||
}
|
||||
}
|
||||
else if(geocopy->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){
|
||||
Part::GeomBSplineCurve *geobsp = static_cast<Part::GeomBSplineCurve *>(geocopy);
|
||||
|
||||
std::vector<Base::Vector3d> poles = geobsp->getPoles();
|
||||
|
||||
for(std::vector<Base::Vector3d>::iterator it = poles.begin(); it != poles.end(); ++it){
|
||||
|
||||
(*it) = (*it) + double(x)*displacement + double(y)*perpendicularDisplacement;
|
||||
}
|
||||
|
||||
geobsp->setPoles(poles);
|
||||
|
||||
if(it == geoIdList.begin())
|
||||
iterfirstpoint = geobsp->getStartPoint();
|
||||
}
|
||||
else if(geocopy->getTypeId() == Part::GeomPoint::getClassTypeId()){
|
||||
Part::GeomPoint *geopoint = static_cast<Part::GeomPoint *>(geocopy);
|
||||
Base::Vector3d cp = geopoint->getPoint();
|
||||
|
@ -3292,6 +3350,131 @@ int SketchObject::ExposeInternalGeometry(int GeoId)
|
|||
|
||||
return incrgeo; //number of added elements
|
||||
}
|
||||
else if(geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
|
||||
const Part::GeomBSplineCurve *bsp = static_cast<const Part::GeomBSplineCurve *>(geo);
|
||||
// First we search what has to be restored
|
||||
std::vector<bool> controlpoints(bsp->countPoles());
|
||||
std::vector<int> controlpointgeoids(bsp->countPoles());
|
||||
|
||||
bool isfirstweightconstrained = false;
|
||||
|
||||
std::vector<bool>::iterator itb;
|
||||
std::vector<int>::iterator it;
|
||||
|
||||
for(it=controlpointgeoids.begin(), itb=controlpoints.begin(); it!=controlpointgeoids.end() && itb!=controlpoints.end(); ++it, ++itb) {
|
||||
(*it)=-1;
|
||||
(*itb)=false;
|
||||
}
|
||||
|
||||
const std::vector< Sketcher::Constraint * > &vals = Constraints.getValues();
|
||||
|
||||
// search for existing poles
|
||||
for (std::vector< Sketcher::Constraint * >::const_iterator it= vals.begin();
|
||||
it != vals.end(); ++it) {
|
||||
if((*it)->Type == Sketcher::InternalAlignment && (*it)->Second == GeoId)
|
||||
{
|
||||
switch((*it)->AlignmentType){
|
||||
case Sketcher::BSplineControlPoint:
|
||||
controlpoints[(*it)->InternalAlignmentIndex] = true;
|
||||
controlpointgeoids[(*it)->InternalAlignmentIndex] = (*it)->First;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(controlpoints[0]) {
|
||||
// search for first pole weight constraint
|
||||
for (std::vector< Sketcher::Constraint * >::const_iterator it= vals.begin();
|
||||
it != vals.end(); ++it) {
|
||||
if((*it)->Type == Sketcher::Radius && (*it)->First == controlpointgeoids[0]) {
|
||||
isfirstweightconstrained = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int currentgeoid = getHighestCurveIndex();
|
||||
int incrgeo = 0;
|
||||
|
||||
std::vector<Part::Geometry *> igeo;
|
||||
std::vector<Constraint *> icon;
|
||||
|
||||
std::vector<Base::Vector3d> poles = bsp->getPoles();
|
||||
|
||||
double distance_p0_p1 = (poles[1]-poles[0]).Length(); // for visual purposes only
|
||||
|
||||
int index=0;
|
||||
|
||||
for(it=controlpointgeoids.begin(), itb=controlpoints.begin(); it!=controlpointgeoids.end() && itb!=controlpoints.end(); ++it, ++itb, index++) {
|
||||
|
||||
if(!(*itb)) // if controlpoint not existing
|
||||
{
|
||||
Part::GeomCircle *pc = new Part::GeomCircle();
|
||||
pc->setCenter(poles[index]);
|
||||
pc->setRadius(distance_p0_p1/6);
|
||||
|
||||
igeo.push_back(pc);
|
||||
|
||||
Sketcher::Constraint *newConstr = new Sketcher::Constraint();
|
||||
newConstr->Type = Sketcher::InternalAlignment;
|
||||
newConstr->AlignmentType = Sketcher::BSplineControlPoint;
|
||||
newConstr->First = currentgeoid+incrgeo+1;
|
||||
newConstr->FirstPos = Sketcher::mid;
|
||||
newConstr->Second = GeoId;
|
||||
newConstr->InternalAlignmentIndex = index;
|
||||
|
||||
icon.push_back(newConstr);
|
||||
|
||||
if(it != controlpointgeoids.begin()) {
|
||||
// if pole-weight newly created make it equal to first weight by default
|
||||
Sketcher::Constraint *newConstr2 = new Sketcher::Constraint();
|
||||
newConstr2->Type = Sketcher::Equal;
|
||||
newConstr2->First = currentgeoid+incrgeo+1;
|
||||
newConstr2->FirstPos = Sketcher::none;
|
||||
newConstr2->Second = controlpointgeoids[0];
|
||||
newConstr2->SecondPos = Sketcher::none;
|
||||
|
||||
icon.push_back(newConstr2);
|
||||
}
|
||||
else {
|
||||
controlpointgeoids[0] = currentgeoid+incrgeo+1;
|
||||
}
|
||||
|
||||
incrgeo++;
|
||||
}
|
||||
}
|
||||
|
||||
// constraint the first weight to allow for seamless weight modification and proper visualization
|
||||
if(!isfirstweightconstrained) {
|
||||
|
||||
Sketcher::Constraint *newConstr = new Sketcher::Constraint();
|
||||
newConstr->Type = Sketcher::Radius;
|
||||
newConstr->First = controlpointgeoids[0];
|
||||
newConstr->FirstPos = Sketcher::none;
|
||||
newConstr->setValue( round(distance_p0_p1/6)); // 1/6 is just an estimation for acceptable general visualization
|
||||
|
||||
icon.push_back(newConstr);
|
||||
|
||||
}
|
||||
|
||||
this->addGeometry(igeo,true);
|
||||
this->addConstraints(icon);
|
||||
|
||||
for (std::vector<Part::Geometry *>::iterator it=igeo.begin(); it != igeo.end(); ++it)
|
||||
if (*it)
|
||||
delete *it;
|
||||
|
||||
for (std::vector<Constraint *>::iterator it=icon.begin(); it != icon.end(); ++it)
|
||||
if (*it)
|
||||
delete *it;
|
||||
|
||||
icon.clear();
|
||||
igeo.clear();
|
||||
|
||||
return incrgeo; //number of added elements
|
||||
}
|
||||
else
|
||||
return -1; // not supported type
|
||||
}
|
||||
|
@ -3479,7 +3662,98 @@ int SketchObject::DeleteUnusedInternalGeometry(int GeoId)
|
|||
|
||||
return delgeometries.size(); //number of deleted elements
|
||||
}
|
||||
else
|
||||
else if( geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
|
||||
const Part::GeomBSplineCurve *bsp = static_cast<const Part::GeomBSplineCurve *>(geo);
|
||||
|
||||
// First we search existing IA
|
||||
std::vector<int> controlpointgeoids(bsp->countPoles());
|
||||
std::vector<int> associatedcontraints(bsp->countPoles());
|
||||
|
||||
std::vector<int>::iterator it;
|
||||
std::vector<int>::iterator ita;
|
||||
|
||||
for(it=controlpointgeoids.begin(), ita=associatedcontraints.begin(); it!=controlpointgeoids.end() && ita!=associatedcontraints.end(); ++it, ++ita) {
|
||||
(*it) = -1;
|
||||
(*ita) = 0;
|
||||
}
|
||||
|
||||
const std::vector< Sketcher::Constraint * > &vals = Constraints.getValues();
|
||||
|
||||
// search for existing poles
|
||||
for (std::vector< Sketcher::Constraint * >::const_iterator it= vals.begin();
|
||||
it != vals.end(); ++it) {
|
||||
if((*it)->Type == Sketcher::InternalAlignment && (*it)->Second == GeoId)
|
||||
{
|
||||
switch((*it)->AlignmentType){
|
||||
case Sketcher::BSplineControlPoint:
|
||||
controlpointgeoids[(*it)->InternalAlignmentIndex] = (*it)->First;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<int> delgeometries;
|
||||
bool firstpoledeleted = false;
|
||||
|
||||
for( it=controlpointgeoids.begin(), ita=associatedcontraints.begin(); it!=controlpointgeoids.end() && ita!=associatedcontraints.end(); ++it, ++ita) {
|
||||
if((*it) != -1) {
|
||||
// look for a circle at geoid index
|
||||
for (std::vector< Sketcher::Constraint * >::const_iterator itc= vals.begin();
|
||||
itc != vals.end(); ++itc) {
|
||||
|
||||
if((*itc)->Second == (*it) || (*itc)->First == (*it) || (*itc)->Third == (*it))
|
||||
(*ita)++;
|
||||
}
|
||||
|
||||
if((*ita)<3 ) { // IA + Weight
|
||||
delgeometries.push_back((*it));
|
||||
|
||||
if (it == controlpointgeoids.begin())
|
||||
firstpoledeleted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::sort(delgeometries.begin(), delgeometries.end()); // indices over an erased element get automatically updated!!
|
||||
|
||||
if(delgeometries.size()>0)
|
||||
{
|
||||
for (std::vector<int>::reverse_iterator it=delgeometries.rbegin(); it!=delgeometries.rend(); ++it) {
|
||||
delGeometry(*it);
|
||||
}
|
||||
}
|
||||
|
||||
// retest the first pole after removal of equality constraints from other poles
|
||||
associatedcontraints[0] = 0;
|
||||
delgeometries.clear();
|
||||
|
||||
if(controlpointgeoids[0] != -1 && !firstpoledeleted) {
|
||||
// look for a circle at geoid index
|
||||
for (std::vector< Sketcher::Constraint * >::const_iterator itc= vals.begin();
|
||||
itc != vals.end(); ++itc) {
|
||||
|
||||
if((*itc)->Second == controlpointgeoids[0] || (*itc)->First == controlpointgeoids[0] || (*itc)->Third == controlpointgeoids[0])
|
||||
associatedcontraints[0]++;
|
||||
}
|
||||
|
||||
if(associatedcontraints[0]<4 ) // IA + Weight + Radius
|
||||
delgeometries.push_back(controlpointgeoids[0]);
|
||||
}
|
||||
|
||||
if(delgeometries.size()>0)
|
||||
{
|
||||
for (std::vector<int>::reverse_iterator it=delgeometries.rbegin(); it!=delgeometries.rend(); ++it) {
|
||||
delGeometry(*it);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return delgeometries.size(); //number of deleted elements
|
||||
}
|
||||
else
|
||||
return -1; // not supported type
|
||||
}
|
||||
|
||||
|
@ -4213,6 +4487,11 @@ void SketchObject::rebuildVertexIndex(void)
|
|||
VertexId2PosId.push_back(end);
|
||||
VertexId2GeoId.push_back(i);
|
||||
VertexId2PosId.push_back(mid);
|
||||
} else if ((*it)->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
VertexId2GeoId.push_back(i);
|
||||
VertexId2PosId.push_back(start);
|
||||
VertexId2GeoId.push_back(i);
|
||||
VertexId2PosId.push_back(end);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -114,6 +114,7 @@ PyObject* SketchObjectPy::addGeometry(PyObject *args)
|
|||
geo->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomArcOfHyperbola::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomArcOfParabola::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomLineSegment::getClassTypeId()) {
|
||||
ret = this->getSketchObjectPtr()->addGeometry(geo,isConstruction);
|
||||
}
|
||||
|
@ -167,6 +168,7 @@ PyObject* SketchObjectPy::addGeometry(PyObject *args)
|
|||
geo->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomArcOfHyperbola::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomArcOfParabola::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomLineSegment::getClassTypeId()) {
|
||||
geoList.push_back(geo);
|
||||
}
|
||||
|
|
|
@ -1007,6 +1007,13 @@ int System::addConstraintInternalAlignmentParabolaFocus(Parabola &e, Point &p1,
|
|||
return addConstraintEqual(e.focus1.y, p1.y, tagId);
|
||||
}
|
||||
|
||||
int System::addConstraintInternalAlignmentBSplineControlPoint(BSpline &b, Circle &c, int poleindex, int tagId)
|
||||
{
|
||||
addConstraintEqual(b.poles[poleindex].x, c.center.x, tagId);
|
||||
addConstraintEqual(b.poles[poleindex].y, c.center.y, tagId);
|
||||
return addConstraintEqual(b.weights[poleindex], c.rad, tagId);
|
||||
}
|
||||
|
||||
|
||||
//calculates angle between two curves at point of their intersection p. If two
|
||||
//points are supplied, p is used for first curve and p2 for second, yielding a
|
||||
|
|
|
@ -233,6 +233,7 @@ namespace GCS
|
|||
int addConstraintInternalAlignmentHyperbolaMinorDiameter(Hyperbola &e, Point &p1, Point &p2, int tagId=0);
|
||||
int addConstraintInternalAlignmentHyperbolaFocus(Hyperbola &e, Point &p1, int tagId=0);
|
||||
int addConstraintInternalAlignmentParabolaFocus(Parabola &e, Point &p1, int tagId=0);
|
||||
int addConstraintInternalAlignmentBSplineControlPoint(BSpline &b, Circle &c, int poleindex, int tag=0);
|
||||
|
||||
double calculateAngleViaPoint(Curve &crv1, Curve &crv2, Point &p);
|
||||
double calculateAngleViaPoint(Curve &crv1, Curve &crv2, Point &p1, Point &p2);
|
||||
|
|
|
@ -607,4 +607,117 @@ ArcOfParabola* ArcOfParabola::Copy()
|
|||
return crv;
|
||||
}
|
||||
|
||||
// bspline
|
||||
DeriVector2 BSpline::CalculateNormal(Point& p, double* derivparam)
|
||||
{
|
||||
// place holder
|
||||
DeriVector2 ret;
|
||||
|
||||
if (mult[0] > degree && mult[mult.size()-1] > degree) {
|
||||
// if endpoints thru end poles
|
||||
if(*p.x == *start.x && *p.y == *start.y) {
|
||||
// and you are asking about the normal at start point
|
||||
// then tangency is defined by first to second poles
|
||||
DeriVector2 endpt(this->poles[1], derivparam);
|
||||
DeriVector2 spt(this->poles[0], derivparam);
|
||||
DeriVector2 npt(this->poles[2], derivparam); // next pole to decide normal direction
|
||||
|
||||
DeriVector2 tg = endpt.subtr(spt);
|
||||
DeriVector2 nv = npt.subtr(spt);
|
||||
|
||||
if ( tg.scalarProd(nv) > 0 )
|
||||
ret = tg.rotate90cw();
|
||||
else
|
||||
ret = tg.rotate90ccw();
|
||||
}
|
||||
else if(*p.x == *end.x && *p.y == *end.y) {
|
||||
// and you are asking about the normal at end point
|
||||
// then tangency is defined by last to last but one poles
|
||||
DeriVector2 endpt(this->poles[poles.size()-1], derivparam);
|
||||
DeriVector2 spt(this->poles[poles.size()-2], derivparam);
|
||||
DeriVector2 npt(this->poles[poles.size()-3], derivparam); // next pole to decide normal direction
|
||||
|
||||
DeriVector2 tg = endpt.subtr(spt);
|
||||
DeriVector2 nv = npt.subtr(spt);
|
||||
|
||||
if ( tg.scalarProd(nv) > 0 )
|
||||
ret = tg.rotate90ccw();
|
||||
else
|
||||
ret = tg.rotate90cw();
|
||||
} else {
|
||||
// another point and we have no clue until we implement De Boor
|
||||
ret = DeriVector2();
|
||||
}
|
||||
}
|
||||
else {
|
||||
// either periodic or abnormal endpoint multiplicity, we have no clue so currently unsupported
|
||||
ret = DeriVector2();
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
DeriVector2 BSpline::Value(double u, double du, double* derivparam)
|
||||
{
|
||||
|
||||
// place holder
|
||||
DeriVector2 ret = DeriVector2();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int BSpline::PushOwnParams(VEC_pD &pvec)
|
||||
{
|
||||
int cnt=0;
|
||||
|
||||
for(VEC_P::const_iterator it = poles.begin(); it != poles.end(); ++it) {
|
||||
pvec.push_back( (*it).x );
|
||||
pvec.push_back( (*it).y );
|
||||
}
|
||||
|
||||
cnt = cnt + poles.size() * 2;
|
||||
|
||||
pvec.insert(pvec.end(), weights.begin(), weights.end());
|
||||
cnt = cnt + weights.size();
|
||||
|
||||
pvec.insert(pvec.end(), knots.begin(), knots.end());
|
||||
cnt = cnt + knots.size();
|
||||
|
||||
pvec.push_back(start.x); cnt++;
|
||||
pvec.push_back(start.y); cnt++;
|
||||
pvec.push_back(end.x); cnt++;
|
||||
pvec.push_back(end.y); cnt++;
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
void BSpline::ReconstructOnNewPvec(VEC_pD &pvec, int &cnt)
|
||||
{
|
||||
for(VEC_P::iterator it = poles.begin(); it != poles.end(); ++it) {
|
||||
(*it).x = pvec[cnt]; cnt++;
|
||||
(*it).y = pvec[cnt]; cnt++;
|
||||
}
|
||||
|
||||
for(VEC_pD::iterator it = weights.begin(); it != weights.end(); ++it) {
|
||||
(*it) = pvec[cnt]; cnt++;
|
||||
}
|
||||
|
||||
for(VEC_pD::iterator it = knots.begin(); it != knots.end(); ++it) {
|
||||
(*it) = pvec[cnt]; cnt++;
|
||||
}
|
||||
|
||||
start.x=pvec[cnt]; cnt++;
|
||||
start.y=pvec[cnt]; cnt++;
|
||||
end.x=pvec[cnt]; cnt++;
|
||||
end.y=pvec[cnt]; cnt++;
|
||||
|
||||
}
|
||||
|
||||
BSpline* BSpline::Copy()
|
||||
{
|
||||
BSpline* crv = new BSpline(*this);
|
||||
return crv;
|
||||
}
|
||||
|
||||
}//namespace GCS
|
||||
|
|
|
@ -36,6 +36,8 @@ namespace GCS
|
|||
double *y;
|
||||
};
|
||||
|
||||
typedef std::vector<Point> VEC_P;
|
||||
|
||||
///Class DeriVector2 holds a vector value and its derivative on the
|
||||
///parameter that the derivatives are being calculated for now. x,y is the
|
||||
///actual vector (v). dx,dy is a derivative of the vector by a parameter
|
||||
|
@ -270,6 +272,32 @@ namespace GCS
|
|||
virtual ArcOfParabola* Copy();
|
||||
};
|
||||
|
||||
class BSpline: public Curve
|
||||
{
|
||||
public:
|
||||
BSpline(){periodic=false;degree=2;}
|
||||
virtual ~BSpline(){}
|
||||
// parameters
|
||||
VEC_P poles;
|
||||
VEC_pD weights;
|
||||
VEC_pD knots;
|
||||
// dependent parameters (depends on previous parameters,
|
||||
// but an "arcrules" constraint alike would be required to gain the commodity of simple coincident
|
||||
// with endpoint constraints)
|
||||
Point start;
|
||||
Point end;
|
||||
// not solver parameters
|
||||
VEC_I mult;
|
||||
int degree;
|
||||
bool periodic;
|
||||
// interface helpers
|
||||
DeriVector2 CalculateNormal(Point &p, double* derivparam = 0);
|
||||
virtual DeriVector2 Value(double u, double du, double* derivparam = 0);
|
||||
virtual int PushOwnParams(VEC_pD &pvec);
|
||||
virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt);
|
||||
virtual BSpline* Copy();
|
||||
};
|
||||
|
||||
} //namespace GCS
|
||||
|
||||
#endif // PLANEGCS_GEO_H
|
||||
|
|
|
@ -88,6 +88,7 @@ CmdSketcherToggleConstruction::CmdSketcherToggleConstruction()
|
|||
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateConic");
|
||||
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateCircle");
|
||||
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateRegularPolygon");
|
||||
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateBSpline");
|
||||
}
|
||||
|
||||
void CmdSketcherToggleConstruction::activated(int iMsg)
|
||||
|
|
|
@ -1939,6 +1939,16 @@ void CmdSketcherConstrainPointOnObject::activated(int iMsg)
|
|||
}
|
||||
if (points[iPnt].GeoId == curves[iCrv].GeoId)
|
||||
continue; //constraining a point of an element onto the element is a bad idea...
|
||||
|
||||
const Part::Geometry *geom = Obj->getGeometry(curves[iCrv].GeoId);
|
||||
|
||||
if( geom && geom->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ){
|
||||
// unsupported until normal to BSpline at any point implemented.
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("Point on BSpline edge currently unsupported."));
|
||||
continue;
|
||||
}
|
||||
|
||||
cnt++;
|
||||
Gui::Command::doCommand(
|
||||
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('PointOnObject',%d,%d,%d)) ",
|
||||
|
@ -2525,6 +2535,21 @@ void CmdSketcherConstrainPerpendicular::activated(int iMsg)
|
|||
QObject::tr("Cannot add a perpendicularity constraint at an unconnected point!"));
|
||||
return;
|
||||
}
|
||||
|
||||
// This code supports simple bspline endpoint perp to any other geometric curve
|
||||
const Part::Geometry *geom1 = Obj->getGeometry(GeoId1);
|
||||
const Part::Geometry *geom2 = Obj->getGeometry(GeoId2);
|
||||
|
||||
if( geom1 && geom2 &&
|
||||
( geom1->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ||
|
||||
geom2->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() )){
|
||||
|
||||
if(geom1->getTypeId() != Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
std::swap(GeoId1,GeoId2);
|
||||
std::swap(PosId1,PosId2);
|
||||
}
|
||||
// GeoId1 is the bspline now
|
||||
} // end of code supports simple bspline endpoint tangency
|
||||
|
||||
openCommand("add perpendicular constraint");
|
||||
Gui::Command::doCommand(
|
||||
|
@ -2553,6 +2578,15 @@ void CmdSketcherConstrainPerpendicular::activated(int iMsg)
|
|||
QObject::tr("Cannot add a perpendicularity constraint at an unconnected point!"));
|
||||
return;
|
||||
}
|
||||
|
||||
const Part::Geometry *geom2 = Obj->getGeometry(GeoId2);
|
||||
|
||||
if( geom2 && geom2->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ){
|
||||
// unsupported until normal to BSpline at any point implemented.
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("Perpendicular to BSpline edge currently unsupported."));
|
||||
return;
|
||||
}
|
||||
|
||||
openCommand("add perpendicularity constraint");
|
||||
Gui::Command::doCommand(
|
||||
|
@ -2573,12 +2607,23 @@ void CmdSketcherConstrainPerpendicular::activated(int iMsg)
|
|||
|
||||
const Part::Geometry *geo1 = Obj->getGeometry(GeoId1);
|
||||
const Part::Geometry *geo2 = Obj->getGeometry(GeoId2);
|
||||
|
||||
if (geo1->getTypeId() != Part::GeomLineSegment::getClassTypeId() &&
|
||||
geo2->getTypeId() != Part::GeomLineSegment::getClassTypeId()) {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("One of the selected edges should be a line."));
|
||||
return;
|
||||
}
|
||||
|
||||
if( geo1 && geo2 &&
|
||||
( geo1->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ||
|
||||
geo2->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() )){
|
||||
|
||||
// unsupported until tangent to BSpline at any point implemented.
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("Perpendicular to BSpline edge currently unsupported."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (geo1->getTypeId() == Part::GeomLineSegment::getClassTypeId())
|
||||
std::swap(GeoId1,GeoId2);
|
||||
|
@ -2875,6 +2920,21 @@ void CmdSketcherConstrainTangent::activated(int iMsg)
|
|||
return;
|
||||
}
|
||||
|
||||
// This code supports simple bspline endpoint tangency to any other geometric curve
|
||||
const Part::Geometry *geom1 = Obj->getGeometry(GeoId1);
|
||||
const Part::Geometry *geom2 = Obj->getGeometry(GeoId2);
|
||||
|
||||
if( geom1 && geom2 &&
|
||||
( geom1->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ||
|
||||
geom2->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() )){
|
||||
|
||||
if(geom1->getTypeId() != Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
std::swap(GeoId1,GeoId2);
|
||||
std::swap(PosId1,PosId2);
|
||||
}
|
||||
// GeoId1 is the bspline now
|
||||
} // end of code supports simple bspline endpoint tangency
|
||||
|
||||
openCommand("add tangent constraint");
|
||||
Gui::Command::doCommand(
|
||||
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Tangent',%d,%d,%d,%d)) ",
|
||||
|
@ -2902,6 +2962,15 @@ void CmdSketcherConstrainTangent::activated(int iMsg)
|
|||
QObject::tr("Cannot add a tangency constraint at an unconnected point!"));
|
||||
return;
|
||||
}
|
||||
|
||||
const Part::Geometry *geom2 = Obj->getGeometry(GeoId2);
|
||||
|
||||
if( geom2 && geom2->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ){
|
||||
// unsupported until tangent to BSpline at any point implemented.
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("Tangency to BSpline edge currently unsupported."));
|
||||
return;
|
||||
}
|
||||
|
||||
openCommand("add tangent constraint");
|
||||
Gui::Command::doCommand(
|
||||
|
@ -2923,6 +2992,17 @@ void CmdSketcherConstrainTangent::activated(int iMsg)
|
|||
const Part::Geometry *geom1 = Obj->getGeometry(GeoId1);
|
||||
const Part::Geometry *geom2 = Obj->getGeometry(GeoId2);
|
||||
|
||||
if( geom1 && geom2 &&
|
||||
( geom1->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ||
|
||||
geom2->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() )){
|
||||
|
||||
// unsupported until tangent to BSpline at any point implemented.
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("Tangency to BSpline edge currently unsupported."));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if( geom1 && geom2 &&
|
||||
( geom1->getTypeId() == Part::GeomEllipse::getClassTypeId() ||
|
||||
geom2->getTypeId() == Part::GeomEllipse::getClassTypeId() )){
|
||||
|
@ -3729,8 +3809,16 @@ void CmdSketcherConstrainEqual::activated(int iMsg)
|
|||
else
|
||||
hasAlreadyExternal = true;
|
||||
}
|
||||
|
||||
|
||||
const Part::Geometry *geo = Obj->getGeometry(GeoId);
|
||||
|
||||
if(geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
// unsupported as they are generally hereogeneus shapes
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("Equality for BSpline edge currently unsupported."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (geo->getTypeId() != Part::GeomLineSegment::getClassTypeId())
|
||||
lineSel = true;
|
||||
else if (geo->getTypeId() != Part::GeomArcOfCircle::getClassTypeId())
|
||||
|
@ -4027,6 +4115,15 @@ void CmdSketcherConstrainSnellsLaw::activated(int iMsg)
|
|||
strError = QObject::tr("Incompatible geometry is selected!", dmbg);
|
||||
throw(Base::Exception(""));
|
||||
};
|
||||
|
||||
const Part::Geometry *geo = Obj->getGeometry(GeoId3);
|
||||
|
||||
if( geo && geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ){
|
||||
// unsupported until normal to BSpline at any point implemented.
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("SnellsLaw on BSpline edge currently unsupported."));
|
||||
return;
|
||||
}
|
||||
|
||||
double n2divn1=0;
|
||||
|
||||
|
|
|
@ -4023,9 +4023,10 @@ public:
|
|||
currentgeoid++;
|
||||
|
||||
Gui::Command::doCommand(Gui::Command::Doc,
|
||||
"App.ActiveDocument.%s.ExposeInternalGeometry(%d)",
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
currentgeoid);
|
||||
"App.ActiveDocument.%s.ExposeInternalGeometry(%d)",
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
currentgeoid);
|
||||
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
Base::Console().Error("%s\n", e.what());
|
||||
|
@ -4276,6 +4277,430 @@ bool CmdSketcherCompCreateConic::isActive(void)
|
|||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
// ======================================================================================
|
||||
|
||||
/* XPM */
|
||||
static const char *cursor_createbspline[]={
|
||||
"32 32 3 1",
|
||||
"+ c white",
|
||||
"# c red",
|
||||
". c None",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"................................",
|
||||
"+++++...+++++...................",
|
||||
"................................",
|
||||
"......+...............###.......",
|
||||
"......+...............#.#.......",
|
||||
"......+...............###.......",
|
||||
"......+..............#..#.......",
|
||||
"......+.............#....#......",
|
||||
"....................#.+..#......",
|
||||
"..................+#+..+..#...+.",
|
||||
"................++#.....+.#..+..",
|
||||
"......+........+..#......++#+...",
|
||||
".......+......+..#.........#....",
|
||||
"........++..++..#..........###..",
|
||||
"..........++....#..........#.#..",
|
||||
"......#........#...........###..",
|
||||
".......#......#.................",
|
||||
"........#.....#.................",
|
||||
".........#...#..................",
|
||||
"..........###...................",
|
||||
"..........#.#...................",
|
||||
"..........###...................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................"};
|
||||
|
||||
class DrawSketchHandlerBSpline: public DrawSketchHandler
|
||||
{
|
||||
public:
|
||||
DrawSketchHandlerBSpline(int constructionMethod)
|
||||
: Mode(STATUS_SEEK_FIRST_CONTROLPOINT)
|
||||
, EditCurve(2)
|
||||
, ConstrMethod(constructionMethod)
|
||||
, CurrentConstraint(0)
|
||||
{
|
||||
std::vector<AutoConstraint> sugConstr1;
|
||||
sugConstr.push_back(sugConstr1);
|
||||
}
|
||||
|
||||
virtual ~DrawSketchHandlerBSpline() {}
|
||||
/// modes
|
||||
enum SELECT_MODE {
|
||||
STATUS_SEEK_FIRST_CONTROLPOINT,
|
||||
STATUS_SEEK_ADDITIONAL_CONTROLPOINTS,
|
||||
STATUS_CLOSE
|
||||
};
|
||||
|
||||
virtual void activated(ViewProviderSketch *)
|
||||
{
|
||||
setCursor(QPixmap(cursor_createbspline),7,7);
|
||||
}
|
||||
|
||||
virtual void mouseMove(Base::Vector2d onSketchPos)
|
||||
{
|
||||
if (Mode==STATUS_SEEK_FIRST_CONTROLPOINT) {
|
||||
setPositionText(onSketchPos);
|
||||
if (seekAutoConstraint(sugConstr[CurrentConstraint], onSketchPos, Base::Vector2d(0.f,0.f))) {
|
||||
renderSuggestConstraintsCursor(sugConstr[CurrentConstraint]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (Mode==STATUS_SEEK_ADDITIONAL_CONTROLPOINTS){
|
||||
|
||||
EditCurve[EditCurve.size()-1] = onSketchPos;
|
||||
|
||||
sketchgui->drawEdit(EditCurve);
|
||||
|
||||
float length = (EditCurve[EditCurve.size()-1] - EditCurve[EditCurve.size()-2]).Length();
|
||||
float angle = (EditCurve[EditCurve.size()-1] - EditCurve[EditCurve.size()-2]).GetAngle(Base::Vector2d(1.f,0.f));
|
||||
|
||||
SbString text;
|
||||
text.sprintf(" (%.1f,%.1fdeg)", length, angle * 180 / M_PI);
|
||||
setPositionText(EditCurve[EditCurve.size()-1], text);
|
||||
|
||||
if (seekAutoConstraint(sugConstr[CurrentConstraint], onSketchPos, Base::Vector2d(0.f,0.f))) {
|
||||
renderSuggestConstraintsCursor(sugConstr[CurrentConstraint]);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
applyCursor();
|
||||
}
|
||||
|
||||
virtual bool pressButton(Base::Vector2d onSketchPos)
|
||||
{
|
||||
if (Mode == STATUS_SEEK_FIRST_CONTROLPOINT) {
|
||||
|
||||
EditCurve[0] = onSketchPos;
|
||||
|
||||
Mode = STATUS_SEEK_ADDITIONAL_CONTROLPOINTS;
|
||||
|
||||
std::vector<AutoConstraint> sugConstrN;
|
||||
sugConstr.push_back(sugConstrN);
|
||||
CurrentConstraint++;
|
||||
}
|
||||
else if (Mode == STATUS_SEEK_ADDITIONAL_CONTROLPOINTS) {
|
||||
|
||||
EditCurve[EditCurve.size()-1] = onSketchPos;
|
||||
|
||||
// finish adding controlpoints on double click
|
||||
if (EditCurve[EditCurve.size()-2] == EditCurve[EditCurve.size()-1]) {
|
||||
EditCurve.pop_back();
|
||||
Mode = STATUS_CLOSE;
|
||||
}
|
||||
else {
|
||||
EditCurve.resize(EditCurve.size() + 1); // add one place for a pole
|
||||
std::vector<AutoConstraint> sugConstrN;
|
||||
sugConstr.push_back(sugConstrN);
|
||||
CurrentConstraint++;
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool releaseButton(Base::Vector2d /*onSketchPos*/)
|
||||
{
|
||||
if (Mode==STATUS_CLOSE) {
|
||||
unsetCursor();
|
||||
resetPositionText();
|
||||
|
||||
std::stringstream stream;
|
||||
|
||||
for (std::vector<Base::Vector2d>::const_iterator it=EditCurve.begin();
|
||||
it != EditCurve.end(); ++it) {
|
||||
stream << "App.Vector(" << (*it).x << "," << (*it).y << "),";
|
||||
}
|
||||
|
||||
std::string controlpoints = stream.str();
|
||||
|
||||
// remove last comma and add brackets
|
||||
int index = controlpoints.rfind(',');
|
||||
controlpoints.resize(index);
|
||||
|
||||
controlpoints.insert(0,1,'[');
|
||||
controlpoints.append(1,']');
|
||||
|
||||
int currentgeoid = getHighestCurveIndex();
|
||||
|
||||
try {
|
||||
|
||||
Gui::Command::openCommand("Add sketch BSplineCurve");
|
||||
|
||||
//Add arc of parabola
|
||||
Gui::Command::doCommand(Gui::Command::Doc,
|
||||
"App.ActiveDocument.%s.addGeometry(Part.BSplineCurve"
|
||||
"(%s,%s),"
|
||||
"%s)",
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
controlpoints.c_str(),
|
||||
ConstrMethod == 0 ?"False":"True",
|
||||
geometryCreationMode==Construction?"True":"False");
|
||||
|
||||
currentgeoid++;
|
||||
|
||||
Gui::Command::doCommand(Gui::Command::Doc,
|
||||
"App.ActiveDocument.%s.ExposeInternalGeometry(%d)",
|
||||
sketchgui->getObject()->getNameInDocument(),
|
||||
currentgeoid);
|
||||
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
Base::Console().Error("%s\n", e.what());
|
||||
Gui::Command::abortCommand();
|
||||
|
||||
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
|
||||
bool autoRecompute = hGrp->GetBool("AutoRecompute",false);
|
||||
|
||||
if(autoRecompute)
|
||||
Gui::Command::updateActive();
|
||||
else
|
||||
static_cast<Sketcher::SketchObject *>(sketchgui->getObject())->solve();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Gui::Command::commitCommand();
|
||||
|
||||
int poleindex=0;
|
||||
for(std::vector<std::vector<AutoConstraint>>::iterator it=sugConstr.begin(); it != sugConstr.end(); it++, poleindex++) {
|
||||
// add auto constraints
|
||||
if ((*it).size() > 0) {
|
||||
createAutoConstraints((*it), currentgeoid+1+poleindex, Sketcher::mid);
|
||||
(*it).clear();
|
||||
}
|
||||
}
|
||||
|
||||
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
|
||||
bool autoRecompute = hGrp->GetBool("AutoRecompute",false);
|
||||
|
||||
if(autoRecompute)
|
||||
Gui::Command::updateActive();
|
||||
else
|
||||
static_cast<Sketcher::SketchObject *>(sketchgui->getObject())->solve();
|
||||
|
||||
bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true);
|
||||
|
||||
if(continuousMode){
|
||||
// This code enables the continuous creation mode.
|
||||
Mode = STATUS_SEEK_FIRST_CONTROLPOINT;
|
||||
EditCurve.clear();
|
||||
sketchgui->drawEdit(EditCurve);
|
||||
EditCurve.resize(2);
|
||||
applyCursor();
|
||||
/* It is ok not to call to purgeHandler
|
||||
* in continuous creation mode because the
|
||||
* handler is destroyed by the quit() method on pressing the
|
||||
* right button of the mouse */
|
||||
}
|
||||
else{
|
||||
sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
protected:
|
||||
SELECT_MODE Mode;
|
||||
|
||||
std::vector<Base::Vector2d> EditCurve;
|
||||
|
||||
std::vector<std::vector<AutoConstraint>> sugConstr;
|
||||
|
||||
int CurrentConstraint;
|
||||
int ConstrMethod;
|
||||
|
||||
};
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherCreateBSpline);
|
||||
|
||||
CmdSketcherCreateBSpline::CmdSketcherCreateBSpline()
|
||||
: Command("Sketcher_CreateBSpline")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create B-Spline");
|
||||
sToolTipText = QT_TR_NOOP("Create a B-Spline via control point in the sketch.");
|
||||
sWhatsThis = "Sketcher_CreateBSpline";
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_CreateBSpline";
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherCreateBSpline::activated(int iMsg)
|
||||
{
|
||||
Q_UNUSED(iMsg);
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerBSpline(0) );
|
||||
}
|
||||
|
||||
/*void CmdSketcherCreateBSpline::updateAction(int mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case Normal:
|
||||
if (getAction())
|
||||
getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateBSpline"));
|
||||
break;
|
||||
case Construction:
|
||||
if (getAction())
|
||||
getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateBSpline_Constr"));
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
|
||||
bool CmdSketcherCreateBSpline::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
/// @brief Macro that declares a new sketcher command class 'CmdSketcherCreateBSpline'
|
||||
DEF_STD_CMD_A(CmdSketcherCreatePeriodicBSpline);
|
||||
|
||||
/**
|
||||
* @brief ctor
|
||||
*/
|
||||
CmdSketcherCreatePeriodicBSpline::CmdSketcherCreatePeriodicBSpline()
|
||||
: Command("Sketcher_CreatePeriodicBSpline")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create periodic B-Spline");
|
||||
sToolTipText = QT_TR_NOOP("Create a periodic B-Spline via control point in the sketch.");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_Create_Periodic_BSpline";
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
void CmdSketcherCreatePeriodicBSpline::activated(int iMsg)
|
||||
{
|
||||
Q_UNUSED(iMsg);
|
||||
ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerEllipse(1) );
|
||||
}
|
||||
|
||||
bool CmdSketcherCreatePeriodicBSpline::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
|
||||
/// @brief Macro that declares a new sketcher command class 'CmdSketcherCompCreateBSpline'
|
||||
DEF_STD_CMD_ACLU(CmdSketcherCompCreateBSpline);
|
||||
|
||||
/**
|
||||
* @brief ctor
|
||||
*/
|
||||
CmdSketcherCompCreateBSpline::CmdSketcherCompCreateBSpline()
|
||||
: Command("Sketcher_CompCreateBSpline")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create a bspline");
|
||||
sToolTipText = QT_TR_NOOP("Create a bspline in the sketch");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
eType = ForEdit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Instantiates the bspline handler when the bspline command activated
|
||||
* @param int iMsg
|
||||
*/
|
||||
void CmdSketcherCompCreateBSpline::activated(int iMsg)
|
||||
{
|
||||
if (iMsg == 0) {
|
||||
ActivateHandler(getActiveGuiDocument(), new DrawSketchHandlerBSpline(iMsg));
|
||||
} else if (iMsg == 1) {
|
||||
ActivateHandler(getActiveGuiDocument(), new DrawSketchHandlerBSpline(iMsg));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
// Since the default icon is reset when enabing/disabling the command we have
|
||||
// to explicitly set the icon of the used command.
|
||||
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
|
||||
QList<QAction*> a = pcAction->actions();
|
||||
|
||||
assert(iMsg < a.size());
|
||||
pcAction->setIcon(a[iMsg]->icon());
|
||||
}
|
||||
|
||||
Gui::Action * CmdSketcherCompCreateBSpline::createAction(void)
|
||||
{
|
||||
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
|
||||
pcAction->setDropDownMenu(true);
|
||||
applyCommandData(this->className(), pcAction);
|
||||
|
||||
QAction* bspline = pcAction->addAction(QString());
|
||||
bspline->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateBSpline"));
|
||||
|
||||
QAction* periodicbspline = pcAction->addAction(QString());
|
||||
periodicbspline->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create_Periodic_BSpline"));
|
||||
|
||||
_pcAction = pcAction;
|
||||
languageChange();
|
||||
|
||||
// default
|
||||
pcAction->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateBSpline"));
|
||||
int defaultId = 0;
|
||||
pcAction->setProperty("defaultAction", QVariant(defaultId));
|
||||
|
||||
return pcAction;
|
||||
}
|
||||
|
||||
void CmdSketcherCompCreateBSpline::updateAction(int mode)
|
||||
{
|
||||
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(getAction());
|
||||
if (!pcAction)
|
||||
return;
|
||||
|
||||
QList<QAction*> a = pcAction->actions();
|
||||
int index = pcAction->property("defaultAction").toInt();
|
||||
switch (mode) {
|
||||
case Normal:
|
||||
a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateBSpline"));
|
||||
a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create_Periodic_BSpline"));
|
||||
getAction()->setIcon(a[index]->icon());
|
||||
break;
|
||||
case Construction:
|
||||
a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateBSpline_Constr"));
|
||||
a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create_Periodic_BSpline_Constr"));
|
||||
getAction()->setIcon(a[index]->icon());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CmdSketcherCompCreateBSpline::languageChange()
|
||||
{
|
||||
Command::languageChange();
|
||||
|
||||
if (!_pcAction)
|
||||
return;
|
||||
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
|
||||
QList<QAction*> a = pcAction->actions();
|
||||
|
||||
QAction* bspline = a[0];
|
||||
bspline->setText(QApplication::translate("Sketcher_CreateBSpline","BSpline by control points or poles"));
|
||||
bspline->setToolTip(QApplication::translate("Sketcher_CreateBSpline","Create a BSpline by control points or poles"));
|
||||
bspline->setStatusTip(QApplication::translate("Sketcher_CreateBSpline","Create a BSpline by control points or poles"));
|
||||
QAction* periodicbspline = a[1];
|
||||
periodicbspline->setText(QApplication::translate("Sketcher_Create_Periodic_BSpline","Periodic BSpline by control points or poles"));
|
||||
periodicbspline->setToolTip(QApplication::translate("Sketcher_Create_Periodic_BSpline","Create a periodic BSpline by control points or poles"));
|
||||
periodicbspline->setStatusTip(QApplication::translate("Sketcher_Create_Periodic_BSpline","Create a periodic BSpline by control points or poles"));
|
||||
}
|
||||
|
||||
bool CmdSketcherCompCreateBSpline::isActive(void)
|
||||
{
|
||||
return isCreateGeoActive(getActiveGuiDocument());
|
||||
}
|
||||
|
||||
|
||||
// ======================================================================================
|
||||
|
||||
/* XPM */
|
||||
|
@ -6343,6 +6768,9 @@ void CreateSketcherCommandsCreateGeo(void)
|
|||
rcCmdMgr.addCommand(new CmdSketcherCreateArcOfEllipse());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateArcOfHyperbola());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateArcOfParabola());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateBSpline());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreatePeriodicBSpline());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCompCreateBSpline());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateLine());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreatePolyline());
|
||||
rcCmdMgr.addCommand(new CmdSketcherCreateRectangle());
|
||||
|
|
|
@ -765,7 +765,8 @@ void CmdSketcherRestoreInternalAlignmentGeometry::activated(int iMsg)
|
|||
if( geo->getTypeId() == Part::GeomEllipse::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomArcOfHyperbola::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomArcOfParabola::getClassTypeId() ) {
|
||||
geo->getTypeId() == Part::GeomArcOfParabola::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ) {
|
||||
|
||||
int currentgeoid = Obj->getHighestCurveIndex();
|
||||
|
||||
|
|
|
@ -62,6 +62,8 @@
|
|||
<file>icons/Sketcher_Create3PointCircle_Constr.svg</file>
|
||||
<file>icons/Sketcher_CreateArc.svg</file>
|
||||
<file>icons/Sketcher_CreateArc_Constr.svg</file>
|
||||
<file>icons/Sketcher_CreateBSpline.svg</file>
|
||||
<file>icons/Sketcher_CreateBSpline_Constr.svg</file>
|
||||
<file>icons/Sketcher_CreateCircle.svg</file>
|
||||
<file>icons/Sketcher_CreateCircle_Constr.svg</file>
|
||||
<file>icons/Sketcher_CreateEllipse.svg</file>
|
||||
|
@ -91,12 +93,17 @@
|
|||
<file>icons/Sketcher_CreateText.svg</file>
|
||||
<file>icons/Sketcher_CreateTriangle.svg</file>
|
||||
<file>icons/Sketcher_CreateTriangle_Constr.svg</file>
|
||||
<file>icons/Sketcher_Create_Periodic_BSpline.svg</file>
|
||||
<file>icons/Sketcher_Create_Periodic_BSpline_Constr.svg</file>
|
||||
<file>icons/Sketcher_DraftLine.svg</file>
|
||||
<file>icons/Sketcher_EditSketch.svg</file>
|
||||
<file>icons/Sketcher_Element_Arc_Edge.svg</file>
|
||||
<file>icons/Sketcher_Element_Arc_EndPoint.svg</file>
|
||||
<file>icons/Sketcher_Element_Arc_MidPoint.svg</file>
|
||||
<file>icons/Sketcher_Element_Arc_StartingPoint.svg</file>
|
||||
<file>icons/Sketcher_Element_BSpline_Edge.svg</file>
|
||||
<file>icons/Sketcher_Element_BSpline_EndPoint.svg</file>
|
||||
<file>icons/Sketcher_Element_BSpline_StartPoint.svg</file>
|
||||
<file>icons/Sketcher_Element_Circle_Edge.svg</file>
|
||||
<file>icons/Sketcher_Element_Circle_MidPoint.svg</file>
|
||||
<file>icons/Sketcher_Element_Ellipse_All.svg</file>
|
||||
|
|
539
src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreateBSpline.svg
Normal file
|
@ -0,0 +1,539 @@
|
|||
<?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="svg2918"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="Sketcher_BezierSpline_3.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/sketcher/Sketcher_CreateCircle_from_3points_2_16px.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs2920">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2926" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144-3">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146-1" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148-5" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3958"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3960"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3042"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3068"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3880"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4654"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4693"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="12.328125"
|
||||
inkscape:cx="18.413181"
|
||||
inkscape:cy="32"
|
||||
inkscape:current-layer="g4470"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="995"
|
||||
inkscape:window-x="-2"
|
||||
inkscape:window-y="-3"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2923">
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g4470"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="6.7850704"
|
||||
inkscape:export-ydpi="6.7850704"
|
||||
transform="matrix(0.1460346,0,0,0.1460346,-220.10298,-56.296235)">
|
||||
<g
|
||||
id="g5377"
|
||||
transform="translate(14.441775,18.329945)">
|
||||
<g
|
||||
id="g5313"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,274.7911,730.06047)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g5315">
|
||||
<g
|
||||
id="g5317">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g5319" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g5321">
|
||||
<g
|
||||
id="g5323" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,3.0150412,768.19287)"
|
||||
id="g5329">
|
||||
<g
|
||||
id="g5331"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g5333">
|
||||
<g
|
||||
id="g5335"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5337"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5339" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,38.723634,505.10207)"
|
||||
id="g5345">
|
||||
<g
|
||||
id="g5347"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g5349">
|
||||
<g
|
||||
id="g5351"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5353"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5355" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,321.44914,457.88857)"
|
||||
id="g5361">
|
||||
<g
|
||||
id="g5363"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g5365">
|
||||
<g
|
||||
id="g5367"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5369"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5371">
|
||||
<g
|
||||
id="g5414"
|
||||
style="fill:#000000;fill-opacity:0.58431373;stroke:none">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path5325"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z"
|
||||
transform="translate(74.329242,-293.42364)" />
|
||||
<path
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path5341"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc"
|
||||
transform="translate(371.20238,-311.65501)" />
|
||||
<path
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path5357"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc"
|
||||
transform="translate(309.49729,-27.21133)" />
|
||||
<path
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path5373"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.61715269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 1602.6152,783.99324 c 8.5799,-267.23254 279.1673,-5.75713 322.4728,-314.56891 l -46.7766,-10.63748 c -21.3975,271.69303 -300.5771,3.96135 -322.8682,319.07636 z"
|
||||
id="path5311"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4425"
|
||||
d="m 1585.9515,763.99696 c 8.5799,-267.23254 279.1673,-5.75713 322.4728,-314.56892 l -46.7765,-10.63747 c -21.3976,271.69303 -300.5771,3.96134 -322.8683,319.07635 z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.82053852;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9680744,0.53235022,-0.12931811,-0.72812354,2190.7606,902.97673)"
|
||||
id="g3177" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.96615783,0.54254853,-0.14293457,-0.72055656,2035.4163,979.09945)"
|
||||
id="g3185" />
|
||||
<g
|
||||
id="g3800"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,274.7911,730.06047)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g3778">
|
||||
<g
|
||||
id="g3780">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g3784" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g3790">
|
||||
<g
|
||||
id="g3868">
|
||||
<path
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path3792"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
sodipodi:ry="23.991123"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:cx="225.26402"
|
||||
id="path3794"
|
||||
style="fill:url(#radialGradient3880);fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,3.0150412,768.19287)"
|
||||
id="g3019">
|
||||
<g
|
||||
id="g3021"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g3023">
|
||||
<g
|
||||
id="g3025"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g3027"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g3872">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path3029"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient3068);fill-opacity:1;stroke:none"
|
||||
id="path3031"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,38.723634,505.10207)"
|
||||
id="g4638">
|
||||
<g
|
||||
id="g4640"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4642">
|
||||
<g
|
||||
id="g4644"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4646"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4648">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4650"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient4654);fill-opacity:1;stroke:none"
|
||||
id="path4652"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,321.44914,457.88857)"
|
||||
id="g4677">
|
||||
<g
|
||||
id="g4679"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4681">
|
||||
<g
|
||||
id="g4683"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4685"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4687">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4689"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient4693);fill-opacity:1;stroke:none"
|
||||
id="path4691"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 25 KiB |
|
@ -0,0 +1,539 @@
|
|||
<?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="svg2918"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="Sketcher_CreateBSpline_Constr.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/sketcher/Sketcher_CreateCircle_from_3points_2_16px.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs2920">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2926" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144-3">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146-1" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148-5" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3958"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3960"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3042"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3068"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3880"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4654"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4693"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="12.328125"
|
||||
inkscape:cx="18.413181"
|
||||
inkscape:cy="32"
|
||||
inkscape:current-layer="g4470"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="872"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2923">
|
||||
<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>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g4470"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="6.7850704"
|
||||
inkscape:export-ydpi="6.7850704"
|
||||
transform="matrix(0.1460346,0,0,0.1460346,-220.10298,-56.296235)">
|
||||
<g
|
||||
id="g5377"
|
||||
transform="translate(14.441775,18.329945)">
|
||||
<g
|
||||
id="g5313"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,274.7911,730.06047)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g5315">
|
||||
<g
|
||||
id="g5317">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g5319" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g5321">
|
||||
<g
|
||||
id="g5323" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,3.0150412,768.19287)"
|
||||
id="g5329">
|
||||
<g
|
||||
id="g5331"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g5333">
|
||||
<g
|
||||
id="g5335"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5337"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5339" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,38.723634,505.10207)"
|
||||
id="g5345">
|
||||
<g
|
||||
id="g5347"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g5349">
|
||||
<g
|
||||
id="g5351"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5353"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5355" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,321.44914,457.88857)"
|
||||
id="g5361">
|
||||
<g
|
||||
id="g5363"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g5365">
|
||||
<g
|
||||
id="g5367"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5369"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5371">
|
||||
<g
|
||||
id="g5414"
|
||||
style="fill:#000000;fill-opacity:0.58431373;stroke:none">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path5325"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 a 48.57143,48.57143 0 0 1 -48.57143,48.57143 48.57143,48.57143 0 0 1 -48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,48.57143 z"
|
||||
transform="translate(74.329242,-293.42364)" />
|
||||
<path
|
||||
d="m 245.71428,655.2193 a 48.57143,48.57143 0 0 1 -48.57143,48.57143 48.57143,48.57143 0 0 1 -48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path5341"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc"
|
||||
transform="translate(371.20238,-311.65501)" />
|
||||
<path
|
||||
d="m 245.71428,655.2193 a 48.57143,48.57143 0 0 1 -48.57143,48.57143 48.57143,48.57143 0 0 1 -48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path5357"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc"
|
||||
transform="translate(309.49729,-27.21133)" />
|
||||
<path
|
||||
d="m 245.71428,655.2193 a 48.57143,48.57143 0 0 1 -48.57143,48.57143 48.57143,48.57143 0 0 1 -48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path5373"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.61715269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 1602.6152,783.99324 c 8.5799,-267.23254 279.1673,-5.75713 322.4728,-314.56891 l -46.7766,-10.63748 c -21.3975,271.69303 -300.5771,3.96135 -322.8682,319.07636 z"
|
||||
id="path5311"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4425"
|
||||
d="m 1585.9515,763.99696 c 8.5799,-267.23254 279.1673,-5.75713 322.4728,-314.56892 l -46.7765,-10.63747 c -21.3976,271.69303 -300.5771,3.96134 -322.8683,319.07635 z"
|
||||
style="fill:#4040ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.82053852;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9680744,0.53235022,-0.12931811,-0.72812354,2190.7606,902.97673)"
|
||||
id="g3177" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.96615783,0.54254853,-0.14293457,-0.72055656,2035.4163,979.09945)"
|
||||
id="g3185" />
|
||||
<g
|
||||
id="g3800"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,274.7911,730.06047)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g3778">
|
||||
<g
|
||||
id="g3780">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g3784" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g3790">
|
||||
<g
|
||||
id="g3868">
|
||||
<path
|
||||
d="m 245.71428,655.2193 a 48.57143,48.57143 0 0 1 -48.57143,48.57143 48.57143,48.57143 0 0 1 -48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path3792"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
d="m 259.60921,672.79736 a 34.345188,23.991123 0 0 1 -34.34519,23.99113 34.345188,23.991123 0 0 1 -34.34519,-23.99113 34.345188,23.991123 0 0 1 34.34519,-23.99112 34.345188,23.991123 0 0 1 34.34519,23.99112 z"
|
||||
sodipodi:ry="23.991123"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:cx="225.26402"
|
||||
id="path3794"
|
||||
style="fill:url(#radialGradient3880);fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,3.0150412,768.19287)"
|
||||
id="g3019">
|
||||
<g
|
||||
id="g3021"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g3023">
|
||||
<g
|
||||
id="g3025"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g3027"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g3872">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path3029"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 a 48.57143,48.57143 0 0 1 -48.57143,48.57143 48.57143,48.57143 0 0 1 -48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient3068);fill-opacity:1;stroke:none"
|
||||
id="path3031"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 a 34.345188,23.991123 0 0 1 -34.34519,23.99113 34.345188,23.991123 0 0 1 -34.34519,-23.99113 34.345188,23.991123 0 0 1 34.34519,-23.99112 34.345188,23.991123 0 0 1 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,38.723634,505.10207)"
|
||||
id="g4638">
|
||||
<g
|
||||
id="g4640"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4642">
|
||||
<g
|
||||
id="g4644"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4646"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4648">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4650"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 a 48.57143,48.57143 0 0 1 -48.57143,48.57143 48.57143,48.57143 0 0 1 -48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient4654);fill-opacity:1;stroke:none"
|
||||
id="path4652"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 a 34.345188,23.991123 0 0 1 -34.34519,23.99113 34.345188,23.991123 0 0 1 -34.34519,-23.99113 34.345188,23.991123 0 0 1 34.34519,-23.99112 34.345188,23.991123 0 0 1 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,321.44914,457.88857)"
|
||||
id="g4677">
|
||||
<g
|
||||
id="g4679"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4681">
|
||||
<g
|
||||
id="g4683"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4685"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4687">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4689"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 a 48.57143,48.57143 0 0 1 -48.57143,48.57143 48.57143,48.57143 0 0 1 -48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,-48.57143 48.57143,48.57143 0 0 1 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient4693);fill-opacity:1;stroke:none"
|
||||
id="path4691"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 a 34.345188,23.991123 0 0 1 -34.34519,23.99113 34.345188,23.991123 0 0 1 -34.34519,-23.99113 34.345188,23.991123 0 0 1 34.34519,-23.99112 34.345188,23.991123 0 0 1 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 24 KiB |
|
@ -0,0 +1,488 @@
|
|||
<?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="svg2918"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.91 r"
|
||||
sodipodi:docname="Sketcher_Create_periodic_BSpline.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/sketcher/Sketcher_CreateCircle_from_3points_2_16px.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs2920">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2926" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144-3">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146-1" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148-5" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3958"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3960"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3042"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3068"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3880"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4654"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4693"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="6.7933653"
|
||||
inkscape:cx="-9.5103836"
|
||||
inkscape:cy="38.19822"
|
||||
inkscape:current-layer="g4470"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="995"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2923">
|
||||
<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>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g4470"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="6.7850704"
|
||||
inkscape:export-ydpi="6.7850704"
|
||||
transform="matrix(0.1460346,0,0,0.1460346,-220.10298,-56.296235)">
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,261.20436,241.80915)"
|
||||
id="g5315">
|
||||
<g
|
||||
id="g5317">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g5319" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g5321">
|
||||
<g
|
||||
id="g5323" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5331"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,-10.571702,279.94155)">
|
||||
<g
|
||||
id="g5333">
|
||||
<g
|
||||
id="g5335"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5337"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5339" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5347"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,25.136891,16.850747)">
|
||||
<g
|
||||
id="g5349">
|
||||
<g
|
||||
id="g5351"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5353"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5355" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5365"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,307.8624,-30.362753)">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g5367" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g5369">
|
||||
<g
|
||||
id="g5371">
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:0.58431373;stroke:none"
|
||||
id="g5414">
|
||||
<circle
|
||||
r="48.57143"
|
||||
cy="655.2193"
|
||||
cx="197.14285"
|
||||
transform="translate(74.329242,-293.42364)"
|
||||
id="path5325"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;enable-background:accumulate" />
|
||||
<circle
|
||||
r="48.57143"
|
||||
cy="655.2193"
|
||||
cx="197.14285"
|
||||
transform="translate(371.20238,-311.65501)"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;enable-background:accumulate"
|
||||
id="path5341" />
|
||||
<circle
|
||||
r="48.57143"
|
||||
cy="655.2193"
|
||||
cx="197.14285"
|
||||
transform="translate(309.49729,-27.21133)"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;enable-background:accumulate"
|
||||
id="path5357" />
|
||||
<circle
|
||||
r="48.57143"
|
||||
cy="655.2193"
|
||||
cx="197.14285"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;enable-background:accumulate"
|
||||
id="path5373" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9680744,0.53235022,-0.12931811,-0.72812354,2190.7606,902.97673)"
|
||||
id="g3177" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.96615783,0.54254853,-0.14293457,-0.72055656,2035.4163,979.09945)"
|
||||
id="g3185" />
|
||||
<g
|
||||
id="g3800"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,284.87108,728.04448)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g3778">
|
||||
<g
|
||||
id="g3780">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g3784" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g3790">
|
||||
<g
|
||||
id="g3868">
|
||||
<circle
|
||||
id="path3792"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
cx="197.14285"
|
||||
cy="655.2193"
|
||||
r="48.57143" />
|
||||
<ellipse
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
id="path3794"
|
||||
style="fill:url(#radialGradient3880);fill-opacity:1;stroke:none"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
rx="34.345188"
|
||||
ry="23.991123" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,12.087009,763.15288)"
|
||||
id="g3019">
|
||||
<g
|
||||
id="g3021"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g3023">
|
||||
<g
|
||||
id="g3025"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g3027"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g3872">
|
||||
<circle
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path3029"
|
||||
cx="197.14285"
|
||||
cy="655.2193"
|
||||
r="48.57143" />
|
||||
<ellipse
|
||||
style="fill:url(#radialGradient3068);fill-opacity:1;stroke:none"
|
||||
id="path3031"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
rx="34.345188"
|
||||
ry="23.991123" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,331.04279,453.69421)"
|
||||
id="g4638">
|
||||
<g
|
||||
id="g4640"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4642">
|
||||
<g
|
||||
id="g4644"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4646"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4648">
|
||||
<circle
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path4650"
|
||||
cx="197.14285"
|
||||
cy="655.2193"
|
||||
r="48.57143" />
|
||||
<ellipse
|
||||
style="fill:url(#radialGradient4654);fill-opacity:1;stroke:none"
|
||||
id="path4652"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
rx="34.345188"
|
||||
ry="23.991123" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,48.716226,501.24114)"
|
||||
id="g4677">
|
||||
<g
|
||||
id="g4679"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4681">
|
||||
<g
|
||||
id="g4683"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4685"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4687">
|
||||
<circle
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path4689"
|
||||
cx="197.14285"
|
||||
cy="655.2193"
|
||||
r="48.57143" />
|
||||
<ellipse
|
||||
style="fill:url(#radialGradient4693);fill-opacity:1;stroke:none"
|
||||
id="path4691"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
rx="34.345188"
|
||||
ry="23.991123" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g4262"
|
||||
transform="translate(-7.0559795,16.127953)">
|
||||
<path
|
||||
sodipodi:nodetypes="csscccccccscc"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 1720.3568,529.3341 c -93.6953,51.11706 -114.5906,59.44762 -103.7241,136.07676 10.8665,76.62917 74.7001,59.12737 144.0013,28.77559 33.8061,-14.80602 54.6949,-11.2278 79.648,-52.69574 35.9819,-25.79027 48.9261,-50.87621 42.2693,-77.54154 -13.385,-73.82763 -3.7717,-142.04651 -102.5486,-89.85194 z m 84.8324,-23.21758 c 25.8382,-29.78677 33.9448,1.37887 36.1194,38.07815 -0.5297,92.0082 -14.1437,37.43394 -59.4047,80.75861 -79.1101,45.45325 -106.0577,78.99261 -118.636,18.17476 -13.7596,-66.52973 37.4393,-21.66048 95.9357,-82.43243 z"
|
||||
id="path4425-6-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="csscccccccscc"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.28941298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 1708.2936,519.94559 c -93.6953,51.11706 -114.5906,59.44762 -103.7241,136.07676 10.8665,76.62917 74.7001,59.12737 144.0013,28.77559 33.8061,-14.80602 54.6949,-11.2278 79.648,-52.69574 35.9819,-25.79027 48.9261,-50.87621 42.2693,-77.54154 -13.385,-73.82763 -3.7717,-142.04651 -102.5486,-89.85194 z m 84.8324,-23.21758 c 25.8382,-29.78677 33.9448,1.37887 36.1194,38.07815 -0.5297,92.0082 -14.1437,37.43394 -59.4047,80.75861 -79.1101,45.45325 -106.0577,78.99261 -118.636,18.17476 -13.7596,-66.52973 37.4393,-21.66048 95.9357,-82.43243 z"
|
||||
id="path4425-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 20 KiB |
|
@ -0,0 +1,484 @@
|
|||
<?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="svg2918"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.91 r"
|
||||
sodipodi:docname="Sketcher_Create_Periodic_BSpline_Constr.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/sketcher/Sketcher_CreateCircle_from_3points_2_16px.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs2920">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2926" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144-3">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146-1" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148-5" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3958"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3960"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3042"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3068"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3880"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4654"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4693"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7.486915"
|
||||
inkscape:cx="68.109637"
|
||||
inkscape:cy="7.3544134"
|
||||
inkscape:current-layer="g4470"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="995"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2923">
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g4470"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="6.7850704"
|
||||
inkscape:export-ydpi="6.7850704"
|
||||
transform="matrix(0.1460346,0,0,0.1460346,-220.10298,-56.296235)">
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,261.20436,241.80915)"
|
||||
id="g5315">
|
||||
<g
|
||||
id="g5317">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g5319" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g5321">
|
||||
<g
|
||||
id="g5323" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5331"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,-10.571702,279.94155)">
|
||||
<g
|
||||
id="g5333">
|
||||
<g
|
||||
id="g5335"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5337"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5339" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5347"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,25.136891,16.850747)">
|
||||
<g
|
||||
id="g5349">
|
||||
<g
|
||||
id="g5351"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g5353"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g5355" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5365"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,307.8624,-30.362753)">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g5367" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g5369">
|
||||
<g
|
||||
id="g5371">
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:0.58431373;stroke:none"
|
||||
id="g5414">
|
||||
<circle
|
||||
r="48.57143"
|
||||
cy="655.2193"
|
||||
cx="197.14285"
|
||||
transform="translate(74.329242,-293.42364)"
|
||||
id="path5325"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;enable-background:accumulate" />
|
||||
<circle
|
||||
r="48.57143"
|
||||
cy="655.2193"
|
||||
cx="197.14285"
|
||||
transform="translate(371.20238,-311.65501)"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;enable-background:accumulate"
|
||||
id="path5341" />
|
||||
<circle
|
||||
r="48.57143"
|
||||
cy="655.2193"
|
||||
cx="197.14285"
|
||||
transform="translate(309.49729,-27.21133)"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;enable-background:accumulate"
|
||||
id="path5357" />
|
||||
<circle
|
||||
r="48.57143"
|
||||
cy="655.2193"
|
||||
cx="197.14285"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:6.34382486;marker:none;enable-background:accumulate"
|
||||
id="path5373" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9680744,0.53235022,-0.12931811,-0.72812354,2190.7606,902.97673)"
|
||||
id="g3177" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.96615783,0.54254853,-0.14293457,-0.72055656,2035.4163,979.09945)"
|
||||
id="g3185" />
|
||||
<g
|
||||
id="g3800"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,284.87108,728.04448)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g3778">
|
||||
<g
|
||||
id="g3780">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g3784" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g3790">
|
||||
<g
|
||||
id="g3868">
|
||||
<circle
|
||||
id="path3792"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
cx="197.14285"
|
||||
cy="655.2193"
|
||||
r="48.57143" />
|
||||
<ellipse
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
id="path3794"
|
||||
style="fill:url(#radialGradient3880);fill-opacity:1;stroke:none"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
rx="34.345188"
|
||||
ry="23.991123" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,12.087009,763.15288)"
|
||||
id="g3019">
|
||||
<g
|
||||
id="g3021"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g3023">
|
||||
<g
|
||||
id="g3025"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g3027"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g3872">
|
||||
<circle
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path3029"
|
||||
cx="197.14285"
|
||||
cy="655.2193"
|
||||
r="48.57143" />
|
||||
<ellipse
|
||||
style="fill:url(#radialGradient3068);fill-opacity:1;stroke:none"
|
||||
id="path3031"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
rx="34.345188"
|
||||
ry="23.991123" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,331.04279,453.69421)"
|
||||
id="g4638">
|
||||
<g
|
||||
id="g4640"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4642">
|
||||
<g
|
||||
id="g4644"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4646"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4648">
|
||||
<circle
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path4650"
|
||||
cx="197.14285"
|
||||
cy="655.2193"
|
||||
r="48.57143" />
|
||||
<ellipse
|
||||
style="fill:url(#radialGradient4654);fill-opacity:1;stroke:none"
|
||||
id="path4652"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
rx="34.345188"
|
||||
ry="23.991123" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,48.716226,501.24114)"
|
||||
id="g4677">
|
||||
<g
|
||||
id="g4679"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4681">
|
||||
<g
|
||||
id="g4683"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4685"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4687">
|
||||
<circle
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path4689"
|
||||
cx="197.14285"
|
||||
cy="655.2193"
|
||||
r="48.57143" />
|
||||
<ellipse
|
||||
style="fill:url(#radialGradient4693);fill-opacity:1;stroke:none"
|
||||
id="path4691"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
rx="34.345188"
|
||||
ry="23.991123" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4425-6-7"
|
||||
d="m 1713.3008,545.46205 c -93.6953,51.11706 -114.5906,59.44762 -103.7241,136.07676 10.8665,76.62917 74.7001,59.12737 144.0013,28.77559 33.8061,-14.80602 54.6949,-11.2278 79.648,-52.69574 35.9819,-25.79027 48.9261,-50.87621 42.2693,-77.54154 -13.385,-73.82763 -3.7717,-142.04651 -102.5486,-89.85194 z m 84.8324,-23.21758 c 25.8382,-29.78677 33.9448,1.37887 36.1194,38.07815 -0.5297,92.0082 -14.1437,37.43394 -59.4047,80.75861 -79.1101,45.45325 -106.0577,78.99261 -118.636,18.17476 -13.7596,-66.52973 37.4393,-21.66048 95.9357,-82.43243 z"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
sodipodi:nodetypes="csscccccccscc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4425-6"
|
||||
d="m 1701.2376,536.07354 c -93.6953,51.11706 -114.5906,59.44762 -103.7241,136.07676 10.8665,76.62917 74.7001,59.12737 144.0013,28.77559 33.8061,-14.80602 54.6949,-11.2278 79.648,-52.69574 35.9819,-25.79027 48.9261,-50.87621 42.2693,-77.54154 -13.385,-73.82763 -3.7717,-142.04651 -102.5486,-89.85194 z m 84.8324,-23.21758 c 25.8382,-29.78677 33.9448,1.37887 36.1194,38.07815 -0.5297,92.0082 -14.1437,37.43394 -59.4047,80.75861 -79.1101,45.45325 -106.0577,78.99261 -118.636,18.17476 -13.7596,-66.52973 37.4393,-21.66048 95.9357,-82.43243 z"
|
||||
style="display:inline;overflow:visible;visibility:visible;fill:#4040ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.28941298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
sodipodi:nodetypes="csscccccccscc" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 20 KiB |
|
@ -0,0 +1,396 @@
|
|||
<?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="svg2918"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="Sketcher_Elements_BezierSpline_EdgePoint_3.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/sketcher/Sketcher_CreateCircle_from_3points_2_16px.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs2920">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2926" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144-3">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146-1" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148-5" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3958"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3960"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3042"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3068"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3855"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3880"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4654"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4693"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="12.328125"
|
||||
inkscape:cx="18.413181"
|
||||
inkscape:cy="32"
|
||||
inkscape:current-layer="g4470"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="995"
|
||||
inkscape:window-x="-2"
|
||||
inkscape:window-y="-3"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2923">
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g4470"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="6.7850704"
|
||||
inkscape:export-ydpi="6.7850704"
|
||||
transform="matrix(0.1460346,0,0,0.1460346,-220.10298,-56.296235)">
|
||||
<g
|
||||
id="g4428"
|
||||
transform="matrix(0.97101795,-0.51388787,0.10495416,0.74126913,37.992895,1047.7457)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="fill:#008900;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.61715282;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 1521.5247,672.0155 c 44.4698,-329.6779 268.2395,178.19155 351.6186,-180.60429 l -43.3717,-44.41796 C 1772.4167,773.75587 1541.2639,252.3281 1477.1627,632.99171 z"
|
||||
id="path4425"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g3177"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g3185"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
</g>
|
||||
<g
|
||||
id="g3800"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,274.7911,730.06047)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g3778">
|
||||
<g
|
||||
id="g3780">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g3784" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g3790">
|
||||
<g
|
||||
id="g3868">
|
||||
<path
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path3792"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
sodipodi:ry="23.991123"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:cx="225.26402"
|
||||
id="path3794"
|
||||
style="fill:url(#radialGradient3880);fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,3.0150412,768.19287)"
|
||||
id="g3019">
|
||||
<g
|
||||
id="g3021"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g3023">
|
||||
<g
|
||||
id="g3025"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g3027"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g3872">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path3029"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient3068);fill-opacity:1;stroke:none"
|
||||
id="path3031"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,38.723634,505.10207)"
|
||||
id="g4638">
|
||||
<g
|
||||
id="g4640"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4642">
|
||||
<g
|
||||
id="g4644"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4646"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4648">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4650"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient4654);fill-opacity:1;stroke:none"
|
||||
id="path4652"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,321.44914,457.88857)"
|
||||
id="g4677">
|
||||
<g
|
||||
id="g4679"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4681">
|
||||
<g
|
||||
id="g4683"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4685"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4687">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4689"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient4693);fill-opacity:1;stroke:none"
|
||||
id="path4691"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1,385 @@
|
|||
<?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="svg2918"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="Sketcher_Elements_BezierSpline_EndPoint_3.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/sketcher/Sketcher_CreateCircle_from_3points_2_16px.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs2920">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2926" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144-3">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146-1" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148-5" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3958"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3960"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3042"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3068"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3855"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3880"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4654"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="12.328125"
|
||||
inkscape:cx="18.413181"
|
||||
inkscape:cy="32"
|
||||
inkscape:current-layer="g4470"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="995"
|
||||
inkscape:window-x="-2"
|
||||
inkscape:window-y="-3"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2923">
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g4470"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="6.7850704"
|
||||
inkscape:export-ydpi="6.7850704"
|
||||
transform="matrix(0.1460346,0,0,0.1460346,-220.10298,-56.296235)">
|
||||
<g
|
||||
id="g4428"
|
||||
transform="matrix(0.97101795,-0.51388787,0.10495416,0.74126913,37.992895,1047.7457)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.61715269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 1521.5247,672.0155 c 44.4698,-329.6779 268.2395,178.19155 351.6186,-180.60429 l -43.3717,-44.41796 C 1772.4167,773.75587 1541.2639,252.3281 1477.1627,632.99171 z"
|
||||
id="path4425"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g3177"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g3185"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
</g>
|
||||
<g
|
||||
id="g3800"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,274.7911,730.06047)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g3778">
|
||||
<g
|
||||
id="g3780">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g3784" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g3790">
|
||||
<g
|
||||
id="g3868">
|
||||
<path
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path3792"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
sodipodi:ry="23.991123"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:cx="225.26402"
|
||||
id="path3794"
|
||||
style="fill:url(#radialGradient3880);fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g3800-6"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,320.16151,461.95164)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g3778-7">
|
||||
<g
|
||||
id="g3780-2">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g3784-5" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g3790-2">
|
||||
<g
|
||||
id="g3876">
|
||||
<path
|
||||
d="m 245.71428,655.2193 a 48.57143,48.57143 0 1 1 -97.14286,0 48.57143,48.57143 0 1 1 97.14286,0 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path3792-8"
|
||||
style="fill:#008900;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
d="m 259.60921,672.79736 a 34.345188,23.991123 0 1 1 -68.69038,0 34.345188,23.991123 0 1 1 68.69038,0 z"
|
||||
sodipodi:ry="23.991123"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:cx="225.26402"
|
||||
id="path3794-5"
|
||||
style="fill:url(#radialGradient3855);fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,4.6814,769.30377)"
|
||||
id="g3019">
|
||||
<g
|
||||
id="g3021"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g3023">
|
||||
<g
|
||||
id="g3025"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g3027"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g3872">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382474;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path3029"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient3068);fill-opacity:1;stroke:none"
|
||||
id="path3031"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,38.723634,505.10207)"
|
||||
id="g4638">
|
||||
<g
|
||||
id="g4640"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4642">
|
||||
<g
|
||||
id="g4644"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4646"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4648">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4650"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient4654);fill-opacity:1;stroke:none"
|
||||
id="path4652"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 16 KiB |
|
@ -0,0 +1,396 @@
|
|||
<?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="svg2918"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="Sketcher_Elements_BezierSpline_StartPoint_3.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/sketcher/Sketcher_CreateCircle_from_3points_2_16px.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs2920">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2926" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3144-3">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3146-1" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3148-5" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3958"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3960"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3042"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3068"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-3"
|
||||
id="radialGradient3855"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient3880"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4654"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144"
|
||||
id="radialGradient4693"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="12.328125"
|
||||
inkscape:cx="18.413181"
|
||||
inkscape:cy="32"
|
||||
inkscape:current-layer="g4470"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="995"
|
||||
inkscape:window-x="-2"
|
||||
inkscape:window-y="-3"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2923">
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g4470"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="6.7850704"
|
||||
inkscape:export-ydpi="6.7850704"
|
||||
transform="matrix(0.1460346,0,0,0.1460346,-220.10298,-56.296235)">
|
||||
<g
|
||||
id="g4428"
|
||||
transform="matrix(0.97101795,-0.51388787,0.10495416,0.74126913,37.992895,1047.7457)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.61715269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 1521.5247,672.0155 c 44.4698,-329.6779 268.2395,178.19155 351.6186,-180.60429 l -43.3717,-44.41796 C 1772.4167,773.75587 1541.2639,252.3281 1477.1627,632.99171 z"
|
||||
id="path4425"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g3177"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g3185"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
</g>
|
||||
<g
|
||||
id="g3800"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,274.7911,730.06047)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g3778">
|
||||
<g
|
||||
id="g3780">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g3784" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g3790">
|
||||
<g
|
||||
id="g3868">
|
||||
<path
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path3792"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
sodipodi:ry="23.991123"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:cx="225.26402"
|
||||
id="path3794"
|
||||
style="fill:url(#radialGradient3880);fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g3800-6"
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,4.6642871,769.11707)">
|
||||
<g
|
||||
transform="translate(-10.941933,-540.84412)"
|
||||
id="g3778-7">
|
||||
<g
|
||||
id="g3780-2">
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
id="g3784-5" />
|
||||
<g
|
||||
inkscape:export-ydpi="7.2934141"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
id="g3790-2">
|
||||
<g
|
||||
id="g3876">
|
||||
<path
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z"
|
||||
sodipodi:ry="48.57143"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:cx="197.14285"
|
||||
id="path3792-8"
|
||||
style="fill:#008900;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
sodipodi:ry="23.991123"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:cx="225.26402"
|
||||
id="path3794-5"
|
||||
style="fill:url(#radialGradient3855);fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,38.723634,505.10207)"
|
||||
id="g4638">
|
||||
<g
|
||||
id="g4640"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4642">
|
||||
<g
|
||||
id="g4644"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4646"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4648">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4650"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient4654);fill-opacity:1;stroke:none"
|
||||
id="path4652"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.92220412,-0.03691994,0.03792293,0.9113265,321.44914,457.88857)"
|
||||
id="g4677">
|
||||
<g
|
||||
id="g4679"
|
||||
transform="translate(-10.941933,-540.84412)">
|
||||
<g
|
||||
id="g4681">
|
||||
<g
|
||||
id="g4683"
|
||||
transform="matrix(-0.9996843,0.02512527,-0.02512527,-0.9996843,2082.1146,1248.1357)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141" />
|
||||
<g
|
||||
id="g4685"
|
||||
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,1922.9598,1240.4934)"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
|
||||
inkscape:export-xdpi="7.2934141"
|
||||
inkscape:export-ydpi="7.2934141">
|
||||
<g
|
||||
id="g4687">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.34382486;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4689"
|
||||
sodipodi:cx="197.14285"
|
||||
sodipodi:cy="655.2193"
|
||||
sodipodi:rx="48.57143"
|
||||
sodipodi:ry="48.57143"
|
||||
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient4693);fill-opacity:1;stroke:none"
|
||||
id="path4691"
|
||||
sodipodi:cx="225.26402"
|
||||
sodipodi:cy="672.79736"
|
||||
sodipodi:rx="34.345188"
|
||||
sodipodi:ry="23.991123"
|
||||
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
|
||||
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 17 KiB |
|
@ -667,6 +667,9 @@ void TaskSketcherElements::slotElementsChanged(void)
|
|||
QIcon Sketcher_Element_ArcOfParabola_MidPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_Parabolic_Arc_Centre_Point") );
|
||||
QIcon Sketcher_Element_ArcOfParabola_StartingPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_Parabolic_Arc_Start_Point") );
|
||||
QIcon Sketcher_Element_ArcOfParabola_EndPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_Parabolic_Arc_End_Point") );
|
||||
QIcon Sketcher_Element_BSpline_Edge( Gui::BitmapFactory().pixmap("Sketcher_Element_BSpline_Edge") );
|
||||
QIcon Sketcher_Element_BSpline_StartingPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_BSpline_StartPoint") );
|
||||
QIcon Sketcher_Element_BSpline_EndPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_BSpline_EndPoint") );
|
||||
QIcon none( Gui::BitmapFactory().pixmap("Sketcher_Element_SelectionTypeInvalid") );
|
||||
|
||||
assert(sketchView);
|
||||
|
@ -706,6 +709,9 @@ void TaskSketcherElements::slotElementsChanged(void)
|
|||
(type == Part::GeomArcOfParabola::getClassTypeId() && element==1) ? Sketcher_Element_ArcOfParabola_StartingPoint :
|
||||
(type == Part::GeomArcOfParabola::getClassTypeId() && element==2) ? Sketcher_Element_ArcOfParabola_EndPoint :
|
||||
(type == Part::GeomArcOfParabola::getClassTypeId() && element==3) ? Sketcher_Element_ArcOfParabola_MidPoint :
|
||||
(type == Part::GeomBSplineCurve::getClassTypeId() && element==0) ? Sketcher_Element_BSpline_Edge :
|
||||
(type == Part::GeomBSplineCurve::getClassTypeId() && element==1) ? Sketcher_Element_BSpline_StartingPoint :
|
||||
(type == Part::GeomBSplineCurve::getClassTypeId() && element==2) ? Sketcher_Element_BSpline_EndPoint :
|
||||
none,
|
||||
type == Part::GeomPoint::getClassTypeId() ? ( isNamingBoxChecked ?
|
||||
(tr("Point") + QString::fromLatin1("(Edge%1)").arg(i)):
|
||||
|
@ -731,6 +737,9 @@ void TaskSketcherElements::slotElementsChanged(void)
|
|||
type == Part::GeomArcOfParabola::getClassTypeId() ? ( isNamingBoxChecked ?
|
||||
(tr("Parabolic Arc") + QString::fromLatin1("(Edge%1)").arg(i)):
|
||||
(QString::fromLatin1("%1-").arg(i)+tr("Parabolic Arc"))) :
|
||||
type == Part::GeomBSplineCurve::getClassTypeId() ? ( isNamingBoxChecked ?
|
||||
(tr("BSpline") + QString::fromLatin1("(Edge%1)").arg(i)):
|
||||
(QString::fromLatin1("%1-").arg(i)+tr("BSpline"))) :
|
||||
( isNamingBoxChecked ?
|
||||
(tr("Other") + QString::fromLatin1("(Edge%1)").arg(i)):
|
||||
(QString::fromLatin1("%1-").arg(i)+tr("Other"))),
|
||||
|
@ -918,7 +927,10 @@ void TaskSketcherElements::updateIcons(int element)
|
|||
QIcon Sketcher_Element_ArcOfParabola_Edge( Gui::BitmapFactory().pixmap("Sketcher_Element_Parabolic_Arc_Edge") );
|
||||
QIcon Sketcher_Element_ArcOfParabola_MidPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_Parabolic_Arc_Centre_Point") );
|
||||
QIcon Sketcher_Element_ArcOfParabola_StartingPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_Parabolic_Arc_Start_Point") );
|
||||
QIcon Sketcher_Element_ArcOfParabola_EndPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_Parabolic_Arc_End_Point") );
|
||||
QIcon Sketcher_Element_ArcOfParabola_EndPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_Parabolic_Arc_End_Point") );
|
||||
QIcon Sketcher_Element_BSpline_Edge( Gui::BitmapFactory().pixmap("Sketcher_Element_BSpline_Edge") );
|
||||
QIcon Sketcher_Element_BSpline_StartingPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_BSpline_StartPoint") );
|
||||
QIcon Sketcher_Element_BSpline_EndPoint( Gui::BitmapFactory().pixmap("Sketcher_Element_BSpline_EndPoint") );
|
||||
QIcon none( Gui::BitmapFactory().pixmap("Sketcher_Element_SelectionTypeInvalid") );
|
||||
|
||||
for (int i=0;i<ui->listWidgetElements->count(); i++) {
|
||||
|
@ -949,6 +961,9 @@ void TaskSketcherElements::updateIcons(int element)
|
|||
(type == Part::GeomArcOfParabola::getClassTypeId() && element==1) ? Sketcher_Element_ArcOfParabola_StartingPoint :
|
||||
(type == Part::GeomArcOfParabola::getClassTypeId() && element==2) ? Sketcher_Element_ArcOfParabola_EndPoint :
|
||||
(type == Part::GeomArcOfParabola::getClassTypeId() && element==3) ? Sketcher_Element_ArcOfParabola_MidPoint :
|
||||
(type == Part::GeomBSplineCurve::getClassTypeId() && element==0) ? Sketcher_Element_BSpline_Edge :
|
||||
(type == Part::GeomBSplineCurve::getClassTypeId() && element==1) ? Sketcher_Element_BSpline_StartingPoint :
|
||||
(type == Part::GeomBSplineCurve::getClassTypeId() && element==2) ? Sketcher_Element_BSpline_EndPoint :
|
||||
none);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -245,6 +245,18 @@ void SketcherValidation::on_findButton_clicked()
|
|||
id.v = segm->getEndPoint();
|
||||
vertexIds.push_back(id);
|
||||
}
|
||||
else if (g->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
const Part::GeomBSplineCurve *segm = static_cast<const Part::GeomBSplineCurve*>(g);
|
||||
VertexIds id;
|
||||
id.GeoId = (int)i;
|
||||
id.PosId = Sketcher::start;
|
||||
id.v = segm->getStartPoint();
|
||||
vertexIds.push_back(id);
|
||||
id.GeoId = (int)i;
|
||||
id.PosId = Sketcher::end;
|
||||
id.v = segm->getEndPoint();
|
||||
vertexIds.push_back(id);
|
||||
}
|
||||
}
|
||||
|
||||
std::set<ConstraintIds, Constraint_Less> coincidences;
|
||||
|
|
|
@ -780,7 +780,8 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe
|
|||
geo->getTypeId() == Part::GeomEllipse::getClassTypeId()||
|
||||
geo->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId()||
|
||||
geo->getTypeId() == Part::GeomArcOfParabola::getClassTypeId()||
|
||||
geo->getTypeId() == Part::GeomArcOfHyperbola::getClassTypeId()) {
|
||||
geo->getTypeId() == Part::GeomArcOfHyperbola::getClassTypeId()||
|
||||
geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
Gui::Command::openCommand("Drag Curve");
|
||||
try {
|
||||
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.movePoint(%i,%i,App.Vector(%f,%f,0),%i)"
|
||||
|
@ -1080,7 +1081,8 @@ bool ViewProviderSketch::mouseMove(const SbVec2s &cursorPos, Gui::View3DInventor
|
|||
edit->DragCurve = edit->PreselectCurve;
|
||||
getSketchObject()->getSolvedSketch().initMove(edit->DragCurve, Sketcher::none, false);
|
||||
const Part::Geometry *geo = getSketchObject()->getGeometry(edit->DragCurve);
|
||||
if (geo->getTypeId() == Part::GeomLineSegment::getClassTypeId()) {
|
||||
if (geo->getTypeId() == Part::GeomLineSegment::getClassTypeId() ||
|
||||
geo->getTypeId() == Part::GeomBSplineCurve::getClassTypeId() ) {
|
||||
relative = true;
|
||||
//xInit = x;
|
||||
//yInit = y;
|
||||
|
@ -2353,9 +2355,37 @@ void ViewProviderSketch::doBoxSelection(const SbVec2s &startPos, const SbVec2s &
|
|||
|
||||
} else if ((*it)->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) {
|
||||
const Part::GeomBSplineCurve *spline = static_cast<const Part::GeomBSplineCurve *>(*it);
|
||||
std::vector<Base::Vector3d> poles = spline->getPoles();
|
||||
VertexId += poles.size();
|
||||
// TODO
|
||||
//std::vector<Base::Vector3d> poles = spline->getPoles();
|
||||
VertexId += 2;
|
||||
|
||||
Plm.multVec(spline->getStartPoint(), pnt1);
|
||||
Plm.multVec(spline->getEndPoint(), pnt2);
|
||||
pnt1 = proj(pnt1);
|
||||
pnt2 = proj(pnt2);
|
||||
|
||||
bool pnt1Inside = polygon.Contains(Base::Vector2d(pnt1.x, pnt1.y));
|
||||
bool pnt2Inside = polygon.Contains(Base::Vector2d(pnt2.x, pnt2.y));
|
||||
if (pnt1Inside) {
|
||||
std::stringstream ss;
|
||||
ss << "Vertex" << VertexId;
|
||||
Gui::Selection().addSelection(doc->getName(), sketchObject->getNameInDocument(), ss.str().c_str());
|
||||
}
|
||||
|
||||
if (pnt2Inside) {
|
||||
std::stringstream ss;
|
||||
ss << "Vertex" << VertexId + 1;
|
||||
Gui::Selection().addSelection(doc->getName(), sketchObject->getNameInDocument(), ss.str().c_str());
|
||||
}
|
||||
|
||||
// This is a rather approximated approach. No it does not guarantie that the whole curve is boxed, specially
|
||||
// for periodic curves, but it works reasonably well. Including all poles, which could be done, generally
|
||||
// forces the user to select much more than the curve (all the poles) and it would not select the curve in cases
|
||||
// where it is indeed comprised in the box.
|
||||
if (pnt1Inside && pnt2Inside) {
|
||||
std::stringstream ss;
|
||||
ss << "Edge" << GeoId + 1;
|
||||
Gui::Selection().addSelection(doc->getName(), sketchObject->getNameInDocument(), ss.str().c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3354,6 +3384,9 @@ void ViewProviderSketch::draw(bool temp)
|
|||
const Part::GeomBSplineCurve *spline = static_cast<const Part::GeomBSplineCurve *>(*it);
|
||||
Handle_Geom_BSplineCurve curve = Handle_Geom_BSplineCurve::DownCast(spline->handle());
|
||||
|
||||
Base::Vector3d startp = spline->getStartPoint();
|
||||
Base::Vector3d endp = spline->getEndPoint();
|
||||
|
||||
double first = curve->FirstParameter();
|
||||
double last = curve->LastParameter();
|
||||
if (first > last) // if arc is reversed
|
||||
|
@ -3373,13 +3406,16 @@ void ViewProviderSketch::draw(bool temp)
|
|||
gp_Pnt end = curve->Value(last);
|
||||
Coords.push_back(Base::Vector3d(end.X(), end.Y(), end.Z()));
|
||||
|
||||
std::vector<Base::Vector3d> poles = spline->getPoles();
|
||||
// abdullah: Poles thought as internal geometry
|
||||
/*std::vector<Base::Vector3d> poles = spline->getPoles();
|
||||
for (std::vector<Base::Vector3d>::iterator it = poles.begin(); it != poles.end(); ++it) {
|
||||
Points.push_back(*it);
|
||||
}
|
||||
}*/
|
||||
|
||||
Index.push_back(countSegments+1);
|
||||
edit->CurvIdToGeoId.push_back(GeoId);
|
||||
Points.push_back(startp);
|
||||
Points.push_back(endp);
|
||||
}
|
||||
else {
|
||||
}
|
||||
|
|
|
@ -141,13 +141,16 @@ inline void SketcherAddWorkspaceArcs<Gui::MenuItem>(Gui::MenuItem& geom){
|
|||
<< "Sketcher_CreateEllipseBy3Points"
|
||||
<< "Sketcher_CreateArcOfEllipse"
|
||||
<< "Sketcher_CreateArcOfHyperbola"
|
||||
<< "Sketcher_CreateArcOfParabola";
|
||||
<< "Sketcher_CreateArcOfParabola"
|
||||
<< "Sketcher_CreateBSpline"
|
||||
<< "Sketcher_CreatePeriodicBSpline";
|
||||
}
|
||||
template <>
|
||||
inline void SketcherAddWorkspaceArcs<Gui::ToolBarItem>(Gui::ToolBarItem& geom){
|
||||
geom << "Sketcher_CompCreateArc"
|
||||
<< "Sketcher_CompCreateCircle"
|
||||
<< "Sketcher_CompCreateConic";
|
||||
<< "Sketcher_CompCreateConic"
|
||||
<< "Sketcher_CompCreateBSpline";
|
||||
}
|
||||
template <typename T>
|
||||
void SketcherAddWorkspaceRegularPolygon(T& geom);
|
||||
|
|