当前位置: 首页 > news >正文

用AI自动标准化CAD 图层标准化

在建筑和工程办公室中,最重复且容易出错的任务之一是标准化 AutoCAD 图纸。每个顾问和分包商都使用自己的命名图层的约定。结构顾问可能使用SLAB_GF,而另一个可能使用FLOOR_1。在团队能够生成数量、协调模型或提取有意义的数据之前,所有图层必须组织成一组一致的类别。

手动执行此操作既耗时又有错误风险。更好的方法是结合自动化和人工智能。

1、方法

我构建的工作流使用 Python 和 AI 模型来自动化图层标准化的第一遍,同时仍然让工程师控制审查和调整映射。主要步骤是:

  1. 使用ezdxf库从 DXF 文件中提取所有图层。
  2. 询问 AI 模型(本地使用 Ollama 服务)提出标准化的工程类别。这些类别不限于固定列表 —— 它们会根据图纸进行调整。
  3. 询问 AI 将每个图层分类为类别之一。
  4. 向用户显示 GUI,显示所有图层、建议的映射和用于覆盖的下拉菜单。下拉菜单始终包含一组预期的基准类别(COLUMNS、WALLS、SLABS、BEAMS、STAIRS、FOOTINGS、OTHER),因此即使用户错过了 AI,用户也可以重新分配图层。
  5. 保存一个新的 DXF 文件,其中图层已标准化并使用颜色编码:
  • OTHER 始终为灰色。
  • 常见类别被分配有意义的颜色(例如,COLUMNS = 红色,WALLS = 绿色)。
  • 任何新的 AI 建议的类别都会自动获得独特的颜色。

2、Python 脚本

以下是完整脚本(normalize_ai_ollama_gui_open.py)。它连接到 Ollama 的本地 API,生成建议,显示 GUI 供审查,并保存标准化的 DXF。

