表格定义的方式:在创建表格实体后,添加各个属性是有指定顺序的,首先设置插入点、表格大小、行高列宽数据、插入数据,之后,接着设置表格和文本样式,最后使用
pTable->generateLayout()生成表格的布局,最后加入数据库。这个顺序很重要,不然会有显示的问题,例如数据不显示、表格位置不正确等等,虽然在重新加载图纸后
能够正常的显示,但是按照这个顺序来做就可以直接生成正常的表格样式和表格数据。
这个感觉应该是覆盖的问题,没有按照顺序输入数据,在处理的时候后者覆盖了前者,但是数据的保存确实正确的,由于显示刷新只进行了一次,所以没有按照正确的方式
输入数据就导致了所谓表格在第一次生成的时候显示错误的问题。
Acad::ErrorStatus CreateRoadChart(AcGeMatrix3d mat, MaterialData& data)
{
/*表格定义的方式:在创建表格实体后,添加各个属性是有指定顺序的,首先应该输入数据,之后设置插入点、表格大小、行高列宽数据,接着设置表格和文本样式,最后使用
pTable->generateLayout()生成表格的布局,最后加入数据库。这个顺序很重要,不然会有显示的问题,例如数据不显示、表格位置不正确等等,虽然在重新加载图纸后
能够正常的显示,但是按照这个顺序来做就可以直接生成正常的表格样式和表格数据。*/
/*这个感觉应该是覆盖的问题,没有按照顺序输入数据,在处理的时候后者覆盖了前者,但是数据的保存确实正确的,由于显示刷新只进行了一次,所以没有按照正确的方式
输入数据就导致了所谓表格在第一次生成的时候显示错误的问题。*/
AcDbBlockTable* pBlkTbl;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForWrite);
AcDbBlockTableRecord* pBlkTblRcd;
pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForWrite);
AcDbTable* pTable = new AcDbTable;
//输入数据
pTable->setTextString(0, 0, _T("数据1"));
// 定义插入点
pTable->setPosition(AcGePoint3d(500, 100, 0));
pTable->transformBy(mat);
// 设置表格大小
pTable->setNumColumns(2);
pTable->setNumRows(3);
// 定义行高
pTable->setRowHeight(0, 30);
pTable->setRowHeight(1, 5);
pTable->setRowHeight(2, 5);
// 定义列宽
pTable->setColumnWidth(0, 45);
pTable->setColumnWidth(1, 40);
// 设置表格样式
AcDbDictionary* pDict = NULL;
AcDbObjectId idTblStyle;
acdbHostApplicationServices()->workingDatabase()->getTableStyleDictionary(pDict, AcDb::kForRead);
pDict->getAt(_T("Standard"), idTblStyle);
pDict->close();
pTable->setTableStyle(idTblStyle);
// 设置文本样式
AcDbTextStyleTable* pTextStyle = NULL;
acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTextStyle, AcDb::kForRead);
AcDbObjectId textID;
pTextStyle->getAt(_T("Standard"), textID);
pTextStyle->close();
if (!textID.isNull()) {
pTable->setTextStyle(textID);
}
// 生成表格布局
pTable->generateLayout();
// 添加表格到数据库
pBlkTblRcd->appendAcDbEntity(pTable);
pTable->close();
pBlkTblRcd->close();
pBlkTbl->close();
return Acad::eOk;
}