BIMBase API可直接创建表格,相关对象包括BPTableEntity
、BPTableCellEntity
、BPTableEntityManager
,常用接口见下表。
表7-10 表格对象常用接口
方法 | 描述 |
---|---|
setColmnNum(int) | 设置表格列数 |
setRowNum(int) | 设置表格行数 |
setColWidths(double) | 设置表格列宽(列宽一致) |
setRowHeight(double) | 设置表格行高(行高一致) |
setColWidthsArray(vector |
设置表格列宽数组 |
setRowHeightArray(vector |
设置表格行高数组 |
addCellForTable() | 给表格添加单元格 |
表7-11 表格单元数据说明
成员名 | 数据类型 | 说明 |
---|---|---|
m_rowIndex | int | 单元格行号 |
m_colIndex | int | 单元格列号 |
m_isMerged | bool | 是否为合并单元 |
m_context | BPMTextEntity | 单元格内容 |
表7-12 表格管理常用接口
方法 | 描述 |
---|---|
inserColumnfromLeft(int, double) | 从左侧插入列 |
inserColumnfromRight(int, double) | 从右侧插入列 |
inserRowfromTop(int, double) | 从上插入行 |
inserRowfromBottom(int, double) | 从下插入行 |
deleteColumnFromTable(int) | 删除列 |
deleteRowFromTable(int) | 删除行 |
splitCellsInTable(int, int) | 拆分单元格 |
mergeCellsInTable(BPTableCellEntity,BPTableCellEntity) | 合并单元格 |
setContextEntityForCell(BPGraphicElementP, int, int) | 设置单元格的多行文字 |
getContextEntityFromCell(BPEntityId&, int, int) | 获取单元格内多行文字的EntityId |
示例代码7-8创建了一个当前工程中Cube对象的列表。首先获取当前工程所有Cube对象,创建表格,在表格中展示每个Cube对象的长、宽、高信息。
//获取当前工程所有立方体
vector<DemoObject::CubeDemo> vctCube;
BPProjectP pProject = BPApplication::getInstance().getProjectManager()->getMainProject();
if (pProject == nullptr)
return;
BPEntityArray entityArray;
BPEntityUtil::getEntities(entityArray, *pProject, PBM_SCHEMA_Demo, PBM_CLASS_CUBE_Demo);
if (entityArray.getCount() == 0)
return;
for (int i = 0; i < entityArray.getCount(); i++)
{
BPEntityPtr curr = entityArray.getByIndex(i);
if (!curr || !curr.isValid())
continue;
BIMBase::Core::BPDataPtr ptrData = BPDataUtil::getDataOnEntity(*curr);
if (!ptrData.isValid())
continue;
//根据根据实例初始化
CubeDemo pbCube;
pbCube.initFromData(*ptrData);
vctCube.push_back(pbCube);
}
if (vctCube.size() == 0)
{
AfxMessageBox(_T("请先布置立方体"));
return;
}
if (pProject == nullptr)
return;
//创建表格
BPTableEntityP table = new BPTableEntity;
table->setRowNum(vctCube.size() + 2);
table->setColumnNum(4);
table->setColWidths(10000);
table->setRowHeight(2000);
table->addCellForTable();
BPModelBaseP pModel = pProject->getActiveModel();
if (pModel == nullptr)
return;
BPTableEntityManager tablemanager = BPTableEntityManager(table);
table->setTransform(p3d::GeTransform::create(0, 20000, 0));
p3d::P3DStatus status = table->addToProject(*pProject, pModel->GetModelId());
auto fun = [&](PString sCur,bool bUnderlinedCur,bool bBold, UInt32 colorCur, double HangingIndentCur, int cellR,int cellC)
{
//创建一个文字
BPMTextEntity pbmtext;
BPFont font1 = BIMBase::Core::BPFontUtil::getDefaultTrueTypeFont();
//多行文字之间的段落设置
MTextParagraphPropertiesAppenderPtr ptrAppender = new MTextParagraphPropertiesAppender;
ptrAppender->isFullJustified = false;
ptrAppender->mtext_FirstLineIndent = 0;
ptrAppender->mtext_HangingIndent = HangingIndentCur;
pbmtext.appendTextPart(ptrAppender);
//多行文字属性设置
MTextRunPropertiesAppenderPtr ptrRunAppender = new MTextRunPropertiesAppender;
ptrRunAppender->color = colorCur;
ptrRunAppender->isBold = bBold;
ptrRunAppender->isItalic = false;
ptrRunAppender->isUnderlined = bUnderlinedCur;
ptrRunAppender->isOverlined = false;
ptrRunAppender->font = font1;
ptrRunAppender->overrideFontSize = true;
ptrRunAppender->fontSize = GePoint2d::create(400, 600);
pbmtext.appendTextPart(ptrRunAppender);
//多行文字内容设置
MTextTextLineAppenderPtr ptrTextAppender = new MTextTextLineAppender;
ptrTextAppender->mtextLine = sCur;
pbmtext.appendTextPart(ptrTextAppender);
tablemanager.setContextEntityForCell(&pbmtext, cellR, cellC);
};
//表头
fun(L"立方体属性表", false,true, 2,1, 0, 2);
fun(L"序号", true, false, 0, 0,1, 0);
fun(L"长度", false, false, 0, 0,1, 1);
fun(L"宽度", true, false, 0,0, 1, 2);
fun(L"高度", false, false, 0,0, 1, 3);
BPTableCellEntity cell1, cell2;
cell1.m_rowIndex = 0;
cell1.m_colIndex = 0;
cell2.m_rowIndex = 0;
cell2.m_colIndex = 3;
tablemanager.mergeCellsInTable(cell1, cell2);
//表格内容
for (int n = 0; n < vctCube.size(); n++)
{
CString str,strL,strW,strH;
str.Format(_T("%d"),n+1);
strL.Format(_T("%d"), vctCube[n].getLength());
strW.Format(_T("%d"), vctCube[n].getWidth());
strH.Format(_T("%d"), vctCube[n].getHeight());
fun(str.GetString(), false, false, 0, 0, n + 2, 0);
fun(strL.GetString(), false, false, 0, 0, n + 2, 1);
fun(strW.GetString(), false, false, 0, 0, n + 2, 2);
fun(strH.GetString(), false, false, 0, 0, n + 2, 3);
}
代码7-8:表格创建