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