ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

NX二次开发常用函数实战:工程图、读取属性与视图操作配 TaoToken 统一 Key 通道

NX二次开发常用函数实战:工程图、读取属性与视图操作配 TaoToken 统一 Key 通道 1. NX 二次开发里最容易被低估的三类函数如果你写过 NX Open 或 UFUN 的插件大概会有这种体会建模相关的函数查文档就能拼出来但一碰到工程图、属性、视图这三块就容易卡在“函数名记得住、参数传不对、结果验证不了”的状态。NX 二次开发常用函数实战这个题目核心其实就落在工程图创建、读取属性、视图操作这三类高频场景上——它们几乎出现在每一个要出图、要写 BOM、要做图纸批处理的插件里。这篇面向的是已经在写 NX 插件、需要把 AI 能力接进工具链的开发者。我会把 UF_ATTR、UF_DRAW、UF_VIEW 这几组函数的落地写法拆开讲同时给出 config.toml 和 settings.json 的可复制骨架把 TaoToken 作为统一的 Key/API 通道接进来。这样你的 NX 插件在读取完部件属性、生成完工程图之后可以直接调用模型做属性补全、图纸说明生成或视图命名规范化而不用在每台机器上散落一堆 Key。先说清楚适合谁能编译 NX Open C/C 或 C# 项目、知道 UF_initialize 和 UF_terminate 怎么配对、手上有一个能跑通的插件工程。如果你还没到这一步建议先把 NX Open 的 Hello World 跑通再回来。2. 读取属性与工程图函数的落地写法2.1 读取部件属性的函数组合读取属性这块最常用的是UF_ATTR_ask_part_attrs和UF_ATTR_read_value。前者拿到部件上所有属性的列表后者按类型和标题精确取值。实际写的时候我一般先用UF_ATTR_ask_part_attribute拿到属性对象的标识再决定是遍历还是直取。// 读取当前工作部件的所有属性 tag_t part UF_ASSEM_ask_work_part(); UF_ATTR_part_attr_p_t attrs NULL; int attr_count 0; UF_ATTR_ask_part_attrs(part, attrs, attr_count); for (int i 0; i attr_count; i) { char title[UF_ATTR_MAX_TITLE_LEN 1] {0}; UF_ATTR_ask_title(attrs[i].attr_id, title); // 按标题过滤你关心的属性 }如果要读一个没打开的部件文件里的属性用UF_ATTR_ask_part_attrs_in_file它不需要你先把部件加载进会话做批量 BOM 提取时很省事。取值的时候注意类型字符串用UF_ATTR_read_value配UF_ATTR_STRING_TYPE数值属性要区分整型和浮点传错类型不会报错但会拿到脏数据。2.2 工程图创建与信息查询新建工程图用UF_DRAW_create_drawing打开用UF_DRAW_open_drawing删除和更名分别是UF_DRAW_delete_drawing和UF_DRAW_rename_drawing。这几个函数的参数里图纸大小、比例、单位、投影角这几项最容易传错因为它们和UF_DRAW_ask_drawing_info返回的结构体字段是一一对应的。// 查询当前工程图页面信息 tag_t drawing UF_DRAW_ask_current_drawing(); UF_DRAW_drawing_info_t info; UF_DRAW_ask_drawing_info(drawing, info); // info.size / info.scale / info.units / info.projection_angleUF_DRAW_ask_drawings能一次拿到当前工作部件里所有工程图页面的标识数组做图纸遍历或批量导出时先调它。设置信息用UF_DRAW_set_drawing_info改比例、改单位都走这里改完记得调一次更新。2.3 视图操作的核心函数视图这块函数最多但真正高频的就那几个。UF_DRAW_ask_views查某张工程图上的视图数量和标识数组UF_DRAW_ask_view_scale拿比例参数化比例还会返回表达式标识UF_DRAW_set_view_scale设比例。视图显示设置用UF_DRAW_ask_view_display和UF_DRAW_set_view_display它们对应的就是交互状态下双击视图弹出的“视图样式”对话框。移动视图用UF_DRAW_move_view跨图纸移动用UF_DRAW_move_view_to_drawing。按名称找视图用UF_VIEW_ask_tag_of_view_name这个在批处理里特别有用因为视图名往往是你自己命名的规则。删除视图用UF_VIEW_delete注意它会返回错误码视图被引用时删不掉要先判断返回值。添加视图的函数按类型分得很细辅助视图UF_DRAW_add_auxiliary_view、局部视图UF_DRAW_add_detail_view、圆形局部视图UF_DRAW_add_circ_detail_view、正交视图UF_DRAW_add_orthographic_view。剖视图这边简单剖UF_DRAW_create_simple_sxview、阶梯剖UF_DRAW_create_stepped_sxview、半剖UF_DRAW_create_create_half_sxview、旋转剖UF_DRAW_create_revolved_sxview、展开剖UF_DRAW_create_unfolded_sxview。中心线和螺栓圆用UF_DRF_create_linear_cline、UF_DRF_create_3pt_cline_fcir这一组。3. TaoToken 统一 Key 通道的前置配置3.1 为什么要在 NX 插件里接统一通道NX 插件调用 AI 的典型场景是读完属性后让模型补全缺失字段、生成图纸说明、或者把视图名规范化。如果每个开发者本地各配一套 Key换机器、换项目就要重新配团队协作时很容易出现“我这能跑你那报 401”的情况。把 TaoToken 作为统一通道好处是 Key 集中管理插件里只读配置不硬编码。TaoToken 的 API 地址是https://taotoken.net/api官网入口在https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end。注意 API 地址不带 UTM 参数配置里直接写这个就行。3.2 config.toml 骨架# config.toml —— NX 插件读取的 AI 通道配置 [ai] provider taotoken base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY # 从环境变量读不写死在文件里 model claude-sonnet-4-20250514 timeout_seconds 60 max_retries 2 [nx] attr_scan_batch 200 drawing_export_dir ./output/drawings view_name_rule VIEW_{index:03d}3.3 settings.json 骨架{ ai: { provider: taotoken, baseUrl: https://taotoken.net/api, apiKeyEnv: TAOTOKEN_API_KEY, model: claude-sonnet-4-20250514, timeoutSeconds: 60 }, nx: { attrScanBatch: 200, drawingExportDir: ./output/drawings, viewNameRule: VIEW_{index:03d} } }Key 的获取在控制台的 API Keys 页面地址是https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite。拿到之后写进环境变量别提交到仓库。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite里面有各语言的调用示例。4. 验证请求与成功结果4.1 先验证通道通不通在把 AI 调用塞进 NX 插件之前先用一个最小请求验证通道。用 curl 打一次模型对话接口curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 回复 OK 两个字母}] }返回里能看到choices[0].message.content就是通的。如果这一步就报 401先查 Key 有没有写对、环境变量有没有生效。模型对话入口在https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite可以在页面上先手动试一次。4.2 在插件里验证属性读取结果属性读取的验证动作很简单读完之后把结果打到日志和 NX 交互界面里“文件-属性”看到的值对一遍。重点核对三类字符串属性有没有截断、数值属性类型对不对、多值属性有没有漏读。我一般会写一个临时的 dump 函数把UF_ATTR_ask_part_attrs拿到的每个属性的标题和值都打出来。4.3 验证工程图与视图操作工程图创建后用UF_DRAW_ask_drawings确认新图纸在列表里再用UF_DRAW_ask_drawing_info核对大小、比例、单位、投影角是不是你设的值。视图操作后用UF_DRAW_ask_views确认视图数量变化用UF_DRAW_ask_view_scale确认比例生效。移动视图后用UF_DRAW_ask_view_borders拿边界信息确认位置变了。5. 本篇常见报错排查5.1 属性读取返回空或脏数据最常见的原因是类型不匹配。UF_ATTR_read_value的第三个参数是类型字符串、整型、浮点必须对上。另一个原因是属性在部件上不存在但函数不报错只返回空所以读之前最好先用UF_ATTR_ask_part_attrs确认属性存在。如果读的是未打开文件确认用的是UF_ATTR_ask_part_attrs_in_file而不是会话内的函数。5.2 工程图函数返回错误码UF_DRAW_create_drawing失败通常是图纸大小或单位参数不合法检查你传的值是不是在 NX 支持的枚举范围内。UF_DRAW_set_drawing_info改比例时如果图纸上有视图已经引用了旧比例可能改不动要先处理视图。UF_VIEW_delete返回错误码说明视图被引用先解除引用再删。5.3 AI 调用报 401 或超时401 基本是 Key 问题环境变量没生效、Key 复制时带了空格、或者用了错误的 base_url。超时的话先看timeout_seconds设了多少NX 插件里同步调用 AI 会阻塞 UI建议放到后台线程。如果返回 429说明触发了限流把max_retries调大并加退避。5.4 视图比例设置不生效UF_DRAW_set_view_scale设的是指定值但如果视图比例是参数化的直接设值可能被表达式覆盖。先用UF_DRAW_ask_view_scale看返回的表达式标识是不是 NULL_TAG不是的话要改表达式而不是直接设比例。6. 把 AI 能力接进 NX 工具链的下一步属性读取、工程图创建、视图操作这三类函数跑通之后你的 NX 插件就有了“读数据、出图纸、调视图”的基础能力。接下来把 TaoToken 接进来就能在这些环节上叠加 AI读完属性让模型补全缺失字段生成工程图后让模型写图纸说明视图批量创建后让模型按规则重命名。长期做编码和 Agent 类工具的话可以看 Coding Plan地址是https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite适合需要稳定调用、批量任务的场景。接入细节和参数说明在接入文档里地址是https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite。Key 在 API Keys 页面管理地址是https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite。实际写的时候有个小技巧把 AI 调用封装成一个独立的AiClient类NX 插件里只调AiClient::complete(prompt)这样换模型、换通道、加重试都只改一个地方。属性读取和视图操作的函数调用保持纯 UFUN不要和 AI 逻辑混在一起方便单独测试。
返回列表