我们将如表中所示将以下成员变量添加到AsdkEmployee类中: 为AsdkEmployee类添加成员变量:
Variable Name |
Data Type |
DXF Code |
m_lastName |
TCHAR* |
300 |
m_firstName |
TCHAR* |
301 |
m_cube |
Adesk::Int32 |
90 |
m_ID |
Adeak::Int32 |
91 |
-
在AsdkEmployee.h头文件中,在AsdkEmployee声明中添加以下内容:
private:
Adesk::Int32 m_ID;
Adesk::Int32 m_cube;
TCHAR* m_firstName;
TCHAR* m_lastName; |
-
我们需要为这些成员变量添加访问/修改功能。 在AsdkEmployee声明中添加以下内容.
public:
Acad::ErrorStatus setID(const Adesk::Int32 ID);
Acad::ErrorStatus iD(Adesk::Int32& ID);
Acad::ErrorStatus setCube(const Adesk::Int32 cube);
Acad::ErrorStatus cube(Adesk::Int32& cube);
Acad::ErrorStatus setFirstName(const TCHAR* firstName);
Acad::ErrorStatus firstName(TCHAR*& firstName);
Acad::ErrorStatus setLastName(const TCHAR* lastName);
Acad::ErrorStatus lastName(TCHAR*& lastName); |
-
以下代码显示了如何实现上述功能。 此代码实现firstName(),它将返回存储在AsdkEmployee对象中的名字,而setFirstName()将为该对象设置名字.
Acad::ErrorStatus
AsdkEmployee::firstName(TCHAR *& firstName)
{
assertReadEnabled();
firstName = _tcsdup(m_firstName);
return Acad::eOk;
}
Acad::ErrorStatus AsdkEmployee::setFirstName(const TCHAR* firstName)
{
assertWriteEnabled();
if (m_firstName)
free(m_firstName);
m_firstName = _tcsdup(firstName);
return Acad::eOk;
}
|
-
类似地实现所有剩余的访问/修改功能.
-
实现worldDraw()函数。 在该函数中,必须首先调用父类(AcDbEllipse ::
worldDraw())的基类worldDraw()函数。 至此,ObjectARX向导已经为您实现了worldDraw()。 另外,将AsdkEmployee实体数据绘制为文本。 (AcGiWorldDraw :: geometry(),AcGiGeometry :: text())。 提示:worldDraw()传递了一个AcGiWorldDraw指针,使用mode-> geometry()。text(此处有各种参数,请参见联机帮助)。
对于文本的位置,法线,方向和高度,请使用从AcDbEllipse派生的AsdkEmployee实体的属性.
-
如下更改AsdkEmployee类的构造函数:
AsdkEmployee::AsdkEmployee() : AcDbEllipse (AcGePoint3d (),AcGeVector3d (0, 0, 1), AcGeVector3d (1, 0, 0), 1)
{
// TODO: do your initialization.
m_firstName =
m_lastName = NULL ;
}
|
尝试自己实现上述所有功能。 不要忘记ObjectARX联机帮助以获取快速参考。
如果卡住,则可以打开 Step06解决的项目
并研究“ Employee”项目的AsdkEmployee.cpp和AsdkEmployee.h文件中的代码.
为AsdkEmployee添加初始化代码:
接下来,我们需要为AsdkEmployee添加初始化代码。 这类似于我们初始化AsdkEmployeeDetails类的操作.
打开Employee项目的acrxEntryPoint.cpp文件,并将以下内容添加到CEmployeeApp类的On_kInitAppMsg()方法中。 另外,我们应该从acrxDynamicLinker中删除我们的服务名称。
这可以在方法On_kUnloadAppMsg()中完成。 添加include语句以在acrxEntryPoint.cpp文件中包括AsdkEmployee.h文件.
virtual
AcRx::AppRetCode On_kInitAppMsg (void
*pkt) {
AcRx::AppRetCode retCode =AcRxDbxApp::On_kInitAppMsg (pkt)
;
// TODO: Add your initialization
code here
acrxRegisterService(ASDKEMPLOYEE_DBXSERVICE);
return (retCode) ;
}
virtual AcRx::AppRetCode
On_kUnloadAppMsg (void *pkt) {
AcRx::AppRetCode retCode =AcRxDbxApp::On_kUnloadAppMsg
(pkt) ;
// TODO: Add your code here
delete
acrxServiceDictionary->remove(ASDKEMPLOYEE_DBXSERVICE);
return (retCode) ;
}
|
编译ObjectDBX模块:
通过在类资源管理器中右键单击Employee项目并单击“ Build”来编译ObjectDBX项目。
尝试自己实现上述所有功能。 不要忘记ObjectARX联机帮助以获取快速参考。 如果卡住,则可以打开
Step06解决的项目
并研究Employee项目中的代码. |