明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1631|回复: 1

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

[复制链接]
发表于 2010-10-27 10:29:00 | 显示全部楼层 |阅读模式

Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Public Class MyXrecord
<CommandMethod("CreateXrecord")> _
Public Sub CreateXrecord()
    Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
    Dim db As Database = HostApplicationServices.WorkingDatabase
    Using trans As Transaction = db.TransactionManager.StartTransaction
        '新建一个扩展记录对象
        Dim xrec As New Xrecord()
        '设置扩展记录中包含的数据列表,包括文本、坐标、数值、角度、颜色
        Dim pt As New Point3d(1.0, 2.0, 0.0)
        xrec.Data = New ResultBuffer( _
                    New TypedValue(DxfCode.Text, "这是一个测试用的扩展记录列表"), _
                    New TypedValue(DxfCode.XCoordinate, pt), _
                    New TypedValue(DxfCode.Real, 3.14159), _
                    New TypedValue(DxfCode.Angle, 3.14159), _
                    New TypedValue(DxfCode.Color, 1), _
                    New TypedValue(DxfCode.Int16, 180))
        '下面的操作用来选择要添加扩展记录的对象
        Dim opt As New PromptEntityOptions("请选择要添加扩展记录的对象")
        Dim res As PromptEntityResult = ed.GetEntity(opt)
        If res.Status <> PromptStatus.OK Then
            Return
        End If
        Dim ent As Entity = trans.GetObject(res.ObjectId, OpenMode.ForWrite)
        '判断所选对象是否已包含扩展记录
        If ent.ExtensionDictionary <> ObjectId.Null Then
            ed.WriteMessage("对象已包含扩展记录,无法再创建")
            Return
        End If
        '为所选择的对象创建一个扩展字典
        ent.CreateExtensionDictionary()
        Dim dictEntId As ObjectId = ent.ExtensionDictionary()
        Dim entXrecord As DBDictionary = trans.GetObject(dictEntId, OpenMode.ForWrite)
        '在扩展字典中加入上面新建的扩展记录对象,并指定它的搜索关键字为MyXrecord
        entXrecord.SetAt("MyXrecord", xrec)
        '通知事务处理完成扩展记录对象的加入
        trans.AddNewlyCreatedDBObject(xrec, True)
        trans.Commit()
    End Using
End Sub

End Class

 

问题:这是一个vb.net给要素增加扩展数据的代码。我现在想要在另一个程序中,通过拾取这个要素,从而获得这个要素中扩展数据的一项属性值(比如DxfCode.Color项。即已有扩展数据的颜色属性值赋值给一个参数A)。

最后想要实现的功能是:比如我生成了一条代表大车路的多段线。给这条多段线增加了“大车路”、“颜色:7号色”等扩展数据。然后通过拾取这条多段线来给另一条无属性项的多段线增加该大车路所有的属性项。

发表于 2010-10-27 18:35:00 | 显示全部楼层

ResultBuffer的实质是一个链表,只能顺序访问

你的任务:

找到这个链表的第n项(由你的程序规定),读取或者替换整个链表

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 00:23 , Processed in 0.156604 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表