static void RivilisCloneHatch() {
ads_name ent;
ads_point pt;
AcDbObjectId objId;
AcDbObjectIdArray objList;
AcDbIdMapping idMap;
uint16_t solidcolor = 5;
while (TRUE)
{
if (acedEntSel(ACRX_T("\nВыбери штриховку: "), ent, pt) != RTNORM)
return;
acdbGetObjectId(objId, ent);
AcDbObjectPointer<AcDbHatch> pHatch(objId, AcDb::kForRead);
if (pHatch.openStatus() != Acad::eOk)
continue;
bool bAssoc = pHatch->associative();
AcDbObjectIdArray idsAssoc;
if (bAssoc) pHatch->getAssocObjIds(idsAssoc);
objList.append(objId);
// Добавляем границы
if (bAssoc)
for (int i = 0; i < idsAssoc.length(); i++)
objList.append(idsAssoc[i]);
acdbCurDwg()->deepCloneObjects(objList, acdbCurDwg()->currentSpaceId(), idMap, false);
objList.setLogicalLength(0);
pHatch->close();
AcDbIdPair pair; pair.setKey(objId);
idMap.compute(pair);
AcDbObjectId newHatchId(pair.value());
AcDbObjectPointer<AcDbHatch> pHatchNew(newHatchId, AcDb::kForWrite);
if (pHatchNew.openStatus() != Acad::eOk)
continue;
if (bAssoc)
{
AcDbObjectIdArray idsAssoc;
pHatchNew->getAssocObjIds(idsAssoc);
for (int i = 0; i < idsAssoc.length(); i++)
{
AcDbEntityPointer pBoundary(idsAssoc[i], AcDb::kForWrite);
if (pBoundary.openStatus() == Acad::eOk)
{
pBoundary->addPersistentReactor(newHatchId);
}
}
}
pHatchNew->setPattern(AcDbHatch::kPreDefined, ACRX_T("SOLID"));
pHatchNew->setColorIndex(solidcolor);
}
}