ADN Club > ObjectARX
Undo и AcGePoint2dArray
(1/1)
alex-63:
Custom object(немного низменный пример Polysamp), содержащий AcGePoint2dArray mVertex,
при команде undo происходит увеличение точек в AcGePoint2dArray ( append),
а не возвращение в предыдущее значение. Хотя при записи я использовал assertWriteEnabled();
И в документации вроде написано что даже если вы планируете реализовать механизм applyPartialUndo
на первых этапах разработки можете полагаться на автоматическую отмену.
Может кто подскажет как реализовать undo в этом случае? ???
Вопрос 2 когда выполняется метод AsdkPoly::applyPartialUndo из документации? :(
(Или у меня тут что-то поломано с исходным кодом?) :-\
AutoCAD почему то игнорирует applyPartialUndo.
--- Код - C++ [Выбрать] ---Acad::ErrorStatus AkPret99::subTransformBy(const AcGeMatrix3d& xform){ if (mDragDataFlags & kCloneMeForDraggingCalled) { mDragDataFlags |= kUseDragCache; mDragPlaneNormal = mPlaneNormal; mDragElevation = mElevation; AcGeMatrix2d xform2d(xform.convertToLocal(mDragPlaneNormal,mDragElevation)); mDragCenter = mCenter; mDragCenter.transformBy(xform2d); mDragPlaneNormal.normalize(); } else { assertWriteEnabled(); AcGeMatrix2d xform2d(xform.convertToLocal(mPlaneNormal,mElevation)); mCenter.transformBy(xform2d); for(int i=0;i<mVertex.length();i++) mVertex.at(i)=mVertex.at(i).transformBy(xform2d); mPlaneNormal.normalize(); } return Acad::eOk;}
((-1 . <Entity name: 7ff4a9e0d1e0>) (0 . "AKPRET99") (330 . <Entity name: 7ff4a9e03980>) (5 . "2EFE") (100 . "AcDbEntity")
(67 . 0) (410 . "Model") (8 . "0") (48 . 100.0) (100 . "AkPret99") (90 . 1) (10 7051.0 7788.5 0.0)
(90 . 2) (210 0.0 0.0 1.0) (1 . "test") (340 . <Entity name: 7ff4a9e072a0>) (40 . 0.0)
(12 6397.0 7237.0 0.0) (12 7705.0 8340.0 0.0))
после undo
(-1 . <Entity name: 7ff4a9e0d1f0>) (0 . "AKPRET99") (330 . <Entity name: 7ff4a9e03980>) (5 . "2EFF") (100 . "AcDbEntity")
(67 . 0) (410 . "Model") (8 . "0") (48 . 100.0) (100 . "AkPret99") (90 . 1) (10 8517.0 7788.5 0.0)
(90 . 4) (210 0.0 0.0 1.0) (1 . "test") (340 . <Entity name: 7ff4a9e072a0>)
(40 . 0.0)
(12 9102.0 7237.0 0.0) (12 10410.0 8340.0 0.0) (12 7863.0 7237.0 0.0) (12 9171.0 8340.0 0.0))
Александр Ривилис:
Проверь корректность работы этих методов:
--- Код - C++ [Выбрать] ---virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* filer); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* filer) const;
alex-63:
Точно в dwgInFields была ошибка.
Необходимо было добавить mVertex.removeAll()
--- Код - C++ [Выбрать] ---mVertex.removeAll(); for(int i=0;i<len;i++) {AcGePoint2d pt; pFiler->readPoint2d(&pt); mVertex.append(pt); }
Спасибо за помощь :D
и Ваше терпение.
Навигация
Перейти к полной версии