READMESource: main@8619250a
dsh-ug-viewer
在 DSH (DeepSeek Harness) 里预览 UG/NX 模型、点选几何、看特征树,还能就着选中的面、边、特征直接问 AI。
Preview UG/NX models inside DSH — orbit, pick faces and features, and ask an AI about what you selected.
不是把模型截图贴进来——是真的能转、能点、能问。
功能
模型预览
- STL / OBJ:直接拖进来就能转(中键旋转、滚轮缩放、左键平移)
- PRT 直接预览:不导出 STL,后台调 NX 把实体三角化后直接渲染
- 只有草图的 PRT:画出草图线框(圆弧离散成折线)
几何选择
| 能选什么 | 怎么选 | 反馈 |
|---|---|---|
| 面 | 点面中间 | 整面蓝 |
| 边 | 点面边界 6px 内 | 整条边红 |
| 特征 | 左栏特征树点一行 | 该特征关联的体蓝 |
| 草图曲线 | 线框模式下点线 | 整条曲线红 |
| 草图点 | 点小十字 | 浮层「点 #N」 |
| 曲线交点 | 点交叉处 | 浮层「交点 #N」 |
| 草图约束 | 特征树展开草图 | 浮层「约束 · 重合」 |
全部支持多选:点一下加、再点取消、点空白清空。
特征分析
- 左侧常驻特征树(可折叠),打开 PRT 自动加载
- 显示特征类型、参数表达式、父子依赖
- 草图可展开看 22~44 个约束(重合、相切、半径、角度…)
就地问答
视口下方有一条「问七音」对话栏,直接调 Host 的 llm 服务:
- 选中几何 → 输入问题 → 回车
- 自动把选中的面/边/特征/约束/曲线/点/交点拼进上下文
- 流式返回,一条消息都不用切走
界面
- 三栏布局:目录 | 特征树 | 视口
- 目录和特征树都能折叠(工具栏左侧
☰/▤) - 视图预设(等轴/前/上/右)、线框、自动旋转、截图、重置
安装
前置
- DSH(Web GUI)
- NX 12+(只有 PRT 预览和特征分析需要;STL/OBJ 不需要)
NX 12 内嵌 Python 3.6,插件通过
run_journal.exe调 NX Open。
步骤
# 1. 克隆到任意目录
git clone https://github.com/QIKO0721/dsh-ug-viewer.git
cd dsh-ug-viewer
# 2. 装进 DSH(任选一种)
dsh plugin --profile web add link:$(pwd)
# 或
plugin_manager { action: install_bundle, target: "<绝对路径>" }
装完刷新页面,侧边栏会出现「UG 模型预览」。
配置
编辑 cordis.patch.yml,把路径改成你自己的:
config:
roots:
- 'D:\models' # 模型目录(可写多个)
maxFileBytes: 100663296 # 单文件上限(96 MB)
maxDepth: 3 # 递归深度
maxModels: 400 # 列表上限
runJournalExe: 'D:\UG\NXBIN\run_journal.exe' # NX journal 运行器
analyzeTimeoutMs: 180000 # 分析超时
也可以在面板里点「选目录」运行时切换(会记到 ~/.dsh/dsh-ug-viewer.json)。
技术原理
PRT 三角化(按面)
NX Open 没有直接导 STL 的 Part 方法,得用:
creator = session.DexManager.CreateStlCreator()
creator.ExportSelectionBlock.SetArray([face]) # 单个面
creator.Commit()
每个面单独导出一次(~0.008 s/面),Host 合并时记下 faceID + 类型 + 面积 + 法线 + 包围盒。
点选
- 面:屏幕空间三角形内测试,取最近的
- 边:点到边界线段的屏幕距离(6px 内优先)
- 曲线/点/交点:线框模式下的线段/点距离检测
特征
feature.GetExpressions() # 参数表达式(直径、长度…)
feature.GetBodies() # 关联的体(实体特征才有)
feature.GetChildren() # 父子依赖
sketch.Sketch.GetAllConstraintsOfType(ConstraintClass.Any, type) # 约束
问答
ctx.llm.stream({ provider, model, messages }) // 不经过 session
已知限制
| 限制 | 原因 |
|---|---|
| 特征不能精确高亮到面 | NX 外部 API 不暴露 feature→face 映射(GetEntities() 只返回曲线/基准) |
| 特征高亮会"过量" | 一个体可能由多个特征生成,只能整体高亮 |
| 无实体零件不能点面 | 只有曲线,没有 B-rep 面 |
| 面板对话不持久 | 不进 session 日志,刷新即失忆 |
NXOpen.UF 不可用 |
这个 NX 12 没带 UF 模块,只能走 NXOpen |
目录结构
dsh-ug-viewer/
├── index.js # Host:路由、journal 调度、缓存
├── client.js # Client:WebGL 视口、点选、特征树、对话
├── cordis.patch.yml # 插件配置
├── locale/ # 中英文案
├── icon.svg
├── screenshots/
└── test/ # 独立测试脚本
测试
cd dsh-ug-viewer
node test/geometry-once.mjs # 测 PRT 几何导出
node test/chat-once.mjs # 测面板对话接口
(需要 DSH 正在运行,插件已安装。)
License
MIT
No comments yet. Be the first to write one.