文档库 最新最全的文档下载
当前位置:文档库 › CAD开发--扩展数据

CAD开发--扩展数据

代码是自己近期项目中整理的一些方法,主要用于操作实体的扩展数据。主要做了ExtendedDataAsciiString扩展数据的添加,读者可以以他作为例子,添加其他类型的值。
(辽宁工程技术大学,辽宁多维科技,秦凯)

///


/// 通过ObjectId给实体添加扩展数据
///

/// 实体的ObjectId
/// 应用程序名
/// ExtendedDataAsciiString值
public static void AddXData(ObjectId entId, String AppName, String strValue)
{
try
{
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
Database db = HostApplicationServices.WorkingDatabase;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
Entity ent = null;
ent = (Entity)trans.GetObject(entId, OpenMode.ForWrite);
RegAppTable reg = (RegAppTable)trans.GetObject(db.RegAppTableId, OpenMode.ForWrite);
if (!reg.Has(AppName))
{
RegAppTableRecord app = new RegAppTableRecord();
https://www.wendangku.net/doc/8a12094818.html, = AppName;
reg.Add(app);
trans.AddNewlyCreatedDBObject(app, true);
}
ResultBuffer rb = new ResultBuffer(
new TypedValue((int)DxfCode.ExtendedDataRegAppName, AppName),
new TypedValue((int)DxfCode.ExtendedDataAsciiString, strValue));
ent.XData = rb;
https://www.wendangku.net/doc/8a12094818.html,mit();
}
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show("Exception Caught: " + ex.ToString(), "提示");
}
}

//获取ExtendedDataAsciiString扩展数据值
public static String GetXData(ObjectId entId, String AppName)
{
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
Database db = HostApplicationServices.WorkingDatabase;
String strValueRet = "";

using (Transaction trans = db.TransactionManager.StartTransaction())
{
Entity ent = (Entity)trans.GetObject(entId, OpenMode.ForRead);
ResultBuffer rb = ent.GetXDataForApplication(AppName);
if (rb != null)
{
foreach (TypedValue entXdata in rb)
{
if (entXdata.TypeCode == (int)DxfCode.ExtendedDataAsciiString)
{
strValueRet = entXdata.Value.ToString();

break;
}
}
}
https://www.wendangku.net/doc/8a12094818.html,mit();
}
return strValueRet;
}

//添加扩展数据
public static void AddXData(ObjectId entId, String AppName, ResultBuffer rbAdd)
{
try
{
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
Database db = HostApplicationServices.WorkingDatabase;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
RegAppTable reg = (RegAppTable)trans.GetObject(db.RegAppTableId, OpenMode.ForWrite);
if (!reg.Has(AppName))
{
RegAppTableRecord app = new RegAppTableRecord();
https://www.wendangku.net/doc/8a12094818.html, = AppName;
reg.Add(app);
trans.AddNewlyCreatedDBObject(app, true);
}
Entity ent = (Entity)trans.GetObject(entId, OpenMode.ForWrite);
ent.XData = rbAdd;
https://www.wendangku.net/doc/8a12094818.html,mit();
}
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show("Exception Caught: " + ex.ToString(), "提示");
}
}


//删除扩展数据
public static void DeleteXdata(ObjectId ObjId, string AppName)
{
try
{
Database db = HostApplicationServices.WorkingDatabase;
DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();
using (Transaction trans = db.TransactionManager.StartTransaction())
{
DBObject obj = trans.GetObject(ObjId, OpenMode.ForWrite);
ResultBuffer rb = obj.XData;
if (rb != null)
{
TypedValue[] values = rb.AsArray();
for (int i = 0; i < values.Length; i++)
{
if (values[i].TypeCode == (int)DxfCode.ExtendedDataRegAppName && values[i].Value.ToString() == AppName)
{
TypedValue[] values_New = { new TypedValue((int)DxfCode.ExtendedDataRegAppName, values[i].Value.ToString()) };
ResultBuffer rb_New = new ResultBuffer(values_New);
obj.UpgradeOpen();
obj.XData = rb_New;
obj.DowngradeOpen();
}
}
}
https://www.wendangku.net/doc/8a12094818.html,mit();
}
docLock.Dispose();
}

catch (System.Exception exc)
{
MessageBox.Show(exc.Message);
}
}

相关文档