xdata扩展属性--添加扩展属性

添加扩展属性

说一句

:文章来源与项目实践,文章有错别字或者代码错误请留言:文章为原创,转载请注明来源,谢谢你的阅读!

添加扩展属性:

       /// <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 对存储”,解析也非常方便的。之前我实践使用二进制字段存储,由于数组大小的限制。最终使用这种方法存储数据的。当然使用字典就没有数据大小的限制。

发布了35 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/wenming111/article/details/90602203