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



         

Перегрузка deepClone () Функция - часть 2


6 Добавляют новую информацию к idMap. IdMap содержит AcDbIdPairs, которые являются парами старого (оригинала) и новых (клонированных) объектных ID. Конструктор для пары ID устанавливает первоначальный объект ID и флажок isPrimary. В этой точке, Вы устанавливаете объект ID для клонированного объекта, устанавливает флажок isCloned в TRUE, и добавляете (назначают) это на idMap.

7 Клонируют находящиеся в собственности объекты. (Этот шаг рекурсивен.)

§          Спрашивают регистратора, если имеются больше находящиеся в собственности объекты. (Для клона wblock, спросите, если имеются больше жесткие объекты.)

§          чтобы клонировать подобъект, получите его ID, и откройте объект для чтения.

§          Вызывают deepClone () на объекте. (Обратите внимание, что isPrimary установлен в FALSE, потому что это - находящийся в собственности объект.) deepClone () функция клонирует объект и устанавливает его владельца. Это также добавляет запись на карту ID.

§          Закрыли бы подобъект, если это было создано в это время.

§           

Следующий типовой код иллюстрирует эти шаги:

Acad::ErrorStatus

AsdkPoly::deepClone(

AcDbObject* pOwner,

AcDbObject*& pClonedObject,

AcDbIdMapping& idMap,

Adesk::Boolean isPrimary) const

{

// You should always pass back pClonedObject == NULL

// if, for any reason, you do not actually clone it

// during this call. The caller should pass it in

// as NULL, but to be safe, we set it here as well.

//

pClonedObject = NULL;

// If this object is in the idMap and is already

// cloned, then return.

//

bool isPrim = false;

if (isPrimary)

isPrim = true;

AcDbIdPair idPair(objectId(), (AcDbObjectId)NULL, false, isPrim);

if (idMap.compute(idPair) && (idPair.value() != NULL))

return Acad::eOk;




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