← 返回首页

如何读写设置内容

带有多个设计模块的CATIA软件,内部设置错综复杂,有时候开发者需要读写软件的设置,就需要了解CATIA软件设置文件夹保存位置和其中都有什么内容。或者需要存储自带插件的配置选项,除了保存成ini等配置文件外,还可以通过自建CATIA原生设置文件的方式达到和CATIA配置同步的效果。下面就是有关CATIA设置(CATSettings)的介绍。

设置文件存放位置

通过环境变量文件里面的CATUserSettingPath,可以获取到当前软件设置存放的地址,通常存放在C:\Users(你的电脑登录用户名)\AppData\Roaming\DassaultSystemes\CATSettings,v5在不修改默认环境变量的情况下共用一份设置文件,v6会按照版本进行文件夹区分。

图片

获取设置的内容

CATIA的设置文件CATSetting通常无法用文本文件等明文的方式读取,但通过CATIA软件下的CATBatGenXMLSet.exe命令,可以获取其中内容以xml文件的形式保存。具体使用方式如图所示:

图片

需要传xml文件保存位置和读取的setting文件,就可以输出一个xml文件,内容样例如下:

图片

获取设置存储库的句柄

设置存储库通过其名称访问。参考设置引用获取这些名称。使用 CATSysSettingRepository 的静态方法 GetRepository 。

CATSysSettingRepository * pSettingRepCtrl = NULL;

将设置库保存到内存区域

使用方法 Commit 将设置库的当前状态保存到内存区域。然后,您可以使用方法 Rollback 根据请求恢复此状态。

...
HRESULT RC = E_FAIL;
RC = pSettingRepCtrl->Commit();                // Save
...

通常情况下,应该不使用 Commit 方法,除非是在专门用于设置管理的 C++ 应用程序中。

从内存区域恢复设置库

使用方法 Rollback 将通过方法 Commit 保存的设置存储库的先前状态从内存区域恢复。

...
RC = pSettingRepCtrl->Rollback();              // Restore
...

通常情况下不应该使用方法Rollback ,除非是在实现 CATIUserSettings的CancelModification 方法中,用于工具菜单的选项命令中的属性页,或者在专门用于设置管理的 C++ 应用程序中。

将设置属性重置为默认值或管理员值

使用方法ResetToAdminValues 将设置存储库的所有设置属性值恢复为 XML 设置文件中设置的默认值,如果其中一些或全部属性被管理员更改过,则恢复为这些更改后的值。

...
RC = pSettingRepCtrl->ResetToAdminValues(NULL, 0);   // Reset
...

将设置库保存到磁盘文件

使用SaveRepository 方法将设置库的当前状态写入磁盘文件。 Saverepository 调用 Commit 方法。

...
RC = pSettingRepCtrl->SaveRepository();
...

设置库保存之前存在的话,文件名是库名后缀 CATSettings ,这里 CAASampleSettingRep.CATSettings 。

如果文件不存在,则会在使用 CATUserSettingPath 环境变量声明的第一个文件夹中创建该文件。

遍历设置库

方法 NextAttribute 会扫描设置库,以获取每个设置属性的名称、类型、尺寸。

...
HRESULT RC = E_FAIL;
char * cSettingAttributeName = "";
char * cSettingAttributeType = "";
CATLONG32 AttributeSize = 0;
short startFromBeginning = 1; // Start scanning from the first setting attribute
RC = pSettingRepCtrl->NextAttribute(cSettingAttributeName,
                                    cSettingAttributeType,
                                    &AttributeSize,
                                    startFromBeginning); 
while (SUCCEEDED(RC)) {
  cout << cSettingAttributeName 
       << " is an attribute of type " <<
       << SettingAttributeType <<
       << " and has the size " <<
       << AttributeSize << endl;
  startFromBeginning = 0; // Scan scanning at the current location
  RC = pSettingRepCtrl->NextAttribute(cSettingAttributeName,
                                      cSettingAttributeType,
                                      &AttributeSize,
                                      startFromBeginning);
}
...

创建或读取简单的设置属性

按照以下方式使用方法 WriteAttr :

...
const char * pcSettingAttName = "LengthSetting"; 
int length = 0;
if (NULL != pSettingRepCtrl) { 
  CATLONG32 RC = 0;
  RC = pSettingRepCtrl->WriteAttr(pcSettingAttName, &length);      // write a setting attribute
  if (RC > 0) {             // LengthSetting value successfully saved
  ...

创建或读取复杂设置属性

以一个具有三个值的整数枚举设置属性为例,比如颜色。使用方法 ReadAttr 如下:

...
const char * pcSettingAttName = "BackgroundColor";
int * rgb[] = {255, 255, 255};
if (NULL != pSettingRepCtrl) { 
  CATLONG32 RC = 0;
  RC = pSettingRepCtrl->ReadAttr(pcSettingAttName, rgb);         // read the setting attribute
  if (RC > 0) {             // BackgroundColor value successfully retrieved
  ...

写入复杂设置属性

...
const char * pcSettingAttName = "BackgroundColor";
int * rgb[] = {0, 0, 255};
if (NULL != pSettingRepCtrl) { 
  CATLONG32 RC = 0;
  RC = pSettingRepCtrl->WriteAttr(pcSettingAttName, rgb);      // write a setting attribute
  if (RC > 0) {             // BackgroundColorvalue successfully saved
  ...

WriteAttr 将长度变量的当前值保存为 LengthSetting 设置属性的当前值。如果此设置属性不存在,则创建该属性并分配长度变量的值。此值也作为其默认值存储。

锁定设置属性

...
HRESULT RC = E_FAIL;
const char * pcSettingAttName = "TheNameOfTheSettingAttributeToLock";
RC = pSettingRepCtrl->Lock(pcSettingAttName );
if (SUCCEEDED(RC)) {
  ...

解锁设置属性

...
HRESULT RC = E_FAIL;
const char * pcSettingAttName = "TheNameOfTheSettingAttributeToUnlock";
RC = pSettingRepCtrl->Unlock(pcSettingAttName );
if (SUCCEEDED(RC)) {
  ...

评论