ObjectARX. Как задать размер стрелок у AcDbDimension?

Автор Тема: ObjectARX. Как задать размер стрелок у AcDbDimension?  (Прочитано 11629 раз)

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

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Рылся в документации - не нашел.
Собственно, какая функция этот размер устанавливает?

AcDbDimension::setDimasz использовать не получается:
error C2248: AcDbDimension::AcDbDimension: невозможно обратиться к protected член, объявленному в классе "AcDbDimension"
 (MSVS 2010, ObjectARX2013 )

Отмечено как Решение ДДВ 26-01-2016, 15:33:17

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Привествую на форуме!
AcDbDimension::setDimasz использовать не получается:
error C2248: AcDbDimension::AcDbDimension: невозможно обратиться к protected член, объявленному в классе "AcDbDimension"
 (MSVS 2010, ObjectARX2013 )
Хм. А как у тебя с C++? Это я к тому, что в явном виде конечно AcDbDimension::setDimasz вызывать нельзя. Можно так:
Код - C++ [Выбрать]
  1. static void SetDimSize(void)
  2. {
  3.   ads_name en;
  4.   ads_point p;
  5.   if (acedEntSel(_T("\nВыберите размер: "), en, p) == RTNORM) {
  6.     AcDbObjectId eId; acdbGetObjectId(eId,en);
  7.     AcDbObjectPointer<AcDbDimension> pDim(eId, AcDb::kForWrite);
  8.     Acad::ErrorStatus es = pDim.openStatus();
  9.     if (es == Acad::eOk) {
  10.       double asize = pDim->dimasz();
  11.       pDim->setDimasz(asize * 2);
  12.     } else if (es == Acad::eNotThatKindOfClass) {
  13.       acutPrintf(_T("\nЭто не размер!"));
  14.     } else {
  15.       acutPrintf(_T("\nОшибка открытия размера!"));
  16.     }
  17.   }
  18. }
  19.  
В этом примере размер стрелки каждый раз увеличивается в два раза.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
текст понятен, да.
а надо после изменения вызывать close()?

"в явном виде конечно AcDbDimension::setDimasz вызывать нельзя"
почему конечно?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
а надо после изменения вызывать close()?
Так как я использовал интеллектуальный указатель (AcDbObjectPointer), то close() вызвать не нужно - он вызовется в деструкторе pDim, т.е перед выходом из if ()...
"в явном виде конечно AcDbDimension::setDimasz вызывать нельзя"
почему конечно?
Потому что в таком виде можно было бы вызвать только статический член класса - учи C++.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
- учи C++.
ну начинается...

немного не так, почему нельзя:
Код - C++ [Выбрать]
  1. AcdbDimension d;
  2. d.setDimasz(2);

UPD не разобрался в форматировании
« Последнее редактирование: 26-01-2016, 15:27:58 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
UPD не разобрался в форматировании
Прочти у меня в подписи как правильно форматировать код. Только язык выбери C++.
AcdbDimension d;
d.setDimasz(2);
Еще раз напоминаю про правила C++:
1) AcdbDimension и AcDbDimension - это разные классы.
2) AcDbDimension - это родительский класс для всех классов размеров. У него есть конструктор, но он ничего не создаёт. Добавить экземпляр этого класса в базу невозможно. Но можно создать экземпляр AcDbAlignedDimension или AcDbRotatedDimension и добавлять их в базу. В стеке практически никогда объекты, которые помещаются в базу AutoCAD не создаются - только через new имя_класса:
Код - C++ [Выбрать]
  1. AcDbRotatedDimension *pRot = new AcDbRotatedDimension();
Или по AcDbObjectId открывается уже созданный и добавленный в базу объект.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
AcdbDimension - опечатка у меня
имелось ввиду AcDbDimension
кстати, интеллектуальные указатели - это вери гуд.

PS: слушай, а ты всегда в такой манере общаешься?

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

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

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
PS: слушай, а ты всегда в такой манере общаешься?
Ты демонстрируешь незнание элементарных вещей в C++, так что совет А.Н. совершенно в тему. Или ты ожидаешь, что тебя будут вести за ручку к светлому будущему? Вопрос риторический.

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Саша, Андрей, спасибо.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Саша, Андрей, спасибо.
Я тут не причём. :) По теме программирования на примере C++ очень хорошую книгу написал Стровструп. Недавно вышел русский перевод второго издания (мало ли, может заинтересует информация).

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Саша, Андрей, спасибо.
Пожалуйста. Будут вопросы по ObjectARX - обращайся. Без ответа не останешься.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение