Beispiel #1
0
    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"])
Beispiel #2
0
def exportVRML(doc, modelName, scale, dir):

    ## Export to VRML scaled 1/2.54
    #VrmlFileName='.//'+doc.Label+'.wrl'
    ## outdir=os.path.dirname(os.path.realpath(__file__))+dir
    outdir = dir
    #FreeCAD.Console.PrintMessage('\r\n'+outdir)
    VrmlFileName = outdir + '/' + modelName + '.wrl'
    StepFileName = outdir + '/' + modelName + '.step'
    objs = []
    objs = GetListOfObjects(FreeCAD, doc)
    #objs.append(FreeCAD.getDocument(doc.Name).getObject("Fusion001"))
    FreeCAD.ActiveDocument.addObject('Part::Feature',
                                     'Vrml_model').Shape = objs[0].Shape
    FreeCAD.ActiveDocument.ActiveObject.Label = 'Vrml_model'
    FreeCADGui.ActiveDocument.ActiveObject.ShapeColor = FreeCADGui.getDocument(
        doc.Name).getObject(objs[0].Name).ShapeColor
    FreeCADGui.ActiveDocument.ActiveObject.LineColor = FreeCADGui.getDocument(
        doc.Name).getObject(objs[0].Name).LineColor
    FreeCADGui.ActiveDocument.ActiveObject.PointColor = FreeCADGui.getDocument(
        doc.Name).getObject(objs[0].Name).PointColor
    FreeCADGui.ActiveDocument.ActiveObject.DiffuseColor = FreeCADGui.getDocument(
        doc.Name).getObject(objs[0].Name).DiffuseColor
    FreeCAD.ActiveDocument.recompute()
    newObj = FreeCAD.getDocument(doc.Name).getObject('Vrml_model')
    #scale to export vrml  start
    Draft.scale(newObj,
                delta=FreeCAD.Vector(scale, scale, scale),
                center=FreeCAD.Vector(0, 0, 0),
                legacy=True)

    FreeCAD.activeDocument().recompute()
    #we need to remove object to export only scaled model
    FreeCAD.getDocument(doc.Name).removeObject(objs[0].Name)
    __objs__ = []
    __objs__.append(FreeCAD.getDocument(doc.Name).getObject("Vrml_model"))
    FreeCADGui.export(__objs__, VrmlFileName)
    FreeCAD.activeDocument().recompute()

    #restoring step module
    import ImportGui
    ImportGui.insert(StepFileName, doc.Name)

    FreeCAD.Console.PrintMessage(FreeCAD.ActiveDocument.ActiveObject.Label +
                                 " exported and scaled to Vrml\r\n")
    del __objs__

    return 0
