#*************************************************************************** #* * #* Copyright (c) 2015 * #* Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * #* as published by the Free Software Foundation; either version 2 of * #* the License, or (at your option) any later version. * #* for detail see the LICENCE text file. * #* * #* This program is distributed in the hope that it will be useful, * #* but WITHOUT ANY WARRANTY; without even the implied warranty of * #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * #* GNU Library General Public License for more details. * #* * #* You should have received a copy of the GNU Library General Public * #* License along with this program; if not, write to the Free Software * #* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * #* USA * #* * #*************************************************************************** __title__= "FreeCAD GbXml exporter" __author__ = "Yorik van Havre" __url__ = "http://www.freecadweb.org" import os,FreeCAD,Draft if FreeCAD.GuiUp: from DraftTools import translate else: # \cond def translate(ctx,txt): return txt # \endcond ## @package importGBXML # \ingroup ARCH # \brief GBXML file format exporter # # This module provides tools to export GBXML files. def export(objectslist,filename): if len(objectslist) != 1: FreeCAD.Console.PrintError(translate("Arch","This exporter can currently only export one site object\n")) return site = objectslist[0] if Draft.getType(site) != "Site": FreeCAD.Console.PrintError(translate("Arch","This exporter can currently only export one site object\n")) return filestream = pyopen(filename,"wb") # header filestream.write( '\n' ) filestream.write( '\n' % FreeCAD.Version()[0]+FreeCAD.Version()[1]+FreeCAD.Version()[2] ) filestream.write( '\n' ) filestream.write( '\n' ) # campus filestream.write( '\n' % site.Name ) filestream.write( '\n' ) filestream.write( ' %s\n' % site.PostalCode ) filestream.write( ' %f\n' % site.Longitude ) filestream.write( ' %f\n' % site.Latitude ) filestream.write( ' %f/Elevation>\n' % site.Elevation.Value ) filestream.write( ' %s\n' % site.Label ) #filestream.write( ' 0\n' ) #filestream.write( ' 53158_2004\n' ) filestream.write( '\n' ) # buildings for building in site.Group: if Draft.getType(building) == "Building": filestream.write( ' \n' % (building.Name,building.BuildingType) ) filestream.write( ' $f\n' % str(building.Area.getValueAs("m^2")) ) # spaces for space in Draft.getObjectsOfType(Draft.getGroupContents(building.Group,addgroups=True),"Space"): if not space.Zone: FreeCAD.Console.PrintError(translate("Arch","Error: Space '%s' has no Zone. Aborting.\n") % space.Label) return filestream.write( ' \n' % (space.Name, space.SpaceType, space.Zone.Name, space.Conditioning) ) #filestream.write( ' %s\n' % space.Name ) # not sure what this is used for? filestream.write( ' %s\n' % space.Label ) filestream.write( ' %s\n' % space.Description ) filestream.write( ' %i\n' % space.NumberOfPeople) filestream.write( ' %f\n' % space.LightingPower/space.Area.getValueAs("m^2") ) filestream.write( ' %f\n' % space.EquipmentPower/space.Area.getValueAs("m^2") ) filestream.write( ' $f\n' % space.Area.getValueAs("m^2") ) filestream.write( ' $f\n' % FreeCAD.Units.Quantity(space.Shape.Volume,FreeCAD.Units.Volume).getValueAs("m^3") ) filestream.write( ' \n' % space.Name ) # shells for solid in space.Shape.Solids: filestream.write( ' \n' ) for face in solid.Faces: filestream.write( ' \n' ) for v in face.OuterWire.Vertexes: filestream.write( ' \n' ) filestream.write( ' %f\n' % v.Point.x ) filestream.write( ' %f\n' % v.Point.y ) filestream.write( ' %f\n' % v.Point.z ) filestream.write( ' \n' ) filestream.write( ' \n' ) filestream.write( ' \n' ) filestream.write( ' \n' ) filestream.write( ' \n' ) # surfaces for i,face in enumerate(space.Shape.Faces): filestream.write( ' \n' ) filestream.write( ' \n' ) for v in face.OuterWire.Vertexes: filestream.write( ' \n' ) filestream.write( ' %f\n' % v.Point.x ) filestream.write( ' %f\n' % v.Point.y ) filestream.write( ' %f\n' % v.Point.z ) filestream.write( ' \n' ) filestream.write( ' \n' ) filestream.write( ' \n' ) filestream.write( ' \n' ) filestream.write( ' \n' ) filestream.write( ' \n' ) filestream.write( '\n' ) filestream.write( '' ) ''' 18000.00000 Lab corridor 1.00000 1.50000 0.00000 800.00000 6400.00000 0.00000 1200.00000 0.00000 0.00000 1200.00000 96.00000 480.00000 1200.00000 96.00000 480.00000 1200.00000 0.00000 ... repeat 9.981497 -31.19363 0 9.981497 -5.193626 0 9.981497 -5.193626 100 9.981497 -31.19363 100 21E2 ... repeat Floor 90.00 0.00000 1320.00000 0.00000 180.00 480.00000 240.00000 0.00000 1320.00000 0.00000 480.00000 1320.00000 0.00000 960.00000 1320.00000 0.00000 960.00000 1200.00000 0.00000 480.00000 1200.00000 0.00000 0.00000 1200.00000 0.00000 Surface 4 180.00 960.00000 0.00000 0.00000 90.00 114.00000 480.00000 960.00000 0.00000 0.00000 1440.00000 0.00000 0.00000 1440.00000 0.00000 114.00000 960.00000 0.00000 114.00000 Opening1 96.00000 24.00000 72.00000 48.00000 1056.00000 0.00000 24.00000 1104.00000 0.00000 24.00000 1104.00000 0.00000 96.00000 1056.00000 0.00000 96.00000 Opening2 216.00000 24.00000 72.00000 48.00000 1176.00000 0.00000 24.00000 1224.00000 0.00000 24.00000 1224.00000 0.00000 96.00000 1176.00000 0.00000 96.00000 Opening3 336.00000 24.00000 72.00000 48.00000 1296.00000 0.00000 24.00000 1344.00000 0.00000 24.00000 1344.00000 0.00000 96.00000 1296.00000 0.00000 96.00000 ... repeat Standard Standard Standard Standard Lab and Corridor 0" 0.00000 0.00000 2.37037 812.69841 72.00000 75.00000 Office 1" 0.13333 20.00000 0.05333 8.00000 72.00000 75.00000 Warehouse 5/32" 0.05000 25.71429 0.00000 0.00000 60.00000 80.00000 Autodesk, Inc. Autodesk Project Vasari CEA TP2.0 20110514_1800 Microsoft Windows XP sp3_LabandCorridor_Lab1 5534.837890625 Space Cooling Roof Cond 21E3 ... repeat '''