ObjectARX, AutoCAD. Среда программирования библиотеки C++




Пример расширения протокола


Этот пример расширения протокола разделен на три части:

§

Объявление и определение четырех классов расширения протокола: AsdkEntTemperature, AsdkDefaultTemperature, AsdkRegionTemperature и AsdkCircleTemperature.

§         выполнение energy() для команды ENERGY, которая позволяет пользователю выбирать примитив и затем, вычисляет температуру для того примитива.

§         ObjectARX модуль связывают с помощью интерфейса функции: initApp (), unloadApp () и acrxEntryPoint ().

// This is the AsdkEntTemperature protocol extension abstract base

// class. Notice that this is the lowest level that uses

// the ACRX macros.

//

class AsdkEntTemperature : public AcRxObject

{

public:

ACRX_DECLARE_MEMBERS(AsdkEntTemperature);

virtual double reflectedEnergy(AcDbEntity*) const = 0;

};

ACRX_NO_CONS_DEFINE_MEMBERS(AsdkEntTemperature, AcRxObject);

// This is the default implementation to be attached to AcDbEntity

// as a catch-all. This guarantees that this protocol extension will

// be found for any entity, so the search up the AcRxClass tree will

// not fail and abort AutoCAD.

//

class AsdkDefaultTemperature : public AsdkEntTemperature

{

public:

virtual double reflectedEnergy(AcDbEntity* pEnt) const;

};

double

AsdkDefaultTemperature::reflectedEnergy( AcDbEntity* pEnt) const

{

acutPrintf( "\nThis entity has no area, and no reflection.\n");

return -1.0;

}

// AsdkEntTemperature implementation for Regions

//

class AsdkRegionTemperature : public AsdkEntTemperature

{

public:

virtual double reflectedEnergy(AcDbEntity* pEnt) const;

};

double

AsdkRegionTemperature::reflectedEnergy( AcDbEntity* pEnt) const

{

AcDbRegion *pRegion = AcDbRegion::cast(pEnt);

if (pRegion == NULL)

acutPrintf("\nThe impossible has happened!");

// Compute the reflected energy as the region area multiplied

// by a dummy constant.

//

double retVal;




Содержание  Назад  Вперед