objcetARX表格类AcdbTable在使用时表格不显示或显示位置、数据有误的问题

    表格定义的方式:在创建表格实体后,添加各个属性是有指定顺序的,首先设置插入点、表格大小、行高列宽数据、插入数据,之后,接着设置表格和文本样式,最后使用
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;
}

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值