コード例 #1
0
    def __init__(self,
                 wafer,
                 chipID,
                 layer,
                 structures=None,
                 defaults=None,
                 FRAME_NAME='FRAME'):
        self.wafer = wafer
        self.width = wafer.chipX - wafer.sawWidth
        self.height = wafer.chipY - wafer.sawWidth
        self.chipID = chipID  #string (usually)
        self.ID = 'CHIP_' + str(chipID)
        self.solid = wafer.solid
        self.frame = wafer.frame
        self.layer = layer
        if defaults is None:
            self.defaults = {}
        else:
            self.defaults = defaults.copy()
        #setup centering
        self.center = (self.width / 2, self.height / 2)
        #initialize the block
        self.chipBlock = dxf.block(self.ID)

        #setup structures
        if structures is not None:
            self.structures = structures

        #add a debug frame for actual chip area
        if wafer.frame:
            self.add(
                dxf.rectangle((0, 0),
                              self.width,
                              self.height,
                              layer=wafer.lyr(FRAME_NAME)))
コード例 #2
0
def raith_alignment_marker(layer, w_r, pw_r, cc_x,
                           cc_y):  #program does nothing as written
    #questions: does the layer name have to be a string?
    #In this case, the alignment marker elionix block will always be called the elionix block
    cc = [cc_x, cc_y]
    block = dxf.block("alignmentmarker_raith",
                      layer=layer)  # creating the block
    block.add(
        dxf.rectangle((cc[0] - pw_r / 2, cc[1] - w_r / 2, 0),
                      pw_r,
                      w_r,
                      rotation=0,
                      layer=layer))  # long vertical
    block.add(
        dxf.rectangle((cc[0] - w_r / 2, cc[1] - pw_r / 2, 0),
                      (w_r - 2 - pw_r) / 2,
                      pw_r,
                      rotation=0,
                      layer=layer))  # short horizonal left
    block.add(
        dxf.rectangle((cc[0] + pw_r / 2, cc[1] - pw_r / 2, 0),
                      (w_r - 2 - pw_r) / 2,
                      pw_r,
                      rotation=0,
                      layer=layer))  # short horiztonal right
    # add block-definition to drawing
    #drawing.blocks.add(block_name)
    print("I DID IT RAITH")
    return block
コード例 #3
0
ファイル: moduleXYZ2DXF.py プロジェクト: rfleissner/ChEsher
    def writeDXF(self):
        
        fname = self.ui.lineEditOutputDXF.text()
        file = open(fname, 'w')
        
        rad = 0.25
        scale = 1.0
        col = 7
        dec = self.ui.spinBoxDecimal.value()
        dwg = dxf.drawing(fname)
           
        # create block
        scalarsymbol = dxf.block(name='symbol')
        scalarsymbol.add( dxf.circle(radius=rad, color=0) )

        # define some attributes
        scalarsymbol.add( dxf.attdef(insert=(1.25, -1.25), tag='VAL1', height=1.25, color=0) )

        # add block definition to the drawing
        dwg.blocks.add(scalarsymbol)

        for nID in self.points:
            x = self.points[nID][0]
            y = self.points[nID][1]
            val1 = self.points[nID][2]
            values = {'VAL1': "%.{0}f".format(dec) % val1}
            
            dwg.add(dxf.insert2(blockdef=scalarsymbol, insert=(x, y),
                                attribs=values,
                                xscale=scale,
                                yscale=scale,
                                layer='0',
                                color = col))

        dwg.save()
コード例 #4
0
def double_dot_etch_block(layer, starting_gap, window_length, etch_window_1,
                          island_1, etch_window_2, island_2, etch_window_3,
                          blockname):
    block = dxf.block(blockname, layer=layer)  # creating the block
    x_etch_position = starting_gap
    block.add(
        dxf.rectangle((x_etch_position, -window_length / 2),
                      etch_window_1,
                      window_length,
                      rotation=0,
                      layer=layer))
    x_etch_position = starting_gap + etch_window_1 + island_1
    block.add(
        dxf.rectangle((x_etch_position, -window_length / 2),
                      etch_window_2,
                      window_length,
                      rotation=0,
                      layer=layer))
    x_etch_position = starting_gap + etch_window_1 + island_1 + etch_window_2 + island_2
    block.add(
        dxf.rectangle((x_etch_position, -window_length / 2),
                      etch_window_3,
                      window_length,
                      rotation=0,
                      layer=layer))  # short horiztonal right
    # add block-definition to drawing
    #drawing.blocks.add(block_name)
    print("I DID IT ETCH BLOCK")
    return block
