Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Михаил Голубев от 04-09-2021, 22:47:42

Название: AcEdJig и Keywords
Отправлено: Михаил Голубев от 04-09-2021, 22:47:42
Здравствуйте!
Не могу заставить AcEdJig распознавать keywords.
Добавил новый класс производный от AcEdJig с помощью визарда, работает с AcDbLine, графически все работет как должно.
Теперь понадобилcя ввод keyword во время джига, добавил вот:
Код - C++ [Выбрать]
  1. AcString inputPrompts[1] =
  2. {
  3.         "\nPick next point: [Size]"
  4. };
  5.  
  6. AcString kwords[1] =
  7. {
  8.         "Size"
  9. };
  10.  
и сюда:
Код - C++ [Выбрать]
  1. case kKW1:
  2. {
  3.         int newSize = 0;
  4.         if (acedGetInt(_T("\nEnter new size: "), &newSize) == RTNORM)
  5.         {
  6.                 dripl->AddSize(newSize);
  7.                 dripl->UpdateLastSegment();
  8.         }      
  9. }
  10.  
Теперь промпт показывает keyword, но совершенно не реагирует на ввод. Просто отвечает: "Invalid 2D point." и показывает то же самое.
Название: Re: AcEdJig и Keywords
Отправлено: Александр Ривилис от 04-09-2021, 23:07:40
Давай полный проект (без мусора). Подозреваю, что так как ты хочешь сделать не получится. По ключевому слову нужно завершать Jig, получать дополнительную информацию и затем запускать Jig. Или как минимум менять acedGetInt на acquireDist.
Название: Re: AcEdJig и Keywords
Отправлено: Михаил Голубев от 05-09-2021, 00:12:49
Спасибо, хорошо, этого я не прочел в доках.

Идея была с помощью кворда модифициривать вызывающий объект, и потом продолжить джиг.

Но, в принципе, можно из него и выйти, назначить значение и снова запустить. Я то не знал, что невозможно чего то другого сделать.

Прилагаю проект на всякий случай.
Название: Re: AcEdJig и Keywords
Отправлено: Михаил Голубев от 05-09-2021, 01:10:04
В общем, чего то не работает... Джиг не реагирует на ключевое слово.

Сделал теперь так, что ККВ1 завершает джигу, и занимаюсь своими делами вне. Потом снова запускаю джигу. Но это не работает, так как джига упорно не хочет распознавать ключевое слово...

Код - C++ [Выбрать]
  1. case kKW1:
  2.         quit = true;
  3.         break;
  4.  

Проект прилагается.
Название: Re: AcEdJig и Keywords
Отправлено: Александр Ривилис от 05-09-2021, 01:13:58
Михаил Голубев,
Завтра посмотрю. Пока же четко вижу, что ты не допонял идею.
Название: Re: AcEdJig и Keywords
Отправлено: Михаил Голубев от 05-09-2021, 09:40:12
Да, конечно, я же только начал изучать ObjectARX и вообще я не программист по профессии...
Название: Re: AcEdJig и Keywords
Отправлено: Александр Ривилис от 05-09-2021, 15:27:13
Да, конечно, я же только начал изучать ObjectARX и вообще я не программист по профессии...
Начинать изучать ObjectARX с написания Custom Entity и Jig - это конечно круто...
Название: Re: AcEdJig и Keywords
Отправлено: Александр Ривилис от 05-09-2021, 17:22:51
Но это не работает, так как джига упорно не хочет распознавать ключевое слово...
Т.е. по ветке case kKW1: ты вообще не проходишь? Тогда смотрим два момента:
1) Почему:
Код - C++ [Выбрать]
  1. AcString kwords[1] =
  2. {
  3.         "Size"
  4. };
а не
Код - C++ [Выбрать]
  1. AcString kwords[1] =
  2. {
  3.         _T("Size")
  4. };
P.S.: Кстати в ObjectARX начиная с версии 2007 везде только unicode-строки, т.е. _T("...") или L"..."

2. setKeywordList() следует перенести в DRILineJig::sampler(), т.к. setKeywordList() должно отрабатывать в цикле.

3. Рекомендую тебе посмотреть вот этот пример, взятый из ObjectARX 2007. Я его адаптировал для AutoCAD 2021...2022.


Название: Re: AcEdJig и Keywords
Отправлено: Михаил Голубев от 05-09-2021, 23:01:58
Спасибо, заработало.
Вообще-то, я, вчера, прочитал в доках, что:
Цитировать
This function must be called from within the AcEdJig::sampler()
Но чего-то, я как-то не сообразил или что-то меня отвлекло... и ктому же визард эту функцию не туда ставит -- для новичка трудно все это сообразить.