CADファイルの情報は、その後の処理と分析のために作業で解析する必要があるためです。これが私のメソッドの簡単な紹介です。作業上の理由から特定の実装を詳細に説明することはできません。ここではコアコード部分のみを示します。
1.ツールのインストール
- libredwg:dwgファイルの解析に使用されます。特定のインストールチュートリアルについては、私の記事を参照してください:windows10CAD解析ライブラリlibredwgインストールレコード
- dxfgrabber:Pythonでdxfファイルを解析するために使用されます。特定のインストールコマンドは次のとおりです。
pip install dxfgrabber
2、dwgからdxf
ここでは、dwg2dxf.exeを使用する必要があります。これは、前にインストールしたlibredwgフォルダーにあり、pythonを使用してコマンドラインを呼び出してdwgファイルを変換します。なぜここで変形するのですか?dwgはAutoCADの暗号化されたファイルであるため、バージョンごとに解析方法が異なり、dxf形式はオープンソースファイル形式です。現在、pythonを使用して情報を直接解析しています。
commd="dwg2dxf.exe"
# 设置转化工具参数
verbosity = " -v{}".format(verbosity)
versions = " --r{}".format(versions)
outfile = ' -o "{}"'.format(outfile_path)
try:
subprocess.run(
'"' + commd + '"' + verbosity + versions + outfile + " " + '"' + infiles + '"',
timeout=20,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
# rc, out = subprocess.getstatusoutput('"'+commd+'"' + verbosity + versions + outfile +" "+ '"'+infiles+'"')
# print(out)
except:
error_txt.append(infiles)
print("dwg to dxf fail!!!,please check to see if it contains "
"'gbk' char .({})".format('"' + commd + '"' + verbosity + versions + outfile + " " + '"' + infiles + '"'))
3つ目は、Pythonを使用してdxfファイルを解析する
ここではDxfgrabberが使用されており、特定の使用方法はその開発ドキュメントを参照できます。
import dxfgrabber
dxf = dxfgrabber.readfile(file_name)
# 解析dxf文件
# 存储文本
txt=[]
insert_block=[]
for type in dxf.entities:
if type.dxftype == "MTEXT":
# 保存多行文本信息
txt.append(TEXTINFO(type.raw_text,
type.insert[0],type.insert[1],
type.height,type.rect_width,
type.font,type.line_spacing))
elif type.dxftype == "TEXT":
# 保存单行文本信息、
txt.append(TEXTINFO(type.text,
type.insert[0],type.insert[1],
type.height,type.width,
type.font))
elif type.dxftype=="LINE":
print("=======================>")
print("坐标:", type.start,type.end)
elif type.dxftype == "INSERT":
if not type.name in dxf.blocks:
continue
block_info=BLOCKINFO()
blocks=dxf.blocks[type.name]
for entity in blocks:
if entity.dxftype=="TEXT":
block_info.add_text(entity.text,
entity.insert[0], entity.insert[1],
entity.height, entity.width,
entity.font)
elif entity.dxftype == "MTEXT":
block_info.add_text(entity.raw_text,
entity.insert[0], entity.insert[1],
entity.height, entity.rect_width,
entity.font, entity.line_spacing)
elif entity.dxftype=="LINE":
block_info.add_line(entity.start,entity.end)
insert_block.append(block_info)
4、まとめ
この方法では、dwgデータ情報の一部を分析できますが、レイヤ情報を解決できないか、一部の情報が欠落しているため、情報を再構築するときに混乱が生じます。もちろん、この方法にも利点があります。CADに依存せずに直接実行でき、速度は比較的高速です。フォローアップでは、objectARXを使用してCAD情報を解析することも記録します。比較的、この方法は比較的安定しています。結局のところ、AutoCADの低レベルコードを直接使用するため、比較的正確で解析が簡単です。関連する仕事をするときは、友達がObjectARXを優先することをお勧めします。インターネット上にもたくさんの資料があります。