Пример #1
0
def createpallets(spacing):
    ##### Pallets
    pallet = dxf.block(name='pallet')
    dwg.blocks.add(pallet)
    blockfaces(pallet, palx, paly, palz, 0, 0, 0)

    # Outermost loop for creating levels
    for m in range(levels):
        levelheight = datz + palz + loadz + lift
        lh = levelheight * m
        # Outer loop to create all the aisles
        for l in range(aisles):
            # Calc distance between aisles
            #spacing = (2 * maxy) + aislew + backgap + (2 * (maxy + deepgap) * ydeep)
            aisle2 = spacing * l
            # Inner loop to create one aisle
            for k in range(bays):
                # calculate bay length
                blen = upx + ((bay - 1) * upgap) + (bay * maxx) + ((bay - 1) * palgap)
                blength = blen * k
                # create first bay
                for i in range(bay):
                    blockref = dxf.insert(blockname='pallet', layer='CLT_PLT_Pallet', insert=(upx+upgap+(maxx/2)-(palx/2)+(i*(maxx + palgap))+blength,(aislew/2)+(maxy/2)-(paly/2)+aisle2,lapproach+lh))
                    dwg.add(blockref)
                # create opposite side
                for j in range(bay):
                    blockref = dxf.insert(blockname='pallet', layer='CLT_PLT_Pallet', insert=(upx+upgap+(maxx/2)-(palx/2)+(j*(maxx + palgap))+blength,0-(aislew/2)-(maxy/2)-(paly/2)+aisle2,lapproach+lh))
                    dwg.add(blockref)
Пример #2
0
def createuprights(spacing):                
    ##### Uprights
    upright = dxf.block(name='upright')
    dwg.blocks.add(upright)
    # calculate upright height
    upz = lapproach + (levels * (palz + loadz + lift + datz)) - datz - lift + uapproach
    blockfaces(upright, upx, upy, upz, 0, 0, 0)
    # Outer loop to create all the aisles
    for l in range(aisles):
        # Calc distance between aisles
        #spacing = (2 * maxy) + aislew + backgap + (2 * (maxy + deepgap) * ydeep)
        aisle2 = spacing * l
        # Inner loop to create one aisle
        for k in range(bays+1):
            # calculate bay length
            blen = upx + ((bay - 1) * upgap) + (bay * maxx) + ((bay - 1) * palgap)
            blength = blen * k
            # create inner upright
            blockref1 = dxf.insert(blockname='upright', layer='CLT_RAK_Pallet_Rack', insert=((blength,(aislew/2)+(maxy/2)+(up2up/2)+aisle2, 0)))
            dwg.add(blockref1)
            # create outer upright
            blockref2 = dxf.insert(blockname='upright', layer='CLT_RAK_Pallet_Rack', insert=((blength,(aislew/2)+(maxy/2)-(up2up/2)-upy+aisle2, 0)))
            dwg.add(blockref2)
            # create inner upright (opposite)
            blockref1 = dxf.insert(blockname='upright', layer='CLT_RAK_Pallet_Rack', insert=((blength,0-(aislew/2)-(maxy/2)+(up2up/2)+aisle2, 0)))
            dwg.add(blockref1)
            # create outer upright (opposite)
            blockref2 = dxf.insert(blockname='upright', layer='CLT_RAK_Pallet_Rack', insert=((blength,0-(aislew/2)-(maxy/2)-(up2up/2)-upy+aisle2, 0)))
            dwg.add(blockref2)
Пример #3
0
def createdat(spacing):
    ##### Down Aisle Ties
    tie = dxf.block(name='tie')
    dwg.blocks.add(tie)
    # calculate tie length
    datx = ((bays + 1) * upx) + (bays * (((bay - 1) * upgap) + (bay * maxx) + ((bay - 1) * palgap)))
    blockfaces(tie, datx, daty, datz, 0, 0, 0)
    # Create ties for all levels
    for m in range(levels):
        levelheight = datz + palz + loadz + lift
        lh = levelheight * m
        # Outer loop to create all the aisles
        for l in range(aisles):
            # Calc distance between aisles
            #spacing = (2 * maxy) + aislew + backgap + (2 * (maxy + deepgap) * ydeep)
            aisle2 = spacing * l
            # create outer tie
            blockref1 = dxf.insert(blockname='tie', layer='CLT_RAK_Pallet_Rack', insert=((0,(aislew/2)+(maxy/2)+(up2up/2)+upy+aisle2, lapproach-datz+lh)))
            dwg.add(blockref1)
            # create inter tie
            blockref2 = dxf.insert(blockname='tie', layer='CLT_RAK_Pallet_Rack', insert=((0,(aislew/2)+(maxy/2)-(up2up/2)-upy-daty+aisle2, lapproach-datz+lh)))
            dwg.add(blockref2)
            # create outer tie (opposite)
            blockref1 = dxf.insert(blockname='tie', layer='CLT_RAK_Pallet_Rack', insert=((0,0-(aislew/2)-(maxy/2)-(up2up/2)-upy-daty+aisle2, lapproach-datz+lh)))
            dwg.add(blockref1)
            # create inter tie (opposite)
            blockref2 = dxf.insert(blockname='tie', layer='CLT_RAK_Pallet_Rack', insert=((0,0-(aislew/2)-(maxy/2)+(up2up/2)+upy+aisle2, lapproach-datz+lh)))
            dwg.add(blockref2)