コード例 #5
0
def plungers_side_mirror(
        layer, plunger_to_nw, plunger_tip_width, plunger_tip_height,
        plunger_taper_width,
        blockname):  #plungers on just one side of the nanowire
    block = dxf.block(blockname, layer=layer)

    taper = dxf.polyline(layer=layer)
    taper.add_vertices([
        (-plunger_tip_width / 2, -plunger_to_nw),
        (plunger_tip_width / 2, -plunger_to_nw),
        (plunger_taper_width / 2, -plunger_tip_height - plunger_to_nw),
        (-plunger_taper_width / 2, -plunger_tip_height - plunger_to_nw)
    ])
    taper.close(True)
    block.add(taper)

    taper_top = dxf.polyline(layer=layer)
    taper_top.add_vertices([
        (-plunger_tip_width / 2, plunger_to_nw),
        (plunger_tip_width / 2, plunger_to_nw),
        (plunger_taper_width / 2, plunger_tip_height + plunger_to_nw),
        (-plunger_taper_width / 2, plunger_tip_height + plunger_to_nw)
    ])
    taper_top.close(True)
    block.add(taper_top)

    return block
コード例 #6
0
def tgates_side_mirror(layer, tgate_to_nw, tgate_tip_width, tgate_tip_height,
                       tgate_taper_width,
                       blockname):  #plungers on just one side of the nanowire

    block = dxf.block(blockname, layer=layer)
    block.add(
        dxf.rectangle((-tgate_tip_width / 2, -tgate_to_nw - tgate_taper_width),
                      tgate_tip_width,
                      tgate_taper_width,
                      rotation=0,
                      layer=layer))
    block.add(
        dxf.rectangle((-tgate_taper_width / 2,
                       -tgate_to_nw - tgate_taper_width - tgate_tip_height),
                      tgate_taper_width,
                      tgate_tip_height,
                      rotation=0,
                      layer=layer))

    # block.add(dxf.rectangle((-tgate_tip_width/2,+tgate_to_nw),
    #   tgate_tip_width, tgate_taper_width, rotation = 0, layer = layer))
    # block.add(dxf.rectangle((-tgate_taper_width/2, +tgate_to_nw+tgate_taper_width),
    #   tgate_taper_width, tgate_tip_height, rotation = 0, layer = layer))

    return block  # creating the block
コード例 #7
0
ファイル: main.py プロジェクト: CrisAnderson/dxf
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)
コード例 #8
0
ファイル: main.py プロジェクト: CrisAnderson/dxf
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)
コード例 #9
0
ファイル: main.py プロジェクト: CrisAnderson/dxf
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)
コード例 #10
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
コード例 #11
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
コード例 #12
0
def vistec_alignment_marker(layer, h_v, w_v, cc_x,
                            cc_y):  #program does nothing as written
    cc = [cc_x, cc_y]
    block = dxf.block("alignmentmarker_vistec",
                      layer=layer)  # creating the block
    block.add(
        dxf.rectangle((cc[0] - w_v / 2, cc[1] - h_v / 2, 0),
                      w_v,
                      h_v,
                      rotation=0,
                      layer=layer))  # long vertical
    print("I DID IT VISTEC")
    return block
コード例 #13
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
コード例 #14
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
コード例 #15
0
def initial_test_etch_block(layer, window_spacing, start_window_width,
                            no_windows, window_length, window_size):
    block = dxf.block("test_etch_block", layer=layer)
    current_coordinate = window_spacing
    window_size = start_window_width
    for i in range(no_windows):
        block.add(
            dxf.rectangle((current_coordinate, -window_length / 2),
                          window_size,
                          window_length,
                          rotation=0))
        current_coordinate += window_size + window_spacing
        window_size += window_increment
    return block
コード例 #16
0
    def test_insert2(self):
        block = dxf.block('B1')
        att1 = dxf.attdef('TAG1', (1.0, 0.0), height=0.35)
        att2 = dxf.attdef('TAG2', (1.0, 0.5), height=0.35)
        block.add(att1)
        block.add(att2)
        attribs = {'TAG1': 'TextForTAG1', 'TAG2': 'TextForTAG2'}
        blockref = dxf.insert2(block, insert=(0, 0), attribs=attribs)

        result = dxfstr(blockref)
        self.assertTrue('TAG1' in result)
        self.assertTrue('TAG2' in result)
        self.assertTrue('TextForTAG1' in result)
        self.assertTrue('TextForTAG2' in result)
コード例 #17
0
ファイル: test_insert2.py プロジェクト: CoffenHu/dxfwrite
    def test_insert2(self):
        block = dxf.block('B1')
        att1 = dxf.attdef('TAG1', (1.0, 0.0), height=0.35)
        att2 = dxf.attdef('TAG2', (1.0, 0.5), height=0.35)
        block.add(att1)
        block.add(att2)
        attribs = {'TAG1': 'TextForTAG1', 'TAG2': 'TextForTAG2'}
        blockref = dxf.insert2(block, insert=(0, 0), attribs=attribs)

        result = dxfstr(blockref)
        self.assertTrue('TAG1' in result)
        self.assertTrue('TAG2' in result)
        self.assertTrue('TextForTAG1' in result)
        self.assertTrue('TextForTAG2' in result)
