> Требующий помощи
Попробуй этот код:
static void Copy3DPolyline(void)
{
// Add your code for command ArxProject11.Copy3DPolyline here
AcDbDatabase *pDb = acdbCurDwg();
ads_name en;
ads_point p;
AcDbObjectId objId;
if (acedEntSel("\nУкажите полилинию для копирования: ",en,p) == RTNORM) {
if (acdbGetObjectId(objId,en) == Acad::eOk) {
AcDbObjectPointer<AcDb3dPolyline> p3dPoly(objId,AcDb::kForRead);
if (p3dPoly.openStatus() == Acad::eOk) {
p3dPoly->close();
AcDbObjectIdArray aIDs; aIDs.append(objId);
AcDbIdMapping idMap;
if (pDb->deepCloneObjects(aIDs,pDb->currentSpaceId(),idMap) == Acad::eOk) {
AcDbIdPair idPair(objId,AcDbObjectId::kNull,true);
AcDbObjectId objcloneId;
if (idMap.compute(idPair)) { // Вычисляем ObjectId для клона
objcloneId = idPair.value();
AcDbObjectPointer <AcDb3dPolyline> p3dclonePoly(objcloneId,AcDb::kForWrite);
if (p3dclonePoly.openStatus() == Acad::eOk) {
// Для примера сдвинем всю полилинию на 100 по X
AcGeMatrix3d mat;
mat.setToTranslation(AcGeVector3d(100,0,0));
p3dclonePoly->transformBy(mat);
} else {
acutPrintf("\nНе удалось открыть копию на запись!!!");
}
} else {
acutPrintf("\nНе удалось получить id новой полилинии!!!");
}
} else {
acutPrintf("\nНе удалось скопировать!!!");
}
} else {
acutPrintf("\nВыбрана не 3D-полилиния");
}
}
}
}