Пример #4
0
def contacts_parallel(drawing, blockname, layer, color, taper_point,
                      taper_length, taper_width, taper_before_track,
                      *contact_coords):  # contacts the nanowire in parallel

    block_temp = dxf.block("block_temp", layer=layer)
    drawing.blocks.add(block_temp)
    taper = dxf.polyline(layer=layer)
    taper.add_vertices([(0, -taper_point / 2), (0, taper_point / 2),
                        (-taper_length, taper_width / 2),
                        (-taper_length, -taper_width / 2)])
    taper.close(True)
    #drawing.add(taper)
    block_temp.add(taper)
    block_temp.add(
        dxf.rectangle((-taper_length - taper_before_track, -taper_width / 2),
                      taper_before_track,
                      taper_width,
                      color=color,
                      rotation=0,
                      layer=layer))  #contact 1
    #block.add(dxf.rectangle((-taper_length-taper_before_track,-taper_width/2), taper_before_track, taper_width,
    #  color = color, rotation = 0, layer = layer)) #contact 2

    block = dxf.block(blockname, layer=layer)
    block_ref = dxf.insert(blockname='block_temp',
                           insert=(contact_coords[0], 0),
                           columns=1,
                           rows=1,
                           colspacing=0,
                           rowspacing=0,
                           color=color,
                           rotation=0)
    block_ref1 = dxf.insert(blockname='block_temp',
                            insert=(contact_coords[1], 0),
                            columns=1,
                            rows=1,
                            colspacing=0,
                            rowspacing=0,
                            color=color,
                            rotation=180)
    block.add(block_ref)
    block.add(block_ref1)

    return block
