You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python实现.dxf转.json?含Blender读取dxf点坐标需求

Blender内Python读取DXF文件多段线点坐标方案

方案1:纯Python实现(无需Node.js环境)

直接用ezdxf库即可在Blender自带的Python环境中完成DXF解析,不需要引入Node工具链,操作步骤如下:

  • 先给Blender的Python环境安装依赖库
    找到Blender安装目录下对应版本的python可执行文件路径,运行安装命令:
    path/to/blender/3.x/python/bin/python -m pip install ezdxf
    便携版Blender直接进入对应版本号文件夹下的python/bin目录执行命令即可
  • Blender内运行解析脚本示例:
import bpy
import ezdxf

# 替换为你的dxf文件本地路径
DXF_PATH = "/path/to/your/file.dxf"

# 读取DXF文件
doc = ezdxf.readfile(DXF_PATH)
msp = doc.modelspace()

# 存储所有多段线拐点坐标的列表,无需点的专属名称即可按索引调用
polyline_points = []

# 遍历所有2D多段线实体
for polyline in msp.query("LWPOLYLINE POLYLINE"):
    # 读取每个拐点的x/y坐标(2D实体可直接忽略z值)
    for point in polyline.vertices():
        polyline_points.append( (point.x, point.y) )

# 测试输出前10个点验证解析结果
print(polyline_points[:10])
  • 后续测量点间距可以直接通过坐标计算:distance = ((x1-x2)**2 + (y1-y2)**2)**0.5,即可得到任意两个点的直线距离。

方案2:Python调用Node.js转JSON后读取

如果你已经熟悉dxf-parser的输出结构,也可以用Python调用Node脚本完成转换后再读取数据,操作步骤如下:

  • 先全局安装dxf-parser依赖:
    npm install -g dxf-parser
  • 编写Node转换脚本dxf2json.js,内容如下:
const fs = require('fs');
const DxfParser = require('dxf-parser');

const dxfPath = process.argv[2];
const outputPath = process.argv[3];

const parser = new DxfParser();
const dxfContent = fs.readFileSync(dxfPath, 'utf8');
const parsed = parser.parseSync(dxfContent);

fs.writeFileSync(outputPath, JSON.stringify(parsed, null, 2));
  • 在Blender的Python脚本中调用Node脚本完成转换、读取坐标:
import subprocess
import json
import os

DXF_PATH = "/path/to/your/file.dxf"
OUT_JSON_PATH = "/tmp/parsed_dxf.json"
NODE_SCRIPT_PATH = "/path/to/dxf2json.js"

# 调用Node执行DXF转JSON
subprocess.run(
    ["node", NODE_SCRIPT_PATH, DXF_PATH, OUT_JSON_PATH],
    check=True,
    capture_output=True
)

# 读取转换后的JSON文件
with open(OUT_JSON_PATH, "r", encoding="utf-8") as f:
    dxf_data = json.load(f)

polyline_points = []
# 遍历实体列表提取多段线拐点
for entity in dxf_data["entities"]:
    if entity["type"] in ["LWPOLYLINE", "POLYLINE"]:
        for vertex in entity["vertices"]:
            polyline_points.append( (vertex["x"], vertex["y"]) )

print(polyline_points[:10])
# 处理完成后可删除临时JSON文件
os.remove(OUT_JSON_PATH)

内容的提问来源于stack exchange,提问作者MONIKA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:27:03