27/02/2019
Как проверить, что при редактировании XREF он сохранён или отвергнут
Когда пользователь редактирует внешнюю ссылку по месту, то невозможно определить сохранил ли он изменения или отверг их.А что если вашей программе необходимо определиться сохранена ли внешняя ссылка или нет:
Код - C++: [Выделить]
- if (e.GlobalCommandName == "REFCLOSE")
- {
- if (save){
- // Сценарий 1
- }
- if (discard){
- // Сценарий 2
- }
- }
Здесь вы узнаете один из способов для определения того, сохранены ли изменения во внешней ссылке или они отвергнуты.
Код - C++: [Выделить]
- class XrefCheckEditor;
- XrefCheckEditor* xrefEd = nullptr;
- class XrefLongTranReactor;
- XrefLongTranReactor* xrefTransRctr = nullptr;
- Acad::ErrorStatus getSysVar(const TCHAR* varName, TCHAR* val)
- {
- resbuf rb;
- if (acedGetVar(varName, &rb) == RTNORM) {
- assert(rb.restype == RTSTR);
- val = rb.resval.rstring;
- free(rb.resval.rstring);
- return(Acad::eOk);
- }
- else
- return(Acad::eInvalidInput);
- }
- namespace EditInPlaceXref {
- enum EditInPlaceXrefState
- {
- Discarded,
- Saved
- };
- EditInPlaceXrefState XrefState;
- EditInPlaceXrefState Reset() {
- XrefState = Discarded;
- return XrefState;
- }
- }
- class XrefLongTranReactor : public AcApLongTransactionReactor {
- virtual void endCheckIn(AcDbLongTransaction& lt) {
- if (lt.type() == AcDbLongTransaction::kXrefDb)
- {
- // Отлично! Изменения были сохранены.
- EditInPlaceXref::XrefState = EditInPlaceXref::Saved;
- }
- }
- };
- class XrefCheckEditor : public AcEditorReactor {
- virtual void commandEnded(const TCHAR* cmdStr) {
- if (wcscmp(cmdStr, L"REFCLOSE") == 0)
- {
- switch (EditInPlaceXref::XrefState)
- {
- case EditInPlaceXref::Saved:
- acutPrintf(L"\n Изменения во внешней ссылке сохранены ");
- EditInPlaceXref::Reset();
- break;
- case EditInPlaceXref::Discarded:
- acutPrintf(L"\n Изменения во внешней ссылке отвергнуты ");
- break;
- default:
- break;
- }
- }
- }
- };
- void watch() {
- if (xrefEd == nullptr && xrefTransRctr == nullptr) {
- xrefEd = new XrefCheckEditor();
- xrefTransRctr = new XrefLongTranReactor();
- }
- acedEditor->addReactor(xrefEd);
- acapLongTransactionManager->addReactor(xrefTransRctr);
- }
- void unWatch() {
- acedEditor->removeReactor(xrefEd);
- acapLongTransactionManager->removeReactor(xrefTransRctr);
- if (xrefEd != nullptr) {
- delete xrefEd;
- xrefEd = nullptr;
- }
- if (xrefTransRctr != nullptr) {
- delete xrefTransRctr;
- xrefTransRctr = nullptr;
- }
- }
- void checkIfXrefSavedOrDiscarded()
- {
- acutPrintf(_T("\nЭта функция проверяет сохранены или отвергнуты изменения
- во внешней ссылке при редактировании её по месту"));
- acutPrintf(_T("\nИзменения %s"),
- EditInPlaceXref::XrefState ? _T("сохранены") : _T("Отвергнуты"));
- }
Автор перевода: Александр Ривилис
Отредактировано 27.02.2019 в 16:30:46
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 27.02.2019Отредактировано 27.02.2019 в 16:30:46