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



         

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


// objects to be cloned: one list for objects to

// be owned by model space and one for those to

// be owned by paper space.

AcDbObjectId ownerId = AcDbObjectId::kNull;

// For model space

//

AcDbObjectIdArray objListMS;

for (int i = 0; i < lengthMS; i++) {

ads_name ent;

acedSSName(ssetMS, i, ent);

AcDbObjectId objId;

acdbGetObjectId(objId, ent);

// Check to be sure this has the same owner as the first

// object.

//

AcDbObject *pObj;

acdbOpenObject(pObj, objId, AcDb::kForRead);

if (pObj->ownerId() == ownerId)

objListMS.append(objId);

else if (i == 0) {

ownerId = pObj->ownerId();

objListMS.append(objId);

}

pObj->close();

}

acedSSFree(ssetMS);

// For paper space

//

ownerId = AcDbObjectId::kNull;

AcDbObjectIdArray objListPS;

for (i = 0; i < lengthPS; i++) {

ads_name ent;

acedSSName(ssetPS, i, ent);

AcDbObjectId objId;

acdbGetObjectId(objId, ent);

// Check to be sure this has the same owner as the first

// object.

//

AcDbObject *pObj;

acdbOpenObject(pObj, objId, AcDb::kForRead);

if (pObj->ownerId() == ownerId)

objListPS.append(objId);

else if (i == 0) {

ownerId = pObj->ownerId();

objListPS.append(objId);

}

pObj->close();

}

acedSSFree(ssetPS);

// Step 3: Get the object ID of the desired owners for

// the cloned objects. We’re using model space and

// paper space for this example.

//

AcDbBlockTable *pBlockTable;

acdbHostApplicationServices()->workingDatabase()

->getSymbolTable(pBlockTable, AcDb::kForRead);

AcDbObjectId modelSpaceId, paperSpaceId;

pBlockTable->getAt(ACDB_MODEL_SPACE, modelSpaceId);

pBlockTable->getAt(ACDB_PAPER_SPACE, paperSpaceId);

pBlockTable->close();

// Step 4: Create a new ID map.

//

AcDbIdMapping idMap;

// Step 5: Call deepCloneObjects().

//

acdbHostApplicationServices()->workingDatabase()

->deepCloneObjects(objListMS, modelSpaceId, idMap, Adesk::kTrue);

acdbHostApplicationServices()->workingDatabase()

->deepCloneObjects(objListPS, paperSpaceId, idMap);

// Now we can go through the ID map and do whatever we’d

// like to the original and/or clone objects.

//

// For this example we’ll print out the object IDs of

// the new objects resulting from the cloning process.

//

AcDbIdMappingIter iter(idMap);

for (iter.start(); !iter.done(); iter.next()) {

AcDbIdPair idPair;

iter.getMap(idPair);

if (!idPair.isCloned())

continue;

acutPrintf("\nObjectId is: %Ld", idPair.value().asOldId());

}

}




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