objectarx2023开发记录----创建单行文字

背景,需要在CAD中写入某些内容,此时,需要创建单行文字,设置为宋体,指定文字高度和位置,以及旋转角度等。

1、代码解析

首先,需要获取数据库的文字样式表,使用getAt函数,如下:

		//获取文字样式表
		AcDbTextStyleTable* pTextStyleTab;
		acdbHostApplicationServices()->workingDatabase()
			->getTextStyleTable(pTextStyleTab, AcDb::kForWrite);

		//simsun.ttc(宋体的字体文件名称)
		AcDbTextStyleTableRecord* pTextStyleTabRcd;
		pTextStyleTabRcd = new AcDbTextStyleTableRecord();

		//获取宋体字样
		pTextStyleTab->getAt(_T("宋体"), pTextStyleTabRcd, AcDb::kForRead);

其次,获取样式表记录的对象ID,如下:

		//添加到样式表
		pTextStyleTab->add(pTextStyleTabRcd);

		//获取对象ID
		AcDbObjectId styleId = pTextStyleTabRcd->objectId();

		//释放指针,不然实体无法删除等操作
		pTextStyleTabRcd->close();
		pTextStyleTab->close();

然后,创建单行文字,如下:

			AcDbText* ptr = new AcDbText();
			CString str = s[i];

			double height = 0.3;

			AcGePoint3d position1(position[i].x, position[i].y, 0);

			double rotation1 = rotation[i];

			ptr->setTextString(str);
			ptr->setHeight(height);
			ptr->setRotation(rotation1);
			ptr->setColorIndex(2);//1=红,2=黄,7=白

			//关联宋体样式
			ptr->setTextStyle(styleId);

			//对正模式设置--正中
			ptr->setHorizontalMode(AcDb::kTextMid);
			ptr->setVerticalMode(AcDb::kTextVertMid);

ptr->setAlignmentPoint(position1);//设置对正模式时,需使用此函数插入点,setpositin()函数无效

使用函数总结:

getAt();-----获取宋体样式
objectId();-----获取样式表记录的ID
close();-----关闭对应指针
setTextString();-----设置文字内容
setHeight();-----设置文字高度
setRotation();-----设置旋转角度,需放入弧度值
setColorIndex(2);-----设置文字颜色,1=红,2=黄,7=白
setTextStyle();----关联宋体样式函数
setHorizontalMode();----设置对正模式
setVerticalMode();----设置对正模式
setAlignmentPoint();----调用对正模式后,需要使用此函数设置插入点位置
appendAcDbEntity();----将实体添加到块表记录中

2、完整代码:

	static void setWenzi(std::vector<CString> s, std::vector<AcGePoint2d> position, std::vector<double> rotation)
	{
		//获取文字样式表
		AcDbTextStyleTable* pTextStyleTab;
		acdbHostApplicationServices()->workingDatabase()
			->getTextStyleTable(pTextStyleTab, AcDb::kForWrite);

		//simsun.ttc(宋体的字体文件名称)
		AcDbTextStyleTableRecord* pTextStyleTabRcd;
		pTextStyleTabRcd = new AcDbTextStyleTableRecord();

		//获取宋体字样
		pTextStyleTab->getAt(_T("宋体"), pTextStyleTabRcd, AcDb::kForRead);

		//设置新的字体名称并关联字体文件(需放在CAD字体文件夹目录下)
		//pTextStyleTabRcd->setName(_T("宋体 常规"));//字体显示名称
		//pTextStyleTabRcd->setFileName(_T("simsun.ttc"));//字体文件名称,打开控制面板,打开字体文件夹,右键字体属性查看

		//添加到样式表
		pTextStyleTab->add(pTextStyleTabRcd);

		//获取对象ID
		AcDbObjectId styleId = pTextStyleTabRcd->objectId();

		//释放指针,不然实体无法删除等操作
		pTextStyleTabRcd->close();
		pTextStyleTab->close();

		//添加到块表中
		AcDbBlockTable* pBT;
		acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBT, AcDb::kForRead);
		AcDbBlockTableRecord* pBTR;
		pBT->getAt(ACDB_MODEL_SPACE, pBTR, AcDb::kForWrite);

		size_t cc = s.size();
		for (int i = 0; i < cc; i++)
		{
			AcDbText* ptr = new AcDbText();
			CString str = s[i];

			double height = 0.3;

			AcGePoint3d position1(position[i].x, position[i].y, 0);

			double rotation1 = rotation[i];

			ptr->setTextString(str);
			ptr->setHeight(height);
			ptr->setRotation(rotation1);
			ptr->setColorIndex(2);//1=红,2=黄,7=白

			//关联宋体样式
			ptr->setTextStyle(styleId);

			//对正模式设置--正中
			ptr->setHorizontalMode(AcDb::kTextMid);
			ptr->setVerticalMode(AcDb::kTextVertMid);

			ptr->setAlignmentPoint(position1);//设置对正模式时,需使用此函数插入点,setpositin()函数无效

			pBTR->appendAcDbEntity(ptr);
			ptr->close();
		}

		pBT->close();
		pBTR->close();

	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值