Добрый день.
Столкнулся с такой проблемой при разработке CustomEntity:
Есть собственный примитив MyEntity, который представляет собой контейнер примитивов MySubEntity AcDbVoidPtrArray entArr;
Мне нужно при выделении SubEntity получить его ручки чтобы изменять MySubEntity в соответствии с переопределенным в нем subMoveGripPointsAt.
Получаю ручки так
Acad::ErrorStatus MyEntity::subGetGripPointsAtSubentPath(const AcDbFullSubentPath & path, AcDbGripDataPtrArray & grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d & curViewDir, const int bitflags) const
{
assertReadEnabled();
grips.setLogicalLength(0);
long ind = path.subentId().index();
((MySubEntity*)entArr[ind - 1])->getGripPoints(grips, curViewUnitSize, gripSize, curViewDir, bitflags);
AcGeMatrix3d mat = getMatrix();
for (int i = 0; i < grips.length(); i++)
{
AcDbGripData* gr = grips.at(i);
gr->setGripPoint(AcGePoint3d(gr->gripPoint()).transformBy(mat));
}
return (Acad::eOk);
}
Метод работает нормально, ручки появляются.
Проблема в методе subMoveGripPointsAtSubentPaths, где gripAppData при перемещении одной ручки должен содержать только один элемент, а у меня там
появляется коллекция сразу всех ручек MySubEntity, и соответственно я не могу определить какая ручка перемещается.
Acad::ErrorStatus MyEntity::subMoveGripPointsAtSubentPaths(const AcDbFullSubentPathArray & paths, const AcDbVoidPtrArray & gripAppData, const AcGeVector3d & offset, const int bitflags)
{
assertWriteEnabled();
if (1 > paths.length()) return Acad::eOk;
long ind = paths.at(0).subentId().index();
((MySubEntity*)entArr[ind - 1])->moveGripPointsAt(gripAppData, offset, bitflags);
return (Acad::eOk);
}
Похожих примеров в сети я нигде не нашел, поэтому прошу помощи.