New Draft Snap toolbar

A new toolbar will now appear when using the Draft Snap system (can
be disabled in preferences) allowing to turn snaps on/off globally
or invidually
This commit is contained in:
Yorik van Havre
2012-03-12 17:20:03 -03:00
parent 1b4147144b
commit 17290798dc
20 changed files with 5234 additions and 412 deletions

View File

@@ -70,7 +70,7 @@ class ArchWorkbench(Workbench):
"Draft_Downgrade","Draft_Trimex"]
self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode",
"Draft_AddToGroup","Draft_SelectGroup",
"Draft_SelectPlane"]
"Draft_SelectPlane","Draft_ToggleSnap"]
self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape",
"Arch_SelectNonSolidMeshes","Arch_RemoveShape"]
self.appendToolbar(str(DraftTools.translate("arch","Arch tools")),self.archtools)

View File

@@ -101,7 +101,7 @@ def getParamType(param):
elif param in ["textheight","tolerance","gridSpacing"]:
return "float"
elif param in ["selectBaseObjects","alwaysSnap","grid","fillmode","saveonexit","maxSnap",
"SvgLinesBlack","dxfStdSize"]:
"SvgLinesBlack","dxfStdSize","showSnapBar"]:
return "bool"
elif param in ["color","constructioncolor","snapcolor"]:
return "unsigned"

View File

@@ -1103,7 +1103,7 @@ class DraftToolBar:
def togglesnap(self):
if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.active = not FreeCADGui.Snapper.active
FreeCADGui.Snapper.toggle()
#---------------------------------------------------------------------------

View File

