zoukankan      html  css  js  c++  java
  • python 处理CAD文件

     注意:如下的两个脚本都是我自己亲自试过的,可以运行得到结果!可以直接运行!可以直接运行!

    网上的中文api能找到的不够全,工作中有用到部分功能,自己从中文英文资料里面找到一些,这里做一些总结。

    画图api:这里保存的文件是dxf类型。

    
    
    """
    可以直接运行,前提是你把模块安装好
    ezdxf模块生成dxf文件画线、圆、多边形、填充颜色
    """
    import ezdxf # 画图的基本功能,这个库会比较容易找到api,用起来还比较方便。生成的dxf文件的2000版本
    import uuid
    import os

    save_file_path = r"D:logs"


    def apply_colour():
    """
    写字,填充功能,画圆,画线,画多边形
    :return:
    """
    doc = ezdxf.new('R2000') # ezdxf 这个模块目前能处理的cad文件是2000版本
    msp = doc.modelspace()
    msp.add_text(
    'code change the world',
    dxfattribs={
    'layer': 'TEXTLAYER'
    }).set_pos((0, 0.2), align='CENTER') # 写字

    msp.add_line(
    (153.0, 34.0),
    (173.0, 127.0),
    dxfattribs={'color': 150, 'lineweight': 60}
    ) # 画线 color 数值范围1-255

    # 设置4边形4个点坐标
    rect_points_outer = [(1.0, 1.0), (8.0, 1.0), (8.0, 8.0), (1.0, 8.0)]
    msp.add_lwpolyline(
    rect_points_outer,
    dxfattribs={"closed": True}
    ) # 画多边形。这里画的是4边形,如果需要画多边形,把坐标设置好排列出来即可。

    msp.add_circle(
    (10, 20),
    1.5
    ) # 画圆

    hatch = msp.add_hatch(color=2) # 填充功能,颜色设置的rgb值
    hatch.paths.add_polyline_path(
    [
    (0, 0), (10, 10), (0, 10)
    ],
    is_closed=1,
    flags=16
    ) # 设置3边形,并填充颜色
    hatch.paths.add_polyline_path(
    [
    (0, 0), (0, 5), (5, 5), (5, 0)
    ],
    is_closed=1,
    flags=0
    ) # 设置4边形并填充颜色

    random_str = str(uuid.uuid4()) # 设置随机数命名新文件
    new_file = os.path.join(
    save_file_path, "{}.dxf".format(random_str)
    )
    print(new_file)
    doc.saveas(new_file)


    apply_colour()

    把dxf类型转变成dwg格式:值得注意的是,因为Autocad会调用cad内核,所以,建议在运行脚本之前,先在跟脚本同一电脑上打开cad软件,否则,脚本运行时间过长,或者会阻塞。

    """
    可以直接run,打开一个dxf文件转换成dwg文件
    """
    from pyautocad import Autocad
    import uuid
    import os
    import time
    
    
    def turn_dxf_to_dwg_file(dxf_file_path):
        """
        could open dxf file save as dwg file and after you save you can close 
        the current file
        :param dxf_file_path: 
        :return: 
        """
        # todo not yet apply different color
        acad = Autocad(create_if_not_exists=True)
        # open CAD file
        acad.ActiveDocument.Application.Documents.open(dxf_file_path)
        random_str = str(uuid.uuid4()).replace("-", "")
        dwg_saved_arg = 8  # 这里的参数很重要,在网上找了很多,不是随便的数字都能成功转换的,不信的话,大可一试。
    
        save_path = r"C:UsersAdministratorDesktopdwg-完成"
        if not os.path.exists(save_path):
            os.mkdir(save_path)
            time.sleep(0.2)
        saved_done = os.path.join(save_path, random_str)
        acad.doc.SaveAs(saved_done, dwg_saved_arg)
        print(saved_done)
        # close current file
        # acad.ActiveDocument.Close()
    
    
    pth = r"C:UsersAdministratorDesktopcad-项目相关文件cad-test-files86b9test-turn-dwg-format.dxf"
    turn_dxf_to_dwg_file(pth)

    注意:我自己安装的2007版本的Autocad软件,可以直接打开转换成dwg格式的文件。Autocad软件我也不熟,不知道转换格式后是哪个版本的dwg。 

    备份参数:

    dwt_dwl = [14, 26]  # 这里会生成dwt和dwl两个文件
    dwg_dwl = [8, 12, 24, 14, 26] # 其中:14、26有dwt格式,但是用autoCAD打开,确实是dwg,
    内部有转换可能。
    dxf_ = [1, 13, 25, 37] # 这里是单纯生成一个dxf文件的参数
  • 相关阅读:
    Delphi 的字符及字符串[4] 字符串、字符指针与字符数组
    Delphi 的字符及字符串[5] 字符串与 Windows API
    WinAPI: FindWindow、FindWindowEx 查找窗口
    java LookAndFeel 美化 Substance使用
    持久化和对象关系映射ORM技术
    java 更换皮肤问题Cannot refer to a nonfinal variable inside an inner class defined in a different method
    java Swing可视化开发工具
    php ORM 持久层框架与简单代码实现
    生成Substance皮肤Menu项的代码
    三层架构实现
  • 原文地址:https://www.cnblogs.com/2012-dream/p/14686578.html
Copyright © 2011-2022 走看看