コード例 #18
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))
コード例 #19
0
ファイル: table.py プロジェクト: CoffenHu/dxfwrite
def get_mat_symbol():
    p1 = 0.5
    p2 = 0.25
    points = [(p1, p2), (p2, p1), (-p2, p1), (-p1, p2), (-p1, -p2),
              (-p2, -p1), (p2, -p1), (p1, -p2)]
    polygon = dxf.polyline(points, color=2)
    polygon.close()
    attdef = dxf.attdef(text='0', tag='num', height=0.7, color=1,
                        halign=dxfwrite.CENTER, valign=dxfwrite.MIDDLE
                        )
    symbolblock = dxf.block('matsymbol')
    symbolblock.add(polygon)
    symbolblock.add(attdef)
    dwg.blocks.add(symbolblock)
    return symbolblock
コード例 #20
0
ファイル: drawing.py プロジェクト: sialan/autonomous-sprayer
    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))
コード例 #21
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
コード例 #22
0
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()
コード例 #23
0
ファイル: xref.py プロジェクト: CoffenHu/dxfwrite
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()
コード例 #24
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()
コード例 #25
0
def elionix_alignment_marker(layer, w_e, pw_e, ph_e, ts_e, cc_x,
                             cc_y):  #program does nothing as written
    #questions: does the layer name have to be a string?
    #In this case, the alignment marker elionix block will always be called the elionix block
    cc = [cc_x, cc_y]
    block = dxf.block("alignmentmarker_elionix",
                      layer=layer)  # creating the block
    block.add(
        dxf.rectangle((cc[0] - pw_e / 2, cc[1] - w_e / 2, 0),
                      pw_e,
                      ph_e,
                      rotation=0))  #bottom square of alignment marker
    block.add(
        dxf.rectangle((cc[0] - w_e / 2, cc[1] - pw_e / 2, 0),
                      ph_e,
                      pw_e,
                      rotation=0))  # left square
    block.add(
        dxf.rectangle((cc[0] - pw_e / 2, cc[1] + w_e / 2 - ph_e, 0),
                      pw_e,
                      ph_e,
                      rotation=0))  # top square
    block.add(
        dxf.rectangle((cc[0] + w_e / 2 - ph_e, cc[1] - pw_e / 2, 0),
                      ph_e,
                      pw_e,
                      rotation=0))  # right square
    block.add(
        dxf.rectangle((cc[0] - ts_e / 2, cc[1] - w_e / 2 + ph_e, 0),
                      ts_e,
                      w_e - 2 * ph_e,
                      rotation=0))  # long vertical
    block.add(
        dxf.rectangle((cc[0] - ts_e / 2 -
                       (w_e - 2 * ph_e - ts_e) / 2, cc[1] - ts_e / 2, 0),
                      (w_e - 2 * ph_e - ts_e) / 2,
                      ts_e,
                      rotation=0))  # short horizonal left
    block.add(
        dxf.rectangle((cc[0] + ts_e / 2, cc[1] - ts_e / 2, 0),
                      (w_e - 2 * ph_e - ts_e) / 2,
                      ts_e,
                      rotation=0))  # short horiztonal right
    # add block-definition to drawing
    #drawing.blocks.add(block_name)
    print("I DID IT ELIONIX")
    return block
コード例 #26
0
ファイル: table.py プロジェクト: msarch/py
def get_mat_symbol():
    p1 = 0.5
    p2 = 0.25
    points = [(p1, p2), (p2, p1), (-p2, p1), (-p1, p2), (-p1, -p2), (-p2, -p1),
              (p2, -p1), (p1, -p2)]
    polygon = dxf.polyline(points, color=2)
    polygon.close()
    attdef = dxf.attdef(text='0',
                        tag='num',
                        height=0.7,
                        color=1,
                        halign=dxfwrite.CENTER,
                        valign=dxfwrite.MIDDLE)
    symbolblock = dxf.block('matsymbol')
    symbolblock.add(polygon)
    symbolblock.add(attdef)
    dwg.blocks.add(symbolblock)
    return symbolblock
