|
[code]1. 说明
本篇介绍创建文字和多行文字的函数,分别对 AcDbText 类和 AcDbMText 类的相关函
数进行封装。文字在 CAD 软件开发中涉及到较多的操作。
2. 思路
创建文字对象可以使用 AcDbText 类的构造函数
其构造函数定义为:
AcDbText( const AcGePoint3d& position, //position 指定文字的插入点;
const char* text, //text 是将要创建的文字对象的内容;
AcDbObjectId style = AcDbObjectId::kNull, //style 指定要使用的文字样式的 ID,默认情况下使用 AutoCAD 中缺省的文字样式;
double height = 0, //height 为文字的高度;
double rotation = 0); //rotation 为文字的旋转角度。
AcDbMText 类对应 AutoCAD 中的多行文字,该类的构造函数不接受任何参数,仅能创建一个空的多行文字对象。要创建多行文字,在调用构造函数之后,必须在将其添加到模型空间之前调用 setTextStyle 和 setContents 函数,也可同时调用其它函数来设置多行文字的特性。
3. 步骤
(1) 创建文字
//创建文字
static AcDbObjectId CreateText(const AcGePoint3d& ptInsert, const TCHAR* text, AcDbObjectId style = AcDbObjectId::kNull, double height = 2.5, double rotation = 0);//单行文字
static AcDbObjectId CreateMText(const AcGePoint3d& ptInsert, const TCHAR* text, AcDbObjectId style = AcDbObjectId::kNull, double height = 2.5, double width = 10);//多行文字
//单行文字
AcDbObjectId CCreateEnt::CreateText(const AcGePoint3d& ptInsert, const TCHAR* text, AcDbObjectId style, double height, double rotation)
{
AcDbText *pText = new AcDbText(ptInsert, text, style, height, rotation);
AcDbObjectId textId;
textId = CCreateEnt::PostToModelSpace(pText);
return textId;
}
//多行文字
AcDbObjectId CCreateEnt::CreateMText(const AcGePoint3d& ptInsert, const TCHAR* text, AcDbObjectId style, double height, double width)
{
AcDbMText *pMText = new AcDbMText();
// 设置多行文字的特性
pMText->setTextStyle(style);
pMText->setContents(text);
pMText->setLocation(ptInsert);
pMText->setTextHeight(height);
pMText->setWidth(width);
pMText->setAttachment(AcDbMText::kBottomLeft);
AcDbObjectId mTextId;
mTextId = CCreateEnt::PostToModelSpace(pMText);
return mTextId;
}
(2) 在acrxEntryPoint.cpp中
ACED_ARXCOMMAND_ENTRY_AUTO(CArxConfigApp, MidasMyGroup, MyDrawText, MyDrawText, ACRX_CMD_MODAL, NULL) //画文字
//当前项目中注册一个命令 AddText
static void MidasMyGroupMyDrawText()
{
// 创建单行文字
AcGePoint3d ptInsert(0, 5, 0);
AcDbObjectId textId;
textId = CCreateEnt::CreateText(ptInsert, _T("ObjectARX学习"));
// 创建多行文字
AcGePoint3d ptInsert1(0, 0, 0);
AcDbObjectId mTextId;
mTextId = CCreateEnt::CreateMText(ptInsert, _T("ObjectARX2015创建文字示例"));
CModifyEnt m_modifyEnt;
m_modifyEnt.ChangeColor(textId, 1);
m_modifyEnt.ChangeColor(mTextId, 1);
}
原文链接:https://blog.csdn.net/qq_42981953/article/details/121829628[/code] |
|