def insert(filename, docname): """Imports a file using importDXF.insert(). If no document exist, it is created. Parameters ---------- filename : str The path to the filename to be opened. docname : str The name of the active App::Document if one exists, or of the new one created. Returns ------- App::Document The active FreeCAD document, or the document created if none exists, with the parsed information. """ dxf = convertToDxf(filename) if dxf: import importDXF # Warning: function doesn't return? doc = importDXF.insert(dxf, docname) return doc return
def insert(filename,docname): "called when freecad imports a file" dxf = convertToDxf(filename) if dxf: import importDXF doc = importDXF.insert(dxf,docname) return doc return
def insert(filename, docname): "called when freecad imports a file" dxf = convertToDxf(filename) if dxf: import importDXF doc = importDXF.insert(dxf, docname) return doc return
def loadDXF (DXFFilename): # this adds some number of objects to mydoc (three maybe?) # the one we're interested in has the name importDXF.insert(DXFFilename,mydoc.Name) group = mydoc.getObject(os.path.splitext(os.path.split(DXFFilename)[1])[0]) partFeature = mydoc.getObject("Block_PART__FEATURE") nLayers = len(group.OutList) retDict = {} for i in range(nLayers): layerName = str(group.OutList[i].Label) layerShapes = [] nShapesInThisLayer = len(group.OutList[i].Group) for j in range (nShapesInThisLayer): layerShapes.append(group.OutList[i].Group[j].Shape) retDict[layerName] = layerShapes # clean it all up nObjects = len(mydoc.Objects) for i in range(nObjects): mydoc.removeObject(mydoc.Objects[0].Name) return retDict
def makeFaceDXF(): global copper_diffuse, silks_diffuse global use_LinkGroups, use_AppPart doc = FreeCAD.ActiveDocument if doc is None: FreeCAD.newDocument() doc = FreeCAD.ActiveDocument docG = FreeCADGui.ActiveDocument Filter = "" last_pcb_path = "" pg = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/kicadStepUp") last_pcb_path = pg.GetString("last_pcb_path") fn, Filter = PySide.QtGui.QFileDialog.getOpenFileNames( None, "Open File...", make_unicode(last_pcb_path), "*.dxf") for fname in fn: path, name = os.path.split(fname) filename = os.path.splitext(name)[0] #importDXF.open(os.path.join(dirname,filename)) if len(fname) > 0: #importDXF.open(fname) last_pcb_path = os.path.dirname(fname) pg = FreeCAD.ParamGet( "User parameter:BaseApp/Preferences/Mod/kicadStepUp") pg.SetString("last_pcb_path", make_string(last_pcb_path)) # py3 .decode("utf-8") pg = FreeCAD.ParamGet( "User parameter:BaseApp/Preferences/Mod/kicadStepUpGui") pcb_color_pos = pg.GetInt('pcb_color') #print(pcb_color_pos) if pcb_color_pos == 9: silks_diffuse = (0.18, 0.18, 0.18) #slick black else: silks_diffuse = ( 0.98, 0.92, 0.84 ) # #antique white # white (0.906,0.906,0.910) doc = FreeCAD.ActiveDocument objects = [] say("loading... ") t = time.time() if doc is not None: for o in doc.Objects: objects.append(o.Name) importDXF.insert(fname, doc.Name) else: importDXF.open(fname) FreeCADGui.SendMsgToActiveView("ViewFit") timeP = time.time() - t say("loading time = " + str(timeP) + "s") edges = [] sorted_edges = [] w = [] for o in doc.Objects: if o.Name not in str(objects): if hasattr(o, 'Shape'): w1 = Part.Wire(Part.__sortEdges__(o.Shape.Edges)) w.append(w1) #print (w) f = Part.makeFace(w, 'Part::FaceMakerBullseye') for o in doc.Objects: if o.Name not in str(objects): doc.removeObject(o.Name) if 'Silk' in filename: layerName = 'Silks' else: layerName = 'Tracks' if 'F.' in filename or 'F_' in filename: layerName = 'top' + layerName if 'B.' in filename or 'B_' in filename: layerName = 'bot' + layerName doc.addObject('Part::Feature', layerName).Shape = f newShape = doc.ActiveObject botOffset = 1.6 if 'Silk' in layerName: docG.getObject(newShape.Name).ShapeColor = silks_diffuse else: docG.getObject( newShape.Name ).ShapeColor = brass_diffuse #copper_diffuse #(0.78,0.56,0.11) if len(doc.getObjectsByLabel('Pcb')) > 0: newShape.Placement = doc.getObjectsByLabel('Pcb')[0].Placement #botTracks.Placement = doc.Pcb.Placement if len(doc.getObjectsByLabel('Board_Geoms')) > 0: if use_AppPart and not use_LinkGroups: doc.getObject('Board_Geoms').addObject(newShape) elif use_LinkGroups: doc.getObject('Board_Geoms').ViewObject.dropObject( newShape, None, '', []) if hasattr(doc.getObjectsByLabel('Pcb')[0], 'Shape'): botOffset = doc.getObjectsByLabel( 'Pcb')[0].Shape.BoundBox.ZLength else: botOffset = doc.getObjectsByLabel( 'Pcb')[0].OutList[1].Shape.BoundBox.ZLength #elif 'bot' in layerName: # newShape.Placement.Base.z-=1.6 if 'top' in layerName: newShape.Placement.Base.z += 0.07 if 'bot' in layerName: newShape.Placement.Base.z -= botOffset + 0.07 timeD = time.time() - t - timeP say("displaying time = " + str(timeD) + "s") FreeCADGui.SendMsgToActiveView("ViewFit") docG.activeView().viewAxonometric()