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))
Beispiel #2
0
    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
Beispiel #3
0
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__
Beispiel #5
0
    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__

Beispiel #8
0
    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"
Beispiel #9
0
    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__
Beispiel #11
0
            #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"