Esempio n. 1
0
def optimum_rotate(filename, seplayer=False):
    print("file : " + filename)
    org_dxf = ezdxf.readfile(filename)
    n = 1
    if seplayer:
        nl = 'L' + chr(ord('A') + n)
        np = 'P' + chr(ord('A') + n)
        rename_layer(org_dxf, '0', nl)
        rename_layer(org_dxf, 'Defpoints', np)
    hmin = 999999999
    bestdxf = None
    bestang = None
    for ang in range(0, 360, 1):
        rdxf = ezdxf.readfile(filename)
        rotate(rdxf, ang)
        s = bbox.extends(rdxf.modelspace()).size
        h = s[1]
        if (h < hmin) and (hmin - h > 1E-5):
            hmin = h
            bestang = ang
            bestdxf = rdxf
            #print("  angle=",ang, " h=", h)
            #print("      s   : ", s)
            #print("      s0  : ", bbox.extends(org_dxf.modelspace()).size)

    if bestdxf is None:
        print("no rotation")
        return org_dxf
    print("rotation ", bestang)
    return bestdxf
Esempio n. 2
0
def merge_dxfs(listname, seplayer=False, shifth=0, shiftv=0):
    n = -1
    tx = 10
    ty = 0
    for filename in listname:
        n = n + 1
        merge_dxf = ezdxf.readfile(filename)
        print("file : " + filename)
        #print("header : ", merge_dxf.header)
        #print("EXTMAX ", merge_dxf.header['$EXTMAX'])
        #print("EXTMIN ", merge_dxf.header['$EXTMIN'])
        #print("LIMMAX ", merge_dxf.header['$LIMMAX'])
        #print("LIMMIN ", merge_dxf.header['$LIMMIN'])

        if seplayer:
            nl = 'L' + chr(ord('A') + n)
            np = 'P' + chr(ord('A') + n)
            rename_layer(merge_dxf, '0', nl)
            rename_layer(merge_dxf, 'Defpoints', np)
        if shifth > 0 or shiftv > 0:
            msp = merge_dxf.modelspace()
            cache = bbox.Cache()
            bounds = bbox.extends(msp, cache)
            minpt = bounds.extmin
            s = bounds.size
            print("bbox : ", bounds)
            print("  min : ", minpt)
            print("  s   : ", s)
            dx = tx - minpt[0]
            dy = ty - minpt[1]
            print("dx = ", dx, " dy = ", dy)

            #translation_x_y(merge_dxf, n*500, n*100)
            translation_x_y(merge_dxf, dx, dy)
            if shifth > 0:
                tx = tx + s[0] + shifth
            if shiftv > 0:
                ty = ty + s[1] + shiftv
        if n > 0:
            merge(merge_dxf, base_dxf)
        else:
            base_dxf = merge_dxf
    return base_dxf
Esempio n. 3
0
        print("no rotation")
        return org_dxf
    print("rotation ", bestang)
    return bestdxf


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument(
        'dxf_file',
        metavar='dxf_file',
        type=str,  #nargs=1,
        help='dxf file to process')
    parser.add_argument("--layers",
                        help="one layer per input file",
                        action="store_true")

    args = parser.parse_args()
    print("file: ", args.dxf_file)

    fn = args.dxf_file
    fbn = basename(fn)
    fxn = os.path.splitext(fbn)[0]
    fout = fxn + '_opt.dxf'
    d = optimum_rotate(args.dxf_file, args.layers)
    print("save to : ", fout)
    msp = d.modelspace()
    s = bbox.extends(msp).size
    print("final size: ", s)
    d.saveas(fout)
Esempio n. 4
0
def test_cache_usage_with_uuids(points1):
    # Entities in VirtualLayouts have no handles:
    cache = bbox.Cache(uuid=True)
    for _ in range(10):
        bbox.extends(points1, cache)
    assert cache.hits == 18
Esempio n. 5
0
def test_extend(points1):
    box = bbox.extends(points1)
    assert box.extmin == (-1, -2, -3)
    assert box.extmax == (4, 5, 6)