Выбор ключевого слова и Нижняя черта (_)

Автор Тема: Выбор ключевого слова и Нижняя черта (_)  (Прочитано 28880 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Вот собственно код:
Код - C# [Выбрать]
  1.     [Rtm.CommandMethod("GetAttib")]    
  2.     static public void GetAttrib()
  3.     {
  4.         App.Document acDoc = App.Application.DocumentManager.MdiActiveDocument;
  5.         Db.Database acCurDb = acDoc.Database;
  6.         Ed.Editor acEd = acDoc.Editor;
  7.  
  8.         Ed.PromptKeywordOptions KeyOpt = new Ed.PromptKeywordOptions("\n Выбранный блок содержит следующие атрибуты:");
  9.         KeyOpt.AllowNone = true;
  10.         //KeyOpt.AllowArbitraryInput = true;
  11.         KeyOpt.AppendKeywordsToMessage = true;
  12.  
  13.         KeyOpt.Keywords.Add("ОТМЕТКА");
  14.         KeyOpt.Keywords.Add("ВТОРАЯ_СТРОКА");
  15.         KeyOpt.Keywords.Default = "ОТМЕТКА";
  16.  
  17.         Ed.PromptResult KeyRes = acEd.GetKeywords(KeyOpt);
  18.         if (KeyRes.Status != Ed.PromptStatus.OK)
  19.         {
  20.             acEd.WriteMessage("\n Отмена выбора атрибута.");
  21.             return;
  22.         }
  23.         acEd.WriteMessage("\n Выбран атрибут: " + KeyRes.StringResult);
  24.     }

Вот результат его выполнения:


Собственно вопрос: как сделать что бы все работало корректно?

Если "ВТОРАЯ_СТРОКА" заменить на "ВТОРАЯСТРОКА", то все работает отлично, однако такое решение мне не нравится.
Я понимаю, что вопрос наверное ламерский и ответ где-то на поверхности, но уже часа 4 его не могу найти. Заранее спасибо.
« Последнее редактирование: 30-04-2014, 16:00:34 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Символ подчеркивания (она же "Нижняя черта") является разделителем между локальным и глобальным именем. Например, "Да_Yes" позволяет вводить ключевое слово и как Да, и как Yes. Так что использовать символ подчеркивания в составе ключевого слова ты не можешь. Можешь попробовать не GetKeywords, а GetString.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
А если попробовать вот так? :
Код - C# [Выбрать]
  1. PromptKeywordOptions("\n Выбранный блок содержит следующие атрибуты: [ОТМЕТКА / ВТОРАЯ_СТРОКА]", "ОТМЕТКА СТРОКА");
только тогда KeyRes.StringResult будет "СТРОКА" для второй_строки, хотя не уверен, что вообще сработает
Алексей

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
GetString
Не получается =(
Валится на 15 строчке.
Код - C# [Выбрать]
  1.     [Rtm.CommandMethod("GetAttib")]    
  2.     static public void GetAttrib()
  3.     {
  4.         App.Document acDoc = App.Application.DocumentManager.MdiActiveDocument;
  5.         Db.Database acCurDb = acDoc.Database;
  6.         Ed.Editor acEd = acDoc.Editor;
  7.  
  8.         Ed.PromptStringOptions KeyOpt = new Ed.PromptStringOptions("\n Выбранный блок содержит следующие атрибуты:");
  9.         KeyOpt.AllowSpaces = true;
  10.         KeyOpt.AppendKeywordsToMessage = true;
  11.         KeyOpt.Keywords.Add("ОТМЕТКА");
  12.         KeyOpt.Keywords.Add("ВТОРАЯ_СТРОКА");
  13.         KeyOpt.Keywords.Default = "ОТМЕТКА";
  14.  
  15.         Ed.PromptResult KeyRes = acEd.GetString(KeyOpt);
  16.         if (KeyRes.Status != Ed.PromptStatus.OK)
  17.         {
  18.             acEd.WriteMessage("\n Отмена выбора атрибута.");
  19.             return;
  20.         }
  21.         acEd.WriteMessage("\n Выбран атрибут: " + KeyRes.StringResult);
  22.     }


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не получается =(
Валится на 14 строчке.
А я что-то говорил том, что тут нужно использовать ключевые слова ( т.е. KeyOpt.Keywords.Add("..."); ) ?
1. Убери все KeyOpt.Keywords.Add
2. Попробуй:
Код - C# [Выбрать]
  1. Ed.PromptStringOptions KeyOpt =
  2.   new Ed.PromptStringOptions("\n Выбранный блок содержит следующие атрибуты [ОТМЕТКА/ВТОРАЯ_ОТМЕТКА]: ");
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Цитировать
Command: NETLOAD
Command: GETATTIB
 Выбранный блок содержит следующие атрибуты [ОТМЕТКА/ВТОРАЯ_ОТМЕТКА]: ВТОРАЯ
 Выбран атрибут: ВТОРАЯ
Command: GETATTIB
 Выбранный блок содержит следующие атрибуты [ОТМЕТКА/ВТОРАЯ_ОТМЕТКА]: ОТМЕТКА
 Выбран атрибут: ОТМЕТКА
Command: GETATTIB
 Выбранный блок содержит следующие атрибуты [ОТМЕТКА/ВТОРАЯ_ОТМЕТКА]: ВТОРАЯ
 Выбран атрибут: ВТОРАЯ

Видимо придется как то обруливать эту ситуацию, т.к. делалось все это для тегов атрибутов и там эта нижняя черта сплошь и рядом.  :(

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Видимо придется как то обруливать эту ситуацию, т.к. делалось все это для тегов атрибутов и там эта нижняя черта сплошь и рядом.  :(
Для атрибутов вообще плохо ключевые слова использовать. Если у пользователя отключён динамический ввод (или как его там, когда опции списком рядом с курсором появляются), то выбор нужного варианта будет геморройным (написать полностью придётся).
Уж лучше маленькое окошко рисовать, со списком.
Алексей

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Видимо придется как то обруливать эту ситуацию, т.к. делалось все это для тегов атрибутов и там эта нижняя черта сплошь и рядом.  :(
Нужно выбирать атрибут по имени или в него можно ткнуть? Если можно ткнуть, то всё намного проще, а если нельзя, то в общем случае наверное нужно сделать свою форму со списком имен атрибутов и оттуда выбирать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Т.к. штатный qselect не позволяет отсеивать блоки по значению атрибута в блоке, то хотелось следующего:
1. Тыкнуть в блок
2. Получить список атрибутов в блоке и тыкнуть на нужном
3. Получить список возможных значений выбранного атрибута и тыкнуть в нужный
4. Подсветить, выделить, обозначить нужные блоки.

Все написал, и стал тестировать... попался блок с атрибутом содержащем  _ и тут понеслось =(

наверное нужно сделать свою форму со списком имен атрибутов и оттуда выбирать
Так и сделал. Работает.

ЗЫ. Добавлю видео:

« Последнее редактирование: 06-05-2014, 09:09:18 от Boxa.Shu »

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Славно! Пользователи должны оценить.
От себя добавлю, что диалоговые методы "выбрать один элемент из списка" (WinForm, ListBox) и "выбрать несколько элементов из списка" (WinForm, CheckedListBox) у меня уже давно поселились во вспомогательной библиотеке и уже много раз я не пожалел об этом :)

Оффлайн Константин Соков

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Boxa.Shu, может выложишь исходник с чертежем, так сказать поучиться уму разуму :)?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Так и сделал. Работает.
Неплохо. А ежели в модели отметок с одинаковыми значениями наберётся пару десятков (отображается в разных Layout), тогда как? :)

Оффлайн Владимир ШуАвтор темы

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Константин Соков, мне не жалко выложить, но стыдно. Корявость и криворукость в коде напрягают даже меня. Рефакторинг сделаю пару раз и выложу.

Андрей Бушман, Намекаешь на предварительный выбор? Нет, он не обрабатывается, ищутся все вхождения выбранного блока только в пространстве модели. Блок отметок использовал для проверки выбора измененных динамических блоков и как будет работать dll с тегами атрибутов содержащих "_".

Основная цель преследуемая при написании этой dll, это поиск блоков. Найти занумерованное отверстие, пояс. Что там с ним дальше делать, дело десятое. Главное найти.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
стыдно. Корявость и криворукость в коде напрягают даже меня.
Этот критерий бесконечен в течении времени - не парьтесь.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Порой рефакторинг может привести даже к тому, что код и вовсе перестаёт работать. :)