comejava 发表于 2005-2-22 09:44:00

利用ObjectDBX技术在当前图形中插入其他未打开图形中的图块

张帆老师讲过在vba中的实现方式,不知在objectarx中怎么实现?

comejava 发表于 2005-2-23 11:56:00

怎么没人回答?

王咣生 发表于 2005-2-23 13:39:00

readDwgFile(),取得实体ID,然后clone对象.voidcloneSameOwnerObjects(){    // Step 1:Obtain the set of objects to be cloned.    ads_name sset;    if (acedSSGet(NULL, NULL, NULL, NULL, sset) != RTNORM) {      acutPrintf("\nNothing selected");      return;    }    // Step 2: Add obtained object IDs to list of objects    // to be cloned.    long length;    acedSSLength(sset, &length);    AcDbObjectIdArrayobjList;    AcDbObjectId ownerId = AcDbObjectId::kNull;    for (int i = 0; i         ads_name ent;      acedSSName(sset, 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)            objList.append(objId);      else if (i == 0) {            ownerId = pObj->ownerId();            objList.append(objId);      }      pObj->close();    }    acedSSFree(sset);    // Step 3: Get the object ID of the desired owner for    // the cloned objects.We'll use model space for    // this example.    //    AcDbBlockTable *pBlockTable;    acdbHostApplicationServices()->workingDatabase()      ->getSymbolTable(pBlockTable, AcDb::kForRead);    AcDbObjectIdmodelSpaceId;    pBlockTable->getAt(ACDB_MODEL_SPACE, modelSpaceId);    pBlockTable->close();    // Step 4:Create a new ID map.    //    AcDbIdMapping idMap;    // Step 5: Call deepCloneObjects().    //    acdbHostApplicationServices()->workingDatabase()      ->deepCloneObjects(objList, modelSpaceId, 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());    }}

comejava 发表于 2005-2-23 16:12:00

谢谢,我先看看,学习学习
页: [1]
查看完整版本: 利用ObjectDBX技术在当前图形中插入其他未打开图形中的图块