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


         

Пример формирования зависимостей в объекте


Следующий пример показывает, как Вы можете использовать реакторы, чтобы установить зависимости среди объектов базы данных. В этом примере, когда Вы изменяете одну линию, другие изменяются тоже.

class AsdkObjectToNotify : public AcDbObject

//

// AsdkObjectToNotify - customized AcDbObject for persistent

// reactor to notify.

//

{

public:

ACRX_DECLARE_MEMBERS(AsdkObjectToNotify);

AsdkObjectToNotify() {};

void eLinkage(AcDbObjectId i, double f=1.0)

{mId=i; mFactor=f; };

void modified(const AcDbObject*);

Acad::ErrorStatus dwgInFields(AcDbDwgFiler*);

Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const;

Acad::ErrorStatus dxfInFields(AcDbDxfFiler*);

Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const;

private:

AcDbObjectId mId;

double mFactor;

};

ACRX_DXF_DEFINE_MEMBERS(AsdkObjectToNotify, AcDbObject,

AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,

0, ASDKOBJECTTONOTIFY, persreac);

// This function is called every time the line it’s

// "watching" is modified. When it’s called, it opens the

// other line of the pair and changes that line’s length to

// match the new length of the line that’s just been

// modified.

//

void

AsdkObjectToNotify::modified(const AcDbObject* pObj)

{

AcDbLine *pLine = AcDbLine::cast(pObj);

if (!pLine) {

const char* cstr = pObj->isA()->name();

acutPrintf("This is a %s.\n", cstr);

acutPrintf("I only work with lines. Sorry.\n");

return;

}

acutPrintf("\nReactor attached to %lx calling %lx.\n",

pLine->objectId(), mId);

// This open will fail during notification caused by a

// reactor being added to the entity or when this

// notification is in reaction to a change due to the

// other line’s reactor changing this line. This will

// properly prevent an infinite recursive loop

// between the two lines and their reactors.

//

AcDbLine *pLine2;

if (acdbOpenObject((AcDbObject*&)pLine2, mId, AcDb::kForWrite) == Acad::eOk)

{

// Get length of line entity we’re being notified



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