как записать blockReference в TypedValue

Автор Тема: как записать blockReference в TypedValue  (Прочитано 4385 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Кто-нибудь знает как правильно записать в фильтр blockReference в Dxf в TypedValue  acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "BLOCK"), 0);? Перепробовал все комбинации со словом блок.
Код - C# [Выбрать]
  1.  [CommandMethod("FilterSelectionSet")]
  2.         public static void FilterSelectionSet()
  3.         {
  4.             // Get the current document editor
  5.             Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor;
  6.  
  7.             // Create a TypedValue array to define the filter criteria
  8.             TypedValue[] acTypValAr = new TypedValue[1];
  9.             acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "BLOCK"), 0);
  10.  
  11.             // Assign the filter criteria to a SelectionFilter object
  12.             SelectionFilter acSelFtr = new SelectionFilter(acTypValAr);
  13.  
  14.             // Request for objects to be selected in the drawing area
  15.             PromptSelectionResult acSSPrompt;
  16.             acSSPrompt = acDocEd.GetSelection(acSelFtr);
  17.  
  18.             // If the prompt status is OK, objects were selected
  19.             if (acSSPrompt.Status == PromptStatus.OK)
  20.             {
  21.                 SelectionSet acSSet = acSSPrompt.Value;
  22.  
  23.                 Application.ShowAlertDialog("Number of objects selected: " +
  24.                                             acSSet.Count.ToString());
  25.             }
  26.             else
  27.             {
  28.                 Application.ShowAlertDialog("Number of objects selected: 0");
  29.             }
  30.         }

Отмечено как Решение Atomohod 15-10-2019, 22:48:05

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: как записать blockReference в TypedValue
« Ответ #1 : 15-10-2019, 22:39:54 »
Кто-нибудь знает как правильно записать в фильтр blockReference в Dxf в TypedValue  acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "BLOCK"), 0);? Перепробовал все комбинации со словом блок.
"INSERT" - ты бы глянул "Справочник по DXF": http://help.autodesk.com/view/OARX/2019/RUS/?guid=GUID-235B22E0-A567-4CF6-92D3-38A2306D73F3
http://help.autodesk.com/view/OARX/2019/RUS/?guid=GUID-28FA4CFB-9D5E-4880-9F11-36C97578252F
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: как записать blockReference в TypedValue
« Ответ #2 : 16-10-2019, 11:04:36 »
Немного дополню. Вот эти вот утилиты вот прямо должны быть по умолчанию установлены на компьютере разработчика! ;)
С помощью ARXDBG данная информация извлекается из любого объекта чертежа за пару кликов.

Как альтернативный вариант - можно воспользоваться LISP-выражением:
Код - Auto/Visual Lisp [Выбрать]
  1. (entget (car (entsel)))
Получаемый список содержит практически всю необходимую информацию для составления фильтра:
Команда: (entget (car (entsel)))
Выберите объект: ((-1 . <Имя объекта: 1773a3545a0>) (0 . "INSERT") (330 . <Имя объекта: 177194b2f00>) (5 . "32A") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (2 . "Тест") (10 260.871 140.083 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))



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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: как записать blockReference в TypedValue
« Ответ #3 : 17-10-2019, 21:30:04 »
А как указать фильтру, что нужен именно динамический блок?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: как записать blockReference в TypedValue
« Ответ #4 : 17-10-2019, 21:33:44 »
А как указать фильтру, что нужен именно динамический блок?
Увы никак. В фильтруемых DXF-кодах этой информации нет. Более того даже отфильтровать по имени динамический блок достаточно сложно, так как только у "нетронутого" динамического блока имя совпадает с тем, которое ему присвоили при создании. Но если хоть немного изменить вставку блока (например, изменить его видимость), то мы имеем уже другое имя (формата "*Unnn") для вставки блока.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение