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

ADN Club => AutoCAD .NET API => Тема начата: Badim от 14-07-2017, 09:16:38

Название: c# Динамический блок Изменение наборов объектов
Отправлено: Badim от 14-07-2017, 09:16:38
День добрый
подскажите пожалуйста,

есть готовый динамический блок (Штамп) с параметром "Растянуть1" к которому добавлена операция "Перемещение"
при изменении размера, част элементов блока(полилинии) перемещаются. Какие объекты должны перемещаться определено в "наборе объектов для операции"

Я программно меняю динамический блок - добавляю простой блок(Подпись) - и переопределяю его вхождения на листе.
Получаю динамический блок(Штамп) уже с внедренным простым блоком(Подпись)

Задача: как добавить новый элемент(Подпись) динамического блока в "наборе объектов для операции"
другими словами, чтобы Подпись была добавлена к операции "Перемещение", когда меняется размер динамического блока, Подпись перескакивала на новое место

в инете нашел варианты чтения параметров динамического блока
Код - C# [Выбрать]
  1. foreach (DynamicBlockReferenceProperty prop in pc)
  2.                     {
  3.                         // Start with the property name, type and description
  4.  
  5.                         ed.WriteMessage(
  6.                           "\nProperty: \"{0}\" : {1}",
  7.                           prop.PropertyName,
  8.                           prop.UnitsType
  9.                          
  10.                         );
  11.  
  12.                         if (prop.Description != "")
  13.                             ed.WriteMessage(
  14.                               "\n  Description: {0}",
  15.                               prop.Description
  16.                             );
  17.  
  18.                        
  19.                         // Is it read-only?
  20.  
  21.                         if (prop.ReadOnly)
  22.                             ed.WriteMessage(" (Read Only)");
  23.  
  24.                         // Get the allowed values, if it's constrained
  25.  
  26.                         bool first = true;
  27.  
  28.                         foreach (object value in prop.GetAllowedValues())
  29.                         {
  30.                             ed.WriteMessage(
  31.                               (first ? "\n  Allowed values: [" : ", ")
  32.                             );
  33.                             ed.WriteMessage("\"{0}\"", value);
  34.  
  35.                             first = false;
  36.                         }
  37.                         if (!first)
  38.                             ed.WriteMessage("]");
  39.  
  40.                         // And finally the current value
  41.  
  42.                         ed.WriteMessage(
  43.                           "\n  Current value: \"{0}\"\n",
  44.                           prop.Value
  45.                         );
  46.                     }


но не смог найти управления "наборами объектов"

или если не очень понятно объяснил, аналогичная похожая задача:
Как в динамическом блоке программно изменить свойство "видимость", например до выполнения команды были видны/невидны три окружности.
После выполнения програмного кода, видимость/невидимость уже  четыре окружности
Название: Re: c# Динамический блок Изменение наборов объектов
Отправлено: Александр Ривилис от 14-07-2017, 18:40:00
Задача: как добавить новый элемент(Подпись) динамического блока в "наборе объектов для операции"
другими словами, чтобы Подпись была добавлена к операции "Перемещение", когда меняется размер динамического блока, Подпись перескакивала на новое место
Увы, но в публичном API нет средств для добавления в "набор объектов для операции". Собственно говоря кроме возможности чтения/модификации свойств динамического блока в публичном API ничего нет. Считается, что динамический блок уже создан средствами самого AutoCAD и им можно управлять только меняя динамические свойства. Так что выбранный вами метод работы с динамическим блоком тупиковый.
Название: Re: c# Динамический блок Изменение наборов объектов
Отправлено: Александр Ривилис от 14-07-2017, 18:42:04
Как в динамическом блоке программно изменить свойство "видимость", например до выполнения команды были видны/невидны три окружности.
После выполнения програмного кода, видимость/невидимость уже  четыре окружности
А вот это сделать можно достаточно просто: http://adn-cis.org/kak-poluchit-dostup-i-izmenit-svojstva-dinamicheskogo-bloka-v-arx-i-.net.html
Название: Re: c# Динамический блок Изменение наборов объектов
Отправлено: Badim от 17-07-2017, 06:30:42
Увы, но в публичном API нет средств для добавления в "набор объектов для операции"
печалька
Название: Re: c# Динамический блок Изменение наборов объектов
Отправлено: Дмитрий Загорулькин от 17-07-2017, 12:44:06
Я программно меняю динамический блок - добавляю простой блок(Подпись) - и переопределяю его вхождения на листе.
Получаю динамический блок(Штамп) уже с внедренным простым блоком(Подпись)

Задача: как добавить новый элемент(Подпись) динамического блока в "наборе объектов для операции"
другими словами, чтобы Подпись была добавлена к операции "Перемещение", когда меняется размер динамического блока, Подпись перескакивала на новое место
Если у Вас уже есть блок "Подпись" в динблоке, так сразу и добавьте его в динамическую операцию при создании блока. А код будет только переопределять его отображение.
П.С. А вообще, странная ситуация. Подпись - элемент чертежа, который должен подтверждать личность лица, имеющего какое-то отношение к чертежу (разработал, проверил...). Она должна проставляться вручную. Если у Вас в динблоке заранее будет уже стоять подпись, то смысл в ней нулевой. Нет, я не вчера родился и знаю о такой практике в проектировании. Но поддерживать ее программными разработками - это уже перебор, на мой взгляд.
Название: Re: c# Динамический блок Изменение наборов объектов
Отправлено: Badim от 19-07-2017, 09:55:16
А код будет только переопределять его отображение.
на этом варианте и состановился,
только вместо подписи вначале будет пустой прямоугольник, по геометрии совпадающий с окошечком где должна быть подпись. И его как будто нет. На этот прямоугольник навешиваются все свойства. И далее прямоугольник при необходимости переопределяется в подпись.

Но поддерживать ее программными разработками - это уже перебор
У на используется вариант и ручной подписи и факсимилье