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



         

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


AcDbObject *pSubObject;

AcDbObject *pClonedSubObject;

// Some object references may be set to NULL,

// so don’t try to clone them.

//

if (id == NULL)

continue;

// If the referenced object is from a different

// database, such as an xref, do not clone it.

//

acdbOpenAcDbObject(pSubObject, id, AcDb::kForRead);

if (pSubObject->database() != database()) {

pSubObject->close();

continue;

}

// To find out if this is an AcDbHardPointerId

// versus an AcDbHardOwnershipId, check if we are the

// owner of the pSubObject. If we are not,

// then we cannot pass our clone in as the owner

// for the pSubObject’s clone. In that case, we

// pass in our clone’s database (the destination

// database).

//

// Note that "isPrimary" is set to kFalse here

// because the object is being cloned, not as part

// of the primary set, but because it is owned by

// something in the primary set.

//

pClonedSubObject = NULL;

if (pSubObject->ownerId() == objectId()) {

pSubObject->wblockClone(pClone,

pClonedSubObject,

idMap, Adesk::kFalse);

} else {

pSubObject->wblockClone(

pClone->database(),

pClonedSubObject,

idMap, Adesk::kFalse);

}

pSubObject->close();

// The pSubObject may either already have been

// cloned, or for some reason has chosen not to be

// cloned. In that case, the returned pointer will

// be NULL. Otherwise, since there is no immediate

// use for it now, the clone can be closed.

//

if (pClonedSubObject != NULL)

pClonedSubObject->close();

}

// Leave pClonedObject open for the caller.

//

return Acad::eOk;

}

ПРИМЕЧАНИЕ Помните, что, когда wblock () функция находится в процессе выполнения, ссылки указателя в базе данных адресата еще не были оттранслированы. Следующий код не работает правильно, потому что, хотя это пробует открывать запись таблицы блоков пространства модели базы данных адресата, запись таблицы блоков пространства модели исходной базы данных открыта вместо этого. Неоттранслированная ссылка в таблице блоков базы данных адресата - все еще что касается пространства модели исходной базы данных.




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