Вопрос о чистке памяти. В своем CustomEntity, для реализации ручек редактирования, я перегрузил методы:
virtual Acad::ErrorStatus subGetGripPoints (
AcDbGripDataPtrArray &grips, const double curViewUnitSize, const int gripSize,
const AcGeVector3d &curViewDir, const int bitflags) const
virtual Acad::ErrorStatus subGetGripPointsAtSubentPath(
const AcDbFullSubentPath & path, AcDbGripDataPtrArray & grips, const double curViewUnitSize,
const int gripSize, const AcGeVector3d & curViewDir, const int bitflags) const;
Ручки редактирования работают корректно для Entity и для всех ее subEntity.
Для каждого AcDbGripData который я забрасываю в AcDbGripDataPtrArray:
AcDbGripData* pGripData = new AcDbGripData();
pGripData->setAppData(new CGripData(..., ..., ...));
....
grips.append(pGripData);
В документации к выше названных методах пишет: "The caller is responsible for freeing the AcDbGripData objects whose pointers are in the grips array".
За очистку "AcDbGripDataPtrArray& grips" я отвечаю? Если так, то в какой момент я должен это делать?
Наверно нужно чистить саму AcDbGripData и мою CGripData.Смотрел в метод:
virtual void subGripStatus(const AcDb::GripStat status);
туда мне приходит :
enum GripStat { kGripsDone = 0, kGripsToBeDeleted = 1, kDimDataToBeDeleted = 2 };
Но если нужно очищать массив AcDbGripDataPtrArray &grips, то в этот момент я не знаю ничего про него не знаю, в таком случае мне нужно где то в Entity хранить его и формировать еще до вызова getGripPoints.
В сэмплах AutoCAD примеров очистки не нашел.
Также я использую размерные выноски для GripPoint, задаю методами:
void setHotGripDimensionFunc(GripDimensionPtr pFunc);
void setHoverDimensionFunc(GripDimensionPtr pFunc);
----------------------------------------------------------------
typedef void (*GripDimensionPtr)(AcDbGripData* pThis, const AcDbObjectId& entId,
double dimScale, AcDbDimDataPtrArray& dimData);
----------------------------------------------------------------
В них по такому же принципу заполняю AcDbDimDataPtrArray& dimData:
pDim = new AcDbDimension();
.....
AcDbDimData* pDimData = new AcDbDimData(pDim);
pDimData->setAppData(new CDimData(..., ..., ...));
....
dimData.append(pDimData);
Нужно ли мне потом чистить "AcDbDimDataPtrArray& dimData"?
Вижу, что в деструкторе AcDbDimData удаляется AcDbDimension, но AcDbDimData и CDimData наверно нужно мне удалять отдельно.