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:构件符号变化事件示例