带有多个设计模块的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)) {
...
评论