def saveFile(self): import FreeCADGui if self.form.Radio_Selection.isChecked(): objects = FreeCADGui.Selection.getSelection() else: objects = [ obj for obj in FreeCAD.ActiveDocument.Objects if obj.ViewObject.isVisible() ] if not objects: QtGui.QMessageBox.critical( None, translate("Web", "Nothing to upload"), translate( "The selection of the document contains no object to upload" )) return None filename = os.path.join(tempfile._get_default_tempdir(), next(tempfile._get_candidate_names())) filetype = self.form.Combo_Filetype.currentIndex() # 0 = obj + mtl, 1 = obj, 2 = dae, 3 = stl, 4 = IGES, 5 = iv (currently not working) if filetype == 0: # OBJ + MTL import importOBJ importOBJ.export(objects, filename + ".obj") return self.packFiles(filename, [filename + ".obj", filename + ".mtl"]) elif filetype == 1: # OBJ (mesh exporter) import Mesh Mesh.export(objects, filename + ".obj") return self.packFiles(filename, [filename + ".obj"]) elif filetype == 2: # DAE import importDAE importDAE.export(objects, filename + ".dae") return self.packFiles(filename, [filename + ".dae"]) elif filetype == 3: # STL import Mesh Mesh.export(objects, filename + ".stl") return self.packFiles(filename, [filename + ".stl"]) elif filetype == 4: # IGES import Part Part.export(objects, filename + ".iges") return self.packFiles(filename, [filename + ".iges"]) elif filetype == 5: # IV import FreeCADGui FreeCADGui.export(objects, filename + ".iv") # removing FreeCAD-specific nodes f = open(filename + ".iv", "rb") s = f.read() f.close() s = s.replace("SoBrepEdgeSet", "SoIndexedLineSet") s = s.replace("SoBrepFaceSet", "SoIndexedFaceSet") s = s.replace("\n", "--endl--") s = re.sub("highlightIndex .*?\]", " ", s) s = re.sub("partIndex .*?\]", " ", s) s = s.replace("--endl--", "\n") f = open(filename + ".iv", "wb") f.write(s) f.close() return self.packFiles(filename, [filename + ".iv"])
def exportDAE(obj, omesh_path): """ Export ./\"meshfolder_path\"/\"Label\"/full.dae from the FreeCAD object. Uses importDAE module and returns path to the DAE. """ omesh_path += ".dae" importDAE.export([obj], omesh_path) return omesh_path
def saveFile(self): import FreeCADGui if self.form.Radio_Selection.isChecked(): objects = FreeCADGui.Selection.getSelection() else: objects = [obj for obj in FreeCAD.ActiveDocument.Objects if obj.ViewObject.isVisible()] if not objects: QtGui.QMessageBox.critical(None,translate("WebTools","Nothing to upload"),translate("The selection of the document contains no object to upload")) return None filename = os.path.join(tempfile._get_default_tempdir(),next(tempfile._get_candidate_names())) filetype = self.form.Combo_Filetype.currentIndex() # 0 = obj + mtl, 1 = obj, 2 = dae, 3 = stl, 4 = IGES, 5 = iv (currently not working) if filetype == 0: # OBJ + MTL import importOBJ importOBJ.export(objects,filename+".obj") return self.packFiles(filename,[filename+".obj",filename+".mtl"]) elif filetype == 1: # OBJ (mesh exporter) import Mesh Mesh.export(objects,filename+".obj") return self.packFiles(filename,[filename+".obj"]) elif filetype == 2: # DAE import importDAE importDAE.export(objects,filename+".dae") return self.packFiles(filename,[filename+".dae"]) elif filetype == 3: # STL import Mesh Mesh.export(objects,filename+".stl") return self.packFiles(filename,[filename+".stl"]) elif filetype == 4: # IGES import Part Part.export(objects,filename+".iges") return self.packFiles(filename,[filename+".iges"]) elif filetype == 5: # IV import FreeCADGui # remove objects with no face (unsupported by this format) nobjects = [] for o in objects: if o.isDerivedFrom("Part::Feature"): if o.Shape.Faces: nobjects.append(o) FreeCADGui.export(nobjects,filename+".iv") # removing FreeCAD-specific nodes f = open(filename+".iv","rb") s = f.read() f.close() ver = FreeCAD.Version() vinfo = "# Exported by FreeCAD v" + ver[0] + "." + ver[1] + " build" + ver[2] + "\n" vinfo += "# http://www.freecadweb.org\n" s = s.replace("#Inventor V2.1 ascii","#Inventor V2.1 ascii\n"+vinfo) s = s.replace("SoBrepEdgeSet","IndexedLineSet") s = s.replace("SoBrepFaceSet","IndexedFaceSet") s = s.replace("SoBrepPointSet","IndexedPointSet") s = s.replace("\n","--endl--") s = re.sub("--endl--[ \t]+highlightIndex.*?--endl--","--endl--",s) s = re.sub("--endl--[ \t]+partIndex.*?--endl--","--endl--",s) s = re.sub("--endl--[ \t]+selectionIndex.*?--endl--","--endl--",s) s = re.sub("SFInt32 highlightIndex, ","",s) s = re.sub("MFInt32 partIndex, ","",s) s = re.sub("MFInt32 selectionIndex ","",s) s = re.sub(", \]"," \]",s) s = s.replace("--endl--","\n") f = open(filename+".iv","wb") f.write(s) f.close() print("saved "+filename+".iv") return self.packFiles(filename,[filename+".iv"])
import sys sys.path.append("/home/trojande/work/freecad-code/lib") import FreeCAD import Part import importDAE import pyassimp file = u"/home/trojande/work/github.com/maul-a/stp-to-gltf/part.stp" FreeCAD.newDocument() FreeCAD.setActiveDocument("Unnamed") doc = FreeCAD.getDocument("Unnamed") Part.insert(file, "Unnamed") importDAE.export(doc.Objects, u"/home/trojande/work/github.com/maul-a/stp-to-gltf/part.dae") assimp_scene = pyassimp.load('part.dae') pyassimp.export(assimp_scene, 'part.gltf', 'gltf2')