def export_file(self): # Read database: if self.file_type == 'FCStd': self.doc.recompute() # Alway recomputer before save file self.doc.saveAs(u"{}Mold_{}.FCStd".format(self.save_path, self.order_number)) else: self.doc.recompute() select = [] for obj in self.doc.Objects: if obj.Name[:5] in ['Trans', 'Fixed']: select.append(obj) self.doc.recompute() Import.export(select, "{}Mold_{}.{}".format(self.save_path, self.order_number, self.file_type))
def stripSTPfile(self, partfile, rawSTP, outfile=None, partsOnly=True): """ Strips an stpfile down to the parts defined in the parts csv input file STPfile is the output file defined in input file to HEAT, and is included in self variable. rawSTP is the input CAD file that we want to strip. If partsOnly is True then we only copy parts (not assemblies), which technically means only objects with type=Part.Feature """ print('Stripping STP file') t0 = time.time() with open(partfile) as f: part_list = f.read().splitlines() print("Read parts list...") print(part_list) #Input / Output STEP files infile = rawSTP if outfile is None: outfile = self.STPfile #If a shape has a label in part_list, keep it CAD = Import.open(infile) newobj = [] count = 0 for i, obj in enumerate(FreeCAD.ActiveDocument.Objects): if any(substring in obj.Label for substring in part_list): #conditional to check if item is part (Part.Feature) or # assembly (App.Part). # This could be adapted in future to exclude objects containing # specific string (like "_ASM") in Label that CAD engineer uses # for assemblies if partsOnly == True: if type(obj) == Part.Feature: count += 1 newobj.append(obj) newobj[-1].Placement = obj.getGlobalPlacement() else: count += 1 newobj.append(obj) newobj[-1].Placement = obj.getGlobalPlacement() #Export to a new step file Import.export(newobj, outfile) print("Step file export complete.") print("Exported {:d} part objects".format(count)) print("Execution took {:f} seconds".format(time.time() - t0)) return
if len(sys.argv)<3: print ("Usage: sys.argv[0] <in_file> <out_file>") sys.exit(1) iname=sys.argv[1] oname=sys.argv[2] print('Importing : '+iname) FreeCAD.loadFile(iname) # iterate through all objects for o in App.ActiveDocument.Objects: # find root object and export the shape #print(dir(o)) #print(o.Name) if o.TypeId == 'App::Part' : #print(o.TypeId) print('Exporting STEP file : '+oname) print('This can be a very slow process') print('for large files Please be patient') #Import.export([o],"/tmp/test4.step") Import.export([o],oname) sys.exit(0) sys.exit(0) print ("Error: can't find any object") sys.exit(1)
App.getDocument('Unnamed').recompute() f = FreeCAD.getDocument('Unnamed').addObject('Part::Extrusion', 'Extrude') f = App.getDocument('Unnamed').getObject('Extrude') f.Base = App.getDocument('Unnamed').getObject('Sketch') f.DirMode = "Custom" f.Dir = App.Vector(0.000000000000000, 0.000000000000000, 1.000000000000000) f.DirLink = None f.LengthFwd = 1.000000000000000 # длина выдавливания f.LengthRev = 0.000000000000000 f.Solid = True f.Reversed = False f.Symmetric = False f.TaperAngle = 0.000000000000000 f.TaperAngleRev = 0.000000000000000 # Gui.ActiveDocument.Extrude.ShapeColor=Gui.ActiveDocument.Sketch.ShapeColor # Gui.ActiveDocument.Extrude.LineColor=Gui.ActiveDocument.Sketch.LineColor # Gui.ActiveDocument.Extrude.PointColor=Gui.ActiveDocument.Sketch.PointColor # f.Base.ViewObject.hide() App.ActiveDocument.recompute() __objs__ = [] __objs__.append(FreeCAD.getDocument("Unnamed").getObject("Extrude")) import Import Import.export( __objs__, u"C:/Users/asea2/Desktop/PycharmProjects/Prikolno/freecadfiles/model.step") del __objs__
return vertices def generate_quad(vertices): edges = 4 * [None] for i in range(4): edges[i] = Part.makeLine(tuple(vertices[i]),tuple(vertices[(i+1)%4])) wires = 4 * [None] wires[0] = Part.Wire([edges[0],edges[3]]) wires[1] = Part.Wire([edges[2],edges[1]]) wires[2] = Part.Wire([wires[0],wires[1]]) Part.show(wires[2]) doc = FreeCAD.newDocument("tmp") print "Document created" pts, quads = parse_all_from_folder('./PetersSchemeInput/cantilever') print "Stuff parsed" for quad in quads: vertices = get_vertices(quad, pts) generate_quad(vertices) print "points plotted" __objs__ = FreeCAD.getDocument("tmp").findObjects() Import.export(__objs__, "./torus_mesh.step") print ".step exported"
App.activeDocument().addObject("Part::Cut", "TibiaCutted") App.activeDocument().TibiaCutted.Base = Tibia App.activeDocument().TibiaCutted.Tool = CutProth App.activeDocument().addObject("Part::MultiCommon", "TibialCut") App.activeDocument().TibialCut.Shapes = [ Tibia2, CutProth2, ] doc.recompute() __objs__ = [] __objs__.append(FreeCAD.getDocument("Noname").getObject("TibiaCutted")) Import.export(__objs__, u"CWD\Output\NAME\Tibia_NAME_cutted_aALPHA.step") del __objs__ __objs__ = [] __objs__.append(FreeCAD.getDocument("Noname").getObject("TibialCut")) Import.export(__objs__, u"CWD\Output\NAME\Tibia_NAME_cut_aALPHA.step") del __objs__ __objs__ = [] __objs__.append(FreeCAD.getDocument("Noname").getObject("Proth")) Import.export(__objs__, u"CWD\Output\NAME\Implant_SIZE_WLS_NAME_aALPHA.step") del __objs__ __objs__ = [] __objs__.append(FreeCAD.getDocument("Noname").getObject("Cement")) Import.export(__objs__, u"CWD\Output\NAME\C_SIZE_WLS_NAME_aALPHA.step")
App.getDocument('Unnamed').recompute() f = FreeCAD.getDocument('Unnamed').addObject('Part::Extrusion', 'Extrude') f = App.getDocument('Unnamed').getObject('Extrude') f.Base = App.getDocument('Unnamed').getObject('Sketch') f.DirMode = "Custom" f.Dir = App.Vector(0.000000000000000, 0.000000000000000, 1.000000000000000) f.DirLink = None f.LengthFwd = 4.500000000000000 f.LengthRev = 0.000000000000000 f.Solid = True f.Reversed = False f.Symmetric = False f.TaperAngle = 0.000000000000000 f.TaperAngleRev = 0.000000000000000 # Gui.ActiveDocument.Extrude.ShapeColor=Gui.ActiveDocument.Sketch.ShapeColor # Gui.ActiveDocument.Extrude.LineColor=Gui.ActiveDocument.Sketch.LineColor # Gui.ActiveDocument.Extrude.PointColor=Gui.ActiveDocument.Sketch.PointColor # f.Base.ViewObject.hide() doc.recompute() __objs__=[] __objs__.append(FreeCAD.getDocument("Unnamed").getObject("Extrude")) import Import Import.export(__objs__, u"C:/Users/asea2/Desktop/" u"PycharmProjects/Prikolno/freecadfiles/imyafila.step") del __objs__
pts = parse_csv_into_matrix(folder_path+'/verts_fine.csv',float) return pts def generate_point(vertex): free_cad_vect = FreeCAD.Vector(vertex[0],vertex[1],vertex[2]) Part.show(Part.Vertex(free_cad_vect)) doc = FreeCAD.newDocument("tmp") print "Document created" pts = parse_all_from_folder('./PetersSchemeInput/torus') print "Stuff parsed" i=0 for vertex in pts: i+=1 if i % 1000 == 0: print i generate_point(vertex) print "points plotted" __objs__ = FreeCAD.getDocument("tmp").findObjects() Import.export(__objs__, "./torus_pointcloud.step") print ".step exported"
cutobject.Tool = toolobject # Keep the reference to the subsequent cut cut_master = cutobject doc.recompute() doc.saveCopy("extrude_test_with_outline_with_cuts" + ".FCStd") # doc.activeDocument().addObject("Part::Cut","Cut") # doc.activeDocument().Cut.Base = doc.activeDocument().SVGExtrudeOutline # doc.activeDocument().Cut.Tool = doc.activeDocument().SVGExtrude # Save as step Import.export([doc.getObject(cut_master.Name)], "final_export.step") exit(0) # # # Iteratively join all the objects together # # reduce_join(joined_objects, doc) # # print(joined_objects) # doc.recompute() # doc.saveCopy("join_test_final_step" + ".FCStd") # # Now that all the joins are done, refine the shape by removing splinters # for i in range(len(joined_objects)): # feature = doc.getObject(joined_objects[i]) # refined_shape = doc.addObject("Part::Feature", "RefinedShape") # refined_shape.Shape = feature.Shape.removeSplitter()
def create_grating(slit_l,slit_h,slit_p,strut_w,num_col,num_row,fillet,col_or_ash): # Input Dimensions # strut_h = slit_h film_mrgn = strut_w*10 film_w = (slit_l + strut_w)*num_col-strut_w+2*film_mrgn film_h = (slit_h + slit_p)*num_row-strut_h+2*film_mrgn # Create new document # doc = FreeCAD.newDocument("myDoc") # Create Film # film = Draft.makeRectangle(film_w,film_h) film.Label = 'myFilm' move_film = FreeCAD.Vector(-film_mrgn,-film_mrgn,0) Draft.move(film,move_film) # Create single slit # slit = Draft.makeRectangle(slit_l,slit_h) slit.Label = 'mySlit' long_slit = (slit_l+strut_w)*num_col-strut_w # Fillet # slit.FilletRadius = slit_h/2.01*fillet if col_or_ash == 1: '''COLUMNAR FORM''' # Slit Matrix # array = Draft.makeArray(slit,FreeCAD.Vector(slit_l+strut_w,0,0),\ FreeCAD.Vector(0,slit_h+slit_p,0),num_col,num_row) grating = cut_soowon(film,array) elif col_or_ash == 2: '''ASHLAR FORM''' # Slit Matrix # row_arr1 = int(math.ceil(num_row/2.)) row_arr2 = int(math.floor(num_row/2.)) array1 = Draft.makeArray(slit,FreeCAD.Vector(slit_l+strut_w,0,0),\ FreeCAD.Vector(0,2*(slit_h+slit_p),0),num_col,row_arr1) array2 = Draft.makeArray(slit,FreeCAD.Vector(slit_l+strut_w,0,0),\ FreeCAD.Vector(0,2*(slit_h+slit_p),0),num_col-1,row_arr2) #edge_l = (slit_l-strut_w)/2 #edge = Draft.makeRectangle(edge_l,slit_h) #edge.FilletRadius = slit_h/2.01*fillet #edge_array = Draft.makeArray(edge,FreeCAD.Vector(long_slit-edge_l,0,0),\ # FreeCAD.Vector(0,2*(slit_h+slit_p),0),2,row_arr2) move_array2 = FreeCAD.Vector((slit_l+strut_w)/2,slit_h+slit_p,0) #move_edge_array = FreeCAD.Vector(0,slit_h+slit_p,0) Draft.move(array2,move_array2) #Draft.move(edge_array,move_edge_array) step1 = cut_soowon(film,array1) grating = cut_soowon(step1,array2) #step2 = cut_soowon(step1,array2) #grating = cut_soowon(step2,edge_array) elif col_or_ash == 3: num_strut = num_col - 1 grating = film for x in xrange(1,num_row+1): pseudo_strut = random.randint(num_strut-int(math.ceil(num_strut/2.)),\ num_strut+int(math.ceil(num_strut/2.))) new_slit_l = (long_slit- pseudo_strut*strut_w)/(pseudo_strut+1) new_slit = Draft.makeRectangle(new_slit_l,slit_h) new_slit.FilletRadius = slit_h/2.01*fillet move_new_slit = FreeCAD.Vector(0,(x-1)*(slit_h+slit_p),0) Draft.move(new_slit,move_new_slit) array = Draft.makeArray(new_slit,FreeCAD.Vector(new_slit_l+strut_w,0,0), \ FreeCAD.Vector(0,slit_h+slit_p,0),(pseudo_strut+1),1) grating = cut_soowon(grating,array) elif col_or_ash == 4: '''This function randomize the starting point of the strut on columnar form but maintaining strut density''' sigma = 0.01 #Standard Deviation: 10 nm # for x in xrange(1,num_row+1): first_slit_l = random.gauss(slit_l, sigma) if first_slit_l < slit_l: last_slit_l = slit_l - first_slit_l else: last_slit_l = 2*slit_l - first_slit_l first_slit_l = first_slit_l - slit_l first_slit = Draft.makeRectangle(first_slit_l,slit_h) move_first = FreeCAD.Vector(0, (x-1)*(slit_h+slit_p) ,0) Draft.move(first_slit,move_first) middle_array = Draft.makeArray(slit,FreeCAD.Vector(slit_l+strut_w,0,0),\ FreeCAD.Vector(0,1,0),num_col-1,1) move_middle = FreeCAD.Vector(first_slit_l+strut_w,(x-1)*(slit_h+slit_p),0) Draft.move(middle_array,move_middle) last_slit = Draft.makeRectangle(last_slit_l,slit_h) move_last = FreeCAD.Vector(first_slit_l+(strut_w+slit_l)*(num_col-1)+strut_w,\ (x-1)*(slit_h+slit_p),0) Draft.move(last_slit,move_last) film = cut_soowon(film,first_slit) film = cut_soowon(film,middle_array) film = cut_soowon(film,last_slit) grating = film elif col_or_ash == 5: '''RANDOMIZED ASHLAR''' sigma = 0.01 #Standard Deviation: 10 nm # num_arr1 = int(math.ceil(num_row/2.)) num_arr2 = num_row - num_arr1 for x in xrange(1,num_arr1+1): # first_slit_l = random.uniform(slit_l-2*strut_w , slit_l+2*strut_w) # (long_slit - first_slit_l) # if first_slit_l < slit_l: # last_slit_l = slit_l - first_slit_l # else: # last_slit_l = 2*slit_l - first_slit_l # first_slit_l = first_slit_l - slit_l # first_slit = Draft.makeRectangle(first_slit_l,slit_h) # move_first = FreeCAD.Vector(0, (x-1)*2*(slit_h+slit_p) ,0) # Draft.move(first_slit,move_first) rand_start = random.uniform(-strut_w , strut_w) array = Draft.makeArray(slit,FreeCAD.Vector(slit_l+strut_w,0,0),\ FreeCAD.Vector(0,1,0),num_col,1) move_array = FreeCAD.Vector(rand_start,(x-1)*2*(slit_h+slit_p),0) Draft.move(array,move_array) film = cut_soowon(film,array) # middle_array = Draft.makeArray(slit,FreeCAD.Vector(slit_l+strut_w,0,0),\ # FreeCAD.Vector(0,1,0),num_col-1,1) # middle = FreeCAD.Vector(0,(x-1)*2*(slit_h+slit_p),0) # move_middle = FreeCAD.Vector(first_slit_l+strut_w,(x-1)*2*(slit_h+slit_p),0) # Draft.move(middle_array,move_middle) # last_slit = Draft.makeRectangle(last_slit_l,slit_h) # move_last = FreeCAD.Vector(first_slit_l+(strut_w+slit_l)*(num_col-1)+strut_w,\ # (x-1)*2*(slit_h+slit_p),0) # Draft.move(last_slit,move_last) # film = cut_soowon(film,first_slit) # film = cut_soowon(film,middle_array) # film = cut_soowon(film,last_slit) for x in xrange(1,num_arr2+1): '''edge_l = (slit_l-strut_w)/2 first_slit_l = random.uniform(edge_l-2*strut_w, edge_l+2*strut_w) first_slit = Draft.makeRectangle(first_slit_l,slit_h) move_first = FreeCAD.Vector(0, (2*x-1)*(slit_h+slit_p) ,0) # move slit to the 2nd layer. Then, move up to every other layer. Draft.move(first_slit,move_first) middle_array = Draft.makeArray(slit,FreeCAD.Vector(slit_l+strut_w,0,0),\ FreeCAD.Vector(0,1,0),num_col-1,1) # Number of slit is going to be one less then the number of column. move_middle = FreeCAD.Vector(first_slit_l+strut_w,(2*x-1)*(slit_h+slit_p),0) Draft.move(middle_array,move_middle) last_slit_l = slit_l - strut_w - first_slit_l last_slit = Draft.makeRectangle(last_slit_l,slit_h) move_last = FreeCAD.Vector(first_slit_l+(strut_w+slit_l)*(num_col-1)+strut_w,\ (2*x-1)*(slit_h+slit_p),0) Draft.move(last_slit,move_last) film = cut_soowon(film,first_slit) film = cut_soowon(film,middle_array) film = cut_soowon(film,last_slit)''' rand_start = random.uniform(-strut_w , strut_w) array = Draft.makeArray(slit,FreeCAD.Vector(slit_l+strut_w,0,0),\ FreeCAD.Vector(0,1,0),num_col-1,1) move_array = FreeCAD.Vector(rand_start+(slit_l+strut_w)/2,(2*x-1)*(slit_h+slit_p),0) Draft.move(array,move_array) film = cut_soowon(film,array) grating = film # Generate geometry # FreeCAD.ActiveDocument.recompute() # Export # __objs__=[] __objs__.append(grating) Import.export(__objs__,"C:/Users/Soowon Kim/Desktop/grating.step") del __objs__
#Part.show(Part.Vertex(control_point)) Part.show(patch.toShape()) doc = FreeCAD.newDocument("tmp") print "Document created" bq_idx, bq_pts, bc_idx, bc_pts = parse_all_from_folder('./TorusFairBezier') print "Stuff parsed" deg = 2 for patch in bq_idx: vertices = get_vertices(patch, bq_pts) generate_bezier_patch(deg, vertices) print "biquadratic patches plotted" deg = 3 patch=bc_idx for patch in bc_idx: vertices = get_vertices(patch, bc_pts) generate_bezier_patch(deg, vertices) print "bicubic patches plotted" __objs__ = FreeCAD.getDocument("tmp").findObjects() Import.export(__objs__, "./FairTorus.step") print ".step exported"