Как произвести поиск по части названия?

Автор Тема: Как произвести поиск по части названия?  (Прочитано 6596 раз)

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

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!

Можно ли задать проверку части имени блока на соответствие некоему заранее определенному имени? Операция похожая на поиск с подстановочными знаками типа *. Я пытался использовать ту же звездочку и ?. Выдает ошибку.

Например, есть два блока с названием Block Primary и Block Secondary. Помимо них в чертеже есть и другие блоки с другими названиями. Нужно подсчитать суммарное количество блоков начинающихся с Block.

Отмечено как Решение Александр Ривилис 04-06-2018, 23:34:06

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Код - C# [Выбрать]
  1. int nBlock = 0;
  2. string blockName = "Block Primary";
  3. if (Autodesk.AutoCAD.Internal.Utils.WcMatchEx("Block*", blockName, true))
  4. {
  5.   nBlock++;
  6. }
Но учти, что вставки динамических блоков могут иметь имя типа "*Unnn" и нужно сначала найти имя основного блока.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Спасибо! Динамических блоков у меня нет, только обычные с атрибутами.
А нужно ли открывать новую транзакцию и производить поиск внутри нее или достаточно определить метод внутри основной транзакции исполнения команды? Немного поясню. Смысл моей основной задачи в том, что нужно вставлять определенный блок, проверять количество уже вставленных в чертеж таких блоков и присваивать следующий по порядку номер и записывать его атрибут вставляемого блока. Вставка блока производится тоже командой.

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Смысл моей основной задачи в том, что нужно вставлять определенный блок, проверять количество уже вставленных в чертеж таких блоков и присваивать следующий по порядку номер и записывать его атрибут вставляемого блока.
1. Ты сейчас говоришь о вставке блока (BlockReference) или об определении блока (BlockTableRecord)?
2. Если разговор идёт о вставке блока, то тогда тебе нужно каждый раз сканировать весь чертеж, чтобы найти все вставки этого блока, что очень расточительно по времени. Если речь об определении блока, то просканировать таблицу блоков несложно, хотя я бы делал не так. Можно подписаться на событие добавления вставки блока и таким образом в момент вставки блока уже знать их количество. Тогда и сканировать ничего не нужно.
3. В принципе это всё можно сделать и в одной транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
А нужно ли открывать новую транзакцию...
У нас действует принцип "один вопрос - одна тема". Этот вопрос к вопросу этой темы не имеет никакого отношения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Я для себя представлял задачу так:
1 Создаю транзакцию
2 Определяю геометрию и добавляю ее в BlockTableRecord и в транзакцию
3 Определяю AttributeDefinition добавляю его в BlockTableRecord и в транзакцию
4 Добавляю BlockTableRecord в BlockTable и в транзакцию
5 Получаю ObjectId для BlockTableRecord
6 Вставляю как BlockReference
7 После вставки произвожу подсчет уже вставленных блоков и в атрибут только что вставленного блока записываю его текущий номер с учетом предшественников.

Получается, что сканирую весь чертеж.
Можно подписаться на событие добавления вставки блока и таким образом в момент вставки блока уже знать их количество. Тогда и сканировать ничего не нужно.
Интересный способ, попробую освоить. Спасибо за идею.