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



         

Клонируемые Объекты от Различных Владельцев


Если Вы клонируемые набор объектов от различных владельцев, вы будете должны делить набор объектных ID в отдельные группы для каждого владельца. (Клонированные объекты и их владельцы должны принадлежать той же самой базе данных.) В примере в этой секции, объекты пространства модели, которые нужно клонировать добавлены к objListMS, и объекты пространства листа, которые нужно клонировать добавлены к objListPS:

objListMS.append(objId);

objListPS.append(objId);

DeepCloneObjects () функция тогда вызвана дважды, используя ту же самую карту ID. Необходимо делать все клонирование, используя единственную карту ID для трансляции ссылки, которая будет сделана должным образом. На первом запросе, deferXlation параметр установлен в kTrue. В секунде (последний) вызывают к deepCloneObjects (), deferXlation значения по умолчанию к kFalse:

acdbHostApplicationServices()->workingDatabase()->DeepCloneObjects (mslist, modelSpaceId, idMap, Adesk::kTrue);

acdbHostApplicationServices()->workingDatabase()->DeepCloneObjects (pslist, paperSpaceId, idMap);

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

void

cloneDiffOwnerObjects()

{

// Step 1: Obtain the set of objects to be cloned.

// For the two owners we’ll use model space and

// paper space, so we must perform two acedSSGet() calls.

// calls.

//

acutPrintf("\nSelect entities to be cloned to"

" Model Space");

ads_name ssetMS;

acedSSGet(NULL, NULL, NULL, NULL, ssetMS);

long lengthMS;

acedSSLength(ssetMS, &lengthMS);

acutPrintf("\nSelect entities to be cloned to"

" Paper Space");

ads_name ssetPS;

if (acedSSGet(NULL, NULL, NULL, NULL, ssetPS) != RTNORM && lengthMS == 0)

{

acutPrintf("\nNothing selected");

return;

}

long lengthPS;

acedSSLength(ssetPS, &lengthPS);

// Step 2: Add obtained object IDs to the lists of




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