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文件的参数
原文地址:https://www.cnblogs.com/2012-dream/p/14686578.html