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

ADN Club => AutoCAD .NET API => Тема начата: Atomohod от 07-06-2018, 20:10:29

Название: Как записать в атрибут?
Отправлено: Atomohod от 07-06-2018, 20:10:29
Здравствуйте!
Нужно записать значения нескольких переменных в атрибуты блока (не динамического) во время программного создания этого самого блока. Простое присваивание атрибуту значения поля не срабатывает. Поиск по документации ObjectARX 2015 ничего не подсказал. Как это можно сделать?
Название: Re: Как записать в атрибут?
Отправлено: Александр Ривилис от 07-06-2018, 21:28:29
Нужно записать значения нескольких переменных в атрибуты блока (не динамического) во время программного создания этого самого блока. Простое присваивание атрибуту значения поля не срабатывает.
Ничего не понял. Как это присвоение атрибуту не работает? Как ты присваиваешь? Ты не путаешь определение атрибута (AttributeDefinition) с  атрибутом (AttributeReference)?
Название: Re: Как записать в атрибут?
Отправлено: Atomohod от 07-06-2018, 21:53:22
Присваиваю в момент создания самого блока с атрибутом. Данные для записи в атрибут получаю от пользователя. Присваивание должно происходить при определении атрибута, то есть, как я понимаю, в AttributeDefinition так как я еще при создании определяю содержимое атрибута, а не работаю с готовым блоком, где уже есть AttributeReference. Я так рассуждал.
Код такой:
Код - C# [Выбрать]
  1. using (AttributeDefinition pages = new AttributeDefinition())
  2.                {
  3.                     pages.SetDatabaseDefaults(acBlkTbl.Database);
  4.                     pages.Verifiable = true;
  5.                     pages.Prompt = "Pages";
  6.                     pages.Tag = "Pages";
  7.                     pages.TextString = "curFormat.Type+" "+x+" "+curFormat.Multiplier";
  8.                     pages.WidthFactor = 0.7;
  9.                     pages.Height = 3;
  10.                     pages.Justify = AttachmentPoint.BottomLeft;
  11.                     pages.Position = new Point3d(-12.5, 15, 0);
  12.                     pages.AlignmentPoint = new Point3d(-12.5, 15, 0);
  13.                     pages.AdjustAlignment(acBlkTbl.Database);
  14.                     pages.Layer = "-10-Formats";
  15.  
  16.                     acBlkTblRec.AppendEntity(pages);
  17.                }
Название: Re: Как записать в атрибут?
Отправлено: Александр Ривилис от 07-06-2018, 21:56:16
а не работаю с готовым блоком, где уже есть AttributeReference. Я так рассуждал.
И это неправильно...
Название: Re: Как записать в атрибут?
Отправлено: Atomohod от 07-06-2018, 22:00:29
И это неправильно...
Почему? Ведь атрибут только создается, его еще не существует. Я его хочу создать с уже заранее определенной информацией внутри него. Или API не позволяет записывать в атрибуты данные из переменных в момент создания?
Название: Re: Как записать в атрибут?
Отправлено: Александр Ривилис от 07-06-2018, 22:06:43
И это неправильно...
Почему? Ведь атрибут только создается, его еще не существует. Я его хочу создать с уже заранее определенной информацией внутри него. Или API не позволяет записывать в атрибуты данные из переменных в момент создания?

Ты видишь в чертеже не определения атрибутов, а атрибуты. Можешь конечно записать и в определение атрибутов, но тогда тебе придётся переписать значения и в атрибуты после вставки блока.
Название: Re: Как записать в атрибут?
Отправлено: Atomohod от 07-06-2018, 22:10:33
ОК, не буду связываться с определениями, а как тогда реализовать запись данных в атрибут? Ведь блок в чертеже у меня появляется после окончания работы команды, а данные пользовательского ввода хранятся только на период выполнения команды. Как быть?
Название: Re: Как записать в атрибут?
Отправлено: Александр Ривилис от 07-06-2018, 22:11:18
А что это такое:
Код - C# [Выбрать]
  1. pages.TextString = "curFormat.Type+" "+x+" "+curFormat.Multiplier";
Это на каком языке???
Название: Re: Как записать в атрибут?
Отправлено: Atomohod от 07-06-2018, 22:16:12
C#, я передаю строку внутри которой две переменные и два пробела с Х посередине. По крайней мере пытаюсь передать. Подозреваю, что все что записано внутри кавычек не интерпретируется, но  pages.TextString требует только строку.
Название: Re: Как записать в атрибут?
Отправлено: Александр Ривилис от 07-06-2018, 22:36:10
C#, я передаю строку внутри которой две переменные и два пробела с Х посередине. По крайней мере пытаюсь передать. Подозреваю, что все что записано внутри кавычек не интерпретируется, но  pages.TextString требует только строку.
Не надо ничего подозревать. Просто учи C#.
Название: Re: Как записать в атрибут?
Отправлено: Владимир Шу от 08-06-2018, 07:08:36
Код - C# [Выбрать]
  1. pages.TextString = "curFormat.Type+" "+x+" "+curFormat.Multiplier";
так понимаю, первая  и последняя кавычки лишние...
ИМХО, если есть сложности с пониманием конкатенации строк, а это самый, самый базовый уровень знаний программирования (язык тут не принципиален), то писать для автокада пока рановато =(
Название: Re: Как записать в атрибут?
Отправлено: RevitTormentor от 05-08-2018, 21:37:36
Код - C# [Выбрать]
  1. pages.TextString = "curFormat.Type+" "+x+" "+curFormat.Multiplier";
так понимаю, первая  и последняя кавычки лишние...

Вроде x это не переменная.
Название: Re: Как записать в атрибут?
Отправлено: trir от 06-08-2018, 06:57:02
Код - C# [Выбрать]
  1.       pages.TextString = $"{curFormat.Type} {x} {curFormat.Multiplier}";
;)