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

ADN Club => AutoCAD .NET API => Тема начата: nolte от 05-09-2017, 01:19:33

Название: горизонтальное выравнивание атрибута(текст) в блоке
Отправлено: nolte от 05-09-2017, 01:19:33
при указании выравнивания по центру текстового атрибута автокад вставляет его в точку(0,0,0) вне зависимости от указанной точки вставки данного атрибута. можно с этим как то бороться
Код - C# [Выбрать]
  1. using (AttributeDefinition acAttDef1 = new AttributeDefinition())
  2.                                     {
  3.                                         acAttDef1.Position = new Point3d(20, 0, 0);
  4.                                         acAttDef1.Verifiable = true;
  5.                                         acAttDef1.Prompt = "Number";
  6.                                         acAttDef1.Tag = "Number";
  7.                                         acAttDef1.TextString = "0";
  8.                                         acAttDef1.Height = 1;
  9.                                         acAttDef1.Justify = AttachmentPoint.MiddleCenter;
  10.                                         acAttDef1.Layer = "0";
  11.                                         btr.AppendEntity(acAttDef1);
  12.                                         bt.UpgradeOpen();
  13.                                         bt.Add(btr);
  14.                                         tr.AddNewlyCreatedDBObject(btr, true);
  15.                                     }
Название: Re: горизонтальное выравнивание атрибута(текст) в блоке
Отправлено: Александр Ривилис от 05-09-2017, 08:19:20
Не хватает:
Код - C# [Выбрать]
  1. acAttDef1.AlignmentPoint = new Point3d(20, 0, 0);
  2. acAttDef1.AdjustAlignment(bt.Database);
Название: Re: горизонтальное выравнивание атрибута(текст) в блоке
Отправлено: nolte от 05-09-2017, 10:38:44
Александр Ривилис,  ругается чудо программа автокад

(https://s26.postimg.org/55p4ys4p1/11111.jpg) (https://postimg.org/image/55p4ys4p1/)

(https://s26.postimg.org/cbgw18ds5/2222222.jpg) (https://postimg.org/image/cbgw18ds5/)

Код - C# [Выбрать]
  1. using (AttributeDefinition acAttDef1 = new AttributeDefinition())
  2.                                         {
  3.                                             acAttDef1.Position = new Point3d(20.0, 0, 0);
  4.                                             acAttDef1.AdjustAlignment(bt.Database);
  5.                                             acAttDef1.Verifiable = true;
  6.                                             acAttDef1.Prompt = "Number";
  7.                                             acAttDef1.Tag = "Number";
  8.                                             acAttDef1.TextString = "0";
  9.                                             acAttDef1.Height = 1;
  10.                                             acAttDef1.Justify = AttachmentPoint.MiddleCenter;
  11.                                             acAttDef1.Layer = "0";
  12.                                             btr.AppendEntity(acAttDef1);
  13.                                             bt.UpgradeOpen();
  14.                                             bt.Add(btr);
  15.                                             tr.AddNewlyCreatedDBObject(btr, true);
  16.                                         }
Название: Re: горизонтальное выравнивание атрибута(текст) в блоке
Отправлено: Александр Ривилис от 05-09-2017, 10:45:35
Александр Ривилис,  ругается чудо программа автокад
И правильно делает. Попробуй вот так:
   
Код - C# [Выбрать]
  1. using (AttributeDefinition acAttDef1 = new AttributeDefinition())
  2.                                             {
  3.                                                 acAttDef1.SetDatabaseDefaults(bt.Database);
  4.                                                 acAttDef1.Verifiable = true;
  5.                                                 acAttDef1.Prompt = "Number";
  6.                                                 acAttDef1.Tag = "Number";
  7.                                                 acAttDef1.TextString = "0";
  8.                                                 acAttDef1.Height = 1;
  9.                                                 acAttDef1.Justify = AttachmentPoint.MiddleCenter;
  10.                                                 acAttDef1.Position = new Point3d(20.0, 0, 0);
  11.                                                 acAttDef1.AlignmentPoint = new Point3d(20, 0, 0);
  12.                                                 acAttDef1.AdjustAlignment(bt.Database);
  13.                                                 acAttDef1.Layer = "0";
  14.                                                 btr.AppendEntity(acAttDef1);
  15.                                                 bt.UpgradeOpen();
  16.                                                 bt.Add(btr);
  17.                                                 tr.AddNewlyCreatedDBObject(btr, true);
  18.                                             }
Название: Re: горизонтальное выравнивание атрибута(текст) в блоке
Отправлено: nolte от 05-09-2017, 11:24:29
Спасибо работает.
Название: Re: горизонтальное выравнивание атрибута(текст) в блоке
Отправлено: Александр Ривилис от 05-09-2017, 11:53:26
Спасибо работает.
А почему у тебя не работало уже понял, сравнив мой и твой код? Отличий ведь совсем мало...
Название: Re: горизонтальное выравнивание атрибута(текст) в блоке
Отправлено: nolte от 05-09-2017, 17:52:24
да уж. Немного :)
век живи век учись
Название: Re: горизонтальное выравнивание атрибута(текст) в блоке
Отправлено: Павел Алехин от 18-08-2024, 16:14:29
Добрый день. Расскажите пожалуйста какая функция у этих методов? Для чего они? Если можно поподробнее (для новичка).
Код - C# [Выбрать]
  1. acAttDef1.Position = new Point3d(20.0, 0, 0);
  2. acAttDef1.AlignmentPoint = new Point3d(20, 0, 0);
  3. acAttDef1.AdjustAlignment(bt.Database);

В библиотеке я нашел следующее определение, но мне это не помогло.
Position - эта функция возвращает точку вставки текста в координатах WCS.
AlignmentPoint - эта функция возвращает точку выравнивания текста.
AdjustAlignment - этот метод позволяет настроить текст для текстовых объектов, не являющихся резидентами базы данных, или текстовых объектов в транзакциях.

Когда я меняю значения Position - у меня ничего не происходит.
Когда я меняю значения AlignmentPoint - атрибут перемещается на новую позицию.
А AdjustAlignment вообще выдет исключение)))
Название: Re: горизонтальное выравнивание атрибута(текст) в блоке
Отправлено: Привалов Дмитрий от 19-08-2024, 15:24:47
Когда я меняю значения Position - у меня ничего не происходит.
Когда я меняю значения AlignmentPoint - атрибут перемещается на новую позицию.

В зависимости от AttachmentPoint может потребоваться указывать Position или AlignmentPoint  либо обе точки одновременно, другое применение может привести к ошибке.
Варианты использования можно посмотреть тут:
https://vbamodel.narod.ru/AutoCAD/idh_alignment.htm

Расскажите пожалуйста какая функция у этих методов? Для чего они? Если можно поподробнее (для новичка).
По описанию функций смотри в API, NET и ARX
https://adn-cis.org/forum/index.php?topic=61.0
arxmgd
arxdoc
Еще можешь посмотреть в ActiveX/COM
https://adn-cis.org/forum/index.php?topic=909.0

Или поискать в интернете
https://vbamodel.narod.ru/AutoCAD/idh_insertionpoint.htm
https://vbamodel.narod.ru/AutoCAD/idh_textalignmentpoint.htm