我们将如表中所示将以下成员变量添加到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

 

  1. 在AsdkEmployee.h头文件中,在AsdkEmployee声明中添加以下内容:
private:
Adesk::Int32 m_ID;
Adesk::Int32 m_cube;
TCHAR* m_firstName;
TCHAR* m_lastName;

 

  1. 我们需要为这些成员变量添加访问/修改功能。 在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);

 

  1. 以下代码显示了如何实现上述功能。 此代码实现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;

}

 

  1. 类似地实现所有剩余的访问/修改功能.
  2. 实现worldDraw()函数。 在该函数中,必须首先调用父类(AcDbEllipse :: worldDraw())的基类worldDraw()函数。 至此,ObjectARX向导已经为您实现了worldDraw()。 另外,将AsdkEmployee实体数据绘制为文本。 (AcGiWorldDraw :: geometry(),AcGiGeometry :: text())。 提示:worldDraw()传递了一个AcGiWorldDraw指针,使用mode-> geometry()。text(此处有各种参数,请参见联机帮助)。 对于文本的位置,法线,方向和高度,请使用从AcDbEllipse派生的AsdkEmployee实体的属性. 
  3. 如下更改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项目中的代码.

 

NEXT: 实施CREATEEMPLOYEE命令

Adding member functions to the AsdkEmployee class 
Copyright ? 2013 Autodesk, Inc.