def exportVRML(doc,modelName,scale,dir):

	## Export to VRML scaled 1/2.54
	#VrmlFileName='.//'+doc.Label+'.wrl'
	## outdir=os.path.dirname(os.path.realpath(__file__))+dir
	outdir=dir
	FreeCAD.Console.PrintMessage('\r\n'+outdir)
	VrmlFileName=outdir+'/'+modelName+'.wrl'
	StepFileName=outdir+'/'+modelName+'.step'
	objs=[]
	objs=GetListOfObjects(FreeCAD, doc)
	#objs.append(FreeCAD.getDocument(doc.Name).getObject("Fusion001"))
	FreeCAD.ActiveDocument.addObject('Part::Feature','Vrml_model').Shape=objs[0].Shape
	FreeCAD.ActiveDocument.ActiveObject.Label='Vrml_model'
	FreeCADGui.ActiveDocument.ActiveObject.ShapeColor=FreeCADGui.getDocument(doc.Name).getObject(objs[0].Name).ShapeColor
	FreeCADGui.ActiveDocument.ActiveObject.LineColor=FreeCADGui.getDocument(doc.Name).getObject(objs[0].Name).LineColor
	FreeCADGui.ActiveDocument.ActiveObject.PointColor=FreeCADGui.getDocument(doc.Name).getObject(objs[0].Name).PointColor
	FreeCADGui.ActiveDocument.ActiveObject.DiffuseColor=FreeCADGui.getDocument(doc.Name).getObject(objs[0].Name).DiffuseColor
	FreeCAD.ActiveDocument.recompute()
	newObj=FreeCAD.getDocument(doc.Name).getObject('Vrml_model')
	#scale to export vrml  start
	Draft.scale(newObj,delta=FreeCAD.Vector(scale,scale,scale),center=FreeCAD.Vector(0,0,0),legacy=True)

	FreeCAD.activeDocument().recompute()
	#we need to remove object to export only scaled model
	FreeCAD.getDocument(doc.Name).removeObject(objs[0].Name)
	__objs__=[]
	__objs__.append(FreeCAD.getDocument(doc.Name).getObject("Vrml_model"))
	FreeCADGui.export(__objs__,VrmlFileName)
	FreeCAD.activeDocument().recompute()

	#restoring step module
	import ImportGui
	ImportGui.insert(StepFileName,doc.Name)

	FreeCAD.Console.PrintMessage(FreeCAD.ActiveDocument.ActiveObject.Label+" exported and scaled to Vrml\r\n")
	del __objs__

	return 0
Beispiel #4
0
 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"])
def export(ftype, componentName, componentModel, filename, fuse=False, scale=None):
    """ Exports given ComponentModel object using FreeCAD.

    `ftype` : one of "STEP", "VRML", "FREECAD", "X3D"
    `componentModel` : a ComponentModel instance
    `filename` : name of the file, extension is important
    `fuse` : fuse objects together before export (preserves color)
    `scale` : scales the model with this factor before exporting

    X3D exporter doesn't support `fuse` parameter.
    """
    objects = componentModel.parts

    if len(objects) < 1:
        raise Exception("ComponentModel is empty!")

    if len(objects) == 1: # can't fuse if there is only 1 object
        fuse = False

    # export to X3D or Simple VRML, continue for other exporters (VRML, FREECAD, STEP)
    if ftype in ["X3D", "S_VRML"]:
        if fuse: print("%s exporter can't do fuse, ignoring." % ftype)

        from export_x3d import exportX3D, Mesh
        from export_vrml import exportVRML

        meshes = [shapeToMesh(o[0].toFreecad(), o[1], scale) for o in objects]

        if ftype == "X3D":
            exportX3D(meshes, filename)
        else: # S_VRML
            exportVRML(meshes, filename)

        return

    # init FreeCADGui
    try:
        import ImportGui
    except ImportError:
        FreeCADGui.showMainWindow()
        FreeCADGui.getMainWindow().hide() # prevent splash of main window
        import ImportGui # must be after `showMainWindow`

    # make sure RefineShape=False
    pg = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Part/Boolean")
    usersRSOption = pg.GetBool("RefineModel") # will be restored, we promise
    pg.SetBool("RefineModel", False)

    # create a FreeCAD document
    doc = FreeCAD.newDocument()

    # create objects
    fcobjects = [makeFCObject(doc, componentName+"_"+co[2], co[0], co[1])
                 for co in objects]

    if fuse:
        fuseobj = doc.addObject("Part::MultiFuse", componentName)
        fuseobj.Shapes = fcobjects
        doc.recompute()
        exportObjects = [fuseobj]
    else:
        exportObjects = fcobjects

    if scale:
        import Draft
        v = FreeCAD.Vector(scale, scale, scale)
        vc = FreeCAD.Vector(0,0,0)
        # legacy=False, sometimes fail if scale < 1.0
        exportObjects = [Draft.scale(obj, delta=v, center=vc, legacy=True) for obj in exportObjects]

    doc.recompute()

    if ftype == "STEP":
        # check filename
        if not os.path.splitext(filename)[1] in ['.stp', '.step']:
            raise Exception("Filename for STEP export must end with '.stp' or '.step'.")
        ImportGui.export(exportObjects, filename)

    elif ftype == "VRML":
        # check filename
        if not os.path.splitext(filename)[1] in ['.wrl', '.vrml']:
            raise Exception("Filename for VRML export must end with '.wrl' or '.vrml'.")

        # workaround for not exporting unselected objects (v0.16)
        # http://www.freecadweb.org/tracker/view.php?id=2221
        FreeCADGui.Selection.clearSelection()
        for o in exportObjects: FreeCADGui.Selection.addSelection(o)

        # deal with points and lines
        for o in exportObjects: o.ViewObject.DisplayMode = "Shaded"

        FreeCADGui.export(exportObjects, filename)

    elif ftype == "FREECAD":
        for obj in list(doc.Objects):
            if not (obj in exportObjects): doc.removeObject(obj.Name)
        doc.saveAs(filename)

    else:
        raise Exception("Unknown export file type!")

    # restore RefineShape option
    pg.SetBool("RefineModel", usersRSOption)
