Add arch cutComponent feature
This commit is contained in:
committed by
Yorik van Havre
parent
76f544a352
commit
0e1a2e5444
@@ -2,8 +2,8 @@
|
||||
|
||||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011 *
|
||||
#* Yorik van Havre <yorik@uncreated.net> *
|
||||
#* Copyright (c) 2011 *
|
||||
#* Yorik van Havre <yorik@uncreated.net> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
@@ -98,7 +98,7 @@ def addComponents(objectsList,host):
|
||||
host.Tool = o
|
||||
elif Draft.getType(o) == "Axis":
|
||||
if not o in x:
|
||||
x.append(o)
|
||||
x.append(o)
|
||||
elif not o in a:
|
||||
if hasattr(o,"Shape"):
|
||||
a.append(o)
|
||||
@@ -116,7 +116,7 @@ def addComponents(objectsList,host):
|
||||
for o in objectsList:
|
||||
if not o in c:
|
||||
c.append(o)
|
||||
host.Group = c
|
||||
host.Group = c
|
||||
|
||||
def removeComponents(objectsList,host=None):
|
||||
'''removeComponents(objectsList,[hostObject]): removes the given component or
|
||||
@@ -224,7 +224,7 @@ def copyProperties(obj1,obj2):
|
||||
if prop in obj2.ViewObject.PropertiesList:
|
||||
if not prop in ["Proxy","Shape"]:
|
||||
setattr(obj2.ViewObject,prop,getattr(obj1.ViewObject,prop))
|
||||
|
||||
|
||||
def splitMesh(obj,mark=True):
|
||||
'''splitMesh(object,[mark]): splits the given mesh object into separated components.
|
||||
If mark is False, nothing else is done. If True (default), non-manifold components
|
||||
@@ -249,7 +249,7 @@ def makeFace(wires,method=2,cleanup=False):
|
||||
'''makeFace(wires): makes a face from a list of wires, finding which ones are holes'''
|
||||
#print "makeFace: start:", wires
|
||||
import Part
|
||||
|
||||
|
||||
if not isinstance(wires,list):
|
||||
if len(wires.Vertexes) < 3:
|
||||
raise
|
||||
@@ -261,7 +261,7 @@ def makeFace(wires,method=2,cleanup=False):
|
||||
return Part.Face(wires[0])
|
||||
|
||||
wires = wires[:]
|
||||
|
||||
|
||||
#print "makeFace: inner wires found"
|
||||
ext = None
|
||||
max_length = 0
|
||||
@@ -352,7 +352,7 @@ def getCutVolume(cutplane,shapes):
|
||||
p = cutplane.copy().Faces[0]
|
||||
except Part.OCCError:
|
||||
FreeCAD.Console.PrintMessage(translate("Arch","Invalid cutplane\n"))
|
||||
return None,None,None
|
||||
return None,None,None
|
||||
ce = p.CenterOfMass
|
||||
ax = p.normalAt(0,0)
|
||||
u = p.Vertexes[1].Point.sub(p.Vertexes[0].Point).normalize()
|
||||
@@ -393,6 +393,16 @@ def getCutVolume(cutplane,shapes):
|
||||
invcutvolume = cutface.extrude(cutnormal)
|
||||
return cutface,cutvolume,invcutvolume
|
||||
|
||||
def cutComponent(cutPlane, archObject):
|
||||
"""cut object from a plan"""
|
||||
cutVolume = Arch.getCutVolume(cutPlane, archObject.Object.Shape)
|
||||
cutVolume = cutVolume[2]
|
||||
if cutVolume:
|
||||
obj = App.activeDocument().addObject("Part::Feature", "CutVolume")
|
||||
obj.Shape = cutVolume
|
||||
# add substraction component to Arch object
|
||||
return Arch.removeComponents(obj,archObject.Object)
|
||||
|
||||
def getShapeFromMesh(mesh,fast=True,tolerance=0.001,flat=False,cut=True):
|
||||
import Part, MeshPart, DraftGeomUtils
|
||||
if mesh.isSolid() and (mesh.countComponents() == 1) and fast:
|
||||
@@ -409,7 +419,7 @@ def getShapeFromMesh(mesh,fast=True,tolerance=0.001,flat=False,cut=True):
|
||||
solid = solid.removeSplitter()
|
||||
return solid
|
||||
|
||||
faces = []
|
||||
faces = []
|
||||
segments = mesh.getPlanarSegments(tolerance)
|
||||
#print len(segments)
|
||||
for i in segments:
|
||||
@@ -444,7 +454,7 @@ def getShapeFromMesh(mesh,fast=True,tolerance=0.001,flat=False,cut=True):
|
||||
return se
|
||||
else:
|
||||
return solid
|
||||
|
||||
|
||||
def projectToVector(shape,vector):
|
||||
'''projectToVector(shape,vector): projects the given shape on the given
|
||||
vector'''
|
||||
@@ -473,7 +483,7 @@ def meshToShape(obj,mark=True,fast=True,tol=0.001,flat=False,cut=True):
|
||||
|
||||
name = obj.Name
|
||||
if "Mesh" in obj.PropertiesList:
|
||||
faces = []
|
||||
faces = []
|
||||
mesh = obj.Mesh
|
||||
plac = obj.Placement
|
||||
solid = getShapeFromMesh(mesh,fast,tol,flat,cut)
|
||||
@@ -605,7 +615,7 @@ def check(objectslist,includehidden=False):
|
||||
def getHost(obj,strict=True):
|
||||
"""getHost(obj,[strict]): returns the host of the current object. If strict is true (default),
|
||||
the host can only be an object of a higher level than the given one, or in other words, if a wall
|
||||
is contained in another wall which is part of a floor, the floor is returned instead of the parent wall"""
|
||||
is contained in another wall which is part of a floor, the floor is returned instead of the parent wall"""
|
||||
import Draft
|
||||
t = Draft.getType(obj)
|
||||
for par in obj.InList:
|
||||
@@ -618,7 +628,7 @@ def getHost(obj,strict=True):
|
||||
else:
|
||||
return par
|
||||
return None
|
||||
|
||||
|
||||
def pruneIncluded(objectslist):
|
||||
"""pruneIncluded(objectslist): removes from a list of Arch objects, those that are subcomponents of
|
||||
another shape-based object, leaving only the top-level shapes."""
|
||||
@@ -644,7 +654,7 @@ class _SurveyObserver:
|
||||
self.cancellable = False
|
||||
self.selection = []
|
||||
self.labels = []
|
||||
|
||||
|
||||
def addSelection(self,document, object, element, position):
|
||||
self.cancellable = False
|
||||
self.callback(True)
|
||||
@@ -788,11 +798,11 @@ def toggleIfcBrepFlag(obj):
|
||||
|
||||
|
||||
def makeCompoundFromSelected(objects=None):
|
||||
"""makeCompoundFromSelected([objects]): Creates a new compound object from the given
|
||||
"""makeCompoundFromSelected([objects]): Creates a new compound object from the given
|
||||
subobjects (faces, edges) or from the the selection if objects is None"""
|
||||
import FreeCADGui,Part
|
||||
so = []
|
||||
if not objects:
|
||||
if not objects:
|
||||
objects = FreeCADGui.Selection.getSelectionEx()
|
||||
if not isinstance(objects,list):
|
||||
objects = [objects]
|
||||
@@ -801,10 +811,10 @@ def makeCompoundFromSelected(objects=None):
|
||||
if so:
|
||||
c = Part.makeCompound(so)
|
||||
Part.show(c)
|
||||
|
||||
|
||||
|
||||
def cleanArchSplitter(objets=None):
|
||||
"""cleanArchSplitter([objects]): removes the splitters from the base shapes
|
||||
"""cleanArchSplitter([objects]): removes the splitters from the base shapes
|
||||
of the given Arch objects or selected Arch objects if objects is None"""
|
||||
import FreeCAD,FreeCADGui
|
||||
if not objects:
|
||||
@@ -854,7 +864,7 @@ def rebuildArchShape(objects=None):
|
||||
solid.sewShape()
|
||||
solid = Part.Solid(solid)
|
||||
#print "rebuilt solid: isValid is ",solid.isValid()
|
||||
if solid.isValid():
|
||||
if solid.isValid():
|
||||
print "Success"
|
||||
obj.Base.Shape = solid
|
||||
success = True
|
||||
@@ -865,7 +875,6 @@ def rebuildArchShape(objects=None):
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
# command definitions ###############################################
|
||||
|
||||
class _CommandAdd:
|
||||
"the Arch Add command definition"
|
||||
def GetResources(self):
|
||||
@@ -875,7 +884,7 @@ class _CommandAdd:
|
||||
|
||||
def IsActive(self):
|
||||
return len(FreeCADGui.Selection.getSelection()) > 1
|
||||
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if Draft.getType(sel[-1]) == "Space":
|
||||
@@ -896,8 +905,8 @@ class _CommandAdd:
|
||||
FreeCADGui.doCommand("Arch.addComponents("+ss+",FreeCAD.ActiveDocument."+host.Name+")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
|
||||
|
||||
class _CommandRemove:
|
||||
"the Arch Add command definition"
|
||||
def GetResources(self):
|
||||
@@ -907,7 +916,7 @@ class _CommandRemove:
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if Draft.getType(sel[-1]) == "Space":
|
||||
@@ -933,6 +942,26 @@ class _CommandRemove:
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _CommandCutPlane:
|
||||
"the Arch CutPlane command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_CutPlane',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CutPlane","Cut object"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_CutPlane","Cut the object with plane")}
|
||||
|
||||
def IsActive(self):
|
||||
return len(FreeCADGui.Selection.getSelection()) > 1
|
||||
|
||||
def Activated(self):
|
||||
face = FreeCADGui.Selection.getSelectionEx()[1].SubObjects[0]
|
||||
archObject = FreeCADGui.Selection.getSelectionEx()[0]
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Cutting")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.cutComponent(face,archObject")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _CommandSplitMesh:
|
||||
"the Arch SplitMesh command definition"
|
||||
def GetResources(self):
|
||||
@@ -942,7 +971,7 @@ class _CommandSplitMesh:
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
|
||||
def Activated(self):
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
@@ -957,7 +986,7 @@ class _CommandSplitMesh:
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
|
||||
class _CommandMeshToShape:
|
||||
"the Arch MeshToShape command definition"
|
||||
def GetResources(self):
|
||||
@@ -967,7 +996,7 @@ class _CommandMeshToShape:
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
|
||||
def Activated(self):
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
f = FreeCADGui.Selection.getSelection()[0]
|
||||
@@ -1002,7 +1031,7 @@ class _CommandSelectNonSolidMeshes:
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
|
||||
def Activated(self):
|
||||
msel = []
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
@@ -1030,7 +1059,7 @@ class _CommandRemoveShape:
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
removeShape(sel)
|
||||
@@ -1044,7 +1073,7 @@ class _CommandCloseHoles:
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
|
||||
def Activated(self):
|
||||
for o in FreeCADGui.Selection.getSelection():
|
||||
s = closeHole(o.Shape)
|
||||
@@ -1060,7 +1089,7 @@ class _CommandCheck:
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
|
||||
def Activated(self):
|
||||
result = check(FreeCADGui.Selection.getSelection())
|
||||
if not result:
|
||||
@@ -1095,7 +1124,7 @@ class _CommandSurvey:
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
|
||||
def Activated(self):
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommandGui("Arch.survey()")
|
||||
@@ -1110,7 +1139,7 @@ class _ToggleIfcBrepFlag:
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
|
||||
def Activated(self):
|
||||
for o in FreeCADGui.Selection.getSelection():
|
||||
toggleIfcBrepFlag(o)
|
||||
|
||||
@@ -74,7 +74,7 @@ class ArchWorkbench(Workbench):
|
||||
"Arch_Window","Arch_Roof","Arch_Axis",
|
||||
"Arch_SectionPlane","Arch_Space","Arch_Stairs",
|
||||
"Arch_Panel","Arch_Equipment",
|
||||
"Arch_Frame","Arch_Add","Arch_Remove","Arch_Survey"]
|
||||
"Arch_Frame","Arch_CutPlane","Arch_Add","Arch_Remove","Arch_Survey"]
|
||||
self.utilities = ["Arch_SplitMesh","Arch_MeshToShape",
|
||||
"Arch_SelectNonSolidMeshes","Arch_RemoveShape",
|
||||
"Arch_CloseHoles","Arch_MergeWalls","Arch_Check",
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
<file>icons/Arch_StructuralSystem.svg</file>
|
||||
<file>icons/Arch_StructuralSystem_Tree.svg</file>
|
||||
<file>icons/Arch_ToggleIfcBrepFlag.svg</file>
|
||||
<file>icons/Arch_CutPlane.svg</file>
|
||||
<file>ui/archprefs-base.ui</file>
|
||||
<file>ui/archprefs-defaults.ui</file>
|
||||
<file>ui/archprefs-import.ui</file>
|
||||
|
||||
402
src/Mod/Arch/Resources/icons/Arch_CutPlane.svg
Normal file
402
src/Mod/Arch/Resources/icons/Arch_CutPlane.svg
Normal file
@@ -0,0 +1,402 @@
|
||||
<?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="svg2860"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="Arch_CutPlane.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1">
|
||||
<defs
|
||||
id="defs2862">
|
||||
<linearGradient
|
||||
id="linearGradient4072">
|
||||
<stop
|
||||
id="stop4074"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4076"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3864">
|
||||
<stop
|
||||
style="stop-color:#ff0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3866" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3868" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="-0.8291179 : 29.156156 : 1"
|
||||
inkscape:vp_y="-86.925828 : 996.21479 : 0"
|
||||
inkscape:vp_z="62.928628 : 34.719409 : 1"
|
||||
inkscape:persp3d-origin="31.976964 : 21.311491 : 1"
|
||||
id="perspective3052" />
|
||||
<linearGradient
|
||||
id="linearGradient3377">
|
||||
<stop
|
||||
id="stop3379"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="-78.066988 : 45.593954 : 1"
|
||||
inkscape:vp_y="0 : 1346.2145 : 0"
|
||||
inkscape:vp_z="87.007387 : 62.757339 : 1"
|
||||
inkscape:persp3d-origin="41.942005 : 25.964636 : 1"
|
||||
id="perspective2868" />
|
||||
<inkscape:perspective
|
||||
id="perspective2868-3"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient3377-7">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3379-7" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3381-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient4082"
|
||||
x1="2.4857161"
|
||||
y1="39.259701"
|
||||
x2="46.087074"
|
||||
y2="39.259701"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient4084"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2.4857161"
|
||||
y1="39.259701"
|
||||
x2="46.087074"
|
||||
y2="39.259701"
|
||||
gradientTransform="matrix(1.3367742,0,0,1.3462145,-0.83476916,-19.403123)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient4086"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2.4857161"
|
||||
y1="39.259701"
|
||||
x2="46.087074"
|
||||
y2="39.259701"
|
||||
gradientTransform="matrix(1.3367742,0,0,1.3462145,-0.83476916,-19.403123)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient4088"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2.4857161"
|
||||
y1="39.259701"
|
||||
x2="46.087074"
|
||||
y2="39.259701"
|
||||
gradientTransform="matrix(1.3367742,0,0,1.3462145,-0.83476916,-19.403123)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient4090"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2.4857161"
|
||||
y1="39.259701"
|
||||
x2="46.087074"
|
||||
y2="39.259701"
|
||||
gradientTransform="matrix(1.3367742,0,0,1.3462145,-0.83476916,-19.403123)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient4092"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2.4857161"
|
||||
y1="39.259701"
|
||||
x2="46.087074"
|
||||
y2="39.259701"
|
||||
gradientTransform="matrix(1.3367742,0,0,1.3462145,-0.83476916,-19.403123)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient4094"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2.4857161"
|
||||
y1="39.259701"
|
||||
x2="46.087074"
|
||||
y2="39.259701"
|
||||
gradientTransform="matrix(1.3367742,0,0,1.3462145,-0.83476916,-19.403123)" />
|
||||
<linearGradient
|
||||
id="linearGradient3377-73">
|
||||
<stop
|
||||
id="stop3379-3"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381-96"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="-77.89941 : 45.549744 : 1"
|
||||
inkscape:vp_y="0 : 1346.2145 : 0"
|
||||
inkscape:vp_z="87.174967 : 62.713129 : 1"
|
||||
inkscape:persp3d-origin="42.109583 : 25.920426 : 1"
|
||||
id="perspective2868-0" />
|
||||
<linearGradient
|
||||
id="linearGradient4112">
|
||||
<stop
|
||||
id="stop4114"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4116"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4119">
|
||||
<stop
|
||||
id="stop4121"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4123"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4126">
|
||||
<stop
|
||||
id="stop4128"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4130"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4133">
|
||||
<stop
|
||||
id="stop4135"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4137"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4140">
|
||||
<stop
|
||||
id="stop4142"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4144"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377-73"
|
||||
id="linearGradient4094-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2.4857161"
|
||||
y1="39.259701"
|
||||
x2="46.087074"
|
||||
y2="39.259701"
|
||||
gradientTransform="matrix(1.3367742,0,0,1.3462145,-0.83476916,-19.403123)" />
|
||||
<linearGradient
|
||||
id="linearGradient4147">
|
||||
<stop
|
||||
id="stop4149"
|
||||
offset="0"
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4151"
|
||||
offset="1"
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="8.761495"
|
||||
inkscape:cx="25.868709"
|
||||
inkscape:cy="30.616566"
|
||||
inkscape:current-layer="svg2860"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1056"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true" />
|
||||
<metadata
|
||||
id="metadata2865">
|
||||
<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="http://creativecommons.org/licenses/by/3.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by/3.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<rect
|
||||
style="fill:#ff0000;fill-opacity:0.62995594;stroke:#ff0000;stroke-width:2.16011143;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="rect3862"
|
||||
width="40.624489"
|
||||
height="37.127754"
|
||||
x="20.402897"
|
||||
y="5.5325351"
|
||||
ry="0"
|
||||
transform="matrix(0.99784527,0.06561104,0.01760731,0.99984498,0,0)" />
|
||||
<g
|
||||
sodipodi:type="inkscape:box3d"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:0.90308370999999998;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-linejoin:round"
|
||||
id="g3054-5"
|
||||
inkscape:perspectiveID="#perspective2868-0"
|
||||
inkscape:corner0="0.10769976 : 0.017035405 : 0 : 1"
|
||||
inkscape:corner7="-0.062551355 : 0.0031357113 : 0.34173353 : 1">
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3064-2"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:0.90308370999999998;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-linejoin:round"
|
||||
inkscape:box3dsidetype="13"
|
||||
d="m 30.441313,32.360143 19.675882,2.52619 9.899984,-8.976097 -16.199747,-0.876252 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3056-6"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:0.90308370999999998;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-linejoin:round"
|
||||
inkscape:box3dsidetype="6"
|
||||
d="m 30.441313,15.467506 0,16.892637 13.376119,-7.326159 0,-12.909852 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3066-4"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:0.90308370999999998;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-linejoin:round"
|
||||
inkscape:box3dsidetype="11"
|
||||
d="m 43.817432,12.124132 16.199747,-0.841968 0,14.628072 -16.199747,-0.876252 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3058-9"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:0.90308370999999998;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-linejoin:round"
|
||||
inkscape:box3dsidetype="5"
|
||||
d="m 30.441313,15.467506 19.675882,-0.5417 9.899984,-3.643642 -16.199747,0.841968 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3062-6"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:0.90308370999999998;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-linejoin:round"
|
||||
inkscape:box3dsidetype="14"
|
||||
d="m 50.117195,14.925806 0,19.960527 9.899984,-8.976097 0,-14.628072 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3060-0"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:0.90308370999999998;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-linejoin:round"
|
||||
inkscape:box3dsidetype="3"
|
||||
d="m 30.441313,15.467506 19.675882,-0.5417 0,19.960527 -19.675882,-2.52619 z" />
|
||||
</g>
|
||||
<g
|
||||
sodipodi:type="inkscape:box3d"
|
||||
style="fill:url(#linearGradient4082);fill-opacity:1;stroke:#080851;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.98678415;stroke-dasharray:none"
|
||||
id="g3054"
|
||||
inkscape:perspectiveID="#perspective2868"
|
||||
inkscape:corner0="0.47751662 : 0.0093568 : 0 : 1"
|
||||
inkscape:corner7="0.13117621 : -0.016353429 : 0.65977054 : 1">
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3064"
|
||||
style="fill:url(#linearGradient4084);fill-opacity:1;fill-rule:evenodd;stroke:#080851;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.98678415;stroke-dasharray:none"
|
||||
inkscape:box3dsidetype="13"
|
||||
d="M 3.1564591,46.591544 28.02523,55.221302 49.753788,35.336 29.040848,32.592556 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3056"
|
||||
style="fill:url(#linearGradient4086);fill-opacity:1;fill-rule:evenodd;stroke:#080851;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.98678415;stroke-dasharray:none"
|
||||
inkscape:box3dsidetype="6"
|
||||
d="m 3.1564591,23.1661 0,23.425444 25.8843889,-13.998988 0,-16.194119 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3066"
|
||||
style="fill:url(#linearGradient4088);fill-opacity:1;fill-rule:evenodd;stroke:#080851;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.98678415;stroke-dasharray:none"
|
||||
inkscape:box3dsidetype="11"
|
||||
d="m 29.040848,16.398437 20.71294,-0.38824 0,19.325803 -20.71294,-2.743444 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3058"
|
||||
style="fill:url(#linearGradient4090);fill-opacity:1;fill-rule:evenodd;stroke:#080851;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.98678415;stroke-dasharray:none"
|
||||
inkscape:box3dsidetype="5"
|
||||
d="m 3.1564591,23.1661 24.8687709,1.45742 21.728558,-8.613323 -20.71294,0.38824 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3062"
|
||||
style="fill:url(#linearGradient4092);fill-opacity:1;fill-rule:evenodd;stroke:#080851;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.98678415;stroke-dasharray:none"
|
||||
inkscape:box3dsidetype="14"
|
||||
d="m 28.02523,24.62352 0,30.597782 21.728558,-19.885302 0,-19.325803 z" />
|
||||
<path
|
||||
sodipodi:type="inkscape:box3dside"
|
||||
id="path3060"
|
||||
style="fill:url(#linearGradient4094);fill-opacity:1;fill-rule:evenodd;stroke:#080851;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.98678415;stroke-dasharray:none"
|
||||
inkscape:box3dsidetype="3"
|
||||
d="m 3.1564591,23.1661 24.8687709,1.45742 0,30.597782 -24.8687709,-8.629758 z" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
Reference in New Issue
Block a user