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

文章源于项目实践,介绍了CAD中添加扩展属性的方法。Field与Value是实体中的数据字段与值,可根据实际改写。CAD通常不能直接保存属性数据,可通过xdata挂接图形与属性,要注意其数据大小限制,还给出了存储GIS属性数据的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加扩展属性

说一句

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

1、添加扩展属性:

       /// <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对数据大小的限制。

2、示例:

解释:Xdata是存储在实体上的code+value值,通过这样一种形式,我可以将GIS属性数据存储在cad实体数据中。存储的时候使用“field+value 对存储”,解析也非常方便的。之前我实践使用二进制字段存储,由于数组大小的限制。最终使用这种方法存储数据的。当然使用字典就没有数据大小的限制。

 

3、声明

1、以上通过本人测试与调试,是在项目中实践的方法,经过论证,可以实现,如有问题或错误请留言,感谢您的阅读!

2、转载请标注来源,感谢你的阅读!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值