Тема: Работа с текстом

Всем добрый день. Создаю текст следующим образом:

AcDbText *pText = new AcDbText(ptText,sText,0,dHeight,dAngle);

1)Есть ли в ObjectARX функция центрирования текста,чтобы точка ptText воспринималась не как нижний левый край текста, а как его середина.Прошу написать эту функцию.
2)Прошу привести простейший пример задания стиля текста с помощью setTextStyle. Не могу разобраться что конкретно нужно передать в эту функцию.
Перерыл всю справку,так и не разобрался.Заранее большое спасибо.

(изменено: Александр Ривилис, 5 ноября 2009г. 19:00:57)

Re: Работа с текстом

1) Смотри методы:
AcDbText::setAlignmentPoint()
AcDbText::setVerticalMode()
AcDbText::setHorizontalMode()
для выравнивания текста
2) Методу AcDbText::setTextStyle нужно передать AcDbObjectId текстового стиля AcDbTextStyleTableRecord (т.е. его сначала нужно найти в таблице текстовых стилей AcDbTextStyleTable)

P.S.: А почему вопрос в форуме .NET, а не ObjectARX?

Re: Работа с текстом

Александр Ривилис,
можно чуть чуть по подробнее?
Написал следующее:

bool bBold = true;
bool bItalic = true;
AcDbTextStyleTableRecord TextStyleRecord;
TextStyleRecord.setTextSize(dHeight);
TextStyleRecord.setFont((ACHAR*)_T("Standart"),bBold,bItalic,1,1);

AcDbTextStyleTable Table;
Table.add(TextStyleRecord.id(),&TextStyleRecord);

pText->setTextStyle(TextStyleRecord.id());

Но текст выводится без изменений.Возможно нужно как то по другому обращаться с таблицей стилей.Не подскажете?

Re: Работа с текстом

1. В коде полная ерунда.
2. Создай тему в правильном разделе (ObjectARX).
3. Сформулируй четко что у тебя есть и что тебе нужно.

Re: Работа с текстом

Тоже для .Net: Каким образом можно выровнять текстовую строку?
Пытаюсь использовать AlignmentPoint, например:

dtextH.AlignmentPoint = new Point3d(aX, aY, 0);

Получаю ошибку:

 Autodesk.AutoCAD.Runtime.Exception: eNotApplicable
   в Autodesk.AutoCAD.DatabaseServices.DBText.set_AlignmentPoint(Point3d param0)

Re: Работа с текстом

Разобрался. Имеет смысл порядок установления свойств:
Так не работает:

dtext.Position = new Point3d(aX, aY, 0);
dtext.AlignmentPoint = new Point3d(aX, aY, 0);
dtext.HorizontalMode = TextHorizontalMode.TextRight;

Так работает:

dtext.Position = new Point3d(aX, aY, 0);
dtext.HorizontalMode = TextHorizontalMode.TextRight;
dtext.AlignmentPoint = new Point3d(aX, aY, 0);

Re: Работа с текстом

Не совсем разобрался :)
Если в одной транзакции применить свойство AlignmentPoint два раза (к двум обектам DBtext) например:

dtext.Position = new Point3d(aX, aY, 0);
dtext.HorizontalMode = TextHorizontalMode.TextRight;
dtext.AlignmentPoint = dtext.Position;
btr.AppendEntity(dtext);
trans.AddNewlyCreatedDBObject(dtext, true);

dtextH.Position = new Point3d(aX, aY, 0);
dtextH.HorizontalMode = TextHorizontalMode.TextLeft;
dtextH.AlignmentPoint = dtextH.Position;
btr.AppendEntity(dtextH);
trans.AddNewlyCreatedDBObject(dtextH, true);

снова получаю эту ошибку:

Autodesk.AutoCAD.Runtime.Exception: eNotApplicable
   в Autodesk.AutoCAD.DatabaseServices.DBText.set_AlignmentPoint(Point3d param0)

Re: Работа с текстом

Касательно работы с текстом - возможет будет интересно глянуть это.

Re: Работа с текстом

Не знаю актуально или нет ))) Короче - ошибка происходит из-за выравнивания текста. Тоже ловил такую - помогло задавание выравнивания "середина по центру" прежде чем задавать dtext.AlignmentPoint. Однако в моем случае - не страшно. Но иногда не надо сбивать выравнивание