CAD二次开发之图纸特性字段AcDbDatabaseSummaryInfo

一、CAD接口类AcDbDatabaseSummaryInfo

接口函数

acdbGetSummaryInfo(pDb, pSum);
addCustomSummaryInfo(key, value);
acdbPutSummaryInfo(pSum);

二、使用方法

1. 实现功能:

在一张图纸中定义好字段,插入到另外一张图中,对应的字段会更新值。

原图纸
需要将对应位置写入字段的表达式
例如
%<\AcVar CustomDP.项目名称>%
%<\AcVar CustomDP.客户名称>%
%<\AcVar CustomDP.项目编号>%
%<\AcVar CustomDP.生产单号>%
CAD二次开发之图纸特性字段AcDbDatabaseSummaryInfo_第1张图片
新图纸在创建时需要创建以上字段
CAD二次开发之图纸特性字段AcDbDatabaseSummaryInfo_第2张图片
将源图纸以块的形式插入到新图纸中,对应的字段值会自动更新。

2.主要代码块

//加锁当前档
				acDocManager->lockDocument(acDocManager->curDocument());
//插入图纸
				InsertDwgFilePath(acdbHostApplicationServices()->workingDatabase(),
					sTitleDwgFilePath,
					AcGePoint3d(0, 0, 0),
					1, 0);
				AcDbDatabase* pDb1 = NULL;
				//将项目信息写入图纸信息中
				AcDbDatabaseSummaryInfo* pSum = NULL;
				Acad::ErrorStatus es = acdbGetSummaryInfo(pDb, pSum);
				if (es == ErrorStatus::eOk)
				{
					for (int i = 0; i < ProjectInforArray.GetSize(); i++)
					{
						pair<CString, CString> Project;
						Project = ProjectInforArray[i];

						ACHAR* key = (ACHAR*)((LPCTSTR)Project.first);
						ACHAR* value = (ACHAR*)((LPCTSTR)Project.second);

						es = pSum->addCustomSummaryInfo(key, value);
						if (es != ErrorStatus::eOk)
						{
							continue;
						}

					}
					// 刷新到图纸
					es = acdbPutSummaryInfo(pSum);


				}

				//对图纸状态的恢复操作
				acDocManager->unlockDocument(acDocManager->curDocument());//解锁当前档
				//保存图纸
				SaveAs(pDb, sDwgFileName);

三、 ODA平台C#实现

//保存项目信息到图纸的特性中
            Dictionary<string, string> ProjectInforArray = new Dictionary<string, string>();
            ProjectInforArray.Add("项目名称", "");
            ProjectInforArray.Add("客户名称", "");
            ProjectInforArray.Add("生产单号", "");
            ProjectInforArray.Add("项目编号", "");
 using (Transaction trx = database.TransactionManager.StartTransaction())
                {

                    DatabaseSummaryInfoBuilder BuilderSummaryInfo = new DatabaseSummaryInfoBuilder();
                    foreach (KeyValuePair<string, string> Project in ProjectInforArray)
                    {
                        BuilderSummaryInfo.CustomProperties.Add(Project.Key, Project.Value);
                    }
                    database.SummaryInfo = BuilderSummaryInfo.ToDatabaseSummaryInfo();
                    trx.Commit();
                }
                //插入图纸

四、注意:ODA平台与CAD平台差异

// 刷新到图纸
es = acdbPutSummaryInfo(pSum); //必须要

CAD平台

炸开不炸开zCAD,ACAD都正常

ODA
炸开 都不正常
不炸开 ACAD不正常,ZCAD正常

你可能感兴趣的:(CAD二次开发,开发语言,c++)