找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1090|回复: 9

[下载]:如何使用扩展记录?看看我的

[复制链接]
发表于 2002-11-14 16:00:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
扩展记录的使用,说到底就是如何管理其中的链表。
我这里做了一个类用于实现对扩展记录的管理。
该类封装了扩展记录的链表,使得扩展记录可以根据tag方便的读取、更改、添加、删除 。
不必考虑链表中各项的顺序,只需知道各个tag即可。
可以实现嵌套存储。

该类的使用必须结合arx目录下samples--》arxdbg 中的例子
这个例子是非常非常不错的,我的这个类就是参考里面的扩展数据类而写的,大家可以看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 181个

财富等级: 日进斗金

发表于 2002-11-14 16:06:38 | 显示全部楼层
我见过这种的操作方法,一般是采用相同的组码,值采用字符串的形式,就如“Tag=Value”,操作时,只要知道Tag,程序根据设定的组码,取出Value的值。不知你采用的是不是这种方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-14 17:44:56 | 显示全部楼层
是的,不过我这里的tag是int型
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-14 17:46:54 | 显示全部楼层
扩展数据可以保存ACAD的大多数据类型:

表、字符串、整数、实数、句柄、点对...

都有组码和他们对应。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2002-11-14 17:59:10 | 显示全部楼层
但是有时候保存一些信息用这种方法还是最好的,
如:SetXData(EntObj,AppName,Tag,Value)就可以保存了,
GetXData(EntObj,AppName,Tag)就可以读取了。比每次自己去分析强多了。以下是我编程中用到的两个函数。

  1.   [FONT=courier new]
  2. '获取扩展数据
  3. Public Function GetXDataText(ByVal EntObj As AcadObject, ByVal Name As String, ByVal Tag As String) As String
  4.     Dim xdType As Variant
  5.     Dim xdData As Variant
  6.     Dim i As Integer
  7.     Dim temp As Variant
  8.    
  9.     On Error GoTo ErrTrap
  10.     If EntObj Is Nothing Then Exit Function
  11.     If Name = "" Or Tag = "" Then Exit Function
  12.     GetXDataText = ""
  13.     EntObj.GetXData Name, xdType, xdData
  14.     If Not IsEmpty(xdType) Then
  15.         For i = LBound(xdType) To UBound(xdType)
  16.             If xdData(i) <> "" Then
  17.                 temp = Split(xdData(i), "=", , vbTextCompare)
  18.                 If Not IsEmpty(temp) Then
  19.                     If StrComp(temp(0), Tag, vbTextCompare) = 0 Then
  20.                         If UBound(temp) >= 1 Then GetXDataText = temp(1)
  21.                         Exit For
  22.                     End If
  23.                 End If
  24.                 temp = Empty
  25.             End If
  26.         Next
  27.     End If
  28.     xdType = Empty
  29.     xdData = Empty
  30.     Exit Function
  31.    
  32. ErrTrap:
  33.     Debug.Print "GetXDataText: " & Err.Number & ", " & Err.Description
  34.     On Error GoTo 0
  35. End Function

  36. '设置扩展数据
  37. Public Sub SetXDataText(ByRef EntObj As AcadObject, ByVal Name As String, ByVal Tag As String, ByVal Text As String)
  38.     Dim xdType As Variant
  39.     Dim xdData As Variant
  40.     Dim i As Integer
  41.     Dim temp As Variant
  42.     Dim bExist As Boolean

  43.     On Error GoTo ErrTrap
  44.     If EntObj Is Nothing Then Exit Sub
  45.     If Name = "" Or Tag = "" Then Exit Sub
  46.     EntObj.GetXData Name, xdType, xdData
  47.     If Not IsEmpty(xdType) Then
  48.         For i = LBound(xdType) To UBound(xdType)
  49.             If xdData(i) <> "" Then
  50.                 temp = Split(xdData(i), "=", , vbTextCompare)
  51.                 If Not IsEmpty(temp) Then
  52.                     If StrComp(temp(0), Tag, vbTextCompare) = 0 Then
  53.                         bExist = True
  54.                         xdData(i) = Tag & "=" & Text
  55.                         EntObj.SetXData xdType, xdData
  56.                         Exit For
  57.                     End If
  58.                 End If
  59.                 temp = Empty
  60.             End If
  61.         Next
  62.         If bExist = False Then
  63.             temp = UBound(xdType) + 1
  64.             ReDim Preserve xdType(0 To temp)
  65.             ReDim Preserve xdData(0 To temp)
  66.             xdType(temp) = 1000
  67.             xdData(temp) = Tag & "=" & Text
  68.             EntObj.SetXData xdType, xdData
  69.             temp = Empty
  70.         End If
  71.     Else
  72.         ReDim xdType(0 To 1) As Integer
  73.         ReDim xdData(0 To 1) As Variant
  74.         xdType(0) = 1001
  75.         xdData(0) = Name
  76.         xdType(1) = 1000
  77.         xdData(1) = Tag & "=" & Text
  78.         EntObj.SetXData xdType, xdData
  79.     End If
  80.     xdType = Empty
  81.     xdData = Empty
  82.     Exit Sub
  83.    
  84. ErrTrap:
  85.     Debug.Print "SetXDataText: " & Err.Number & ", " & Err.Description
  86.     On Error GoTo 0
  87. End Sub
  88.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-14 19:05:07 | 显示全部楼层
to XDsoft:
扩展数据里面保存句柄恐怕不太好吧,
我一般是在扩展记录里保存另外一个实体的ID,通过kDxfSoftPoint
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-14 19:14:41 | 显示全部楼层
最初由 urgod 发布
[B]to XDsoft:
扩展数据里面保存句柄恐怕不太好吧,
我一般是在扩展记录里保存另外一个实体的ID,通过kDxfSoftPoint [/B]


上面只是说扩展数据可以保存句柄,并没有说是否好和坏,看大家习惯了。

保存句柄也很用用和方便,在晓东工具箱里面的“弧长标注”、“弧标三合一”转换工具,就用到了这个,把弧线的句柄保存到“弧线标注”实体的扩展数据里面。可以智能识别标注对应的是哪个弧线实体进行查询。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-15 14:37:33 | 显示全部楼层
我下载了一个却解不开?
见图:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-15 14:40:54 | 显示全部楼层
还有下载了解不开的么?
我是用winrar3压缩的,你看看你的winrar版本对不对
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-15 16:27:44 | 显示全部楼层
我觉得分标签和值两项来保存是比较好的一种做法,而且,都用字符串类型,比较统一;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-28 11:15 , Processed in 0.391825 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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