Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
##################################################
# 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
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
    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)