Draft: Added stretch tool - fixes #1163
This commit is contained in:
parent
5929ad3957
commit
c704c28920
|
@ -56,7 +56,7 @@ class ArchWorkbench(Workbench):
|
||||||
"Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array",
|
"Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array",
|
||||||
"Draft_Clone"]
|
"Draft_Clone"]
|
||||||
self.draftextratools = ["Draft_WireToBSpline","Draft_AddPoint","Draft_DelPoint","Draft_ShapeString",
|
self.draftextratools = ["Draft_WireToBSpline","Draft_AddPoint","Draft_DelPoint","Draft_ShapeString",
|
||||||
"Draft_PathArray","Draft_Mirror"]
|
"Draft_PathArray","Draft_Mirror","Draft_Stretch"]
|
||||||
self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup",
|
self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup",
|
||||||
"Draft_SelectGroup","Draft_SelectPlane",
|
"Draft_SelectGroup","Draft_SelectPlane",
|
||||||
"Draft_ShowSnapBar","Draft_ToggleGrid","Draft_UndoLine",
|
"Draft_ShowSnapBar","Draft_ToggleGrid","Draft_UndoLine",
|
||||||
|
|
|
@ -96,10 +96,14 @@ def isNull(something):
|
||||||
def isPtOnEdge(pt,edge) :
|
def isPtOnEdge(pt,edge) :
|
||||||
'''isPtOnEdge(Vector,edge): Tests if a point is on an edge'''
|
'''isPtOnEdge(Vector,edge): Tests if a point is on an edge'''
|
||||||
v = Part.Vertex(pt)
|
v = Part.Vertex(pt)
|
||||||
d = v.distToShape(edge)
|
try:
|
||||||
if d:
|
d = v.distToShape(edge)
|
||||||
if round(d[0],precision()) == 0:
|
except:
|
||||||
return True
|
return False
|
||||||
|
else:
|
||||||
|
if d:
|
||||||
|
if round(d[0],precision()) == 0:
|
||||||
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def hasCurves(shape):
|
def hasCurves(shape):
|
||||||
|
|
|
@ -2670,6 +2670,149 @@ class Offset(Modifier):
|
||||||
self.finish()
|
self.finish()
|
||||||
|
|
||||||
|
|
||||||
|
class Stretch(Modifier):
|
||||||
|
"The Draft_Stretch FreeCAD command definition"
|
||||||
|
|
||||||
|
def GetResources(self):
|
||||||
|
return {'Pixmap' : 'Draft_Stretch',
|
||||||
|
'Accel' : "S, H",
|
||||||
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Stretch", "Stretch"),
|
||||||
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Stretch", "Stretches the selected objects")}
|
||||||
|
|
||||||
|
def Activated(self):
|
||||||
|
Modifier.Activated(self,"Stretch")
|
||||||
|
if self.ui:
|
||||||
|
if not FreeCADGui.Selection.getSelection():
|
||||||
|
self.ui.selectUi()
|
||||||
|
msg(translate("draft", "Select an object to stretch\n"))
|
||||||
|
self.call = self.view.addEventCallback("SoEvent",selectObject)
|
||||||
|
else:
|
||||||
|
self.proceed()
|
||||||
|
|
||||||
|
def proceed(self):
|
||||||
|
if self.call:
|
||||||
|
self.view.removeEventCallback("SoEvent",self.call)
|
||||||
|
self.sel = FreeCADGui.Selection.getSelection()
|
||||||
|
if self.ui and self.sel:
|
||||||
|
self.step = 1
|
||||||
|
self.refpoint = None
|
||||||
|
self.ui.pointUi("Stretch")
|
||||||
|
self.ui.extUi()
|
||||||
|
self.call = self.view.addEventCallback("SoEvent",self.action)
|
||||||
|
self.rectracker = rectangleTracker()
|
||||||
|
self.nodetracker = []
|
||||||
|
self.displacement = None
|
||||||
|
msg(translate("draft", "Pick first point of selection rectangle:\n"))
|
||||||
|
|
||||||
|
def action(self,arg):
|
||||||
|
"scene event handler"
|
||||||
|
if arg["Type"] == "SoKeyboardEvent":
|
||||||
|
if arg["Key"] == "ESCAPE":
|
||||||
|
self.finish()
|
||||||
|
elif arg["Type"] == "SoLocation2Event": #mouse movement detection
|
||||||
|
point,ctrlPoint,info = getPoint(self,arg) #,mobile=True) #,noTracker=(self.step < 3))
|
||||||
|
if self.step == 2:
|
||||||
|
self.rectracker.update(point)
|
||||||
|
elif arg["Type"] == "SoMouseButtonEvent":
|
||||||
|
if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
|
||||||
|
if (arg["Position"] == self.pos):
|
||||||
|
# clicked twice on the same point
|
||||||
|
self.finish()
|
||||||
|
else:
|
||||||
|
point,ctrlPoint,info = getPoint(self,arg) #,mobile=True) #,noTracker=(self.step < 3))
|
||||||
|
self.addPoint(point)
|
||||||
|
|
||||||
|
def addPoint(self,point):
|
||||||
|
if self.step == 1:
|
||||||
|
# first rctangle point
|
||||||
|
msg(translate("draft", "Pick opposite point of selection rectangle:\n"))
|
||||||
|
self.ui.setRelative()
|
||||||
|
self.rectracker.setorigin(point)
|
||||||
|
self.rectracker.on()
|
||||||
|
if self.planetrack:
|
||||||
|
self.planetrack.set(point)
|
||||||
|
self.step = 2
|
||||||
|
elif self.step == 2:
|
||||||
|
# second rectangle point
|
||||||
|
msg(translate("draft", "Pick start point of displacement:\n"))
|
||||||
|
self.rectracker.off()
|
||||||
|
nodes = []
|
||||||
|
self.ops = []
|
||||||
|
for o in self.sel:
|
||||||
|
tp = Draft.getType(o)
|
||||||
|
if tp in ["Wire","BSpline","BezCurve"]:
|
||||||
|
np = []
|
||||||
|
iso = False
|
||||||
|
for p in o.Points:
|
||||||
|
p = o.Placement.multVec(p)
|
||||||
|
isi = self.rectracker.isInside(p)
|
||||||
|
np.append(isi)
|
||||||
|
if isi:
|
||||||
|
iso = True
|
||||||
|
nodes.append(p)
|
||||||
|
if iso:
|
||||||
|
self.ops.append([o,np])
|
||||||
|
elif tp == "Circle":
|
||||||
|
self.ops.append([o])
|
||||||
|
nodes.append(o.Placement.Base)
|
||||||
|
else:
|
||||||
|
print "Draft Stretch: Skipping unsupported object: ",o.Label
|
||||||
|
for n in nodes:
|
||||||
|
nt = editTracker(n)
|
||||||
|
nt.on()
|
||||||
|
self.nodetracker.append(nt)
|
||||||
|
self.step = 3
|
||||||
|
elif self.step == 3:
|
||||||
|
# first point of displacement line
|
||||||
|
msg(translate("draft", "Pick end point of displacement:\n"))
|
||||||
|
self.displacement = point
|
||||||
|
self.node = [point]
|
||||||
|
self.step = 4
|
||||||
|
elif self.step == 4:
|
||||||
|
self.displacement = point.sub(self.displacement)
|
||||||
|
self.doStretch()
|
||||||
|
if self.point:
|
||||||
|
self.ui.redraw()
|
||||||
|
|
||||||
|
def numericInput(self,numx,numy,numz):
|
||||||
|
"this function gets called by the toolbar when valid x, y, and z have been entered there"
|
||||||
|
point = Vector(numx,numy,numz)
|
||||||
|
self.addPoint(point)
|
||||||
|
|
||||||
|
def finish(self,closed=False):
|
||||||
|
if self.rectracker:
|
||||||
|
self.rectracker.finalize()
|
||||||
|
if self.nodetracker:
|
||||||
|
for n in self.nodetracker:
|
||||||
|
n.finalize()
|
||||||
|
Modifier.finish(self)
|
||||||
|
|
||||||
|
def doStretch(self):
|
||||||
|
"does the actual stretching"
|
||||||
|
commitops = []
|
||||||
|
if self.displacement:
|
||||||
|
if self.displacement.Length > 0:
|
||||||
|
|
||||||
|
for ops in self.ops:
|
||||||
|
tp = Draft.getType(ops[0])
|
||||||
|
if tp in ["Wire","BSpline","BezCurve"]:
|
||||||
|
pts = []
|
||||||
|
for i in range(len(ops[1])):
|
||||||
|
if ops[1][i] == False:
|
||||||
|
pts.append(ops[0].Points[i])
|
||||||
|
else:
|
||||||
|
pts.append(ops[0].Points[i].add(self.displacement))
|
||||||
|
pts = str(pts).replace("Vector","FreeCAD.Vector")
|
||||||
|
commitops.append("FreeCAD.ActiveDocument."+ops[0].Name+".Points="+pts)
|
||||||
|
elif tp == "Circle":
|
||||||
|
commitops.append("FreeCAD.ActiveDocument."+ops[0].Name+".Placement.Base=FreeCAD."+str(ops[0].Placement.Base.add(self.displacement)))
|
||||||
|
if commitops:
|
||||||
|
commitops.append("FreeCAD.ActiveDocument.recompute()")
|
||||||
|
FreeCADGui.addModule("Draft")
|
||||||
|
self.commit(translate("draft","Stretch"),commitops)
|
||||||
|
self.finish()
|
||||||
|
|
||||||
|
|
||||||
class Upgrade(Modifier):
|
class Upgrade(Modifier):
|
||||||
'''The Draft_Upgrade FreeCAD command definition.'''
|
'''The Draft_Upgrade FreeCAD command definition.'''
|
||||||
|
|
||||||
|
@ -4923,6 +5066,7 @@ FreeCADGui.addCommand('Draft_Heal',Heal())
|
||||||
FreeCADGui.addCommand('Draft_VisGroup',VisGroup())
|
FreeCADGui.addCommand('Draft_VisGroup',VisGroup())
|
||||||
FreeCADGui.addCommand('Draft_Mirror',Mirror())
|
FreeCADGui.addCommand('Draft_Mirror',Mirror())
|
||||||
FreeCADGui.addCommand('Draft_Slope',Draft_Slope())
|
FreeCADGui.addCommand('Draft_Slope',Draft_Slope())
|
||||||
|
FreeCADGui.addCommand('Draft_Stretch',Stretch())
|
||||||
|
|
||||||
# context commands
|
# context commands
|
||||||
FreeCADGui.addCommand('Draft_FinishLine',FinishLine())
|
FreeCADGui.addCommand('Draft_FinishLine',FinishLine())
|
||||||
|
|
|
@ -245,6 +245,20 @@ class rectangleTracker(Tracker):
|
||||||
def getNormal(self):
|
def getNormal(self):
|
||||||
"returns the normal of the rectangle"
|
"returns the normal of the rectangle"
|
||||||
return (self.u.cross(self.v)).normalize()
|
return (self.u.cross(self.v)).normalize()
|
||||||
|
|
||||||
|
def isInside(self,point):
|
||||||
|
"returns True if the given point is inside the rectangle"
|
||||||
|
vp = point.sub(self.p1())
|
||||||
|
uv = self.p2().sub(self.p1())
|
||||||
|
vv = self.p4().sub(self.p1())
|
||||||
|
uvp = DraftVecUtils.project(vp,uv)
|
||||||
|
vvp = DraftVecUtils.project(vp,vv)
|
||||||
|
if uvp.getAngle(uv) < 1:
|
||||||
|
if vvp.getAngle(vv) < 1:
|
||||||
|
if uvp.Length <= uv.Length:
|
||||||
|
if vvp.Length <= vv.Length:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
class dimTracker(Tracker):
|
class dimTracker(Tracker):
|
||||||
"A Dimension tracker, used by the dimension tool"
|
"A Dimension tracker, used by the dimension tool"
|
||||||
|
|
|
@ -76,7 +76,7 @@ class DraftWorkbench (Workbench):
|
||||||
"Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale",
|
"Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale",
|
||||||
"Draft_Edit","Draft_WireToBSpline","Draft_AddPoint",
|
"Draft_Edit","Draft_WireToBSpline","Draft_AddPoint",
|
||||||
"Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array",
|
"Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array",
|
||||||
"Draft_PathArray","Draft_Clone","Draft_Drawing","Draft_Mirror"]
|
"Draft_PathArray","Draft_Clone","Draft_Drawing","Draft_Mirror","Draft_Stretch"]
|
||||||
self.treecmdList = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup",
|
self.treecmdList = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup",
|
||||||
"Draft_SelectGroup","Draft_SelectPlane",
|
"Draft_SelectGroup","Draft_SelectPlane",
|
||||||
"Draft_ShowSnapBar","Draft_ToggleGrid"]
|
"Draft_ShowSnapBar","Draft_ToggleGrid"]
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
<file>icons/Draft_Grid.svg</file>
|
<file>icons/Draft_Grid.svg</file>
|
||||||
<file>icons/Draft_Slope.svg</file>
|
<file>icons/Draft_Slope.svg</file>
|
||||||
<file>icons/DraftWorkbench.svg</file>
|
<file>icons/DraftWorkbench.svg</file>
|
||||||
|
<file>icons/Draft_Stretch.svg</file>
|
||||||
<file>patterns/concrete.svg</file>
|
<file>patterns/concrete.svg</file>
|
||||||
<file>patterns/cross.svg</file>
|
<file>patterns/cross.svg</file>
|
||||||
<file>patterns/line.svg</file>
|
<file>patterns/line.svg</file>
|
||||||
|
|
276
src/Mod/Draft/Resources/icons/Draft_Stretch.svg
Normal file
276
src/Mod/Draft/Resources/icons/Draft_Stretch.svg
Normal file
|
@ -0,0 +1,276 @@
|
||||||
|
<?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="svg2766"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="Draft_Stretch.svg"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||||
|
version="1.1">
|
||||||
|
<defs
|
||||||
|
id="defs2768">
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient3856">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#3465a4;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop3858" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#729fcf;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop3860" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient3824">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#729fcf;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop3826" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#204a87;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop3828" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3787">
|
||||||
|
<stop
|
||||||
|
id="stop3789"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
id="stop3791"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3864">
|
||||||
|
<stop
|
||||||
|
id="stop3866"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
id="stop3868"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||||
|
</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="perspective2774" />
|
||||||
|
<linearGradient
|
||||||
|
gradientTransform="matrix(0,-1.4500001,1.4705882,0,-15.05882,91.45)"
|
||||||
|
y2="36.079998"
|
||||||
|
x2="21.689653"
|
||||||
|
y1="29.279999"
|
||||||
|
x1="56.172409"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient3036"
|
||||||
|
xlink:href="#linearGradient3895"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3895">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#729fcf;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop3897" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#204a87;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop3899" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3824"
|
||||||
|
id="linearGradient3830-3"
|
||||||
|
x1="591.59064"
|
||||||
|
y1="103.1946"
|
||||||
|
x2="599.1272"
|
||||||
|
y2="128.1946"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.1400105,0,0,2.3311849,-82.179086,-167.4987)" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3856"
|
||||||
|
id="linearGradient3862-9"
|
||||||
|
x1="613.25824"
|
||||||
|
y1="135.1946"
|
||||||
|
x2="595.35895"
|
||||||
|
y2="68.194603"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.0614931,0,0,1,-614.9391,-71.223999)" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3856"
|
||||||
|
id="linearGradient4383"
|
||||||
|
x1="47.999996"
|
||||||
|
y1="88"
|
||||||
|
x2="51.999996"
|
||||||
|
y2="6"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.6040039"
|
||||||
|
inkscape:cx="28.028062"
|
||||||
|
inkscape:cy="35.916866"
|
||||||
|
inkscape:current-layer="g3518"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1051"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:snap-global="true"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid2997"
|
||||||
|
empspacing="2"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer">
|
||||||
|
<g
|
||||||
|
id="g3518"
|
||||||
|
transform="matrix(1.0614931,0,0,1,-612.96941,-69.194602)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4383);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 34.731889,6.0502044 -5.334903,1.8009819 3.623047,7.0859367 4.748965,-2.947466 z m 4.447265,8.6992186 -4.748965,2.945513 2.791016,5.458984 4.748965,-2.945513 z m 4.201172,8.216797 -4.748965,2.947466 2.91211,5.695312 4.748965,-2.945513 z m 4.322266,8.455078 -4.748965,2.947466 2.900391,5.673828 4.748964,-2.945513 z m 4.3125,8.433594 -4.750918,2.945512 2.458984,4.810547 1.560547,0 0,0.16211 3.645449,-2.216998 z m 4.322265,8.458984 -4.748964,2.947466 0.804687,2.528743 -2.219252,0.832408 0,5.901721 7.667969,0 c 3.037635,-4.1e-5 4.050557,-2.254652 2.731889,-4.832608 z M 32,54.622493 l 0,5.901721 5.541016,0 0,-5.901721 z m 8.619141,0 0,5.901721 6.476562,0 0,-5.901721 z"
|
||||||
|
transform="matrix(0.94206924,0,0,1,577.45963,69.194602)"
|
||||||
|
id="path4267"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#729fcf;stroke-width:1.94120502;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 616.67369,125.79029 4.17121,0"
|
||||||
|
id="path3834"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#729fcf;stroke-width:1.94120502;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 607.69908,125.80763 4.17121,0"
|
||||||
|
id="path3834-6"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#0b1521;stroke-width:7.76482012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 583.66838,75.458122 0,51.362428 23.4309,0 0,-51.362428 z"
|
||||||
|
id="path3018-5"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:url(#linearGradient3830-3);stroke-width:3.88241006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 583.64878,75.3982 0,46.47494 0,4.81114 23.6273,0 0,-51.28608 z"
|
||||||
|
id="path3018-1-3"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#729fcf;stroke-width:1.94120502;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 587.56202,125.6418 18.65048,0 0,-46.450484 m 1.84625,-4.711707 -25.38962,0 0,53.115551"
|
||||||
|
id="path3018-1-7-5"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#729fcf;stroke-width:1.94120502;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 625.30428,111.15089 1.85491,3.6514"
|
||||||
|
id="path3834-2"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#729fcf;stroke-width:1.94120502;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 621.20619,102.68491 1.85491,3.6514"
|
||||||
|
id="path3834-2-6"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#729fcf;stroke-width:1.94120502;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 617.14912,94.29804 1.85491,3.6514"
|
||||||
|
id="path3834-2-1"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#729fcf;stroke-width:1.94120502;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 613.21276,85.997004 1.79715,3.516512"
|
||||||
|
id="path3834-2-8"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#729fcf;stroke-width:1.94120502;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 625.6855,125.52981 c 0,0 1.91811,-0.40021 2.46967,-0.86591 0.27577,-0.23286 0.82382,-0.84479 0.70224,-1.8277 -0.12158,-0.98291 -0.86646,-2.3859 -0.86646,-2.3859"
|
||||||
|
id="path3834-2-7"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cssc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<metadata
|
||||||
|
id="metadata5370">
|
||||||
|
<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:license
|
||||||
|
rdf:resource="" />
|
||||||
|
<dc:date>Mon Oct 10 13:44:52 2011 +0000</dc:date>
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>[wmayer]</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:rights>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:rights>
|
||||||
|
<dc:publisher>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>FreeCAD</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:publisher>
|
||||||
|
<dc:identifier>FreeCAD/src/Mod/Draft/Resources/icons/Draft_Scale.svg</dc:identifier>
|
||||||
|
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
|
||||||
|
<dc:contributor>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>[agryson] Alexander Gryson</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:contributor>
|
||||||
|
<dc:subject>
|
||||||
|
<rdf:Bag>
|
||||||
|
<rdf:li>square</rdf:li>
|
||||||
|
<rdf:li>arrow</rdf:li>
|
||||||
|
<rdf:li>dotted line</rdf:li>
|
||||||
|
<rdf:li />
|
||||||
|
</rdf:Bag>
|
||||||
|
</dc:subject>
|
||||||
|
<dc:description>A small square in the bottom left corner of a large dotted box ith an arrow pointing from the top left corner of the inner box to the top left corner of the outer box</dc:description>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
Loading…
Reference in New Issue
Block a user