|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
(ObjectARX) Вызов стандартной процедуры отрисовки полилинии пользователем
Регистрация: 27.06.2010
Сообщений: 6
|
||
Просмотров: 4007
|
|
||||
Регистрация: 27.06.2010
Сообщений: 6
|
использую:
Код:
а после первого ввода пользователя. встал вопрос - как дождаться конца всей отрисовки? нашла в инете вариант с проверкой переменной CMDACTIVE, но поскольку я вызываю acedCommand из комманды - CMDACTIVE уже == 1, а значит ценной для меня информации не несет. решила попробовать SendStringToExecute, однако эта функция заносит комманду _pline в историю комманд это очень нежелательный эффект - если нажать ENTER по окончании отрисовки будет вызвана не моя комманда, а _pline сейчас думаю копать в сторону AcEditorReactor::commandEnded() стОит? --------------------------------------------------------------------- добавлено позже: ой... кажится что-то получилось... (sorry, код хуже индусячего - эксперементировала) выглядит примерно так: Код:
однако это кажется какимто очень кривым, с точки зрения идеологии. может я чтото не заметила и есть вариант лучше? Последний раз редактировалось lene-caress, 27.06.2010 в 21:38. |
|||
![]() |
|
||||
Регистрация: 27.06.2010
Сообщений: 6
|
здравствуйте еще раз!
прошу прощения за поднятие топика. возникло продолжение проблемы. код который я писала выше, выполнялся по комманде в коммандной строке. сейчас требуется выполнить тоже-самое но только по кнопочке в CAdUiPalette. при использовании того-же кода в обработчике нажания на кнопку acedCommand не срабатывает. для контроля использую более простую комманду: acedCommand( RTSTR, _T( "_zoom" ), RTSTR, _T( "_e" ), 0 ); с ней ситуация аналогичная - в первом случае работает, во втором - нет. как я поняла, первый случай (коммандная строка) выполняется в контексте документа. а при нажатии на кнопку в CAdUiPalette код выполняется в контексте приложения. это и является причиной проблемы. в первом случае acDocManager->isApplicationContext() говорит false, во втором true. в обоих случаях acDocManager->curDocument()->fileName() сообщает имя необходимого документа. пробовала найти способ переключить конекст... так: acDocManager->setCurDocument( acDocManager->curDocument(), AcAp::kNone, true ); или так: acDocManager->activateDocument( acDocManager->curDocument(), false ); пробовала блокировать документ: acDocManager->lockDocument( acDocManager->curDocument() ); acedCommand( RTSTR, _T( "_zoom" ), RTSTR, _T( "_e" ), 0 ); acDocManager->unlockDocument( acDocManager->curDocument() ); результат одинаоковый - абсолютно ничего. возникает вопрос - как всетаки вызвать стандартную операцию отрисовки полилинии из контекста приложения? есть какой-то правильный способ переключить контекст? есть мысль, что можно получить нужную структуру AcEdCommandStruc, описывающую нужную функцию через acedCmdLookup. стоит ли пробовать? по идее должна работать: acDocManager->sendStringToExecute( acDocManager->curDocument(), ... но при её использовании в истории комманд остается введенная, а это крайне нежелательный эффект или есть другой способ вызова процедуры отрисовки?? (логика подсказывает, что нечто подобное должно быть возможно, минуя коммандную систему) |
|||
![]() |
|
||||
Только через sendStringToExecute - реализуй свой код в виде команды и запускай его из панели при помощи sendStringToExecute
Мысль неправильная, т.к. PLINE - встроенная команда и в таблице команд не фигурирует. Последний раз редактировалось Александр Ривилис, 15.07.2010 в 17:20. |
||||
![]() |