コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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);
                }
            }
        }
コード例 #4
0
ファイル: XDataExt.cs プロジェクト: vildar82/AcadLib
        public static T GetXData <T>([NotNull] this DBObject dbo, string regAppName)
        {
            var rb = dbo.GetXDataForApplication(regAppName);

            if (rb == null)
            {
                return(default);
コード例 #5
0
        // 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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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;
        }
コード例 #9
0
        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);
        }
コード例 #10
0
ファイル: XDataTools.cs プロジェクト: coordinate/MyLearnning
 /// <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;//返回获得的扩展数据
 }
コード例 #11
0
ファイル: Isoline.cs プロジェクト: vildar82/GP_Isoline
 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();
     }
 }
コード例 #12
0
 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);
 }
コード例 #13
0
        // 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);
        }
コード例 #14
0
ファイル: XDataTools.cs プロジェクト: coordinate/MyLearnning
 /// <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();// 为了安全,切换对象为读的状态
 }
コード例 #15
0
        // 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();
            }
        }
コード例 #16
0
ファイル: XDataUtil.cs プロジェクト: KevinSung97/AutoCAD.Net
        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));
                }
            }
        }
コード例 #17
0
 // 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);
 }
コード例 #18
0
        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;
                }
            }
        }
コード例 #19
0
ファイル: XDataExt.cs プロジェクト: vildar82/AcadLib
 /// <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;
         }
     }
 }
コード例 #20
0
ファイル: XDataExt.cs プロジェクト: 15831944/AcadLib_old
        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);
        }
コード例 #21
0
ファイル: AcadEntity.cs プロジェクト: tevfikoguz/XCOM
 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);
 }
コード例 #22
0
        /// <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);
        }
コード例 #23
0
        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);
        }
コード例 #24
0
 // 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);
 }
コード例 #25
0
        // 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);
        }
コード例 #26
0
        /// <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);
                }
            }
        }
コード例 #27
0
ファイル: XDataTools.cs プロジェクト: coordinate/MyLearnning
 /// <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();// 为了安全,切换对象为读的状态
 }
コード例 #28
0
        /// <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);
                }
            }
        }
コード例 #29
0
        /// <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);
                }
            }
        }
コード例 #30
0
ファイル: XDataExt.cs プロジェクト: 15831944/AcadLib_old
        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);
コード例 #31
0
ファイル: Isoline.cs プロジェクト: vildar82/GP_Isoline
 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();
    }
 }