Merge branch 'master' of ssh://free-cad.git.sourceforge.net/gitroot/free-cad/free-cad
This commit is contained in:
commit
b27a3a11cc
|
@ -37,7 +37,7 @@ PROPERTY_SOURCE(App::DocumentObjectGroup, App::DocumentObject)
|
|||
|
||||
DocumentObjectGroup::DocumentObjectGroup()
|
||||
{
|
||||
ADD_PROPERTY_TYPE(Group,(0),"Base",(App::PropertyType)(Prop_ReadOnly|Prop_Output),"List of referenced objects");
|
||||
ADD_PROPERTY_TYPE(Group,(0),"Base",(App::PropertyType)(Prop_Output),"List of referenced objects");
|
||||
}
|
||||
|
||||
DocumentObjectGroup::~DocumentObjectGroup()
|
||||
|
@ -179,13 +179,13 @@ PyObject *DocumentObjectGroup::getPyObject()
|
|||
return Py::new_reference_to(PythonObject);
|
||||
}
|
||||
|
||||
// Python Sketcher feature ---------------------------------------------------------
|
||||
// Python feature ---------------------------------------------------------
|
||||
|
||||
namespace App {
|
||||
/// @cond DOXERR
|
||||
PROPERTY_SOURCE_TEMPLATE(App::DocumentObjectGroupPython, App::DocumentObjectGroup)
|
||||
template<> const char* App::DocumentObjectGroupPython::getViewProviderName(void) const {
|
||||
return "Gui::ViewProviderDocumentObjectGroup";
|
||||
return "Gui::ViewProviderDocumentObjectGroupPython";
|
||||
}
|
||||
/// @endcond
|
||||
|
||||
|
|
|
@ -1420,6 +1420,7 @@ void Application::initTypes(void)
|
|||
Gui::ViewProviderDocumentObject ::init();
|
||||
Gui::ViewProviderFeature ::init();
|
||||
Gui::ViewProviderDocumentObjectGroup ::init();
|
||||
Gui::ViewProviderDocumentObjectGroupPython ::init();
|
||||
Gui::ViewProviderGeometryObject ::init();
|
||||
Gui::ViewProviderInventorObject ::init();
|
||||
Gui::ViewProviderVRMLObject ::init();
|
||||
|
|
|
@ -221,3 +221,15 @@ QIcon ViewProviderDocumentObjectGroup::getIcon() const
|
|||
QIcon::Normal, QIcon::On);
|
||||
return groupIcon;
|
||||
}
|
||||
|
||||
|
||||
// Python feature -----------------------------------------------------------------------
|
||||
|
||||
namespace Gui {
|
||||
/// @cond DOXERR
|
||||
PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderDocumentObjectGroupPython, Gui::ViewProviderDocumentObjectGroup)
|
||||
/// @endcond
|
||||
|
||||
// explicit template instantiation
|
||||
template class GuiExport ViewProviderPythonFeatureT<ViewProviderDocumentObjectGroup>;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
|
||||
#include "ViewProviderDocumentObject.h"
|
||||
#include "ViewProviderPythonFeature.h"
|
||||
|
||||
namespace Gui {
|
||||
|
||||
|
@ -63,6 +64,7 @@ private:
|
|||
std::vector<ViewProvider*> nodes;
|
||||
};
|
||||
|
||||
typedef ViewProviderPythonFeatureT<ViewProviderDocumentObjectGroup> ViewProviderDocumentObjectGroupPython;
|
||||
|
||||
} // namespace Gui
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import ArchCell,FreeCAD,FreeCADGui,Draft,ArchCommands
|
||||
import FreeCAD,FreeCADGui,Draft,ArchCommands
|
||||
from PyQt4 import QtCore
|
||||
|
||||
__title__="FreeCAD Building"
|
||||
|
@ -31,14 +31,11 @@ __url__ = "http://free-cad.sourceforge.net"
|
|||
def makeBuilding(objectslist=None,join=False,name="Building"):
|
||||
'''makeBuilding(objectslist,[joinmode]): creates a building including the
|
||||
objects from the given list. If joinmode is True, components will be joined.'''
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name)
|
||||
obj = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroupPython",name)
|
||||
_Building(obj)
|
||||
_ViewProviderBuilding(obj.ViewObject)
|
||||
if objectslist:
|
||||
obj.Components = objectslist
|
||||
for comp in obj.Components:
|
||||
comp.ViewObject.hide()
|
||||
obj.JoinMode = join
|
||||
obj.Group = objectslist
|
||||
return obj
|
||||
|
||||
class _CommandBuilding:
|
||||
|
@ -66,18 +63,32 @@ class _CommandBuilding:
|
|||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
class _Building(ArchCell._Cell):
|
||||
class _Building:
|
||||
"The Building object"
|
||||
def __init__(self,obj):
|
||||
ArchCell._Cell.__init__(self,obj)
|
||||
self.Type = "Building"
|
||||
obj.Proxy = self
|
||||
|
||||
def execute(self,obj):
|
||||
pass
|
||||
|
||||
class _ViewProviderBuilding(ArchCell._ViewProviderCell):
|
||||
def onChanged(self,obj,prop):
|
||||
pass
|
||||
|
||||
class _ViewProviderBuilding:
|
||||
"A View Provider for the Building object"
|
||||
def __init__(self,vobj):
|
||||
ArchCell._ViewProviderCell.__init__(self,vobj)
|
||||
vobj.Proxy = self
|
||||
|
||||
def getIcon(self):
|
||||
return ":/icons/Arch_Building_Tree.svg"
|
||||
|
||||
def attach(self,vobj):
|
||||
self.Object = vobj.Object
|
||||
return
|
||||
|
||||
def claimChildren(self):
|
||||
return self.Object.Group
|
||||
|
||||
|
||||
FreeCADGui.addCommand('Arch_Building',_CommandBuilding())
|
||||
|
|
|
@ -39,12 +39,18 @@ def addComponents(objectsList,host):
|
|||
if not isinstance(objectsList,list):
|
||||
objectsList = [objectsList]
|
||||
tp = Draft.getType(host)
|
||||
if tp in ["Cell","Floor","Building","Site"]:
|
||||
if tp in ["Cell"]:
|
||||
c = host.Components
|
||||
for o in objectsList:
|
||||
if not o in c:
|
||||
c.append(o)
|
||||
host.Components = c
|
||||
elif tp in ["Floor","Building","Site"]:
|
||||
c = host.Group
|
||||
for o in objectsList:
|
||||
if not o in c:
|
||||
c.append(o)
|
||||
host.Group = c
|
||||
elif tp in ["Wall","Structure"]:
|
||||
a = host.Additions
|
||||
for o in objectsList:
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import ArchCell,FreeCAD,FreeCADGui,Draft,ArchCommands
|
||||
import FreeCAD,FreeCADGui,Draft,ArchCommands
|
||||
from PyQt4 import QtCore
|
||||
|
||||
__title__="FreeCAD Arch Floor"
|
||||
|
@ -32,14 +32,11 @@ def makeFloor(objectslist=None,join=True,name="Floor"):
|
|||
'''makeFloor(objectslist,[joinmode]): creates a floor including the
|
||||
objects from the given list. If joinmode is False, components will
|
||||
not be joined.'''
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name)
|
||||
obj = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroupPython",name)
|
||||
_Floor(obj)
|
||||
_ViewProviderFloor(obj.ViewObject)
|
||||
if objectslist:
|
||||
obj.Components = objectslist
|
||||
for comp in obj.Components:
|
||||
comp.ViewObject.hide()
|
||||
obj.JoinMode = join
|
||||
obj.Group = objectslist
|
||||
return obj
|
||||
|
||||
class _CommandFloor:
|
||||
|
@ -67,20 +64,34 @@ class _CommandFloor:
|
|||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
class _Floor(ArchCell._Cell):
|
||||
class _Floor:
|
||||
"The Cell object"
|
||||
def __init__(self,obj):
|
||||
ArchCell._Cell.__init__(self,obj)
|
||||
obj.addProperty("App::PropertyLength","Height","Base",
|
||||
"The height of this floor")
|
||||
self.Type = "Floor"
|
||||
obj.Proxy = self
|
||||
|
||||
def execute(self,obj):
|
||||
pass
|
||||
|
||||
class _ViewProviderFloor(ArchCell._ViewProviderCell):
|
||||
def onChanged(self,obj,prop):
|
||||
pass
|
||||
|
||||
|
||||
class _ViewProviderFloor:
|
||||
"A View Provider for the Cell object"
|
||||
def __init__(self,vobj):
|
||||
ArchCell._ViewProviderCell.__init__(self,vobj)
|
||||
vobj.Proxy = self
|
||||
|
||||
def getIcon(self):
|
||||
return ":/icons/Arch_Floor_Tree.svg"
|
||||
|
||||
def attach(self,vobj):
|
||||
self.Object = vobj.Object
|
||||
return
|
||||
|
||||
def claimChildren(self):
|
||||
return self.Object.Group
|
||||
|
||||
FreeCADGui.addCommand('Arch_Floor',_CommandFloor())
|
||||
|
|
|
@ -157,9 +157,11 @@ class _ViewProviderSectionPlane(ArchComponent.ViewProviderComponent):
|
|||
class _ArchDrawingView:
|
||||
def __init__(self, obj):
|
||||
obj.addProperty("App::PropertyLink","Source","Base","The linked object")
|
||||
obj.addProperty("App::PropertyEnumeration","RenderingMode","Base","The rendering mode to use")
|
||||
obj.addProperty("App::PropertyEnumeration","RenderingMode","Drawing View","The rendering mode to use")
|
||||
obj.addProperty("App::PropertyFloat","LineWidth","Drawing View","The line width of the rendered objects")
|
||||
obj.RenderingMode = ["Solid","Wireframe"]
|
||||
obj.RenderingMode = "Solid"
|
||||
obj.LineWidth = 0.35
|
||||
obj.Proxy = self
|
||||
self.Type = "DrawingView"
|
||||
|
||||
|
@ -179,28 +181,35 @@ class _ArchDrawingView:
|
|||
if obj.Source.Objects:
|
||||
svg = ''
|
||||
cp = ArchCommands.getCutVolume(obj.Source.Objects,obj.Source.Placement)
|
||||
print "cp:",cp
|
||||
sections = []
|
||||
self.sections = []
|
||||
if cp:
|
||||
cutvolume = cp[0].extrude(cp[1])
|
||||
shapes = []
|
||||
colors = []
|
||||
for o in obj.Source.Objects:
|
||||
color = o.ViewObject.DiffuseColor[0]
|
||||
print "adding ",o.Name," with color ",color
|
||||
if cp:
|
||||
shapes.append(o.Shape.cut(cutvolume))
|
||||
for s in o.Shape.Solids:
|
||||
shapes.append(s.cut(cutvolume))
|
||||
colors.append(color)
|
||||
sec = o.Shape.section(cp[0])
|
||||
if sec.Edges:
|
||||
sec = Part.Wire(fcgeo.sortEdges(sec.Edges))
|
||||
sec = Part.Face(sec)
|
||||
sections.append(sec)
|
||||
wires = fcgeo.findWires(sec.Edges)
|
||||
for w in wires:
|
||||
sec = Part.Wire(fcgeo.sortEdges(w.Edges))
|
||||
sec = Part.Face(sec)
|
||||
self.sections.append(sec)
|
||||
else:
|
||||
shapes.append(o.Shape)
|
||||
colors.append(color)
|
||||
linewidth = obj.LineWidth/obj.Scale
|
||||
if obj.RenderingMode == "Solid":
|
||||
svg += self.renderVRM(shapes,obj.Source.Placement)
|
||||
svg += self.renderVRM(shapes,obj.Source.Placement,colors,linewidth)
|
||||
else:
|
||||
svg += self.renderOCC(shapes,obj.Source.Proxy.getNormal(obj.Source))
|
||||
print "sections:",sections
|
||||
for s in sections:
|
||||
svg += self.renderSection(s,obj.Source.Placement)
|
||||
svg += self.renderOCC(shapes,obj.Source.Proxy.getNormal(obj.Source),linewidth)
|
||||
for s in self.sections:
|
||||
svg += self.renderSection(s,obj.Source.Placement,linewidth*2)
|
||||
result = ''
|
||||
result += '<g id="' + obj.Name + '"'
|
||||
result += ' transform="'
|
||||
|
@ -210,11 +219,11 @@ class _ArchDrawingView:
|
|||
result += '">\n'
|
||||
result += svg
|
||||
result += '</g>\n'
|
||||
print "complete node:",result
|
||||
#print "complete node:",result
|
||||
return result
|
||||
return ''
|
||||
|
||||
def renderOCC(self,shapes,direction):
|
||||
def renderOCC(self,shapes,direction,linewidth):
|
||||
"renders an SVG fragment with the OCC method"
|
||||
shapes = shapes[:]
|
||||
if shapes:
|
||||
|
@ -223,21 +232,25 @@ class _ArchDrawingView:
|
|||
base = base.fuse(sh)
|
||||
result = Drawing.projectToSVG(base,fcvec.neg(direction))
|
||||
if result:
|
||||
result = result.replace('stroke-width="0.35"','stroke-width="0.01 px"')
|
||||
result = result.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"')
|
||||
return result
|
||||
return ''
|
||||
|
||||
def renderVRM(self,shapes,placement):
|
||||
def renderVRM(self,shapes,placement,colors,linewidth):
|
||||
"renders an SVG fragment with the ArchVRM method"
|
||||
import ArchVRM
|
||||
render = ArchVRM.Renderer()
|
||||
render.setWorkingPlane(FreeCAD.Placement(placement))
|
||||
for s in shapes:
|
||||
render.add(s)
|
||||
svg = render.getSVG()
|
||||
for i in range(len(shapes)):
|
||||
if colors:
|
||||
render.add(shapes[i],colors[i])
|
||||
else:
|
||||
render.add(shapes[i])
|
||||
svg = render.getSVG(linewidth=linewidth)
|
||||
print render.info()
|
||||
return svg
|
||||
|
||||
def renderSection(self,shape,placement):
|
||||
def renderSection(self,shape,placement,linewidth):
|
||||
"renders a plane parallel to the section plane"
|
||||
placement = FreeCAD.Placement(placement)
|
||||
u = placement.Rotation.multVec(FreeCAD.Vector(1,0,0))
|
||||
|
@ -262,8 +275,8 @@ class _ArchDrawingView:
|
|||
svg += 'z '
|
||||
svg += '" '
|
||||
svg += 'stroke="#000000" '
|
||||
svg += 'stroke-width="0.02 px" '
|
||||
svg += 'style="stroke-width:0.01;'
|
||||
svg += 'stroke-width="' + str(linewidth) + 'px" '
|
||||
svg += 'style="stroke-width:' + str(linewidth) + ';'
|
||||
svg += 'stroke-miterlimit:1;'
|
||||
svg += 'stroke-linejoin:round;'
|
||||
svg += 'stroke-dasharray:none;'
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import ArchCell,FreeCAD,FreeCADGui,Draft,ArchCommands
|
||||
import FreeCAD,FreeCADGui,Draft,ArchCommands
|
||||
from PyQt4 import QtCore
|
||||
|
||||
__title__="FreeCAD Site"
|
||||
|
@ -31,12 +31,11 @@ __url__ = "http://free-cad.sourceforge.net"
|
|||
def makeSite(objectslist=None,name="Site"):
|
||||
'''makeBuilding(objectslist): creates a site including the
|
||||
objects from the given list.'''
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name)
|
||||
obj = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroupPython",name)
|
||||
_Site(obj)
|
||||
_ViewProviderSite(obj.ViewObject)
|
||||
if objectslist:
|
||||
obj.Components = objectslist
|
||||
obj.JoinMode = False
|
||||
obj.Group = objectslist
|
||||
return obj
|
||||
|
||||
class _CommandSite:
|
||||
|
@ -64,11 +63,11 @@ class _CommandSite:
|
|||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
class _Site(ArchCell._Cell):
|
||||
class _Site:
|
||||
"The Site object"
|
||||
def __init__(self,obj):
|
||||
ArchCell._Cell.__init__(self,obj)
|
||||
self.Type = "Site"
|
||||
obj.Proxy = self
|
||||
|
||||
def execute(self,obj):
|
||||
pass
|
||||
|
@ -76,12 +75,19 @@ class _Site(ArchCell._Cell):
|
|||
def onChanged(self,obj,prop):
|
||||
pass
|
||||
|
||||
class _ViewProviderSite(ArchCell._ViewProviderCell):
|
||||
class _ViewProviderSite:
|
||||
"A View Provider for the Site object"
|
||||
def __init__(self,vobj):
|
||||
ArchCell._ViewProviderCell.__init__(self,vobj)
|
||||
vobj.Proxy = self
|
||||
|
||||
def getIcon(self):
|
||||
return ":/icons/Arch_Site_Tree.svg"
|
||||
|
||||
def attach(self,vobj):
|
||||
self.Object = vobj.Object
|
||||
return
|
||||
|
||||
def claimChildren(self):
|
||||
return self.Object.Group
|
||||
|
||||
FreeCADGui.addCommand('Arch_Site',_CommandSite())
|
||||
|
|
|
@ -44,8 +44,10 @@ class Renderer:
|
|||
p.buildDummy()
|
||||
"""
|
||||
|
||||
self.defaultFill = (0.9,0.9,0.9,1.0) # the default fill color
|
||||
self.wp = wp
|
||||
self.faces = []
|
||||
self.fills = []
|
||||
self.oriented = False
|
||||
self.trimmed = False
|
||||
self.sorted = False
|
||||
|
@ -65,14 +67,39 @@ class Renderer:
|
|||
self.wp = wp
|
||||
if DEBUG: print "Renderer set on " + str(self.wp)
|
||||
|
||||
def add(self,faces):
|
||||
"add faces, shape or object to this renderer"
|
||||
def add(self,faces,colors=None):
|
||||
"add faces, shape or object to this renderer, optionally with face colors"
|
||||
|
||||
def setcolors(colors,n):
|
||||
if colors:
|
||||
if isinstance(colors,tuple) and len(colors) == 4:
|
||||
for i in range(n):
|
||||
self.fills.append(colors)
|
||||
elif len(colors) == n:
|
||||
self.fills.extend(colors)
|
||||
else:
|
||||
c = []
|
||||
for i in range(n):
|
||||
c.append(colors[0])
|
||||
self.fills.extend(c)
|
||||
else:
|
||||
c = []
|
||||
for i in range(n):
|
||||
c.append(self.defaultFill)
|
||||
self.fills.extend(c)
|
||||
|
||||
if isinstance(faces,list):
|
||||
f = faces
|
||||
setcolors(colors,len(f))
|
||||
elif hasattr(faces,"Faces"):
|
||||
f = faces.Faces
|
||||
setcolors(colors,len(f))
|
||||
elif hasattr(faces,"Shape"):
|
||||
f = faces.Shape.Faces
|
||||
if hasattr(faces,"ViewObject") and not colors:
|
||||
colors = faces.ViewObject.DiffuseColor
|
||||
setcolors(colors,len(f))
|
||||
|
||||
if DEBUG: print "adding ", len(f), " faces"
|
||||
self.faces.extend(f)
|
||||
self.oriented = False
|
||||
|
@ -82,6 +109,7 @@ class Renderer:
|
|||
def clean(self):
|
||||
"removes all faces from this renderer"
|
||||
self.faces = []
|
||||
self.fills = []
|
||||
self.oriented = False
|
||||
self.trimmed = False
|
||||
self.sorted = False
|
||||
|
@ -96,7 +124,8 @@ class Renderer:
|
|||
for i in range(len(self.faces)):
|
||||
r += " face " + str(i) + " : center " + str(self.faces[i].CenterOfMass)
|
||||
r += " : normal " + str(self.faces[i].normalAt(0,0))
|
||||
r += ", " + str(len(self.faces[i].Vertexes)) + " verts\n"
|
||||
r += ", " + str(len(self.faces[i].Vertexes)) + " verts"
|
||||
r += ", color: " + self.getFill(self.fills[i]) + "\n"
|
||||
return r
|
||||
|
||||
def addLabels(self):
|
||||
|
@ -128,11 +157,14 @@ class Renderer:
|
|||
if not self.faces:
|
||||
return
|
||||
faces = []
|
||||
for f in (self.faces):
|
||||
if self.isVisible(f):
|
||||
faces.append(f)
|
||||
fills = []
|
||||
for i in range(len(self.faces)):
|
||||
if self.isVisible(self.faces[i]):
|
||||
faces.append(self.faces[i])
|
||||
fills.append(self.fills[i])
|
||||
if DEBUG: print len(self.faces)-len(faces) , " faces removed, ", len(faces), " faces retained"
|
||||
self.faces = faces
|
||||
self.fills = fills
|
||||
self.trimmed = True
|
||||
|
||||
def projectFace(self,face):
|
||||
|
@ -324,11 +356,13 @@ class Renderer:
|
|||
faces = self.faces[:]
|
||||
if DEBUG: print "sorting ",len(self.faces)," faces"
|
||||
sfaces = []
|
||||
sfills = []
|
||||
loopcount = 0
|
||||
notfoundstack = 0
|
||||
while faces:
|
||||
if DEBUG: print "loop ", loopcount
|
||||
f1 = faces[0]
|
||||
fi1 = self.fills[self.faces.index(f1)]
|
||||
if sfaces and (notfoundstack < len(faces)):
|
||||
if DEBUG: print "using ordered stack, notfound = ",notfoundstack
|
||||
p = self.findPosition(f1,sfaces)
|
||||
|
@ -341,26 +375,32 @@ class Renderer:
|
|||
# position found, we insert it
|
||||
faces.remove(f1)
|
||||
sfaces.insert(p,f1)
|
||||
sfills.insert(p,fi1)
|
||||
notfoundstack = 0
|
||||
else:
|
||||
# either there is no stack, or no more face can be compared
|
||||
# find a root, 2 faces that can be compared
|
||||
if DEBUG: print "using unordered stack, notfound = ",notfoundstack
|
||||
for f2 in faces[1:]:
|
||||
fi2 = self.fills[self.faces.index(f2)]
|
||||
if DEBUG: print "comparing face",str(self.faces.index(f1))," with face",str(self.faces.index(f2))
|
||||
r = self.compare(f1,f2)
|
||||
if r == 1:
|
||||
faces.remove(f2)
|
||||
sfaces.append(f2)
|
||||
sfills.append(fi2)
|
||||
faces.remove(f1)
|
||||
sfaces.append(f1)
|
||||
sfills.append(fi1)
|
||||
notfoundstack = 0
|
||||
break
|
||||
elif r == 2:
|
||||
faces.remove(f1)
|
||||
sfaces.append(f1)
|
||||
sfills.append(fi1)
|
||||
faces.remove(f2)
|
||||
sfaces.append(f2)
|
||||
sfills.append(fi2)
|
||||
notfoundstack = 0
|
||||
break
|
||||
else:
|
||||
|
@ -374,6 +414,7 @@ class Renderer:
|
|||
|
||||
if DEBUG: print "done Z sorting. ", len(sfaces), " faces retained, ", len(self.faces)-len(sfaces), " faces lost."
|
||||
self.faces = sfaces
|
||||
self.fills = sfills
|
||||
self.sorted = True
|
||||
|
||||
def buildDummy(self):
|
||||
|
@ -391,15 +432,25 @@ class Renderer:
|
|||
c = Part.makeCompound(faces)
|
||||
Part.show(c)
|
||||
|
||||
def getSVG(self):
|
||||
def getFill(self,fill):
|
||||
"Returns a SVG fill value"
|
||||
r = str(hex(int(fill[0]*255)))[2:].zfill(2)
|
||||
g = str(hex(int(fill[1]*255)))[2:].zfill(2)
|
||||
b = str(hex(int(fill[2]*255)))[2:].zfill(2)
|
||||
col = "#"+r+g+b
|
||||
return col
|
||||
|
||||
def getSVG(self,linewidth=0.01):
|
||||
"Returns a SVG fragment"
|
||||
if DEBUG: print len(self.faces), " faces and ", len(self.fills), " fills."
|
||||
if not self.sorted:
|
||||
self.sort()
|
||||
svg = ''
|
||||
for f in self.faces:
|
||||
for i in range(len(self.faces)):
|
||||
fill = self.getFill(self.fills[i])
|
||||
svg +='<path '
|
||||
svg += 'd="'
|
||||
for w in f.Wires:
|
||||
for w in self.faces[i].Wires:
|
||||
edges = fcgeo.sortEdges(w.Edges)
|
||||
v = edges[0].Vertexes[0].Point
|
||||
svg += 'M '+ str(v.x) +' '+ str(v.y) + ' '
|
||||
|
@ -415,12 +466,12 @@ class Renderer:
|
|||
svg += 'z '
|
||||
svg += '" '
|
||||
svg += 'stroke="#000000" '
|
||||
svg += 'stroke-width="0.01 px" '
|
||||
svg += 'stroke-width="' + str(linewidth) + '" '
|
||||
svg += 'style="stroke-width:0.01;'
|
||||
svg += 'stroke-miterlimit:1;'
|
||||
svg += 'stroke-linejoin:round;'
|
||||
svg += 'stroke-dasharray:none;'
|
||||
svg += 'fill:#aaaaaa;'
|
||||
svg += 'fill:' + fill + ';'
|
||||
svg += 'fill-rule: evenodd'
|
||||
svg += '"/>\n'
|
||||
return svg
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# Resource object code
|
||||
#
|
||||
# Created: Tue Jan 24 10:12:37 2012
|
||||
# Created: Wed Apr 18 19:00:26 2012
|
||||
# by: The Resource Compiler for PyQt (Qt v4.7.4)
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
@ -1757,6 +1757,351 @@ qt_resource_data = "\
|
|||
\x00\x00\x00\x0c\x00\x4f\x00\x75\x00\x74\x00\x69\x00\x6c\x00\x73\
|
||||
\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05\x54\x6f\x6f\x6c\x73\x07\
|
||||
\x00\x00\x00\x04\x61\x72\x63\x68\x01\
|
||||
\x00\x00\x15\x62\
|
||||
\x3c\
|
||||
\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
|
||||
\x00\x00\x01\x50\x00\x04\x9c\x2c\x00\x00\x02\xa5\x00\x05\xa0\xa5\
|
||||
\x00\x00\x0b\x01\x00\x05\xd8\x2c\x00\x00\x0e\x87\x00\x39\xdf\x33\
|
||||
\x00\x00\x11\x22\x00\x4b\x87\xd4\x00\x00\x13\x66\x00\x4d\x36\x62\
|
||||
\x00\x00\x04\x25\x00\x5b\x66\x33\x00\x00\x13\xc8\x00\x62\x9b\xa8\
|
||||
\x00\x00\x0b\x2d\x00\xfb\x72\xf3\x00\x00\x10\xb0\x01\xf7\xa8\x83\
|
||||
\x00\x00\x12\x43\x02\x5f\xc9\x59\x00\x00\x0d\xb7\x02\x90\x40\x65\
|
||||
\x00\x00\x05\x00\x02\xb8\xae\x74\x00\x00\x05\x56\x02\xcd\x05\xa3\
|
||||
\x00\x00\x04\x55\x02\xdd\x14\x14\x00\x00\x05\xa0\x02\xe5\xaa\xe4\
|
||||
\x00\x00\x00\x8b\x03\x1d\xe8\xe3\x00\x00\x0f\xb7\x03\xd4\x22\x74\
|
||||
\x00\x00\x00\xc8\x04\xdb\x21\x3e\x00\x00\x0a\x56\x05\x18\xda\xa3\
|
||||
\x00\x00\x03\x77\x05\xe0\x4b\x67\x00\x00\x0f\x89\x06\x32\xe3\xe3\
|
||||
\x00\x00\x13\x8e\x07\x60\x23\xf3\x00\x00\x00\x00\x09\x13\xce\x39\
|
||||
\x00\x00\x0e\xb5\x09\xba\xe6\x35\x00\x00\x0d\x75\x09\xe3\x98\xe4\
|
||||
\x00\x00\x01\x0e\x09\xed\x98\x55\x00\x00\x08\x68\x0a\x7f\xee\xa3\
|
||||
\x00\x00\x12\xf2\x0b\x51\x30\xa8\x00\x00\x06\xb6\x0b\x65\xda\xb3\
|
||||
\x00\x00\x10\x40\x0b\x8d\x97\x93\x00\x00\x11\x85\x0b\xb9\xe8\x93\
|
||||
\x00\x00\x07\x17\x0b\xc4\xb1\x23\x00\x00\x02\xcf\x0b\xe2\xc4\x04\
|
||||
\x00\x00\x07\xb7\x0c\x02\xac\xd7\x00\x00\x01\xb6\x0c\x25\x3e\x53\
|
||||
\x00\x00\x09\x41\x0c\x4e\x9b\x23\x00\x00\x08\xc5\x0d\x1e\xda\xa4\
|
||||
\x00\x00\x00\x37\x0d\x3b\x3b\x49\x00\x00\x0c\x2d\x0e\x32\x23\x85\
|
||||
\x00\x00\x13\x29\x0e\x8c\xd7\x43\x00\x00\x0b\x78\x0e\xec\x0b\x9e\
|
||||
\x00\x00\x01\xee\x69\x00\x00\x13\xf8\x03\x00\x00\x00\x14\x00\x6b\
|
||||
\x00\x6f\x00\x6d\x00\x70\x00\x6f\x00\x6e\x00\x65\x00\x6e\x00\x74\
|
||||
\x00\x79\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0a\x43\x6f\x6d\x70\
|
||||
\x6f\x6e\x65\x6e\x74\x73\x07\x00\x00\x00\x04\x41\x72\x63\x68\x01\
|
||||
\x03\x00\x00\x00\x22\x00\x53\x00\x6b\x01\x42\x00\x61\x00\x64\x00\
|
||||
\x6e\x00\x69\x00\x6b\x00\x69\x00\x20\x00\x6f\x00\x62\x00\x69\x00\
|
||||
\x65\x00\x6b\x00\x74\x00\x75\x08\x00\x00\x00\x00\x06\x00\x00\x00\
|
||||
\x19\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x73\x20\x6f\x66\x20\x74\
|
||||
\x68\x69\x73\x20\x6f\x62\x6a\x65\x63\x74\x07\x00\x00\x00\x04\x41\
|
||||
\x72\x63\x68\x01\x03\x00\x00\x00\x18\x00\x52\x00\x65\x00\x6d\x00\
|
||||
\x6f\x00\x76\x00\x65\x00\x20\x00\x63\x00\x68\x00\x69\x00\x6c\x00\
|
||||
\x64\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0c\x52\x65\x6d\x6f\x76\
|
||||
\x65\x20\x63\x68\x69\x6c\x64\x07\x00\x00\x00\x04\x41\x72\x63\x68\
|
||||
\x01\x03\x00\x00\x00\x1c\x00\x44\x00\x6f\x00\x64\x00\x61\x00\x6a\
|
||||
\x00\x20\x00\x73\x00\x6b\x01\x42\x00\x61\x00\x64\x00\x6e\x00\x69\
|
||||
\x00\x6b\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0d\x41\x64\x64\x20\
|
||||
\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x07\x00\x00\x00\x08\x41\x72\
|
||||
\x63\x68\x5f\x41\x64\x64\x01\x03\x00\x00\x00\x5a\x00\x44\x00\x6f\
|
||||
\x00\x64\x00\x61\x00\x6a\x00\x65\x00\x20\x00\x77\x00\x79\x00\x62\
|
||||
\x00\x72\x00\x61\x00\x6e\x00\x65\x00\x20\x00\x73\x00\x6b\x01\x42\
|
||||
\x00\x61\x00\x64\x00\x6e\x00\x69\x00\x6b\x00\x69\x00\x20\x00\x64\
|
||||
\x00\x6f\x00\x20\x00\x61\x00\x6b\x00\x74\x00\x79\x00\x77\x00\x6e\
|
||||
\x00\x65\x00\x67\x00\x6f\x00\x20\x00\x6f\x00\x62\x00\x69\x00\x65\
|
||||
\x00\x6b\x00\x74\x00\x75\x08\x00\x00\x00\x00\x06\x00\x00\x00\x31\
|
||||
\x41\x64\x64\x73\x20\x74\x68\x65\x20\x73\x65\x6c\x65\x63\x74\x65\
|
||||
\x64\x20\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x73\x20\x74\x6f\x20\
|
||||
\x74\x68\x65\x20\x61\x63\x74\x69\x76\x65\x20\x6f\x62\x6a\x65\x63\
|
||||
\x74\x07\x00\x00\x00\x08\x41\x72\x63\x68\x5f\x41\x64\x64\x01\x03\
|
||||
\x00\x00\x00\x0e\x00\x42\x00\x75\x00\x64\x00\x79\x00\x6e\x00\x65\
|
||||
\x00\x6b\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08\x42\x75\x69\x6c\
|
||||
\x64\x69\x6e\x67\x07\x00\x00\x00\x0d\x41\x72\x63\x68\x5f\x42\x75\
|
||||
\x69\x6c\x64\x69\x6e\x67\x01\x03\x00\x00\x00\x60\x00\x54\x00\x77\
|
||||
\x00\x6f\x00\x72\x00\x7a\x00\x79\x00\x20\x00\x6f\x00\x62\x00\x69\
|
||||
\x00\x65\x00\x6b\x00\x74\x00\x20\x00\x42\x00\x75\x00\x64\x00\x79\
|
||||
\x00\x6e\x00\x65\x00\x6b\x00\x20\x00\x77\x00\x72\x00\x61\x00\x7a\
|
||||
\x00\x20\x00\x7a\x00\x20\x00\x77\x00\x79\x00\x62\x00\x72\x00\x61\
|
||||
\x00\x6e\x00\x79\x00\x6d\x00\x69\x00\x20\x00\x6f\x00\x62\x00\x69\
|
||||
\x00\x65\x00\x6b\x00\x74\x00\x61\x00\x6d\x00\x69\x08\x00\x00\x00\
|
||||
\x00\x06\x00\x00\x00\x35\x43\x72\x65\x61\x74\x65\x73\x20\x61\x20\
|
||||
\x62\x75\x69\x6c\x64\x69\x6e\x67\x20\x6f\x62\x6a\x65\x63\x74\x20\
|
||||
\x69\x6e\x63\x6c\x75\x64\x69\x6e\x67\x20\x73\x65\x6c\x65\x63\x74\
|
||||
\x65\x64\x20\x6f\x62\x6a\x65\x63\x74\x73\x2e\x07\x00\x00\x00\x0d\
|
||||
\x41\x72\x63\x68\x5f\x42\x75\x69\x6c\x64\x69\x6e\x67\x01\x03\x00\
|
||||
\x00\x00\x08\x00\x43\x00\x65\x00\x6c\x00\x6c\x08\x00\x00\x00\x00\
|
||||
\x06\x00\x00\x00\x04\x43\x65\x6c\x6c\x07\x00\x00\x00\x09\x41\x72\
|
||||
\x63\x68\x5f\x43\x65\x6c\x6c\x01\x03\x00\x00\x00\x5a\x00\x54\x00\
|
||||
\x77\x00\x6f\x00\x72\x00\x7a\x00\x79\x00\x20\x00\x6f\x00\x62\x00\
|
||||
\x69\x00\x65\x00\x6b\x00\x74\x00\x20\x00\x43\x00\x65\x00\x6c\x00\
|
||||
\x6c\x00\x20\x00\x77\x00\x72\x00\x61\x00\x7a\x00\x20\x00\x7a\x00\
|
||||
\x20\x00\x77\x00\x79\x00\x62\x00\x72\x00\x61\x00\x6e\x00\x79\x00\
|
||||
\x6d\x00\x69\x00\x20\x00\x6f\x00\x62\x00\x69\x00\x65\x00\x6b\x00\
|
||||
\x74\x00\x61\x00\x6d\x00\x69\x08\x00\x00\x00\x00\x06\x00\x00\x00\
|
||||
\x30\x43\x72\x65\x61\x74\x65\x73\x20\x61\x20\x63\x65\x6c\x6c\x20\
|
||||
\x6f\x62\x6a\x65\x63\x74\x20\x69\x6e\x63\x6c\x75\x64\x69\x6e\x67\
|
||||
\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\x6f\x62\x6a\x65\x63\x74\
|
||||
\x73\x07\x00\x00\x00\x09\x41\x72\x63\x68\x5f\x43\x65\x6c\x6c\x01\
|
||||
\x03\x00\x00\x00\x5e\x00\x54\x00\x77\x00\x6f\x00\x72\x00\x7a\x00\
|
||||
\x79\x00\x20\x00\x6f\x00\x62\x00\x69\x00\x65\x00\x6b\x00\x74\x00\
|
||||
\x20\x00\x50\x00\x69\x01\x19\x00\x74\x00\x72\x00\x6f\x00\x20\x00\
|
||||
\x77\x00\x72\x00\x61\x00\x7a\x00\x20\x00\x7a\x00\x20\x00\x77\x00\
|
||||
\x79\x00\x62\x00\x72\x00\x61\x00\x6e\x00\x79\x00\x6d\x00\x69\x00\
|
||||
\x20\x00\x6f\x00\x62\x00\x69\x00\x65\x00\x6b\x00\x74\x00\x61\x00\
|
||||
\x6d\x00\x69\x08\x00\x00\x00\x00\x06\x00\x00\x00\x31\x43\x72\x65\
|
||||
\x61\x74\x65\x73\x20\x61\x20\x66\x6c\x6f\x6f\x72\x20\x6f\x62\x6a\
|
||||
\x65\x63\x74\x20\x69\x6e\x63\x6c\x75\x64\x69\x6e\x67\x20\x73\x65\
|
||||
\x6c\x65\x63\x74\x65\x64\x20\x6f\x62\x6a\x65\x63\x74\x73\x07\x00\
|
||||
\x00\x00\x0a\x41\x72\x63\x68\x5f\x46\x6c\x6f\x6f\x72\x01\x03\x00\
|
||||
\x00\x00\x0c\x00\x50\x00\x69\x01\x19\x00\x74\x00\x72\x00\x6f\x08\
|
||||
\x00\x00\x00\x00\x06\x00\x00\x00\x05\x46\x6c\x6f\x6f\x72\x07\x00\
|
||||
\x00\x00\x0a\x41\x72\x63\x68\x5f\x46\x6c\x6f\x6f\x72\x01\x03\x00\
|
||||
\x00\x00\x5a\x00\x54\x00\x75\x00\x72\x00\x6e\x00\x73\x00\x20\x00\
|
||||
\x73\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\x00\x65\x00\x64\x00\
|
||||
\x20\x00\x6d\x00\x65\x00\x73\x00\x68\x00\x65\x00\x73\x00\x20\x00\
|
||||
\x69\x00\x6e\x00\x74\x00\x6f\x00\x20\x00\x50\x00\x61\x00\x72\x00\
|
||||
\x74\x00\x20\x00\x53\x00\x68\x00\x61\x00\x70\x00\x65\x00\x20\x00\
|
||||
\x6f\x00\x62\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x73\x08\x00\x00\
|
||||
\x00\x00\x06\x00\x00\x00\x2d\x54\x75\x72\x6e\x73\x20\x73\x65\x6c\
|
||||
\x65\x63\x74\x65\x64\x20\x6d\x65\x73\x68\x65\x73\x20\x69\x6e\x74\
|
||||
\x6f\x20\x50\x61\x72\x74\x20\x53\x68\x61\x70\x65\x20\x6f\x62\x6a\
|
||||
\x65\x63\x74\x73\x07\x00\x00\x00\x0f\x41\x72\x63\x68\x5f\x4d\x65\
|
||||
\x73\x68\x54\x6f\x50\x61\x72\x74\x01\x03\x00\x00\x00\x24\x00\x53\
|
||||
\x00\x69\x00\x61\x00\x74\x00\x6b\x00\x61\x00\x20\x00\x64\x00\x6f\
|
||||
\x00\x20\x00\x4b\x00\x73\x00\x7a\x00\x74\x00\x61\x01\x42\x00\x74\
|
||||
\x00\x75\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0d\x4d\x65\x73\x68\
|
||||
\x20\x74\x6f\x20\x53\x68\x61\x70\x65\x07\x00\x00\x00\x10\x41\x72\
|
||||
\x63\x68\x5f\x4d\x65\x73\x68\x54\x6f\x53\x68\x61\x70\x65\x01\x03\
|
||||
\x00\x00\x00\x1a\x00\x55\x00\x73\x00\x75\x01\x44\x00\x20\x00\x73\
|
||||
\x00\x6b\x01\x42\x00\x61\x00\x64\x00\x6e\x00\x69\x00\x6b\x08\x00\
|
||||
\x00\x00\x00\x06\x00\x00\x00\x10\x52\x65\x6d\x6f\x76\x65\x20\x63\
|
||||
\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x07\x00\x00\x00\x0b\x41\x72\x63\
|
||||
\x68\x5f\x52\x65\x6d\x6f\x76\x65\x01\x03\x00\x00\x00\xa4\x00\x52\
|
||||
\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x20\x00\x74\x00\x68\
|
||||
\x00\x65\x00\x20\x00\x73\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\
|
||||
\x00\x65\x00\x64\x00\x20\x00\x63\x00\x6f\x00\x6d\x00\x70\x00\x6f\
|
||||
\x00\x6e\x00\x65\x00\x6e\x00\x74\x00\x73\x00\x20\x00\x66\x00\x72\
|
||||
\x00\x6f\x00\x6d\x00\x20\x00\x74\x00\x68\x00\x65\x00\x69\x00\x72\
|
||||
\x00\x20\x00\x70\x00\x61\x00\x72\x00\x65\x00\x6e\x00\x74\x00\x73\
|
||||
\x00\x2c\x00\x20\x00\x6f\x00\x72\x00\x20\x00\x63\x00\x72\x00\x65\
|
||||
\x00\x61\x00\x74\x00\x65\x00\x20\x00\x61\x00\x20\x00\x68\x00\x6f\
|
||||
\x00\x6c\x00\x65\x00\x20\x00\x69\x00\x6e\x00\x20\x00\x61\x00\x20\
|
||||
\x00\x63\x00\x6f\x00\x6d\x00\x70\x00\x6f\x00\x6e\x00\x65\x00\x6e\
|
||||
\x00\x74\x08\x00\x00\x00\x00\x06\x00\x00\x00\x52\x52\x65\x6d\x6f\
|
||||
\x76\x65\x20\x74\x68\x65\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\
|
||||
\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x73\x20\x66\x72\x6f\x6d\x20\
|
||||
\x74\x68\x65\x69\x72\x20\x70\x61\x72\x65\x6e\x74\x73\x2c\x20\x6f\
|
||||
\x72\x20\x63\x72\x65\x61\x74\x65\x20\x61\x20\x68\x6f\x6c\x65\x20\
|
||||
\x69\x6e\x20\x61\x20\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x07\x00\
|
||||
\x00\x00\x0b\x41\x72\x63\x68\x5f\x52\x65\x6d\x6f\x76\x65\x01\x03\
|
||||
\x00\x00\x00\x26\x00\x55\x00\x73\x00\x75\x01\x44\x00\x20\x00\x4b\
|
||||
\x00\x73\x00\x7a\x00\x74\x00\x61\x01\x42\x00\x74\x00\x20\x00\x7a\
|
||||
\x00\x20\x00\x41\x00\x72\x00\x63\x00\x68\x08\x00\x00\x00\x00\x06\
|
||||
\x00\x00\x00\x16\x52\x65\x6d\x6f\x76\x65\x20\x53\x68\x61\x70\x65\
|
||||
\x20\x66\x72\x6f\x6d\x20\x41\x72\x63\x68\x07\x00\x00\x00\x10\x41\
|
||||
\x72\x63\x68\x5f\x52\x65\x6d\x6f\x76\x65\x53\x68\x61\x70\x65\x01\
|
||||
\x03\x00\x00\x00\x52\x00\x52\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\
|
||||
\x65\x00\x73\x00\x20\x00\x63\x00\x75\x00\x62\x00\x69\x00\x63\x00\
|
||||
\x20\x00\x73\x00\x68\x00\x61\x00\x70\x00\x65\x00\x73\x00\x20\x00\
|
||||
\x66\x00\x72\x00\x6f\x00\x6d\x00\x20\x00\x41\x00\x72\x00\x63\x00\
|
||||
\x68\x00\x20\x00\x63\x00\x6f\x00\x6d\x00\x70\x00\x6f\x00\x6e\x00\
|
||||
\x65\x00\x6e\x00\x74\x00\x73\x08\x00\x00\x00\x00\x06\x00\x00\x00\
|
||||
\x29\x52\x65\x6d\x6f\x76\x65\x73\x20\x63\x75\x62\x69\x63\x20\x73\
|
||||
\x68\x61\x70\x65\x73\x20\x66\x72\x6f\x6d\x20\x41\x72\x63\x68\x20\
|
||||
\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x73\x07\x00\x00\x00\x10\x41\
|
||||
\x72\x63\x68\x5f\x52\x65\x6d\x6f\x76\x65\x53\x68\x61\x70\x65\x01\
|
||||
\x03\x00\x00\x00\x60\x00\x44\x00\x6f\x00\x64\x00\x61\x00\x6a\x00\
|
||||
\x65\x00\x20\x00\x6f\x00\x62\x00\x69\x00\x65\x00\x6b\x00\x74\x00\
|
||||
\x20\x00\x50\x01\x42\x00\x61\x00\x73\x00\x7a\x00\x63\x00\x7a\x00\
|
||||
\x79\x00\x7a\x00\x6e\x00\x61\x00\x20\x00\x50\x00\x72\x00\x7a\x00\
|
||||
\x65\x00\x6b\x00\x72\x00\x6f\x00\x6a\x00\x75\x00\x20\x00\x64\x00\
|
||||
\x6f\x00\x20\x00\x64\x00\x6f\x00\x6b\x00\x75\x00\x6d\x00\x65\x00\
|
||||
\x6e\x00\x74\x00\x75\x08\x00\x00\x00\x00\x06\x00\x00\x00\x2b\x41\
|
||||
\x64\x64\x73\x20\x61\x20\x73\x65\x63\x74\x69\x6f\x6e\x20\x70\x6c\
|
||||
\x61\x6e\x65\x20\x6f\x62\x6a\x65\x63\x74\x20\x74\x6f\x20\x74\x68\
|
||||
\x65\x20\x64\x6f\x63\x75\x6d\x65\x6e\x74\x07\x00\x00\x00\x11\x41\
|
||||
\x72\x63\x68\x5f\x53\x65\x63\x74\x69\x6f\x6e\x50\x6c\x61\x6e\x65\
|
||||
\x01\x03\x00\x00\x00\x2a\x00\x50\x01\x42\x00\x61\x00\x73\x00\x7a\
|
||||
\x00\x63\x00\x7a\x00\x79\x00\x7a\x00\x6e\x00\x61\x00\x20\x00\x70\
|
||||
\x00\x72\x00\x7a\x00\x65\x00\x6b\x00\x72\x00\x6f\x00\x6a\x00\x75\
|
||||
\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0d\x53\x65\x63\x74\x69\x6f\
|
||||
\x6e\x20\x50\x6c\x61\x6e\x65\x07\x00\x00\x00\x11\x41\x72\x63\x68\
|
||||
\x5f\x53\x65\x63\x74\x69\x6f\x6e\x50\x6c\x61\x6e\x65\x01\x03\x00\
|
||||
\x00\x00\x34\x00\x53\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\x00\
|
||||
\x20\x00\x6e\x00\x6f\x00\x6e\x00\x2d\x00\x6d\x00\x61\x00\x6e\x00\
|
||||
\x69\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x20\x00\x6d\x00\x65\x00\
|
||||
\x73\x00\x68\x00\x65\x00\x73\x08\x00\x00\x00\x00\x06\x00\x00\x00\
|
||||
\x1a\x53\x65\x6c\x65\x63\x74\x20\x6e\x6f\x6e\x2d\x6d\x61\x6e\x69\
|
||||
\x66\x6f\x6c\x64\x20\x6d\x65\x73\x68\x65\x73\x07\x00\x00\x00\x19\
|
||||
\x41\x72\x63\x68\x5f\x53\x65\x6c\x65\x63\x74\x4e\x6f\x6e\x53\x6f\
|
||||
\x6c\x69\x64\x4d\x65\x73\x68\x65\x73\x01\x03\x00\x00\x00\x9a\x00\
|
||||
\x53\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\x00\x73\x00\x20\x00\
|
||||
\x61\x00\x6c\x00\x6c\x00\x20\x00\x6e\x00\x6f\x00\x6e\x00\x2d\x00\
|
||||
\x6d\x00\x61\x00\x6e\x00\x69\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\
|
||||
\x20\x00\x6d\x00\x65\x00\x73\x00\x68\x00\x65\x00\x73\x00\x20\x00\
|
||||
\x66\x00\x72\x00\x6f\x00\x6d\x00\x20\x00\x74\x00\x68\x00\x65\x00\
|
||||
\x20\x00\x64\x00\x6f\x00\x63\x00\x75\x00\x6d\x00\x65\x00\x6e\x00\
|
||||
\x74\x00\x20\x00\x6f\x00\x72\x00\x20\x00\x66\x00\x72\x00\x6f\x00\
|
||||
\x6d\x00\x20\x00\x74\x00\x68\x00\x65\x00\x20\x00\x73\x00\x65\x00\
|
||||
\x6c\x00\x65\x00\x63\x00\x74\x00\x65\x00\x64\x00\x20\x00\x67\x00\
|
||||
\x72\x00\x6f\x00\x75\x00\x70\x00\x73\x08\x00\x00\x00\x00\x06\x00\
|
||||
\x00\x00\x4d\x53\x65\x6c\x65\x63\x74\x73\x20\x61\x6c\x6c\x20\x6e\
|
||||
\x6f\x6e\x2d\x6d\x61\x6e\x69\x66\x6f\x6c\x64\x20\x6d\x65\x73\x68\
|
||||
\x65\x73\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x64\x6f\x63\x75\
|
||||
\x6d\x65\x6e\x74\x20\x6f\x72\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\
|
||||
\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\x67\x72\x6f\x75\x70\x73\
|
||||
\x07\x00\x00\x00\x19\x41\x72\x63\x68\x5f\x53\x65\x6c\x65\x63\x74\
|
||||
\x4e\x6f\x6e\x53\x6f\x6c\x69\x64\x4d\x65\x73\x68\x65\x73\x01\x03\
|
||||
\x00\x00\x00\x5c\x00\x54\x00\x77\x00\x6f\x00\x72\x00\x7a\x00\x79\
|
||||
\x00\x20\x00\x6f\x00\x62\x00\x69\x00\x65\x00\x6b\x00\x74\x00\x20\
|
||||
\x00\x54\x00\x65\x00\x72\x00\x65\x00\x6e\x00\x20\x00\x77\x00\x72\
|
||||
\x00\x61\x00\x7a\x00\x20\x00\x7a\x00\x20\x00\x77\x00\x79\x00\x62\
|
||||
\x00\x72\x00\x61\x00\x6e\x00\x79\x00\x6d\x00\x69\x00\x20\x00\x6f\
|
||||
\x00\x62\x00\x69\x00\x65\x00\x6b\x00\x74\x00\x61\x00\x6d\x00\x69\
|
||||
\x08\x00\x00\x00\x00\x06\x00\x00\x00\x31\x43\x72\x65\x61\x74\x65\
|
||||
\x73\x20\x61\x20\x73\x69\x74\x65\x20\x6f\x62\x6a\x65\x63\x74\x20\
|
||||
\x69\x6e\x63\x6c\x75\x64\x69\x6e\x67\x20\x73\x65\x6c\x65\x63\x74\
|
||||
\x65\x64\x20\x6f\x62\x6a\x65\x63\x74\x73\x2e\x07\x00\x00\x00\x09\
|
||||
\x41\x72\x63\x68\x5f\x53\x69\x74\x65\x01\x03\x00\x00\x00\x0a\x00\
|
||||
\x54\x00\x65\x00\x72\x00\x65\x00\x6e\x08\x00\x00\x00\x00\x06\x00\
|
||||
\x00\x00\x04\x53\x69\x74\x65\x07\x00\x00\x00\x09\x41\x72\x63\x68\
|
||||
\x5f\x53\x69\x74\x65\x01\x03\x00\x00\x00\x1e\x00\x52\x00\x6f\x00\
|
||||
\x7a\x00\x64\x00\x7a\x00\x69\x00\x65\x00\x6c\x00\x20\x00\x73\x00\
|
||||
\x69\x00\x61\x00\x74\x00\x6b\x01\x19\x08\x00\x00\x00\x00\x06\x00\
|
||||
\x00\x00\x0a\x53\x70\x6c\x69\x74\x20\x4d\x65\x73\x68\x07\x00\x00\
|
||||
\x00\x0e\x41\x72\x63\x68\x5f\x53\x70\x6c\x69\x74\x4d\x65\x73\x68\
|
||||
\x01\x03\x00\x00\x00\x60\x00\x52\x00\x6f\x00\x7a\x00\x64\x00\x7a\
|
||||
\x00\x69\x00\x65\x00\x6c\x00\x61\x00\x20\x00\x77\x00\x79\x00\x62\
|
||||
\x00\x72\x00\x61\x00\x6e\x00\x65\x00\x20\x00\x73\x00\x69\x00\x61\
|
||||
\x00\x74\x00\x6b\x00\x69\x00\x20\x00\x6e\x00\x61\x00\x20\x00\x6e\
|
||||
\x00\x69\x00\x65\x00\x7a\x00\x61\x00\x6c\x00\x65\x01\x7c\x00\x6e\
|
||||
\x00\x65\x00\x20\x00\x73\x00\x6b\x01\x42\x00\x61\x00\x64\x00\x6e\
|
||||
\x00\x69\x00\x6b\x00\x69\x08\x00\x00\x00\x00\x06\x00\x00\x00\x32\
|
||||
\x53\x70\x6c\x69\x74\x73\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\
|
||||
\x6d\x65\x73\x68\x65\x73\x20\x69\x6e\x74\x6f\x20\x69\x6e\x64\x65\
|
||||
\x70\x65\x6e\x64\x65\x6e\x74\x20\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\
|
||||
\x74\x73\x07\x00\x00\x00\x0e\x41\x72\x63\x68\x5f\x53\x70\x6c\x69\
|
||||
\x74\x4d\x65\x73\x68\x01\x03\x00\x00\x00\xc6\x00\x55\x00\x74\x00\
|
||||
\x77\x00\xf3\x00\x72\x00\x7a\x00\x20\x00\x6f\x00\x62\x00\x69\x00\
|
||||
\x65\x00\x6b\x00\x74\x00\x20\x00\x4b\x00\x6f\x00\x6e\x00\x73\x00\
|
||||
\x74\x00\x72\x00\x75\x00\x6b\x00\x63\x00\x6a\x00\x61\x00\x20\x00\
|
||||
\x6f\x00\x64\x00\x20\x00\x70\x00\x6f\x00\x63\x00\x7a\x01\x05\x00\
|
||||
\x74\x00\x6b\x00\x75\x00\x20\x00\x6c\x00\x75\x00\x62\x00\x20\x00\
|
||||
\x7a\x00\x20\x00\x77\x00\x79\x00\x62\x00\x72\x00\x61\x00\x6e\x00\
|
||||
\x79\x00\x63\x00\x68\x00\x20\x00\x6f\x00\x62\x00\x69\x00\x65\x00\
|
||||
\x6b\x00\x74\x00\xf3\x00\x77\x00\x20\x00\x28\x00\x73\x00\x7a\x00\
|
||||
\x6b\x00\x69\x00\x63\x00\x2c\x00\x20\x00\x73\x00\x7a\x00\x6b\x00\
|
||||
\x69\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x2c\x00\x20\x00\x66\x00\
|
||||
\x61\x00\x73\x00\x65\x00\x74\x00\x6b\x00\x61\x00\x20\x00\x6c\x00\
|
||||
\x75\x00\x62\x00\x20\x00\x73\x00\x6f\x00\x6c\x00\x69\x00\x64\x00\
|
||||
\x29\x08\x00\x00\x00\x00\x06\x00\x00\x00\x5f\x43\x72\x65\x61\x74\
|
||||
\x65\x73\x20\x61\x20\x73\x74\x72\x75\x63\x74\x75\x72\x65\x20\x6f\
|
||||
\x62\x6a\x65\x63\x74\x20\x66\x72\x6f\x6d\x20\x73\x63\x72\x61\x74\
|
||||
\x63\x68\x20\x6f\x72\x20\x66\x72\x6f\x6d\x20\x61\x20\x73\x65\x6c\
|
||||
\x65\x63\x74\x65\x64\x20\x6f\x62\x6a\x65\x63\x74\x20\x28\x73\x6b\
|
||||
\x65\x74\x63\x68\x2c\x20\x77\x69\x72\x65\x2c\x20\x66\x61\x63\x65\
|
||||
\x20\x6f\x72\x20\x73\x6f\x6c\x69\x64\x29\x07\x00\x00\x00\x0e\x41\
|
||||
\x72\x63\x68\x5f\x53\x74\x72\x75\x63\x74\x75\x72\x65\x01\x03\x00\
|
||||
\x00\x00\x16\x00\x4b\x00\x6f\x00\x6e\x00\x73\x00\x74\x00\x72\x00\
|
||||
\x75\x00\x6b\x00\x63\x00\x6a\x00\x61\x08\x00\x00\x00\x00\x06\x00\
|
||||
\x00\x00\x09\x53\x74\x72\x75\x63\x74\x75\x72\x65\x07\x00\x00\x00\
|
||||
\x0e\x41\x72\x63\x68\x5f\x53\x74\x72\x75\x63\x74\x75\x72\x65\x01\
|
||||
\x03\x00\x00\x00\x60\x00\x54\x00\x77\x00\x6f\x00\x72\x00\x7a\x00\
|
||||
\x79\x00\x20\x00\x6f\x00\x62\x00\x69\x00\x65\x00\x6b\x00\x74\x00\
|
||||
\x20\x01\x5a\x00\x63\x00\x69\x00\x61\x00\x6e\x00\x61\x00\x20\x00\
|
||||
\x6f\x00\x64\x00\x20\x00\x70\x00\x6f\x00\x63\x00\x7a\x01\x05\x00\
|
||||
\x74\x00\x6b\x00\x75\x00\x20\x00\x6c\x00\x75\x00\x62\x00\x20\x00\
|
||||
\x7a\x00\x20\x00\x77\x00\x79\x00\x62\x00\x72\x00\x61\x00\x6e\x00\
|
||||
\x79\x00\x63\x00\x68\x08\x00\x00\x00\x00\x06\x00\x00\x00\x52\x43\
|
||||
\x72\x65\x61\x74\x65\x73\x20\x61\x20\x77\x61\x6c\x6c\x20\x6f\x62\
|
||||
\x6a\x65\x63\x74\x20\x66\x72\x6f\x6d\x20\x73\x63\x72\x61\x74\x63\
|
||||
\x68\x20\x6f\x72\x20\x66\x72\x6f\x6d\x20\x61\x20\x73\x65\x6c\x65\
|
||||
\x63\x74\x65\x64\x20\x6f\x62\x6a\x65\x63\x74\x20\x28\x77\x69\x72\
|
||||
\x65\x2c\x20\x66\x61\x63\x65\x20\x6f\x72\x20\x73\x6f\x6c\x69\x64\
|
||||
\x29\x07\x00\x00\x00\x09\x41\x72\x63\x68\x5f\x57\x61\x6c\x6c\x01\
|
||||
\x03\x00\x00\x00\x0c\x01\x5a\x00\x63\x00\x69\x00\x61\x00\x6e\x00\
|
||||
\x61\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04\x57\x61\x6c\x6c\x07\
|
||||
\x00\x00\x00\x09\x41\x72\x63\x68\x5f\x57\x61\x6c\x6c\x01\x03\x00\
|
||||
\x00\x00\x5a\x00\x54\x00\x77\x00\x6f\x00\x72\x00\x7a\x00\x20\x00\
|
||||
\x6f\x00\x62\x00\x69\x00\x65\x00\x6b\x00\x74\x00\x20\x00\x4f\x00\
|
||||
\x6b\x00\x6e\x00\x6f\x00\x20\x00\x6f\x00\x64\x00\x20\x00\x70\x00\
|
||||
\x6f\x00\x63\x00\x7a\x01\x05\x00\x74\x00\x6b\x00\x75\x00\x20\x00\
|
||||
\x6c\x00\x75\x00\x62\x00\x20\x00\x7a\x00\x20\x00\x77\x00\x79\x00\
|
||||
\x62\x00\x72\x00\x61\x00\x6e\x00\x79\x00\x63\x00\x68\x08\x00\x00\
|
||||
\x00\x00\x06\x00\x00\x00\x5a\x43\x72\x65\x61\x74\x65\x73\x20\x61\
|
||||
\x20\x77\x69\x6e\x64\x6f\x77\x20\x6f\x62\x6a\x65\x63\x74\x20\x66\
|
||||
\x72\x6f\x6d\x20\x73\x63\x72\x61\x74\x63\x68\x20\x6f\x72\x20\x66\
|
||||
\x72\x6f\x6d\x20\x61\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\x6f\
|
||||
\x62\x6a\x65\x63\x74\x20\x28\x77\x69\x72\x65\x2c\x20\x72\x65\x63\
|
||||
\x74\x61\x6e\x67\x6c\x65\x20\x6f\x72\x20\x73\x6b\x65\x74\x63\x68\
|
||||
\x29\x07\x00\x00\x00\x0b\x41\x72\x63\x68\x5f\x57\x69\x6e\x64\x6f\
|
||||
\x77\x01\x03\x00\x00\x00\x08\x00\x4f\x00\x6b\x00\x6e\x00\x6f\x08\
|
||||
\x00\x00\x00\x00\x06\x00\x00\x00\x06\x57\x69\x6e\x64\x6f\x77\x07\
|
||||
\x00\x00\x00\x0b\x41\x72\x63\x68\x5f\x57\x69\x6e\x64\x6f\x77\x01\
|
||||
\x03\x00\x00\x00\x3c\x00\x4b\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\
|
||||
\x20\x00\x64\x00\x6f\x00\x6d\x00\x79\x01\x5b\x00\x6c\x00\x6e\x00\
|
||||
\x79\x00\x20\x00\x64\x00\x6c\x00\x61\x00\x20\x00\x6b\x00\x6f\x00\
|
||||
\x6e\x00\x73\x00\x74\x00\x72\x00\x75\x00\x6b\x00\x63\x00\x6a\x00\
|
||||
\x69\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1c\x44\x65\x66\x61\x75\
|
||||
\x6c\x74\x20\x63\x6f\x6c\x6f\x72\x20\x66\x6f\x72\x20\x73\x74\x72\
|
||||
\x75\x63\x74\x75\x72\x65\x73\x07\x00\x00\x00\x1c\x47\x75\x69\x3a\
|
||||
\x3a\x44\x69\x61\x6c\x6f\x67\x3a\x3a\x44\x6c\x67\x53\x65\x74\x74\
|
||||
\x69\x6e\x67\x73\x41\x72\x63\x68\x01\x03\x00\x00\x00\x28\x00\x44\
|
||||
\x00\x6f\x00\x6d\x00\x79\x01\x5b\x00\x6c\x00\x6e\x00\x79\x00\x20\
|
||||
\x00\x6b\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x20\x01\x5b\x00\x63\
|
||||
\x00\x69\x00\x61\x00\x6e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x17\
|
||||
\x44\x65\x66\x61\x75\x6c\x74\x20\x63\x6f\x6c\x6f\x72\x20\x66\x6f\
|
||||
\x72\x20\x77\x61\x6c\x6c\x73\x07\x00\x00\x00\x1c\x47\x75\x69\x3a\
|
||||
\x3a\x44\x69\x61\x6c\x6f\x67\x3a\x3a\x44\x6c\x67\x53\x65\x74\x74\
|
||||
\x69\x6e\x67\x73\x41\x72\x63\x68\x01\x03\x00\x00\x00\x2c\x00\x55\
|
||||
\x00\x73\x00\x74\x00\x61\x00\x77\x00\x69\x00\x65\x00\x6e\x00\x69\
|
||||
\x00\x61\x00\x20\x00\x6f\x00\x67\x00\xf3\x00\x6c\x00\x6e\x00\x65\
|
||||
\x00\x20\x00\x41\x00\x72\x00\x63\x00\x68\x08\x00\x00\x00\x00\x06\
|
||||
\x00\x00\x00\x15\x47\x65\x6e\x65\x72\x61\x6c\x20\x41\x72\x63\x68\
|
||||
\x20\x53\x65\x74\x74\x69\x6e\x67\x73\x07\x00\x00\x00\x1c\x47\x75\
|
||||
\x69\x3a\x3a\x44\x69\x61\x6c\x6f\x67\x3a\x3a\x44\x6c\x67\x53\x65\
|
||||
\x74\x74\x69\x6e\x67\x73\x41\x72\x63\x68\x01\x03\x00\x00\x00\x22\
|
||||
\x00\x55\x00\x73\x00\x74\x00\x61\x00\x77\x00\x69\x00\x65\x00\x6e\
|
||||
\x00\x69\x00\x61\x00\x20\x00\x6f\x00\x67\x00\xf3\x00\x6c\x00\x6e\
|
||||
\x00\x65\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10\x47\x65\x6e\x65\
|
||||
\x72\x61\x6c\x20\x73\x65\x74\x74\x69\x6e\x67\x73\x07\x00\x00\x00\
|
||||
\x1c\x47\x75\x69\x3a\x3a\x44\x69\x61\x6c\x6f\x67\x3a\x3a\x44\x6c\
|
||||
\x67\x53\x65\x74\x74\x69\x6e\x67\x73\x41\x72\x63\x68\x01\x03\x00\
|
||||
\x00\x00\x5a\x00\x4b\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x20\x00\
|
||||
\x64\x00\x6f\x00\x6d\x00\x79\x01\x5b\x00\x6c\x00\x6e\x00\x79\x00\
|
||||
\x20\x00\x64\x00\x6c\x00\x61\x00\x20\x00\x6e\x00\x6f\x00\x77\x00\
|
||||
\x65\x00\x67\x00\x6f\x00\x20\x00\x6f\x00\x62\x00\x69\x00\x65\x00\
|
||||
\x6b\x00\x74\x00\x75\x00\x20\x00\x4b\x00\x6f\x00\x6e\x00\x73\x00\
|
||||
\x74\x00\x72\x00\x75\x00\x6b\x00\x63\x00\x6a\x00\x61\x08\x00\x00\
|
||||
\x00\x00\x06\x00\x00\x00\x33\x54\x68\x69\x73\x20\x69\x73\x20\x74\
|
||||
\x68\x65\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x63\x6f\x6c\x6f\x72\
|
||||
\x20\x66\x6f\x72\x20\x6e\x65\x77\x20\x53\x74\x72\x75\x63\x74\x75\
|
||||
\x72\x65\x20\x6f\x62\x6a\x65\x63\x74\x73\x07\x00\x00\x00\x1c\x47\
|
||||
\x75\x69\x3a\x3a\x44\x69\x61\x6c\x6f\x67\x3a\x3a\x44\x6c\x67\x53\
|
||||
\x65\x74\x74\x69\x6e\x67\x73\x41\x72\x63\x68\x01\x03\x00\x00\x00\
|
||||
\x50\x00\x4b\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x20\x00\x64\x00\
|
||||
\x6f\x00\x6d\x00\x79\x01\x5b\x00\x6c\x00\x6e\x00\x79\x00\x20\x00\
|
||||
\x64\x00\x6c\x00\x61\x00\x20\x00\x6e\x00\x6f\x00\x77\x00\x65\x00\
|
||||
\x67\x00\x6f\x00\x20\x00\x6f\x00\x62\x00\x69\x00\x65\x00\x6b\x00\
|
||||
\x74\x00\x75\x00\x20\x01\x5a\x00\x63\x00\x69\x00\x61\x00\x6e\x00\
|
||||
\x61\x08\x00\x00\x00\x00\x06\x00\x00\x00\x2e\x54\x68\x69\x73\x20\
|
||||
\x69\x73\x20\x74\x68\x65\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x63\
|
||||
\x6f\x6c\x6f\x72\x20\x66\x6f\x72\x20\x6e\x65\x77\x20\x57\x61\x6c\
|
||||
\x6c\x20\x6f\x62\x6a\x65\x63\x74\x73\x07\x00\x00\x00\x1c\x47\x75\
|
||||
\x69\x3a\x3a\x44\x69\x61\x6c\x6f\x67\x3a\x3a\x44\x6c\x67\x53\x65\
|
||||
\x74\x74\x69\x6e\x67\x73\x41\x72\x63\x68\x01\x03\x00\x00\x00\x14\
|
||||
\x00\x41\x00\x72\x00\x63\x00\x68\x00\x20\x00\x74\x00\x6f\x00\x6f\
|
||||
\x00\x6c\x00\x73\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0a\x41\x72\
|
||||
\x63\x68\x20\x74\x6f\x6f\x6c\x73\x07\x00\x00\x00\x04\x61\x72\x63\
|
||||
\x68\x01\x03\x00\x00\x00\x18\x00\x41\x00\x72\x00\x63\x00\x68\x00\
|
||||
\x69\x00\x74\x00\x65\x00\x63\x00\x74\x00\x75\x00\x72\x00\x65\x08\
|
||||
\x00\x00\x00\x00\x06\x00\x00\x00\x0c\x41\x72\x63\x68\x69\x74\x65\
|
||||
\x63\x74\x75\x72\x65\x07\x00\x00\x00\x04\x61\x72\x63\x68\x01\x03\
|
||||
\x00\x00\x00\x0a\x00\x44\x00\x72\x00\x61\x00\x66\x00\x74\x08\x00\
|
||||
\x00\x00\x00\x06\x00\x00\x00\x05\x44\x72\x61\x66\x74\x07\x00\x00\
|
||||
\x00\x04\x61\x72\x63\x68\x01\x03\x00\x00\x00\x16\x00\x44\x00\x72\
|
||||
\x00\x61\x00\x66\x00\x74\x00\x20\x00\x74\x00\x6f\x00\x6f\x00\x6c\
|
||||
\x00\x73\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0b\x44\x72\x61\x66\
|
||||
\x74\x20\x74\x6f\x6f\x6c\x73\x07\x00\x00\x00\x04\x61\x72\x63\x68\
|
||||
\x01\x03\x00\x00\x00\x12\x00\x4e\x00\x61\x00\x72\x00\x7a\x01\x19\
|
||||
\x00\x64\x00\x7a\x00\x69\x00\x61\x08\x00\x00\x00\x00\x06\x00\x00\
|
||||
\x00\x05\x54\x6f\x6f\x6c\x73\x07\x00\x00\x00\x04\x61\x72\x63\x68\
|
||||
\x01\
|
||||
\x00\x00\x17\x20\
|
||||
\x3c\
|
||||
\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
|
||||
|
@ -5697,83 +6042,85 @@ qt_resource_data = "\
|
|||
\x00\x00\x00\x12\x00\x57\x00\x65\x00\x72\x00\x6b\x00\x7a\x00\x65\
|
||||
\x00\x75\x00\x67\x00\x65\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05\
|
||||
\x54\x6f\x6f\x6c\x73\x07\x00\x00\x00\x04\x61\x72\x63\x68\x01\
|
||||
\x00\x00\x04\xaa\
|
||||
\x00\x00\x04\xd0\
|
||||
\x00\
|
||||
\x00\x1c\xf4\x78\x9c\xed\x59\x6d\x6f\xa3\x38\x10\xfe\xde\x5f\x61\
|
||||
\xf1\xf9\xae\x24\xd9\x24\xbb\xad\x08\xab\x7d\xb9\xbe\x48\xbb\xba\
|
||||
\x54\xe9\x6e\x3f\xae\x08\x4c\x82\x6f\xc1\xe6\x8c\xb9\x24\xfb\xeb\
|
||||
\xcf\x36\x26\x60\x20\xb4\x69\xb2\xad\x54\x55\x6a\x54\xdb\x63\x66\
|
||||
\xc6\x8f\x67\x1e\x0f\xd8\x79\xbf\x8e\x23\xf4\x1f\xb0\x14\x53\x32\
|
||||
\xb1\xfa\xa7\x3d\x0b\x01\xf1\x69\x80\xc9\x72\x62\x7d\xbb\xbd\xf8\
|
||||
\xf3\x9d\xf5\xde\x3d\x71\x32\x5c\x4e\x1a\x8a\x49\xee\x09\x72\xfc\
|
||||
\xc8\x4b\x53\xf7\x32\xc3\xe7\xe7\x9f\xb1\x17\xd1\xa5\xf8\x1f\x2d\
|
||||
\x67\xc0\xb9\x78\x38\xfd\xc0\xfc\xd0\xb1\xf3\x39\x62\xf2\x0a\x07\
|
||||
\x4b\xe0\x48\xf5\x27\xd6\xcd\x9d\xea\x5a\x88\x78\x31\x4c\xac\x2e\
|
||||
\x1d\xd2\x14\x72\x12\x46\x13\x60\x7c\xa3\x1f\x58\x02\x8d\x81\xb3\
|
||||
\x8d\x12\x22\x87\x81\xcf\x55\x0b\x39\x6b\xb7\xe7\xd8\x6b\xdd\xd9\
|
||||
\xc8\xce\x46\x77\x84\x07\x3c\x74\x47\x6f\x47\x8e\x9d\x37\xf3\xe1\
|
||||
\x10\xf0\x32\xe4\xee\x78\x70\xe6\xd8\xba\xad\x74\xda\x85\x52\xc7\
|
||||
\x2e\x8c\xb7\x79\xb2\xc2\x24\xa0\xab\x5b\xcc\x23\xd0\xce\xa4\x9c\
|
||||
\x09\xdf\xdd\x4b\x20\xc0\xbc\x08\xa5\x7a\x2d\x8e\xad\x05\x4d\x95\
|
||||
\x91\xb7\xa1\x59\x89\xcd\xf7\x8f\x74\xfd\x45\x0d\x69\x8d\x35\x93\
|
||||
\x69\xe2\xf9\x42\x91\xa5\x17\x40\xb2\x78\x0e\xcc\x1d\x3b\xb6\x6e\
|
||||
\xe5\xee\x57\x2d\x34\x54\xc4\x1e\x5b\x62\x52\xd3\x70\xd6\xa9\x01\
|
||||
\x73\x88\x4b\x24\xab\x7b\x79\xc9\x68\x96\x08\x9f\x8b\xdd\x5c\x16\
|
||||
\xfd\x7c\x7a\xc3\x38\x2f\xc1\x6a\xc1\x4b\xee\x39\x9a\xb5\x80\xd6\
|
||||
\xf4\xa9\x13\x3a\x6d\x4c\x44\x2d\xc7\xbe\x17\xe5\xa3\x3f\x06\xa5\
|
||||
\xdd\x72\x41\x2d\x8a\xae\x1a\x8a\x42\xca\xf0\x2f\x4a\x78\x8b\xaa\
|
||||
\xba\xb2\x26\x44\x5f\xbc\x39\x44\x85\xa6\x48\x76\x8c\xc7\x5b\x30\
|
||||
\x82\x35\x37\x26\x6c\x71\xfa\x0c\x0b\x2f\x8b\x84\x6a\x1a\x51\x86\
|
||||
\x16\xe2\xb7\xf2\xa2\xa8\x8e\x54\x3b\x5c\xf9\x60\xee\x5b\xc5\x79\
|
||||
\xdb\xf4\xbe\xb1\x18\x19\x70\xc0\x1a\x38\xcc\xd4\x70\xe7\x32\xc4\
|
||||
\x5c\x10\x53\xb9\xe0\x8d\xda\x6a\x40\x84\x9a\x7b\xc3\xcf\xcf\xaf\
|
||||
\xb6\xfa\x1c\x5b\x0d\xde\xb7\x80\x66\x3e\xe0\x5f\x70\x85\x89\xd8\
|
||||
\xa9\x94\x07\x22\xdd\x26\x56\xaf\x0e\x9d\x98\x61\x8c\x14\x6c\x30\
|
||||
\xec\x19\x64\xb0\x95\x6a\x22\x18\xf4\x0c\x4e\x28\xdd\xaa\x2b\xdc\
|
||||
\x81\x74\x0e\xdc\x1e\x48\x9b\x61\xa3\x68\x71\xca\x60\xf1\x49\xee\
|
||||
\xf5\xc7\x8c\x73\x01\x63\x91\x64\x52\x96\x08\x99\x8a\x83\x79\x2e\
|
||||
\xeb\x8c\x28\x4a\xa3\x5b\x9c\xb4\x07\xd5\x6d\x88\x53\x24\xfe\x78\
|
||||
\x08\x28\x68\x04\x18\x81\x15\xba\x13\x41\x86\xe8\xfc\x1f\x41\x8a\
|
||||
\x0f\x8f\xb5\x86\x13\x4a\x67\xcd\x05\x35\x56\xc3\x9f\x41\xe0\x0e\
|
||||
\x46\x23\x49\xc2\x41\x4d\xb4\x64\x00\xc4\xed\x9f\x89\xad\xc9\x9b\
|
||||
\xa6\x78\x1e\x65\xe0\xf6\xdf\x0a\xa9\x6a\x99\xdb\xd6\x30\xf5\x30\
|
||||
\xaf\x25\xcc\x7f\x11\x79\xdc\xec\x8c\x30\x5f\x23\x22\x61\x52\xbb\
|
||||
\x25\x8c\x3d\x16\x24\x69\x6e\xea\xf1\xf0\x7e\x6b\x5f\x69\x60\xeb\
|
||||
\x73\xf6\x58\xd9\xef\xd8\x39\x13\x6e\x69\xd2\x10\x1f\x4a\x9a\x07\
|
||||
\x51\xe6\xd1\x08\x53\x08\x32\x9f\x67\x0c\x9e\x8f\x35\xef\xa1\xff\
|
||||
\x57\xde\x7c\x4a\xde\xbc\xef\x2c\x3e\x8c\x39\x67\x45\xb4\x3d\x2d\
|
||||
\x7d\xf6\x47\xbd\x0e\xfa\x1c\x9f\x75\xd1\xe7\xbb\xf1\x33\xd1\xe7\
|
||||
\x16\xab\x57\x0e\xdd\x5d\x78\x8e\x0f\x2b\x3c\x47\xc7\x2b\x3c\xd5\
|
||||
\xbb\xcf\x33\x92\xe8\xf0\x95\x44\x77\x63\xfd\xd4\x24\xfa\xa6\x73\
|
||||
\x33\xf6\xa1\xae\xd1\x59\x07\x73\xbd\x19\x74\x31\xd7\xf0\xb9\x98\
|
||||
\xeb\x4e\xe5\xc2\xcb\xa5\x2d\x53\x68\xe8\xaa\xcc\x7b\xc4\x57\x82\
|
||||
\xf2\xf0\x7d\xd8\x77\x82\xeb\x8b\x4f\x08\xc7\x09\x65\xfc\xd8\x1f\
|
||||
\x07\x8e\xf7\x69\x60\xf8\x70\x86\x2e\xd3\x2c\x04\xff\x67\x15\x9f\
|
||||
\x6d\x8e\x49\xc1\xbc\x0a\x54\x3b\x5a\x5d\x55\x0a\x5e\x88\x02\x25\
|
||||
\x2f\x54\x94\x3a\x08\xfe\x50\x15\x8b\x20\x2e\x60\xa4\xf8\xea\x22\
|
||||
\xa1\x4d\x3c\x96\x82\xa4\x76\xf1\xba\x37\x07\x94\xa5\x80\x38\x45\
|
||||
\xf3\x0c\x47\x41\x3e\x49\x17\x31\x68\xc1\x68\x8c\x7e\x12\xba\x22\
|
||||
\xea\x39\xbe\x49\x20\x3d\x7d\x7c\x69\xb3\xfb\xdc\x91\x2e\x6c\xfd\
|
||||
\x2c\x5d\x3c\xa0\x8a\xca\x11\xa8\x59\x9b\x0b\xfc\x5c\x51\x7e\x80\
|
||||
\x20\x10\xd9\xfc\x9d\x64\x21\x96\x74\xbd\xf0\xa7\x7a\x1d\x2f\x90\
|
||||
\x2d\x0e\x4f\xa1\xd1\xef\x48\xa1\xc7\x27\xd0\xf5\x8e\x04\x12\xf1\
|
||||
\xf8\x77\x02\x64\x16\x82\xc8\x97\x9c\x96\xcc\xec\x09\x54\xa5\x54\
|
||||
\x24\x0d\xa1\x1c\x85\x1e\x09\x22\x31\x3e\xdf\x98\x29\x78\x68\x58\
|
||||
\xef\xce\xa0\x6f\xa9\xe9\xe8\xe3\x6d\xec\x1d\xe3\x15\x9b\x2f\x30\
|
||||
\xcc\xf7\x3f\x14\x8d\x7a\xb6\x38\x7e\xcc\x0f\xa9\x0f\x29\x63\xcb\
|
||||
\x0a\xf6\xbb\xd6\x61\xd4\xaf\xcd\xa3\x70\x8f\xaa\xd5\x2c\x58\x75\
|
||||
\xad\x3a\x68\xd4\xaa\x45\x99\x3a\x6c\x94\xa9\x46\x85\x5a\x77\xc5\
|
||||
\xa8\x4b\x4b\x90\x2a\x48\x56\x60\xd4\xbc\x51\xbc\x57\xeb\x8b\x8f\
|
||||
\x89\x35\xb6\x50\x7e\x83\x31\xb1\xfa\x7d\xcb\x96\x33\x13\xbc\x8e\
|
||||
\xbd\x64\x91\x11\x5f\x02\xe5\xfe\x3b\x55\xfd\x0b\x71\x48\x7d\xc5\
|
||||
\x31\xcc\x68\xc6\x7c\xc1\xec\xb5\x59\xf2\x12\x2b\x4b\x39\x8d\x73\
|
||||
\x8b\xa9\xf2\xa4\x3a\x92\x7b\x59\xb9\xe8\xaa\x14\xc3\xe5\xe5\x96\
|
||||
\xdc\x8f\x35\x07\x12\xa4\xee\xcd\x34\x4b\xc3\x42\x5e\x0c\x9e\xe4\
|
||||
\x70\x79\x81\x58\xb6\xd0\x62\xe7\x97\x5f\xe9\x69\x28\x91\x53\xa3\
|
||||
\x0a\x81\xba\xe1\x6e\x4f\x6a\xa5\x79\xab\x37\x4d\x97\x77\xb9\x24\
|
||||
\xb5\x1d\xcf\x2d\xcd\xc3\xed\x08\x95\xd2\xc3\x9d\x31\x07\xd4\x45\
|
||||
\x23\x83\x54\x6d\x76\xaa\xc2\xc2\xa7\x84\x80\xda\x6c\xd9\x77\xec\
|
||||
\x0c\xbb\x27\xff\x03\x16\x13\x63\x21\
|
||||
\x00\x1e\xaa\x78\x9c\xed\x59\x6d\x6f\xdb\x36\x10\xfe\x9e\x5f\x41\
|
||||
\xe8\xd3\x06\x6c\x95\xed\xd8\x6e\x13\xc8\x2a\xd6\x74\x79\x01\x5a\
|
||||
\x2c\x81\xd3\xe6\xe3\x20\x4b\x67\x8b\xab\x24\x7a\x24\x95\xd8\xfd\
|
||||
\xf5\x3d\x92\x92\x65\xbd\x58\x89\x63\x27\x01\x82\x00\x31\x22\xf2\
|
||||
\x4e\xc7\xe3\xc3\xe3\xa3\x3b\xd2\xf9\xb8\x88\x23\x72\x0b\x5c\x50\
|
||||
\x96\x8c\xac\xee\xbb\x8e\x45\x20\xf1\x59\x40\x93\xd9\xc8\xfa\x76\
|
||||
\x7d\xfa\xe7\x07\xeb\xa3\x7b\xe0\xa4\xb4\x50\xea\xa3\x92\x7b\x40\
|
||||
\x1c\x3f\xf2\x84\x70\xcf\x52\x7a\x7c\xfc\x99\x7a\x11\x9b\xe1\xff\
|
||||
\x68\x36\x06\x29\xf1\x65\xf1\x17\xf7\x43\xc7\x36\x3a\xa8\x7c\x47\
|
||||
\x83\x19\x48\xa2\xdb\x23\xeb\xea\x46\x37\x2d\x92\x78\x31\x8c\xac\
|
||||
\x36\x1b\x6a\x28\xe2\xcc\x39\x9b\x03\x97\xcb\xec\x85\x19\xb0\x18\
|
||||
\x24\x5f\x6a\x21\x71\x38\xf8\x52\x3f\x11\x67\xe1\x76\x1c\x7b\x91\
|
||||
\x35\x96\xaa\xb1\xcc\x1a\xe8\x81\x0c\xdd\xc1\xfb\x81\x63\x9b\x47\
|
||||
\xd3\x1d\x02\x9d\x85\xd2\x1d\xf6\x8e\x1c\x3b\x7b\xd6\x36\xed\xdc\
|
||||
\xa8\x63\xe7\x83\x37\x79\x72\x47\x93\x80\xdd\x5d\x53\x19\x41\xe6\
|
||||
\x8c\x90\x1c\x7d\x77\xcf\x20\x01\xee\x45\x44\x64\x73\x71\xec\x4c\
|
||||
\x50\x37\x19\x79\x4b\x96\x16\xd8\x7c\xff\xc4\x16\x5f\x74\x57\x66\
|
||||
\xb1\x32\xa4\x98\x7b\x3e\x1a\xb2\xb2\x09\x24\x69\x3c\x01\xee\x0e\
|
||||
\x1d\x3b\x7b\x32\xee\xaf\x8f\x50\x33\x11\x7b\x7c\x46\x93\x8a\x85\
|
||||
\xa3\x56\x0b\x54\x42\x5c\x20\xb9\xbe\x96\x67\x9c\xa5\x73\xf4\x39\
|
||||
\x5f\xcd\x59\xde\x36\xea\xb5\xc1\x65\x01\x56\x03\x5e\x6a\xcd\xc9\
|
||||
\xb8\x01\xb4\xba\x4f\xad\xd0\x65\x83\x61\xd4\x4a\xea\x7b\x91\xe9\
|
||||
\xfd\xb7\x57\x8c\x5b\x4c\xa8\xc1\xd0\x79\xcd\x50\xc8\x38\xfd\xc9\
|
||||
\x12\xd9\x60\xaa\x6a\xac\x0e\xd1\x17\x6f\x02\x51\x6e\x29\x52\x8d\
|
||||
\xd2\xeb\x0d\x18\xc1\x42\x96\x14\x56\x38\x7d\x86\xa9\x97\x46\x68\
|
||||
\x9a\x45\x8c\x93\x29\xfe\xee\xbc\x28\xaa\x22\xd5\x0c\x97\xe9\x34\
|
||||
\xbe\xad\x39\x6f\x97\xbd\xaf\x4d\x46\x05\x1c\xf0\x1a\x0e\x63\xdd\
|
||||
\xdd\x3a\x0d\xd4\x05\x54\x95\xc8\x1b\x95\xd9\x00\x86\x9a\x7b\x25\
|
||||
\x8f\x8f\xcf\x57\xf6\x1c\x5b\x77\xde\x37\x81\xfa\x7e\xa0\x3f\xe1\
|
||||
\x9c\x26\xb8\x52\x42\x06\xb8\xdd\x46\x56\xa7\x0a\x1d\x6a\x94\x7a\
|
||||
\x72\x36\xe8\x77\x4a\x64\xb0\x92\x66\x44\xd0\xeb\x94\x38\xa1\x70\
|
||||
\xab\x6a\x70\x03\xd2\x06\xb8\x2d\x90\x2e\x87\x8d\xa6\xc5\x4b\x0e\
|
||||
\xd3\x13\xb5\xd6\x9f\x52\x29\x11\xc6\x7c\x93\x29\xd9\x1c\x65\x3a\
|
||||
\x0e\x26\x46\xd6\x1a\x51\x8c\x45\xd7\x74\xde\x1c\x54\xd7\x21\x15\
|
||||
\x04\xff\x64\x08\x24\xa8\x05\x58\x02\x77\xe4\x06\x83\x8c\xb0\xc9\
|
||||
\x7f\x48\x8a\x0f\x8f\xb5\x9a\x13\xda\x66\xc5\x05\xdd\x57\xc1\x9f\
|
||||
\x43\xe0\xf6\x06\x03\x45\xc2\x41\x45\x34\xe3\x00\x89\xdb\x3d\xc2\
|
||||
\xa5\x31\x8f\x65\xf1\x24\x4a\xc1\xed\xbe\x47\xa9\x7e\x2a\x2f\x5b\
|
||||
\x6d\xa8\x87\x79\xad\x60\xfe\x3b\x51\x9f\x9b\x8d\x11\xe6\x67\x88\
|
||||
\x28\x98\xf4\x6a\xe1\x60\x8f\x05\x49\x0d\x77\xe9\xc9\xf0\xfe\xd1\
|
||||
\xbe\xb2\xc0\xce\xbe\xb3\xfb\xda\xfd\x8e\x6d\x98\x70\x45\x93\x25\
|
||||
\xf1\xae\xa4\xb9\x13\x65\xee\x8d\x30\x51\x90\xfa\x32\xe5\xf0\x72\
|
||||
\xac\x79\x0f\xfd\xbf\xf1\xe6\x73\xf2\xe6\x7d\xdf\xe2\xdd\x98\x73\
|
||||
\x9c\x47\xdb\xf3\xd2\x67\x77\xd0\x69\xa1\xcf\xe1\x51\x1b\x7d\x7e\
|
||||
\x18\xbe\x10\x7d\xae\xb0\x7a\xe3\xd0\xcd\x89\xe7\x70\xb7\xc4\x73\
|
||||
\xb0\xbf\xc4\x53\xd7\x3e\x2f\x48\xa2\xfd\x37\x12\xdd\x8c\xf5\x73\
|
||||
\x93\xe8\x61\xeb\x62\x6c\x43\x5d\x83\xa3\x16\xe6\x3a\xec\xb5\x31\
|
||||
\x57\xff\xa5\x98\xeb\x46\xef\x85\xd7\x4b\x5b\x65\x61\xc9\xd6\x9a\
|
||||
\xde\x23\x4e\x09\x8a\x8f\xef\xc3\xce\x09\x2e\x4e\x4f\x08\x8d\xe7\
|
||||
\x8c\xcb\x7d\x1f\x0e\xec\xef\x68\x60\xf0\x70\x86\x2e\xb6\x59\x08\
|
||||
\xfe\x8f\x75\x7c\x56\x7b\x4c\x09\x26\xc5\x71\x4a\x33\x56\x6d\x39\
|
||||
\xca\xc5\x14\xd3\x13\x93\xa6\x68\x63\x10\xfc\xa1\xf3\x15\x84\xf2\
|
||||
\x9f\x39\x24\xe3\x10\xb0\xb6\x33\x98\x82\x62\x75\x6c\x4d\x80\xa4\
|
||||
\x42\xe9\x61\x3d\xc3\x90\xe7\x67\x44\xb2\x4c\x85\xc4\x8c\xeb\x77\
|
||||
\x89\x5c\xce\xb7\x48\xa1\xb7\xf8\xd4\x7c\x13\x55\xe7\xa6\xc4\xbb\
|
||||
\xf5\x28\x7e\xc0\x22\x78\xfc\x80\x5b\x6c\x67\x9c\xfc\xc5\xd4\x5f\
|
||||
\x39\xf0\x2a\xb7\xf4\xee\x71\x7e\xf8\x14\x71\xbe\x4b\x36\x7e\xc2\
|
||||
\xc1\x93\x20\x88\x26\x17\xa1\x93\x14\xf0\xfc\xd0\x1c\x2a\x9a\xf4\
|
||||
\x5b\x47\xed\x53\x04\xad\x26\x38\xcc\x8e\x70\x93\x24\x98\x77\x08\
|
||||
\x32\x59\xee\xba\x43\xb6\x08\x58\x5f\xcf\x1c\x63\x56\xbb\x21\xde\
|
||||
\x02\xb6\x31\x60\xfb\x4f\x12\xb0\xed\x99\xcf\xe6\x88\xb9\x30\x7c\
|
||||
\x3a\x4d\x79\x42\x75\x81\xf8\x9b\xef\x25\x24\xf6\x7e\x80\xa6\xe7\
|
||||
\x98\x05\x10\x91\x10\xbc\xdb\xe5\xef\xcf\x12\x43\x86\xdf\x31\x86\
|
||||
\x4e\x73\x8f\x5e\x65\x18\x6d\x9f\xca\x94\xaa\x90\x3c\x69\x28\x1f\
|
||||
\x7f\x3f\xa4\xf8\x28\xea\x8e\xef\x99\x8d\x52\xd5\x51\x4f\x60\xb6\
|
||||
\xa8\x35\xca\x65\x46\x56\x61\xf4\x6a\x15\x46\x5e\x5c\xf4\x6b\xc5\
|
||||
\x45\xa9\xae\xa8\xba\x52\xaa\x26\x0a\x90\xd6\x90\x5c\x83\x31\xdb\
|
||||
\x97\xf9\x69\x48\x76\x5d\x35\xb2\x86\x16\x31\xf7\x4e\x23\xab\xdb\
|
||||
\xb5\x6c\xa5\x39\xa7\x8b\xd8\x9b\x4f\xd3\xc4\x57\x40\xb9\xff\x5f\
|
||||
\xea\xf6\x29\x67\xf1\x57\x1a\xc3\x98\xa5\xdc\xc7\x18\xac\x68\xa9\
|
||||
\xab\xc7\x54\x48\x16\x9b\x11\x85\xf6\x64\xbd\xc7\x78\xb9\x76\x3d\
|
||||
\xb9\x56\xc2\x14\x57\x92\x6a\x3d\x16\x12\x92\x40\xb8\x57\x97\xa9\
|
||||
\x08\x73\x79\xde\x79\x60\xe0\xf2\x02\x9c\x36\x5a\xb1\xcd\x95\xa5\
|
||||
\x78\x17\x2a\xe4\x74\xaf\x46\xa0\x3a\x70\xbb\x27\x95\x82\xaa\xd1\
|
||||
\x9b\xba\xcb\x9b\x5c\x52\xd6\xf6\xe7\x56\xc6\x73\xcd\x08\x15\xd2\
|
||||
\xdd\x9d\x29\x77\xe8\xeb\x61\x0e\x42\x2f\xb6\xd0\x61\xe1\xb3\x24\
|
||||
\x01\xbd\xd8\xaa\xed\xd8\x29\x75\x0f\x7e\x01\x09\x6b\xe1\xfc\
|
||||
\x00\x00\x07\x4c\
|
||||
\x00\
|
||||
\x00\x29\xd1\x78\x9c\xed\x59\x5b\x8f\xe2\x46\x16\x7e\xef\x5f\xe1\
|
||||
|
@ -9867,6 +10214,10 @@ qt_resource_name = "\
|
|||
\x00\x41\
|
||||
\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x66\x00\x72\x00\x2e\x00\x71\x00\x6d\
|
||||
\x00\x0a\
|
||||
\x0e\x6f\xe4\x5d\
|
||||
\x00\x41\
|
||||
\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x70\x00\x6c\x00\x2e\x00\x71\x00\x6d\
|
||||
\x00\x0a\
|
||||
\x0e\x69\x64\x5d\
|
||||
\x00\x41\
|
||||
\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x69\x00\x74\x00\x2e\x00\x71\x00\x6d\
|
||||
|
@ -10031,50 +10382,51 @@ qt_resource_name = "\
|
|||
|
||||
qt_resource_struct = "\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2c\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x14\
|
||||
\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x10\x00\x00\x00\x04\
|
||||
\x00\x00\x01\xbe\x00\x00\x00\x00\x00\x01\x00\x01\x4b\x12\
|
||||
\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2d\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x15\
|
||||
\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x11\x00\x00\x00\x04\
|
||||
\x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x01\x60\x78\
|
||||
\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x55\x20\
|
||||
\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x01\x00\x00\x26\xb4\
|
||||
\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x01\x34\xf6\
|
||||
\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x83\xa2\
|
||||
\x00\x00\x01\xbe\x00\x00\x00\x00\x00\x01\x00\x01\x4a\x5c\
|
||||
\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x99\x08\
|
||||
\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xf6\
|
||||
\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x00\xc5\x12\
|
||||
\x00\x00\x01\x56\x00\x00\x00\x00\x00\x01\x00\x00\xf1\xa2\
|
||||
\x00\x00\x01\x3c\x00\x00\x00\x00\x00\x01\x00\x00\xdb\x3a\
|
||||
\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x99\x06\
|
||||
\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\xaf\x16\
|
||||
\x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x7e\
|
||||
\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x01\x1e\xd2\
|
||||
\x00\x00\x01\x3c\x00\x00\x00\x00\x00\x01\x00\x00\xda\x78\
|
||||
\x00\x00\x01\x56\x00\x00\x00\x00\x00\x01\x00\x00\xf0\xa0\
|
||||
\x00\x00\x01\x70\x00\x00\x00\x00\x00\x01\x00\x01\x07\x08\
|
||||
\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\xae\x6c\
|
||||
\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x00\xc4\x7c\
|
||||
\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x81\xe4\
|
||||
\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x01\x34\x38\
|
||||
\x00\x00\x00\x86\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x30\
|
||||
\x00\x00\x01\x70\x00\x00\x00\x00\x00\x01\x00\x01\x08\x08\
|
||||
\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x01\x1d\x6e\
|
||||
\x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x7e\
|
||||
\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x05\x12\x00\x01\x00\x00\x00\x01\x00\x02\x2d\xc6\
|
||||
\x00\x00\x04\x1e\x00\x00\x00\x00\x00\x01\x00\x01\xef\xf7\
|
||||
\x00\x00\x02\xfc\x00\x00\x00\x00\x00\x01\x00\x01\xa1\x85\
|
||||
\x00\x00\x05\xb2\x00\x01\x00\x00\x00\x01\x00\x02\x59\x58\
|
||||
\x00\x00\x04\xe4\x00\x01\x00\x00\x00\x01\x00\x02\x26\xf4\
|
||||
\x00\x00\x03\x36\x00\x01\x00\x00\x00\x01\x00\x01\xaf\xf4\
|
||||
\x00\x00\x03\x88\x00\x01\x00\x00\x00\x01\x00\x01\xc3\x7b\
|
||||
\x00\x00\x02\xa0\x00\x01\x00\x00\x00\x01\x00\x01\x86\xe5\
|
||||
\x00\x00\x04\x5e\x00\x00\x00\x00\x00\x01\x00\x02\x09\xd1\
|
||||
\x00\x00\x02\x7e\x00\x01\x00\x00\x00\x01\x00\x01\x7d\xec\
|
||||
\x00\x00\x03\x64\x00\x01\x00\x00\x00\x01\x00\x01\xb9\x4c\
|
||||
\x00\x00\x02\x34\x00\x01\x00\x00\x00\x01\x00\x01\x6d\x44\
|
||||
\x00\x00\x02\x5e\x00\x01\x00\x00\x00\x01\x00\x01\x76\xec\
|
||||
\x00\x00\x04\x8e\x00\x01\x00\x00\x00\x01\x00\x02\x19\x3f\
|
||||
\x00\x00\x03\xf4\x00\x00\x00\x00\x00\x01\x00\x01\xdf\x76\
|
||||
\x00\x00\x04\xbc\x00\x01\x00\x00\x00\x01\x00\x02\x1e\x8f\
|
||||
\x00\x00\x05\x3c\x00\x00\x00\x00\x00\x01\x00\x02\x34\xa1\
|
||||
\x00\x00\x03\xac\x00\x01\x00\x00\x00\x01\x00\x01\xc8\x92\
|
||||
\x00\x00\x05\x86\x00\x01\x00\x00\x00\x01\x00\x02\x50\xde\
|
||||
\x00\x00\x05\x66\x00\x01\x00\x00\x00\x01\x00\x02\x46\xa4\
|
||||
\x00\x00\x04\x3e\x00\x01\x00\x00\x00\x01\x00\x02\x03\xb9\
|
||||
\x00\x00\x02\xd2\x00\x00\x00\x00\x00\x01\x00\x01\x8f\x27\
|
||||
\x00\x00\x03\xd6\x00\x00\x00\x00\x00\x01\x00\x01\xd0\x7a\
|
||||
\x00\x00\x02\x00\x00\x01\x00\x00\x00\x01\x00\x01\x65\xf4\
|
||||
\x00\x00\x01\xd8\x00\x01\x00\x00\x00\x01\x00\x01\x61\x46\
|
||||
\x00\x00\x05\x2c\x00\x01\x00\x00\x00\x01\x00\x02\x43\x52\
|
||||
\x00\x00\x04\x38\x00\x00\x00\x00\x00\x01\x00\x02\x05\x83\
|
||||
\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x11\
|
||||
\x00\x00\x05\xcc\x00\x01\x00\x00\x00\x01\x00\x02\x6e\xe4\
|
||||
\x00\x00\x04\xfe\x00\x01\x00\x00\x00\x01\x00\x02\x3c\x80\
|
||||
\x00\x00\x03\x50\x00\x01\x00\x00\x00\x01\x00\x01\xc5\x80\
|
||||
\x00\x00\x03\xa2\x00\x01\x00\x00\x00\x01\x00\x01\xd9\x07\
|
||||
\x00\x00\x02\xba\x00\x01\x00\x00\x00\x01\x00\x01\x9c\x71\
|
||||
\x00\x00\x04\x78\x00\x00\x00\x00\x00\x01\x00\x02\x1f\x5d\
|
||||
\x00\x00\x02\x98\x00\x01\x00\x00\x00\x01\x00\x01\x93\x78\
|
||||
\x00\x00\x03\x7e\x00\x01\x00\x00\x00\x01\x00\x01\xce\xd8\
|
||||
\x00\x00\x02\x4e\x00\x01\x00\x00\x00\x01\x00\x01\x82\xd0\
|
||||
\x00\x00\x02\x78\x00\x01\x00\x00\x00\x01\x00\x01\x8c\x78\
|
||||
\x00\x00\x04\xa8\x00\x01\x00\x00\x00\x01\x00\x02\x2e\xcb\
|
||||
\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xf5\x02\
|
||||
\x00\x00\x04\xd6\x00\x01\x00\x00\x00\x01\x00\x02\x34\x1b\
|
||||
\x00\x00\x05\x56\x00\x00\x00\x00\x00\x01\x00\x02\x4a\x2d\
|
||||
\x00\x00\x03\xc6\x00\x01\x00\x00\x00\x01\x00\x01\xde\x1e\
|
||||
\x00\x00\x05\xa0\x00\x01\x00\x00\x00\x01\x00\x02\x66\x6a\
|
||||
\x00\x00\x05\x80\x00\x01\x00\x00\x00\x01\x00\x02\x5c\x30\
|
||||
\x00\x00\x04\x58\x00\x01\x00\x00\x00\x01\x00\x02\x19\x45\
|
||||
\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x01\xa4\xb3\
|
||||
\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x01\xe6\x06\
|
||||
\x00\x00\x02\x1a\x00\x01\x00\x00\x00\x01\x00\x01\x7b\x80\
|
||||
\x00\x00\x01\xf2\x00\x01\x00\x00\x00\x01\x00\x01\x76\xac\
|
||||
"
|
||||
|
||||
def qInitResources():
|
||||
|
|
|
@ -165,20 +165,17 @@
|
|||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="gui::prefcheckbox_2">
|
||||
<widget class="Gui::PrefCheckBox" name="gui::prefcheckbox">
|
||||
<property name="toolTip">
|
||||
<string>if this is checked, the internal Arch IFC parser will be use to build Arch objects from known IFC types.</string>
|
||||
<string>If this is checked, the IFCOpenShell importer will be used, allowing to import more IFC types</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>use internal IFC parser</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
<string>Use IFCOpenShell if available</string>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>useIfcParser</cstring>
|
||||
<cstring>useIfcOpenShell</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Arch</cstring>
|
||||
|
@ -188,17 +185,34 @@
|
|||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="gui::prefcheckbox">
|
||||
<widget class="Gui::PrefCheckBox" name="gui::prefcheckbox_2">
|
||||
<property name="toolTip">
|
||||
<string>If this is checked, the IFCOpenShell importer will be used for objects not handled by the internal parser</string>
|
||||
<string>Creates groups for each Arch object type</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Use IFCOpenShell</string>
|
||||
<string>Group components by types</string>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>useIfcOpenShell</cstring>
|
||||
<cstring>createIfcGroups</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Arch</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="gui::prefcheckbox_3">
|
||||
<property name="text">
|
||||
<string>Import furniture (can make the model heavy)</string>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>importIfcFurniture</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Arch</cstring>
|
||||
|
|
|
@ -21,16 +21,18 @@
|
|||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import ifcReader, FreeCAD, Arch, Draft, os, sys, time, tempfile, Part
|
||||
import ifcReader, FreeCAD, Arch, Draft, os, sys, time, Part
|
||||
from draftlibs import fcvec
|
||||
|
||||
__title__="FreeCAD IFC importer"
|
||||
__author__ = "Yorik van Havre"
|
||||
__url__ = "http://free-cad.sourceforge.net"
|
||||
|
||||
# config
|
||||
DEBUG = True
|
||||
SCHEMA = "http://www.steptools.com/support/stdev_docs/express/ifc2x3/ifc2x3_tc1.exp"
|
||||
SKIP = ["IfcOpeningElement"]
|
||||
SKIP = ["IfcOpeningElement","IfcSpace"]
|
||||
# end config
|
||||
|
||||
if open.__module__ == '__builtin__':
|
||||
pyopen = open # because we'll redefine open below
|
||||
|
@ -41,13 +43,15 @@ def open(filename):
|
|||
doc = FreeCAD.newDocument(docname)
|
||||
doc.Label = decode(docname)
|
||||
FreeCAD.ActiveDocument = doc
|
||||
global createIfcGroups, useIfcOpenShell, importIfcFurniture
|
||||
createIfcGroups = useIfcOpenShell = importIfcFurniture = False
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch")
|
||||
op = p.GetBool("useIfcOpenShell")
|
||||
ip = p.GetBool("useIfcParser")
|
||||
if op:
|
||||
readOpenShell(filename,useParser=ip)
|
||||
else:
|
||||
readInternal(filename)
|
||||
useIfcOpenShell = p.GetBool("useIfcOpenShell")
|
||||
createIfcGroups = p.GetBool("createIfcGroups")
|
||||
importIfcFurniture = p.GetBool("importIfcFurniture")
|
||||
if not importIfcFurniture:
|
||||
SKIP.append("IfcFurnishingElement")
|
||||
read(filename)
|
||||
return doc
|
||||
|
||||
def decode(name):
|
||||
|
@ -85,47 +89,72 @@ def getIfcOpenShell():
|
|||
else:
|
||||
return True
|
||||
|
||||
def readOpenShell(filename,useParser=False):
|
||||
def read(filename):
|
||||
"Parses an IFC file with IfcOpenShell"
|
||||
|
||||
altifc = None
|
||||
if useParser:
|
||||
altifc = parseFile(filename)
|
||||
# parsing the IFC file
|
||||
t1 = time.time()
|
||||
schema=getSchema()
|
||||
if schema:
|
||||
if DEBUG: global ifc
|
||||
if DEBUG: print "opening",filename,"..."
|
||||
ifc = ifcReader.IfcDocument(filename,schema=schema,debug=DEBUG)
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning("IFC Schema not found, IFC import disabled.\n")
|
||||
return None
|
||||
t2 = time.time()
|
||||
if DEBUG: print "Successfully loaded",ifc,"in %s s" % ((t2-t1))
|
||||
|
||||
if getIfcOpenShell():
|
||||
USESHAPES = False
|
||||
if useIfcOpenShell and getIfcOpenShell():
|
||||
# use the IfcOpenShell parser
|
||||
|
||||
useShapes = False
|
||||
if hasattr(IfcImport,"USE_BREP_DATA"):
|
||||
IfcImport.Settings(IfcImport.USE_BREP_DATA,True)
|
||||
USESHAPES = True
|
||||
useShapes = True
|
||||
if IfcImport.Init(filename):
|
||||
while True:
|
||||
|
||||
obj = IfcImport.Get()
|
||||
if DEBUG: print "parsing ",obj.id,": ",obj.name," of type ",obj.type
|
||||
meshdata = []
|
||||
n = obj.name
|
||||
if not n: n = "Unnamed"
|
||||
|
||||
# retrieving name
|
||||
n = obj.name
|
||||
if not n:
|
||||
n = "Unnamed"
|
||||
|
||||
# build shape
|
||||
shape = None
|
||||
if useShapes:
|
||||
shape = getShape(obj)
|
||||
|
||||
# skip types
|
||||
if obj.type in SKIP:
|
||||
pass
|
||||
|
||||
# walls
|
||||
elif altifc and (obj.type == "IfcWallStandardCase"):
|
||||
makeWall(altifc.Entities[obj.id],shape = getShape(obj) if USESHAPES else None)
|
||||
elif obj.type == "IfcWallStandardCase":
|
||||
makeWall(ifc.Entities[obj.id],shape)
|
||||
|
||||
# windows
|
||||
elif altifc and (obj.type in ["IfcWindow","IfcDoor"]):
|
||||
makeWindow(altifc.Entities[obj.id],shape = getShape(obj) if USESHAPES else None)
|
||||
elif obj.type in ["IfcWindow","IfcDoor"]:
|
||||
makeWindow(ifc.Entities[obj.id],shape)
|
||||
|
||||
# structs
|
||||
elif altifc and (obj.type in ["IfcBeam","IfcColumn","IfcSlab"]):
|
||||
makeStructure(altifc.Entities[obj.id],shape = getShape(obj) if USESHAPES else None)
|
||||
elif obj.type in ["IfcBeam","IfcColumn","IfcSlab"]:
|
||||
makeStructure(ifc.Entities[obj.id],shape)
|
||||
|
||||
# furniture
|
||||
elif obj.type == "IfcFurnishingElement":
|
||||
nobj = FreeCAD.ActiveDocument.addObject("Part::Feature","Furniture")
|
||||
nobj.Shape = shape
|
||||
|
||||
elif USESHAPES:
|
||||
# treat as Parts
|
||||
sh = getShape(obj)
|
||||
elif shape:
|
||||
# treat as dumb parts
|
||||
nobj = FreeCAD.ActiveDocument.addObject("Part::Feature",n)
|
||||
nobj.Shape = sh
|
||||
nobj.Shape = shape
|
||||
|
||||
else:
|
||||
# treat as meshes
|
||||
me,pl = getMesh(obj)
|
||||
|
@ -135,59 +164,49 @@ def readOpenShell(filename,useParser=False):
|
|||
|
||||
if not IfcImport.Next():
|
||||
break
|
||||
if altifc:
|
||||
order(altifc)
|
||||
IfcImport.CleanUp()
|
||||
return None
|
||||
|
||||
def readInternal(filename):
|
||||
"processes an ifc file and add its objects to the given document"
|
||||
t1 = time.time()
|
||||
ifc = parseFile(filename)
|
||||
t2 = time.time()
|
||||
if DEBUG: print "Successfully loaded",ifc,"in %s s" % ((t2-t1))
|
||||
# getting walls
|
||||
for w in ifc.getEnt("IFCWALLSTANDARDCASE"):
|
||||
makeWall(w)
|
||||
# getting windows and doors
|
||||
for w in (ifc.getEnt("IFCWINDOW") + ifc.getEnt("IFCDOOR")):
|
||||
makeWindow(w)
|
||||
# getting structs
|
||||
for w in (ifc.getEnt("IFCSLAB") + ifc.getEnt("IFCBEAM") + ifc.getEnt("IFCCOLUMN")):
|
||||
makeWindow(w)
|
||||
|
||||
IfcImport.CleanUp()
|
||||
|
||||
else:
|
||||
# use the internal python parser
|
||||
|
||||
# getting walls
|
||||
for w in ifc.getEnt("IfcWallStandardCase"):
|
||||
makeWall(w)
|
||||
|
||||
# getting windows and doors
|
||||
for w in (ifc.getEnt("IfcWindow") + ifc.getEnt("IfcDoor")):
|
||||
makeWindow(w)
|
||||
|
||||
# getting structs
|
||||
for w in (ifc.getEnt("IfcSlab") + ifc.getEnt("IfcBeam") + ifc.getEnt("IfcColumn")):
|
||||
makeStructure(w)
|
||||
|
||||
order(ifc)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
t3 = time.time()
|
||||
if DEBUG: print "done processing",ifc,"in %s s" % ((t3-t1))
|
||||
|
||||
|
||||
return None
|
||||
|
||||
def order(ifc):
|
||||
"orders the already generated elements by building and by floor"
|
||||
|
||||
# getting floors
|
||||
for f in ifc.getEnt("IFCBUILDINGSTOREY"):
|
||||
makeCell(f,"Floor")
|
||||
for f in ifc.getEnt("IfcBuildingStorey"):
|
||||
group(f,"Floor")
|
||||
# getting buildings
|
||||
for b in ifc.getEnt("IFCBUILDING"):
|
||||
makeCell(b,"Building")
|
||||
for b in ifc.getEnt("IfcBuilding"):
|
||||
group(b,"Building")
|
||||
# getting sites
|
||||
for s in ifc.getEnt("IFCSITE"):
|
||||
makeCell(s,"Site")
|
||||
for s in ifc.getEnt("IfcSite"):
|
||||
group(s,"Site")
|
||||
|
||||
def parseFile(filename):
|
||||
"parses an IFC file"
|
||||
schema=getSchema()
|
||||
if schema:
|
||||
if DEBUG: global ifc
|
||||
if DEBUG: print "opening",filename,"..."
|
||||
ifc = ifcReader.IfcDocument(filename,schema=schema,debug=DEBUG)
|
||||
return ifc
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning("IFC Schema not found, IFC import disabled.\n")
|
||||
return None
|
||||
|
||||
def makeCell(entity,mode="Cell"):
|
||||
"makes a cell in the freecad document"
|
||||
def group(entity,mode=None):
|
||||
"gathers the children of the given entity"
|
||||
|
||||
try:
|
||||
if DEBUG: print "=====> making cell",entity.id
|
||||
if DEBUG: print "=====> making group",entity.id
|
||||
placement = None
|
||||
placement = getPlacement(entity.ObjectPlacement)
|
||||
if DEBUG: print "got cell placement",entity.id,":",placement
|
||||
|
@ -208,37 +227,50 @@ def makeCell(entity,mode="Cell"):
|
|||
if not isinstance(s,list): s = [s]
|
||||
elts.extend(s)
|
||||
print "found dependent elements: ",elts
|
||||
fcelts = []
|
||||
|
||||
groups = [['Wall','IfcWallStandardCase',[]],
|
||||
['Window','IfcWindow',[]],
|
||||
['Door','IfcDoor',[]],
|
||||
['Slab','IfcSlab',[]],
|
||||
['Beam','IfcBeam',[]],
|
||||
['Column','IfcColumn',[]],
|
||||
['Floor','IfcBuildingStorey',[]],
|
||||
['Building','IfcBuilding',[]],
|
||||
['Furniture','IfcFurnishingElement',[]]]
|
||||
|
||||
for e in elts:
|
||||
if e.type == "IFCWALLSTANDARDCASE":
|
||||
o = FreeCAD.ActiveDocument.getObject("Wall"+str(e.id))
|
||||
elif e.type == "IFCWINDOW":
|
||||
o = FreeCAD.ActiveDocument.getObject("Window"+str(e.id))
|
||||
elif e.type == "IFCDOOR":
|
||||
o = FreeCAD.ActiveDocument.getObject("Door"+str(e.id))
|
||||
elif e.type == "IFCSLAB":
|
||||
o = FreeCAD.ActiveDocument.getObject("Slab"+str(e.id))
|
||||
elif e.type == "IFCBEAM":
|
||||
o = FreeCAD.ActiveDocument.getObject("Beam"+str(e.id))
|
||||
elif e.type == "IFCCOLUMN":
|
||||
o = FreeCAD.ActiveDocument.getObject("Column"+str(e.id))
|
||||
elif e.type == "IFCBUILDINGSTOREY":
|
||||
o = FreeCAD.ActiveDocument.getObject("Floor"+str(e.id))
|
||||
elif e.type == "IFCBUILDING":
|
||||
o = FreeCAD.ActiveDocument.getObject("Building"+str(e.id))
|
||||
if o:
|
||||
fcelts.append(o)
|
||||
name = mode+str(entity.id)
|
||||
if mode == "Site":
|
||||
cell = Arch.makeSite(fcelts,name=name)
|
||||
elif mode == "Floor":
|
||||
cell = Arch.makeFloor(fcelts,join=False,name=name)
|
||||
elif mode == "Building":
|
||||
cell = Arch.makeBuilding(fcelts,name=name)
|
||||
for g in groups:
|
||||
if e.type.upper() == g[1].upper():
|
||||
o = FreeCAD.ActiveDocument.getObject(g[0] + str(e.id))
|
||||
if o:
|
||||
g[2].append(o)
|
||||
print "groups:",groups
|
||||
|
||||
comps = []
|
||||
if createIfcGroups:
|
||||
if DEBUG: print "creating subgroups"
|
||||
for g in groups:
|
||||
if g[2]:
|
||||
if g[0] in ['Building','Floor']:
|
||||
comps.extend(g[2])
|
||||
else:
|
||||
fcg = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroup",g[0]+"s")
|
||||
for o in g[2]:
|
||||
fcg.addObject(o)
|
||||
comps.append(fcg)
|
||||
else:
|
||||
cell = Arch.makeCell(fcelts,join=False,name=name)
|
||||
for g in groups:
|
||||
comps.extend(g[2])
|
||||
|
||||
name = mode + str(entity.id)
|
||||
if mode == "Site":
|
||||
cell = Arch.makeSite(comps,name=name)
|
||||
elif mode == "Floor":
|
||||
cell = Arch.makeFloor(comps,name=name)
|
||||
elif mode == "Building":
|
||||
cell = Arch.makeBuilding(comps,name=name)
|
||||
except:
|
||||
if DEBUG: print "error: skipping cell",entity.id
|
||||
if DEBUG: print "error: skipping group ",entity.id
|
||||
|
||||
def makeWall(entity,shape=None):
|
||||
"makes a wall in the freecad document"
|
||||
|
|
|
@ -171,6 +171,16 @@ def getType(obj):
|
|||
return "Group"
|
||||
return "Unknown"
|
||||
|
||||
def get3DView():
|
||||
"get3DView(): returns the current view if it is 3D, or the first 3D view found, or None"
|
||||
v = FreeCADGui.ActiveDocument.ActiveView
|
||||
if str(type(v)) == "<type 'View3DInventorPy'>":
|
||||
return v
|
||||
v = FreeCADGui.ActiveDocument.mdiViewsOfType("Gui::View3DInventor")
|
||||
if v:
|
||||
return v[0]
|
||||
return None
|
||||
|
||||
def isClone(obj,objtype):
|
||||
"""isClone(obj,objtype): returns True if the given object is
|
||||
a clone of an object of the given type"""
|
||||
|
@ -1172,21 +1182,17 @@ def draftify(objectslist,makeblock=False):
|
|||
return newobjlist[0]
|
||||
return newobjlist
|
||||
|
||||
def getSVG(obj,modifier=100,textmodifier=100,fillstyle="shape color",direction=None):
|
||||
'''getSVG(object,[modifier],[textmodifier],[fillstyle],[direction]):
|
||||
returns a string containing a SVG representation of the given object. the modifier attribute
|
||||
specifies a scale factor for linewidths in %, and textmodifier specifies
|
||||
a scale factor for texts, in % (both default = 100). You can also supply
|
||||
an arbitrary projection vector.'''
|
||||
def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direction=None):
|
||||
'''getSVG(object,[scale], [linewidth],[fontsize],[fillstyle],[direction]):
|
||||
returns a string containing a SVG representation of the given object,
|
||||
with the given linewidth and fontsize (used if the given object contains
|
||||
any text). You can also supply an arbitrary projection vector. the
|
||||
scale parameter allows to scale linewidths down, so they are resolution-independant.'''
|
||||
import Part
|
||||
from draftlibs import fcgeo
|
||||
svg = ""
|
||||
tmod = ((textmodifier-100)/2)+100
|
||||
if tmod == 0: tmod = 0.01
|
||||
modifier = 200-modifier
|
||||
if modifier == 0: modifier = 0.01
|
||||
pmod = (200-textmodifier)/20
|
||||
if pmod == 0: pmod = 0.01
|
||||
linewidth = linewidth/scale
|
||||
fontsize = (fontsize/scale)/2
|
||||
plane = None
|
||||
if direction:
|
||||
if direction != Vector(0,0,0):
|
||||
|
@ -1259,8 +1265,8 @@ def getSVG(obj,modifier=100,textmodifier=100,fillstyle="shape color",direction=N
|
|||
if fill != 'none': svg += 'Z'
|
||||
svg += '" '
|
||||
svg += 'stroke="' + stroke + '" '
|
||||
svg += 'stroke-width="' + str(width) + ' px" '
|
||||
svg += 'style="stroke-width:'+ str(width)
|
||||
svg += 'stroke-width="' + str(linewidth) + ' px" '
|
||||
svg += 'style="stroke-width:'+ str(linewidth)
|
||||
svg += ';stroke-miterlimit:4'
|
||||
svg += ';stroke-dasharray:' + lstyle
|
||||
svg += ';fill:' + fill + '"'
|
||||
|
@ -1274,8 +1280,8 @@ def getSVG(obj,modifier=100,textmodifier=100,fillstyle="shape color",direction=N
|
|||
svg += '" cy="' + str(cen.y)
|
||||
svg += '" r="' + str(rad)+'" '
|
||||
svg += 'stroke="' + stroke + '" '
|
||||
svg += 'stroke-width="' + str(width) + ' px" '
|
||||
svg += 'style="stroke-width:'+ str(width)
|
||||
svg += 'stroke-width="' + str(linewidth) + ' px" '
|
||||
svg += 'style="stroke-width:'+ str(linewidth)
|
||||
svg += ';stroke-miterlimit:4'
|
||||
svg += ';stroke-dasharray:' + lstyle
|
||||
svg += ';fill:' + fill + '"'
|
||||
|
@ -1319,35 +1325,36 @@ def getSVG(obj,modifier=100,textmodifier=100,fillstyle="shape color",direction=N
|
|||
svg += 'L '+str(p4.x)+' '+str(p4.y)+'" '
|
||||
svg += 'fill="none" stroke="'
|
||||
svg += getrgb(obj.ViewObject.LineColor) + '" '
|
||||
svg += 'stroke-width="' + str(obj.ViewObject.LineWidth/modifier) + ' px" '
|
||||
svg += 'style="stroke-width:'+ str(obj.ViewObject.LineWidth/modifier)
|
||||
svg += 'stroke-width="' + str(linewidth) + ' px" '
|
||||
svg += 'style="stroke-width:'+ str(linewidth)
|
||||
svg += ';stroke-miterlimit:4;stroke-dasharray:none" '
|
||||
svg += 'freecad:basepoint1="'+str(p1.x)+' '+str(p1.y)+'" '
|
||||
svg += 'freecad:basepoint2="'+str(p4.x)+' '+str(p4.y)+'" '
|
||||
svg += 'freecad:dimpoint="'+str(p2.x)+' '+str(p2.y)+'"'
|
||||
svg += '/>\n'
|
||||
svg += '<circle cx="'+str(p2.x)+'" cy="'+str(p2.y)
|
||||
svg += '" r="'+str(obj.ViewObject.FontSize/(pmod))+'" '
|
||||
svg += '" r="'+str(fontsize)+'" '
|
||||
svg += 'fill="'+ getrgb(obj.ViewObject.LineColor) +'" stroke="none" '
|
||||
svg += 'style="stroke-miterlimit:4;stroke-dasharray:none" '
|
||||
svg += 'freecad:skip="1"'
|
||||
svg += '/>\n'
|
||||
svg += '<circle cx="'+str(p3.x)+'" cy="'+str(p3.y)
|
||||
svg += '" r="'+str(obj.ViewObject.FontSize/(pmod))+'" '
|
||||
svg += '" r="'+str(fontsize)+'" '
|
||||
svg += 'fill="#000000" stroke="none" '
|
||||
svg += 'style="stroke-miterlimit:4;stroke-dasharray:none" '
|
||||
svg += 'freecad:skip="1"'
|
||||
svg += '/>\n'
|
||||
svg += '<text id="' + obj.Name + '" fill="'
|
||||
svg += getrgb(obj.ViewObject.LineColor) +'" font-size="'
|
||||
svg += str(obj.ViewObject.FontSize*(tmod/5))+'" '
|
||||
svg += str(fontsize)+'" '
|
||||
svg += 'style="text-anchor:middle;text-align:center;'
|
||||
svg += 'font-family:'+obj.ViewObject.FontName+'" '
|
||||
svg += 'transform="rotate('+str(math.degrees(angle))
|
||||
svg += ','+ str(tbase.x) + ',' + str(tbase.y) + ') '
|
||||
svg += 'translate(' + str(tbase.x) + ',' + str(tbase.y) + ') '
|
||||
svg += 'scale('+str(tmod/2000)+',-'+str(tmod/2000)+')" '
|
||||
svg += 'freecad:skip="1"'
|
||||
#svg += 'scale('+str(tmod/2000)+',-'+str(tmod/2000)+') '
|
||||
svg += 'scale(1,-1) '
|
||||
svg += '" freecad:skip="1"'
|
||||
svg += '>\n'
|
||||
svg += dimText % p3.sub(p2).Length
|
||||
svg += '</text>\n</g>\n'
|
||||
|
@ -1358,7 +1365,7 @@ def getSVG(obj,modifier=100,textmodifier=100,fillstyle="shape color",direction=N
|
|||
svg = '<text id="' + obj.Name + '" fill="'
|
||||
svg += getrgb(obj.ViewObject.TextColor)
|
||||
svg += '" font-size="'
|
||||
svg += str(obj.ViewObject.FontSize*(tmod/5))+'" '
|
||||
svg += str(fontsize)+'" '
|
||||
svg += 'style="text-anchor:middle;text-align:center;'
|
||||
svg += 'font-family:'+obj.ViewObject.FontName+'" '
|
||||
svg += 'transform="'
|
||||
|
@ -1367,7 +1374,9 @@ def getSVG(obj,modifier=100,textmodifier=100,fillstyle="shape color",direction=N
|
|||
svg += 'rotate('+str(obj.ViewObject.Rotation)
|
||||
svg += ','+ str(p.x) + ',' + str(p.y) + ') '
|
||||
svg += 'translate(' + str(p.x) + ',' + str(p.y) + ') '
|
||||
svg +='scale('+str(tmod/2000)+','+str(-tmod/2000)+')">\n'
|
||||
#svg +='scale('+str(tmod/2000)+','+str(-tmod/2000)+')'
|
||||
svg += 'scale(1,-1) '
|
||||
svg += '">\n'
|
||||
for l in obj.LabelText:
|
||||
svg += '<tspan>'+l+'</tspan>\n'
|
||||
svg += '</text>\n'
|
||||
|
@ -1378,7 +1387,6 @@ def getSVG(obj,modifier=100,textmodifier=100,fillstyle="shape color",direction=N
|
|||
lorig = getLineStyle(obj)
|
||||
name = obj.Name
|
||||
stroke = getrgb(obj.ViewObject.LineColor)
|
||||
width = obj.ViewObject.LineWidth/modifier
|
||||
fill = 'none'
|
||||
invpl = obj.Placement.inverse()
|
||||
n = 0
|
||||
|
@ -1422,7 +1430,6 @@ def getSVG(obj,modifier=100,textmodifier=100,fillstyle="shape color",direction=N
|
|||
stroke = "none"
|
||||
else:
|
||||
stroke = getrgb(obj.ViewObject.LineColor)
|
||||
width = obj.ViewObject.LineWidth/modifier
|
||||
|
||||
if len(obj.Shape.Vertexes) > 1:
|
||||
wiredEdges = []
|
||||
|
@ -1794,12 +1801,12 @@ class _ViewProviderDimension:
|
|||
if not proj: norm = Vector(0,0,1)
|
||||
else: norm = fcvec.neg(p3.sub(p2).cross(proj))
|
||||
norm.normalize()
|
||||
va = FreeCADGui.ActiveDocument.ActiveView.getViewDirection()
|
||||
va = get3DView().getViewDirection()
|
||||
if va.getAngle(norm) < math.pi/2:
|
||||
norm = fcvec.neg(norm)
|
||||
u = p3.sub(p2)
|
||||
u.normalize()
|
||||
c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
|
||||
c = get3DView().getCameraNode()
|
||||
r = c.orientation.getValue()
|
||||
ru = Vector(r.multVec(coin.SbVec3f(1,0,0)).getValue())
|
||||
if ru.getAngle(u) > math.pi/2: u = fcvec.neg(u)
|
||||
|
@ -2511,19 +2518,18 @@ class _Polygon:
|
|||
|
||||
class _DrawingView:
|
||||
def __init__(self, obj):
|
||||
obj.addProperty("App::PropertyVector","Direction","Shape view","Projection direction")
|
||||
obj.addProperty("App::PropertyFloat","LinewidthModifier","Drawing view","Modifies the linewidth of the lines inside this object")
|
||||
obj.addProperty("App::PropertyFloat","TextModifier","Drawing view","Modifies the size of the texts inside this object")
|
||||
obj.addProperty("App::PropertyVector","Direction","Shape View","Projection direction")
|
||||
obj.addProperty("App::PropertyFloat","LineWidth","Drawing View","The width of the lines inside this object")
|
||||
obj.addProperty("App::PropertyFloat","FontSize","Drawing View","The size of the texts inside this object")
|
||||
obj.addProperty("App::PropertyLink","Source","Base","The linked object")
|
||||
obj.addProperty("App::PropertyEnumeration","FillStyle","Drawing view","Shape Fill Style")
|
||||
obj.addProperty("App::PropertyEnumeration","FillStyle","Drawing View","Shape Fill Style")
|
||||
fills = ['shape color']
|
||||
for f in FreeCAD.svgpatterns.keys():
|
||||
fills.append(f)
|
||||
obj.FillStyle = fills
|
||||
|
||||
obj.Proxy = self
|
||||
obj.LinewidthModifier = 100
|
||||
obj.TextModifier = 100
|
||||
obj.LineWidth = 0.35
|
||||
obj.FontSize = 12
|
||||
self.Type = "DrawingView"
|
||||
|
||||
def execute(self, obj):
|
||||
|
@ -2531,12 +2537,12 @@ class _DrawingView:
|
|||
obj.ViewResult = self.updateSVG(obj)
|
||||
|
||||
def onChanged(self, obj, prop):
|
||||
if prop in ["X","Y","Scale","LinewidthModifier","TextModifier","FillStyle","Direction"]:
|
||||
if prop in ["X","Y","Scale","LineWidth","FontSize","FillStyle","Direction"]:
|
||||
obj.ViewResult = self.updateSVG(obj)
|
||||
|
||||
def updateSVG(self, obj):
|
||||
"encapsulates a svg fragment into a transformation node"
|
||||
svg = getSVG(obj.Source,obj.LinewidthModifier,obj.TextModifier,obj.FillStyle,obj.Direction)
|
||||
svg = getSVG(obj.Source,obj.Scale,obj.LineWidth,obj.FontSize,obj.FillStyle,obj.Direction)
|
||||
result = ''
|
||||
result += '<g id="' + obj.Name + '"'
|
||||
result += ' transform="'
|
||||
|
|
|
@ -73,6 +73,7 @@ class Snapper:
|
|||
self.trackLine = None
|
||||
self.lastSnappedObject = None
|
||||
self.active = True
|
||||
self.trackers = [[],[],[],[]] # view, grid, snap, extline
|
||||
|
||||
self.polarAngles = [90,45]
|
||||
|
||||
|
@ -142,12 +143,20 @@ class Snapper:
|
|||
return None
|
||||
|
||||
# setup trackers if needed
|
||||
if not self.tracker:
|
||||
self.tracker = DraftTrackers.snapTracker()
|
||||
if not self.extLine:
|
||||
self.extLine = DraftTrackers.lineTracker(dotted=True)
|
||||
if (not self.grid) and Draft.getParam("grid"):
|
||||
v = Draft.get3DView()
|
||||
if v in self.trackers[0]:
|
||||
i = self.trackers[0].index(v)
|
||||
self.grid = self.trackers[1][i]
|
||||
self.tracker = self.trackers[2][i]
|
||||
self.extLine = self.trackers[3][i]
|
||||
else:
|
||||
self.grid = DraftTrackers.gridTracker()
|
||||
self.tracker = DraftTrackers.snapTracker()
|
||||
self.extLine = DraftTrackers.lineTracker(dotted=True)
|
||||
self.trackers[0].append(v)
|
||||
self.trackers[1].append(self.grid)
|
||||
self.trackers[2].append(self.tracker)
|
||||
self.trackers[3].append(self.extLine)
|
||||
|
||||
# getting current snap Radius
|
||||
if not self.radius:
|
||||
|
@ -174,7 +183,7 @@ class Snapper:
|
|||
point = self.getApparentPoint(screenpos[0],screenpos[1])
|
||||
|
||||
# check if we snapped to something
|
||||
info = FreeCADGui.ActiveDocument.ActiveView.getObjectInfo((screenpos[0],screenpos[1]))
|
||||
info = Draft.get3DView().getObjectInfo((screenpos[0],screenpos[1]))
|
||||
|
||||
# checking if parallel to one of the edges of the last objects or to a polar direction
|
||||
|
||||
|
@ -303,8 +312,9 @@ class Snapper:
|
|||
|
||||
def getApparentPoint(self,x,y):
|
||||
"returns a 3D point, projected on the current working plane"
|
||||
pt = FreeCADGui.ActiveDocument.ActiveView.getPoint(x,y)
|
||||
dv = FreeCADGui.ActiveDocument.ActiveView.getViewDirection()
|
||||
view = Draft.get3DView()
|
||||
pt = view.getPoint(x,y)
|
||||
dv = view.getViewDirection()
|
||||
return FreeCAD.DraftWorkingPlane.projectPoint(pt,dv)
|
||||
|
||||
def snapToExtensions(self,point,last,constrain,eline):
|
||||
|
@ -559,8 +569,9 @@ class Snapper:
|
|||
|
||||
def getScreenDist(self,dist,cursor):
|
||||
"returns a distance in 3D space from a screen pixels distance"
|
||||
p1 = FreeCADGui.ActiveDocument.ActiveView.getPoint(cursor)
|
||||
p2 = FreeCADGui.ActiveDocument.ActiveView.getPoint((cursor[0]+dist,cursor[1]))
|
||||
view = Draft.get3DView()
|
||||
p1 = view.getPoint(cursor)
|
||||
p2 = view.getPoint((cursor[0]+dist,cursor[1]))
|
||||
return (p2.sub(p1)).Length
|
||||
|
||||
def getPerpendicular(self,edge,pt):
|
||||
|
@ -597,7 +608,7 @@ class Snapper:
|
|||
for v in self.views:
|
||||
v.setCursor(cur)
|
||||
self.cursorMode = mode
|
||||
|
||||
|
||||
def off(self):
|
||||
"finishes snapping"
|
||||
if self.tracker:
|
||||
|
@ -704,7 +715,7 @@ class Snapper:
|
|||
|
||||
self.pt = None
|
||||
self.ui = FreeCADGui.draftToolBar
|
||||
self.view = FreeCADGui.ActiveDocument.ActiveView
|
||||
self.view = Draft.get3DView()
|
||||
|
||||
# setting a track line if we got an existing point
|
||||
if last:
|
||||
|
|
|
@ -103,9 +103,6 @@ def msg(text=None,mode=None):
|
|||
else:
|
||||
FreeCAD.Console.PrintMessage(text)
|
||||
|
||||
def get3DView():
|
||||
return FreeCADGui.ActiveDocument.mdiViewsOfType("Gui::View3DInventor")[0]
|
||||
|
||||
def selectObject(arg):
|
||||
'''this is a scene even handler, to be called from the Draft tools
|
||||
when they need to select an object'''
|
||||
|
@ -116,7 +113,7 @@ def selectObject(arg):
|
|||
if (arg["Type"] == "SoMouseButtonEvent"):
|
||||
if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
|
||||
cursor = arg["Position"]
|
||||
snapped = FreeCADGui.ActiveDocument.ActiveView.getObjectInfo((cursor[0],cursor[1]))
|
||||
snapped = Draft.get3DView().getObjectInfo((cursor[0],cursor[1]))
|
||||
if snapped:
|
||||
obj = FreeCAD.ActiveDocument.getObject(snapped['Object'])
|
||||
FreeCADGui.Selection.addSelection(obj)
|
||||
|
@ -134,7 +131,7 @@ def getPoint(target,args,mobile=False,sym=False,workingplane=True):
|
|||
'''
|
||||
|
||||
ui = FreeCADGui.draftToolBar
|
||||
view = FreeCADGui.ActiveDocument.ActiveView
|
||||
view = Draft.get3DView()
|
||||
|
||||
# get point
|
||||
if target.node:
|
||||
|
@ -149,8 +146,8 @@ def getPoint(target,args,mobile=False,sym=False,workingplane=True):
|
|||
if (not plane.weak) and workingplane:
|
||||
# working plane was explicitely selected - project onto it
|
||||
viewDirection = view.getViewDirection()
|
||||
if FreeCADGui.ActiveDocument.ActiveView.getCameraType() == "Perspective":
|
||||
camera = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
|
||||
if view.getCameraType() == "Perspective":
|
||||
camera = view.getCameraNode()
|
||||
p = camera.getField("position").getValue()
|
||||
# view is from camera to point:
|
||||
viewDirection = point.sub(Vector(p[0],p[1],p[2]))
|
||||
|
@ -173,7 +170,7 @@ def getPoint(target,args,mobile=False,sym=False,workingplane=True):
|
|||
|
||||
def getSupport(args):
|
||||
"returns the supporting object and sets the working plane"
|
||||
snapped = FreeCADGui.ActiveDocument.ActiveView.getObjectInfo((args["Position"][0],args["Position"][1]))
|
||||
snapped = Draft.get3DView().getObjectInfo((args["Position"][0],args["Position"][1]))
|
||||
if not snapped: return None
|
||||
obj = None
|
||||
plane.save()
|
||||
|
@ -234,7 +231,7 @@ class SelectPlane:
|
|||
self.doc = FreeCAD.ActiveDocument
|
||||
if self.doc:
|
||||
FreeCAD.activeDraftCommand = self
|
||||
self.view = FreeCADGui.ActiveDocument.ActiveView
|
||||
self.view = Draft.get3DView()
|
||||
self.ui = FreeCADGui.draftToolBar
|
||||
self.ui.selectPlaneUi()
|
||||
msg(translate("draft", "Pick a face to define the drawing plane\n"))
|
||||
|
@ -253,7 +250,7 @@ class SelectPlane:
|
|||
if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
|
||||
cursor = arg["Position"]
|
||||
doc = FreeCADGui.ActiveDocument
|
||||
info = doc.ActiveView.getObjectInfo((cursor[0],cursor[1]))
|
||||
info = Draft.get3DView().getObjectInfo((cursor[0],cursor[1]))
|
||||
if info:
|
||||
try:
|
||||
shape = doc.getObject(info["Object"]).Object.Shape
|
||||
|
@ -336,7 +333,7 @@ class Creator:
|
|||
self.support = None
|
||||
self.commitList = []
|
||||
self.doc = FreeCAD.ActiveDocument
|
||||
self.view = FreeCADGui.ActiveDocument.ActiveView
|
||||
self.view = Draft.get3DView()
|
||||
self.featureName = name
|
||||
if not self.doc:
|
||||
self.finish()
|
||||
|
@ -1660,7 +1657,7 @@ class Modifier:
|
|||
self.finish()
|
||||
else:
|
||||
FreeCAD.activeDraftCommand = self
|
||||
self.view = get3DView()
|
||||
self.view = Draft.get3DView()
|
||||
self.ui = FreeCADGui.draftToolBar
|
||||
FreeCADGui.draftToolBar.show()
|
||||
rot = self.view.getCameraNode().getField("orientation").getValue()
|
||||
|
@ -3650,7 +3647,7 @@ class Point:
|
|||
return False
|
||||
|
||||
def Activated(self):
|
||||
self.view = FreeCADGui.ActiveDocument.ActiveView
|
||||
self.view = Draft.get3DView()
|
||||
self.stack = []
|
||||
self.point = None
|
||||
# adding 2 callback functions
|
||||
|
|
|
@ -60,13 +60,10 @@ class Tracker:
|
|||
todo.delay(self._removeSwitch, self.switch)
|
||||
self.switch = None
|
||||
|
||||
def get3DView(self):
|
||||
return FreeCADGui.ActiveDocument.mdiViewsOfType("Gui::View3DInventor")[0]
|
||||
|
||||
def _insertSwitch(self, switch):
|
||||
'''insert self.switch into the scene graph. Must not be called
|
||||
from an event handler (or other scene graph traversal).'''
|
||||
sg=self.get3DView().getSceneGraph()
|
||||
sg=Draft.get3DView().getSceneGraph()
|
||||
if self.ontop:
|
||||
sg.insertChild(switch,0)
|
||||
else:
|
||||
|
@ -75,7 +72,7 @@ class Tracker:
|
|||
def _removeSwitch(self, switch):
|
||||
'''remove self.switch from the scene graph. As with _insertSwitch,
|
||||
must not be called during scene graph traversal).'''
|
||||
sg=self.get3DView().getSceneGraph()
|
||||
sg=Draft.get3DView().getSceneGraph()
|
||||
sg.removeChild(switch)
|
||||
|
||||
def on(self):
|
||||
|
@ -454,8 +451,8 @@ class PlaneTracker(Tracker):
|
|||
"A working plane tracker"
|
||||
def __init__(self):
|
||||
# getting screen distance
|
||||
p1 = self.get3DView().getPoint((100,100))
|
||||
p2 = self.get3DView().getPoint((110,100))
|
||||
p1 = Draft.get3DView().getPoint((100,100))
|
||||
p2 = Draft.get3DView().getPoint((110,100))
|
||||
bl = (p2.sub(p1)).Length * (Draft.getParam("snapRange")/2)
|
||||
self.trans = coin.SoTransform()
|
||||
self.trans.translation.setValue([0,0,0])
|
||||
|
|
|
@ -24,8 +24,6 @@ __title__="FreeCAD Draft Workbench - Init file"
|
|||
__author__ = "Yorik van Havre <yorik@uncreated.net>"
|
||||
__url__ = ["http://free-cad.sourceforge.net"]
|
||||
|
||||
import os,DraftTools
|
||||
|
||||
class DraftWorkbench (Workbench):
|
||||
"the Draft Workbench"
|
||||
Icon = """
|
||||
|
@ -179,9 +177,9 @@ class DraftWorkbench (Workbench):
|
|||
else:
|
||||
return
|
||||
try:
|
||||
import macros,DraftTools,DraftGui
|
||||
import os,macros,DraftTools,DraftGui
|
||||
self.appendMenu(["&Macro",str(DraftTools.translate("draft","Installed Macros"))],macros.macrosList)
|
||||
Log ('Loading Draft GUI...done\n')
|
||||
Log ('Loading Draft module...done\n')
|
||||
except:
|
||||
pass
|
||||
self.cmdList = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc",
|
||||
|
|
|
@ -435,6 +435,15 @@ def getBoundary(shape):
|
|||
if lut[e.hashCode()] == 1: bound.append(e)
|
||||
return bound
|
||||
|
||||
def isLine(bsp):
|
||||
"returns True if the given BSpline curve is a straight line"
|
||||
step = bsp.LastParameter/10
|
||||
b = bsp.tangent(0)
|
||||
for i in range(10):
|
||||
if bsp.tangent(i*step) != b:
|
||||
return False
|
||||
return True
|
||||
|
||||
def sortEdges(lEdges, aVertex=None):
|
||||
"an alternative, more accurate version of Part.__sortEdges__"
|
||||
|
||||
|
@ -479,6 +488,11 @@ def sortEdges(lEdges, aVertex=None):
|
|||
elif isinstance(result[3].Curve,Part.Circle):
|
||||
mp = findMidpoint(result[3])
|
||||
return [Part.Arc(aVertex.Point,mp,result[3].Vertexes[0].Point).toShape()]
|
||||
elif isinstance(result[3].Curve,Part.BSplineCurve):
|
||||
if isLine(result[3].Curve):
|
||||
return [Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape()]
|
||||
else:
|
||||
return lEdges
|
||||
else:
|
||||
return lEdges
|
||||
|
||||
|
@ -491,15 +505,20 @@ def sortEdges(lEdges, aVertex=None):
|
|||
olEdges = sortEdges(lEdges, result[3].Vertexes[result[2]])
|
||||
return olEdges
|
||||
# if the wire is closed there is no end so choose 1st Vertex
|
||||
#print "closed wire, starting from ",lEdges[0].Vertexes[0].Point
|
||||
return sortEdges(lEdges, lEdges[0].Vertexes[0])
|
||||
else :
|
||||
#print "looking ",aVertex.Point
|
||||
result = lookfor(aVertex,lEdges)
|
||||
if result[0] != 0 :
|
||||
del lEdges[result[1]]
|
||||
next = sortEdges(lEdges, result[3].Vertexes[-((-result[2])^1)])
|
||||
#print "result ",result[3].Vertexes[0].Point," ",result[3].Vertexes[1].Point, " compared to ",aVertex.Point
|
||||
if isSameVertex(aVertex,result[3].Vertexes[0]):
|
||||
#print "keeping"
|
||||
olEdges += [result[3]] + next
|
||||
else:
|
||||
#print "inverting", result[3].Curve
|
||||
if isinstance(result[3].Curve,Part.Line):
|
||||
newedge = Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape()
|
||||
olEdges += [newedge] + next
|
||||
|
@ -507,12 +526,61 @@ def sortEdges(lEdges, aVertex=None):
|
|||
mp = findMidpoint(result[3])
|
||||
newedge = Part.Arc(aVertex.Point,mp,result[3].Vertexes[0].Point).toShape()
|
||||
olEdges += [newedge] + next
|
||||
elif isinstance(result[3].Curve,Part.BSplineCurve):
|
||||
if isLine(result[3].Curve):
|
||||
newedge = Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape()
|
||||
olEdges += [newedge] + next
|
||||
else:
|
||||
olEdges += [result[3]] + next
|
||||
else:
|
||||
olEdges += [result[3]] + next
|
||||
return olEdges
|
||||
else :
|
||||
return []
|
||||
|
||||
|
||||
def findWires(edgeslist):
|
||||
'''finds connected wires in the given list of edges'''
|
||||
|
||||
def touches(e1,e2):
|
||||
if len(e1.Vertexes) < 2:
|
||||
return False
|
||||
if len(e2.Vertexes) < 2:
|
||||
return False
|
||||
if fcvec.equals(e1.Vertexes[0].Point,e2.Vertexes[0].Point):
|
||||
return True
|
||||
if fcvec.equals(e1.Vertexes[0].Point,e2.Vertexes[-1].Point):
|
||||
return True
|
||||
if fcvec.equals(e1.Vertexes[-1].Point,e2.Vertexes[0].Point):
|
||||
return True
|
||||
if fcvec.equals(e1.Vertexes[-1].Point,e2.Vertexes[-1].Point):
|
||||
return True
|
||||
return False
|
||||
|
||||
edges = edgeslist[:]
|
||||
wires = []
|
||||
while edges:
|
||||
e = edges[0]
|
||||
if not wires:
|
||||
# create first group
|
||||
edges.remove(e)
|
||||
wires.append([e])
|
||||
else:
|
||||
found = False
|
||||
for w in wires:
|
||||
if found:
|
||||
break
|
||||
for we in w:
|
||||
if touches(e,we):
|
||||
edges.remove(e)
|
||||
w.append(e)
|
||||
found = True
|
||||
break
|
||||
else:
|
||||
# edge doesn't connect with any existing group
|
||||
edges.remove(e)
|
||||
wires.append([e])
|
||||
return wires
|
||||
|
||||
def superWire(edgeslist,closed=False):
|
||||
'''superWire(edges,[closed]): forces a wire between edges that don't necessarily
|
||||
|
@ -704,8 +772,8 @@ def getNormal(shape):
|
|||
n = e1.cross(e2).normalize()
|
||||
break
|
||||
if FreeCAD.GuiUp:
|
||||
import FreeCADGui
|
||||
vdir = FreeCADGui.ActiveDocument.ActiveView.getViewDirection()
|
||||
import Draft
|
||||
vdir = Draft.get3DView().getViewDirection()
|
||||
if n.getAngle(vdir) < 0.78: n = fcvec.neg(n)
|
||||
return n
|
||||
|
||||
|
|
|
@ -76,11 +76,13 @@ PROPERTY_SOURCE(Drawing::FeatureViewPart, Drawing::FeatureView)
|
|||
FeatureViewPart::FeatureViewPart(void)
|
||||
{
|
||||
static const char *group = "Shape view";
|
||||
static const char *vgroup = "Drawing view";
|
||||
|
||||
ADD_PROPERTY_TYPE(Direction ,(0,0,1.0),group,App::Prop_None,"Projection direction");
|
||||
ADD_PROPERTY_TYPE(Source ,(0),group,App::Prop_None,"Shape to view");
|
||||
ADD_PROPERTY_TYPE(ShowHiddenLines ,(false),group,App::Prop_None,"Control the appearance of the dashed hidden lines");
|
||||
ADD_PROPERTY_TYPE(ShowSmoothLines ,(false),group,App::Prop_None,"Control the appearance of the smooth lines");
|
||||
ADD_PROPERTY_TYPE(LineWidth,(0.35),vgroup,App::Prop_None,"The thickness of the resulting lines");
|
||||
}
|
||||
|
||||
FeatureViewPart::~FeatureViewPart()
|
||||
|
@ -196,7 +198,7 @@ App::DocumentObjectExecReturn *FeatureViewPart::execute(void)
|
|||
ProjectionAlgos::SvgExtractionType type = ProjectionAlgos::Plain;
|
||||
if (hidden) type = (ProjectionAlgos::SvgExtractionType)(type|ProjectionAlgos::WithHidden);
|
||||
if (smooth) type = (ProjectionAlgos::SvgExtractionType)(type|ProjectionAlgos::WithSmooth);
|
||||
result << Alg.getSVG(type, this->Scale.getValue());
|
||||
result << Alg.getSVG(type, this->LineWidth.getValue() / this->Scale.getValue());
|
||||
|
||||
result << "</g>" << endl;
|
||||
|
||||
|
|
|
@ -52,6 +52,7 @@ public:
|
|||
App::PropertyVector Direction;
|
||||
App::PropertyBool ShowHiddenLines;
|
||||
App::PropertyBool ShowSmoothLines;
|
||||
App::PropertyFloat LineWidth;
|
||||
|
||||
|
||||
/** @name methods overide Feature */
|
||||
|
|
|
@ -153,8 +153,10 @@ std::string ProjectionAlgos::getSVG(SvgExtractionType type, float scale)
|
|||
{
|
||||
std::stringstream result;
|
||||
SVGOutput output;
|
||||
float hfactor = 0.5f; // hidden line size factor, was 0.15f / 0.35f;
|
||||
|
||||
if (!H.IsNull() && (type & WithHidden)) {
|
||||
float width = 0.15f/scale;
|
||||
float width = hfactor * scale;
|
||||
BRepMesh::Mesh(H,0.1);
|
||||
result << "<g"
|
||||
//<< " id=\"" << ViewName << "\"" << endl
|
||||
|
@ -162,14 +164,14 @@ std::string ProjectionAlgos::getSVG(SvgExtractionType type, float scale)
|
|||
<< " stroke-width=\"" << width << "\"" << endl
|
||||
<< " stroke-linecap=\"butt\"" << endl
|
||||
<< " stroke-linejoin=\"miter\"" << endl
|
||||
<< " stroke-dasharray=\"5 3\"" << endl
|
||||
<< " stroke-dasharray=\"0.2,0.1\"" << endl
|
||||
<< " fill=\"none\"" << endl
|
||||
<< " >" << endl
|
||||
<< output.exportEdges(H)
|
||||
<< "</g>" << endl;
|
||||
}
|
||||
if (!HO.IsNull() && (type & WithHidden)) {
|
||||
float width = 0.15f/scale;
|
||||
float width = hfactor * scale;
|
||||
BRepMesh::Mesh(HO,0.1);
|
||||
result << "<g"
|
||||
//<< " id=\"" << ViewName << "\"" << endl
|
||||
|
@ -177,14 +179,14 @@ std::string ProjectionAlgos::getSVG(SvgExtractionType type, float scale)
|
|||
<< " stroke-width=\"" << width << "\"" << endl
|
||||
<< " stroke-linecap=\"butt\"" << endl
|
||||
<< " stroke-linejoin=\"miter\"" << endl
|
||||
<< " stroke-dasharray=\"5 3\"" << endl
|
||||
<< " stroke-dasharray=\"0.02,0.1\"" << endl
|
||||
<< " fill=\"none\"" << endl
|
||||
<< " >" << endl
|
||||
<< output.exportEdges(HO)
|
||||
<< "</g>" << endl;
|
||||
}
|
||||
if (!VO.IsNull()) {
|
||||
float width = 0.35f/scale;
|
||||
float width = scale;
|
||||
BRepMesh::Mesh(VO,0.1);
|
||||
result << "<g"
|
||||
//<< " id=\"" << ViewName << "\"" << endl
|
||||
|
@ -198,7 +200,7 @@ std::string ProjectionAlgos::getSVG(SvgExtractionType type, float scale)
|
|||
<< "</g>" << endl;
|
||||
}
|
||||
if (!V.IsNull()) {
|
||||
float width = 0.35f/scale;
|
||||
float width = scale;
|
||||
BRepMesh::Mesh(V,0.1);
|
||||
result << "<g"
|
||||
//<< " id=\"" << ViewName << "\"" << endl
|
||||
|
@ -212,7 +214,7 @@ std::string ProjectionAlgos::getSVG(SvgExtractionType type, float scale)
|
|||
<< "</g>" << endl;
|
||||
}
|
||||
if (!V1.IsNull() && (type & WithSmooth)) {
|
||||
float width = 0.35f/scale;
|
||||
float width = scale;
|
||||
BRepMesh::Mesh(V1,0.1);
|
||||
result << "<g"
|
||||
//<< " id=\"" << ViewName << "\"" << endl
|
||||
|
@ -226,7 +228,7 @@ std::string ProjectionAlgos::getSVG(SvgExtractionType type, float scale)
|
|||
<< "</g>" << endl;
|
||||
}
|
||||
if (!H1.IsNull() && (type & WithSmooth) && (type & WithHidden)) {
|
||||
float width = 0.15f/scale;
|
||||
float width = hfactor * scale;
|
||||
BRepMesh::Mesh(H1,0.1);
|
||||
result << "<g"
|
||||
//<< " id=\"" << ViewName << "\"" << endl
|
||||
|
@ -234,7 +236,7 @@ std::string ProjectionAlgos::getSVG(SvgExtractionType type, float scale)
|
|||
<< " stroke-width=\"" << width << "\"" << endl
|
||||
<< " stroke-linecap=\"butt\"" << endl
|
||||
<< " stroke-linejoin=\"miter\"" << endl
|
||||
<< " stroke-dasharray=\"5 3\"" << endl
|
||||
<< " stroke-dasharray=\"0.09,0.05\"" << endl
|
||||
<< " fill=\"none\"" << endl
|
||||
<< " >" << endl
|
||||
<< output.exportEdges(H1)
|
||||
|
|
|
@ -621,7 +621,7 @@ public:
|
|||
if (geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()) {
|
||||
const Part::GeomLineSegment *lineSeg = dynamic_cast<const Part::GeomLineSegment *>(geom);
|
||||
EditCurve[0] = Base::Vector2D(lineSeg->getEndPoint().x, lineSeg->getEndPoint().y);
|
||||
}
|
||||
}
|
||||
else
|
||||
EditCurve[0] = onSketchPos;
|
||||
|
||||
|
@ -1365,7 +1365,7 @@ CmdSketcherCreateFillet::CmdSketcherCreateFillet()
|
|||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Create fillet");
|
||||
sToolTipText = QT_TR_NOOP("Create a fillet between to lines or at a coincident point");
|
||||
sToolTipText = QT_TR_NOOP("Create a fillet between two lines or at a coincidental point");
|
||||
sWhatsThis = sToolTipText;
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "Sketcher_CreateFillet";
|
||||
|
|
|
@ -99,7 +99,6 @@
|
|||
<File Id="LibPack55" Name="QtHelp4.dll" />
|
||||
<File Id="LibPack56" Name="QtCLucene4.dll" />
|
||||
<File Id="LibPack52" Name="phonon4.dll" />
|
||||
<File Id="LibPack53" Name="sketchflat.exe" />
|
||||
<File Id="LibPack54" Name="assistant.exe" />
|
||||
<File Id="LibPack61" Name="TKBO.dll" />
|
||||
<File Id="LibPack62" Name="TKBool.dll" />
|
||||
|
|
Loading…
Reference in New Issue
Block a user