y357072939 发表于 2010-10-27 10:29:00

[求助]vb.net 扩展数据xrecord的问题

<p><font face="Verdana">Imports Autodesk.AutoCAD.DatabaseServices<br/>Imports Autodesk.AutoCAD.Runtime<br/>Imports Autodesk.AutoCAD.Geometry<br/>Imports Autodesk.AutoCAD.ApplicationServices<br/>Imports Autodesk.AutoCAD.EditorInput<br/>Public Class MyXrecord<br/>&lt;CommandMethod("CreateXrecord")&gt; _<br/>Public Sub CreateXrecord()<br/>&nbsp;&nbsp;&nbsp; Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor<br/>&nbsp;&nbsp;&nbsp; Dim db As Database = HostApplicationServices.WorkingDatabase<br/>&nbsp;&nbsp;&nbsp; Using trans As Transaction = db.TransactionManager.StartTransaction<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '新建一个扩展记录对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim xrec As New Xrecord()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置扩展记录中包含的数据列表,包括文本、坐标、数值、角度、颜色<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pt As New Point3d(1.0, 2.0, 0.0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xrec.Data = New ResultBuffer( _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New TypedValue(DxfCode.Text, "这是一个测试用的扩展记录列表"), _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New TypedValue(DxfCode.XCoordinate, pt), _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New TypedValue(DxfCode.Real, 3.14159), _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New TypedValue(DxfCode.Angle, 3.14159), _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New TypedValue(DxfCode.Color, 1), _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New TypedValue(DxfCode.Int16, 180))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '下面的操作用来选择要添加扩展记录的对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim opt As New PromptEntityOptions("请选择要添加扩展记录的对象")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim res As PromptEntityResult = ed.GetEntity(opt)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If res.Status &lt;&gt; PromptStatus.OK Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ent As Entity = trans.GetObject(res.ObjectId, OpenMode.ForWrite)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '判断所选对象是否已包含扩展记录<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ent.ExtensionDictionary &lt;&gt; ObjectId.Null Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ed.WriteMessage("对象已包含扩展记录,无法再创建")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '为所选择的对象创建一个扩展字典<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ent.CreateExtensionDictionary()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim dictEntId As ObjectId = ent.ExtensionDictionary()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim entXrecord As DBDictionary = trans.GetObject(dictEntId, OpenMode.ForWrite)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '在扩展字典中加入上面新建的扩展记录对象,并指定它的搜索关键字为MyXrecord<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entXrecord.SetAt("MyXrecord", xrec)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '通知事务处理完成扩展记录对象的加入<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trans.AddNewlyCreatedDBObject(xrec, True)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trans.Commit()<br/>&nbsp;&nbsp;&nbsp; End Using<br/>End Sub</font></p>
<p><font face="Verdana">End Class</font></p>
<p>&nbsp;</p>
<p><font color="#ff0000">问题:这是一个vb.net给要素增加扩展数据的代码。我现在想要在另一个程序中,通过拾取这个要素,从而获得这个要素中扩展数据的一项属性值(比如DxfCode.Color项。即已有扩展数据的颜色属性值赋值给一个参数A)。</font></p>
<p><font color="#ff0000">最后想要实现的功能是:比如我生成了一条代表大车路的多段线。给这条多段线增加了“大车路”、“颜色:7号色”等扩展数据。然后通过拾取这条多段线来给另一条无属性项的多段线增加该大车路所有的属性项。</font></p>

雪山飞狐_lzh 发表于 2010-10-27 18:35:00

<p>ResultBuffer的实质是一个链表,只能顺序访问</p>
<p>你的任务:</p>
<p>找到这个链表的第n项(由你的程序规定),读取或者替换整个链表</p>
页: [1]
查看完整版本: [求助]vb.net 扩展数据xrecord的问题