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

ADN Club => ObjectARX => Тема начата: ДДВ от 26-01-2016, 12:35:12

Название: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: ДДВ от 26-01-2016, 12:35:12
Рылся в документации - не нашел.
Собственно, какая функция этот размер устанавливает?

AcDbDimension::setDimasz использовать не получается:
error C2248: AcDbDimension::AcDbDimension: невозможно обратиться к protected член, объявленному в классе "AcDbDimension"
 (MSVS 2010, ObjectARX2013 )
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: Александр Ривилис от 26-01-2016, 14:03:48
Привествую на форуме!
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.  
В этом примере размер стрелки каждый раз увеличивается в два раза.
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: ДДВ от 26-01-2016, 14:53:44
текст понятен, да.
а надо после изменения вызывать close()?

"в явном виде конечно AcDbDimension::setDimasz вызывать нельзя"
почему конечно?
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: Александр Ривилис от 26-01-2016, 14:56:19
а надо после изменения вызывать close()?
Так как я использовал интеллектуальный указатель (AcDbObjectPointer), то close() вызвать не нужно - он вызовется в деструкторе pDim, т.е перед выходом из if ()...
"в явном виде конечно AcDbDimension::setDimasz вызывать нельзя"
почему конечно?
Потому что в таком виде можно было бы вызвать только статический член класса - учи C++.
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: ДДВ от 26-01-2016, 15:04:39
- учи C++.
ну начинается...

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

UPD не разобрался в форматировании
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: Александр Ривилис от 26-01-2016, 15:27:36
UPD не разобрался в форматировании
Прочти у меня в подписи как правильно форматировать код. Только язык выбери C++.
AcdbDimension d;
d.setDimasz(2);
Еще раз напоминаю про правила C++:
1) AcdbDimension и AcDbDimension - это разные классы.
2) AcDbDimension - это родительский класс для всех классов размеров. У него есть конструктор, но он ничего не создаёт. Добавить экземпляр этого класса в базу невозможно. Но можно создать экземпляр AcDbAlignedDimension или AcDbRotatedDimension и добавлять их в базу. В стеке практически никогда объекты, которые помещаются в базу AutoCAD не создаются - только через new имя_класса:
Код - C++ [Выбрать]
  1. AcDbRotatedDimension *pRot = new AcDbRotatedDimension();
Или по AcDbObjectId открывается уже созданный и добавленный в базу объект.
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: ДДВ от 26-01-2016, 15:38:50
AcdbDimension - опечатка у меня
имелось ввиду AcDbDimension
кстати, интеллектуальные указатели - это вери гуд.

PS: слушай, а ты всегда в такой манере общаешься?
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: Александр Ривилис от 26-01-2016, 15:54:24
PS: слушай, а ты всегда в такой манере общаешься?
Последние пятьдесят лет - с того момента как научился говорить. Но это оффтоп.
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: Андрей Бушман от 26-01-2016, 15:54:38
PS: слушай, а ты всегда в такой манере общаешься?
Ты демонстрируешь незнание элементарных вещей в C++, так что совет А.Н. совершенно в тему. Или ты ожидаешь, что тебя будут вести за ручку к светлому будущему? Вопрос риторический.
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: ДДВ от 26-01-2016, 16:04:58
Саша, Андрей, спасибо.
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: Андрей Бушман от 26-01-2016, 16:08:53
Саша, Андрей, спасибо.
Я тут не причём. :) По теме программирования на примере C++ очень хорошую книгу написал Стровструп. Недавно вышел русский перевод второго издания (мало ли, может заинтересует информация).
Название: Re: ObjectARX. Как задать размер стрелок у AcDbDimension?
Отправлено: Александр Ривилис от 26-01-2016, 16:10:43
Саша, Андрей, спасибо.
Пожалуйста. Будут вопросы по ObjectARX - обращайся. Без ответа не останешься.