Beispiel #6
0
search_folders[0] = search_folders[0][1:]
search_folders[-1] = search_folders[-1][:-1]
last_date = os.environ.get('LAST_DATE')
oda_path = os.environ.get('ODA_PATH')

document_index = 0
for search_folder in search_folders:
    for root, dirs, files in os.walk(search_folder):
        for file in files:
            if file.endswith('.dwg'):
                try:
                    file_path = root + "\\" + file
                    mtime = os.path.getctime(file_path)
                    last_modified_date = datetime.fromtimestamp(mtime)
                    if last_modified_date > datetime.strptime(
                            last_date, '%Y-%m-%d %H:%M:%S'):
                        convertToDxf(file_path)
                        importDXF.open(tmp_folder + "\\" + file[:-3] + "dxf")
                        document = list(
                            app.listDocuments().keys())[document_index]
                        document_index += 1
                        app.setActiveDocument(document)
                        app.ActiveDocument = app.getDocument(document)

                        gui.export(app.ActiveDocument.Objects,
                                   results_folder + "\\" + file[:-3] + "pdf")
                except OSError:
                    mtime = 0
dotenv.set_key(dotenv_path, "LAST_DATE",
               str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
                    FreeCAD.setActiveDocument("Unnamed")
                    ImportGui.insert(PATH_toStepFiles + FNME_stepfile,"Unnamed")
                    FNME_vrmlfile = FNME_stepfile[:-4] + ".wrl"
                    # change display mode and scale down
                    for part in FreeCAD.ActiveDocument.Objects:
                        part.ViewObject.DisplayMode = 1 #Shaded
                        Draft.scale(part,delta=App.Vector(0.3937,0.3937,0.3937),center=App.Vector(0,0,0),legacy=True)
                    if FLAG_makeTransparent: # if transparency is needed
                        
#                        from PySide import QtGui
#                        QtGui.QInputDialog.getText(None, "Get text", "Input:")[0]
                        pass
                    __objs__=[] # select all parts (again)
                    for part in FreeCAD.ActiveDocument.Objects:                    
                        __objs__.append(part)
                    FreeCADGui.export(__objs__,(PATH_toVrmlFiles + FNME_vrmlfile))
                    del __objs__
                    FreeCAD.closeDocument("Unnamed")

                    
                    # add license stuff to fresh VRML file
                    print "working on",FNME_vrmlfile
                    try:
                        HDLR_vrmlfile = open(PATH_toVrmlFiles + FNME_vrmlfile, 'r') # open
                    except:
                        print "broken_4"
                    else:
                        HDLR_vrmlfile.seek(0)
                        PMBL_vrmlfile = HDLR_vrmlfile.readlines()
                        HDLR_vrmlfile.close()
                        CNT_cutoff = 0
Beispiel #8
0
## Export as a step model
exp_objects = []
for obj in FreeCAD.ActiveDocument.Objects:
  # select all but indivudial Spheres and Sketch
  if (obj.Name.find("Sphere") == -1) and (obj.Name.find("Sketch") == -1):
    Gui.Selection.addSelection(obj)
    exp_objects.append(obj)
  else:
    FreeCAD.ActiveDocument.removeObject(obj.Name)

App.activeDocument().addObject("Part::MultiFuse","Fusion2")
App.activeDocument().Fusion2.Shapes = exp_objects
App.ActiveDocument.recompute()
for obj in exp_objects:
    FreeCAD.ActiveDocument.removeObject(obj.Name) 
exp_objects= []

exp_objects.append(FreeCAD.ActiveDocument.getObject("Fusion2"))
ImportGui.export(exp_objects,os.path.join(directory, name + '.step'))
del exp_objects
# Scale to mil before export to VRML for KiCAD use
Draft.scale(FreeCAD.ActiveDocument.ActiveObject, FreeCAD.Vector(MMTOMIL,MMTOMIL,MMTOMIL))
FreeCAD.ActiveDocument.removeObject("Fusion2") 

### Export as a VRML model
exp_objects = []
exp_objects.append(FreeCAD.ActiveDocument.getObject("Scale"))
FreeCADGui.export(exp_objects,os.path.join(directory, name + '.wrl'))
del exp_objects
exit(1)
exp_objects = []
for obj in FreeCAD.ActiveDocument.Objects:
  # select all but indivudial Spheres and Sketch
  if (obj.Name.find("Pin") == -1) and (obj.Name.find("Sketch") == -1):
    Gui.Selection.addSelection(obj)
    exp_objects.append(obj)
  else:
    FreeCAD.ActiveDocument.removeObject(obj.Name)

App.activeDocument().addObject("Part::MultiFuse","Fusion2")
App.activeDocument().Fusion2.Shapes = exp_objects
App.ActiveDocument.recompute()
for obj in exp_objects:
    FreeCAD.ActiveDocument.removeObject(obj.Name) 
exp_objects= []

exp_objects.append(FreeCAD.ActiveDocument.getObject("Fusion2"))
ImportGui.export(exp_objects,os.path.join(directory, name + '.step'))
del exp_objects
# Scale to mil before export to VRML for KiCAD use
Draft.scale(FreeCAD.ActiveDocument.ActiveObject,
    FreeCAD.Vector(MMTOMIL, MMTOMIL, MMTOMIL))
FreeCAD.ActiveDocument.removeObject("Fusion2") 

### Export as a VRML model
exp_objects = []
exp_objects.append(FreeCAD.ActiveDocument.getObject("Scale"))
FreeCADGui.export(exp_objects,os.path.join(directory, name + '.wrl'))
del exp_objects
exit(1)
def export(ftype,
           componentName,
           componentModel,
           filename,
           fuse=False,
           scale=None):
    """ Exports given ComponentModel object using FreeCAD.

    `ftype` : one of "STEP", "VRML", "FREECAD", "X3D"
    `componentModel` : a ComponentModel instance
    `filename` : name of the file, extension is important
    `fuse` : fuse objects together before export (preserves color)
    `scale` : scales the model with this factor before exporting

    X3D exporter doesn't support `fuse` parameter.
    """
    objects = componentModel.parts

    if len(objects) < 1:
        raise Exception("ComponentModel is empty!")

    if len(objects) == 1:  # can't fuse if there is only 1 object
        fuse = False

    # export to X3D or Simple VRML, continue for other exporters (VRML, FREECAD, STEP)
    if ftype in ["X3D", "S_VRML"]:
        if fuse: print("%s exporter can't do fuse, ignoring." % ftype)

        from export_x3d import exportX3D, Mesh
        from export_vrml import exportVRML

        meshes = [shapeToMesh(o[0].toFreecad(), o[1], scale) for o in objects]

        if ftype == "X3D":
            exportX3D(meshes, filename)
        else:  # S_VRML
            exportVRML(meshes, filename)

        return

    # init FreeCADGui
    try:
        import ImportGui
    except ImportError:
        FreeCADGui.showMainWindow()
        FreeCADGui.getMainWindow().hide()  # prevent splash of main window
        import ImportGui  # must be after `showMainWindow`

    # make sure RefineShape=False
    pg = FreeCAD.ParamGet(
        "User parameter:BaseApp/Preferences/Mod/Part/Boolean")
    usersRSOption = pg.GetBool("RefineModel")  # will be restored, we promise
    pg.SetBool("RefineModel", False)

    # create a FreeCAD document
    doc = FreeCAD.newDocument()

    # create objects
    fcobjects = [
        makeFCObject(doc, componentName + "_" + co[2], co[0], co[1])
        for co in objects
    ]

    if fuse:
        fuseobj = doc.addObject("Part::MultiFuse", componentName)
        fuseobj.Shapes = fcobjects
        doc.recompute()
        exportObjects = [fuseobj]
    else:
        exportObjects = fcobjects

    if scale:
        import Draft
        v = FreeCAD.Vector(scale, scale, scale)
        vc = FreeCAD.Vector(0, 0, 0)
        # legacy=False, sometimes fail if scale < 1.0
        exportObjects = [
            Draft.scale(obj, delta=v, center=vc, legacy=True)
            for obj in exportObjects
        ]

    doc.recompute()

    if ftype == "STEP":
        # check filename
        if not os.path.splitext(filename)[1] in ['.stp', '.step']:
            raise Exception(
                "Filename for STEP export must end with '.stp' or '.step'.")
        ImportGui.export(exportObjects, filename)

    elif ftype == "VRML":
        # check filename
        if not os.path.splitext(filename)[1] in ['.wrl', '.vrml']:
            raise Exception(
                "Filename for VRML export must end with '.wrl' or '.vrml'.")

        # workaround for not exporting unselected objects (v0.16)
        # http://www.freecadweb.org/tracker/view.php?id=2221
        FreeCADGui.Selection.clearSelection()
        for o in exportObjects:
            FreeCADGui.Selection.addSelection(o)

        # deal with points and lines
        for o in exportObjects:
            o.ViewObject.DisplayMode = "Shaded"

        FreeCADGui.export(exportObjects, filename)

    elif ftype == "FREECAD":
        for obj in list(doc.Objects):
            if not (obj in exportObjects): doc.removeObject(obj.Name)
        doc.saveAs(filename)

    else:
        raise Exception("Unknown export file type!")

    # restore RefineShape option
    pg.SetBool("RefineModel", usersRSOption)
                    # change display mode and scale down
                    for part in FreeCAD.ActiveDocument.Objects:
                        part.ViewObject.DisplayMode = 1  #Shaded
                        Draft.scale(part,
                                    delta=App.Vector(0.3937, 0.3937, 0.3937),
                                    center=App.Vector(0, 0, 0),
                                    legacy=True)
                    if FLAG_makeTransparent:  # if transparency is needed

                        #                        from PySide import QtGui
                        #                        QtGui.QInputDialog.getText(None, "Get text", "Input:")[0]
                        pass
                    __objs__ = []  # select all parts (again)
                    for part in FreeCAD.ActiveDocument.Objects:
                        __objs__.append(part)
                    FreeCADGui.export(__objs__,
                                      (PATH_toVrmlFiles + FNME_vrmlfile))
                    del __objs__
                    FreeCAD.closeDocument("Unnamed")

                    # add license stuff to fresh VRML file
                    print "working on", FNME_vrmlfile
                    try:
                        HDLR_vrmlfile = open(PATH_toVrmlFiles + FNME_vrmlfile,
                                             'r')  # open
                    except:
                        print "broken_4"
                    else:
                        HDLR_vrmlfile.seek(0)
                        PMBL_vrmlfile = HDLR_vrmlfile.readlines()
                        HDLR_vrmlfile.close()
                        CNT_cutoff = 0