@@ -27,7 +27,7 @@ __url__ = "http://free-cad.sourceforge.net"
import FreeCAD, FreeCADGui, math, Draft, DraftGui, DraftTrackers
from DraftGui import todo
from DraftGui import todo,getMainWindow
from draftlibs import fcvec
from FreeCAD import Vector
from pivy import coin
@@ -84,16 +84,16 @@ class Snapper:
'ortho':'dot',
'intersection':'dot'}
self.cursors = {'passive':None,
'extension':':/icons/Constraint_Parallel.svg',
'parallel':':/icons/Constraint_Parallel.svg',
'grid':':/icons/Constraint_PointOnPoint.svg',
'endpoint':':/icons/Constraint_PointOnEnd.svg',
'midpoint':':/icons/Constraint_PointOnObject.svg',
'perpendicular':':/icons/Constraint_PointToObject.svg',
'angle':':/icons/Constraint_ExternalAngle.svg',
'center':':/icons/Constraint_Concentric.svg',
'ortho':':/icons/Constraint_Perpendicular.svg',
'intersection':':/icons/Constraint_Tangent.svg'}
'extension':':/icons/Snap_Extension.svg',
'parallel':':/icons/Snap_Parallel.svg',
'grid':':/icons/Snap_Grid.svg',
'endpoint':':/icons/Snap_Endpoint.svg',
'midpoint':':/icons/Snap_Midpoint.svg',
'perpendicular':':/icons/Snap_Perpendicular.svg',
'angle':':/icons/Snap_Angle.svg',
'center':':/icons/Snap_Center.svg',
'ortho':':/icons/Snap_Ortho.svg',
'intersection':':/icons/Snap_Intersection.svg'}
def snap(self,screenpos,lastpoint=None,active=True,constrain=False):
"""snap(screenpos,lastpoint=None,active=True,constrain=False): returns a snapped
@@ -104,9 +104,19 @@ class Snapper:
Screenpos can be a list, a tuple or a coin.SbVec2s object."""
global Part,fcgeo
import Part, SketcherGui
import Part
from draftlibs import fcgeo
if not hasattr(self,"toolbar"):
self.makeSnapToolBar()
mw = getMainWindow()
bt = mw.findChild(QtGui.QToolBar,"Draft Snap")
if not bt:
mw.addToolBar(self.toolbar)
else:
if Draft.getParam("showSnapBar"):
bt.show()
def cstr(point):
"constrains if needed"
if constrain:
@@ -342,181 +352,195 @@ class Snapper:
def snapToPolar(self,point,last):
"snaps to polar lines from the given point"
polarAngles = [90,45]
if last:
vecs = []
ax = [FreeCAD.DraftWorkingPlane.u,
FreeCAD.DraftWorkingPlane.v,
FreeCAD.DraftWorkingPlane.axis]
for a in polarAngles:
if a == 90:
vecs.extend([ax[0],fcvec.neg(ax[0])])
vecs.extend([ax[1],fcvec.neg(ax[1])])
else:
v = fcvec.rotate(ax[0],math.radians(a),ax[2])
vecs.extend([v,fcvec.neg(v)])
v = fcvec.rotate(ax[1],math.radians(a),ax[2])
vecs.extend([v,fcvec.neg(v)])
for v in vecs:
de = Part.Line(last,last.add(v)).toShape()
np = self.getPerpendicular(de,point)
if (np.sub(point)).Length < self.radius:
if self.tracker:
self.tracker.setCoords(np)
self.tracker.setMarker(self.mk['parallel'])
self.tracker.on()
self.setCursor('ortho')
return np,de
if self.isEnabled('ortho'):
polarAngles = [90,45]
if last:
vecs = []
ax = [FreeCAD.DraftWorkingPlane.u,
FreeCAD.DraftWorkingPlane.v,
FreeCAD.DraftWorkingPlane.axis]
for a in polarAngles:
if a == 90:
vecs.extend([ax[0],fcvec.neg(ax[0])])
vecs.extend([ax[1],fcvec.neg(ax[1])])
else:
v = fcvec.rotate(ax[0],math.radians(a),ax[2])
vecs.extend([v,fcvec.neg(v)])
v = fcvec.rotate(ax[1],math.radians(a),ax[2])
vecs.extend([v,fcvec.neg(v)])
for v in vecs:
de = Part.Line(last,last.add(v)).toShape()
np = self.getPerpendicular(de,point)
if (np.sub(point)).Length < self.radius:
if self.tracker:
self.tracker.setCoords(np)
self.tracker.setMarker(self.mk['parallel'])
self.tracker.on()
self.setCursor('ortho')
return np,de
return point,None
def snapToGrid(self,point):
"returns a grid snap point if available"
if self.grid:
np = self.grid.getClosestNode(point)
if np:
if self.radius != 0:
dv = point.sub(np)
if dv.Length <= self.radius:
if self.tracker:
self.tracker.setCoords(np)
self.tracker.setMarker(self.mk['grid'])
self.tracker.on()
self.setCursor('grid')
return np
if self.isEnabled("grid"):
np = self.grid.getClosestNode(point)
if np:
if self.radius != 0:
dv = point.sub(np)
if dv.Length <= self.radius:
if self.tracker:
self.tracker.setCoords(np)
self.tracker.setMarker(self.mk['grid'])
self.tracker.on()
self.setCursor('grid')
return np
return point
def snapToEndpoints(self,shape):
"returns a list of enpoints snap locations"
snaps = []
if hasattr(shape,"Vertexes"):
for v in shape.Vertexes:
snaps.append([v.Point,'endpoint',v.Point])
elif hasattr(shape,"Point"):
snaps.append([shape.Point,'endpoint',shape.Point])
elif hasattr(shape,"Points"):
for v in shape.Points:
snaps.append([v.Vector,'endpoint',v.Vector])
if self.isEnabled("endpoint"):
if hasattr(shape,"Vertexes"):
for v in shape.Vertexes:
snaps.append([v.Point,'endpoint',v.Point])
elif hasattr(shape,"Point"):
snaps.append([shape.Point,'endpoint',shape.Point])
elif hasattr(shape,"Points"):
for v in shape.Points:
snaps.append([v.Vector,'endpoint',v.Vector])
return snaps
def snapToMidpoint(self,shape):
"returns a list of midpoints snap locations"
snaps = []
if isinstance(shape,Part.Edge):
mp = fcgeo.findMidpoint(shape)
if mp:
snaps.append([mp,'midpoint',mp])
if self.isEnabled("midpoint"):
if isinstance(shape,Part.Edge):
mp = fcgeo.findMidpoint(shape)
if mp:
snaps.append([mp,'midpoint',mp])
return snaps
def snapToPerpendicular(self,shape,last):
"returns a list of perpendicular snap locations"
snaps = []
if last:
if isinstance(shape,Part.Edge):
if isinstance(shape.Curve,Part.Line):
np = self.getPerpendicular(shape,last)
elif isinstance(shape.Curve,Part.Circle):
dv = last.sub(shape.Curve.Center)
dv = fcvec.scaleTo(dv,shape.Curve.Radius)
np = (shape.Curve.Center).add(dv)
elif isinstance(shape.Curve,Part.BSplineCurve):
pr = shape.Curve.parameter(last)
np = shape.Curve.value(pr)
else:
return snaps
snaps.append([np,'perpendicular',np])
if self.isEnabled("perpendicular"):
if last:
if isinstance(shape,Part.Edge):
if isinstance(shape.Curve,Part.Line):
np = self.getPerpendicular(shape,last)
elif isinstance(shape.Curve,Part.Circle):
dv = last.sub(shape.Curve.Center)
dv = fcvec.scaleTo(dv,shape.Curve.Radius)
np = (shape.Curve.Center).add(dv)
elif isinstance(shape.Curve,Part.BSplineCurve):
pr = shape.Curve.parameter(last)
np = shape.Curve.value(pr)
else:
return snaps
snaps.append([np,'perpendicular',np])
return snaps
def snapToOrtho(self,shape,last,constrain):
"returns a list of ortho snap locations"
snaps = []
if constrain:
if isinstance(shape,Part.Edge):
if last:
if isinstance(shape.Curve,Part.Line):
if self.constraintAxis:
tmpEdge = Part.Line(last,last.add(self.constraintAxis)).toShape()
# get the intersection points
pt = fcgeo.findIntersection(tmpEdge,shape,True,True)
if pt:
for p in pt:
snaps.append([p,'ortho',p])
if self.isEnabled("ortho"):
if constrain:
if isinstance(shape,Part.Edge):
if last:
if isinstance(shape.Curve,Part.Line):
if self.constraintAxis:
tmpEdge = Part.Line(last,last.add(self.constraintAxis)).toShape()
# get the intersection points
pt = fcgeo.findIntersection(tmpEdge,shape,True,True)
if pt:
for p in pt:
snaps.append([p,'ortho',p])
return snaps
def snapToExtOrtho(self,last,constrain,eline):
"returns an ortho X extension snap location"
if constrain and last and self.constraintAxis and self.extLine:
tmpEdge1 = Part.Line(last,last.add(self.constraintAxis)).toShape()
tmpEdge2 = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape()
# get the intersection points
pt = fcgeo.findIntersection(tmpEdge1,tmpEdge2,True,True)
if pt:
return [pt[0],'ortho',pt[0]]
if eline:
try:
if self.isEnabled("extension") and self.isEnabled("ortho"):
if constrain and last and self.constraintAxis and self.extLine:
tmpEdge1 = Part.Line(last,last.add(self.constraintAxis)).toShape()
tmpEdge2 = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape()
# get the intersection points
pt = fcgeo.findIntersection(eline,tmpEdge2,True,True)
pt = fcgeo.findIntersection(tmpEdge1,tmpEdge2,True,True)
if pt:
return [pt[0],'ortho',pt[0]]
except:
return None
if eline:
try:
tmpEdge2 = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape()
# get the intersection points
pt = fcgeo.findIntersection(eline,tmpEdge2,True,True)
if pt:
return [pt[0],'ortho',pt[0]]
except:
return None
return None
def snapToElines(self,e1,e2):
"returns a snap location at the infinite intersection of the given edges"
snaps = []
if e1 and e2:
# get the intersection points
pts = fcgeo.findIntersection(e1,e2,True,True)
if pts:
for p in pts:
snaps.append([p,'intersection',p])
if self.isEnabled("intersection") and self.isEnabled("extension"):
if e1 and e2:
# get the intersection points
pts = fcgeo.findIntersection(e1,e2,True,True)
if pts:
for p in pts:
snaps.append([p,'intersection',p])
return snaps
def snapToAngles(self,shape):
"returns a list of angle snap locations"
snaps = []
rad = shape.Curve.Radius
pos = shape.Curve.Center
for i in [0,30,45,60,90,120,135,150,180,210,225,240,270,300,315,330]:
ang = math.radians(i)
cur = Vector(math.sin(ang)*rad+pos.x,math.cos(ang)*rad+pos.y,pos.z)
snaps.append([cur,'angle',cur])
if self.isEnabled("angle"):
rad = shape.Curve.Radius
pos = shape.Curve.Center
for i in [0,30,45,60,90,120,135,150,180,210,225,240,270,300,315,330]:
ang = math.radians(i)
cur = Vector(math.sin(ang)*rad+pos.x,math.cos(ang)*rad+pos.y,pos.z)
snaps.append([cur,'angle',cur])
return snaps
def snapToCenter(self,shape):
"returns a list of center snap locations"
snaps = []
rad = shape.Curve.Radius
pos = shape.Curve.Center
for i in [15,37.5,52.5,75,105,127.5,142.5,165,195,217.5,232.5,255,285,307.5,322.5,345]:
ang = math.radians(i)
cur = Vector(math.sin(ang)*rad+pos.x,math.cos(ang)*rad+pos.y,pos.z)
snaps.append([cur,'center',pos])
if self.isEnabled("center"):
rad = shape.Curve.Radius
pos = shape.Curve.Center
for i in [15,37.5,52.5,75,105,127.5,142.5,165,195,217.5,232.5,255,285,307.5,322.5,345]:
ang = math.radians(i)
cur = Vector(math.sin(ang)*rad+pos.x,math.cos(ang)*rad+pos.y,pos.z)
snaps.append([cur,'center',pos])
return snaps
def snapToIntersection(self,shape):
"returns a list of intersection snap locations"
snaps = []
# get the stored objects to calculate intersections
if self.lastObj[0]:
obj = FreeCAD.ActiveDocument.getObject(self.lastObj[0])
if obj:
if obj.isDerivedFrom("Part::Feature"):
if (not self.maxEdges) or (len(obj.Shape.Edges) <= self.maxEdges):
for e in obj.Shape.Edges:
# get the intersection points
pt = fcgeo.findIntersection(e,shape)
if pt:
for p in pt:
snaps.append([p,'intersection',p])
if self.isEnabled("intersection"):
# get the stored objects to calculate intersections
if self.lastObj[0]:
obj = FreeCAD.ActiveDocument.getObject(self.lastObj[0])
if obj:
if obj.isDerivedFrom("Part::Feature"):
if (not self.maxEdges) or (len(obj.Shape.Edges) <= self.maxEdges):
for e in obj.Shape.Edges:
# get the intersection points
pt = fcgeo.findIntersection(e,shape)
if pt:
for p in pt:
snaps.append([p,'intersection',p])
return snaps
def snapToVertex(self,info,active=False):
p = Vector(info['x'],info['y'],info['z'])
if active:
return [p,'endpoint',p]
if self.isEnabled("endpoint"):
return [p,'endpoint',p]
else:
return []
else:
return [p,'passive',p]
@@ -722,8 +746,69 @@ class Snapper:
# adding callback functions
self.ui.pointUi(cancel=cancel,getcoords=getcoords,extra=extradlg,rel=bool(last))
self.callbackClick = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),click)
self.callbackMove = self.view.addEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),move)
self.callbackMove = self.view.addEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),move)
def makeSnapToolBar(self):
"builds the Snap toolbar"
self.toolbar = QtGui.QToolBar(None)
self.toolbar.setObjectName("Draft Snap")
self.toolbar.setWindowTitle("Draft Snap")
self.toolbarButtons = []
self.masterbutton = QtGui.QPushButton(None)
self.masterbutton.setIcon(QtGui.QIcon(":/icons/Snap_Lock.svg"))
self.masterbutton.setIconSize(QtCore.QSize(16, 16))
self.masterbutton.setMaximumSize(QtCore.QSize(26,26))
self.masterbutton.setToolTip("Snap On/Off")
self.masterbutton.setObjectName("SnapButtonMain")
self.masterbutton.setCheckable(True)
self.masterbutton.setChecked(True)
QtCore.QObject.connect(self.masterbutton,QtCore.SIGNAL("toggled(bool)"),self.toggle)
self.toolbar.addWidget(self.masterbutton)
for c,i in self.cursors.iteritems():
if i:
b = QtGui.QPushButton(None)
b.setIcon(QtGui.QIcon(i))
b.setIconSize(QtCore.QSize(16, 16))
b.setMaximumSize(QtCore.QSize(26,26))
b.setToolTip(c)
b.setObjectName("SnapButton"+c)
b.setCheckable(True)
b.setChecked(True)
self.toolbar.addWidget(b)
self.toolbarButtons.append(b)
if not Draft.getParam("showSnapBar"):
self.toolbar.hide()
def toggle(self,checked=None):
print "checked",checked
if hasattr(self,"toolbarButtons"):
if checked == None:
self.masterbutton.toggle()
elif checked:
if hasattr(self,"savedButtonStates"):
for i in range(len(self.toolbarButtons)):
self.toolbarButtons[i].setEnabled(True)
self.toolbarButtons[i].setChecked(self.savedButtonStates[i])
else:
self.savedButtonStates = []
for i in range(len(self.toolbarButtons)):
self.savedButtonStates.append(self.toolbarButtons[i].isChecked())
self.toolbarButtons[i].setEnabled(False)
def isEnabled(self,but):
"returns true if the given button is turned on"
for b in self.toolbarButtons:
if str(b.objectName()) == "SnapButton" + but:
return (b.isEnabled() and b.isChecked())
return False
def show(self):
"shows the toolbar"
if hasattr(self,"toolbar"):
self.toolbar.show()
else:
self.makeSnapToolBar()
self.toolbar.show()
if not hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper = Snapper()

