CATIA二次开发中用到的几个概念的总结(转栽)
首先声明,我也是一个菜鸟,接触CATIA二次开发时间很短,也在学习,下面的几个概念是我在学习及使用时自己琢磨得到的解释,目的是用尽可能简洁易懂的语言来描述英文文档中相对不容易理解的几个概念,在学习的时候我得到了CAA群的水晶羽和huright的帮助,感谢他们。希望我的总结对初学者有用,另外,可能会有理解不当的地方,欢迎大家指出来,有交流才会有进步,汲取他人的知识和经验为我所用,我们才能走得更远。
1.Dialog Agent:A dialog agent translates a user interaction into a user input。一个Dialog Agent将用户的交互动作转变为了相应的输入,比如,CATIndicationAgent将用户在屏幕上的一个左键单击转换为相应的用户输入,获得单击处的坐标值。
我觉得,简单理解,就是作为一个中介(Agent),我们不用关心它是如何转变的,只要知道,我们可以利用它来得到用户的输入就可以了。
2.Dialog State:A State is a step in a dialog where the program is waiting for an input。一个Dialog State就是指一个状态,对于多状态的输入来讲(Statechart diagram),它就是指程序的几个状态,比如画一个圆,就有选取平面,选取圆心,指定半径,输入结束等几个状态,在相应的状态下利用Dialog Agent获得相应的输入,并对输入进行判断,从而激发相应的响应。(即Guard condition 和Action)
3. TIE:A TIE is the object that links the interface and the implementation。TIE(不知道全称是什么)是用来连接接口与实现的对象。在程序中是以.tsrc文件后缀名存在的,而在程序编译时将会产生一个TIE的.h头文件(参见百科全书User Interface部分)。
4.TIE_CATIPrtWksAddin(NewAddin):NewAddin是一个Component,它实现了接口CATIPrtWksAddin,因此就写成上面的形式:TIE_CATIPrtWksAddin(NewAddin);
-----------------------------------------------------------------------------------------------------------
5.CATDeclareClass:这是一个类中变量的声明,类似于MFC中的DECLARE_DYNAMIC (我个人以为),其代码如下:
#define CATDeclareClass
private :
static CATMetaClass *meta_object;
public :
virtual CATMetaClass *__stdcall GetMetaObject() const;
virtual const char *IsA() const;
virtual intIsAKindOf(const char *) const;
static CATMetaClass *__stdcall MetaObject();
static const CLSID &__stdcall ClassId();
static const char *__stdcall ClassName();
static CATBaseUnknown *CreateItself()
而相应的MFC中的DECLARE_DYNAMIC代码如下:
#define DECLARE_DYNAMIC(class_name) \
protected: \
static CRuntimeClass* PASCAL _GetBaseClass(); \
public: \
static const AFX_DATA CRuntimeClass class##class_name; \
virtual CRuntimeClass* GetRuntimeClass() const; \
// not serializable, but dynamically constructable
#define DECLARE_DYNCREATE(class_name) \
DECLARE_DYNAMIC(class_name) \
static CObject* PASCAL CreateObject();
MFC中的DECLARE_DYNAMIC其目的是在类中构建一个含有CruntimeClass的变量,从而实现RTTI(在App及Window中)和动态重建(在Window中),看上面的函数CreateObject()以及CreateItself()以及相应的变量,我想应该在CAA中也是实现类似的效果。
6. CATImplementClass:这个应该不用说了,跟上面的CATDeclareClass形成一个组合,从而达到跟DECLARE_DYNAMIC一样的效果,应该是RTTI和动态重建。其各自的代码简单列如下:
CATImplementClass(NewAddin,
Implementation,
CATBaseUnknown,
CATnull ):
#define CATImplementClass(Class,Typeofclass,Basemeta,Impmeta)
\
CATBeginImplementClass(Class,Typeofclass,Basemeta,Impmeta);
\
CATEndImplementClass(Class)
#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL)
7。MacDeclareHeader:Declares and defines a header class。声明并定义一个头,用来声明并定义一个Command Header,在命令的响应中使用。
如例:MacDeclareHeader (PartCmdHeader),而MacDeclareHeader代码如下:
#define MacDeclareHeader(DerivedHeader)
\
MacDefineHeader(DerivedHeader);
\
MacImplementHeader(DerivedHeader);
#define MacDefineHeader(DerivedHeader)
\
class HeaderExportedBy DerivedHeader : public CATCommandHeader
\
从中可以看出,PartCmdHeader是我们定义的一个类,而这个类派生于CATCommandHeader,因此,我们在做Addin时就可以直接new PartCmdHeader(…)等了,因为它的参数被定义为一个类。
8. Smart Pointer:智能指针,这个在C++中就有:A smart pointer is one which replaces a standard pointer and adds functionality. The C++ standard library, for example, defines a class known as auto_ptr<> which automatically frees any resource it is controlling when its destructor is called。(见:http://www.vckbase.com/english/code/cpp_mfc/leakfree_singleton.shtml.htm)说得简易些:智能指针就是一种高级的指针,不同于普通指针的是,它可以自已控制资源的释放,而不用手动去释放所申请的资源。
针对CATIA中的Smart Pointer:A Smart Pointer is a class associated to an interface, that behaves like an interface pointer ,which additional automatic reference counting。对于一个接口CATI***,其智能指针为:CATI***_var,如CATISketch
其对应的智能指针就是CATISketch _var。
对于Smart Pointer的使用问题:这一部分参见百科全书的中间件部分,推荐的是尽可能不要使用,而采用手动的Addref或Release。 我准备学习CAD二次开发,C++是一大关
页:
[1]