ObjectARX自定义实体中使用AcDbText文字对齐方式的正确方式

ObjectARX自定义实体中使用文字对齐方式的正确方式

这是在自定义实体中借用AcDbText来显示文字的时候,设置对齐方式可能不生效的解决方式。
关键的两个语句,应该同样适用于jig,后台打开数据库生成文字,块定义生成文字。

效果展示

关键代码

//-----------------------------------------------------------------------------
//----- AcDbEntity protocols
Adesk::Boolean custEntity::subWorldDraw (AcGiWorldDraw *mode) {
	assertReadEnabled () ;

	AcDbObjectPointer<AcDbText> pText;
	Acad::ErrorStatus es= pText.create();
	if (Acad::eOk == es)
	{
		//setDatabaseDefaults() 非常关键的一句 来自 azj4win 
		pText->setDatabaseDefaults();
		pText->setColorIndex(1);	
		pText->setTextString(_T("呵呵"));
		pText->setHorizontalMode(AcDb::kTextCenter);
		pText->setVerticalMode(AcDb::kTextVertMid);
		pText->setAlignmentPoint(m_StartPoint*0.5+m_EndPoint.asVector()*0.5);
		pText->setHeight(2.5);
		//adjustAlignment(pDb) 关键2
		pText->adjustAlignment(curDoc()->database());
		//不要使用这种方式,否则颜色之类的属性无法显示,来自651864346的问题
		//pText->worldDraw(mode);
		//正常用法
		mode->geometry().draw(pText);
	}

	return (AcDbEntity::subWorldDraw (mode)) ;
}
posted @ 2022-03-29 21:11  edata  阅读(1011)  评论(0编辑  收藏  举报