/// <summary> /// 获取XData值 /// </summary> /// <param name="id"></param> /// <param name="regAppName"></param> /// <param name="key"></param> /// <returns></returns> public static string GetXData(this DBObject obj, string regAppName, string key) { Database db = obj.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { try { TypedValueList XData = obj.GetXDataForApplication(regAppName); if (XData != null) { TypedValue tvKey = XData.FirstOrDefault(item => item.Value.Equals(key)); //查找key int indexKey = XData.IndexOf(tvKey); //Key索引 int indexValue = indexKey + 1; //Value索引 if (indexKey >= 0 && indexValue < XData.Count) { //键值对已存在,返回 object value = XData[indexValue].Value; return(value == null ? null : value.ToString()); } } } catch (Exception ex) { Logger.log("GetXData", ex.Message); } } return(null); }
public static string GetXData(this DBObject ent) { string json = string.Empty; using (ResultBuffer rb = ent.GetXDataForApplication(CommandClass.AppName)) { if (rb != null) { try { TypedValue[] vals = rb.AsArray(); if (vals.Length >= 4) { json = vals[3].Value.ToString(); } } catch (Autodesk.AutoCAD.Runtime.Exception ex) { Application.DocumentManager.MdiActiveDocument.Editor. WriteMessage($"\nError: CommandClass - GetXData:{ex.Message}"); } } } return(json); }
/// <summary> /// 删除指定注册应用程序下的扩展数据 /// </summary> /// <param name="id">对象的Id</param> /// <param name="regAppName">注册应用程序名</param> public static void RemoveXData(this DBObject obj, string regAppName) { Database db = obj.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { try { obj.UpgradeOpen(); TypedValueList XData = obj.GetXDataForApplication(regAppName); if (XData != null)// 如果有扩展数据 { TypedValueList newXData = new TypedValueList(); newXData.Add(DxfCode.ExtendedDataRegAppName, regAppName); obj.XData = newXData; //为对象的XData属性重新赋值,从而删除扩展数据 } obj.DowngradeOpen(); } catch (Exception ex) { trans.Abort(); Logger.log("RemoveXData", ex.Message); } } }
public static T GetXData <T>([NotNull] this DBObject dbo, string regAppName) { var rb = dbo.GetXDataForApplication(regAppName); if (rb == null) { return(default);
// Token: 0x060000C7 RID: 199 RVA: 0x0000A1D0 File Offset: 0x000083D0 internal object a(DBObject A_0, int A_1) { if (A_0.XData == null) { return(null); } object result; using (ResultBuffer xdataForApplication = A_0.GetXDataForApplication(this.XDAppName)) { if (xdataForApplication == null) { result = null; } else if (xdataForApplication.AsArray().GetUpperBound(0) < A_1) { result = null; } else { result = xdataForApplication.AsArray()[A_1].Value; } } return(result); }
public static List <object> ReadXDataByAppName(DBObject dbObject, string appName) { var attribute = new List <object>(); try { var rb = dbObject.GetXDataForApplication(appName); if (rb != null) { var rvArr = rb.AsArray(); if (rvArr.Length >= 2) { // XData of appliation name (1001) if ((DxfCode)rvArr[0].TypeCode == DxfCode.ExtendedDataRegAppName && rvArr[0].Value.ToString().ToUpper().Trim() == appName.ToUpper()) { for (var i = 1; i < rvArr.Length; i++) { var typedValue = rvArr[i]; attribute.Add(typedValue.Value); } } } } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } return(attribute); }
public static bool HasTag(this DBObject dbo, string tag) { var buffer = dbo.GetXDataForApplication(Consts.AppNameForTags); return(buffer.AsArray().Any(typedValue => typedValue.TypeCode == (int)DxfCode.ExtendedDataAsciiString && typedValue.Value == tag)); }
public static void AddTag(this DBObject dbo, string tag) { var buffer = dbo.GetXDataForApplication(Consts.AppNameForTags); buffer.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, tag)); dbo.XData = buffer; }
public static void RemoveTag(this DBObject dbo, string tag) { var buffer = dbo.GetXDataForApplication(Consts.AppNameForTags); var data = buffer.AsArray().Where(typedValue => typedValue.TypeCode == (int)DxfCode.ExtendedDataAsciiString && typedValue.Value != tag).ToArray(); dbo.XData = new ResultBuffer(data); }
/// <summary> /// 获取对象的扩展数据 /// </summary> /// <param name="id">对象的Id</param> /// <param name="regAppName">注册应用程序名</param> /// <returns>返回获得的扩展数据</returns> public static TypedValueList GetXData(this ObjectId id, string regAppName) { TypedValueList values=new TypedValueList(); //打开对象 DBObject obj=id.GetObject(OpenMode.ForRead); //获取对象中名为regAppName的扩展数据 values = obj.GetXDataForApplication(regAppName); return values;//返回获得的扩展数据 }
public static void RemoveXData(DBObject dbo) { if (dbo.GetXDataForApplication(RegAppNAME) != null) { ResultBuffer rb = rb = new ResultBuffer(new TypedValue(1001, RegAppNAME)); dbo.UpgradeOpen(); dbo.XData = rb; dbo.DowngradeOpen(); } }
public static TypedValue?SetXData(this DBObject obj, string app, int idx, TypedValue newVal) { TypedValue[] valArr = obj.GetXDataForApplication(app)?.AsArray(); if (valArr != null && idx + 1 < valArr.Length) { TypedValue oldVal = valArr[idx + 1]; valArr[idx + 1] = newVal; obj.XData = new ResultBuffer(valArr); return(oldVal); } return(null); }
// Token: 0x060000CB RID: 203 RVA: 0x0000A410 File Offset: 0x00008610 internal bool c(DBObject A_0) { if (A_0 == null) { return(false); } bool result; using (ResultBuffer xdataForApplication = A_0.GetXDataForApplication(this.XDAppName)) { result = (xdataForApplication != null); } return(result); }
/// <summary> /// 删除指定注册应用程序下的扩展数据 /// </summary> /// <param name="id">对象的Id</param> /// <param name="regAppName">注册应用程序名</param> public static void RemoveXData(this ObjectId id, string regAppName) { // 以写的方式打开对象 DBObject obj=id.GetObject(OpenMode.ForWrite); // 获取regAppName注册应用程序下的扩展数据列表 TypedValueList xdata=obj.GetXDataForApplication(regAppName); if (xdata != null)// 如果有扩展数据 { // 新建一个TypedValue列表,并只添加注册应用程序名扩展数据项 TypedValueList newValues=new TypedValueList(); newValues.Add(DxfCode.ExtendedDataRegAppName, regAppName); obj.XData = newValues; //为对象的XData属性重新赋值,从而删除扩展数据 } obj.DowngradeOpen();// 为了安全,切换对象为读的状态 }
// Token: 0x060000CA RID: 202 RVA: 0x0000A3A4 File Offset: 0x000085A4 internal void b(DBObject A_0, Transaction A_1) { ResultBuffer xdataForApplication = A_0.GetXDataForApplication(this.XDAppName); if (xdataForApplication != null) { if (!A_0.IsWriteEnabled && !A_0.ObjectId.IsNull) { A_1.GetObject(A_0.ObjectId, 1, false, true); } this.a(A_0.Database, A_1); A_0.XData = this.n(); xdataForApplication.Dispose(); } }
public static ResultBuffer GetXDataForApplication(ObjectId id, string applicationName) { Document doc = AcadApp.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; using (doc.LockDocument()) { using (Transaction tr = DatabaseUtil.GetTransaction(db)) { DBObject ent = tr.GetObject(id, OpenMode.ForWrite); return(ent.GetXDataForApplication(applicationName)); } } }
// Token: 0x060000C6 RID: 198 RVA: 0x0000A180 File Offset: 0x00008380 internal TypedValue[] b(DBObject A_0) { TypedValue[] result; using (ResultBuffer xdataForApplication = A_0.GetXDataForApplication(this.XDAppName)) { if (xdataForApplication != null) { result = xdataForApplication.AsArray(); } else { result = new TypedValue[1]; } } return(result); }
obj_Modified(object sender, EventArgs e) { DBObject dbObj = (DBObject)sender; if (dbObj.IsErased) { return; } ResultBuffer rb = dbObj.GetXDataForApplication(null); TypedValue[] tvs = rb.AsArray(); List <string> nameApps = null; List <TypedValue[]> lstTVs = xData.parseXData(tvs, out nameApps); foreach (TypedValue[] tvsRet in lstTVs) { string nameApp = tvsRet[0].Value.ToString(); string nameObj = tvsRet[1].Value.ToString(); switch (nameApp) { case "lnkBubs": switch (nameObj) { case "TARGET": break; case "TX": modTXlnkBubs(dbObj.ObjectId, tvsRet); break; case "SM": break; case "LDR": modLDRlnkBubs(dbObj.ObjectId, tvsRet); break; } break; case "lnkBubsLdrEndPnt": break; } } }
/// <summary> /// Удаление XData связанных с этим приложением /// </summary> /// <param name="dbo"></param> /// <param name="regAppName"></param> public static void RemoveXData([NotNull] this DBObject dbo, string regAppName) { if (dbo.GetXDataForApplication(regAppName) != null) { var rb = new ResultBuffer(new TypedValue(1001, regAppName)); var isWriteEnabled = dbo.IsWriteEnabled; if (!isWriteEnabled) { using var dboWrite = dbo.Id.Open(OpenMode.ForWrite, false, true); dboWrite.XData = rb; } else { dbo.XData = rb; } } }
public static int GetXData([NotNull] this DBObject dbo, string regAppName) { var rb = dbo.GetXDataForApplication(regAppName); if (rb != null) { foreach (var item in rb) { if (item.TypeCode == (short)DxfCode.ExtendedDataInteger32) { return((int)item.Value); } } } return(0); }
public static string GetXData(DBObject obj, string regAppName) { using (ResultBuffer rb = obj.GetXDataForApplication(regAppName)) { if (rb != null) { foreach (TypedValue tv in rb) { if (tv.TypeCode == (int)DxfCode.ExtendedDataAsciiString) { return(tv.Value.ToString()); } } } } return(string.Empty); }
/// <summary> /// 获取FXD数据 /// </summary> /// <param name="dbo"></param> /// <param name="appName"></param> /// <returns></returns> public static object GetFirstXDataT(this DBObject dbo, string appName) { ResultBuffer xdataForApp = dbo.GetXDataForApplication(appName); if (xdataForApp == null) { return(null); } foreach (var value in xdataForApp.AsArray()) { if (value.TypeCode != 1001) { return(value.Value); } } return(null); }
public static object GetFirstXDataT(this DBObject dbo, string appName) { var xdataForApp = dbo.GetXDataForApplication(appName); if (xdataForApp == null) { return(null); } foreach (var value in xdataForApp.AsArray()) { if (value.TypeCode != (int)DxfCode.ExtendedDataRegAppName) { return(value.Value); } } return(null); }
// Token: 0x060000C0 RID: 192 RVA: 0x00009F2C File Offset: 0x0000812C internal bool a(DBObject A_0) { this.Clear(); if (A_0 == null) { return(false); } using (ResultBuffer xdataForApplication = A_0.GetXDataForApplication(this.XDAppName)) { if (xdataForApplication == null) { return(false); } this.Buffer = xdataForApplication; } return(true); }
// Token: 0x060000C8 RID: 200 RVA: 0x0000A24C File Offset: 0x0000844C internal bool a(DBObject A_0, int A_1, object A_2, Transaction A_3) { if (A_0.XData == null) { return(false); } bool result; using (ResultBuffer xdataForApplication = A_0.GetXDataForApplication(this.XDAppName)) { if (xdataForApplication == null) { result = false; } else { TypedValue[] array = xdataForApplication.AsArray(); if (array.GetUpperBound(0) < A_1) { result = false; } else { if (A_2 is int) { array[A_1] = new TypedValue(1071, A_2); } else { array[A_1] = new TypedValue(1000, A_2.ToString()); } if (!A_0.IsWriteEnabled && !A_0.ObjectId.IsNull) { A_3.GetObject(A_0.ObjectId, 1, false, true); } this.a(A_0.Database, A_3); A_0.XData = new ResultBuffer(array); result = true; } } } return(result); }
/// <summary> /// Returns true, if the source object has an entry with the given key in the extension dictionary. /// </summary> /// <param name="source">The source object to check.</param> /// <param name="key">If parameter <paramref name="useXData"/> is true, this string is the name of the RegApp to read the data from. If parameter <paramref name="useXData"/> is false, this string acts as the key in the extension dictionary.</param> /// <param name="useXData">True, if data should be read from the source object's XData. False, if data should be read from the source object's extension dictionary.</param> /// <exception cref="System.Exception">Thrown when an AutoCAD error occurs.</exception> /// <returns>True, if the extension dictionary contains an entry with the given key.</returns> public static bool HasData(this DBObject source, string key, bool useXData) { if (useXData) { var resultBuffer = source.GetXDataForApplication(key); if (resultBuffer != null) { resultBuffer.Dispose(); return(true); } else { return(false); } } else { try { if (source.ExtensionDictionary.IsNull) { return(false); } else { var hasData = false; Helpers.WrapInTransaction(source, tr => { var dict = (DBDictionary)tr.GetObject(source.ExtensionDictionary, OpenMode.ForRead); hasData = dict.Contains(key); }); return(hasData); } } catch (Exception e) { throw Error.AutoCadException(e); } } }
/// <summary> /// 修改扩展数据 /// </summary> /// <param name="id">对象的Id</param> /// <param name="regAppName">注册应用程序名</param> /// <param name="code">扩展数据的类型</param> /// <param name="oldValue">原来的扩展数据值</param> /// <param name="newValue">新的扩展数据值</param> public static void ModXData(this ObjectId id, string regAppName, DxfCode code, object oldValue, object newValue) { // 以写的方式打开对象 DBObject obj=id.GetObject(OpenMode.ForWrite); // 获取regAppName注册应用程序下的扩展数据列表 TypedValueList xdata=obj.GetXDataForApplication(regAppName); for (int i = 0; i < xdata.Count; i++)// 遍历扩展数据列表 { TypedValue tv=xdata[i]; //扩展数据 //判断扩展数据的类型和值是否满足条件 if (tv.TypeCode == (short)code && tv.Value.Equals(oldValue)) { // 设置新的扩展数据值 xdata[i] = new TypedValue(tv.TypeCode, newValue); break; //要修改的数据已找到,跳出循环 } } obj.XData = xdata; // 覆盖原来的扩展数据,达到修改的目的 obj.DowngradeOpen();// 为了安全,切换对象为读的状态 }
/// <summary> /// 新增或更新XData键值对 /// </summary> /// <param name="id"></param> /// <param name="regAppName"></param> /// <param name="key"></param> /// <param name="value"></param> public static void SetXData(this DBObject obj, string regAppName, string key, string value) { Database db = obj.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { try { obj.UpgradeOpen(); TypedValueList XData = obj.GetXDataForApplication(regAppName); if (XData == null) { XData = new TypedValueList(); XData.Add(DxfCode.ExtendedDataRegAppName, regAppName); } TypedValue tvKey = XData.FirstOrDefault(item => item.Value.Equals(key)); //查找key int indexKey = XData.IndexOf(tvKey); //Key索引 int indexValue = indexKey + 1; //Value索引 if (indexKey >= 0 && indexValue < XData.Count) { //键值对已存在,更新 TypedValue tvValue = XData[indexValue]; XData[indexValue] = new TypedValue(tvValue.TypeCode, value); } else { //键值对不存在,新增 XData.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, key)); XData.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, value)); } obj.XData = XData; // 覆盖原来的扩展数据,达到修改的目的 obj.DowngradeOpen(); trans.Commit(); } catch (Exception ex) { trans.Abort(); Logger.log("SetXData", ex.Message); } } }
/// <summary> /// Returns true, if the source object has an entry with the given key in the extension dictionary. /// </summary> /// <param name="source">The source object to check.</param> /// <param name="key">If parameter <paramref name="useXData"/> is true, this string is the name of the RegApp to read the data from. If parameter <paramref name="useXData"/> is false, this string acts as the key in the extension dictionary.</param> /// <param name="useXData">True, if data should be read from the source object's XData. False, if data should be read from the source object's extension dictionary.</param> /// <exception cref="System.Exception">Thrown when an AutoCAD error occurs.</exception> /// <returns>True, if the extension dictionary contains an entry with the given key.</returns> public static bool HasData(this DBObject source, string key, bool useXData) { Require.ParameterNotNull(source, nameof(source)); Require.StringNotEmpty(key, nameof(key)); if (useXData) { var resultBuffer = source.GetXDataForApplication(key); if (resultBuffer != null) { resultBuffer.Dispose(); return(true); } else { return(false); } } else { if (source.ExtensionDictionary.IsNull) { return(false); } else { var hasData = false; Helpers.WrapInTransaction(source, tr => { var dict = (DBDictionary)tr.GetObject(source.ExtensionDictionary, OpenMode.ForRead); hasData = dict.Contains(key); }); return(hasData); } } }
public static T GetXData <T>([NotNull] this DBObject dbo, string regAppName) { var rb = dbo.GetXDataForApplication(regAppName); if (rb != null) { var dxfT = dictXDataTypedValues[typeof(T)]; var rbEnumerator = rb.GetEnumerator(); while (rbEnumerator.MoveNext()) { if (rbEnumerator.Current.TypeCode == dxfT) { if (rbEnumerator.Current.TypeCode == (short)DxfCode.ExtendedDataAsciiString) { return((T)(object)GetStringValue(rbEnumerator, true)); } return((T)rbEnumerator.Current.Value); } } } return(default);
public static void RemoveXData(DBObject dbo) { if (dbo.GetXDataForApplication(RegAppNAME) != null) { ResultBuffer rb = rb = new ResultBuffer(new TypedValue(1001, RegAppNAME)); dbo.UpgradeOpen(); dbo.XData = rb; dbo.DowngradeOpen(); } }