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
и Ваше терпение.


Навигация

[0] Главная страница сообщений

Перейти к полной версии