View File

@@ -3642,13 +3642,25 @@ class ToggleSnap():
"The ToggleSnap FreeCAD command definition"
def GetResources(self):
return {'Pixmap' : 'Draft_Snap',
return {'Pixmap' : 'Snap_Lock',
'Accel' : "Shift+S",
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_ToggleSnap", "Toggle snap"),
'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_ToggleSnap", "Toggles Draft snap on or off")}
def Activated(self):
if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.active = not FreeCADGui.Snapper.active
FreeCADGui.Snapper.toggle()
class ShowSnapBar():
"The ShowSnapBar FreeCAD command definition"
def GetResources(self):
return {'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_ShowSnapBar", "Show Snap Bar"),
'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_ShowSnapBar", "Shows Draft snap toolbar")}
def Activated(self):
if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.show()
#---------------------------------------------------------------------------
# Adds the icons & commands to the FreeCAD command manager, and sets defaults
@@ -3695,6 +3707,7 @@ FreeCADGui.addCommand('Draft_AddToGroup',AddToGroup())
FreeCADGui.addCommand('Draft_SelectGroup',SelectGroup())
FreeCADGui.addCommand('Draft_Shape2DView',Shape2DView())
FreeCADGui.addCommand('Draft_ToggleSnap',ToggleSnap())
FreeCADGui.addCommand('Draft_ShowSnapBar',ShowSnapBar())
# a global place to look for active draft Command
FreeCAD.activeDraftCommand = None

File diff suppressed because it is too large Load Diff

View File

@@ -192,7 +192,8 @@ class DraftWorkbench (Workbench):
"Draft_Drawing","Draft_Edit","Draft_WireToBSpline","Draft_AddPoint",
"Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array"]
self.treecmdList = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup",
"Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap"]
"Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap",
"Draft_ShowSnapBar"]
self.lineList = ["Draft_UndoLine","Draft_FinishLine","Draft_CloseLine"]
self.appendToolbar(str(DraftTools.translate("draft","Draft creation tools")),self.cmdList)
self.appendToolbar(str(DraftTools.translate("draft","Draft modification tools")),self.modList)

