diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index eef95a530..bca6b05e9 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -162,3 +162,12 @@ App.addExportType("Autodesk DXF (*.dxf)","importDXF") App.addExportType("Flattened SVG (*.svg)","importSVG") App.addExportType("Open CAD Format (*.oca)","importOCA") +# DWG support +import importDWG +if importDWG.getTeighaConvertor(): + App.addImportType("Autodesk DWG (*.dwg)","importDWG") + App.addExportType("Autodesk DWG (*.dwg)","importDWG") +else: + from DraftTools import translate + FreeCAD.Console.PrintMessage(str(translate("draft","Teigha File Converter not found, DWG support will be disabled.\n"))) + diff --git a/src/Mod/Draft/importDWG.py b/src/Mod/Draft/importDWG.py new file mode 100644 index 000000000..8a0cf2672 --- /dev/null +++ b/src/Mod/Draft/importDWG.py @@ -0,0 +1,85 @@ +# -*- coding: utf8 -*- + +#*************************************************************************** +#* * +#* Copyright (c) 2009 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 (GPL) * +#* 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 * +#* * +#*************************************************************************** + +"FreeCAD Draft Workbench - DWG importer/exporter" + +if open.__module__ == '__builtin__': + pythonopen = open # to distinguish python built-in open function from the one declared here + +def open(filename): + "called when freecad opens a file." + teigha = getTeighaConvertor() + dxf = convertToDxf(filename) + import importDXF + doc = importDXF.open(dxf) + return doc + +def insert(filename,docname): + "called when freecad imports a file" + dxf = convertToDxf(filemname) + import importDXF + doc = importDXF.insert(dxf,docname) + return doc + +def export(objectslist,filename): + "called when freecad exports a file" + import importDXF,os,tempfile + outdir = tempfile.mkdtemp() + dxf = outdir + os.sep + os.path.splitext(os.path.basename(filename))[0] + ".dxf" + importDXF.export(objectslist,dxf) + convertToDwg(dxf,filename) + return filename + +def getTeighaConvertor(): + "finds the Teigha Convertor executable" + import os,platform + if platform.system() == "Linux": + teigha = "/usr/bin/TeighaFileConverter" + if os.path.exists(teigha): + return teigha + return None + +def convertToDxf(dwgfilename): + "converts a DWG file to DXF" + import os,tempfile + teigha = getTeighaConvertor() + indir = os.path.dirname(dwgfilename) + outdir = tempfile.mkdtemp() + basename = os.path.basename(dwgfilename) + cmdline = teigha + ' "' + indir + '" "' + outdir + '" "ACAD2010" "DXF" "0" "1" "' + basename + '"' + print "converting " + cmdline + os.system(cmdline) + return outdir + os.sep + os.path.splitext(basename)[0] + ".dxf" + +def convertToDwg(dxffilename,dwgfilename): + "converts a DXF file to DWG" + import os + teigha = getTeighaConvertor() + indir = os.path.dirname(dxffilename) + outdir = os.path.dirname(dwgfilename) + basename = os.path.basename(dxffilename) + cmdline = teigha + ' "' + indir + '" "' + outdir + '" "ACAD2010" "DWG" "0" "1" "' + basename + '"' + print "converting " + cmdline + os.system(cmdline) + return dwgfilename diff --git a/src/WindowsInstaller/ModDraft.wxi b/src/WindowsInstaller/ModDraft.wxi index 720a39810..eb43fee40 100644 --- a/src/WindowsInstaller/ModDraft.wxi +++ b/src/WindowsInstaller/ModDraft.wxi @@ -40,6 +40,7 @@ +