Alignment Point для AttributeDefinition. Разница между ObjectArx и .NET

Автор Тема: Alignment Point для AttributeDefinition. Разница между ObjectArx и .NET  (Прочитано 175 раз)

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

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

  • ADN OPEN
  • Сообщений: 49
  • Карма: 2
Здравствуйте.

Перевожу своё приложение из .NET API для автокада в ObjectArx на Mac OS. Столкнулся с определенным вопросом, связанным с расположением AttributeDefinition

Код - C++ [Выбрать]
  1.     pAttDef->setTag(wtag.c_str());
  2.     pAttDef->setLayer(wlayer.c_str());
  3.     pAttDef->setTextString(wtext.c_str());
  4.     pAttDef->setHeight(height);
  5.     pAttDef->setVisibility(invisible ? AcDb::kInvisible : AcDb::kVisible);
  6.     pAttDef->setLockPositionInBlock(true);
  7.     pAttDef->setHorizontalMode(AcDb::kTextCenter);
  8.     pAttDef->setAlignmentPoint(position);
  9.  

Данный кусок у меня создает AcDbAttribute

Код - C++ [Выбрать]
  1. AcDbAttribute* pAtt = new AcDbAttribute();
  2.                         pAtt->setPropertiesFrom(pAttDef);
  3.  
  4.                         AcGePoint3d attPos = pAttDef->position();
  5.                         attPos += pBlkRef->position().asVector();
  6.                         pAtt->setPosition(attPos);
  7.  
  8.                         pAtt->setHeight(pAttDef->height());
  9.                         pAtt->setTag(pAttDef->tag());
  10.                         pAtt->setTextString(pAttDef->textString());
  11.  
  12.                         Acad::ErrorStatus es = pBlkRef->appendAttribute(pAtt);
  13.                         if (es != Acad::eOk) {
  14.                             pAtt->erase();
  15.                         }
  16.                         pAtt->close();
  17.  

Данный код размещает все, как нужно, но Alignment Point сдвинут влево. То есть, если я надумаю руками поменять значение атрибута потом, он у меня сдвинется. Пример на картинке.




Подскажите, пожалуйста, есть ли возможность, чтобы при изменении значения атрибута текст был центрирован?

Второй вопрос, это почему у меня так много grip points? для сравнения этот же блокреференс из  .NET? (На ширину внимания не обращайте).

Заранее спасибо и буду очень благодарен за любой пинок в правильном направлении.






« Последнее редактирование: 21-12-2025, 21:54:02 от Александр Ривилис »

Отмечено как Решение exilerus 21-12-2025, 22:07:52

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

  • Administrator
  • *****
  • Сообщений: 13935
  • Карма: 1795
  • Рыцарь ObjectARX
  • Skype: rivilis
Почему не пользуешься методом setAttributeFromBlock?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13935
  • Карма: 1795
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, этот код работает в текущем чертеже, загруженом в редактор AutoCAD? Если нет, то следует еще и переключить рабочую базу на эту базу, а по завершении переключить обратно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 49
  • Карма: 2
Александр, спасибо Вам большое. Теперь все работает!

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

  • ADN OPEN
  • Сообщений: 49
  • Карма: 2
Да, код работает в чертеже, загруженном в редактор. Очень вам благодарен