コード例 #27
0
ファイル: fileHandler.py プロジェクト: rfleissner/ChEsher
def writeVectorDXF(nodes, VMin, VMax, eps, scale, fname):

    colMono = 7

    arrow = [(1.0,0.0),(0.6,-0.1),(0.6,0.1),(1.0,0.0)]
    arrowline = [(0.0,0.0),(0.6,0.0)]

    dwg = dxf.drawing(fname)

    # create block
    vectorsymbol = dxf.block(name='vector')
    vectorsymbol.add( dxf.polyline(arrow, color=0) )
    vectorsymbol.add( dxf.polyline(arrowline, color=0) )

    # add block definition to the drawing
    dwg.blocks.add(vectorsymbol)

    nOfVectors = 0
    
    for nID in nodes:
        x = nodes[nID][0]
        y = nodes[nID][1]
        u = nodes[nID][2]
        v = nodes[nID][3]
        velocity = (u**2.0 + v**2.0)**(1.0/2.0)
        phi = math.atan2(v,u)*180.0/math.pi

        # write block, if value is inside a given band

        blockScale = scale * velocity 
        if velocity <= VMax and velocity >= VMin:
            if velocity < eps and velocity > -eps:
                continue
            else:
                dwg.add(dxf.insert2(blockdef=vectorsymbol, insert= (x, y),
                                    xscale=blockScale,
                                    yscale=blockScale,
                                    layer='0',
                                    color = colMono,
                                    rotation = phi))
                nOfVectors += 1  
    dwg.save()
    
    return nOfVectors
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()
コード例 #29
0
ファイル: cube.py プロジェクト: CrisAnderson/dxf
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)
コード例 #30
0
ファイル: simple_drawing.py プロジェクト: CoffenHu/dxfwrite
# add a TEXT-entity
drawing.add(dxf.text("Manfred"))

# add a TEXT-entity with more properties
drawing.add(dxf.text(
    text="mozman",
    style="ISOCPEUR",
    height=0.7,
    oblique=15,
    color=5,
    insert=(0,5),
    rotation=30,
))

# create BLOCK-entity
block = dxf.block(name='Rechteck')
# add DXF-entities to the block
block.add(dxflist_example(0, 0, 1, 1))
# create an ATTDEF-entity, can be use to crate new ATTRIBS with following
# default values, see attdef.new_attrib() call below
attdef = dxf.attdef(
    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
コード例 #31
0
ファイル: fileHandler.py プロジェクト: rfleissner/ChEsher
def writeScalarDXF(nodes, SMin, SMax, eps, scale, symbol, useMono, fname):

    colMono = 7
    colPos = 1
    colNeg = 3

    hLine = [(-0.75,0.0), (0.75, 0.0)]
    vLine = [(0.0,-0.75), (0.0,0.75)]
    rad = 0.375

    dwg = dxf.drawing(fname)

    # create block
    scalarsymbol = dxf.block(name='symbol')
    if symbol != 0 and symbol != 3:
        scalarsymbol.add( dxf.polyline(hLine, color=0) )
        scalarsymbol.add( dxf.polyline(vLine, color=0) )
    if symbol != 1 and symbol != 3:
        scalarsymbol.add( dxf.circle(radius=rad, color=0) )

    # define some attributes
    scalarsymbol.add( dxf.attdef(insert=(0.5, 0.5), tag='VAL1', height=1.0, color=0) )
    scalarsymbol.add( dxf.attdef(insert=(0.5, -1.5), tag='VAL2', height=1.0, color=0) )

    # add block definition to the drawing
    dwg.blocks.add(scalarsymbol)
    
    nOfScalars = 0
    
    for nID in nodes:
        x = nodes[nID][0]
        y = nodes[nID][1]
        val1 = nodes[nID][2]
        val2 = nodes[nID][3]

        values = {}
        if val2 is None:
            values = {'VAL1': "%.2f" % val1, 'VAL2': ""}
        else:
            if val2 < eps and val2 > -eps:
                values = {'VAL1': "%.2f" % val1, 'VAL2': ""}
            else:
                values = {'VAL1': "%.2f" % val1, 'VAL2': "%.2f" % val2}
                
        # define color
        col = 0
        if useMono is True:
            col = colMono
        else:
            if val1 >= 0:
                col = colPos
            else:
                col = colNeg

        if val1 >= SMin and val1 <= SMax:
            if val1 < eps and val1 > -eps:
                continue
            else:
                dwg.add(dxf.insert2(blockdef=scalarsymbol, insert=(x, y),
                                    attribs=values,
                                    xscale=scale,
                                    yscale=scale,
                                    layer='0',
                                    color = col))
                nOfScalars += 1
    dwg.save()
    
    return nOfScalars
コード例 #32
0
#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),
        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]+(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))
 
drawing.blocks.add(ame_orient)

orient_marker = dxf.insert(blockname='ame_orient', insert=(am_e_x[0],am_e_y[0]), columns = 1 , rows = 1, 
    colspacing = w_e+align_space_e, rowspacing = w_e+ align_space_e, layer = layer0, color =am_colour) #bot left
