AcDbText
AcDbObjectId GetTextstyleId(CString sTextstylename){
AcDbTextStyleTable *pTable;
AcDbObjectId textstyleId = AcDbObjectId::kNull;
Acad::ErrorStatus es = Acad::eOk;
if ((es = acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTable, AcDb::kForRead)) == Acad::eOk){
if ((es =pTable->getAt(sTextstylename, textstyleId, Adesk::kFalse)) != Acad::eOk){
textstyleId =AcDbObjectId::kNull;
}
pTable->close();
}
return textstyleId;
}
double GetTextWidth(CString sText, CString sTextStyle, double dTextHeight)
{
AcDbObjectId idTextStyle = GetTextstyleId(sTextStyle);
AcGiTextStyle giTextStyle;
fromAcDbTextStyle(giTextStyle, idTextStyle);
giTextStyle.setTextSize(dTextHeight);
AcGePoint2d ptExt = giTextStyle.extents(sText.GetBuffer(), Adesk::kFalse, sText.GetLength(), Adesk::kFalse);
return ptExt.x;
}
OR
double GetTextWidth(AcDbObjectId idText)
{
ads_point ptLowerLeft, ptUpperRight;
ads_name ent;
struct resbuf * textent;
acdbGetAdsName(ent, idText);
textent = acdbEntGet(ent);
acedTextBox(textent, ptLowerLeft, ptUpperRight);
//acutPrintf("\nHeight: %.2f, Width: %.2f", ptUpperRight - ptLowerLeft, ptUpperRight - ptLowerLeft);
return ptUpperRight - ptLowerLeft;
}
AcDbText 对齐 setHsorizontalMode和setVerticalMode setAlignmentPoint 所有对其
在AutoCAD的对象ARX开发中,AcDbText对象提供了多种方法来设置文本的对齐方式。
水平对齐方式设置:
AcDbText::setHoleizontalMode(AcDb::TextHorzMode mode)
此函数用于设置文本的水平对齐方式,参数mode可以是以下值:
AcDb::kTextLeft:左对齐
AcDb::kTextCenter:居中对齐
AcDb::kTextRight:右对齐
AcDb::kTextAligned:与对齐点对齐
AcDb::kTextMid:居中对齐,与对齐点垂直居中对齐
AcDb::kTextFit:文字宽度调整模式
垂直对齐方式设置:
AcDbText::setVerticalMode(AcDb::TextVertMode mode)
此函数用于设置文本的垂直对齐方式,参数mode可以是以下值:
AcDb::kTextBottom:底部对齐
AcDb::kTextBaseline:基线对齐
AcDb::kTextTop:顶部对齐
AcDb::kTextMiddle:居中对齐
AcDb::kTextBottomBaseline:底部与基线对齐
AcDb::kTextTopBaseline:顶部与基线对齐
设置对齐点:
AcDbText::setAlignmentPoint(const AcGePoint3d& point)
此函数用于设置文本的对齐点,文本将根据设置的对齐方式相对于这个点进行对齐。
以下是一个简单的示例,演示如何创建一个AcDbText对象并设置其对齐方式:
#include "dbtext.h"
AcDbText* createAndSetTextAlignment(const AcGePoint3d& position, const AcGeVector3d& xAxis, const AcGeVector3d& yAxis) {
// 创建一个新的文本对象
AcDbText* text = new AcDbText();
// 设置文本内容
text->setContents(_T("Hello, World!"));
// 设置文本对齐点
text->setAlignmentPoint(position);
// 设置文本的水平对齐方式为居中
text->setHoleizontalMode(AcDb::kTextCenter);
// 设置文本的垂直对齐方式为居中
text->setVerticalMode(AcDb::kTextMiddle);
// 设置文本的旋转(可选,根据需要设置)
text->setRotation(acos(xAxis * yAxis) / M_PI * 180.0);
// 返回设置好的文本对象
return text;
}
在这个例子中,我们创建了一个新的AcDbText对象,并设置了它的内容、对齐点、水平和垂直对齐方式以及旋转角度。然后返回这个设置好的文本对象。在实际使用时,你需要将此函数调用放在你的ARX应用程序中合适的位置,并处理好对象的追加和清理。 AcGeVector3d Tnor = pText->normal();
AcGeVector3d xdir = Tnor.perpVector();
xdir.rotateBy(pText->rotation(), Tnor);
AcGeVector3d ydir = Tnor.crossProduct(vx);
页:
[1]