Merge branch 'master' of ssh://free-cad.git.sourceforge.net/gitroot/free-cad/free-cad

Conflicts:
	src/App/DocumentObjectGroup.cpp
This commit is contained in:
jriegel 2012-04-19 08:27:49 +02:00
commit dd8a44e103
32 changed files with 882 additions and 345 deletions

View File

@ -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()

View File

@ -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();

View File

@ -968,6 +968,19 @@ std::list<MDIView*> Document::getMDIViews() const
return views;
}
std::list<MDIView*> Document::getMDIViewsOfType(const Base::Type& typeId) const
{
std::list<MDIView*> views;
for (std::list<BaseView*>::const_iterator it = d->baseViews.begin();
it != d->baseViews.end(); ++it) {
MDIView* view = dynamic_cast<MDIView*>(*it);
if (view && view->isDerivedFrom(typeId))
views.push_back(view);
}
return views;
}
/// send messages to the active view
bool Document::sendMsgToViews(const char* pMsg)
{

View File

@ -140,6 +140,8 @@ public:
void onRelabel(void);
/// returns a list of all attached MDI views
std::list<MDIView*> getMDIViews() const;
/// returns a list of all MDI views of a certain type
std::list<MDIView*> getMDIViewsOfType(const Base::Type& typeId) const;
//@}
/** @name View provider handling */

View File

@ -68,6 +68,16 @@
<UserDocu>deprecated -- use ActiveView</UserDocu>
</Documentation>
</Methode>
<Methode Name="mdiViewsOfType" Const="true">
<Documentation>
<UserDocu>Return a list if mdi views of a given type</UserDocu>
</Documentation>
</Methode>
<Methode Name="sendMsgToViews">
<Documentation>
<UserDocu>Send a message to all views of the document</UserDocu>
</Documentation>
</Methode>
<Attribute Name="ActiveObject" ReadOnly="false">
<Documentation>
<UserDocu>The active object of the document</UserDocu>

View File

@ -201,6 +201,39 @@ PyObject* DocumentPy::activeView(PyObject *args)
} PY_CATCH;
}
PyObject* DocumentPy::mdiViewsOfType(PyObject *args)
{
char* sType;
if (!PyArg_ParseTuple(args, "s", &sType)) // convert args: Python->C
return NULL; // NULL triggers exception
Base::Type type = Base::Type::fromName(sType);
if (type == Base::Type::badType()) {
PyErr_Format(PyExc_Exception, "'%s' is not a valid type", sType);
return NULL;
}
PY_TRY {
std::list<Gui::MDIView*> views = getDocumentPtr()->getMDIViewsOfType(type);
Py::List list;
for (std::list<Gui::MDIView*>::iterator it = views.begin(); it != views.end(); ++it)
list.append(Py::asObject((*it)->getPyObject()));
return Py::new_reference_to(list);
} PY_CATCH;
}
PyObject* DocumentPy::sendMsgToViews(PyObject *args)
{
char* msg;
if (!PyArg_ParseTuple(args, "s", &msg)) // convert args: Python->C
return NULL; // NULL triggers exception
PY_TRY {
getDocumentPtr()->sendMsgToViews(msg);
Py_Return;
} PY_CATCH;
}
Py::Object DocumentPy::getActiveObject(void) const
{
App::DocumentObject *object = getDocumentPtr()->getDocument()->getActiveObject();

View File

@ -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>;
}

View File

@ -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

View File

@ -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())

View File

@ -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:

View File

@ -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())

View File

@ -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())

View File

@ -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():

View File

@ -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>

View File

@ -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"

View File

@ -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="'

View File

@ -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:

View File

@ -91,7 +91,7 @@ if not FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/").HasGroup("Dra
def translate(context,text):
"convenience function for Qt translator"
return QtGui.QApplication.translate(context, text, None, QtGui.QApplication.UnicodeUTF8).toUtf8()
def msg(text=None,mode=None):
"prints the given message on the FreeCAD status bar"
if not text: FreeCAD.Console.PrintMessage("")
@ -113,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)
@ -131,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:
@ -146,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]))
@ -170,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()
@ -231,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"))
@ -250,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
@ -333,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()
@ -1642,7 +1642,7 @@ class Modifier:
return True
else:
return False
def Activated(self,name="None"):
if FreeCAD.activeDraftCommand:
FreeCAD.activeDraftCommand.finish()
@ -1657,7 +1657,7 @@ class Modifier:
self.finish()
else:
FreeCAD.activeDraftCommand = self
self.view = FreeCADGui.ActiveDocument.ActiveView
self.view = Draft.get3DView()
self.ui = FreeCADGui.draftToolBar
FreeCADGui.draftToolBar.show()
rot = self.view.getCameraNode().getField("orientation").getValue()
@ -3647,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

View File