orient_marker1 = dxf.insert(blockname='ame_orient', insert=(am_e_x[1],am_e_y[1]), columns = 1 , rows = 1, 
コード例 #33
0
ファイル: flags.py プロジェクト: sunnycd/dxfwrite
def get_random_point():
    x = random.randint(-100, 100)
    y = random.randint(-100, 100)
    return (x, y)


sample_coords = [get_random_point() for x in range(50)]

flag_symbol = [(0, 0), (0, 5), (4, 3), (0, 3)]

filename = 'flags.dxf'
dwg = dxf.drawing(filename)
dwg.add_layer('FLAGS')

# first create a block
flag = dxf.block(name='flag')
# add dxf entities to the block (the flag)
# use basepoint = (x, y) define an other basepoint than (0, 0)
flag.add(dxf.polyline(flag_symbol))
flag.add(dxf.circle(radius=.4, color=2))
# define some attributes
flag.add(dxf.attdef(insert=(0.5, -0.5), tag='NAME', height=0.5, color=3))
flag.add(dxf.attdef(insert=(0.5, -1.0), tag='XPOS', height=0.25, color=4))
flag.add(dxf.attdef(insert=(0.5, -1.5), tag='YPOS', height=0.25, color=4))

# add block definition to the drawing
dwg.blocks.add(flag)
number = 1
for point in sample_coords:
    # now insert flag symbols at coordinate 'point'
    # insert2 needs the block definition object as parameter 'blockdef'
コード例 #34
0
    def render(self):
        data = self.data
        point_layers = {}

        # create the drawing and add layers to it
        drawing = dxf.drawing()
        drawing.add_layer(self.filter_layer_name('objects'))
        drawing.add_layer(self.filter_layer_name('marker'))
        drawing.add_layer(self.filter_layer_name('Mesh'))

        # Add layers from the doncodes
        for l in set([
                self.doncodes["doncodes"][lx]["CAD LAYERS"]
                for lx in self.doncodes["doncodes"]
        ]):
            if l:
                drawing.add_layer(self.filter_layer_name(l))

        # might need custom layers for major/minor contours
        have_contour_names = []
        for x in ["major", "minor"]:
            if self.settings["job"].get("contours") and self.settings["job"][
                    "contours"][x] and self.settings["job"]["contours"][x].get(
                        "layer"):
                drawing.add_layer(
                    self.filter_layer_name(
                        "Contour - " +
                        str(self.settings["job"]["contours"][x].get("layer"))))
                have_contour_names.append(x)

        if len(have_contour_names) < 2:
            # drawing.add_layer(self.filter_layer_name('Contour'))
            drawing.add_layer(self.filter_layer_name('Contour Splines'))
            drawing.add_layer(self.filter_layer_name('Contour Splines Flat'))

        # add the separated codes/shots/rls
        for x in ["Shots", "Rls", "Codes"]:
            for y in ["", "_NC", "_NL"]:
                drawing.add_layer(self.filter_layer_name(x + y))

        #drawing.header['$ANGBASE'] = self.bm["marker_angle"]

        #drawing.header['$UCSORG'] = (0, 0, 0)
        #drawing.header['$UCSXDIR'] = (1, 0, 0)
        #drawing.header['$UCSYDIR'] = (0, 1, 0)

        # set 3D Point
        #drawing.header['$EXTMIN'] = (0, 0, -10)
        #drawing.header['$EXTMAX'] = (1000, 1000, 100)

        # add the mesh
        if self.settings["options"]["threedMesh"] == "1":
            self.render_mesh(drawing)

        #add stringlines to string_lines layer
        for line in data["stringlines"]:
            if len(data["stringlines"][line]) > 1:
                # variable to store stringline colour, thickness etc. to be passed to polyline
                stringline_detail = {}
                first_point = data["stringlines"][line][0]
                ms_layer = first_point["doncode"].get("MS Properties")
                layer_codes = self.doncodes["ms_layers"].get(ms_layer)
                # make sure we have stringline properties in our doncodes array (often blank)
                if layer_codes:
                    # print data["stringlines"][line][0]["code"], ms_layer
                    # print first_point["code"], layer_codes
                    # if we have a special colour
                    if layer_codes.get("Col"):
                        stringline_detail["color"] = int(layer_codes["Col"])
                    # if we have a line weight set
                    if layer_codes.get("Line Weight") and int(
                            layer_codes.get("Line Weight")):
                        stringline_detail["thickness"] = int(
                            layer_codes.get("Line Weight"))
                    # if we have a line style TODO: map these to their actual line styles
                    if layer_codes.get("Line Style") and int(
                            layer_codes.get("Line Style")):
                        stringline_detail["linetype"] = int(
                            layer_codes.get("Line Style"))
                polyline = dxf.polyline(layer=self.filter_layer_name(
                    first_point["doncode"].get("CAD LAYERS")),
                                        **stringline_detail)
                polyline.add_vertices([
                    self.convert_point(p["point"])
                    for p in data["stringlines"][line]
                ])
                drawing.add(polyline)

        # add the regular (original) contour line
        if self.settings["options"]["origContour"] == "1":
            self.render_contour(drawing, data["contour_lines"],
                                lambda p: self.convert_point(
                                    p))  # Line was previously commented.

        # add splines contour line
        if self.settings["options"]["splinesContour"] == "1":
            # splines version
            self.render_contour(drawing, data["contour_splines"],
                                lambda p: self.convert_point(p), " Splines")
            # flat spline version
            self.render_contour(
                drawing, data["contour_splines"],
                lambda p: self.flatten_point(self.convert_point(p)),
                " Splines Flat")

        # loop through the points with 2d objects on them putting Xrefs on the ones that need it
        #print data["objects_2d"]
        for o in data["objects_2d"]:
            # //bush.position.set(objects_2d[o][0],objects_2d[o][1]+0.3,objects_2d[o][2]).multiplyScalar(psu_renderer.SCALE);
            # psu_renderer.generate_obj(bush.clone());
            drawing.add_xref(self.settings["global"].get("export", {}).get(
                "xref_path", "") + o["code"] + ".dwg",
                             insert=self.convert_point(o["point"]),
                             layer=self.filter_layer_name(
                                 o["doncode"].get("CAD LAYERS")))

        # find and add trees to plot and tree schedule
        # create the table for tree information
        tree_table = dxf.table(insert=self.convert_point(
            [self.bounding_box[0][1], 0, self.bounding_box[2][0] - 20]),
                               nrows=len(data["trees"]) + 2,
                               ncols=4)
        tree_table.set_col_width(1, 4)
        tree_table.set_col_width(2, 3)
        tree_table.set_col_width(3, 5)
        # table cell style
        ctext = tree_table.new_cell_style('ctext',
                                          textcolor=7,
                                          textheight=0.5,
                                          halign=dxfwrite.CENTER,
                                          valign=dxfwrite.MIDDLE)
        # table border style
        border = tree_table.new_border_style(color=6, priority=51)
        ctext.set_border_style(border, right=False)
        # table header
        hcell = tree_table.text_cell(0, 0, "SCHEDULE OF TREES")
        hcell.span = (1, 4)
        tree_table.text_cell(1, 1, "DIAMETER", style='ctext')
        tree_table.text_cell(1, 2, "HEIGHT", style='ctext')
        tree_table.text_cell(1, 3, "TYPE", style='ctext')
        for t in range(len(data["trees"])):
            tree = data["trees"][t]
            diameter = tree["tree_details"].get("diameter", None)
            height = tree["tree_details"].get("height", None)
            spread = tree["tree_details"].get("spread", None)
            note = tree["tree_details"].get("note", None)
            blockname = "tree_" + str(t + 1)
            layer = self.filter_layer_name(
                self.doncodes["doncodes"][tree["code"]].get("CAD LAYERS"))
            if diameter or spread:
                tree_block = dxf.block(name=blockname)
                # trunk
                if diameter:
                    tree_block.add(
                        dxf.circle(float(diameter) / 2.0, [0, 0], layer=layer))
                # leaves
                if spread:
                    tree_block.add(
                        dxf.circle(float(spread) / 2.0, [0, 0], layer=layer))
                drawing.blocks.add(tree_block)
                drawing.add(
                    dxf.insert2(blockdef=tree_block,
                                insert=self.convert_point(tree["position"]),
                                layer=layer))
            # table
            # table position is left of bounding box
            tree_table.text_cell(t + 2, 0, "T" + str(t + 1), style='ctext')
            tree_table.text_cell(t + 2,
                                 1,
                                 diameter and diameter or "",
                                 style='ctext')
            tree_table.text_cell(t + 2,
                                 2, (height and height + "m" or ""),
                                 style='ctext')
            tree_table.text_cell(t + 2,
                                 3,
                                 note and note.upper() or "",
                                 style='ctext')
        drawing.add(tree_table)

        if not self.bm.get("fake"):
            drawing.add(
                dxf.point(self.convert_point(self.bm["position"]),
                          layer=self.filter_layer_name(
                              self.doncodes["doncodes"][self.bm["code"]].get(
                                  "CAD LAYERS"))))
            drawing.add(
                dxf.text("BM",
                         self.convert_point(self.bm["position"]),
                         height=0.2,
                         layer=self.filter_layer_name(
                             self.doncodes["doncodes"][self.bm["code"]].get(
                                 "CAD LAYERS"))))

        # loop through the points adding labels to the layer
        seen = []
        for p in data["p"]:
            # uniquely identify this piece of text at this position to prevent duplicates
            text_id = tuple(
                [p["original_code"], p.get("day_id", "")] + p["position"])
            # figure out if we are NL or
            layer_postfix = ""
            for l in ["NL", "NC"]:
                if l in p["extensions"]["function"]:
                    layer_postfix = "_" + l
            # if this isn't a duplicate and isn't a tree
            if not text_id in seen or p["code"] == "TR":
                blockname = 'point_' + str(p["point_id"]) + (
                    p.get("day_id") and "-" + p["day_id"] or "")
                point_block = dxf.block(name=blockname)
                if p.get("force_point_layer"):
                    layer_code = p["force_point_layer"]["code"]
                else:
                    layer_code = p["code"]
                layer = self.filter_layer_name(
                    self.doncodes["doncodes"][layer_code].get("CAD LAYERS"))
                # create a block to unite the various elements of the point
                # for trees we just want to draw their ref
                if p["code"] == "TR":
                    point_block.add(
                        dxf.text(
                            "T" +
                            str([t["point_id"]
                                 for t in data["trees"]].index(p["point_id"]) +
                                1), [0.2, 0.2],
                            height=0.2,
                            layer="Codes" + layer_postfix))
                else:
                    # these codes don't have the original_code text printed on the plot
                    if not p["code"] in ["RC", "LC"]:
                        # everything else gets original code printed
                        point_block.add(
                            dxf.text(p["original_code"] + " (" +
                                     str(p["line_number"]) + ")", (0, 0),
                                     alignpoint=(0, -0.2),
                                     height=0.05,
                                     rotation=-90,
                                     layer="Codes" + layer_postfix,
                                     valign=MIDDLE))
                    if not "NL" in p["extensions"]["function"]:
                        point_block.add(
                            dxf.text("%.2f" % (p["position"][1]), (0, 0),
                                     alignpoint=(0.12, -0.12),
                                     height=0.3,
                                     rotation=-45,
                                     layer="Rls" + layer_postfix,
                                     valign=MIDDLE))
                point_block.add(
                    dxf.point([0, 0], layer="Shots" + layer_postfix))
                drawing.blocks.add(point_block)
                drawing.add(
                    dxf.insert2(blockdef=point_block,
                                insert=self.convert_point(p["position"]),
                                layer=layer))

                # print p["doncode"].get("Draw Cross Hair on Point")
                if self.doncodes["doncodes"][p["code"]].get(
                        'Draw Cross Hair on Point',
                        'n').lower() in ["1", "y", "yes", "true", "x"]:
                    drawing.add_xref(self.settings["global"].get(
                        "export", {}).get("xref_path", "") + "X.dwg",
                                     insert=self.convert_point(p["position"]),
                                     layer="Shots" + layer_postfix)
                seen.append(text_id)

        # save the drawing to the binary blob and then return the DXF code
        # binary blob to pretend to be a file and store our saved DXF
        blob = StringIO()
        drawing.save_to_fileobj(blob)
        return blob.getvalue()
コード例 #35
0
ファイル: flags.py プロジェクト: CoffenHu/dxfwrite
def get_random_point():
    x = random.randint(-100, 100)
    y = random.randint(-100, 100)
    return (x, y)

sample_coords = [get_random_point() for x in range(50)]

flag_symbol = [(0,0), (0, 5), (4, 3), (0, 3)]

filename = 'flags.dxf'
dwg = dxf.drawing(filename)
dwg.add_layer('FLAGS')

# first create a block
flag = dxf.block(name='flag')
# add dxf entities to the block (the flag)
# use basepoint = (x, y) define an other basepoint than (0, 0)
flag.add( dxf.polyline(flag_symbol) )
flag.add( dxf.circle(radius=.4, color=2) )
# define some attributes
flag.add( dxf.attdef(insert=(0.5, -0.5), tag='NAME', height=0.5, color=3) )
flag.add( dxf.attdef(insert=(0.5, -1.0), tag='XPOS', height=0.25, color=4) )
flag.add( dxf.attdef(insert=(0.5, -1.5), tag='YPOS', height=0.25, color=4) )

# add block definition to the drawing
dwg.blocks.add(flag)
number = 1
for point in sample_coords:
    # now insert flag symbols at coordinate 'point'
    # insert2 needs the block definition object as parameter 'blockdef'
コード例 #36
0
ファイル: pallet.py プロジェクト: CrisAnderson/dxf
    face3 = dxf.face3d([(lx,ly,lz),(lx,ly,z+lz),(lx,y+ly,z+lz),(lx,y+ly,lz)])
    face4 = dxf.face3d([(x+lx,ly,lz),(x+lx,ly,z+lz),(x+lx,y+ly,z+lz),(x+lx,y+ly,lz)])
    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)
