[返回博客](/cn/blog) # ODA Drawings Explorer 菜单和工具栏自定义

Yuri Moskovsky 二月 16, 2023 [\#Example](/cn/blog/tag/example) [\#getting started](/cn/blog/tag/getting-started)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

ODA Drawings Explorer (ODE) 是一个基于 QT 的示例应用程序，用于查看和编辑 ODA 数据库。它集成了对 .dwg 文件的支持，并且可以通过 OdDbDatabasePE 和相应的桥接模块访问其他格式（DGN、PRC 等）的数据库。DGN 和 .dwg 文件支持编辑。该应用程序的源代码位于 Drawing/Examples/Qt/OdaQtApp 目录中。

该应用程序的用户界面基于命令处理。与 Autodesk® AutoCAD® 中一样，菜单和工具栏的加载和卸载是使用 CUILOAD 和 CUIUNLOAD 命令执行的（MENU 命令是 CUILOAD 的同义词）。

您还可以在应用程序的 main() 函数中从资源或文件系统加载 CUI 文件：

```
int main(int argc, char *argv[])
{
  ...
  QString qsMenuProfile = "qrc:/cui/odq_menu_base.cui",
          qsToolbarsProfile = "qrc:/cui/odq_toolbar_base.cui";
  getIConsole()->postponeCommand(QString("menu \"%1\"").arg(qsMenuProfile), 
                                 true, NULL, 100);
  getIConsole()->postponeCommand(QString("cuiload \"%1\"").arg(qsToolbarsProfile),
                                 true, NULL, 100);
  ...
}
```

从 Drawing/Examples/Qt/OdaQtApp/data/data.qrc 文件中指定的资源加载 CUI 文件时，使用“qrc:/”前缀。

ODE 工具栏和菜单文件基于 AutoCAD CUI 用户界面格式。CUI 文件最初是使用 AutoCAD 2009 的自定义用户界面 (CUI) 编辑器创建的。由于更高版本的 AutoCAD 使用 CUIx 格式（这是一个包含一组 CUI 文件的 ZIP 打包目录），因此强烈建议使用您首选的文本编辑器而不是 AutoCAD CUI 编辑器。文件格式基于 XML 且相当简单；所需的更改数量通常很少。

就像在 AutoCAD 中一样，对于菜单项、图标和命令，会通过 DIESEL 评估器执行初步处理。例如，如果 getIConsole()-&gt;evaluateDieselExpression(...); 对于打开的绘图当前状态下的菜单项返回以“~”开头的文本，则相应的菜单项将被禁用（灰色且不可点击）。如果返回空文本，则跳过该菜单项。

ODE diesel 命令会在控制台中检查结果，例如：

```
diesel "$(if,$(or,$(<,$(strlen,$(getvar,filename)),1),$(and,$(eq,$(getvar,tilemode),0),$(eq,$(getvar,cvport),1))),~,)Top"
```

如果没有打开的图形，该命令将返回“~Top”；如果存在已选择模型空间选项卡的打开图形，则返回“Top”。

**注意**：将 DIESEL 命令添加到 CUI 文件时，请转义以下 XML 字符：

| **原始字符** | **转义字符** |
| --- | --- |
| &amp; | &amp;amp; |
| " | &amp;quot; |
| ' | &amp;apos; |
| &lt; | &amp;lt; |
| &gt; | &amp;gt; |

ODE 使用其自己的 OdDieselService 实现来调用 OdDieselEvaluate() — 请参阅 Drawing/Examples/Qt/OdaQtConsole/OdqConsole.cpp 中的 OdqDieselServiceImpl 类。如有必要，您可以通过更改此类中 getSystemVariable() 的实现来扩展 DIESEL 函数集。

有关更多信息，请参阅 [ODA 文档](https://docs.opendesign.com/td/td_sample_qtOdaQtApp_toolbars.html)。

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