@ -63,7 +63,7 @@ class Tracker:
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=FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
sg=Draft.get3DView().getSceneGraph()
if self.ontop:
sg.insertChild(switch,0)
else:
@ -72,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=FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
sg=Draft.get3DView().getSceneGraph()
sg.removeChild(switch)
def on(self):
@ -82,7 +82,7 @@ class Tracker:
def off(self):
self.switch.whichChild = -1
self.Visible = False
class snapTracker(Tracker):
"A Snap Mark tracker, used by tools that support snapping"
def __init__(self):
@ -451,8 +451,8 @@ class PlaneTracker(Tracker):
"A working plane tracker"
def __init__(self):
# getting screen distance
p1 = FreeCADGui.ActiveDocument.ActiveView.getPoint((100,100))
p2 = FreeCADGui.ActiveDocument.ActiveView.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])

View File

@ -704,8 +704,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

View File

@ -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;

View File

@ -52,6 +52,7 @@ public:
App::PropertyVector Direction;
App::PropertyBool ShowHiddenLines;
App::PropertyBool ShowSmoothLines;
App::PropertyFloat LineWidth;
/** @name methods overide Feature */

View File

@ -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)

View File

@ -57,6 +57,7 @@
#include "DrawingView.h"
#include <Base/Stream.h>
#include <Base/gzstream.h>
#include <Base/PyObjectBase.h>
#include <Gui/FileDialog.h>
#include <Gui/WaitCursor.h>
@ -434,4 +435,9 @@ void DrawingView::viewAll()
m_view->fitInView(m_view->scene()->sceneRect(), Qt::KeepAspectRatio);
}
PyObject* DrawingView::getPyObject()
{
Py_Return;
}
#include "moc_DrawingView.cpp"

View File

@ -93,6 +93,7 @@ public:
void printPdf();
void printPreview();
void print(QPrinter* printer);
PyObject* getPyObject();
protected:
void contextMenuEvent(QContextMenuEvent *event);

View File

@ -392,7 +392,7 @@ PyObject* BSplineSurfacePy::insertVKnots(PyObject *args)
Handle_Geom_BSplineSurface surf = Handle_Geom_BSplineSurface::DownCast
(getGeometryPtr()->handle());
surf->InsertUKnots(k,m,tol,(add==Py_True));
surf->InsertVKnots(k,m,tol,(add==Py_True));
Py_Return;
}
catch (Standard_Failure) {

View File

@ -100,6 +100,9 @@ int TopoShapeShellPy::PyInit(PyObject* args, PyObject* /*kwd*/)
shape = sewShell.ApplySewing(shell);
}
if (shape.IsNull())
Standard_Failure::Raise("Shape is null");
if (shape.ShapeType() != TopAbs_SHELL)
Standard_Failure::Raise("Shape is not a shell");
}

View File

@ -1285,7 +1285,7 @@ int System::diagnose(VEC_pD &params, VEC_I &conflicting)
conflictingIndex.resize(constr_num-rank);
for (int j=rank; j < constr_num; j++) {
for (int row=0; row < rank; row++) {
if (R(row,j) != 0) {
if (fabs(R(row,j)) > 1e-10) {
int orig_col = qrJT.colsPermutation().indices()[row];
conflictingIndex[j-rank].push_back(orig_col);
}

View File

@ -1,5 +1,5 @@
import FreeCAD,FreeCADGui
FreeCADGui.activateWorkbench("DrawingWorkbench")
FreeCAD.open(FreeCAD.getResourceDir()+"examples/DrawingExample.FCStd")
FreeCADGui.SendMsgToActiveView("ViewFit")
FreeCADGui.activeDocument().activeView().viewAxometric()
FreeCADGui.activeDocument().sendMsgToViews("ViewFit")
FreeCADGui.activeDocument().sendMsgToViews("ViewAxo")

View File

@ -1,4 +1,4 @@
import FreeCAD,FreeCADGui
FreeCAD.open(FreeCAD.getResourceDir()+"examples/PartDesignExample.FCStd")
FreeCADGui.SendMsgToActiveView("ViewFit")
FreeCADGui.activeDocument().activeView().viewAxometric()
FreeCADGui.activeDocument().sendMsgToViews("ViewFit")
FreeCADGui.activeDocument().sendMsgToViews("ViewAxo")

View File

@ -1,4 +1,4 @@
import FreeCAD,FreeCADGui
FreeCAD.open(FreeCAD.getResourceDir()+"examples/RobotExample.FCStd")
FreeCADGui.SendMsgToActiveView("ViewFit")
FreeCADGui.activeDocument().activeView().viewAxometric()
FreeCADGui.activeDocument().sendMsgToViews("ViewFit")
FreeCADGui.activeDocument().sendMsgToViews("ViewAxo")

View File

@ -1,4 +1,4 @@
import FreeCAD,FreeCADGui,Part
Part.open(FreeCAD.getResourceDir()+"examples/Schenkel.stp")
FreeCADGui.SendMsgToActiveView("ViewFit")
Gui.activeDocument().activeView().viewAxometric()
FreeCADGui.activeDocument().sendMsgToViews("ViewFit")
FreeCADGui.activeDocument().sendMsgToViews("ViewAxo")