山东平台网站建设推荐,简历模板个人简历电子版免费表格,郴州百姓网,家谱网站源码下载在建筑和工程办公室中#xff0c;最重复且容易出错的任务之一是标准化 AutoCAD 图纸。每个顾问和分包商都使用自己的命名图层的约定。结构顾问可能使用 SLAB_GF#xff0c;而另一个可能使用 FLOOR_1。在团队能够生成数量、协调模型或提取有意义的数据之前#xff0c;所有图层…在建筑和工程办公室中最重复且容易出错的任务之一是标准化 AutoCAD 图纸。每个顾问和分包商都使用自己的命名图层的约定。结构顾问可能使用SLAB_GF而另一个可能使用FLOOR_1。在团队能够生成数量、协调模型或提取有意义的数据之前所有图层必须组织成一组一致的类别。手动执行此操作既耗时又有错误风险。更好的方法是结合自动化和人工智能。1、方法我构建的工作流使用 Python 和 AI 模型来自动化图层标准化的第一遍同时仍然让工程师控制审查和调整映射。主要步骤是使用ezdxf库从 DXF 文件中提取所有图层。询问 AI 模型本地使用 Ollama 服务提出标准化的工程类别。这些类别不限于固定列表 —— 它们会根据图纸进行调整。询问 AI 将每个图层分类为类别之一。向用户显示 GUI显示所有图层、建议的映射和用于覆盖的下拉菜单。下拉菜单始终包含一组预期的基准类别COLUMNS、WALLS、SLABS、BEAMS、STAIRS、FOOTINGS、OTHER因此即使用户错过了 AI用户也可以重新分配图层。保存一个新的 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, timeout120) - str: payload {model: OLLAMA_MODEL, prompt: prompt, stream: False} try: r requests.post(OLLAMA_URL, jsonpayload, timeouttimeout) 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 fHere 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 ( fClassify 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, orientvertical, commandcanvas.yview) canvas.configure(yscrollcommandscrollbar.set) scrollbar.pack(sideright, filly) canvas.pack(sideleft, fillboth, expandTrue) canvas.create_window((0,0), windowframe, anchornw) def on_frame_configure(event): canvas.configure(scrollregioncanvas.bbox(all)) frame.bind(Configure, on_frame_configure) for i, layer in enumerate(layer_names): tk.Label(frame, textlayer).grid(rowi, column0, stickyw, padx5, pady2) cb ttk.Combobox(frame, valuescategories, statereadonly, width20) cb.set(suggestions[layer]) cb.grid(rowi, column1, padx5, pady2) 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, textConfirm, commandsave_and_exit).grid( rowlen(layer_names)1, column0, columnspan2, pady10) 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(fFound {len(layers)} layers) categories suggest_categories(layers) print(fCategories 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(namecat) 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(fNormalized 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 图层标准化 - 汇智网