添加扩展属性
说一句
:文章来源与项目实践,文章有错别字或者代码错误请留言:文章为原创,转载请注明来源,谢谢你的阅读!
添加扩展属性:
/// <summary>
/// 添加扩展数据xdata
/// </summary>
[CommandMethod("AddXData")]
public void AddXData()
{
Database db = HostApplicationServices.WorkingDatabase;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
//选择实体
PromptEntityResult prEntRes = ed.GetEntity("请选择要附加XDATA的实体");
if (prEntRes.Status == PromptStatus.OK)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
RegAppTable regAppTable = (RegAppTable)tr.GetObject(db.RegAppTableId, OpenMode.ForRead);
if (!regAppTable.Has(TestAppName))
{
//注册应用程序
using (RegAppTableRecord regAppRecord = new RegAppTableRecord())
{
regAppRecord.Name = TestAppName;
regAppTable.UpgradeOpen();
regAppTable.Add(regAppRecord);
regAppTable.DowngradeOpen();
tr.AddNewlyCreatedDBObject(regAppRecord, true);
}
}
//获取实体
Entity ent = (Entity)tr.GetObject(prEntRes.ObjectId, OpenMode.ForWrite);
string codename = XData.GetCode(ent);
//保存数据到xdata中
ResultBuffer resBuf = new ResultBuffer();
resBuf.Add(new TypedValue((int)DxfCode.ExtendedDataRegAppName, TestAppName));
resBuf.Add(new TypedValue((int)DxfCode.ExtendedDataControlString, "{"));
resBuf.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, Field));
resBuf.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, Value));
resBuf.Add(new TypedValue((int)DxfCode.ExtendedDataControlString, "}"));
ent.XData = resBuf;
tr.Commit();
}
}
}
}
Field与Value是保存在实体中的数据字段与值;
在实践中请根据实际的数据要求进行数据的改写与变更,谢谢你的阅读。
cad主要保存图形数据,属性数据通常不能直接保存。通过xdata可以实现图形与属性的挂接。一般来说,需要进行适当的修改与存储。注意xdata对数据大小的限制。
示例:
解释:Xdata是存储在实体上的code+value值,通过这样一种形式,我可以将GIS属性数据存储在cad实体数据中。存储的时候使用“field+value 对存储”,解析也非常方便的。之前我实践使用二进制字段存储,由于数组大小的限制。最终使用这种方法存储数据的。当然使用字典就没有数据大小的限制。