摘要
本用例学习目标
CAACafEditTextureProp 用例
-
CAACafEditTextureProp 功能说明
-
运行 CAACafEditTextureProp 方法
-
CAACafEditTextureProp 代码存放路径
操作步骤
简要概述
参考资料
本用例学习要点
CAACafEditTextureProp 命令用例
CAACafEditTextureProp 命令功能说明
在属性页创建时,会从对象中读取这两项属性的数值。对话框效果如下所示:

如何运行 CAACafEditTextureProp
mkCreateRuntimeView 命令。# 取消下面两行的注释,即可在属性对话框中显示自定义属性页
# CAACafTexturePropertyPageEdt CATIEditProperties libCAACafEditTextureProp
# CAACafColorPropertyPageEdt CATIEditProperties libCAACafEditColorProp
CAACafEditColorProp 用例创建,此用例位于 CAACafEditColorProp.m 模块中。mkrun 命令的终端窗口中,不要在命令行输入模块名,而是输入 CNEXT。应用程序启动就绪后,请按以下步骤操作:
- 选择 文件 (File) → 新建 (New)
- 在新建对话框中选择 CAAGeometry,点击 确定 (OK)
- 使用基本图元 (Basic Elements) 工具栏命令,至少创建三个点、由这三个点生成一个平面,并在该平面内创建一个圆
- 右键单击圆,在弹出的右键菜单中选择 属性 (Properties)
CAACafEditTextureProp 代码所在位置
Windows 系统:安装根目录 \CAACATIAApplicationFrm.edu\CAACafEditTextureProp.m\
Unix 系统:安装根目录 / CAACATIAApplicationFrm.edu/CAACafEditTextureProp.m/
- CAACafTexturePropertyPageEdt:属性页编辑类
- CAACafTexturePropertyPageEdtFactory:属性页编辑类的工厂类
- CAAICafTexturePropertyPageEdtFactory:由 CAACafElementPropertyPageEdtFactory 实现的工厂接口
- TIE_CAAICafTexturePropertyPageEdtFactory:工厂接口的 TIE 派生类
- CAACafTexturePropertyPageDlg:属性页编辑器关联的对话框类
分步实现
- 创建属性页编辑器工厂接口
- 创建属性页编辑器工厂类
- 创建属性页编辑器
- 创建属性页对话框
创建属性页编辑器工厂接口
- 头文件
- 源文件
- TIE 资源定义文件(tsrc 文件)
-
头文件
头文件 CAAICafTexturePropertyPageEdtFactory.h 内容如下:
#include <CATIGenericFactory.h>extern IID IID_CAAICafTexturePropertyPageEdtFactory;class CAAICafTexturePropertyPageEdtFactory : public CATIGenericFactory
{CATDeclareInterface;public :
};
工厂接口本质是一个接口,即继承自 CATIGenericFactory 的抽象类。和所有接口一样,它拥有一个以 IID_ 加接口名命名的 IID 全局唯一标识符,同时包含 CATDeclareInterface 宏,用于声明该抽象类为 CAA 标准接口。此处无需额外定义方法,只需继承 CATIGenericFactory 的现有方法即可。切记必须添加 public关键字,这是 TIE 编译器的强制要求。
源文件
#include "CAAICafTexturePropertyPageEdtFactory.h"IID IID_CAAICafTexturePropertyPageEdtFactory = { 0x0cf4c1bc,0xd409,0x11d3,{0xb7, 0xf5, 0x00, 0x08, 0xc7, 0x4f, 0xe8, 0xdd}};CATImplementInterface(CAAICafTexturePropertyPageEdtFactory, CATIGenericFactory);
该文件定义了一个 GUID(全局唯一标识符),如加粗部分所示。头文件中的 CATDeclareInterface 宏与源文件中的 CATImplementInterface 宏配合,将这个 C++ 类定义为一个标准的 CAA 接口。CATImplementInterface 的第二个参数表示:CAAICafTexturePropertyPageEdtFactory 从 CATIGenericFactory 进行对象模型(OM)继承。
TIE 文件
#include "CAAICafTexturePropertyPageEdtFactory.h"
构建工具 mkmk 会自动为该接口生成 TIE 类,并在 ProtectedGenerated 目录下生成对应的 TIE_CAAICafTexturePropertyPageEdtFactory.h 文件。
创建属性页编辑器工厂类
这些宏会自动生成一个类,其命名规则为:属性页编辑器类名 + Factory。这也是头文件命名为 CAACafTexturePropertyPageEdtFactory.h、源文件命名为 CAACafTexturePropertyPageEdtFactory.cpp 的原因。
- 创建头文件,使用
CAT_EDITOR_DECLARE_FACTORY宏 - 创建源文件,使用
CAT_EDITOR_DEFINE_FACTORY宏 - 更新接口字典和工厂字典
- 头文件:CAACafTexturePropertyPageEdtFactory.h文件内容如下:
#include <CATEditorFactory.h> #include <CAACafTexturePropertyPageEdt.h>#define ExportedByNOTHINGCAT_EDITOR_DECLARE_FACTORY(NOTHING, CAACafTexturePropertyPageEdt, CAACafTexturePropertyPageEdt);本例中,所有填写 NOTHING 的位置必须保持字符串一致,这一点非常重要。即便设置合法有效的库名也没有意义,因为所创建的类是 CATEditorManager 的扩展类;当 CATEditorManager 请求ExportedByNOTHING表示为该类指定一个不存在的共享库或 DLL。CAAICafTexturePropertyPageEdtFactory接口时,会自动完成该工厂类的实例化。这种场景下,框架会通过接口字典自动检索匹配对应的共享库或 DLL。宏的第二个参数为属性页编辑器类名,框架会在此类名后拼接Factory,自动生成对应的工厂类名称。第三个参数是待实例化类的类型标识,可通过CATIGenericFactory::Support方法获取。本示例中该参数并未实际使用,但语法上必须赋值,因此同样填写待实例化的类名即可。 -
源文件:CAACafTexturePropertyPageEdtFactory.cpp 如下所示
#include <CAACafTexturePropertyPageEdtFactory.h>
CAT_EDITOR_DEFINE_FACTORY(CAACafTexturePropertyPageEdt, CAACafTexturePropertyPageEdt);
#include <TIE_CAAICafTexturePropertyPageEdtFactory.h>
TIE_CAAICafTexturePropertyPageEdtFactory(CAACafTexturePropertyPageEdtFactory);
CAT_EDITOR_DECLARE_FACTORY和CAT_EDITOR_DEFINE_FACTORY这两个宏,会将属性页编辑器工厂实现类创建为CATEditorManager类的数据扩展。
随后通过 TIE 宏声明:该扩展类实现了 CAAICafTexturePropertyPageEdtFactory 接口。
字典文件配置
- 接口字典是一种以框架名.dico 为后缀命名的文件,例如
CAACATIAApplicationFrm.edu.dico;需要在框架的CNext/code/dictionary目录下创建或修改该文件。
接口字典中包含如下声明,用于说明:CATEditorManager组件通过宏生成的扩展类,实现了CAAICafTexturePropertyPageEdtFactory接口,且该扩展类的代码存放于libCAACafEditTextureProp共享库或动态链接库(DLL)中。
CATEditorManager CAAICafTexturePropertyPageEdtFactory libCAACafEditTextureProp
- 工厂字典是文件名由框架名加 .fact 后缀组成的文件,例如
CAACATIAApplicationFrm.fact;你需要在框架的CNext/code/dictionary目录下创建或更新该文件。
工厂字典中包含如下声明,用于说明:CAAICafTexturePropertyPageEdtFactory是一个工厂接口,该接口的实现可用于创建CAACafTexturePropertyPageEdt类的实例。
CAACafTexturePropertyPageEdt CAAICafTexturePropertyPageEdtFactory
运行时,存放这些字典文件的目录路径,会被拼接加入到 CATDictionaryPath 环境变量中。
创建属性页编辑器
该类继承自 CATEditor 类、实现 CATIEditProperties 接口,并重写 CATEditor 基类中纯虚函数或空实现的方法。
你需要为这些方法编写具体实现逻辑,使其具备以下功能:
- ExtractFromSelection 从当前对象集(CSO) 中筛选并返回实现了
CAAISysTextureProperties接口的对象列表。 - GetEditorTitle返回属性页的标题文本。
- SetEditorSize用于指定属性页所需尺寸,可选规格:小、中、大。
- BuildEditor实例化关联的对话框类。
- SetPropertyValue从模型元素中读取数据,同步设置到属性页对话框的各项数值与选项中。
- CommitModification将用户在属性页对话框中修改的数值和选项,应用到所有选中的模型元素上。
- CancelModification方法默认为空实现;可自行扩展,用于释放前面方法中可能申请创建的临时对象。
- CloseWindowFromEditor当用户切换到其他属性页时,该方法会被自动调用。
在实例化属性页时,会按以下顺序依次执行这些方法:ExtractFromSelection、GetEditorTitle、SetEditorSize、BuildEditor 和 SetPropertyValue。
- 确定 (OK):执行
CommitModification方法,同时关闭窗口 - 应用 (Apply):执行
CommitModification方法,但不关闭窗口 - 取消 (Cancel):执行
CancelModification方法,同时关闭窗口 - 关闭 (Close):直接关闭窗口。
SetPropertyValue、CommitModification 和 CancelModification 会依次调用关联对话框类中同名的对应方法。
属性页编辑器类的头文件如下所示。
#include "CATEditor.h" // 继承 CATEditor 类所需包含的头文件
#include "CATLISTV_CATBaseUnknown.h" // ExtractFromSelection 等方法所需包含的头文件class CAACafTexturePropertyPageDlg; // 对话框页面
class CATEditorPage; // 标签页框架父类class CAACafTexturePropertyPageEdt : public CATEditor
{CATDeclareClass; // 声明类宏public:// 构造函数CAACafTexturePropertyPageEdt();// 析构函数virtual ~CAACafTexturePropertyPageEdt(); // 从选中对象中提取目标对象virtual void ExtractFromSelection(CATLISTV(CATBaseUnknown_var) & oExtract, const CATLISTV(CATBaseUnknown_var) * iSelection=NULL);// 获取编辑器标题virtual CATUnicodeString GetEditorTitle();// 设置编辑器尺寸virtual void SetEditorSize(int & oSize);// 创建编辑器界面virtual void BuildEditor(CATEditorPage *); // 设置属性值virtual void SetPropertyValue(CATLISTV(CATBaseUnknown_var)& iExtract, ModeReadWrite iMode);// 提交修改virtual void CommitModification(CATLISTV(CATBaseUnknown_var)& iExtract);// 取消修改virtual void CancelModification(CATLISTV(CATBaseUnknown_var)& iExtract);// 关闭编辑器窗口virtual void CloseWindowFromEditor();private:// 纹理属性对话框指针CAACafTexturePropertyPageDlg * _pTextureFrame ;
};
_pTextureFrame 初始化为空值(NULL)。// 本地框架
#include "CAACafTexturePropertyPageEdt.h"
#include "CAACafTexturePropertyPageDlg.h"// CAASystem.edu 框架
#include "CAAISysTextureProperties.h"// 可视化框架
#include "CATPathElement.h"// 系统框架
#include "CATLISTV_CATBaseUnknown.h"
#include "CATMsgCatalog.h"
#include "CATUnicodeString.h"// CATIAApplicationFrame 框架
#include "CATEditorPage.h"// 实现 CATIEditProperties 接口
#include "TIE_CATIEditProperties.h"
TIE_CATIEditProperties(CAACafTexturePropertyPageEdt);// 声明类实现:CAACafTexturePropertyPageEdt 是 CATBaseUnknown 的实现类
CATImplementClass(CAACafTexturePropertyPageEdt, Implementation, CATBaseUnknown , CATNull);// 构造函数:初始化父类 CATEditor,并将对话框指针置空
CAACafTexturePropertyPageEdt::CAACafTexturePropertyPageEdt():CATEditor(),_pTextureFrame(NULL)
{}// 析构函数:将对话框指针置空,释放引用
CAACafTexturePropertyPageEdt::~CAACafTexturePropertyPageEdt()
{_pTextureFrame = NULL;
}
ExtractFromSelection 方法被调用时,会将当前对象集(CSO) 中的对象列表作为第二个入参传入。该列表中的元素均为 CATPathElement 实例对象。
// 功能:从选中对象列表中筛选出实现了 CAAISysTextureProperties 接口的有效对象
// 参数:oExtract - 输出参数,存储筛选后的对象列表
// iSelection - 输入参数,CSO(当前对象集)中的选中对象列表
void CAACafTexturePropertyPageEdt::ExtractFromSelection(CATLISTV(CATBaseUnknown_var)& oExtract,const CATLISTV(CATBaseUnknown_var) * iSelection)
{// 清空输出列表,确保无残留数据oExtract.RemoveAll();// 检查输入的选中列表是否非空且包含对象if (iSelection && iSelection->Size()){// 定义纹理属性接口指针CAAISysTextureProperties * pISysTexProperties = NULL;HRESULT resu;// 遍历所有选中对象(CATIA 列表下标从 1 开始)for (int i=1 ; i<= iSelection->Size(); i++ ){// 判断当前对象是否为空if ( (*iSelection)[i] != NULL_var ){// 获取智能指针对象CATBaseUnknown_var ukn = (*iSelection)[i];// 转换为原始指针CATBaseUnknown * pukn = ukn;if ( pukn ){// 将对象强制转换为 CATPathElement(CATIA 选中对象的标准路径结构)CATPathElement path = (CATPathElement &) *pukn;// 判断路径元素是否有效if ( path.GetSize() ){// 获取路径的最后一个节点(实际操作的模型对象)CATBaseUnknown * leaf = path[path.GetSize()-1];// 查询对象是否实现 CAAISysTextureProperties 纹理属性接口resu = leaf->QueryInterface(IID_CAAISysTextureProperties,(void**)&pISysTexProperties);// 如果查询成功,说明该对象实现了目标接口// 提取的对象实现了 CAAISysTextureProperties 接口if ( SUCCEEDED(resu) ){// 将有效对象添加到输出列表oExtract.Append((*iSelection)[i]);// 释放接口指针(遵循 COM 规范)pISysTexProperties->Release();pISysTexProperties = NULL;}}}}}}
}
程序会遍历该对象列表,并将所有实现了 CAAISysTextureProperties 接口的对象,添加到作为第一个参数返回的 oExtract 列表中。
GetEditorTitle 用于设置属性页的标题。
CATUnicodeString CAACafTexturePropertyPageEdt::GetEditorTitle()
{CATUnicodeString Title;Title = CATMsgCatalog::BuildMessage("CAACafTexturePropertyPageDlg","TexturePageTitle",NULL, 0, "Texture");return Title;
}
该方法通过调用 CATMsgCatalog 的静态方法 BuildMessage,创建一个 CATUnicodeString 类型的标题字符串。该方法接收以下参数:
- CAACafTexturePropertyPageDlg:消息目录名称,对应
CAACafTexturePropertyPageDlg.CATNls消息资源文件。 - TexturePageTitle:消息键值,通过该键值可以读取属性页编辑器的标题文本。
- 第三个参数设为 NULL,因为当前没有需要自定义传入的消息参数。
- 第四个参数为参数个数,本例中为 0。
- Texture:当找不到对应消息目录文件时,所使用的默认标题。
SetEditorSize 用于设置属性页的尺寸大小。
void CAACafTexturePropertyPageEdt::SetEditorSize(int & oSize )
{oSize = 1;
}
该属性页的尺寸可设置为:小型 (1)、中型 (2)、大型 (3)。最终弹出的对话框窗口,会按照所有待显示属性页中最大的尺寸值来展示。
BuildEditor 用于实例化并创建属性页的对话框对象。
void CAACafTexturePropertyPageEdt::BuildEditor(CATEditorPage * iEditor)
{// 创建纹理属性页对话框实例_pTextureFrame = new CAACafTexturePropertyPageDlg(iEditor);// 构建并显示对话框界面_pTextureFrame->Build();
}
该对话框对象的详细说明请参阅创建属性页对话框章节。
SetPropertyValue 方法调用对话框对象,根据已筛选对象的属性值,为界面控件赋值并设置各项选项。
void CAACafTexturePropertyPageEdt::SetPropertyValue(CATLISTV(CATBaseUnknown_var)& iExtract,ModeReadWrite iMode)
{_pTextureFrame->SetPropertyValue(iExtract, iMode);
}
其中参数 iMode 固定设为写入模式(Write)。
CommitModification 用于将修改后的属性值保存到每一个筛选出的对象中。
void CAACafTexturePropertyPageEdt::CommitModification(CATLISTV(CATBaseUnknown_var)& iExtract)
{_pTextureFrame->CommitModification(iExtract);
}
当终端用户点击确定(OK) 或 应用(Apply) 按钮时,都会触发调用该方法。
CancelModification 用于撤销在属性页中对参数值所做的修改。
void CAACafTexturePropertyPageEdt::CancelModification(CATLISTV(CATBaseUnknown_var)& extract)
{_pTextureFrame->CancelModification(extract);
}
用户点击取消(Cancel) 按钮时,会调用该方法。点击取消时,模型对象本身并不会被修改。
当用户选中切换到新的属性页时,会触发调用 CloseWindowFromEditor 方法;但关闭对话框时并不会调用该方法。
void CAACafTexturePropertyPageEdt::CloseWindowFromEditor()
{}
更新接口字典:
接口字典是一类文件,示例文件名为 CAACATIAApplicationFrm.edu.dico;其所在目录路径会在运行时被拼接至 CATDictionaryPath 环境变量中。
该文件内需添加如下声明,用以表明:CAACafTexturePropertyPageEdt 类实现了 CATIEditProperties 接口,且该类代码位于 libCATAfrEduEditProp 共享库(DLL)中。
需要更新的内容以粗体标示。
CATEditorManager CAAICafTexturePropertyPageEdtFactory libCATAfrEduEditProp CAACafTexturePropertyPageEdt CATIEditProperties libCATAfrEduEditProp
创建属性页对话框
#include "CATDlgFrame.h" // 继承 CATDlgFrame 类所需包含的头文件
#include <CATEditor.h>// 前置声明复选框类
class CATDlgCheckButton;/*** 纹理属性页对话框类* 继承自 CATDlgFrame 框架控件*/
class CAACafTexturePropertyPageDlg : public CATDlgFrame
{public :// CAA 资源声明宏DeclareResource(CAACafTexturePropertyPageDlg, CATDlgFrame);// 构造函数:指定父对话框CAACafTexturePropertyPageDlg (CATDialog * ipParent);// 析构函数virtual ~CAACafTexturePropertyPageDlg ();// 构建对话框界面void Build();// 设置属性值void SetPropertyValue(CATLISTV(CATBaseUnknown_var) & iExtract,ModeReadWrite iMode);// 提交修改void CommitModification(CATLISTV(CATBaseUnknown_var) & iExtract);// 取消修改void CancelModification(CATLISTV(CATBaseUnknown_var) & iExtract);// 从编辑器关闭窗口void CloseWindowFromEditor();private :// 禁用默认构造函数CAACafTexturePropertyPageDlg ();// 禁用拷贝构造函数CAACafTexturePropertyPageDlg(const CAACafTexturePropertyPageDlg &iObjectToCopy);private :// 金属质感复选框CATDlgCheckButton * _pMetal;// 粗糙度复选框CATDlgCheckButton * _pRough;
};
属性页对话框必须继承自 CATDlgFrame。
DeclareResource 宏用于声明:程序将分别从 CAACafTexturePropertyPageDlg.CATNls 和 CAACafTexturePropertyPageDlg.CATRsc 文件中查找对应的文本消息与界面资源。CNext\resources\msgcatalog 目录中。CATEditor 对应方法的配套实现方法。此举可以防止编译器在开发者不知情的情况下,自动生成公开版本的默认构造与拷贝构造函数。
析构函数为空实现,因为所有对话框对象都会自动释放自身的对话框类成员变量。
// 本地框架
#include "CAACafTexturePropertyPageDlg.h"
#include "CAAISysTextureProperties.h"// 对话框框架
#include "CATDlgCheckButton.h"// 可视化框架
#include "CATPathElement.h"// 构造函数:初始化父窗口、设置窗口样式,并将控件指针初始化为空
CAACafTexturePropertyPageDlg::CAACafTexturePropertyPageDlg (CATDialog * parent): CATDlgFrame(parent, "纹理页面框架", CATDlgFraNoFrame|CATDlgFraNoTitle),_pMetal(NULL), _pRough(NULL)
{}// 析构函数:仅将控件指针置空(CATIA会自动管理对话框控件内存)
CAACafTexturePropertyPageDlg ::~CAACafTexturePropertyPageDlg ()
{_pMetal = NULL;_pRough = NULL;
}
Build 方法用于创建控件。
void CAACafTexturePropertyPageDlg ::Build()
{// 创建金属复选框控件_pMetal = new CATDlgCheckButton(this,"Metal");// 创建粗糙度复选框控件_pRough = new CATDlgCheckButton(this,"Rough");
}
SetPropertyValue 根据首个提取对象的属性,设置对话框控件的数值与选项,并保存这些值。在此处,它会根据对象属性,自动勾选或取消勾选对应的复选框。
// 功能:根据提取的对象属性,初始化对话框控件状态(勾选/取消勾选)
// 参数:iExtract - 筛选出的对象列表
// mode - 读写模式
void CAACafTexturePropertyPageDlg::SetPropertyValue(CATLISTV(CATBaseUnknown_var) & iExtract,ModeReadWrite mode)
{// 默认将金属、粗糙度复选框设置为 勾选状态_pMetal->SetState(CATDlgCheck);_pRough->SetState(CATDlgCheck);// 初始化属性标记:默认金属质感=开启,粗糙度=开启int IsMetalic = 1 ;int IsRough = 1 ;// 判断提取的对象列表不为空if ( iExtract.Size() > 0 ){// 获取选中的第一个对象CATBaseUnknown_var elt = (iExtract)[1];CATBaseUnknown *pPath = elt;if ( pPath ){// 转换为 CATIA 路径元素CATPathElement &path = (CATPathElement &)*pPath;if (path.GetSize()){// 获取路径的最后一个节点(实际模型对象)CATBaseUnknown * currentp = path[path.GetSize()-1];// 从第一个对象的 CAAISysTextureProperties 接口中获取属性信息CAAISysTextureProperties * pISysTexProperties = NULL ;HRESULT resu = currentp->QueryInterface(IID_CAAISysTextureProperties,(void**)&pISysTexProperties) ;// 查询接口成功:用第一个对象的属性值初始化对话框控件if ( SUCCEEDED(resu) ) {// 获取金属属性值pISysTexProperties->GetMetal(IsMetalic);// 如果属性为关闭,则取消勾选复选框if ( !IsMetalic ) _pMetal->SetState(CATDlgUncheck);// 获取粗糙度属性值pISysTexProperties->GetRough(IsRough);// 如果属性为关闭,则取消勾选复选框if ( !IsRough ) _pRough->SetState(CATDlgUncheck);// 释放接口指针pISysTexProperties->Release();}}}}// 启用所有控件(允许用户操作)SetSensitivity(CATDlgEnable);
}
CommitModification 将修改后的属性值应用到已提取的对象上。
void CAACafTexturePropertyPageDlg::CommitModification(CATLISTV(CATBaseUnknown_var) & iExtract)
{HRESULT resu ;CAAISysTextureProperties * pISysTexProperties = NULL ;// 遍历所有提取的对象for ( int i=1 ; i <= iExtract.Size() ; i++ ){// 当前需要修改的对象CATBaseUnknown_var elt = (iExtract)[i];CATBaseUnknown *pPath = elt;CATPathElement &path = (CATPathElement &)*pPath;// 检查路径元素是否有效if (path.GetSize() ){// 获取路径的最后一个节点(实际模型对象)CATBaseUnknown * currentp = path[path.GetSize()-1];// 查询纹理属性接口resu = currentp->QueryInterface(IID_CAAISysTextureProperties,(void**)&pISysTexProperties) ;// 使用当前界面的值修改模型属性if ( SUCCEEDED(resu) ) {// 根据金属复选框状态设置属性if ( _pMetal->GetState() == CATDlgCheck )pISysTexProperties->SetMetal(1);elsepISysTexProperties->SetMetal(0);// 根据粗糙度复选框状态设置属性if ( _pRough->GetState() == CATDlgCheck )pISysTexProperties->SetRough(1);elsepISysTexProperties->SetRough(0);// 释放接口指针pISysTexProperties->Release();pISysTexProperties = NULL ;}}}
}
CancelModification 会直接关闭对话框窗口,不会应用所修改的属性值。
void CAACafTexturePropertyPageDlg::CancelModification(CATLISTV(CATBaseUnknown_var) & iExtract)
{}
该方法为空实现,点击取消时不做任何属性赋值与数据保存操作。
当本属性页处于当前激活状态、用户切换选择其他属性页时,就会调用 CloseWindowFromEditor 方法。
void CAACafTexturePropertyPageDlg::CloseWindowFromEditor()
{}
该方法为空实现,无需额外处理逻辑。
小结
- 创建一个属性页编辑器工厂接口,继承自
CATIGenericFactory; - 通过该属性页编辑器工厂,实例化属性页编辑器;
- 提供配套的属性页对话框类,在其中放置各类界面控件,供用户查看并修改对象属性的参数与数值。
References
| [1] | Edit Properties |
| [2] | About Globally Unique IDentifiers |
