def process_emp(doc, filename, placement, board_thickness): """process_emp(doc,filename,placement,board_thickness) -> place components from emn file to board""" filename = filename.partition(".emn")[0] + ".emp" empfile = pythonopen(filename, "r") emp_unit = 1.0 #presume millimeter like emn unit emp_version = 2 #presume emn_version 2 comp_height = 0 #presume 0 part height comp_outline = [] #no part outline comp_GeometryName = "" # no geometry name comp_PartNumber = "" # no Part Number comp_height = 0 # no Comp Height emplines = empfile.readlines() empfile.close() passed_sections = [] current_section = "" section_counter = 0 comps = [] for empline in emplines: emprecords = split_records(empline) if len(emprecords) == 0: continue if len(emprecords[0]) > 4 and emprecords[0][0:4] == ".END": passed_sections.append(current_section) current_section = "" if comp_PartNumber != "": if comp_height == 0: comp_height = 0.1 comps.append((comp_PartNumber, [ Process_comp_outline(doc, comp_outline, comp_height), comp_GeometryName ])) comp_PartNumber = "" comp_outline = [] elif emprecords[0][0] == ".": current_section = emprecords[0] section_counter = 0 section_counter += 1 if current_section == ".HEADER" and section_counter == 2: emp_version = int(float(emprecords[1])) FreeCAD.Console.PrintMessage("Emp version: " + emprecords[1] + "\n") if (current_section == ".ELECTRICAL" or current_section == ".MECHANICAL" ) and section_counter == 2 and emprecords[2] == "THOU": emp_unit = 0.0254 if (current_section == ".ELECTRICAL" or current_section == ".MECHANICAL" ) and section_counter == 2 and emprecords[2] == "MM": emp_unit = 1 if (current_section == ".ELECTRICAL" or current_section == ".MECHANICAL") and section_counter == 2: comp_outline = [] #no part outline comp_GeometryName = emprecords[0] # geometry name comp_PartNumber = emprecords[1] # Part Number comp_height = emp_unit * float(emprecords[3]) # Comp Height if (current_section == ".ELECTRICAL" or current_section == ".MECHANICAL") and section_counter > 2: comp_outline.append([ float(emprecords[1]) * emp_unit, float(emprecords[2]) * emp_unit, float(emprecords[3]) ]) #add point of outline FreeCAD.Console.PrintMessage("\n".join(passed_sections) + "\n") #Write file with list of footprint if IDF_diag == 1: empfile = pythonopen(IDF_diag_path + "/footprint.lst", "w") for compx in comps: empfile.writelines(str(compx[1][1]) + "\n") empfile.close() #End section of list footprint comps = dict(comps) grp = doc.addObject("App::DocumentObjectGroup", "EMP Models") for place_item in placement: if place_item[1] in comps: doc_comp = doc.addObject("Part::Feature", place_item[0]) FreeCAD.Console.PrintMessage("Adding EMP model " + str(place_item[0]) + "\n") doc_comp.Shape = comps[place_item[1]][0] doc_comp.ViewObject.DisplayMode = EmpDisplayMode z_pos = 0 rotateY = 0 if place_item[6] == 'BOTTOM': rotateY = pi z_pos = -board_thickness placmnt = Base.Placement( Base.Vector(place_item[3], place_item[4], z_pos), toQuaternion(rotateY, place_item[5] * pi / 180, 0)) doc_comp.Placement = placmnt grp.addObject(doc_comp) return 1
def place_steps(doc, placement, board_thickness): """ place_steps(doc,placement,board_thickness)->place step models on board list of models and path to step files is set at start of this script model_tab_filename= "" & step_path="" """ model_file = pythonopen(model_tab_filename, "r") model_lines = model_file.readlines() model_file.close() model_dict = [] if IDF_diag == 1: model_file = pythonopen(IDF_diag_path + "/missing_models.lst", "w") keys = [] #prev_step="*?.*?" #hope nobody will insert this step filename step_dict = [] for model_line in model_lines: model_records = split_records(model_line) if len(model_records ) > 1 and model_records[0] and not model_records[0] in keys: keys.append(model_records[0]) model_dict.append((str(model_records[0]).replace('"', ''), str(model_records[1]).replace('"', ''))) model_dict = dict(model_dict) validkeys = filter( lambda x: x in [place_item[2] for place_item in placement], model_dict.keys()) FreeCAD.Console.PrintMessage("Step models to be loaded for footprints: " + str(validkeys) + "\n") grp = doc.addObject("App::DocumentObjectGroup", "Step Lib") for validkey in validkeys: ImportGui.insert(step_path + model_dict[validkey], FreeCAD.ActiveDocument.Name) #partName=FreeCAD.ActiveDocument.ActiveObject.Name impPart = FreeCAD.ActiveDocument.ActiveObject #impPart.Shape=FreeCAD.ActiveDocument.ActiveObject.Shape #impPart.ViewObject.DiffuseColor=FreeCAD.ActiveDocument.ActiveObject.ViewObject.DiffuseColor impPart.ViewObject.Visibility = 0 impPart.Label = validkey grp.addObject(impPart) step_dict.append((validkey, impPart)) FreeCAD.Console.PrintMessage("Reading step file " + str(model_dict[validkey]) + " for footprint " + str(validkey) + "\n") step_dict = dict(step_dict) grp = doc.addObject("App::DocumentObjectGroup", "Step Models") for place_item in placement: if place_item[2] in step_dict: step_model = doc.addObject("Part::Feature", place_item[0] + "_s") FreeCAD.Console.PrintMessage("Adding STEP model " + str(place_item[0]) + "\n") #if prev_step!=place_item[2]: # model0=Part.read(step_path+"/"+model_dict[place_item[2]]) # prev_step=place_item[2] step_model.Shape = step_dict[place_item[2]].Shape step_model.ViewObject.DiffuseColor = step_dict[ place_item[2]].ViewObject.DiffuseColor z_pos = 0 rotateY = 0 if place_item[6] == 'BOTTOM': rotateY = pi z_pos = -board_thickness placmnt = Base.Placement( Base.Vector(place_item[3], place_item[4], z_pos), toQuaternion(rotateY, place_item[5] * pi / 180, 0)) step_model.Placement = placmnt grp.addObject(step_model) else: if IDF_diag == 1: model_file.writelines( str(place_item[0]) + " " + str(place_item[2]) + "\n") model_file.close()
def make_cylinder(name, radius, height, base_vector, base_rotation): ac_doc = FreeCAD.ActiveDocument ac_doc.addObject("Part::Cylinder",name) getattr(ac_doc, name).Radius = radius getattr(ac_doc, name).Height= height getattr(ac_doc, name).Placement=Base.Placement(Base.Vector(base_vector[0],base_vector[1],base_vector[2]),Base.Rotation(base_rotation[0],base_rotation[1],base_rotation[2],base_rotation[3]))
scale = 10.0 # 1unit = 10mm offset = 0.01 # Some things need to be offset imperceptibly from their true position to keep freecad happy ######## Axes ########## axes = doc.addObject("App::DocumentObjectGroup", "Axes") y_end = 1.2 * scale x_start = -0.3 * scale x_end = 2.2 * scale axis_radius = 0.05 #x-axis cyl = doc.addObject("Part::Cylinder", "x-axis") cyl.Radius = axis_radius cyl.Height = x_end - x_start cyl.Placement = Base.Placement(Base.Vector(x_start, 0.00, 0.00), App.Rotation(App.Vector(0, 1, 0), 90)) cyl.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] axes.addObject(cyl) txt = Draft.makeText('x', point=FreeCAD.Vector(x_end + 0.5, -0.5, 0)) txt.ViewObject.FontSize = 2 axes.addObject(txt) #y-axis cyl = doc.addObject("Part::Cylinder", "y-axis") cyl.Radius = axis_radius cyl.Height = 2 * y_end cyl.Placement = Base.Placement(Base.Vector(0.00, -y_end, 0.00), App.Rotation(App.Vector(1, 0, 0), -90)) cyl.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] axes.addObject(cyl)
radius = 0.01 height = 0.1 cyl = doc.addObject("Part::Cylinder", "cyl") cyl.Radius = radius cyl.Height = height sph = doc.addObject("Part::Sphere", "sph") sph.Radius = radius uni = doc.addObject("Part::MultiFuse", "uni") uni.Shapes = [cyl, sph] ske = doc.addObject('Sketcher::SketchObject', 'Sketch') ske.Placement = Base.Placement(Base.Vector(0, 0, 0), Base.Rotation(-0.707107, 0, 0, -0.707107)) Poly.makeRegularPolygon('Sketch', 5, Base.Vector(-1.2 * radius, 0.9 * height, 0), Base.Vector(-0.8 * radius, 0.9 * height, 0)) cut = doc.addObject("PartDesign::Revolution", "Revolution") cut.Sketch = ske cut.ReferenceAxis = (ske, ['V_Axis']) cut.Angle = 360.0 dif = doc.addObject("Part::Cut", "dif") dif.Base = uni dif.Tool = cut cyl1 = doc.addObject("Part::Cylinder", "cyl1") cyl1.Radius = 0.2 * radius
################################################## # Create Helix that serves as the spine for the threads thread_spine = App.ActiveDocument.addObject("Part::Helix", "Helix") thread_spine.Label = 'Thread Spine' thread_spine.Pitch = thread_pitch thread_spine.Height = 2 * (total_core_height + length_margin - chamfer_length) thread_spine.Radius = hole_diameter / 2 thread_spine.Angle = 0.00 thread_spine.LocalCoord = 0 # Right-Handed Helix thread_spine.Style = 1 # Clockwise thread_spine.Placement = \ Base.Placement(Base.Vector(0.00,0.00,chamfer_length), Base.Rotation(0.00,0.00,0.00,1.00)) # Recompute and fit model to screen App.ActiveDocument.recompute() Gui.SendMsgToActiveView("ViewFit") ################################################## # Create a profile sketch to sweep Helix #Activate the Sketcher Workbench Gui.activateWorkbench("SketcherWorkbench") thread_profile = App.activeDocument().addObject('Sketcher::SketchObject', 'Sketch') thread_profile.Placement = \ App.Placement(App.Vector(0.000000,0.000000,0.000000),App.Rotation(-0.707107,0.000000,0.000000,-0.707107))
docname = re.sub('\.fcstd$', '', docname) m = re.match('^(.*)/(.*?)$', docname) if m: outdir = m.group(1) docname = m.group(2) from FreeCAD import Base import Part, Sketcher import ProfileLib.RegularPolygon as Poly doc = FreeCAD.newDocument(docname) ske = doc.addObject('Sketcher::SketchObject', 'Sketch') # FIXME: sketch is rendered invisible # We need a DocumentViewProviderObject to set Visibility=True ske.Placement = Base.Placement(Base.Vector(0, 0, 0), Base.Rotation(0, 0, 0, 1)) i = int(ske.GeometryCount) # 0 geo = [ Part.LineSegment(Base.Vector(4, 8, 0), Base.Vector(9, 8, 0)), Part.LineSegment(Base.Vector(9, 8, 0), Base.Vector(9, 2, 0)), Part.LineSegment(Base.Vector(9, 2, 0), Base.Vector(3, 2, 0)), Part.LineSegment(Base.Vector(3, 2, 0), Base.Vector(3, 7, 0)), Part.Circle(Center=Base.Vector(6, 5, 0), Normal=Base.Vector(0, 0, 1), Radius=2), # North: math.pi/2 # SouthEast: -math.pi/4 # West: math.pi, -math.pi # East: 0 #Part.ArcOfCircle(Part.Circle(Base.Vector(4,7,0), Base.Vector(0,0,1), 1), math.pi/2, -math.pi) #
radius = 0.01 height = 0.1 cyl = doc.addObject("Part::Cylinder", "cyl") cyl.Radius = radius cyl.Height = height sph = doc.addObject("Part::Sphere", "sph") sph.Radius = radius uni = doc.addObject("Part::MultiFuse", "uni") uni.Shapes = [cyl, sph] ske = doc.addObject('Sketcher::SketchObject', 'Sketch') ske.Placement = Base.Placement(Base.Vector(0.0, 0.0, 0.0), Base.Rotation(-0.707107, 0.0, 0.0, -0.707107)) Poly.makeRegularPolygon('Sketch', 5, Base.Vector(-1.2 * radius, 0.9 * height, 0), Base.Vector(-0.8 * radius, 0.9 * height, 0)) cut = doc.addObject("PartDesign::Revolution", "Revolution") cut.Sketch = ske cut.ReferenceAxis = (ske, ['V_Axis']) cut.Angle = 360.0 dif = doc.addObject("Part::Cut", "dif") dif.Base = uni dif.Tool = cut cyl1 = doc.addObject("Part::Cylinder", "cyl1") cyl1.Radius = 0.2 * radius
def addCylinder(tetra_position, direction, name, offset_cylinders = False, add_AABB=False, MinorRadius=default_MinorRadius, MajorRadius=default_MajorRadius, smooth_ends=False, tiltedEdges=True, smooth_A = False, smooth_B = False): # smooth_ends = True # smooth_A = False # smooth_B = False # .. todo: smooth only one end... # make sure that tetra_position is a FreeCAD.Vector tetra_position = FreeCAD.Vector(*tetra_position) rod_dir = FreeCAD.Vector(*direction)*(1/4) # # hack to reduce unnecessary smoothing: # smooth_ends = False # end_point = tetra_position + rod_dir # FreeCAD.Console.PrintMessage("start = {} end={}\n".format(tetra_position, end_point)) # if end_point[0] in (-1/2, 1+1/2) or end_point[1] in (-1/2, 1+1/2) or end_point[2] in (-1/2, 1+1/2): # smooth_ends = True # FreeCAD.Console.PrintMessage("direction = {}\n".format(direction)) rotation_centre = FreeCAD.Vector(0, 0, 0) # FreeCAD.Console.PrintMessage("MinorRadius = {}\n".format(MinorRadius)) # FreeCAD.Console.PrintMessage("MajorRadius = {}\n".format(MajorRadius)) # FreeCAD.Console.PrintMessage("2*MinorRadius = {}\n".format(2*MinorRadius)) # FreeCAD.Console.PrintMessage("2*MajorRadius = {}\n".format(2*MajorRadius)) rod_info = utilities.ellipse.EllipticalRod() rod_info.setEllipsoidWidth(2*MinorRadius) rod_info.setCylinderDiameterBig(2*MajorRadius) # rod_info.setEllipsoidWidth(1) # rod_info.setCylinderDiameterBig(1) #rod_info.setCylinderHeightZ(2*MajorRadius) # rod_info.setEllipsoidHeightZ(2*MajorRadius) #FreeCAD.Console.PrintMessage('{}\n'.format(rod_info)) #rod_info.plot() rod_base = App.ActiveDocument.addObject("Part::Ellipse","Ellipse") rod_base.Label = '{}_base'.format(name) if not smooth_ends: # rod_base.MajorRadius = MajorRadius # rod_base.MinorRadius = MinorRadius rod_base.MajorRadius = 0.5*rod_info.getCylinderHeightZ() rod_base.MinorRadius = 0.5*rod_info.getEllipsoidWidth() ry_angle = 90 rz_angle = numpy.degrees(numpy.arctan2(direction[1], direction[0])) ry = FreeCAD.Rotation(FreeCAD.Vector(0,1,0), ry_angle) rz = FreeCAD.Rotation(FreeCAD.Vector(0,0,1), rz_angle) rod_base.Placement = FreeCAD.Placement(tetra_position, rz.multiply(ry), rotation_centre) else: (cylinder_height_z, D_ell, D_cyl, (Xp, Yp), (Xm, Ym)) = rod_info.getInfo1() major_axis = numpy.array([Xp, Yp]) - numpy.array([Xm, Ym]) major_radius = 0.5*numpy.linalg.norm(major_axis) minor_radius = 0.5*rod_info.getEllipsoidWidth() if major_radius < minor_radius: FreeCAD.Console.PrintMessage('major_radius <= minor_radius: {} <= {}\n'.format(major_radius, minor_radius)) rod_base.MajorRadius = major_radius rod_base.MinorRadius = minor_radius ry_angle = 90 rz_angle = numpy.degrees(numpy.arctan2(direction[1], direction[0])) ry = FreeCAD.Rotation(FreeCAD.Vector(0,1,0), ry_angle) rz = FreeCAD.Rotation(FreeCAD.Vector(0,0,1), rz_angle) # equivalent to [a,b,c] X [0,0,c], where direction=[a,b,c] minor_axis = FreeCAD.Vector(direction[1]*direction[2], -direction[0]*direction[2], 0) r_minor_axis_angle_deg = numpy.degrees(rod_info.getMajorAxisAngleWithRespectToVertical()) r_minor_axis = FreeCAD.Rotation(minor_axis, r_minor_axis_angle_deg) rod_base.Placement = FreeCAD.Placement(tetra_position, r_minor_axis.multiply(rz.multiply(ry)), rotation_centre) # FreeCAD.Console.PrintMessage("rod_dir = {}, rz_angle = {}\n".format(rod_dir, rz_angle)) # FreeCAD.Console.PrintMessage("ry = {}\n".format(ry)) # FreeCAD.Console.PrintMessage("rz = {}\n".format(rz)) # FreeCAD.Console.PrintMessage("tetra_position = {}\n".format(tetra_position)) rod = App.ActiveDocument.addObject("Part::Extrusion","Extrude") rod.Base = rod_base rod.Dir = rod_dir rod.Solid = (True) rod_base.ViewObject.Visibility = False rod.Label = '{}-cyl'.format(name) rod_final = rod if smooth_ends: EllipsoidSmall1 = App.ActiveDocument.addObject("Part::Ellipsoid","Ellipsoid") EllipsoidSmall1.Radius1=rod_info.getEllipsoidHeightZ()/2 EllipsoidSmall1.Radius2=rod_info.getEllipsoidWidth()/2 EllipsoidSmall1.Radius3=rod_info.getEllipsoidWidth()/2 EllipsoidSmall1.Placement=Base.Placement(tetra_position, Base.Rotation(0.0000,0.0000,0.0000,1.0000)) EllipsoidSmall1.Label='EllipsoidSmall1' # EllipsoidSmall1.ViewObject.Visibility=False EllipsoidSmall2 = App.ActiveDocument.addObject("Part::Ellipsoid","Ellipsoid") EllipsoidSmall2.Radius1=rod_info.getEllipsoidHeightZ()/2 EllipsoidSmall2.Radius2=rod_info.getEllipsoidWidth()/2 EllipsoidSmall2.Radius3=rod_info.getEllipsoidWidth()/2 EllipsoidSmall2.Placement=Base.Placement(tetra_position + rod_dir, Base.Rotation(0.0000,0.0000,0.0000,1.0000)) EllipsoidSmall2.Label='EllipsoidSmall2' rod_final = App.activeDocument().addObject("Part::MultiFuse","rod_final") rod_final.Shapes = [rod, EllipsoidSmall1, EllipsoidSmall2] else: ellipsoid_list = [] if smooth_A: EllipsoidBig1 = App.ActiveDocument.addObject("Part::Ellipsoid","Ellipsoid") EllipsoidBig1.Radius1=rod_info.getCylinderHeightZ()/2 EllipsoidBig1.Radius2=rod_info.getEllipsoidWidth()/2 EllipsoidBig1.Radius3=rod_info.getEllipsoidWidth()/2 EllipsoidBig1.Placement=Base.Placement(tetra_position, Base.Rotation(0.0000,0.0000,0.0000,1.0000)) EllipsoidBig1.Label='EllipsoidBig1' ellipsoid_list.append(EllipsoidBig1) if smooth_B: EllipsoidBig2 = App.ActiveDocument.addObject("Part::Ellipsoid","Ellipsoid") EllipsoidBig2.Radius1=rod_info.getCylinderHeightZ()/2 EllipsoidBig2.Radius2=rod_info.getEllipsoidWidth()/2 EllipsoidBig2.Radius3=rod_info.getEllipsoidWidth()/2 EllipsoidBig2.Placement=Base.Placement(tetra_position + rod_dir, Base.Rotation(0.0000,0.0000,0.0000,1.0000)) EllipsoidBig2.Label='EllipsoidBig2' ellipsoid_list.append(EllipsoidBig2) if len(ellipsoid_list) > 0: # .. todo:: BUG: figure out why the union of the objects is partially black. :( # .. todo:: export STL files are also wrong. cf: ~/Desktop/RCD-paper-ANONYMIZED-3/RCD-inverse-elliptical/0.4x0.5/FreeCAD-union-bug.png rod_final = App.activeDocument().addObject("Part::MultiFuse","rod_final") rod_final.Shapes = [rod] + ellipsoid_list # rod_final.Shapes = [EllipsoidBig1,rod,EllipsoidBig2] # group = App.ActiveDocument.addObject("App::DocumentObjectGroup", "EllipticalRod") # group.addObject(rod) # group.addObject(EllipsoidSmall1) # group.addObject(EllipsoidSmall2) rod_final.Label = name return(rod_final)
def process_emp(doc, filename, placement, board_thickness): """process_emp(doc,filename,placement,board_thickness) -> place components from emn file to board""" global emn_version fname, file_extension = os.path.splitext(filename) model_file = 1 #FreeCAD.Console.PrintMessage("\nfext="+file_extension) if file_extension == '.emn': filename = filename.partition(".emn")[0] + ".emp" model_file = 0 #FreeCAD.Console.PrintMessage("\nmodel_file="+str(model_file)) empfile = pythonopen(filename, "r") emp_unit = 1.0 #presume milimeter like emn unit emp_version = 2 #presume emn_version 2 comp_height = 0 #presume 0 part height comp_outline = [] #no part outline comp_GeometryName = "" # no geometry name comp_PartNumber = "" # no Part Number comp_height = 0 # no Comp Height emplines = empfile.readlines() empfile.close() passed_sections = [] current_section = "" section_counter = 0 comps = [] for empline in emplines: emprecords = split_records(empline) if len(emprecords) == 0: continue if len(emprecords[0]) > 4 and emprecords[0][0:4] == ".END": passed_sections.append(current_section) current_section = "" FreeCAD.Console.PrintMessage(comp_PartNumber) if comp_PartNumber != "": if comp_height == 0: comp_height = 0.1 comps.append((comp_PartNumber, [ Process_comp_outline(doc, comp_outline, comp_height), comp_GeometryName ])) #comps.append((comp_GeometryName,[Process_comp_outline(doc,comp_outline,comp_height),comp_PartNumber])) #maui #FreeCAD.Console.PrintMessage(comps) comp_PartNumber = "" comp_outline = [] elif emprecords[0][0] == ".": current_section = emprecords[0] section_counter = 0 section_counter += 1 if current_section == ".HEADER" and section_counter == 2: emp_version = int(float(emprecords[1])) FreeCAD.Console.PrintMessage("Emp version: " + emprecords[1] + "\n") if (current_section == ".ELECTRICAL" or current_section == ".MECHANICAL" ) and section_counter == 2 and emprecords[2] == "THOU": emp_unit = 0.0254 #FreeCAD.Console.PrintMessage("\nUNIT THOU" ) if (current_section == ".ELECTRICAL" or current_section == ".MECHANICAL" ) and section_counter == 2 and emprecords[2] == "MM": emp_unit = 1 #FreeCAD.Console.PrintMessage("\nUNIT MM" ) if (current_section == ".ELECTRICAL" or current_section == ".MECHANICAL") and section_counter == 2: comp_outline = [] #no part outline comp_GeometryName = emprecords[0] # geometry name #maui 0 1ok comp_PartNumber = emprecords[1] # Part Number #maui 1 0ok comp_height = emp_unit * float(emprecords[3]) # Comp Height FreeCAD.Console.PrintMessage("\ncomp_height=" + str(comp_height)) if (current_section == ".ELECTRICAL" or current_section == ".MECHANICAL") and section_counter > 2: if emprecords[0] != 'PROP': comp_outline.append([ float(emprecords[1]) * emp_unit, float(emprecords[2]) * emp_unit, float(emprecords[3]) ]) #add point of outline #FreeCAD.Console.PrintMessage("here\n") FreeCAD.Console.PrintMessage( str(float(emprecords[1]) * emp_unit) + " " + str(float(emprecords[2]) * emp_unit) + " " + str(float(emprecords[3])) + '\n') FreeCAD.Console.PrintMessage("\n".join(passed_sections) + "\n") #Write file with list of footprint if IDF_diag == 1: empfile = pythonopen(IDF_diag_path + "/footprint.lst", "w") for compx in comps: empfile.writelines(str(compx[1][1]) + "\n") empfile.close() #End section of list footprint #FreeCAD.Console.PrintMessage(comps) comps_list = comps #maui comps = dict(comps) #FreeCAD.Console.PrintMessage(comps_list) grp = doc.addObject("App::DocumentObjectGroup", "EMP Models") offset = 0 if emn_version == 3: offset = 1 #adding colors r_col = (0.411765, 0.411765, 0.411765) #dimgrey c_col = (0.823529, 0.411765, 0.117647) #chocolate x_col = (0.862745, 0.862745, 0.862745) #gainsboro l_col = (0.333333, 0.333333, 0.333333) #sgidarkgrey IC_col = (0.156863, 0.156863, 0.156863) #sgiverydarkgrey default_col = (0.439216, 0.501961, 0.564706) #slategrey idx = 0 for item in comps_list: #maui #FreeCAD.Console.PrintMessage(comps_list) FreeCAD.Console.PrintMessage(item[1][1] + ' comp_PartNumber\n') #comp_PartNumber #FreeCAD.Console.PrintMessage(comps_list[0][1][1]) #comp_PartNumber #FreeCAD.Console.PrintMessage(placement) FreeCAD.Console.PrintMessage('\n') if model_file == 1: #placement[idx][0]=item[0] #' comp_GeometryName' #FreeCAD.Console.PrintMessage(placement) placement.append([ 'Ref', '"Geometry"', '"PartNbr_Library_emp"', 0.0, 0.0, 0.0, 0.0, 'TOP', 'ECAD' ]) placement[idx][0] = item[0] #' comp_PartNumber' to display PartNBR placement[idx][1] = item[0] #' comp_PartNumber' placement[idx][2] = item[1][1] #' comp_GeometryName' #placement[idx][0]=item[1][1] #' comp_PartNumber' to display PartNBR #placement[idx][1]=item[1][1] #' comp_PartNumber' #placement[idx][2]=item[0] #' comp_GeometryName' #FreeCAD.Console.PrintMessage(item[1][1]+' idx='+str(idx)+'\n') #FreeCAD.Console.PrintMessage(placement) idx = idx + 1 FreeCAD.Console.PrintMessage(placement) #FreeCAD.Console.PrintMessage(' list\n') idx = 0 for place_item in placement: #FreeCAD.Console.PrintMessage(place_item[1]+'pitem1'+place_item[2]+'pitem2\n') #FreeCAD.Console.PrintMessage(comps_list[idx][0]) #FreeCAD.Console.PrintMessage(comps_list[idx][1]) for item in comps_list: #FreeCAD.Console.PrintMessage('\n'+place_item[1]+'pitem1'+place_item[2]+'pitem2\n') #FreeCAD.Console.PrintMessage(item[1][1]);FreeCAD.Console.PrintMessage('\n') #if (place_item[2] in item) and (place_item[1] in item[1][1]): ##if (place_item[2] in item) and (place_item[1] in item[1][1]): if (place_item[1] in item) and (place_item[2] in item[1][1]): #if comps.has_key(place_item[2]): #if comps.has_key(place_item[2]) and comps.has_key(place_item[1]): #1 maui #if comps_list[idx][0]==(place_item[2]) and comps_list[idx][1]==(place_item[1]): #1 maui doc_comp = doc.addObject("Part::Feature", place_item[0]) FreeCAD.Console.PrintMessage("Adding EMP model " + str(place_item[0]) + "\n") ##doc_comp.Shape=comps[place_item[2]][0] #1 maui doc_comp.Shape = item[1][0] #1 maui comp_col = default_col if (doc_comp.Label.upper().startswith('X')): comp_col = x_col if (doc_comp.Label.upper().startswith('L')): comp_col = l_col if (doc_comp.Label.upper().startswith('R')): comp_col = r_col if (doc_comp.Label.upper().startswith('C')): comp_col = c_col if (doc_comp.Label.upper().startswith('S')|doc_comp.Label.upper().startswith('Q')|\ doc_comp.Label.upper().startswith('D')|doc_comp.Label.upper().startswith('T')|doc_comp.Label.upper().startswith('U')): comp_col = IC_col if IDF_colorize == 1: doc_comp.ViewObject.ShapeColor = comp_col #maui doc_comp.ViewObject.DisplayMode = EmpDisplayMode z_pos = 0 rotateY = 0 if place_item[6 + offset] == 'BOTTOM': rotateY = pi z_pos = -board_thickness placmnt = Base.Placement( Base.Vector(place_item[3], place_item[4], z_pos + offset * place_item[5]), toQuaternion(rotateY, place_item[5 + offset] * pi / 180, 0)) doc_comp.Placement = placmnt doc = FreeCAD.ActiveDocument if model_file == 0: grp.addObject(doc_comp) else: doc.ActiveObject.ViewObject.Visibility = False #doc.ActiveObject.ViewObject.BoundingBox = True idx = idx + 1 return 1
FreeCAD.Vector(68, 0, 25), FreeCAD.Vector(68, 20, 25), FreeCAD.Vector(45, 20, 0), ], Base.Vector(0, 0, 4)) DrawMyPart([ FreeCAD.Vector(25, 20, 0), FreeCAD.Vector(45, 20, 0), FreeCAD.Vector(45, 20, 9.2), FreeCAD.Vector(25, 20, 9.2), ], Base.Vector(0, 0, 4)) DrawMyPart([ FreeCAD.Vector(25, 180, 0), FreeCAD.Vector(45, 180, 0), FreeCAD.Vector(45, 180, 9.2), FreeCAD.Vector(25, 180, 9.2), ], Base.Vector(0, 0, 4)) # part3 DrawMyPart([ FreeCAD.Vector(68, 200, 25), FreeCAD.Vector(68, 200, 35), FreeCAD.Vector(68, 0, 35), FreeCAD.Vector(68, 0, 25), FreeCAD.Vector(68, 200, 25), ], Base.Vector(0, 0, 4)) circ1 = Draft.makeCircle(5, Base.Placement(10, 18, 10), FreeCAD.Vector(1, 0, 0)) circ2 = Draft.makeCircle(5)