Тема: перемещение с помощью "ручек"

Помогите разобраться....
определила метод getGripPoints() - все исправно работает, "ручки" рисуются, за них "хватается", но (!) объект перерисовывается в старом положении и при завершении перемещения - остается на старом месте.
метод transformBy() не выполняется, собственно как и moveGripPointsAt();
По какой причине это может происходить?
Прим. коммандой move объект перемещается.

Re: перемещение с помощью "ручек"

> Yankel
transformBy() в этом случае и не должен вызываеться. А правильная ли сигнатура у функции moveGripPointsAt()? Вообще-то функций с таким именем две:

Acad::ErrorStatus MyEntityClass::moveGripPointsAt (const AcDbIntArray &indices, const AcGeVector3d &offset);
Acad::ErrorStatus MyEntityClass::moveGripPointsAt (const AcDbVoidPtrArray &gripAppData, const AcGeVector3d &offset, const int bitflags);

Какую из них ты используешь и что она делает? Если используется первая, то вторая должна возвращать Acad::eNotImplemented;

Re: перемещение с помощью "ручек"

Обе moveGripPointsAt() ничего не выполняют кроме вывода строки, чтобы проверить - выполняются ли код методов... и он выполнился.... :(
описание двух getGripPoints()

Acad::ErrorStatus
shlgKotel::getGripPoints(AcGePoint3dArray&,
                         AcDbIntArray&,
                         AcDbIntArray&) const{
  return Acad::eOk;
}
Acad::ErrorStatus
shlgKotel::getGripPoints(AcDbGripDataPtrArray& grips,
                         const double viewSize,
                         const int gripSize,
                         const AcGeVector3d& curViewDir,
                         const int bitflags) const{
  assertReadEnabled();
  acutPrintf("\n grip \n");
  AcDbGripData *pCenterCoordGrip = new AcDbGripData();
  pCenterCoordGrip->setGripPoint(pKotelCenter);
  grips.append(pCenterCoordGrip);    
  return Acad::eOk;
}

описание двух moveGripPointsAt()

Acad::ErrorStatus
shlgKotel::moveGripPointsAt(const AcDbIntArray&,
                            const AcGeVector3d&){
  acutPrintf("\n movegrip 1\n");
  return Acad::eOk;
}
Acad::ErrorStatus
shlgKotel::moveGripPointsAt(const AcDbVoidPtrArray& gripAppData,
                            const AcGeVector3d& offset,
                            const int bitflags){
  assertWriteEnabled();
  acutPrintf("\n movegrip 2\n");
  return Acad::eOk;
}

Re: перемещение с помощью "ручек"

Yankel пишет:

и он выполнился.... :(

Ну и прекрасно. Теперь осталось в одном из методов moveGripPointsAt выполнить модификацию своего примитива (в данном примере - изменить центр), а из второго вернуть Acad::eNotImplemented. В том методе, который будет модифицировать примитив обязательно должен присутствовать вызов assertWriteEnabled();

Re: перемещение с помощью "ручек"

ой, "не" попустила в самой главной строчке...
Программный код этих методов не выполняется (ни "movegrip 1" ни "movegrip 2" не были выведены на экран) ....

Acad::ErrorStatus
shlgKotel::moveGripPointsAt(const AcDbIntArray&,
                            const AcGeVector3d&){
  acutPrintf("\n movegrip 1\n");
  return [b]Acad::eNotImplemented[/b];
}
Acad::ErrorStatus
shlgKotel::moveGripPointsAt(const AcDbVoidPtrArray& gripAppData,
                            const AcGeVector3d& offset,
                            const int bitflags){
  [b]assertWriteEnabled();[/b]
  acutPrintf("\n movegrip 2\n");
  [b]pKotelCenter+=offset;[/b]
  return Acad::eOk;
}

Вот так теперь у меня...... и все равно не выполняются эти строки.....

Re: перемещение с помощью "ручек"

> Yankel
Очень странно. Если хочешь выложи .h и .cpp-файлы этого класса, а еще лучше пришли мне на e-mail весь проект (в архиве). Постараюсь помочь.
А заодно уточни версию AutoCAD и ObjectARX SDK.