从文件形式上看 cifcommands.dgnlib 是一个 DGN Library,但在 ORD 中,它不是给最终用户用来存放自定义工具的普通 dgnlib,而是ORD Civil Geometry 子系统的“官方命令入口定义库”。
它的职责不是定义算法,而是为 Civil Geometry Command 提供标准化入口,将同一个 Civil Command 以不同工程语义呈现给用户,作为 Ribbon / Task 中 Civil 几何工具的基础来源。
如果从架构上拆分 ORD Civil Geometry,可以分为三层:
① Civil Geometry Command(几何引擎 / 算法)
② 参数模型(Parameter Schema / Rule Graph)
③ 命令入口定义(Command Profiles)
其中:
- ① 和 ② 在程序代码里
- ③ 就主要体现在 cifcommands.dgnlib 中
换句话说:
cifcommands.dgnlib 负责“这个 Command 以什么形式、什么名字、什么语义呈现在软件中”
2. Civil Geometry 的 Command 是“多态的”
以上命令 GEOMETRY FILLET PLACE BETWEENELEMENTS 为例:
从软件角度看,这是一个 Civil Geometry Command。
但从工程设计角度看,“Fillet / 圆弧过渡”这件事,至少可以有多种工程语义:
- 简单相切圆(Simple Fillet)
- 基于半径控制的倒角
- 带缓和曲线的过渡(Spiral Fillet)
- 反向缓和的过渡(Reverse Spiral)
- 不同构造约束下的过渡方式
在 Civil Engineering 中,这些不是 UI 差异,而是设计方法差异。
因此 ORD 从一开始就没有把 Civil Command 设计成“一个命令 = 一个用法”,而是一个命令 + 多种参数路径 + 多种工程语义。
以 Arc / Fillet 类命令为例,其底层能力通常包括:
- 两元素之间的相切解
- 多解(Solution)的求解
- 是否引入 Spiral / Transition
- 是否前后反转
- 不同参数驱动方式(半径、长度、角度等)
这些能力在算法层面高度复用,没有必要拆成多个程序命令。这正是 ORD 将它们统一放在同一个 key‑in 下的原因。
3. 为什么看到的是“多个圆弧命令”?
在 cifcommands.dgnlib 中,每一个在界面中看到的工具(例如):
- Simple Arc To Element
- Spiral Arc To Element
- Reverse Spiral Arc To Element
并不是新的 Command,而是对同一个 Civil Command 的“预定义参数配置版本”。
它们之间的关系是:同一个 key‑in,不同的默认参数组合,不同的参数激活路径, 不同的工程语义。
对于同一个 key‑in,cifcommands.dgnlib 中可以定义:
(1)工具语义
-
- 工具名称(Simple / Spiral / Reverse)
- 图标
- Balloon Text(提示文本)
(2)参数结构差异
- 哪些参数参与工作流
- 哪些参数默认被抑制
- 用户进入命令时被“引导”的参数路径
(3)工程方法的“入口分流”
- 用户一点击工具,就已经站在某一种“设计方法”的起点上
- 而不是面对一个包含所有可能性的“全能命令”
结果就是看起来像“多个命令”,实际上是“一个命令的多种官方预置入口”。
4. 为什么选择这种设计,而不是“一个万能命令”?
这是一个非常典型的 Civil 软件产品级决策。
(1) 工程语义必须清晰
在公路、铁路、市政、水工等领域:
- “Simple Arc”
- “Spiral Arc”
- “Reverse Spiral”
从设计规范角度,就是不同设计类型。
如果只有一个“放圆弧”的命令:
所以软件给出了多个入口,显式区分工程方法。
(2)工作流需要被“引导”,而不是完全自由
Civil Geometry 的正确使用,很大程度依赖顺序和上下文。
通过在 cifcommands.dgnlib 中预置不同的命令配置集:
- 用户进入命令的第一步就被限定在某一类构造方式
- 不需要理解全部参数体系
这是一种工程安全性设计。
(3)统一、可维护、可支持
如果这些不同用法全部由用户自行配置:
- 不同项目、不同公司行为差异极大
- 技术支持几乎无法复现问题
- 升级时极易破坏既有流程
集中在 cifcommands.dgnlib 中提供:
在 OpenRoads Designer 中,cifcommands.dgnlib 的作用并非定义新的 Civil Geometry Command,而是为同一 Command 提供多组官方预定义的工程语义入口,通过不同的参数配置与工作流引导,将复杂的几何引擎映射为清晰、可控的设计方法。