View File

@@ -40,6 +40,17 @@
<file>icons/Draft_Dot.svg</file>
<file>icons/Draft_Point.svg</file>
<file>icons/Draft_Snap.svg</file>
<file>icons/Snap_Lock.svg</file>
<file>icons/Snap_Endpoint.svg</file>
<file>icons/Snap_Midpoint.svg</file>
<file>icons/Snap_Perpendicular.svg</file>
<file>icons/Snap_Grid.svg</file>
<file>icons/Snap_Intersection.svg</file>
<file>icons/Snap_Parallel.svg</file>
<file>icons/Snap_Angle.svg</file>
<file>icons/Snap_Center.svg</file>
<file>icons/Snap_Extension.svg</file>
<file>icons/Snap_Ortho.svg</file>
<file>patterns/concrete.svg</file>
<file>patterns/cross.svg</file>
<file>patterns/line.svg</file>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -0,0 +1,314 @@
<?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="svg2726"
sodipodi:version="0.32"
inkscape:version="0.48.1 r9760"
sodipodi:docname="Snap_Angle.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs2728">
<linearGradient
inkscape:collect="always"
id="linearGradient3144">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective2734" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient3850"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-7"
id="radialGradient3850-2"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-7">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-4" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-4" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-5"
id="radialGradient3850-7"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-5">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-6" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-5" />
</linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient4501"
xlink:href="#linearGradient3144-5"
inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-3"
id="radialGradient3850-70"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-3">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-2" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-3" />
</linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient4501-8"
xlink:href="#linearGradient3144-3"
inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-1"
id="radialGradient3850-5"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-1">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-5" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-1" />
</linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient4501-1"
xlink:href="#linearGradient3144-1"
inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-9"
id="radialGradient3850-3"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-9">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-9" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-12" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-2"
id="radialGradient3850-6"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-2">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-0" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-2" />
</linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient4815"
xlink:href="#linearGradient3144-2"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.8890873"
inkscape:cx="28.117126"
inkscape:cy="53.665776"
inkscape:current-layer="g4289"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1280"
inkscape:window-height="755"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:window-maximized="1" />
<metadata
id="metadata2731">
<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="g4289"
transform="matrix(0.1621282,0,0,0.1621282,6.3605986,-66.108806)">
<path
style="opacity:0.55833333;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.23936605;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 298.61617,594.85066 c -2.89233,-0.0179 -5.91874,0.36995 -8.86644,0.96375 -23.58164,4.75043 -38.79213,27.89036 -34.11652,51.8494 4.6756,23.95904 27.49677,39.63795 51.0784,34.88751 23.58164,-4.75043 38.98488,-28.08311 34.30927,-52.04215 -4.09115,-20.96415 -22.15838,-35.53285 -42.40471,-35.65851 z m -322.275827,25.25008 0,49.15092 182.533017,0 0,-49.15092 -182.533017,0 z"
id="path3162-9"
inkscape:connector-curvature="0" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.87908326,0.17708809,-0.17429861,-0.89315209,589.16511,1157.7854)"
id="g3160">
<path
sodipodi:type="arc"
style="fill:#00b286;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path3162"
sodipodi:cx="197.14285"
sodipodi:cy="655.2193"
sodipodi:rx="48.57143"
sodipodi:ry="48.57143"
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
<path
sodipodi:type="arc"
style="fill:url(#radialGradient3850);fill-opacity:1;stroke:none"
id="path3164"
sodipodi:cx="225.26402"
sodipodi:cy="672.79736"
sodipodi:rx="34.345188"
sodipodi:ry="23.991123"
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
</g>
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.57242346;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4771"
width="182.38605"
height="49.164917"
x="-20.200315"
y="588.40039" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,178 @@
<?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="svg2726"
sodipodi:version="0.32"
inkscape:version="0.48.1 r9760"
sodipodi:docname="Snap_Endpoint.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs2728">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient4274"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient4272"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<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="perspective2734" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient3850"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-7"
id="radialGradient3850-9"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-7">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-0" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-3" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.8890873"
inkscape:cx="-25.216024"
inkscape:cy="25.806874"
inkscape:current-layer="g4289"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1280"
inkscape:window-height="755"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:window-maximized="1" />
<metadata
id="metadata2731">
<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="g4289"
transform="matrix(0.1621282,0,0,0.1621282,6.3605986,-66.108806)">
<path
style="opacity:0.58333333;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000162;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 274.77511,527.16322 -82.3037,74.0155 c -6.49444,-3.46679 -13.72521,-5.60382 -21.58785,-5.78246 -26.81834,-0.6093 -49.11987,20.79059 -49.72917,47.60893 -0.15441,6.79643 1.27433,13.15184 3.66223,19.08212 l -95.410604,85.77317 20.045865,22.35885 94.639609,-85.00218 c 7.14035,4.45001 15.45812,7.11951 24.47908,7.32446 26.81834,0.60929 49.11987,-20.59785 49.72917,-47.41619 0.18193,-8.00761 -1.72979,-15.62221 -5.01147,-22.35884 l 81.5327,-73.24451 -20.04586,-22.35885 z"
id="rect2269-7"
inkscape:connector-curvature="0" />
<rect
transform="matrix(0.66859097,0.74363036,-0.74363036,0.66859097,0,0)"
y="118.8106"
x="532.9223"
height="330.00012"
width="30.000008"
id="rect2269"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000162;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" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.999742,-0.02271351,0.02271351,-0.999742,345.01763,1252.0797)"
id="g3160">
<path
sodipodi:type="arc"
style="fill:#00b286;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path3162"
sodipodi:cx="197.14285"
sodipodi:cy="655.2193"
sodipodi:rx="48.57143"
sodipodi:ry="48.57143"
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
<path
sodipodi:type="arc"
style="fill:url(#radialGradient3850);fill-opacity:1;stroke:none"
id="path3164"
sodipodi:cx="225.26402"
sodipodi:cy="672.79736"
sodipodi:rx="34.345188"
sodipodi:ry="23.991123"
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -0,0 +1,292 @@
<?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="svg2726"
sodipodi:version="0.32"
inkscape:version="0.48.1 r9760"
sodipodi:docname="Snap_Extension.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs2728">
<linearGradient
inkscape:collect="always"
id="linearGradient3144">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective2734" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient3850"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-7"
id="radialGradient3850-2"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-7">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-4" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-4" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-5"
id="radialGradient3850-7"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-5">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-6" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-5" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-3"
id="radialGradient3850-70"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-3">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-2" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-3" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-1"
id="radialGradient3850-5"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-1">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-5" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-9"
id="radialGradient3850-3"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-9">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-9" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-12" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-2"
id="radialGradient3850-6"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-2">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-0" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-2" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-4"
id="radialGradient3850-63"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-4">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-7" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-13" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.75"
inkscape:cx="49.775244"
inkscape:cy="26.529316"
inkscape:current-layer="g4289"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1280"
inkscape:window-height="755"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:window-maximized="1" />
<metadata
id="metadata2731">
<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="g4289"
transform="matrix(0.1621282,0,0,0.1621282,6.3605986,-66.108806)">
<path
style="opacity:0.5375;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:7.40155029;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 -15.944364,456.04868 0,310.71091 0.963743,0 48.379924,0 210.674327,0 c 9.59814,13.90011 26.69239,21.63302 44.13945,18.11837 23.58165,-4.75043 38.98489,-28.0831 34.30927,-52.04214 -4.67562,-23.95904 -27.68951,-39.4452 -51.27116,-34.69477 -12.11769,2.44106 -21.97717,9.66468 -28.14131,19.46762 l -209.710577,0 0,-261.55999 -49.343667,0 z"
id="rect4771-9"
inkscape:connector-curvature="0" />
<path
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:7.40155029;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 -6.149222,429.65963 0,310.71091 0.9637435,0 48.3799235,0 262.330975,0 0,-49.15092 -262.330975,0 0,-261.55999 -49.343667,0 z"
id="rect4771"
inkscape:connector-curvature="0" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.87908326,0.17708809,-0.17429861,-0.89315209,577.13431,1265.4055)"
id="g3160"
style="stroke-width:8.19354725;stroke-miterlimit:4;stroke-dasharray:none">
<path
sodipodi:type="arc"
style="fill:#00b286;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:8.19354725;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path3162"
sodipodi:cx="197.14285"
sodipodi:cy="655.2193"
sodipodi:rx="48.57143"
sodipodi:ry="48.57143"
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
<path
sodipodi:type="arc"
style="fill:url(#radialGradient3850);fill-opacity:1;stroke:none"
id="path3164"
sodipodi:cx="225.26402"
sodipodi:cy="672.79736"
sodipodi:rx="34.345188"
sodipodi:ry="23.991123"
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,164 @@
<?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="svg2726"
sodipodi:version="0.32"
inkscape:version="0.48.1 r9760"
sodipodi:docname="Snap_Intersection.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs2728">
<linearGradient
inkscape:collect="always"
id="linearGradient3144">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective2734" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient3850"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-4"
id="radialGradient3850-9"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-4">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-2" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-0" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.8890873"
inkscape:cx="28.117126"
inkscape:cy="53.665776"
inkscape:current-layer="g4289"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1280"
inkscape:window-height="755"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:window-maximized="1" />
<metadata
id="metadata2731">
<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="g4289"
transform="matrix(0.1621282,0,0,0.1621282,6.3605986,-66.108806)">
<path
style="opacity:0.50833333;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000162;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 77.372762,463.91574 c -26.313031,5.21717 -43.488613,30.75343 -38.271446,57.06645 5.217168,26.31304 30.753423,43.48862 57.066457,38.27145 8.070747,-1.60021 15.304787,-5.18879 21.264147,-10.05139 L 319.31906,677.738 338.05777,648.3057 134.79098,518.89158 c 0.83723,-5.44139 0.78094,-10.99155 -0.35176,-16.70439 -5.21717,-26.31304 -30.75343,-43.48862 -57.066458,-38.27145 z M 4.7169879,584.88594 -14.021706,614.31824 253.58646,784.53509 272.32516,755.10278 4.7169879,584.88594 z"
id="rect3942-4-9-2"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000162;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3942-4-9"
width="317.19318"
height="34.891254"
x="-617.86139"
y="-374.63855"
transform="matrix(-0.84354394,-0.53706016,0.53706016,-0.84354394,0,0)" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.98090505,0.19448714,-0.19448714,-0.98090505,408.34953,1086.0795)"
id="g3160">
<path
sodipodi:type="arc"
style="fill:#00b286;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path3162"
sodipodi:cx="197.14285"
sodipodi:cy="655.2193"
sodipodi:rx="48.57143"
sodipodi:ry="48.57143"
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
<path
sodipodi:type="arc"
style="fill:url(#radialGradient3850);fill-opacity:1;stroke:none"
id="path3164"
sodipodi:cx="225.26402"
sodipodi:cy="672.79736"
sodipodi:rx="34.345188"
sodipodi:ry="23.991123"
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
</g>
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000162;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3942-4-9-5"
width="317.19318"
height="34.891254"
x="-619.85559"
y="-500.13361"
transform="matrix(-0.84354394,-0.53706016,0.53706016,-0.84354394,0,0)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -0,0 +1,140 @@
<?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="svg2726"
sodipodi:version="0.32"
inkscape:version="0.48.1 r9760"
sodipodi:docname="Snap_Perpendicular.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs2728">
<linearGradient
inkscape:collect="always"
id="linearGradient3144">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective2734" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient3850"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.8890873"
inkscape:cx="21.852178"
inkscape:cy="16.273213"
inkscape:current-layer="g4289"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1280"
inkscape:window-height="755"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:window-maximized="1" />
<metadata
id="metadata2731">
<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="g4289"
transform="matrix(0.1621282,0,0,0.1621282,6.3605986,-66.108806)">
<path
style="opacity:0.53333297;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000162;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 161.66621,476.77814 0,205.08462 c -13.8336,5.08664 -24.81604,16.36991 -29.49055,30.45429 l -114.685478,0 0,34.88752 116.420218,0 c 7.38753,16.66398 23.74504,28.47085 43.1757,28.9123 20.17696,0.45841 37.75833,-11.5629 45.4887,-28.9123 l 110.445,0 0,-34.88752 -108.71026,0 c -4.45814,-13.46902 -14.68168,-24.31759 -27.75582,-29.6833 l 0,-205.85561 -34.88751,0 z"
id="rect3942-47"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000162;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3942"
width="315.60715"
height="34.891251"
x="-8.7467575"
y="691.4881" />
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000162;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3942-4"
width="247.41063"
height="34.891251"
x="-703.38287"
y="135.5761"
transform="matrix(0,-1,1,0,0,0)" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.999742,-0.02271351,0.02271351,-0.999742,334.26768,1366.2692)"
id="g3160">
<path
sodipodi:type="arc"
style="fill:#00b286;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path3162"
sodipodi:cx="197.14285"
sodipodi:cy="655.2193"
sodipodi:rx="48.57143"
sodipodi:ry="48.57143"
d="m 245.71428,655.2193 c 0,26.82526 -21.74617,48.57143 -48.57143,48.57143 -26.82526,0 -48.57143,-21.74617 -48.57143,-48.57143 0,-26.82526 21.74617,-48.57143 48.57143,-48.57143 26.82526,0 48.57143,21.74617 48.57143,48.57143 z" />
<path
sodipodi:type="arc"
style="fill:url(#radialGradient3850);fill-opacity:1;stroke:none"
id="path3164"
sodipodi:cx="225.26402"
sodipodi:cy="672.79736"
sodipodi:rx="34.345188"
sodipodi:ry="23.991123"
d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -520,6 +520,29 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_21">
<item>
<widget class="Gui::PrefCheckBox" name="gui::prefcheckbox_7">
<property name="toolTip">
<string>If checked, the Snap toolbar will be shown whenever you use snapping</string>
</property>
<property name="text">
<string>Show Draft Snap toolbar</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="prefEntry" stdset="0">
<cstring>showSnapBar</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Draft</cstring>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>