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

Статьи => Опубликованные статьи => Тема начата: ADSK от 22-07-2016, 19:38:42

Название: Добавление полей к атрибутам блока, вставленными в пространство модели
Отправлено: ADSK от 22-07-2016, 19:38:42
Добавление полей к атрибутам блока, вставленными в пространство модели (http://adn-cis.org/dobavlenie-polej-k-atributam-bloka,-vstavlennyimi-v-prostranstvo-modeli.html)
Название: Re: Добавление полей к атрибутам блока, вставленными в пространство модели
Отправлено: Alexandr1993 от 09-07-2024, 10:04:20
Добрый день! Ознакомился со статьёй, разобрался, свою задачу по аналогии решил.
Но столкнулся с проблемой при создании поля со ссылкой на динамическое свойство. В этом случае строка с формулой имеет вид:

%<\AcObjProp Object(%<\_ObjId 1710562835008>%).Parameter(3).UserVariable \f "%lu2">%

Как оптимальнее/проще всего получить этот самый номер (как я понимаю номер динамического свойства в коллекции)? Если есть пример - то вообще отлично.
Название: Re: Добавление полей к атрибутам блока, вставленными в пространство модели
Отправлено: Alexandr1993 от 10-07-2024, 20:19:26
ADSK, очень нужен Ваш профессиональный совет. Самому решить данную проблему не получается. Уже подумываю над отказом от UserVariable в пользу атрибутов.
Название: Re: Добавление полей к атрибутам блока, вставленными в пространство модели
Отправлено: Владимир Шу от 16-07-2024, 17:00:51
А почему Вы не хотите пойти по самому простому пути, просто распарсить строку?
Как то так:
Код - C# [Выбрать]
  1.       string str = @"%<\AcObjProp Object(%<\_ObjId 1710562835008>%).Parameter(3).UserVariable \f ""%lu2"">%";
  2.  
  3.       if (str.Contains("Parameter("))
  4.       {
  5.         var t0 = str.Split("Parameter(".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Last();
  6.         t0 = t0.Split(')').First();
  7.         int n = int.Parse(t0);
  8.       }
Название: Re: Добавление полей к атрибутам блока, вставленными в пространство модели
Отправлено: Alexandr1993 от 16-07-2024, 17:06:02
Так я это строку должен создать и поместить в конструктор класса Field. И уже Field поместить в атрибут блока. И вот в примере (статья выше) - точно такое же выполняется для ссылки на атрибут блока. А мне нужно не на атрибут, а на UserVariable. И вопрос - как составить эту самую строку, а именно узнать номер Parameter. При этом я тут экспериментировал - это НЕ порядковый номер, потому что в блоках с 2-3 динамическими свойствами встречал Parameter(92), Parameter(103) и т.д.
Название: Re: Добавление полей к атрибутам блока, вставленными в пространство модели
Отправлено: Владимир Шу от 16-07-2024, 18:26:08
Обычно такую строку создают руками под конкретный динамический блок... но если Вам очень хочется, то можете поискать тут:
в красной рамке искомые Вами номера. Как соотнести эти номера с названиями  параметров, я не искал, тут уж Вы сами.
(https://icecream.me/uploads/7db1d6bbeb4d6c941afd5c1dbbb9ee8b.png)
Название: Re: Добавление полей к атрибутам блока, вставленными в пространство модели
Отправлено: Alexandr1993 от 17-07-2024, 15:48:24
Владимир Шу, благодарю за помощь, но я сам не смог найти аналогичное окно с этим Extension Dictionary - искал через MgdDbg -> Snoop Entities, выбрила вставку блока. И там у меня Extension Dictionary null.
Название: Re: Добавление полей к атрибутам блока, вставленными в пространство модели
Отправлено: Владимир Шу от 17-07-2024, 16:37:48
Alexandr1993, так бывает если дин. блок не изменяли, т.е. его отресетили или только вставили. Подергайте его за ручки и этот словарик появится.