コード例 #37
0
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()
コード例 #38
0
ファイル: fileHandler.py プロジェクト: rfleissner/ChEsher
def writeCSDXF(fname, nameCS, nodeIDsCS, nodesCS, valuesCS, decFlow, scale, prefix, suffix):
    
    from dxfwrite.const import TOP, BOTTOM, LEFT, CENTER, RIGHT
    
    dwg = dxf.drawing(fname)

    # create block for symbol on left side of CS

    arrowLeft = [(0.0,0.25), (1.0, 0.25), (0.5, 1.1160), (0.0,0.25)]

    symbolLeft = dxf.block(name='symbolLeft')
    symbolLeft.add( dxf.solid(arrowLeft, color=0) )

    symbolLeft.add( dxf.attdef(insert=(0, -0.25), tag='CS', height=1.0, color=0, halign=LEFT, valign=TOP ))

    # create block for symbol on right side of CS

    arrowRight = [(0.0,0.25), (-1.0, 0.25), (-0.5, 1.1160), (0.0,0.25)]

    symbolRight = dxf.block(name='symbolRight')
    symbolRight.add( dxf.solid(arrowRight, color=0) )

    symbolRight.add( dxf.attdef(insert=(0, -0.25), tag='CS', height=1.0, color=0, halign=RIGHT, valign=TOP ))
    
    # create block for symbol on center of CS
    
    symbolCenter = dxf.block(name='symbolCenter')
    symbolCenter.add( dxf.attdef(insert=(0.0, 0.03), tag='MAX', height=0.75, color=0, halign=CENTER, valign=BOTTOM) )
    symbolCenter.add( dxf.attdef(insert=(0.0, -0.25), tag='MIN', height=0.75, color=0, halign=CENTER, valign=TOP) )

    # add block definitions to the drawing
    dwg.blocks.add(symbolLeft)
    dwg.blocks.add(symbolCenter)
    dwg.blocks.add(symbolRight)
    
    for csID in nodeIDsCS:
        x1 = nodesCS[nodeIDsCS[csID][0]][0]
        x2 = nodesCS[nodeIDsCS[csID][1]][0]
        y1 = nodesCS[nodeIDsCS[csID][0]][1]
        y2 = nodesCS[nodeIDsCS[csID][1]][1]
    
        p1 = (x1, y1)
        p2 = (x2, y2)
        dx = x2 - x1
        dy = y2 - y1
        phi = math.atan2(dy,dx)*180.0/math.pi
        pm = ((x1+x2)/2.0, (y1+y2)/2.0)

        valMin = valuesCS[csID][0]
        valMax = valuesCS[csID][1]

        dwg.add(dxf.polyline((p1, p2)))
        
        values = {'CS': "{0}".format(nameCS[csID])}
        
        dwg.add(dxf.insert2(blockdef=symbolLeft, insert=p1,
                    attribs=values,
                    xscale=scale,
                    yscale=scale,
                    layer='0',
                    rotation = phi))
                    
        dwg.add(dxf.insert2(blockdef=symbolRight, insert=p2,
                    attribs=values,
                    xscale=scale,
                    yscale=scale,
                    layer='0',
                    rotation = phi))
                    
        valuesCenter = {'MIN': "{0}%.{1}f{2} (min)".format(prefix, decFlow, suffix) % valMin, 'MAX': "{0}%.{1}f{2} (max)".format(prefix, decFlow, suffix) % valMax}
        
        dwg.add(dxf.insert2(blockdef=symbolCenter, insert=pm,
                    attribs=valuesCenter,
                    xscale=scale,
                    yscale=scale,
                    layer='0',
                    rotation = phi))
    dwg.save()