Пример #5
0
 def mark1000(self, markHeight, start, stop, layer):
     width = markHeight / 4
     #default spacing is
     for i in range(start, stop + 1):
         n = i - start
         self.drawing.add(
             dxf.insert('0' + str(n // 100),
                        insert=self.chipSpace(
                            vadd((width, width), self.chipPts[i])),
                        layer=self.lyr(layer)))
         self.drawing.add(
             dxf.insert('0' + str(n % 100 // 10),
                        insert=self.chipSpace(
                            vadd((width * 5, width), self.chipPts[i])),
                        layer=self.lyr(layer)))
         self.drawing.add(
             dxf.insert('0' + str(n % 10),
                        insert=self.chipSpace(
                            vadd((width * 9, width), self.chipPts[i])),
                        layer=self.lyr(layer)))
Пример #6
0
 def add_anonymous_block(self, entity, layer="0", typechar='U',
                         basepoint=(0, 0), insert=(0, 0)):
     """ Insert entity (can be a DXFList) as anonymous block into drawing.
     """
     blockname = self.anonymous_blockname(typechar)
     block = DXFEngine.block(blockname, basepoint=basepoint,
                             flags=const.BLK_ANONYMOUS)
     block.add(entity)
     self.blocks.add(block)
     insert = DXFEngine.insert(blockname, insert=insert, layer=layer)
     self.add(insert)
     return blockname
Пример #7
0
def position_tgates(new_blockname, blockname, layer, color, *tgate_coords):
    block = dxf.block(new_blockname, layer=layer)
    for tgate in tgate_coords:
        tgate_ref_temp = dxf.insert(blockname=blockname,
                                    insert=(tgate, 0),
                                    columns=1,
                                    rows=1,
                                    colspacing=0,
                                    rowspacing=0,
                                    color=color)
        block.add(tgate_ref_temp)

    return block
Пример #8
0
def position_plunger(new_blockname, blockname, layer, color, *plunger_coords):
    block = dxf.block(new_blockname, layer=layer)
    for plunger in plunger_coords:
        plunger_ref_temp = dxf.insert(blockname=blockname,
                                      insert=(plunger, 0),
                                      columns=1,
                                      rows=1,
                                      colspacing=0,
                                      rowspacing=0,
                                      color=color)
        block.add(plunger_ref_temp)

    return block
Пример #9
0
    def add_xref(self, filepath, insert=(0., 0., 0.), layer='0'):
        """ Create a simple XREF reference, `filepath` is the referenced
        drawing and `insert` is the insertion point.

        """
        def normblockname(blockname):
            for char in ' :/\\.':
                blockname = blockname.replace(char, '')
            return blockname

        dirname, filename = os.path.split(filepath)
        blockname = normblockname(filename)
        xref = DXFEngine.block(name=blockname, flags=const.BLK_XREF, xref=filepath)
        self.blocks.add(xref)
        self.add(DXFEngine.insert(blockname, insert, layer=layer))
Пример #10
0
    def add_xref(self, filepath, insert=(0., 0., 0.), layer='0'):
        """ Create a simple XREF reference, `filepath` is the referenced
        drawing and `insert` is the insertion point.

        """
        def normblockname(blockname):
            for char in ' :/\\.':
                blockname = blockname.replace(char, '')
            return blockname

        dirname, filename = os.path.split(filepath)
        blockname = normblockname(filename)
        xref = DXFEngine.block(name=blockname, flags=const.BLK_XREF, xref=filepath)
        self.blocks.add(xref)
        self.add(DXFEngine.insert(blockname, insert, layer=layer))
Пример #11
0
def position_parallel_contacts(new_blockname, blockname, layer, color,
                               rotation, *contact_coords):
    block = dxf.block(new_blockname, layer=layer)
    for contact in contact_coords:
        contact_ref_temp = dxf.insert(blockname=blockname,
                                      insert=(contact, 0),
                                      columns=1,
                                      rows=1,
                                      colspacing=0,
                                      rowspacing=0,
                                      color=color,
                                      rotation=rotation)
        block.add(contact_ref_temp)

    return block
def create_cad():
    '''
    :return: a cad file(.dxf)
    '''
    global cad_name
    project_list = []
    excel_name = input("请输入Excel文件名称(粘贴复制无后辍哦~): ")
    num_projects = int(input("请输入写入项目数(同Excel但除XY): "))
    for project_num in range(1, num_projects + 1):
        pk_num = int(input("请输入项目%s所在列号:" % project_num))
        project_list.append(pk_num)
    pk_x_cood = int(input("请输入排口横坐标所在列号:"))
    pk_y_cood = int(input("请输入排口纵坐标所在列号:"))
    cad_name = input("请输入要保存的CAD文件名称:")
    # draw a cad picture
    drawing = dxf.drawing(os.getcwd() + "/%s.dxf" % cad_name)
    # read excel datas
    wb = load_workbook(os.getcwd() + "/" + excel_name + ".xlsx")
    ws = wb.active
    for row in ws.rows:
        for project_column in project_list:
            if str(row[pk_x_cood - 1].value).replace(
                    ".", "").isdigit() == True and str(
                        row[pk_y_cood - 1].value).replace(
                            ".", "").isdigit() == True:
                print(row[project_column - 1].value, row[pk_x_cood - 1].value,
                      row[pk_y_cood - 1].value)
                x_cood = float(row[pk_x_cood - 1].value)
                y_cood = float(row[pk_y_cood - 1].value)
                pai_num = row[project_column - 1].value
                circle = dxf.circle(2.0)
                circle['layer'] = 'paikou'
                circle['color'] = 2
                text = dxf.text(pai_num,
                                (x_cood, y_cood -
                                 1.35 * project_list.index(project_column)),
                                height=1.207)
                text['layer'] = 'paikou'
                text['color'] = 2
                block = dxf.block(name='paikou')
                block.add(circle)
                drawing.blocks.add(block)
                blockref = dxf.insert(blockname='paikou',
                                      insert=(x_cood, y_cood))
                drawing.add(blockref)
                drawing.add(text)

    drawing.save()
Пример #13
0
def use_xref_manual(drawingname, xrefname):
    dwg = get_host_dwg(drawingname)
    dwg.add_layer('XREF')
    # AutoCAD 2010 can not resolve XREFS in DXF R12 Format :-(,
    # or with 'dxfwrite' created drawings are malformed XREFS?

    # define xref
    # you have control over flags
    flag = dxfwrite.const.BLK_XREF
    xref = dxf.block(name='xref', flags=flag, xref=xrefname)
    dwg.blocks.add(xref)

    # using xref
    # you have control over layer
    dwg.add(dxf.insert('xref', layer='XREF'))
    dwg.save()
Пример #14
0
def use_xref_manual(drawingname, xrefname):
    dwg = get_host_dwg(drawingname)
    dwg.add_layer('XREF')
    # AutoCAD 2010 can not resolve XREFS in DXF R12 Format :-(,
    # or with 'dxfwrite' created drawings are malformed XREFS?

    # define xref
    # you have control over flags
    flag = dxfwrite.const.BLK_XREF
    xref = dxf.block(name='xref', flags=flag ,xref=xrefname)
    dwg.blocks.add(xref)

    # using xref
    # you have control over layer
    dwg.add(dxf.insert('xref', layer='XREF'))
    dwg.save()
def create_cad():
    '''
    :return: a cad file(.dxf)
    '''
    global cad_name
    excel_name = input("\033[1;32m请输入Excel文件名称:(粘贴复制哦~)\033[0m")
    pk_num = int(input("\033[1;32m请输入排口编号所在列号:\033[0m"))
    pk_x_cood = int(input("\033[1;32m请输入排口横坐标所在列号:\033[0m"))
    pk_y_cood = int(input("\033[1;32m请输入排口纵坐标所在列号:\033[0m"))
    cad_name = input("请输入要保存的CAD文件名称:")
    # draw a cad picture
    drawing = dxf.drawing(os.getcwd() + "/%s.dxf" % cad_name)
    # read excel datas
    wb = load_workbook(os.getcwd() + "/" + excel_name + ".xlsx")
    ws = wb.active
    for row in ws.rows:
        if row[pk_num-1].value != None and row[pk_x_cood-1].value != None and  row[pk_y_cood-1].value != None \
                and is_number(row[pk_x_cood-1].value) == True and is_number(row[pk_y_cood-1].value) == True:
            print(row[pk_num - 1].value, row[pk_x_cood - 1].value,
                  row[pk_y_cood - 1].value)
            x_cood = float(row[pk_x_cood - 1].value)
            y_cood = float(row[pk_y_cood - 1].value)
            pai_num = row[pk_num - 1].value
            circle = dxf.circle(2.0)
            circle['layer'] = 'paikou'
            circle['color'] = 2
            text = dxf.text(pai_num, (x_cood, y_cood), height=1.207)
            text['layer'] = 'paikou'
            text['color'] = 2
            block = dxf.block(name='paikou')
            block.add(circle)
            drawing.blocks.add(block)
            blockref = dxf.insert(blockname='paikou', insert=(x_cood, y_cood))
            drawing.add(blockref)
            drawing.add(text)

    drawing.save()
Пример #16
0
def cblock(bname,x,y,z,lx,ly,lz):
    # create a block
    board1 = dxf.block(name=bname)
    drawing.blocks.add(board1)

    # create 3dfaces for cube
    face1 = dxf.face3d([(0,0,0),(x,0,0),(x,y,0),(0,y,0)])
    face2 = dxf.face3d([(0,0,0),(x,0,0),(x,0,z),(0,0,z)])
    face3 = dxf.face3d([(0,0,0),(0,0,z),(0,y,z),(0,y,0)])
    face4 = dxf.face3d([(x,0,0),(x,0,z),(x,y,z),(x,y,0)])
    face5 = dxf.face3d([(0,y,z),(0,0,z),(x,0,z),(x,y,z)])
    face6 = dxf.face3d([(0,y,0),(x,y,0),(x,y,z),(0,y,z)])
    
    # add 3dface to block
    board1.add(face1)
    board1.add(face2)
    board1.add(face3)
    board1.add(face4)
    board1.add(face5)
    board1.add(face6)

    # insert the block-create ref, then add to drawing
    blockref = dxf.insert(blockname=bname, insert=(lx,ly,lz))
    drawing.add(blockref)
import xlrd, dxfwrite
from dxfwrite import DXFEngine as dxf

# draw a cad picture
drawing = dxf.drawing('排口坐标.dxf')

# read excel datas
data = xlrd.open_workbook('1.xls')
num_sheets = len(data.sheets())
for n in range(num_sheets):
    table = data.sheets()[n]
    nrows = table.nrows
    for i in range(2, nrows):
        x_cood = float(table.cell(i, 2).value)
        y_cood = float(table.cell(i, 3).value)
        pai_num = table.cell(i, 1).value
        circle = dxf.circle(2.0)
        circle['layer'] = 'paikou'
        circle['color'] = 2
        text = dxf.text(pai_num, (y_cood, x_cood), height=1.207)
        text['layer'] = 'paikou'
        text['color'] = 2
        block = dxf.block(name='paikou')
        block.add(circle)
        drawing.blocks.add(block)
        blockref = dxf.insert(blockname='paikou', insert=(y_cood, x_cood))
        drawing.add(blockref)
        drawing.add(text)

drawing.save()
Пример #18
0
#makes the elionix block
ame = alignment_marker.elionix_alignment_marker(layer0, w_e, pw_e, ph_e, ts_e, 0, 0)
drawing.blocks.add(ame)
#makes the raith block
amr = alignment_marker.raith_alignment_marker(layer0, w_r, pw_r, 0, 0)
drawing.blocks.add(amr)
#makes the vistec block
amv = alignment_marker.vistec_alignment_marker(layer0, h_v, w_v, 0, 0)
drawing.blocks.add(amv)

#ADDING ELIONIX BLOCK
am_e_x = [-die_width/2+align_distance+w_e/2, -die_width/2+align_distance+w_e/2] # defining the coordinates of the positions of the alignment blocks
am_e_y = [-die_length/2+align_distance+w_e/2, +die_length/2-align_distance-am_e_gridheight+w_e/2]

ae_ref = dxf.insert(blockname='alignmentmarker_elionix', insert=(am_e_x[0],am_e_y[0]), columns = no_x_align , rows = no_y_align, 
    colspacing = w_e+align_space_e, rowspacing = w_e+ align_space_e, layer = layer0, color =am_colour) #bot left
ae_ref1 = dxf.insert(blockname='alignmentmarker_elionix', insert=(am_e_x[1],am_e_y[1]), columns = no_x_align , rows = no_y_align, 
    colspacing = w_e+align_space_e, rowspacing = w_e+ align_space_e,  layer = layer0, color =am_colour) # top left


#ADD THE ELIONIX ORIENTATION SQUARES TO EACH OF THE ALIGNMENT MARKERS
#how to make sure the orientation of the alignment markers is correct
orient_marker_size = (w_e-2*ph_e-ts_e)/8
orient_marker_coord = -(w_e-2*ph_e-ts_e)/4-ts_e/2-orient_marker_size/2
ame_orient  = dxf.block("ame_orient", layer=layer0)

ame_orient.add(dxf.rectangle((cc[0]+orient_marker_coord,cc[1]+orient_marker_coord,0),
        orient_marker_size,orient_marker_size,color = am_colour, rotation = 0, layer = layer0))
ame_orient.add(dxf.rectangle((cc[0]+orient_marker_coord,cc[1]+(w_e+align_space_e)*(no_y_align-1)+orient_marker_coord+ts_e+(w_e-2*ph_e-ts_e)/2,0),
        orient_marker_size,orient_marker_size,color = am_colour, rotation = 0, layer = layer0))  
ame_orient.add(dxf.rectangle((cc[0]+(w_e+align_space_e)*(no_x_align-1)+orient_marker_coord+ts_e+(w_e-2*ph_e-ts_e)/2,cc[1]+orient_marker_coord,0),
Пример #19
0
    def DicingBorder(self,
                     maxpts=0,
                     minpts=0,
                     thin=5,
                     thick=20,
                     short=40,
                     long=100,
                     dash=400,
                     layer='MARKERS'):
        '''
        # maxpts:     where in chip list to stop putting a dicing border 
        # minpts:     where in chip list to start putting dicing border
        # thin:5      #thin section of crosshair
        # thick:20    #thick section of crosshair AND dash thickness
        # short:40    #short section of crosshair
        # long:100    #long section of crosshair
        # dash:400    #spacing between dashes
        '''
        if maxpts < 0:
            maxpts = len(self.chipPts) + maxpts

        #determine filling
        bg = self.bg(layer)
        offsetX = ((self.chipX - 2 * short - 2 * long) % (dash) + dash) / 2
        offsetY = ((self.chipY - 2 * short - 2 * long) % (dash) + dash) / 2
        border = dxf.block('DICINGBORDER')
        border.add(dxf.rectangle((0, 0), short + thin, thin, bgcolor=bg))
        border.add(dxf.rectangle((short + thin, 0), long, thick, bgcolor=bg))
        border.add(dxf.rectangle((0, thin), thin, short, bgcolor=bg))
        border.add(dxf.rectangle((0, thin + short), thick, long, bgcolor=bg))

        for x in range(int(short + long),
                       int(self.chipX - short - long - dash), dash):
            border.add(
                dxf.rectangle((x + offsetX, 0), thick, thick, bgcolor=bg))

        border.add(
            dxf.rectangle((self.chipX, 0), -short - thin, thin, bgcolor=bg))
        border.add(
            dxf.rectangle((self.chipX - short - thin, 0),
                          -long,
                          thick,
                          bgcolor=bg))
        border.add(dxf.rectangle((self.chipX, thin), -thin, short, bgcolor=bg))
        border.add(
            dxf.rectangle((self.chipX, thin + short), -thick, long,
                          bgcolor=bg))

        for y in range(int(short + long),
                       int(self.chipY - short - long - dash), dash):
            border.add(
                dxf.rectangle((0, y + offsetY), thick, thick, bgcolor=bg))

        border.add(
            dxf.rectangle((0, self.chipY), short + thin, -thin, bgcolor=bg))
        border.add(
            dxf.rectangle((short + thin, self.chipY), long, -thick,
                          bgcolor=bg))
        border.add(
            dxf.rectangle((0, -thin + self.chipY), thin, -short, bgcolor=bg))
        border.add(
            dxf.rectangle((0, -thin - short + self.chipY),
                          thick,
                          -long,
                          bgcolor=bg))

        for x in range(int(short + long),
                       int(self.chipX - short - long - dash), dash):
            border.add(
                dxf.rectangle((x + offsetX - thick, self.chipY),
                              thick,
                              -thick,
                              bgcolor=bg))

        border.add(
            dxf.rectangle((self.chipX, self.chipY),
                          -short - thin,
                          -thin,
                          bgcolor=bg))
        border.add(
            dxf.rectangle((self.chipX - short - thin, self.chipY),
                          -long,
                          -thick,
                          bgcolor=bg))
        border.add(
            dxf.rectangle((self.chipX, -thin + self.chipY),
                          -thin,
                          -short,
                          bgcolor=bg))
        border.add(
            dxf.rectangle((self.chipX, -thin - short + self.chipY),
                          -thick,
                          -long,
                          bgcolor=bg))

        for y in range(int(short + long),
                       int(self.chipY - short - long - dash), dash):
            border.add(
                dxf.rectangle((self.chipX, y + offsetY - thick),
                              -thick,
                              thick,
                              bgcolor=bg))

        self.drawing.blocks.add(border)

        for index, pt in enumerate(self.chipPts):
            if (maxpts == 0 or index < maxpts) and index >= minpts:
                self.drawing.add(
                    dxf.insert('DICINGBORDER',
                               insert=(pt[0], pt[1]),
                               layer=self.lyr(layer)))
Пример #20
0
    face5 = dxf.face3d([(lx,y+ly,z+lz),(lx,ly,z+lz),(x+lx,ly,z+lz),(x+lx,y+ly,z+lz)])
    face6 = dxf.face3d([(lx,y+ly,lz),(x+lx,y+ly,lz),(x+lx,y+ly,z+lz),(lx,y+ly,z+lz)])
    
    # add 3dface to block
    bname.add(face1)
    bname.add(face2)
    bname.add(face3)
    bname.add(face4)
    bname.add(face5)
    bname.add(face6)


# Block adding boilerplate, spaces in name not OK
pallet = dxf.block(name='Europallet')
drawing.blocks.add(pallet)
palref = dxf.insert(blockname='Europallet', insert=(0,0,0))

# Create a Euro pallet by adding faces to one block
# Make bottom boards
cblock(pallet, 100, 1200, 22, 0,0,0)
cblock(pallet, 145, 1200, 22, 327.5, 0, 0)
cblock(pallet, 100, 1200, 22, 700, 0, 0)

#make blocks
cblock(pallet, 100, 145, 78, 0, 0, 22)
cblock(pallet, 100, 145, 78, 0, 527.5, 22)
cblock(pallet, 100, 145, 78, 0, 1055, 22)
cblock(pallet, 145, 145, 78, 327.5, 0, 22)

drawing.add(palref)
Пример #21
0
 def writeChip(self, chip, index):
     #insert a chip at specified index
     self.drawing.add(
         dxf.insert(chip.ID,
                    insert=self.chipSpace(self.chipPts[index]),
                    layer=self.lyr(chip.layer)))
Пример #22
0
# set up the basic drawing
drawing = dxf.drawing('basic.dxf')

# create a block
board1 = dxf.block(name="board")
drawing.blocks.add(board1)

# create 3dfaces for cube
face1 = dxf.face3d([(0,0,0),(100,0,0),(100,100,0),(0,100,0)])
face2 = dxf.face3d([(0,0,0),(100,0,0),(100,0,100),(0,0,100)])
face3 = dxf.face3d([(0,0,0),(0,0,100),(0,100,100),(0,100,0)])
face4 = dxf.face3d([(100,0,0),(100,0,100),(100,100,100),(100,100,0)])
face5 = dxf.face3d([(0,0,100),(100,0,100),(100,100,100),(0,100,100)])
face6 = dxf.face3d([(0,100,0),(100,100,0),(100,100,100),(0,100,100)])

# add 3dface to block
board1.add(face1)
board1.add(face2)
board1.add(face3)
board1.add(face4)
board1.add(face5)
board1.add(face6)


# insert the block-create ref, then add to drawing
blockref = dxf.insert(blockname='board', insert=(0,0,0))
drawing.add(blockref)
drawing.save()

Пример #23
0
    rotation = 30,
    height=0.25,
    text='test',
    prompt='test eingeben:', # only important for interactive CAD systems
    tag='TEST'
)
# add attdef to the block definition
block.add(attdef)
# add the block to the BLOCKS section
drawing.blocks.add(block)

# insert the block references
for x in range(1, 10):
    block_ref = dxf.insert(
        blockname='Rechteck',
        insert=(x*2,10),
        rotation=x*6,
        xscale=x,
        yscale=x)

    # create an ATTRIB-entity from an ATTDEF-entity
    attrib = attdef.new_attrib(
        height=0.18,
        text='attrib:%d' % x,
    )

    # add ATTRIB-entity to the block refernce
    # relative insert, respects the block rotation
    block_ref.add(attrib, relative=True)
    # add block reference to drawing
    drawing.add(block_ref)
    insert=(.2, .2),
    rotation=30,
    height=0.25,
    text='test',
    prompt='test eingeben:',  # only important for interactive CAD systems
    tag='TEST')
# add attdef to the block definition
block.add(attdef)
# add the block to the BLOCKS section
drawing.blocks.add(block)

# insert the block references
for x in range(1, 10):
    block_ref = dxf.insert(blockname='Rechteck',
                           insert=(x * 2, 10),
                           rotation=x * 6,
                           xscale=x,
                           yscale=x)

    # create an ATTRIB-entity from an ATTDEF-entity
    attrib = attdef.new_attrib(
        height=0.18,
        text='attrib:%d' % x,
    )

    # add ATTRIB-entity to the block refernce
    # relative insert, respects the block rotation
    block_ref.add(attrib, relative=True)
    # add block reference to drawing
    drawing.add(block_ref)
Пример #25
0
def main(args):
    fname_stl = args.input
    fname_dxf = args.output
    slices_list = args.slices
    k_e = args.slices_end_factors
    proj_offsets = args.proj_offsets
    plot_sections = args.plot_sections

    # fname_stl, fname_dxf, slices_list, k_e, proj_offsets, plot_sections = args_t

    sx = args.x_slices
    sy = args.y_slices
    sz = args.z_slices
    print(sx, sy, sz)
    if not len(fname_dxf):
        fname_dxf = fname_stl.split('.')[0] + '.dxf'
    print(fname_stl)
    mesh_stl = mesh.Mesh.from_file(fname_stl)

    dim_max = np.round(mesh_stl.max_, 3)
    dim_min = np.round(mesh_stl.min_, 3)

    sections_list = [
        ([1, 0,
          0], dim_min[0] + k_e[0], dim_max[0] - k_e[0], slices_list[0], sx),
        ([0, 1,
          0], dim_min[1] + k_e[1], dim_max[1] - k_e[1], slices_list[1], sy),
        ([0, 0,
          1], dim_min[2] + k_e[2], dim_max[2] - k_e[2], slices_list[2], sz)
    ]

    section_plane_list = []
    for i, (norm, n_min, n_max, n_sect, s) in enumerate(sections_list):
        print('slicing plane: ', i)
        # n_sect=10
        cp_n0_arr = np.tile(norm, (n_sect, 1))

        if n_sect == 1:
            cp_D0_arr = np.tile(norm, (n_sect, 1)) * np.array(
                [0.5 * (n_min + n_max)])
        else:
            #k_e jest offsetem, ktory zapobiega rzutowaniu sciany na plaszczyzne.
            #rzutowanie triangulowanej plaszczyzny skutkuje 'poszatkowaniem' rzutu i
            #dodatkowej, manualnej obrobki dxfa
            cp_D0_arr = np.tile(norm, (n_sect, 1)) * np.linspace(
                n_min, n_max, n_sect)[:, np.newaxis]

        if len(s):
            s_cp_n0_arr = np.tile(norm, (len(s), 1))
            s_cp_D0_arr = np.tile(norm,
                                  (len(s), 1)) * np.array(s)[:, np.newaxis]
            cp_D0_arr = np.vstack([cp_D0_arr, s_cp_D0_arr])
            cp_D0_arr = np.unique(cp_D0_arr, axis=0)
            cp_n0_arr = np.tile(norm, (cp_D0_arr.shape[0], 1))

            # print(np.vstack([cp_n0_arr, s_cp_n0_arr]))

        section_list = []
        #
        for i, (n0, D0) in enumerate(zip(cp_n0_arr, cp_D0_arr)):
            intersect_list = []
            # print(i)
            for tri_list in mesh_stl.vectors:
                tri = np.round(np.vstack(tri_list).astype(float), 6)
                intersect = fc.tri_plane_intersect(tri, D0, n0)
                if len(intersect) == 2:
                    intersect_list.append(np.vstack(intersect))
            section_list.append(intersect_list)
        section_plane_list.append(section_list)

    drawing = dxf.drawing(fname_dxf)
    drawing.add_layer('~slices_x')
    drawing.add_layer('~slices_y')
    drawing.add_layer('~slices_z')

    for i, section_list in enumerate(section_plane_list):
        for j, section in enumerate(section_list):
            blockname_x = '_'.join(('slices_x', str(j)))
            blockname_y = '_'.join(('slices_y', str(j)))
            blockname_z = '_'.join(('slices_z', str(j)))
            block_x = dxf.block(name=blockname_x)
            block_y = dxf.block(name=blockname_y)
            block_z = dxf.block(name=blockname_z)
            drawing.add(block_x)
            drawing.add(block_y)
            drawing.add(block_z)

            p_arr = np.array(section)
            for row in p_arr:
                if row.shape[0] == 2:
                    x0 = row[0, 0]
                    y0 = row[0, 1]
                    z0 = row[0, 2]

                    x1 = row[1, 0]
                    y1 = row[1, 1]
                    z1 = row[1, 2]

                    if i == 0:
                        if proj_offsets:
                            block_x.add(
                                dxf.line((z0 + x0, y0), (z1 + x1, y1),
                                         thickness=0,
                                         color=j))
                        else:
                            block_x.add(
                                dxf.line((y0, z0), (y1, z1),
                                         thickness=0,
                                         color=j))

                        block_x_ref = dxf.insert(blockname_x,
                                                 insert=(0, 0),
                                                 layer='~slices_x')
                        drawing.add(block_x_ref)

                    elif i == 1:
                        if proj_offsets:
                            block_y.add(
                                dxf.line((x0, z0 + y0), (x1, z1 + y0),
                                         thickness=0,
                                         color=j))
                        else:
                            block_y.add(
                                dxf.line((x0, z0), (x1, z1),
                                         thickness=0,
                                         color=j))

                        block_y_ref = dxf.insert(blockname_y,
                                                 insert=(0, 0),
                                                 layer='~slices_y')
                        drawing.add(block_y_ref)

                    elif i == 2:
                        if proj_offsets:
                            block_z.add(
                                dxf.line((x0, y0), (x1, y1),
                                         thickness=0,
                                         color=j))
                        else:
                            block_z.add(
                                dxf.line((x0, y0), (x1, y1),
                                         thickness=0,
                                         color=j))

                        block_z_ref = dxf.insert(blockname_z,
                                                 insert=(0, 0),
                                                 layer='~slices_z')
                        drawing.add(block_z_ref)
    drawing.save()

    if plot_sections:
        fig = plt.figure()
        ax = fig.gca(projection='3d')
        for section_list in section_plane_list:
            for i, section in enumerate(section_list):
                p_arr = np.array(section)
                for row in p_arr:
                    if row.shape[0] == 2:
                        # print(row)
                        x = row[:, 0]
                        y = row[:, 1]
                        z = row[:, 2]
                        ax.plot(x, y, z, 's-')
        plt.show()
    print('Thank you')