import ezdxf import requests import tkinter as tk from tkinter import ttk import sys OLLAMA_URL = "http://localhost:11434/api/generate" OLLAMA_MODEL = "llama3.2" DEFAULT_CATEGORIES = ["COLUMNS", "WALLS", "BEAMS", "SLABS", "STAIRS", "FOOTINGS", "OTHER"] CATEGORY_COLORS = { "OTHER": 8, # gray "COLUMNS": 1, # red "WALLS": 3, # green "BEAMS": 5, # blue "SLABS": 6, # magenta "STAIRS": 2, # yellow "FOOTINGS": 4, # cyan } def ask_ollama(prompt: str, timeout=120) -> str: payload = {"model": OLLAMA_MODEL, "prompt": prompt, "stream": False} try: r = requests.post(OLLAMA_URL, json=payload, timeout=timeout) r.raise_for_status() return r.json().get("response", "").strip() except: return "" def suggest_categories(layers): prompt = ( "You are a civil/structural engineer working with AutoCAD drawings.\n" f"Here are the layer names: {', '.join(layers)}.\n\n" "Suggest a concise list of normalized categories that best describe these layers. " "Return only a comma-separated list of categories." ) raw = ask_ollama(prompt) ai_cats = [c.strip().upper() for c in raw.split(",") if c.strip()] return sorted(set(ai_cats) | set(DEFAULT_CATEGORIES)) def classify_layer(layer_name, categories): prompt = ( f"Classify the CAD layer '{layer_name}' into one of these categories: {', '.join(categories)}. " "Answer with only the category." ) raw = ask_ollama(prompt).upper() for c in categories: if c in raw: return c return "OTHER" def build_gui(layer_names, suggestions, categories): root = tk.Tk() root.title("DXF Layer Normalizer") mapping = {} canvas = tk.Canvas(root) frame = tk.Frame(canvas) scrollbar = tk.Scrollbar(root, orient="vertical", command=canvas.yview) canvas.configure(yscrollcommand=scrollbar.set) scrollbar.pack(side="right", fill="y") canvas.pack(side="left", fill="both", expand=True) canvas.create_window((0,0), window=frame, anchor="nw") def on_frame_configure(event): canvas.configure(scrollregion=canvas.bbox("all")) frame.bind("<Configure>", on_frame_configure) for i, layer in enumerate(layer_names): tk.Label(frame, text=layer).grid(row=i, column=0, sticky="w", padx=5, pady=2) cb = ttk.Combobox(frame, values=categories, state="readonly", width=20) cb.set(suggestions[layer]) cb.grid(row=i, column=1, padx=5, pady=2) mapping[layer] = cb result = {} def save_and_exit(): nonlocal result result = {layer: cb.get() for layer, cb in mapping.items()} root.destroy() tk.Button(frame, text="Confirm", command=save_and_exit).grid( row=len(layer_names)+1, column=0, columnspan=2, pady=10) root.mainloop() return result def assign_colors(categories): used_colors = set(CATEGORY_COLORS.values()) next_color = 1 color_map = {} for cat in categories: if cat in CATEGORY_COLORS: color_map[cat] = CATEGORY_COLORS[cat] else: while next_color in used_colors and next_color <= 255: next_color += 1 if next_color > 255: next_color = 7 color_map[cat] = next_color used_colors.add(next_color) return color_map def normalize_drawing(input_file, output_file): doc = ezdxf.readfile(input_file) msp = doc.modelspace() layers = sorted({e.dxf.layer for e in msp}) print(f"Found {len(layers)} layers") categories = suggest_categories(layers) print(f"Categories available: {categories}") suggestions = {layer: classify_layer(layer, categories) for layer in layers} print("AI suggestions:") for orig, cat in suggestions.items(): print(f" {orig} -> {cat}") final_mapping = build_gui(layers, suggestions, categories) print("Final mapping confirmed:", final_mapping) color_map = assign_colors(categories) print("Assigned colors:", color_map) for cat in categories: if cat not in doc.layers: layer = doc.layers.new(name=cat) else: layer = doc.layers.get(cat) layer.color = color_map[cat] for e in msp: orig = e.dxf.layer new = final_mapping.get(orig, "OTHER") e.dxf.layer = new e.dxf.color = 256 doc.saveas(output_file) print(f"Normalized drawing saved as {output_file}") if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python normalize_ai_ollama_gui_open.py input.dxf output.dxf") sys.exit(1) normalize_drawing(sys.argv[1], sys.argv[2])

3、实践中的工作流

  • 使用输入 DXF 运行脚本并指定输出 DXF。
  • AI 提出类别(例如,SLABS、WALLS、BEAMS、ELECTRICAL、HVAC)。
  • 每个图层被分配给这些类别之一。
  • GUI 显示所有图层及其建议的映射。下拉菜单包括 AI 建议的类别和默认预期类别,因此用户可以轻松地重新分配。
  • 确认后,生成一个新的 DXF,其中包含标准化的图层和一致的颜色。

4、结束语

此工作流程简化了准备图纸中的一个痛苦但必要的步骤。工程师可以节省时间、避免错误,并且可以更快地转移到下游任务,如数量提取、协调和文档。AI 加速分类,同时 GUI 确保人类专业知识仍然在循环中。


原文链接:用AI自动标准化CAD 图层标准化 - 汇智网

http://www.jsqmd.com/news/410599/

相关文章:

  • 如何通过GitHub中文化工具实现高效开发:4个核心维度解析
  • springboot120-基于Java的竞赛管理系统(编号:87075263)
  • 【超详细】Python FastAPI 入门:写给新手的“保姆级”教程
  • FastAPI:Python 高性能 Web 框架的优雅之选
  • Luogu P1463 [POI 2001 R1 / ZJOI2006 / HAOI2007] 反素数 题解
  • springboot119-基于Java的教务管理系统(编号:62528147)
  • 解放《空洞骑士》模组管理:Lumafly的跨平台革命
  • 颠覆式刷题体验:5大维度重构算法训练路径,10万+用户验证效率提升40%
  • Solutions - NOISG 2016
  • 照着用就行:自考必备降AI率软件,千笔 VS 锐智 AI
  • D证——科目三(自用)
  • Ollama视觉模型实测
  • 3个突破限制的资源获取功能:开发者的跨平台模组管理方案
  • 2026年全性能安全门窗十大品牌推荐筑牢居家安全防线 - 资讯焦点
  • 分析水空调地暖安装方案怎么选,杭州德能给出专业解答 - myqiye
  • Python从0到100完整学习指南(必看导航)
  • 3个免费用Claude Code的方法
  • 主流GEO优化系统技术对比评测
  • 2026男性抗衰保健品深度评测:高活(GoHealth)如何以科学矩阵重塑细胞活力 - 资讯焦点
  • 强烈安利10个AI论文平台!MBA毕业论文+开题报告高效写作指南
  • 继《小爱音响》详细说下怎么部署,尤其是关于Docker部分
  • 三月七小助手:游戏辅助工具如何重构玩家的智能任务体验
  • 3大核心功能解决中文文献管理难题:Zotero茉莉花插件终极指南
  • 3个革命性技巧:Jasminum让学术研究者效率提升87%
  • 碧蓝航线自动化革新解决方案:智能任务调度与多维度游戏管理
  • tts-vue离线语音包配置与优化指南:从需求到迭代的全流程实践
  • 吉时利2420 2450 2470 2460 2410数字源表
  • A-Frame与WebXR:构建丰富的VR及AR体验
  • 系统巡检:企业规范设备升级、路由配置与配置管理流程
  • 突破语言屏障:GitHub全界面中文化方案深度测评