コード例 #39
0
ファイル: test.py プロジェクト: CrisAnderson/dxf
#!/usr/bin/python

from dxfwrite import DXFEngine as dxf

# 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)
コード例 #40
0
 def defineHiVisMarker09(self, width, layer):
     for i in range(10):
         num = dxf.block('0' + str(i))
         HiVisMarker09(num, 0, 0, i, width, self.bg(layer))
         self.drawing.blocks.add(num)
コード例 #41
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)))
コード例 #42
0
drawing.add(dxf.text("Manfred"))

# add a TEXT-entity with more properties
drawing.add(
    dxf.text(
        text="mozman",
        style="ISOCPEUR",
        height=0.7,
        oblique=15,
        color=5,
        insert=(0, 5),
        rotation=30,
    ))

# create BLOCK-entity
block = dxf.block(name='Rechteck')
# add DXF-entities to the block
block.add(dxflist_example(0, 0, 1, 1))
# create an ATTDEF-entity, can be use to crate new ATTRIBS with following
# default values, see attdef.new_attrib() call below
attdef = dxf.attdef(
    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)
コード例 #43
0
                 (am_e_gridheight * am_elionix + am_r_gridheight * am_raith +
                  am_v_gridheight * am_vistec)):
    print(
        "The die length is not long enough to support the dimensions of your alignment markers"
    )
    quit()
if die_width < (2 * align_distance +
                (am_e_gridwidth * am_elionix + am_r_gridwidth * am_raith +
                 am_v_gridwidth * am_vistec)):
    print(
        "The die width is not long enough to support the dimensions of your alignment markers"
    )
    quit()

#BLOCK for ELIONIX
ame = dxf.block("alignmentmarker_elionix", layer=layer0)  # creating the block
ame.add(
    dxf.rectangle((cc[0] - pw_e / 2, cc[1] - w_e / 2, 0),
                  pw_e,
                  ph_e,
                  color=am_colour,
                  rotation=0,
                  layer=layer0))  #bottom square of alignment marker
ame.add(
    dxf.rectangle((cc[0] - w_e / 2, cc[1] - pw_e / 2, 0),
                  ph_e,
                  pw_e,
                  color=am_colour,
                  rotation=0,
                  layer=layer0))  # left square
ame.add(
コード例 #44
0
ファイル: stl2dxf.py プロジェクト: amineyc/cncfc
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')