OpenSCAD Module: bugfixes and improvements
if more than 14 digits are given don round in general, but test for <eps only. refine before extrusion support polyhedron faces which replaces polyhedron faces importCSG round rotations don't call Draft.makecircle and makeprism as they trigger a recompute use group placholder for objects with no children move removesubtree to OpenSCADUtils add resize and offset keywords add OpenSCAD_ExplodeGroup command add OpenSCAD_IncreaseToleranceFeature change refine shape logo
This commit is contained in:
parent
040c19b1c1
commit
b58d1caea7
|
@ -95,10 +95,12 @@ static char * openscadlogo_xpm[] = {
|
|||
def Initialize(self):
|
||||
import OpenSCAD_rc,OpenSCADCommands
|
||||
commands=['OpenSCAD_ReplaceObject','OpenSCAD_RemoveSubtree',\
|
||||
'OpenSCAD_RefineShapeFeature',"OpenSCAD_Edgestofaces",\
|
||||
'OpenSCAD_ExpandPlacements']
|
||||
'OpenSCAD_RefineShapeFeature',\
|
||||
'OpenSCAD_IncreaseToleranceFeature', 'OpenSCAD_Edgestofaces', \
|
||||
'OpenSCAD_ExpandPlacements','OpenSCAD_ExplodeGroup']
|
||||
toolbarcommands=['OpenSCAD_ReplaceObject','OpenSCAD_RemoveSubtree',\
|
||||
'OpenSCAD_RefineShapeFeature']
|
||||
'OpenSCAD_ExplodeGroup','OpenSCAD_RefineShapeFeature']
|
||||
#'OpenSCAD_IncreaseToleranceFeature' #icon still missing
|
||||
import PartGui
|
||||
parttoolbarcommands = ['Part_CheckGeometry',"Part_Primitives",\
|
||||
"Part_Builder",'Part_Cut','Part_Fuse','Part_Common',\
|
||||
|
|
|
@ -37,6 +37,50 @@ def translate(context,text):
|
|||
def utf8(unio):
|
||||
return unicode(unio).encode('UTF8')
|
||||
|
||||
class ExplodeGroup:
|
||||
"Ungroup Objects"
|
||||
def IsActive(self):
|
||||
return FreeCADGui.Selection.countObjectsOfType('Part::Feature') > 0
|
||||
|
||||
def Activated(self):
|
||||
def isgrey(shapecolor):
|
||||
defaultcolor=(float.fromhex('0x1.99999ap-1'),float.fromhex('0x1.99999ap-1'),\
|
||||
float.fromhex('0x1.99999ap-1'),0.0)
|
||||
return all(facecolor == defaultcolor for facecolor in shapecolor)
|
||||
|
||||
def randomcolor(transp=0.0):
|
||||
import random
|
||||
return (random.random(),random.random(),random.random(),transp)
|
||||
|
||||
def explode(obj,color=True):
|
||||
if obj.isDerivedFrom('Part::Fuse') or obj.isDerivedFrom('Part::MultiFuse'):
|
||||
plm = obj.Placement
|
||||
outlist = obj.OutList[:]
|
||||
if plm.isNull() or all(len(oo.InList)==1 for oo in obj.OutList):
|
||||
obj.Document.removeObject(obj.Name)
|
||||
for oo in outlist:
|
||||
if not plm.isNull():
|
||||
oo.Placement=plm.multiply(oo.Placement)
|
||||
if FreeCAD.GuiUp:
|
||||
import FreeCADGui
|
||||
oo.ViewObject.show()
|
||||
if color and isgrey(oo.ViewObject.DiffuseColor):
|
||||
if color == True:
|
||||
oo.ViewObject.DiffuseColor=randomcolor()
|
||||
else:
|
||||
oo.ViewObject.DiffuseColor=color
|
||||
|
||||
for obj in FreeCADGui.Selection.getSelection():
|
||||
if len(obj.InList) == 0: # allowed only for for top level objects
|
||||
explode(obj)
|
||||
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'OpenSCAD_Explode_Group', 'MenuText': \
|
||||
QtCore.QT_TRANSLATE_NOOP('OpenSCAD_ExplodeGroup',\
|
||||
'Explode Group'), 'ToolTip': \
|
||||
QtCore.QT_TRANSLATE_NOOP('OpenSCAD_ExplodeGroup',\
|
||||
'remove fusion, apply placement to children and color randomly')}
|
||||
|
||||
class ColorCodeShape:
|
||||
"Change the Color of selected or all Shapes based on their validity"
|
||||
def Activated(self):
|
||||
|
@ -57,7 +101,7 @@ class ColorCodeShape:
|
|||
|
||||
class Edgestofaces:
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelectionEx())
|
||||
return FreeCADGui.Selection.countObjectsOfType('Part::Feature') > 0
|
||||
|
||||
def Activated(self):
|
||||
from OpenSCAD2Dgeom import edgestofaces,Overlappingfaces
|
||||
|
@ -78,13 +122,12 @@ class Edgestofaces:
|
|||
|
||||
class RefineShapeFeature:
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelectionEx())
|
||||
return FreeCADGui.Selection.countObjectsOfType('Part::Feature') > 0
|
||||
|
||||
def Activated(self):
|
||||
import Part,OpenSCADFeatures
|
||||
selection=FreeCADGui.Selection.getSelectionEx()
|
||||
for selobj in selection:
|
||||
#newobj=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",'refine')
|
||||
newobj=selobj.Document.addObject("Part::FeaturePython",'refine')
|
||||
OpenSCADFeatures.RefineShape(newobj,selobj.Object)
|
||||
OpenSCADFeatures.ViewProviderTree(newobj.ViewObject)
|
||||
|
@ -98,13 +141,34 @@ class RefineShapeFeature:
|
|||
QtCore.QT_TRANSLATE_NOOP('OpenSCAD_RefineShapeFeature',\
|
||||
'Create Refine Shape Feature')}
|
||||
|
||||
class IncreaseToleranceFeature:
|
||||
def IsActive(self):
|
||||
return FreeCADGui.Selection.countObjectsOfType('Part::Feature') > 0
|
||||
|
||||
def Activated(self):
|
||||
import Part,OpenSCADFeatures
|
||||
selection=FreeCADGui.Selection.getSelectionEx()
|
||||
for selobj in selection:
|
||||
newobj=selobj.Document.addObject("Part::FeaturePython",'tolerance')
|
||||
OpenSCADFeatures.IncreaseTolerance(newobj,selobj.Object)
|
||||
OpenSCADFeatures.ViewProviderTree(newobj.ViewObject)
|
||||
newobj.Label='tolerance_%s' % selobj.Object.Label
|
||||
selobj.Object.ViewObject.hide()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'OpenSCAD_IncreaseToleranceFeature', 'MenuText': \
|
||||
QtCore.QT_TRANSLATE_NOOP('OpenSCAD_IncreaseToleranceFeature',\
|
||||
'Increase Tolerance Feature'), 'ToolTip': \
|
||||
QtCore.QT_TRANSLATE_NOOP('OpenSCAD_IncreaseToleranceFeature',\
|
||||
'Create Feature that allows to increase the tolerance')}
|
||||
|
||||
|
||||
class ExpandPlacements:
|
||||
'''This should aid interactive repair in the future
|
||||
but currently it breaks extrusions, as axis, base and so on have to be
|
||||
recalculated'''
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelectionEx())
|
||||
return FreeCADGui.Selection.countObjectsOfType('Part::Feature') > 0
|
||||
|
||||
def Activated(self):
|
||||
import expandplacements
|
||||
|
@ -119,7 +183,7 @@ class ExpandPlacements:
|
|||
|
||||
class ReplaceObject:
|
||||
def IsActive(self):
|
||||
return len(FreeCADGui.Selection.getSelection()) == 3
|
||||
return FreeCADGui.Selection.countObjectsOfType('Part::Feature') == 3
|
||||
def Activated(self):
|
||||
import replaceobj
|
||||
#objs=[selobj.Object for selobj in FreeCADGui.Selection.getSelectionEx()]
|
||||
|
@ -139,28 +203,11 @@ class ReplaceObject:
|
|||
|
||||
class RemoveSubtree:
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelectionEx())
|
||||
return FreeCADGui.Selection.countObjectsOfType('Part::Feature') > 0
|
||||
def Activated(self):
|
||||
def addsubobjs(obj,toremoveset):
|
||||
toremove.add(obj)
|
||||
for subobj in obj.OutList:
|
||||
addsubobjs(subobj,toremoveset)
|
||||
import OpenSCADUtils,FreeCADGui
|
||||
OpenSCADUtils.removesubtree(FreeCADGui.Selection.getSelection())
|
||||
|
||||
import FreeCAD,FreeCADGui
|
||||
objs=FreeCADGui.Selection.getSelection()
|
||||
toremove=set()
|
||||
for obj in objs:
|
||||
addsubobjs(obj,toremove)
|
||||
checkinlistcomplete =False
|
||||
while not checkinlistcomplete:
|
||||
for obj in toremove:
|
||||
if (obj not in objs) and (frozenset(obj.InList) - toremove):
|
||||
toremove.remove(obj)
|
||||
break
|
||||
else:
|
||||
checkinlistcomplete = True
|
||||
for obj in toremove:
|
||||
obj.Document.removeObject(obj.Name)
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'OpenSCAD_RemoveSubtree', 'MenuText': \
|
||||
QtCore.QT_TRANSLATE_NOOP('OpenSCAD_RemoveSubtree',\
|
||||
|
@ -368,8 +415,10 @@ class Minkowski:
|
|||
'Perform Minkowski')}
|
||||
|
||||
FreeCADGui.addCommand('OpenSCAD_ColorCodeShape',ColorCodeShape())
|
||||
FreeCADGui.addCommand('OpenSCAD_ExplodeGroup',ExplodeGroup())
|
||||
FreeCADGui.addCommand('OpenSCAD_Edgestofaces',Edgestofaces())
|
||||
FreeCADGui.addCommand('OpenSCAD_RefineShapeFeature',RefineShapeFeature())
|
||||
FreeCADGui.addCommand('OpenSCAD_IncreaseToleranceFeature',IncreaseToleranceFeature())
|
||||
FreeCADGui.addCommand('OpenSCAD_ExpandPlacements',ExpandPlacements())
|
||||
FreeCADGui.addCommand('OpenSCAD_ReplaceObject',ReplaceObject())
|
||||
FreeCADGui.addCommand('OpenSCAD_RemoveSubtree',RemoveSubtree())
|
||||
|
|
|
@ -292,6 +292,31 @@ class RefineShape:
|
|||
sh=fp.Base.Shape.removeSplitter()
|
||||
fp.Shape=sh
|
||||
|
||||
class IncreaseTolerance:
|
||||
'''increase the tolerance of every vertex
|
||||
in the current implementation its' placement is linked'''
|
||||
def __init__(self,obj,child,tolerance=0):
|
||||
obj.addProperty("App::PropertyLink","Base","Base",
|
||||
"The base object that wire must be extracted")
|
||||
obj.addProperty("App::PropertyDistance","Tolerance","Base","Tolerance")
|
||||
obj.Base = child
|
||||
obj.Tolerance = tolerance
|
||||
obj.Proxy = self
|
||||
def onChanged(self, fp, prop):
|
||||
if prop in ["Tolerance"]:
|
||||
self.createGeometry(fp)
|
||||
def execute(self, fp):
|
||||
self.createGeometry(fp)
|
||||
|
||||
def createGeometry(self,fp):
|
||||
if fp.Base:
|
||||
sh=fp.Base.Shape.copy()
|
||||
for vertex in sh.Vertexes:
|
||||
vertex.Tolerance = max(vertex.Tolerance,fp.Tolerance.Value)
|
||||
fp.Shape = sh
|
||||
fp.Placement = sh.Placement
|
||||
|
||||
|
||||
class GetWire:
|
||||
'''return the first wire from a given shape'''
|
||||
def __init__(self, obj,child=None):
|
||||
|
|
|
@ -109,7 +109,7 @@ def callopenscad(inputfilename,outputfilename=None,outputext='csg',keepname=Fals
|
|||
p=subprocess.Popen(*args,**kwargs)
|
||||
stdoutd,stderrd = p.communicate()
|
||||
if p.returncode != 0:
|
||||
raise OpenSCADError('%s %s\n' % (stdoutd.strip(),stderr.strip()))
|
||||
raise OpenSCADError('%s %s\n' % (stdoutd.strip(),stderrd.strip()))
|
||||
#raise Exception,'stdout %s\n stderr%s' %(stdoutd,stderrd)
|
||||
if stderrd.strip():
|
||||
FreeCAD.Console.PrintWarning(stderrd+u'\n')
|
||||
|
@ -188,12 +188,14 @@ def multiplymat(l,r):
|
|||
def isorthogonal(submatrix,precision=4):
|
||||
"""checking if 3x3 Matrix is ortogonal (M*Transp(M)==I)"""
|
||||
prod=multiplymat(submatrix,zip(*submatrix))
|
||||
return [[round(f,precision) for f in line] for line in prod]==[[1,0,0],[0,1,0],[0,0,1]]
|
||||
return [[round(f,precision) for f in line] \
|
||||
for line in prod]==[[1,0,0],[0,1,0],[0,0,1]]
|
||||
|
||||
def detsubmatrix(s):
|
||||
"""get the determinant of a 3x3 Matrix given as list of row vectors"""
|
||||
return s[0][0]*s[1][1]*s[2][2]+s[0][1]*s[1][2]*s[2][0]+s[0][2]*s[1][0]*s[2][1]\
|
||||
-s[2][0]*s[1][1]*s[0][2]-s[2][1]*s[1][2]*s[0][0]-s[2][2]*s[1][0]*s[0][1]
|
||||
return s[0][0]*s[1][1]*s[2][2]+s[0][1]*s[1][2]*s[2][0]+\
|
||||
s[0][2]*s[1][0]*s[2][1]-s[2][0]*s[1][1]*s[0][2]-\
|
||||
s[2][1]*s[1][2]*s[0][0]-s[2][2]*s[1][0]*s[0][1]
|
||||
|
||||
def isspecialorthogonalpython(submat,precision=4):
|
||||
return isorthogonal(submat,precision) and round(detsubmatrix(submat),precision)==1
|
||||
|
@ -202,7 +204,8 @@ def isrotoinversionpython(submat,precision=4):
|
|||
return isorthogonal(submat,precision) and round(detsubmatrix(submat),precision)==-1
|
||||
|
||||
def isspecialorthogonal(mat,precision=4):
|
||||
return abs(mat.submatrix(3).isOrthogonal(10**(-precision))-1.0) < 10**(-precision) and \
|
||||
return abs(mat.submatrix(3).isOrthogonal(10**(-precision))-1.0) < \
|
||||
10**(-precision) and \
|
||||
abs(mat.submatrix(3).determinant()-1.0) < 10**(-precision)
|
||||
|
||||
def decomposerotoinversion(m,precision=4):
|
||||
|
@ -241,6 +244,123 @@ def vec2householder(nv):
|
|||
nv.z*nv.x*l,nv.z*nv.y*l,nv.z*nv.z*l,0,0,0,0,0)
|
||||
return FreeCAD.Matrix()-hh
|
||||
|
||||
|
||||
def angneg(d):
|
||||
return d if (d <= 180.0) else (d-360)
|
||||
|
||||
def shorthexfloat(f):
|
||||
s=f.hex()
|
||||
mantisse, exponent = f.hex().split('p',1)
|
||||
return '%sp%s' % (mantisse.rstrip('0'),exponent)
|
||||
|
||||
|
||||
def comparerotations(r1,r2):
|
||||
import FreeCAD
|
||||
'''compares two rotations
|
||||
a value of zero means that they are identical'''
|
||||
r2c=FreeCAD.Rotation(r2)
|
||||
r2c.invert()
|
||||
return r1.multiply(r2c).Angle
|
||||
|
||||
def findbestmatchingrotation(r1):
|
||||
import FreeCAD
|
||||
vangl = \
|
||||
(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 11.25, 12.0, 13.0,
|
||||
14.0, 15.0, 16.0, (180.0/11.0), 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 22.5,
|
||||
23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, (360.0/11.0),
|
||||
33.0, 33.75, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0,
|
||||
44.0, 45.0, 46.0, 47.0, 48.0, 49.0,(540.0/11.0), 50.0, 51.0, (360.0/7.0),
|
||||
52.0, 53.0, 54.0, 55.0, 56.0, 56.25, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0,
|
||||
63.0, 64.0, 65.0,(720.0/11.0), 66.0, 67.0, 67.5, 68.0, 69.0, 70.0, 71.0,
|
||||
72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 78.75, 79.0, 80.0, 81.0,(900.0/11.0),
|
||||
82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0,
|
||||
95.0, 96.0, 97.0, 98.0,(1080.0/11.0), 99.0, 100.0, 101.0, 101.25, 102.0,
|
||||
(720.0/7.0), 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0,
|
||||
112.0, 112.5, 113.0, 114.0, (1260.0/11), 115.0, 116.0, 117.0, 118.0, 119.0,
|
||||
120.0, 121.0, 122.0, 123.0, 123.75, 124.0, 125.0, 126.0, 127.0, 128.0,
|
||||
129.0, 130.0,(1440.0/11.0), 131.0, 132.0, 133.0, 134.0, 135.0, 136.0,
|
||||
137.0, 138.0, 139.0, 140.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 146.25,
|
||||
147.0, (1620.0/11.0), 148.0, 149.0, 150.0, 151.0, 152.0, 153.0, 154.0,
|
||||
(1080.0/7.0), 155.0, 156.0, 157.0, 157.5, 158.0, 159.0, 160.0, 161.0, 162.0,
|
||||
163.0, (1800.0/11.0), 164.0, 165.0, 166.0, 167.0, 168.0, 168.75, 169.0, 170.0,
|
||||
171.0, 172.0, 173.0, 174.0, 175.0, 176.0, 177.0,178.0, 179.0,180.0,
|
||||
-179.0, -178.0, -177.0, -176.0, -175.0, -174.0, -173.0, -172.0, -171.0, -170.0,
|
||||
-169.0, -168.75, -168.0, -167.0, -166.0, -165.0, -164.0, (-1800.0/11.0),
|
||||
-163.0, -162.0, -161.0, -160.0, -159.0, -158.0, -157.5, -157.0, -156.0,
|
||||
-155.0, (-1080.0/7.0), -154.0, -153.0, -152.0, -151.0, -150.0, -149.0, -148.0,
|
||||
(-1620.0/11.0), -147.0, -146.25, -146.0, -145.0, -144.0, -143.0, -142.0,
|
||||
-141.0, -140.0, -139.0,-138.0, -137.0, -136.0, -135.0, -134.0, -133.0, -132.0,
|
||||
-131.0, (-1440/11.0), -130.0, -129.0, -128.0,-127.0, -126.0, -125.0, -124.0,
|
||||
-123.75, -123.0, -122.0, -121.0, -120.0, -119.0, -118.0, -117.0, -116.0,
|
||||
-115.0,(-1260.0/11.0), -114.0, -113.0, -112.5, -112.0, -111.0, -110.0, -109.0,
|
||||
-108.0, -107.0, -106.0, -105.0,-104.0, -103.0,(-720.0/7.0), -102.0, -101.25,
|
||||
-101.0, -100.0, -99.0, (-1080.0/11.0), -98.0, -97.0, -96.0, -95.0, -94.0,
|
||||
-93.0, -92.0, -91.0, -90.0, -89.0, -88.0, -87.0, -86.0, -85.0, -84.0, -83.0,
|
||||
-82.0,(-900.0/11.0), -81.0, -80.0, -79.0, -78.75, -78.0, -77.0, -76.0, -75.0,
|
||||
-74.0, -73.0, -72.0, -71.0, -70.0, -69.0, -68.0, -67.5, -67.0, -66.0,
|
||||
(-720.0/11.0), -65.0, -64.0, -63.0, -62.0, -61.0, -60.0, -59.0, -58.0, -57.0,
|
||||
-56.25, -56.0, -55.0, -54.0, -53.0, -52.0,(-360.0/7.0), -51.0, -50.0,
|
||||
(-540.0/11.0), -49.0, -48.0, -47.0, -46.0, -45.0, -44.0, -43.0, -42.0, -41.0,
|
||||
-40.0, -39.0, -38.0, -37.0, -36.0, -35.0, -34.0, -33.75, -33.0,(-360.0/11.0),
|
||||
-32.0, -31.0, -30.0, -29.0, -28.0, -27.0, -26.0, -25.0, -24.0, -23.0, -22.5,
|
||||
-22.0, -21.0, -20.0, -19.0, -18.0, -17.0,(-180.0/11.0), -16.0, -15.0, -14.0,
|
||||
-13.0, -12.0, -11.25, -11.0, -10.0, -9.0, -8.0, -7.0, -6.0, -5.0, -4.0, -3.0,
|
||||
-2.0, -1.0)
|
||||
def tup2nvect(tup):
|
||||
"""convert a tuple to a normalized vector"""
|
||||
v=FreeCAD.Vector(*tup)
|
||||
v.normalize()
|
||||
return v
|
||||
|
||||
def wkaxes():
|
||||
"""well known axes for rotations"""
|
||||
vtupl=((1,0,0),(0,1,0),(0,0,1),
|
||||
(1,1,0),(1,0,1),(0,1,1),(-1,1,0),(-1,0,1),(0,1,-1),
|
||||
(1,1,1),(1,1,-1),(1,-1,1),(-1,1,1))
|
||||
return tuple(tup2nvect(tup) for tup in vtupl)
|
||||
|
||||
bestrot=FreeCAD.Rotation()
|
||||
dangle = comparerotations(r1,bestrot)
|
||||
for axis in wkaxes():
|
||||
for angle in vangl:
|
||||
for axissign in (1.0,-1.0):
|
||||
r2=FreeCAD.Rotation(axis*axissign,angle)
|
||||
dangletest = comparerotations(r1,r2)
|
||||
if dangletest < dangle:
|
||||
bestrot = r2
|
||||
dangle = dangletest
|
||||
return (bestrot,dangle)
|
||||
|
||||
def roundrotation(rot,maxangulardistance=1e-5):
|
||||
'''guess the rotation axis and angle for a rotation
|
||||
recreated from rounded floating point values
|
||||
(from a quaterion or transformation matrix)'''
|
||||
def teststandardrot(r1,maxangulardistance=1e-5):
|
||||
'''test a few common rotations beforehand'''
|
||||
import FreeCAD,itertools
|
||||
eulers = []
|
||||
for angle in (90,-90,180,45,-45,135,-135):
|
||||
for euler in itertools.permutations((0,0,angle)):
|
||||
eulers.append(euler)
|
||||
for euler in itertools.product((0,45,90,135,180,-45,-90,-135),repeat=3):
|
||||
eulers.append(euler)
|
||||
for euler in eulers:
|
||||
r2 = FreeCAD.Rotation(*euler)
|
||||
if comparerotations(r1,r2) < maxangulardistance:
|
||||
return r2
|
||||
|
||||
if rot.isNull():
|
||||
return rot
|
||||
firstguess = teststandardrot(rot,maxangulardistance)
|
||||
if firstguess is not None:
|
||||
return firstguess
|
||||
#brute force
|
||||
bestguess,angulardistance = findbestmatchingrotation(rot)
|
||||
if angulardistance < maxangulardistance: #use guess
|
||||
return bestguess
|
||||
else: #use original
|
||||
return rot
|
||||
|
||||
def callopenscadmeshstring(scadstr):
|
||||
"""Call OpenSCAD and return the result as a Mesh"""
|
||||
import Mesh,os
|
||||
|
@ -414,3 +534,24 @@ def process_ObjectsViaOpenSCAD(doc,children,name):
|
|||
import FreeCAD
|
||||
FreeCAD.Console.PrintError( unicode(translate('OpenSCAD',\
|
||||
"Error all shapes must be either 2D or both must be 3D"))+u'\n')
|
||||
|
||||
def removesubtree(objs):
|
||||
def addsubobjs(obj,toremoveset):
|
||||
toremove.add(obj)
|
||||
for subobj in obj.OutList:
|
||||
addsubobjs(subobj,toremoveset)
|
||||
|
||||
import FreeCAD
|
||||
toremove=set()
|
||||
for obj in objs:
|
||||
addsubobjs(obj,toremove)
|
||||
checkinlistcomplete =False
|
||||
while not checkinlistcomplete:
|
||||
for obj in toremove:
|
||||
if (obj not in objs) and (frozenset(obj.InList) - toremove):
|
||||
toremove.remove(obj)
|
||||
break
|
||||
else:
|
||||
checkinlistcomplete = True
|
||||
for obj in toremove:
|
||||
obj.Document.removeObject(obj.Name)
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -6,6 +6,7 @@
|
|||
<file>icons/OpenSCAD_RefineShapeFeature.svg</file>
|
||||
<file>icons/OpenSCAD_ReplaceObject.svg</file>
|
||||
<file>icons/OpenSCAD_RemoveSubtree.svg</file>
|
||||
<file>icons/OpenSCAD_Explode_Group.svg</file>
|
||||
<file>icons/OpenSCAD_MeshBooleans.svg</file>
|
||||
<file>icons/OpenSCAD_Hull.svg</file>
|
||||
<file>icons/OpenSCAD_Minkowski.svg</file>
|
||||
|
|
588
src/Mod/OpenSCAD/Resources/icons/OpenSCAD_Explode_Group.svg
Normal file
588
src/Mod/OpenSCAD/Resources/icons/OpenSCAD_Explode_Group.svg
Normal file
|
@ -0,0 +1,588 @@
|
|||
<?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="svg2980"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
sodipodi:docname="OpenSCAD_Explode_Group_9.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/OpenSCAD_workbench/OpenSCAD_Explode_Group_9_32px.png"
|
||||
inkscape:export-xdpi="45"
|
||||
inkscape:export-ydpi="45">
|
||||
<defs
|
||||
id="defs2982">
|
||||
<linearGradient
|
||||
id="linearGradient4287">
|
||||
<stop
|
||||
id="stop4289"
|
||||
offset="0"
|
||||
style="stop-color:#f87c71;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4291"
|
||||
offset="1"
|
||||
style="stop-color:#ff0000;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3864">
|
||||
<stop
|
||||
id="stop3866"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3868"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="radialGradient3850"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.6028459,1.0471639,-1.9794021,1.1395295,127.9588,-74.456907)"
|
||||
cx="51.328892"
|
||||
cy="31.074146"
|
||||
fx="51.328892"
|
||||
fy="31.074146"
|
||||
r="19.571428" />
|
||||
<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="perspective2988" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377-6"
|
||||
id="radialGradient3699"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="76.383331"
|
||||
cy="94.369568"
|
||||
fx="76.383331"
|
||||
fy="94.369568"
|
||||
r="19.467436"
|
||||
gradientTransform="matrix(0.9818943,0.1894295,-0.4109427,2.1300924,40.163453,-121.11559)" />
|
||||
<linearGradient
|
||||
id="linearGradient3377">
|
||||
<stop
|
||||
id="stop3379"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3701"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="84.883324"
|
||||
cy="77.042847"
|
||||
fx="84.883324"
|
||||
fy="77.042847"
|
||||
r="19.467436"
|
||||
gradientTransform="matrix(2.8492421,1.2585119,-0.4040415,0.9147407,-125.84131,-100.25805)" />
|
||||
<linearGradient
|
||||
id="linearGradient3007">
|
||||
<stop
|
||||
id="stop3009"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3011"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="19.467436"
|
||||
fy="77.042847"
|
||||
fx="84.883324"
|
||||
cy="77.042847"
|
||||
cx="84.883324"
|
||||
gradientTransform="matrix(2.8492421,1.2585119,-0.4040415,0.9147407,-125.84131,-100.25805)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3017"
|
||||
xlink:href="#linearGradient3377-6"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377-6"
|
||||
id="radialGradient3699-2"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="76.383331"
|
||||
cy="94.369568"
|
||||
fx="76.383331"
|
||||
fy="94.369568"
|
||||
r="19.467436"
|
||||
gradientTransform="matrix(0.9818943,0.1894295,-0.4109427,2.1300924,40.163453,-121.11559)" />
|
||||
<linearGradient
|
||||
id="linearGradient3377-6">
|
||||
<stop
|
||||
id="stop3379-2"
|
||||
offset="0"
|
||||
style="stop-color:#00afff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381-4"
|
||||
offset="1"
|
||||
style="stop-color:#0034ff;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="19.467436"
|
||||
fy="77.042847"
|
||||
fx="84.883324"
|
||||
cy="77.042847"
|
||||
cx="84.883324"
|
||||
gradientTransform="matrix(2.8492421,1.2585119,-0.4040415,0.9147407,-125.84131,-100.25805)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3017-8"
|
||||
xlink:href="#linearGradient3377-6"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient3835">
|
||||
<stop
|
||||
id="stop3837"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3839"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="19.467436"
|
||||
fy="77.042847"
|
||||
fx="84.883324"
|
||||
cy="77.042847"
|
||||
cx="84.883324"
|
||||
gradientTransform="matrix(2.8492421,1.2585119,-0.4040415,0.9147407,-125.84131,-100.25805)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3844"
|
||||
xlink:href="#linearGradient3377-6"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377-6"
|
||||
id="radialGradient3699-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="76.383331"
|
||||
cy="94.369568"
|
||||
fx="76.383331"
|
||||
fy="94.369568"
|
||||
r="19.467436"
|
||||
gradientTransform="matrix(0.9818943,0.1894295,-0.4109427,2.1300924,40.163453,-121.11559)" />
|
||||
<linearGradient
|
||||
id="linearGradient3377-2">
|
||||
<stop
|
||||
id="stop3379-7"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381-8"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="19.467436"
|
||||
fy="77.042847"
|
||||
fx="84.883324"
|
||||
cy="77.042847"
|
||||
cx="84.883324"
|
||||
gradientTransform="matrix(2.8492421,1.2585119,-0.4040415,0.9147407,-125.84131,-100.25805)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3017-6"
|
||||
xlink:href="#linearGradient3377-2"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient3835-1">
|
||||
<stop
|
||||
id="stop3837-0"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3839-9"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="19.467436"
|
||||
fy="77.042847"
|
||||
fx="84.883324"
|
||||
cy="77.042847"
|
||||
cx="84.883324"
|
||||
gradientTransform="matrix(2.8492421,1.2585119,-0.4040415,0.9147407,-125.84131,-100.25805)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3844-7"
|
||||
xlink:href="#linearGradient3377-6"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient4032">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4034" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4036" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032"
|
||||
id="radialGradient4114"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.19036833,-0.61386357,1.99853,-0.19092801,-47.133199,165.45559)"
|
||||
cx="113.50187"
|
||||
cy="65.849281"
|
||||
fx="113.50187"
|
||||
fy="65.849281"
|
||||
r="19.467436" />
|
||||
<linearGradient
|
||||
id="linearGradient3171">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3173" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3175" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4032-7">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4034-3" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4036-6" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032-7"
|
||||
id="radialGradient4114-3"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.19036833,-0.61386357,1.99853,-0.19092801,-47.133199,165.45559)"
|
||||
cx="113.50187"
|
||||
cy="65.849281"
|
||||
fx="113.50187"
|
||||
fy="65.849281"
|
||||
r="19.467436" />
|
||||
<linearGradient
|
||||
id="linearGradient3171-9">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3173-7" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3175-5" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4032-8">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4034-4" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4036-3" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032-8"
|
||||
id="radialGradient4114-9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.19036833,-0.61386357,1.99853,-0.19092801,-47.133199,165.45559)"
|
||||
cx="113.50187"
|
||||
cy="65.849281"
|
||||
fx="113.50187"
|
||||
fy="65.849281"
|
||||
r="19.467436" />
|
||||
<linearGradient
|
||||
id="linearGradient3171-1">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3173-0" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3175-3" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4032-0">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4034-37" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4036-1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032-0"
|
||||
id="radialGradient3703"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="132.70454"
|
||||
cy="90.193245"
|
||||
fx="132.70454"
|
||||
fy="90.193245"
|
||||
r="19.467436"
|
||||
gradientTransform="matrix(-0.08162339,1.3949072,-1.1572569,-0.26963374,245.22773,-105.44363)" />
|
||||
<linearGradient
|
||||
id="linearGradient3284">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3286" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3288" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3593"
|
||||
id="radialGradient3599"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="51.637894"
|
||||
cy="24.962704"
|
||||
fx="51.637894"
|
||||
fy="24.962704"
|
||||
r="19.571428" />
|
||||
<linearGradient
|
||||
id="linearGradient3593">
|
||||
<stop
|
||||
style="stop-color:#c8e0f9;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3595" />
|
||||
<stop
|
||||
style="stop-color:#637dca;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3597" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-9"
|
||||
id="radialGradient3552"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="48.645836"
|
||||
cy="25.149042"
|
||||
fx="48.645836"
|
||||
fy="25.149042"
|
||||
r="19.571428" />
|
||||
<linearGradient
|
||||
id="linearGradient3864-9">
|
||||
<stop
|
||||
id="stop3866-3"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3868-3"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="19.571428"
|
||||
fy="25.149042"
|
||||
fx="48.645836"
|
||||
cy="25.149042"
|
||||
cx="48.645836"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3304"
|
||||
xlink:href="#linearGradient3864-9"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4287"
|
||||
id="radialGradient4285"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.54355955,-0.69959567,1.0924249,-0.61410558,95.667642,203.16161)"
|
||||
cx="112.7718"
|
||||
cy="66.255531"
|
||||
fx="112.7718"
|
||||
fy="66.255531"
|
||||
r="19.467436" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4287"
|
||||
id="linearGradient4293"
|
||||
x1="25.559771"
|
||||
y1="48.403759"
|
||||
x2="31.477535"
|
||||
y2="52.710686"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="12.390625"
|
||||
inkscape:cx="31.919294"
|
||||
inkscape:cy="32"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="1004"
|
||||
inkscape:window-x="1278"
|
||||
inkscape:window-y="-3"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2985">
|
||||
<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="g3560"
|
||||
transform="matrix(0.91273618,0,0,0.90349515,7.8537384,-1.1996367)">
|
||||
<path
|
||||
transform="matrix(0.9153551,0,0,0.3021994,-4.6085053,28.76682)"
|
||||
d="m 71.785715,34.571426 c 0,10.256717 -8.314712,18.571429 -18.571428,18.571429 -10.256717,0 -18.571428,-8.314712 -18.571428,-18.571429 0,-10.256716 8.314711,-18.571428 18.571428,-18.571428 10.256716,0 18.571428,8.314712 18.571428,18.571428 z"
|
||||
sodipodi:ry="18.571428"
|
||||
sodipodi:rx="18.571428"
|
||||
sodipodi:cy="34.571426"
|
||||
sodipodi:cx="53.214287"
|
||||
id="path3558"
|
||||
style="opacity:0.66523605;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
transform="matrix(1.0092422,0,0,1.0092422,-12.598958,-12.283801)"
|
||||
d="m 71.785715,34.571426 c 0,10.256717 -8.314712,18.571429 -18.571428,18.571429 -10.256717,0 -18.571428,-8.314712 -18.571428,-18.571429 0,-10.256716 8.314711,-18.571428 18.571428,-18.571428 10.256716,0 18.571428,8.314712 18.571428,18.571428 z"
|
||||
sodipodi:ry="18.571428"
|
||||
sodipodi:rx="18.571428"
|
||||
sodipodi:cy="34.571426"
|
||||
sodipodi:cx="53.214287"
|
||||
id="path2768"
|
||||
style="fill:url(#radialGradient3599);fill-opacity:1;fill-rule:evenodd;stroke:#4b4dba;stroke-width:2.17985344;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(1.1483533,0,0,0.3791225,-28.823086,42.536051)"
|
||||
d="m 71.785715,34.571426 c 0,10.256717 -8.314712,18.571429 -18.571428,18.571429 -10.256717,0 -18.571428,-8.314712 -18.571428,-18.571429 0,-10.256716 8.314711,-18.571428 18.571428,-18.571428 10.256716,0 18.571428,8.314712 18.571428,18.571428 z"
|
||||
sodipodi:ry="18.571428"
|
||||
sodipodi:rx="18.571428"
|
||||
sodipodi:cy="34.571426"
|
||||
sodipodi:cx="53.214287"
|
||||
id="path3554"
|
||||
style="opacity:0.66523605;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
transform="matrix(1.12939,0,0,1.12939,-36.028256,1.4553754)"
|
||||
d="m 71.785715,34.571426 c 0,10.256717 -8.314712,18.571429 -18.571428,18.571429 -10.256717,0 -18.571428,-8.314712 -18.571428,-18.571429 0,-10.256716 8.314711,-18.571428 18.571428,-18.571428 10.256716,0 18.571428,8.314712 18.571428,18.571428 z"
|
||||
sodipodi:ry="18.571428"
|
||||
sodipodi:rx="18.571428"
|
||||
sodipodi:cy="34.571426"
|
||||
sodipodi:cx="53.214287"
|
||||
id="path3550"
|
||||
style="fill:url(#radialGradient3304);fill-opacity:1;fill-rule:evenodd;stroke:#000137;stroke-width:1.94795418;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" />
|
||||
</g>
|
||||
<g
|
||||
id="g3760-8"
|
||||
transform="matrix(0.4215621,-0.05553169,-0.07935438,0.54086525,28.000485,-15.81317)" />
|
||||
<g
|
||||
id="g3080"
|
||||
transform="matrix(0.84096804,-0.46792735,0.48377141,0.79640302,-35.221278,20.515799)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path3727-0"
|
||||
d="M 32.018051,65.595741 C 36.744064,58.001751 42.050792,48.459568 47.711504,38.38254 L 29.593262,29.441251 15.069181,54.973283 c -1.037712,5.511601 6.035212,12.3496 16.94887,10.622458 z"
|
||||
style="fill:url(#linearGradient4293);fill-opacity:1;fill-rule:evenodd;stroke:#170b0b;stroke-width:3.09920310999999993;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:transform-center-y="7.1498714"
|
||||
inkscape:transform-center-x="-3.804363"
|
||||
transform="matrix(-0.37252959,-0.2637647,0.95315141,-0.45225642,-5.3109174,97.4746)"
|
||||
d="m 118.01777,83.5 a 21.589199,5.3571429 0 1 1 -43.178395,0 21.589199,5.3571429 0 1 1 43.178395,0 z"
|
||||
sodipodi:ry="5.3571429"
|
||||
sodipodi:rx="21.589199"
|
||||
sodipodi:cy="83.5"
|
||||
sodipodi:cx="96.428574"
|
||||
id="path3725-5"
|
||||
style="fill:url(#radialGradient4285);fill-opacity:1;fill-rule:evenodd;stroke:#120a0a;stroke-width:4.22300577000000033;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#ff0000;stroke-width:2.78663731;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="M 13.064488,29.714001 C 13.807605,23.213426 7.0460579,17.714565 14.178417,11.130255"
|
||||
id="path3908"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<g
|
||||
id="g3457"
|
||||
transform="translate(-5.9389499,0.85958486)">
|
||||
<path
|
||||
style="fill:none;stroke:#ff0000;stroke-width:1.40416193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="M 8.1193963,12.314307 14.372272,11.461474"
|
||||
id="path3086"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3856"
|
||||
d="M 19.736155,5.6372344 19.467228,0.63586316"
|
||||
style="fill:none;stroke:#ff0000;stroke-width:1.40416193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3856-0"
|
||||
d="M 24.79896,9.8372572 32.712828,8.6932319"
|
||||
style="fill:none;stroke:#ff0000;stroke-width:1.40416193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3856-4"
|
||||
d="M 23.649368,6.3602312 28.463769,0.96777073"
|
||||
style="fill:none;stroke:#ff0000;stroke-width:1.40416193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
style="fill:none;stroke:#ff0000;stroke-width:1.40416193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="M 15.472346,6.7195999 9.6977995,2.8114355"
|
||||
id="path3894"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#ff0000;stroke-width:1.40416193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="M 25.398229,16.704601 22.971518,12.441529"
|
||||
id="path3896"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 21 KiB |
|
@ -2,7 +2,6 @@
|
|||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
|
||||
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#"
|
||||
|
@ -13,14 +12,236 @@
|
|||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64px"
|
||||
height="64px"
|
||||
id="svg2980"
|
||||
id="svg3052"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
sodipodi:docname="Tree_Part.svg"
|
||||
sodipodi:docname="Part_Refine_Shape_Parametric.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1">
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/Part and general/Part_Refine_Shape/Part_Refine_Shape_Parametric_16px.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs2982">
|
||||
id="defs3054">
|
||||
<linearGradient
|
||||
id="linearGradient4032">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4034" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4036" />
|
||||
</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="perspective3060" />
|
||||
<linearGradient
|
||||
id="linearGradient3377">
|
||||
<stop
|
||||
id="stop3379"
|
||||
offset="0"
|
||||
style="stop-color:#4bff54;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381"
|
||||
offset="1"
|
||||
style="stop-color:#00b800;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3199">
|
||||
<stop
|
||||
id="stop3201"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3203"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3692"
|
||||
cx="45.883327"
|
||||
cy="28.869568"
|
||||
fx="45.883327"
|
||||
fy="28.869568"
|
||||
r="19.467436"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3206">
|
||||
<stop
|
||||
id="stop3208"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3210"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032-5"
|
||||
id="radialGradient3703-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="133.69075"
|
||||
cy="92.823502"
|
||||
fx="133.69075"
|
||||
fy="92.823502"
|
||||
r="19.467436"
|
||||
gradientTransform="matrix(-0.08150155,0.8812939,-1.1555294,-0.17035295,253.69838,-14.119161)" />
|
||||
<linearGradient
|
||||
id="linearGradient4032-5">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4034-3" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4036-6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3377-9">
|
||||
<stop
|
||||
id="stop3379-3"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381-7"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377-9"
|
||||
id="radialGradient3144"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.9818943,0.1894295,-0.4109427,2.1300924,-24.621424,-189.11511)"
|
||||
cx="76.383331"
|
||||
cy="94.369568"
|
||||
fx="76.383331"
|
||||
fy="94.369568"
|
||||
r="19.467436" />
|
||||
<linearGradient
|
||||
id="linearGradient3162">
|
||||
<stop
|
||||
id="stop3164"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3166"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377-9"
|
||||
id="radialGradient4047"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.26138713,0.54129082,-1.0901609,-0.48453763,158.43617,23.491203)"
|
||||
cx="86.836884"
|
||||
cy="90.601151"
|
||||
fx="86.836884"
|
||||
fy="90.601151"
|
||||
r="19.467436" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377-9-9"
|
||||
id="radialGradient4049"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.8492421,1.2585119,-0.4040415,0.9147407,-125.84131,-100.25805)"
|
||||
cx="84.883324"
|
||||
cy="77.042847"
|
||||
fx="84.883324"
|
||||
fy="77.042847"
|
||||
r="19.467436" />
|
||||
<linearGradient
|
||||
id="linearGradient3377-9-9">
|
||||
<stop
|
||||
id="stop3379-3-2"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381-7-3"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="19.467436"
|
||||
fy="77.042847"
|
||||
fx="84.883324"
|
||||
cy="77.042847"
|
||||
cx="84.883324"
|
||||
gradientTransform="matrix(0.05484005,0.20633765,-1.3480108,0.19469672,184.08291,44.528235)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4066"
|
||||
xlink:href="#linearGradient3377-9-9"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032"
|
||||
id="linearGradient3957"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.96628924,0,0,0.97142924,3.6966536,2.8994362)"
|
||||
x1="133.93095"
|
||||
y1="36.432716"
|
||||
x2="184.15427"
|
||||
y2="87.916885" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032"
|
||||
id="linearGradient3959"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="94.056625"
|
||||
y1="82.853188"
|
||||
x2="89.819969"
|
||||
y2="72.796349" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032"
|
||||
id="linearGradient3961"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.96628924,0,0,0.97142924,3.6966536,2.8994362)"
|
||||
x1="133.93095"
|
||||
y1="36.432716"
|
||||
x2="184.15427"
|
||||
y2="87.916885" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032"
|
||||
id="linearGradient3963"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="94.056625"
|
||||
y1="82.853188"
|
||||
x2="89.819969"
|
||||
y2="72.796349" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4032"
|
||||
id="linearGradient3974"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.96628924,0,0,0.97142924,3.6966536,2.8994362)"
|
||||
x1="159.48199"
|
||||
y1="58.87999"
|
||||
x2="183.4729"
|
||||
y2="104.34172" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="radialGradient2401"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.959337,0.05179994,0,0.7352325,-29.610908,-1.231413)"
|
||||
cx="51.105499"
|
||||
cy="23.807407"
|
||||
fx="51.105499"
|
||||
fy="23.807407"
|
||||
r="19.571428" />
|
||||
<linearGradient
|
||||
id="linearGradient3864">
|
||||
<stop
|
||||
|
@ -32,24 +253,6 @@
|
|||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="radialGradient3850"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.6028459,1.0471639,-1.9794021,1.1395295,127.9588,-74.456907)"
|
||||
cx="51.328892"
|
||||
cy="31.074146"
|
||||
fx="51.328892"
|
||||
fy="31.074146"
|
||||
r="19.571428" />
|
||||
<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="perspective2988" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
|
@ -58,20 +261,21 @@
|
|||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.6160967"
|
||||
inkscape:cx="16.57935"
|
||||
inkscape:cy="-46.748843"
|
||||
inkscape:zoom="4.4691358"
|
||||
inkscape:cx="68.95789"
|
||||
inkscape:cy="-0.1278371"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="911"
|
||||
inkscape:window-height="684"
|
||||
inkscape:window-x="177"
|
||||
inkscape:window-y="19"
|
||||
inkscape:window-maximized="0" />
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="964"
|
||||
inkscape:window-x="-2"
|
||||
inkscape:window-y="-3"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2985">
|
||||
id="metadata3057">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
|
@ -87,316 +291,107 @@
|
|||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g3845"
|
||||
transform="matrix(0.49611692,0,0,0.49611692,-6.2336536,-40.712112)">
|
||||
<path
|
||||
style="fill:#0034ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:bevel;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 96.18444,141.44968 -19.81441,7.17921 29.4349,3.97209 -0.72357,36.12665 17.25881,-10.94388 0.57587,-34.38485 -26.7316,-1.94922 z"
|
||||
id="path3823"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#0034ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:bevel;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 75.57941,148.6589 30.70884,3.36562 0,36.47719 -31.12383,-5.06479 0.41499,-34.77802 z"
|
||||
id="path3825"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#radialGradient3850);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;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 106.05435,152.06948 16.72598,-8.4088"
|
||||
id="path3827"
|
||||
inkscape:connector-curvature="0" />
|
||||
id="g3947"
|
||||
transform="matrix(0.49076004,0.51305093,-0.52342121,0.48103687,-17.3633,17.650448)"
|
||||
inkscape:transform-center-x="0.1100357"
|
||||
inkscape:transform-center-y="-0.79451631">
|
||||
<g
|
||||
id="g3817" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#000000;stroke-width:1.97789347;stroke-miterlimit:10;stroke-dasharray:none;overflow:visible"
|
||||
id="g3981"
|
||||
transform="matrix(0.34530072,-0.0459555,0.0459555,0.34530072,-43.228956,-7.238134)">
|
||||
id="g3943"
|
||||
transform="translate(-0.39555006,1.0284302)">
|
||||
<g
|
||||
id="Layer_1"
|
||||
i:rgbTrio="#4F008000FFFF"
|
||||
i:layer="yes"
|
||||
i:dimmedPercent="50"
|
||||
style="stroke:#000000;stroke-width:1.97789347;stroke-miterlimit:10;stroke-dasharray:none">
|
||||
<g
|
||||
id="g3891"
|
||||
transform="matrix(-0.32435514,0.13754467,-0.13754467,-0.32435514,270.902,139.40876)"
|
||||
style="stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none">
|
||||
<path
|
||||
id="path3893"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 348.426,49.113 c 15.516,-4.14 30.348,-8.028 45.469,-11.664 15.084,-3.852 34.055,-8.46 44.135,-10.332 9.938,-1.872 10.621,-1.116 15.084,-0.36 4.32,0.648 8.244,3.492 10.801,4.932 2.34,1.296 3.527,0.648 3.564,3.744 -0.18,3.096 -1.477,11.34 -3.889,15.156 -2.447,3.708 -6.553,5.364 -10.367,7.488 -3.889,2.088 -7.668,3.132 -12.602,5.076 -5.039,1.872 -4.248,0.72 -17.207,5.976 -13.213,5.148 -44.461,18.072 -60.264,24.876 -15.732,6.66 -22.932,9.36 -33.553,15.192 -10.764,5.795 -21.889,15.588 -30.313,19.26 -8.459,3.492 -13.859,1.477 -19.943,2.16 -6.084,0.611 -8.711,-0.145 -16.775,1.764 -8.316,1.871 -22.248,5.939 -32.221,9.432 -10.116,3.492 -20.988,8.172 -27.216,10.98 -6.192,2.629 -9.432,4.213 -9.72,4.896 -0.18,3.131 -2.016,6.119 -5.508,9.107 -3.6,2.988 -6.516,4.176 -15.552,8.713 -9.216,4.428 -26.964,12.096 -38.952,17.855 -12.168,5.725 -23.544,11.557 -32.76,16.127 -9.144,4.43 -16.236,7.957 -21.816,10.584 -5.688,2.592 -7.596,4.43 -11.952,4.969 -4.392,0.359 -8.1,0.324 -14.616,-2.629 -6.732,-3.131 -17.388,-10.367 -25.02,-15.443 -7.704,-5.111 -16.2,-10.512 -20.484,-14.832 -4.248,-4.32 -3.852,-6.588 -4.932,-11.088 -1.224,-4.68 -2.52,-11.988 -1.8,-16.236 0.612,-4.355 2.556,-6.984 5.976,-9.395 3.492,-2.412 8.064,-4.141 14.4,-5.041 0.432,-9.791 0.18,-19.477 -0.612,-29.34 -0.972,-9.972 -3.24,-21.636 -4.428,-29.736 -1.152,-8.172 -2.052,-14.184 -2.556,-18.576 1.8,-4.104 4.068,-6.804 6.804,-8.532 2.664,-1.764 6.336,-1.656 9.36,-1.62 2.916,-0.072 5.724,0.468 8.28,1.476 1.8,-4.788 4.608,-7.56 8.568,-8.316 3.852,-0.756 8.856,0.396 14.868,3.6 1.836,-3.96 4.5,-6.084 7.992,-6.516 3.492,-0.432 7.704,0.828 12.78,3.924 1.548,-3.024 3.708,-4.788 6.624,-5.148 2.88,-0.396 6.48,0.468 10.8,2.736 1.908,-2.952 4.428,-4.536 7.56,-4.896 3.132,-0.432 6.732,0.504 11.088,2.664 0.18,-1.44 1.224,-2.412 3.672,-2.52 2.268,-0.216 7.128,0.612 10.296,1.368 3.096,0.612 4.644,1.368 8.388,2.664 3.6,1.26 9.252,3.096 13.5,4.932 4.248,1.728 9.288,2.556 11.628,5.4 2.196,2.772 1.764,4.788 1.764,11.34 -0.036,6.588 -1.8,20.268 -1.836,27.576 -0.18,7.236 0.18,12.204 0.936,15.444 13.068,-4.32 25.056,-8.748 36.504,-13.824 11.412,-5.148 23.688,-11.556 31.536,-16.308 7.596,-4.896 9.035,-9.432 14.473,-12.348 5.398,-2.916 10.295,-3.24 17.748,-5.148 7.379,-2.052 16.416,-4.212 26.279,-6.768 9.684,-2.772 22.393,-6.372 31.859,-8.856 9.398,-2.483 17.318,-4.463 24.158,-5.939 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3895"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 259.326,74.709 c 13.104,-2.7 26.855,-5.94 42.084,-10.008 15.191,-4.212 31.68,-9.684 48.348,-14.184 16.633,-4.536 34.92,-8.712 50.4,-12.384 15.264,-3.816 31.463,-8.496 40.824,-9.72 9.18,-1.26 10.764,0.936 14.471,2.412 3.637,1.368 9.721,3.996 7.416,6.084 -2.447,1.944 -9.684,3.096 -21.852,6.372 -12.348,3.24 -34.523,8.856 -51.119,13.536 -16.705,4.68 -31.393,9.108 -47.953,14.4 -16.631,5.22 -38.195,11.988 -50.939,16.812 -12.744,4.752 -12.707,6.084 -25.164,11.772 -12.707,5.58 -35.82,15.768 -49.752,21.816 -13.932,6.047 -25.38,12.24 -32.832,14.004 -7.488,1.477 -8.928,-2.305 -11.664,-4.393 -2.916,-2.123 -4.536,-4.68 -5.256,-7.955 11.484,-4.141 22.572,-8.605 33.66,-13.537 11.052,-5.004 24.3,-10.944 32.364,-15.876 7.884,-5.04 10.621,-10.404 15.156,-13.608 4.5,-3.203 8.388,-5.003 11.808,-5.543 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#0034ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3897"
|
||||
i:knockout="Off"
|
||||
d="m 170.154,126.621 c 15.156,-6.553 27.72,-12.133 38.376,-17.028 10.548,-4.824 18.432,-8.46 24.768,-12.024 6.155,-3.816 8.243,-9.036 12.384,-9.972 4.141,-0.9 9.9,2.916 12.023,4.644 1.98,1.62 2.305,3.708 0,5.292 -2.52,1.332 -7.848,1.584 -14.328,3.528 -6.551,2.052 -16.307,5.616 -24.263,8.604 -7.992,2.772 -15.336,5.292 -23.292,8.677 -8.1,3.42 -16.092,7.199 -24.516,11.627 -0.36,-1.115 -0.756,-2.233 -1.152,-3.348 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#0034ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3899"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 463.158,40.797 c 0.828,3.924 -0.396,7.236 -4.068,10.224 -3.744,2.844 -10.332,4.356 -17.676,7.308 -7.488,2.916 -16.057,6.048 -26.244,10.08 -10.332,3.888 -24.191,9.072 -34.633,13.464 -10.439,4.32 -17.711,7.524 -27.646,12.384 -10.152,4.716 -24.084,10.836 -32.365,15.876 -8.279,4.896 -11.736,10.908 -17.172,13.465 -5.652,2.412 -9.287,0.863 -15.768,1.584 -6.553,0.684 -12.527,0.252 -22.787,2.592 -10.514,2.268 -28.945,7.523 -38.917,10.908 -9.972,3.311 -13.824,6.119 -20.16,8.818 -6.336,2.594 -12.024,4.896 -17.46,6.912 0.756,4.141 -0.216,7.668 -3.312,10.729 -3.096,2.953 -8.1,3.996 -15.012,7.309 -7.128,3.203 -16.416,7.236 -27.036,12.24 -10.764,4.967 -25.92,12.492 -36.576,17.568 -10.764,5.074 -19.692,9.287 -27.072,12.348 -7.416,2.879 -9.756,6.443 -16.884,5.146 -7.236,-1.367 -17.568,-8.1 -25.992,-13.104 -8.676,-5.111 -19.296,-10.332 -24.624,-17.027 -5.22,-6.805 -8.604,-20.34 -6.66,-23.111 1.908,-2.773 10.512,2.916 17.748,6.516 7.056,3.42 17.496,11.592 24.66,14.4 7.056,2.844 10.548,3.6 17.712,2.268 7.056,-1.549 13.788,-6.336 24.66,-11.016 10.944,-4.789 27.108,-11.412 40.032,-17.102 12.816,-5.76 26.748,-13.428 36.108,-16.775 9.216,-3.313 15.336,-4.248 18.756,-2.951 4.068,-3.133 12.384,-7.561 25.092,-13.428 12.744,-6.086 36.792,-15.408 50.759,-21.709 13.896,-6.264 19.477,-10.728 32.148,-15.48 12.529,-4.896 24.625,-7.632 42.949,-13.212 18.359,-5.688 44.818,-14.004 66.311,-20.232 21.385,-6.336 41.438,-11.772 61.129,-16.992 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#0034ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3901"
|
||||
i:knockout="Off"
|
||||
d="m 52.758,212.877 c -4.104,-0.973 -20.844,-10.656 -27.432,-15.049 -6.624,-4.391 -9,-6.912 -11.7,-11.303 -2.844,-4.609 -6.228,-13.861 -4.464,-15.408 1.908,-1.404 11.52,2.592 15.516,6.732 3.888,4.066 3.348,12.887 7.56,17.279 4.068,4.176 13.284,5.111 16.812,8.1 3.384,3.024 7.632,10.405 3.708,9.649 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#0034ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3903"
|
||||
i:knockout="Off"
|
||||
d="m 263.395,124.82 c -8.137,1.477 -17.354,4.105 -28.08,7.885 -10.765,3.816 -27.792,11.195 -35.964,14.795 -8.28,3.422 -12.456,5.365 -13.068,5.832 1.08,2.484 0.684,4.752 -1.188,7.236 -1.944,2.34 -3.708,3.961 -10.152,7.092 -6.696,3.168 -27.36,12.709 -28.8,11.701 -1.296,-1.332 16.992,-14.076 20.844,-18.648 3.636,-4.535 -0.756,-6.48 1.26,-8.207 1.872,-1.729 8.712,-0.9 10.368,-2.232 1.62,-1.477 1.44,-3.385 -0.54,-6.121 1.08,-0.143 2.16,-0.072 3.672,0.072 1.404,0.145 2.952,0.359 4.788,0.793 1.908,-2.844 6.048,-5.904 12.564,-9.324 6.552,-3.457 17.64,-7.525 26.316,-11.088 8.568,-3.637 20.916,-10.477 24.84,-10.404 3.779,0.035 -4.32,8.496 -2.088,10.404 2.231,1.726 7.163,1.798 15.228,0.214 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#0034ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3905"
|
||||
i:knockout="Off"
|
||||
d="m 461.43,42.777 c 2.447,-0.288 -0.576,3.636 -2.268,5.508 -1.801,1.692 -1.656,2.52 -7.74,4.86 -6.229,2.268 -20.557,5.76 -28.549,8.676 -7.955,2.772 -8.891,4.032 -18.756,8.244 -10.043,4.176 -34.02,15.156 -40.391,16.848 -6.264,1.476 -3.564,-3.744 2.807,-7.308 6.373,-3.672 25.453,-10.224 34.885,-13.824 9.145,-3.6 13.535,-5.148 20.557,-7.704 7.02,-2.736 15.156,-5.4 21.779,-7.992 6.623,-2.628 15.012,-7.056 17.676,-7.308 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#0034ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3907"
|
||||
i:knockout="Off"
|
||||
d="m 442.781,39.465 c 6.625,-1.368 7.525,-0.756 9.109,-1.908 1.512,-1.296 2.916,-4.536 0.035,-5.292 -3.096,-0.792 -6.912,-1.368 -17.965,0.756 -11.268,2.088 -44.314,9.684 -48.311,11.556 -3.744,1.62 20.447,-1.332 25.092,-1.224 4.428,0.072 -3.961,2.52 1.477,1.944 5.471,-0.792 23.761,-4.5 30.563,-5.832 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#0034ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3909"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 77.454,83.061 c 0.36,1.512 -7.776,3.168 -10.656,3.312 -2.988,0.144 -6.228,-0.756 -6.66,-2.304 -0.432,-1.656 0.936,-7.38 3.96,-7.452 2.916,-0.18 12.78,4.752 13.356,6.444 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3911"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 38.43,67.185 c -0.108,2.016 -6.588,9.072 -10.152,9.648 -3.564,0.432 -10.476,-4.788 -10.584,-6.768 -0.144,-2.16 6.48,-4.572 10.008,-5.148 3.456,-0.504 10.548,0.252 10.728,2.268 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3913"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 57.33,75.429 c 0.432,2.304 -3.132,9.036 -6.372,9.108 -3.42,0 -12.708,-6.696 -13.284,-8.964 -0.504,-2.448 6.588,-5.184 10.008,-5.148 3.348,-0.036 8.964,2.556 9.648,5.004 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3915"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 58.122,61.281 c 0.972,1.944 -0.756,7.2 -3.384,7.992 -2.736,0.612 -11.772,-2.088 -12.672,-3.924 -1.044,-1.944 4.104,-6.768 6.84,-7.38 2.664,-0.648 8.136,1.332 9.216,3.312 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3917"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 93.654,79.605 c 0.828,1.476 -2.664,3.24 -4.932,3.348 -2.448,-0.036 -7.992,-1.692 -8.856,-3.168 -0.864,-1.512 1.224,-5.796 3.636,-5.76 2.34,0.072 9.108,3.924 10.152,5.58 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3919"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 110.43,75.681 c 0.072,1.548 -5.4,4.752 -7.812,4.752 -2.7,-0.288 -6.804,-4.176 -7.02,-5.688 -0.144,-1.548 3.888,-3.528 6.408,-3.312 2.412,0.144 8.28,2.664 8.424,4.248 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3921"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 125.91,73.809 c 0,1.116 -4.716,3.852 -6.948,3.888 -2.376,-0.108 -6.66,-2.628 -6.732,-3.816 -0.108,-1.26 4.104,-3.276 6.408,-3.276 2.304,0.072 7.092,1.836 7.272,3.204 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3923"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 142.434,70.317 c -0.036,1.26 -4.14,4.824 -6.48,5.004 -2.448,0.036 -7.092,-3.096 -7.272,-4.392 -0.18,-1.404 4.104,-3.204 6.444,-3.312 2.304,-0.108 7.056,1.296 7.308,2.7 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3925"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 162.918,67.689 c 0.18,1.476 -4.716,3.6 -7.452,3.888 -2.844,0.108 -8.424,-1.26 -8.82,-2.736 -0.36,-1.584 4.032,-6.084 6.804,-6.264 2.808,-0.144 8.928,3.456 9.468,5.112 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3927"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 164.538,70.389 c -3.744,2.304 -6.948,3.492 -10.008,3.708 -3.024,0.144 -5.796,-0.684 -8.172,-2.628 0.18,9.504 0.468,19.44 0.72,30.636 0.252,11.088 0.54,22.825 0.864,35.639 3.816,1.908 6.912,2.377 9.684,1.549 2.7,-0.863 4.788,-3.168 6.408,-6.768 -0.828,-11.736 -1.188,-22.428 -1.08,-32.904 0.036,-10.512 0.612,-19.98 1.584,-29.232 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3929"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 144.09,72.801 c -1.98,2.376 -4.248,3.816 -6.66,4.32 -2.448,0.468 -5.184,0 -8.064,-1.404 -1.044,9.36 -1.62,19.368 -1.728,30.456 -0.18,11.052 0.108,22.788 0.864,35.604 3.816,1.871 6.912,2.447 9.684,1.584 2.7,-0.936 4.788,-3.061 6.408,-6.768 0.432,-9.721 0.612,-19.656 0.54,-30.349 -0.144,-10.799 -0.396,-21.671 -1.044,-33.443 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3931"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 126.306,77.013 c -1.44,1.512 -3.132,2.448 -5.076,2.664 -2.016,0.216 -4.176,-0.252 -6.624,-1.404 -1.584,11.664 -2.772,23.076 -3.42,35.064 -0.72,11.952 -0.972,23.651 -0.756,35.929 3.744,1.979 6.984,2.375 9.72,1.584 2.7,-0.9 4.788,-3.168 6.408,-6.805 -0.648,-10.871 -1.152,-21.6 -1.116,-32.868 -0.072,-11.304 0.216,-22.464 0.864,-34.164 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3933"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 111.834,79.461 c -2.268,1.692 -4.536,2.556 -6.948,2.988 -2.448,0.36 -4.968,0.036 -7.56,-0.828 -1.8,14.076 -2.772,27.288 -3.06,40.176 -0.36,12.889 0.108,24.805 1.26,36.432 2.592,1.08 4.86,1.008 7.236,-0.072 2.268,-1.15 4.356,-3.455 6.408,-6.768 -1.188,-10.008 -1.548,-20.879 -1.08,-32.904 0.468,-12.096 1.62,-24.912 3.744,-39.024 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3935"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 95.13,81.441 c -0.648,2.34 -2.124,3.528 -4.428,3.96 -2.376,0.36 -5.508,-0.288 -9.54,-1.8 -0.684,11.016 -1.188,22.896 -1.512,36.215 -0.36,13.357 -0.54,27.469 -0.54,43.164 2.988,1.908 5.76,2.449 8.172,1.764 2.376,-0.756 4.536,-2.879 6.336,-6.227 -0.828,-10.117 -1.044,-21.42 -0.792,-34.309 0.252,-13.031 0.972,-26.963 2.304,-42.767 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3937"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 78.714,86.193 c -3.96,1.908 -7.488,2.7 -11.016,2.52 -3.528,-0.216 -6.768,-1.44 -9.864,-3.672 0.468,18.792 0.792,34.848 1.116,48.996 0.324,14.111 0.504,25.488 0.684,34.955 4.32,2.773 7.848,3.744 10.728,3.205 2.88,-0.648 4.968,-2.809 6.408,-6.768 -1.08,-8.893 -1.44,-19.584 -1.08,-32.904 0.288,-13.32 1.296,-28.584 3.024,-46.332 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3939"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 53.082,87.633 c -3.852,0.468 -7.092,0.252 -9.864,-0.792 -2.808,-1.152 -5.004,-2.844 -6.732,-5.508 1.404,17.64 2.484,32.761 3.096,46.188 0.612,13.355 0.9,24.336 0.72,33.516 2.412,4.031 4.86,6.408 7.488,7.127 2.628,0.648 5.184,-0.215 8.064,-2.879 C 55.458,152.9 55.026,140.59 54.558,127.521 54.09,114.488 53.55,101.385 53.082,87.633 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3941"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 32.202,79.857 c -2.844,1.8 -5.472,2.304 -8.172,1.116 -2.736,-1.188 -5.256,-3.78 -7.848,-7.92 2.808,18.576 4.536,34.272 5.724,48.061 1.08,13.68 1.26,24.66 0.684,33.516 2.412,3.961 4.86,6.191 7.488,7.129 2.556,0.826 5.148,0.07 7.92,-2.125 C 37.602,148.222 36.81,136.054 35.91,122.698 34.974,109.269 33.642,95.265 32.202,79.857 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3943"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 80.01,59.841 c 0.72,1.332 -2.124,3.78 -4.788,4.572 -2.844,0.72 -10.44,0.684 -11.268,-0.504 -0.648,-1.404 3.996,-6.732 6.84,-7.38 2.736,-0.684 8.352,1.908 9.216,3.312 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3945"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 98.082,56.097 c 0.612,1.584 -2.232,5.472 -4.932,6.228 -2.808,0.612 -10.404,-0.612 -11.124,-2.16 -0.648,-1.656 3.996,-6.696 6.84,-7.344 2.736,-0.72 8.352,1.62 9.216,3.276 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3947"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 116.298,55.053 c 0.396,1.656 -4.104,5.472 -6.696,6.3 -2.808,0.648 -8.892,-0.648 -9.36,-2.232 -0.396,-1.728 3.96,-6.732 6.804,-7.38 2.7,-0.684 8.748,1.584 9.252,3.312 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3949"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 135.126,54.369 c 0.54,1.224 -2.628,4.104 -5.472,4.752 -2.844,0.36 -10.8,-0.54 -11.376,-1.728 -0.54,-1.332 4.644,-4.896 7.632,-5.436 2.772,-0.576 8.568,1.152 9.216,2.412 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3951"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 77.742,70.353 c 1.008,1.728 -3.564,5.76 -5.94,6.264 -2.484,0.288 -7.884,-2.232 -8.856,-3.96 -1.044,-1.836 0,-6.156 2.556,-6.552 2.448,-0.324 11.16,2.34 12.24,4.248 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3953"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 95.85,67.401 c 1.008,1.548 -2.052,5.256 -4.32,5.724 -2.304,0.252 -7.848,-2.232 -9,-3.708 -1.116,-1.512 -0.288,-5.04 2.088,-5.328 2.196,-0.36 10.008,1.764 11.232,3.312 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3955"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 113.13,66.933 c 0.972,1.404 -3.096,3.492 -5.4,3.636 -2.448,0.036 -7.344,-1.692 -8.46,-3.096 -1.116,-1.476 -0.288,-5.256 2.088,-5.364 2.232,-0.18 10.692,3.42 11.772,4.824 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3957"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 128.286,63.729 c 0.792,1.476 -2.808,4.716 -4.824,5.148 -2.16,0.252 -6.336,-1.8 -7.272,-3.24 -0.936,-1.548 0.036,-5.004 2.088,-5.364 1.98,-0.324 9.072,1.944 10.008,3.456 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3959"
|
||||
stroke-miterlimit="10"
|
||||
i:knockout="Off"
|
||||
d="m 148.338,60.057 c 0.864,1.476 -2.916,4.716 -4.824,5.148 -2.16,0.252 -6.372,-1.8 -7.236,-3.24 -0.828,-1.548 -0.036,-5.004 2.088,-5.364 2.016,-0.324 9,1.944 9.972,3.456 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#edecf1;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3961"
|
||||
i:knockout="Off"
|
||||
d="m 168.282,133.102 c -1.116,3.455 -3.312,5.76 -6.876,7.055 -3.564,1.225 -8.352,1.441 -14.364,0.504 -2.664,2.197 -5.4,3.744 -8.208,4.5 -2.844,0.756 -5.76,0.865 -8.748,0.182 -0.396,3.059 -2.124,5.184 -5.184,6.658 -3.168,1.441 -7.416,1.945 -13.176,1.801 -1.296,2.916 -3.024,5.111 -5.724,6.588 -2.628,1.369 -6.048,2.016 -10.116,1.943 -1.728,3.602 -3.924,5.725 -6.588,6.66 -2.7,0.9 -5.868,0.324 -9.504,-1.439 -4.392,5.148 -8.532,7.848 -12.276,8.389 -3.888,0.432 -7.236,-1.297 -10.476,-5.473 -4.86,1.297 -8.64,1.439 -11.88,0.576 -3.204,-0.936 -5.616,-3.023 -7.236,-6.119 -5.22,1.402 -9.396,1.295 -12.672,-0.469 -3.312,-1.764 -5.616,-5.076 -6.912,-9.936 -3.132,-0.252 -5.364,0.072 -6.696,1.115 -1.44,0.936 -3.744,2.771 -1.512,4.824 2.268,1.871 7.38,3.24 14.652,7.164 7.092,3.959 18.216,14.615 27.828,16.271 9.396,1.439 15.984,-2.303 28.944,-6.912 13.068,-4.643 35.676,-15.084 48.384,-20.484 12.384,-5.398 18.432,-9.252 26.064,-12.131 7.56,-3.096 13.968,-4.896 19.368,-5.832 -2.268,-0.793 -3.924,-1.584 -5.112,-2.52 -1.224,-0.937 -1.836,-1.908 -1.98,-2.915 z"
|
||||
clip-rule="evenodd"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000080;fill-rule:evenodd;stroke:#000000;stroke-width:5.61401606;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
style="stroke-width:1.56434965;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
transform="matrix(0.27251135,0,0,0.33392666,-30.604145,33.869703)"
|
||||
id="g3618">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:url(#linearGradient3957);fill-opacity:1;fill-rule:evenodd;stroke:#000060;stroke-width:6.84451723;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 126.0389,18.665118 -0.11508,59.270698 c 26.40125,0.174551 37.62436,0.295763 69.10383,0.533278 l 0.13669,-59.339478 c -34.19797,1.8e-5 -30.50071,-0.183056 -69.12544,-0.464498 z"
|
||||
id="path4028"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.12130224,-0.46495637,0.4178683,-0.13497136,-19.618462,61.222329)"
|
||||
id="g4108">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient3959);fill-opacity:1;fill-rule:evenodd;stroke:#000060;stroke-width:1.95917153;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path3725"
|
||||
sodipodi:cx="96.428574"
|
||||
sodipodi:cy="83.5"
|
||||
sodipodi:rx="21.428572"
|
||||
sodipodi:ry="5.3571429"
|
||||
d="m 117.85715,83.5 c 0,2.958668 -9.5939,5.357143 -21.428576,5.357143 -11.834674,0 -21.428572,-2.398475 -21.428572,-5.357143 0,-2.958668 9.593898,-5.357143 21.428572,-5.357143 11.834676,0 21.428576,2.398475 21.428576,5.357143 z"
|
||||
transform="matrix(0.34539846,-1.2399248,4.1735828,1.2786045,-372.03004,112.4907)"
|
||||
inkscape:transform-center-x="-17.828291"
|
||||
inkscape:transform-center-y="27.732851" />
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3836"
|
||||
d="m 9.1906267,40.236636 13.3229763,0.0881 0.0052,14.558841"
|
||||
style="fill:none;stroke:#000060;stroke-width:2.06471777;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g3884"
|
||||
transform="matrix(0.63023368,0,0,0.62944884,-1.1547433,23.658183)"
|
||||
style="stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<g
|
||||
id="g3888"
|
||||
transform="matrix(0.63023368,0,0,0.62944884,-2.9496241,20.620646)" />
|
||||
<g
|
||||
style="stroke-width:1.56434965;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
transform="matrix(0.27251135,0,0,0.33392666,-2.2036508,4.7572183)"
|
||||
id="g3915">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:url(#linearGradient3961);fill-opacity:1;fill-rule:evenodd;stroke:#000060;stroke-width:6.84451723;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 129.2322,18.42821 -0.40538,58.559972 c 26.40125,0.174551 34.72136,-0.178053 66.20083,0.05946 l 0.13669,-57.918028 C 164.15967,19.36654 157.40614,18.70965 129.2322,18.428208 z"
|
||||
id="path3917"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.12130224,-0.46495637,0.4178683,-0.13497136,8.7820322,32.109844)"
|
||||
id="g3919">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient3963);fill-opacity:1;fill-rule:evenodd;stroke:#000060;stroke-width:1.95917153;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path3921"
|
||||
sodipodi:cx="96.428574"
|
||||
sodipodi:cy="83.5"
|
||||
sodipodi:rx="21.428572"
|
||||
sodipodi:ry="5.3571429"
|
||||
d="m 117.85715,83.5 c 0,2.958668 -9.5939,5.357143 -21.428576,5.357143 -11.834674,0 -21.428572,-2.398475 -21.428572,-5.357143 0,-2.958668 9.593898,-5.357143 21.428572,-5.357143 11.834676,0 21.428576,2.398475 21.428576,5.357143 z"
|
||||
transform="matrix(0.34539846,-1.2399248,4.1735828,1.2786045,-372.03004,112.4907)"
|
||||
inkscape:transform-center-x="-17.828291"
|
||||
inkscape:transform-center-y="27.732851" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
transform="matrix(0.63023368,0,0,0.62944884,24.872451,0.6371694)"
|
||||
id="g3935" />
|
||||
<g
|
||||
transform="matrix(0.63023368,0,0,0.62944884,23.07757,-2.4003676)"
|
||||
id="g3937" />
|
||||
<g
|
||||
id="g3970"
|
||||
transform="matrix(0.24031283,0,0,0.29748873,3.051923,6.457134)"
|
||||
style="stroke:none">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path3972"
|
||||
d="m 129.2322,18.42821 -0.40538,58.559972 c 26.40125,0.174551 34.72136,-0.178053 66.20083,0.05946 l 0.13669,-57.918028 C 164.15967,19.36654 157.40614,18.70965 129.2322,18.428208 z"
|
||||
style="fill:url(#linearGradient3974);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6.84451723000000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
id="rect3638"
|
||||
d="M 22.751257,3.1894325 5.8653816,7.216625 11.120802,12.73341 2.3217255,21.733624 7.37624,26.819616 l 8.351563,-9.895243 6.20693,5.152143 z"
|
||||
style="fill:#ff0900;fill-opacity:1;fill-rule:evenodd;stroke:#ff0900;stroke-width:2.20000004999999987;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="cccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 15 KiB |
|
@ -25,7 +25,7 @@
|
|||
#* and some code. *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
__title__="FreeCAD OpenSCAD Workbench - CSG exporter Version 0.01c"
|
||||
__title__="FreeCAD OpenSCAD Workbench - CSG exporter Version"
|
||||
__author__ = "Keith Sloan <keith@sloan-home.co.uk>"
|
||||
__url__ = ["http://www.sloan-home.co.uk/Export/Export.html"]
|
||||
|
||||
|
@ -231,7 +231,7 @@ def process_object(csg,ob):
|
|||
process_object(csg,subobj)
|
||||
csg.write("}\n")
|
||||
|
||||
elif ob.TypeId == "Part::Common" :
|
||||
elif ob.TypeId == "Part::MultiCommon" :
|
||||
print "Multi Common / intersection"
|
||||
csg.write("intersection() {\n")
|
||||
for subobj in ob.Shapes:
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
Version History
|
||||
===============
|
||||
|
||||
0.01a - First Version
|
||||
|
||||
0.01b - Added support for polyhedron ( Thanks shoogen )
|
||||
Some support for Torus
|
||||
Some support for extruded regular polygon
|
||||
|
||||
0.01c - Support for extruded polygon, square, circle
|
||||
bug fix for polyhydron floating point - Thanks shoogen
|
||||
|
||||
|
||||
|
||||
Thanks to shoogen and Peter Li for their advice, code, support and expertise.
|
||||
|
||||
Keith Sloan
|
||||
keith@sloan-home.co.uk
|
|
@ -27,7 +27,7 @@
|
|||
#* *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
__title__="FreeCAD OpenSCAD Workbench - CSG importer Version 0.06a"
|
||||
__title__="FreeCAD OpenSCAD Workbench - CSG importer"
|
||||
__author__ = "Keith Sloan <keith@sloan-home.co.uk>"
|
||||
__url__ = ["http://www.sloan-home.co.uk/ImportCSG"]
|
||||
|
||||
|
@ -47,9 +47,7 @@ import ply.yacc as yacc
|
|||
import Part
|
||||
|
||||
from OpenSCADFeatures import *
|
||||
#from OpenSCAD2Dgeom import *
|
||||
from OpenSCADUtils import *
|
||||
isspecialorthogonaldeterminant = isspecialorthogonalpython
|
||||
|
||||
if open.__module__ == '__builtin__':
|
||||
pythonopen = open # to distinguish python built-in open function from the one declared here
|
||||
|
@ -370,6 +368,25 @@ def CGALFeatureObj(name,children,arguments=[]):
|
|||
myobj.ViewObject.Proxy = 0
|
||||
return myobj
|
||||
|
||||
#def p_offset_action(p):
|
||||
# 'offset_action : offset LPAREN keywordargument_list RPAREN OBRACE block_list EBRACE'
|
||||
# if len(p[5]) == 0:
|
||||
# mycut = placeholder('group',[],'{}')
|
||||
# elif (len(p[5]) == 1 ): #single object
|
||||
# subobj = p[5]
|
||||
# else:
|
||||
# subobj = fuse(p[6],"Offset Union")
|
||||
# newobj=doc.addObject("Part::FeaturePython",'offset')
|
||||
# OffsetShape(newobj,subobj,p[3]['delta'])
|
||||
# if gui:
|
||||
# if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\
|
||||
# GetBool('useViewProviderTree'):
|
||||
# from OpenSCADFeatures import ViewProviderTree
|
||||
# ViewProviderTree(newobj.ViewObject)
|
||||
# else:
|
||||
# newobj.ViewObject.Proxy = 0
|
||||
# return [newobj]
|
||||
|
||||
def p_hull_action(p):
|
||||
'hull_action : hull LPAREN RPAREN OBRACE block_list EBRACE'
|
||||
p[0] = [ CGALFeatureObj(p[1],p[5]) ]
|
||||
|
@ -382,6 +399,8 @@ def p_minkowski_action(p):
|
|||
def p_not_supported(p):
|
||||
'''
|
||||
not_supported : glide LPAREN keywordargument_list RPAREN OBRACE block_list EBRACE
|
||||
| offset LPAREN keywordargument_list RPAREN OBRACE block_list EBRACE
|
||||
| resize LPAREN keywordargument_list RPAREN OBRACE block_list EBRACE
|
||||
'''
|
||||
if gui and not FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\
|
||||
GetBool('usePlaceholderForUnsupported'):
|
||||
|
@ -439,8 +458,7 @@ def fuse(lst,name):
|
|||
if printverbose: print "Fuse"
|
||||
if printverbose: print lst
|
||||
if len(lst) == 0:
|
||||
myfuse = doc.addObject("Part::Feature","emptyfuse")
|
||||
myfuse.Shape = Part.Compound([])
|
||||
myfuse = placeholder('group',[],'{}')
|
||||
elif len(lst) == 1:
|
||||
return lst[0]
|
||||
# Is this Multi Fuse
|
||||
|
@ -476,8 +494,7 @@ def p_difference_action(p):
|
|||
if printverbose: print len(p[5])
|
||||
if printverbose: print p[5]
|
||||
if (len(p[5]) == 0 ): #nochild
|
||||
mycut = doc.addObject("Part::Feature","emptycut")
|
||||
mycut.Shape = Part.Compound([])
|
||||
mycut = placeholder('group',[],'{}')
|
||||
elif (len(p[5]) == 1 ): #single object
|
||||
p[0] = p[5]
|
||||
else:
|
||||
|
@ -520,22 +537,13 @@ def p_intersection_action(p):
|
|||
elif (len(p[5]) == 1):
|
||||
mycommon = p[5][0]
|
||||
else : # 1 child
|
||||
mycommon = doc.addObject("Part::Feature","emptyintersection")
|
||||
mycommon.Shape = Part.Compound([])
|
||||
mycommon = placeholder('group',[],'{}')
|
||||
p[0] = [mycommon]
|
||||
if printverbose: print "End Intersection"
|
||||
|
||||
def process_rotate_extrude(obj):
|
||||
myrev = doc.addObject("Part::Revolution","RotateExtrude")
|
||||
myrev.Source = obj
|
||||
myrev.Axis = (0.00,1.00,0.00)
|
||||
myrev.Base = (0.00,0.00,0.00)
|
||||
myrev.Angle = 360.00
|
||||
myrev.Placement=FreeCAD.Placement(FreeCAD.Vector(),FreeCAD.Rotation(0,0,90))
|
||||
if gui:
|
||||
obj.ViewObject.hide()
|
||||
newobj=doc.addObject("Part::FeaturePython",'RefineRotateExtrude')
|
||||
RefineShape(newobj,myrev)
|
||||
RefineShape(newobj,obj)
|
||||
if gui:
|
||||
if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\
|
||||
GetBool('useViewProviderTree'):
|
||||
|
@ -543,8 +551,16 @@ def process_rotate_extrude(obj):
|
|||
ViewProviderTree(newobj.ViewObject)
|
||||
else:
|
||||
newobj.ViewObject.Proxy = 0
|
||||
myrev.ViewObject.hide()
|
||||
return(newobj)
|
||||
obj.ViewObject.hide()
|
||||
myrev = doc.addObject("Part::Revolution","RotateExtrude")
|
||||
myrev.Source = newobj
|
||||
myrev.Axis = (0.00,1.00,0.00)
|
||||
myrev.Base = (0.00,0.00,0.00)
|
||||
myrev.Angle = 360.00
|
||||
myrev.Placement=FreeCAD.Placement(FreeCAD.Vector(),FreeCAD.Rotation(0,0,90))
|
||||
if gui:
|
||||
newobj.ViewObject.hide()
|
||||
return(myrev)
|
||||
|
||||
def p_rotate_extrude_action(p):
|
||||
'rotate_extrude_action : rotate_extrude LPAREN keywordargument_list RPAREN OBRACE block_list EBRACE'
|
||||
|
@ -565,18 +581,9 @@ def p_rotate_extrude_file(p):
|
|||
if printverbose: print "End Rotate Extrude File"
|
||||
|
||||
def process_linear_extrude(obj,h) :
|
||||
mylinear = doc.addObject("Part::Extrusion","LinearExtrude")
|
||||
mylinear.Base = obj
|
||||
mylinear.Dir = (0,0,h)
|
||||
mylinear.Placement=FreeCAD.Placement()
|
||||
try:
|
||||
mylinear.Solid = True
|
||||
except:
|
||||
a = 1 # Any old null statement
|
||||
if gui:
|
||||
obj.ViewObject.hide()
|
||||
#if gui:
|
||||
newobj=doc.addObject("Part::FeaturePython",'RefineLinearExtrude')
|
||||
RefineShape(newobj,mylinear)
|
||||
RefineShape(newobj,obj)#mylinear)
|
||||
if gui:
|
||||
if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\
|
||||
GetBool('useViewProviderTree'):
|
||||
|
@ -584,8 +591,19 @@ def process_linear_extrude(obj,h) :
|
|||
ViewProviderTree(newobj.ViewObject)
|
||||
else:
|
||||
newobj.ViewObject.Proxy = 0
|
||||
mylinear.ViewObject.hide()
|
||||
return(newobj)
|
||||
obj.ViewObject.hide()
|
||||
#mylinear.ViewObject.hide()
|
||||
mylinear = doc.addObject("Part::Extrusion","LinearExtrude")
|
||||
mylinear.Base = newobj #obj
|
||||
mylinear.Dir = (0,0,h)
|
||||
mylinear.Placement=FreeCAD.Placement()
|
||||
try:
|
||||
mylinear.Solid = True
|
||||
except:
|
||||
pass
|
||||
if gui:
|
||||
newobj.ViewObject.hide()
|
||||
return(mylinear)
|
||||
|
||||
def process_linear_extrude_with_twist(base,height,twist) :
|
||||
newobj=doc.addObject("Part::FeaturePython",'twist_extrude')
|
||||
|
@ -715,38 +733,50 @@ def p_multmatrix_action(p):
|
|||
transform_matrix = FreeCAD.Matrix()
|
||||
if printverbose: print "Multmatrix"
|
||||
if printverbose: print p[3]
|
||||
transform_matrix.A11 = round(float(p[3][0][0]),12)
|
||||
transform_matrix.A12 = round(float(p[3][0][1]),12)
|
||||
transform_matrix.A13 = round(float(p[3][0][2]),12)
|
||||
transform_matrix.A14 = round(float(p[3][0][3]),12)
|
||||
transform_matrix.A21 = round(float(p[3][1][0]),12)
|
||||
transform_matrix.A22 = round(float(p[3][1][1]),12)
|
||||
transform_matrix.A23 = round(float(p[3][1][2]),12)
|
||||
transform_matrix.A24 = round(float(p[3][1][3]),12)
|
||||
transform_matrix.A31 = round(float(p[3][2][0]),12)
|
||||
transform_matrix.A32 = round(float(p[3][2][1]),12)
|
||||
transform_matrix.A33 = round(float(p[3][2][2]),12)
|
||||
transform_matrix.A34 = round(float(p[3][2][3]),12)
|
||||
m1l=sum(p[3],[])
|
||||
if any('x' in me for me in m1l): #hexfloats
|
||||
m1l=[float.fromhex(me) for me in m1l]
|
||||
matrixisrounded=False
|
||||
elif max((len(me) for me in m1l)) >= 14: #might have double precision
|
||||
m1l=[float(me) for me in m1l] # assume precise output
|
||||
m1l=[(0 if (abs(me) < 1e-15) else me) for me in m1l]
|
||||
matrixisrounded=False
|
||||
else: #trucanted numbers
|
||||
m1l=[round(float(me),12) for me in m1l] #round
|
||||
matrixisrounded=True
|
||||
transform_matrix = FreeCAD.Matrix(*tuple(m1l))
|
||||
if printverbose: print transform_matrix
|
||||
if printverbose: print "Apply Multmatrix"
|
||||
# If more than one object on the stack for multmatrix fuse first
|
||||
if (len(p[6]) > 1) :
|
||||
if (len(p[6]) == 0) :
|
||||
part = placeholder('group',[],'{}')
|
||||
elif (len(p[6]) > 1) :
|
||||
part = fuse(p[6],"Matrix Union")
|
||||
else :
|
||||
else :
|
||||
part = p[6][0]
|
||||
# part = new_part.transformGeometry(transform_matrix)
|
||||
# part = new_part.copy()
|
||||
# part.transformShape(transform_matrix)
|
||||
if (isspecialorthogonaldeterminant(fcsubmatrix(transform_matrix))) :
|
||||
if printverbose: print "Orthogonal"
|
||||
part.Placement=FreeCAD.Placement(transform_matrix).multiply(part.Placement)
|
||||
new_part = part
|
||||
if (isspecialorthogonalpython(fcsubmatrix(transform_matrix))) :
|
||||
if printverbose: print "special orthogonal"
|
||||
if matrixisrounded:
|
||||
if printverbose: print "rotation rounded"
|
||||
plm=FreeCAD.Placement(transform_matrix)
|
||||
plm=FreeCAD.Placement(plm.Base,roundrotation(plm.Rotation))
|
||||
part.Placement=plm.multiply(part.Placement)
|
||||
else:
|
||||
part.Placement=FreeCAD.Placement(transform_matrix).multiply(\
|
||||
part.Placement)
|
||||
new_part = part
|
||||
elif isrotoinversionpython(fcsubmatrix(transform_matrix)):
|
||||
if printverbose: print "orthogonal and inversion"
|
||||
cmat,axisvec = decomposerotoinversion(transform_matrix)
|
||||
new_part=doc.addObject("Part::Mirroring",'mirr_%s'%part.Name)
|
||||
new_part.Source=part
|
||||
new_part.Normal=axisvec
|
||||
new_part.Placement=FreeCAD.Placement(cmat)
|
||||
if matrixisrounded:
|
||||
if printverbose: print "rotation rounded"
|
||||
plm=FreeCAD.Placement(cmat)
|
||||
new_part.Placement=FreeCAD.Placement(plm.Base,roundrotation(plm.Rotation))
|
||||
else:
|
||||
new_part.Placement=FreeCAD.Placement(cmat)
|
||||
new_part.Label="mirrored %s" % part.Label
|
||||
if gui:
|
||||
part.ViewObject.hide()
|
||||
|
@ -922,12 +952,12 @@ def p_cube_action(p):
|
|||
l,w,h = [float(str1) for str1 in p[3]['size']]
|
||||
if (l > 0 and w > 0 and h >0):
|
||||
if printverbose: print "cube : ",p[3]
|
||||
mycube=doc.addObject('Part::Box',p[1])
|
||||
mycube.Length=l
|
||||
mycube.Width=w
|
||||
mycube.Height=h
|
||||
mycube=doc.addObject('Part::Box',p[1])
|
||||
mycube.Length=l
|
||||
mycube.Width=w
|
||||
mycube.Height=h
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning('cube with radius zero\n')
|
||||
FreeCAD.Console.PrintWarning('cube with radius zero\n')
|
||||
mycube=doc.addObject("Part::Feature","emptycube")
|
||||
mycube.Shape = Part.Compound([])
|
||||
if p[3]['center']=='true' :
|
||||
|
@ -947,11 +977,21 @@ def p_circle_action(p) :
|
|||
# in the modules preferences
|
||||
import Draft
|
||||
if n == 0 or fnmax != 0 and n >= fnmax:
|
||||
mycircle = Draft.makeCircle(r)
|
||||
#mycircle = doc.addObject('Part::Circle',p[1])
|
||||
#mycircle.Radius = r
|
||||
mycircle = FreeCAD.ActiveDocument.addObject("Part::Part2DObjectPython",'circle')
|
||||
Draft._Circle(mycircle)
|
||||
mycircle.Radius = r
|
||||
#mycircle = Draft.makeCircle(r) # would call doc.recompute
|
||||
#mycircle = doc.addObject('Part::Circle',p[1]) #would not create a face
|
||||
#mycircle.Radius = r
|
||||
else :
|
||||
mycircle = Draft.makePolygon(n,r)
|
||||
#mycircle = Draft.makePolygon(n,r) # would call doc.recompute
|
||||
mycircle = FreeCAD.ActiveDocument.addObject("Part::Part2DObjectPython",'polygon')
|
||||
Draft._Polygon(mycricle)
|
||||
mycircle.FacesNumber = n
|
||||
mycircle.Radius = r
|
||||
mycircle.DrawMode = "inscribed"
|
||||
if gui:
|
||||
Draft._ViewProviderDraft(mycircle.ViewObject)
|
||||
if printverbose: print "Push Circle"
|
||||
p[0] = [mycircle]
|
||||
|
||||
|
@ -1021,7 +1061,8 @@ def make_face(v1,v2,v3):
|
|||
return face
|
||||
|
||||
def p_polyhedron_action(p) :
|
||||
'polyhedron_action : polyhedron LPAREN points EQ OSQUARE points_list_3d ESQUARE COMMA triangles EQ OSQUARE points_list_3d ESQUARE COMMA keywordargument_list RPAREN SEMICOL'
|
||||
'''polyhedron_action : polyhedron LPAREN points EQ OSQUARE points_list_3d ESQUARE COMMA faces EQ OSQUARE points_list_3d ESQUARE COMMA keywordargument_list RPAREN SEMICOL
|
||||
| polyhedron LPAREN points EQ OSQUARE points_list_3d ESQUARE COMMA triangles EQ OSQUARE points_list_3d ESQUARE COMMA keywordargument_list RPAREN SEMICOL'''
|
||||
if printverbose: print "Polyhedron Points"
|
||||
v = []
|
||||
for i in p[6] :
|
||||
|
|
|
@ -1,61 +0,0 @@
|
|||
Version History
|
||||
===============
|
||||
|
||||
0.01a - First Version
|
||||
|
||||
0.01b - Fixed
|
||||
|
||||
Reset Global Variables
|
||||
Fix Multmatrix use of Shape
|
||||
|
||||
Added import Function (Untested)
|
||||
|
||||
0.02b - Rewrite to use Bojects rather than shapes.
|
||||
Objects now editible in FreeCad
|
||||
|
||||
0.02c - disable debug output on Yacc to avoid permissions problem with Linux
|
||||
|
||||
0.03a - Added support for
|
||||
|
||||
Linear Extrusion
|
||||
Rotational Extrusion
|
||||
circle
|
||||
square
|
||||
polygon
|
||||
polyhedron
|
||||
|
||||
0.04a - Change to use parser stack rather than own stack
|
||||
to fix a parsing problem
|
||||
makes code cleaner and less global variables
|
||||
parsers out SCAD comments ( Not sure if the are allowed in CSG file anyway
|
||||
other minor fixes
|
||||
|
||||
0.04b - Fixes where Multmatrix has more than one object neeed to fuse first
|
||||
Correct import function call
|
||||
|
||||
0.04c - Support for cylinders made with regular polygon ( Needs FreeCAD with fixes to Draft )
|
||||
Attempt at transformGeometry for non orthoganal Multmatrix
|
||||
|
||||
0.04d - Fix to multmatrix transformGeometry to avoid crash
|
||||
|
||||
0.04e - If problems with Draft or Draft's makePolygon because not on latest FreeCAD falls back
|
||||
to non editable polygon
|
||||
|
||||
0.04f - Fix bug with multiple intersections
|
||||
|
||||
0.05a - Attempt to add shogens's import dxf function code.
|
||||
|
||||
0.05b - Fix introduced bug with centre=true/false, ViewObject Proxy
|
||||
|
||||
0.05c - Fix for polygon with path - Changes to Polygon and polyhdron - parse projection
|
||||
|
||||
0.05d - Fix for implicit fuse for groups
|
||||
global max_polygon parameter to control cylinder or prism
|
||||
|
||||
There appear to be problems with some files and these maybe as a result of bugs in FreeCAD that corrupt
|
||||
the model. If you find problem files please email them to keith@sloan-home.co.uk
|
||||
|
||||
Thanks to shoogen and Peter Li for their advice, support and expertise.
|
||||
|
||||
Keith Sloan
|
||||
keith@sloan-home.co.uk
|
|
@ -47,6 +47,7 @@ reserved = (
|
|||
'undef',
|
||||
'polyhedron',
|
||||
'triangles',
|
||||
'faces',
|
||||
'render',
|
||||
'surface',
|
||||
'subdiv',
|
||||
|
@ -59,6 +60,8 @@ reserved = (
|
|||
'import',
|
||||
'color',
|
||||
'cut',
|
||||
'offset',
|
||||
'resize',
|
||||
)
|
||||
|
||||
# List of token names. This is always required
|
||||
|
|
Loading…
Reference in New Issue
Block a user