BIMBase API的文字包括单行文字和多行文字两种,可根据需要应用于不同的场景。
7.3.1 单行文字
使用类BPTextEntity
可创建单行文字,常用接口见下表。
表7-6 文字对象接口
方法 | 描述 |
---|---|
Content() | 获取文字内容 |
setContent(PStringCR) | 设置文字内容 |
style() | 获取文字样式 |
setStyle(PStringCR) | 设置文字样式 |
justification() const | 获取文字对正方式 |
setJustification(P3DTextEntityJustification) | 设置文字对正方式 |
height() | 获取文字高度 |
setHeight(double height) | 设置文字高度 |
rotation() | 获取文字旋转角度 |
setRotation(double rotation) | 设置文字旋转角度 |
widthFactor() const | 获取文字宽度因子 |
setWidthFactor(double) | 设置文字宽度因子 |
pos() | 获取文字位置 |
setPos(::p3d::GePoint3dCR pos) | 设置文字位置 |
isUpsideDown() const | 获取文字是否颠倒 |
setIsUpsideDown(bool isUpsideDown) | 设置文字是否颠倒 |
isBackwards() const | 获取文字是否反向 |
setIsBackwards(bool isBackwards) | 设置文字是否反向 |
isVertical() const | 获取文字是否垂直 |
setIsVertical(bool isVertical) | 设置文字是否垂直 |
setUseFixedHeight(bool fixed) | 设置文字是否使用固定高度 |
示例代码7-6展示了单行文字的创建,首先创建一个单行文字对象,通过接口设置文字内容、字体、字高等属性,然后将文字保存到指定model上。
BIMBase::Core::IBPProjectManagerP pProjectManager = BPApplication::getInstance().getProjectManager();
if (pProjectManager == nullptr)
return;
BPProjectP pProject = pProjectManager->getMainProject();
if (pProject == nullptr)
return;
BPModelBaseP pModel = pProjectManager->getActiveModel();
if (pModel == nullptr)
return;
BPTextStyle::constructDefaultTextStyle();
BPTextEntityPtr text = BPTextEntity::create();
if (text.isNull())
return;
text->setContent(_T("测试文字Ex"));
text->setWidthFactor(1);
text->setStyle(L"微软雅黑");
text->setPos(GePoint3d::create(0, 0, 0));
text->setHeight(3000);
text->setStyle(L"sans-serif");
text->setUseFixedHeight(false);
text->addToProject(*pProject, pModel->getModelId());
代码7-6:单行文字创建示例代码
单行文字范例效果如图所示:

图7-5 单行文字范例范例效果图
7.3.2 多行文字
使用类BPMTextEntity
可创建多行文字或段落,多行文字较单行文字复杂,其关联类包括多行文字属性(MTextRunPropertiesAppender
), 多行文字段落属性(MTextParagraphPropertiesAppender
),多行文字内容(MTextTextLineAppender
)等,主要接口见下表。
表7-7 多行文字属性常用接口
方法 | 描述 |
---|---|
appendMTextPart(P3DMTextPtr mtext) | 把属性附加到多行文字Part上 |
color | 文字颜色 |
isBold | 文字加粗 |
isItalic | 文字斜体 |
isUnderlined | 文字下划线 |
isOverlined | 文字上划线 |
isSuperScript | 文字上标 |
isSubScript | 文字下标 |
overrideFont | 覆盖字体 |
overrideBigFont | 覆盖大字体 |
overrideFontSize | 覆盖字体大小 |
fontSize | 字体大小 |
font | 字体 |
bigFont | 大字体 |
表7-8 多行文字段落属性常用接口
方法 | 描述 |
---|---|
appendMTextPart(P3DMTextPtr mtext) | 把属性附加到多行文字Part上 |
mtext_FirstLineIndent | 首行缩进 |
mtext_HangingIndent | 悬挂缩进 |
isFullJustified | 是否两端对齐 |
P3DTextEntityJustification | 文字对齐方式 |
lineSpacingValue | 行距值 |
textStyleName | 文字样式名 |
表7-9 多行文字内容常用接口
方法 | 描述 |
---|---|
appendMTextPart(P3DMTextPtr mtext) | 把属性附加到多行文字Part上 |
mtextLine | 文字内容 |
多行文字的创建步骤较多,需要设置段落属性,文字属性;附加文字内容、换行符、分段符等,可参考示例代码7-7进行创建。
BIMBase::Core::IBPProjectManagerP pProjectManager = BIMBase::Core::BPApplication::getInstance().getProjectManager();
if (pProjectManager == nullptr)
return;
BPProjectP pProject = pProjectManager->getMainProject();
if (pProject == nullptr)
return;
BPModelBaseP pModel = pProjectManager->getActiveModel();
if (pModel == nullptr)
return;
//创建多行文字
BPMTextEntityPtr ptrMtext = new BPMTextEntity();;
BPFont font1 = BIMBase::Core::BPFontUtil::getDefaultTrueTypeFont();
//多行文字之间的段落设置
MTextParagraphPropertiesAppenderPtr appender = new MTextParagraphPropertiesAppender;
appender->isFullJustified = false;
appender->mtext_FirstLineIndent = 0;
appender->mtext_HangingIndent = 0;
appender->lineSpacingValue = 400;
ptrMtext->appendTextPart(appender);
//多行文字属性设置
MTextRunPropertiesAppenderPtr runAppender = new MTextRunPropertiesAppender;
runAppender->isItalic = false;
runAppender->isOverlined = false;
runAppender->font = font1;
runAppender->overrideFontSize = true;
runAppender->fontSize = GePoint2d::create(400, 600);
ptrMtext->appendTextPart(runAppender);
//多行文字内容设置
MTextTextLineAppenderPtr textAppender1 = new MTextTextLineAppender;
textAppender1->mtextLine = _T("测试多行文字行1");
ptrMtext->appendTextPart(textAppender1);
MTextLineBreakAppenderPtr ptrLineBreak = new MTextLineBreakAppender();
ptrMtext->appendTextPart(ptrLineBreak);
MTextTextLineAppenderPtr textAppender2 = new MTextTextLineAppender;
textAppender2->mtextLine = _T("测试多行文字行2");
ptrMtext->appendTextPart(textAppender2);
ptrMtext->addToProject(*pProject, pModel->getModelId());
代码7-7:构件符号变化事件示例