乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 116|回复: 8

获取 Xrecord 数据(第 2 课)

[复制链接]

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-7-18 13:24:20 | 显示全部楼层 |阅读模式
这是我的代码
  1. Public Function GetXRecLisp() As AcadXRecord
  2. Dim DictCol As AcadDictionaries
  3. Dim MyDict As AcadDictionary
  4. Dim XRec As AcadXRecord
  5. Set DictCol = ThisDrawing.Dictionaries
  6. On Error GoTo MyError
  7. Set MyDict = DictCol.Item("LisptoVBA")
  8. Set XRec = MyDict.Item("LisptoVBA")
  9. Set GetXRecLisp = XRec
  10. Exit Function
  11. MyError:
  12.     MsgBox "Error " & Err.Number & " ( " & Err.Description & " )"
  13.    
  14. End Function
  15. Public Sub ShowXrecData(ByRef XRec As AcadXRecord)
  16. Dim DataType As Integer
  17. Dim Data As Variant
  18. Dim Cnt As Integer
  19. Set XRec = GetXRecLisp
  20. XRec.GetXRecordData DataType, Data
  21. For Cnt = 0 To UBound(Data)
  22.     MsgBox Data(Cnt)
  23. Next
  24. End Sub

第一个似乎有效。我尝试了两个图形,一个有信息,没有错误消息提示,一个没有信息,得到了错误消息。我的问题似乎是第二个代码。我试图看看是否可以在不指定大小的情况下获取xrecord数据,并将其打印到消息框中(目前命令行也可以)
这是用于添加xrecord和dictionary的lisp代码(以防万一)。
  1. (defun MySetXRec (Obj CodeList DataList / )
  2. ; Sets XRecordData. Dxf numbers between 1-369, except 5, 100, 105.
  3. ; See help for types and numbers to use.
  4. (vla-SetXRecordData Obj
  5. (vlax-make-variant
  6.   (vlax-safearray-fill
  7.    (vlax-make-safearray
  8.     vlax-vbInteger
  9.     (cons 0 (1- (length CodeList)))
  10.    )
  11.    CodeList
  12.   )
  13. )
  14. (vlax-make-variant
  15.   (vlax-safearray-fill
  16.    (vlax-make-safearray
  17.     vlax-vbVariant
  18.     (cons 0 (1- (length Datalist)))
  19.    )
  20.    DataList
  21.   )
  22. )
  23. )
  24. )
  25. (MySetXrec
  26. (vla-AddXRecord
  27.   (vla-Add
  28.    (vla-get-Dictionaries
  29.     (vla-get-ActiveDocument
  30.      (vlax-get-Acad-Object)
  31.     )
  32.    )
  33.    "LisptoVBA"
  34.   )
  35.   "LisptoVBA"
  36. )
  37. '(1 2)
  38. '("Testing" "Again")
  39. )

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-7-18 13:37:24 | 显示全部楼层
未经测试的
但这是我如何灵活地编写GetXRecLisp的方法-
  1. Public Function GetXRecLisp(dictname As String, _
  2.                             xrecname As String) _
  3.                             As AcadXRecord
  4.     Dim dict As AcadDictionary, _
  5.         xrec As AcadXRecord
  6.    
  7.     On Error GoTo GetXRecLispError
  8.     Set dict = ThisDrawing.Dictionaries.Item(dictname)
  9.     Set xrec = dict.Item(xrecname)
  10.     Set GetXRecLisp = xrec
  11.     Exit Function
  12.    
  13. GetXRecLispError:
  14.     Err.Clear
  15.     Set GetXRecLisp = Nothing
  16.     ''  caller tests for nothing result
  17. End Function

还要注意变量/标签命名(案例/特殊性等)。永久属于您的
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-7-18 13:46:43 | 显示全部楼层
谢谢你迈克尔。当我明白自己在做什么的时候,我会考虑编码的灵活性。我一如既往地喜欢你的表演。
What应该全部是小写字母是什么意思?这是VBA喜欢的吗?
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-7-18 13:51:39 | 显示全部楼层
我尝试/倾向于编码-
subs/函数:大写大小写,然后是骆驼大小写,例如GetThings Value
局部变量:小写,然后是骆驼大小写,例如独角主
模块/(类)成员变量:以my为前缀,然后与subs相同,例如myCollection
小部件:以缩写为前缀。小部件类型,然后作为子,例如frmMain。
大话题,但是对不起,我要去参加午餐会议,再见!
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-7-18 14:08:08 | 显示全部楼层

  1. Public Sub ShowXrecData(ByRef Xrec As AcadXRecord)
  2. Dim DataType As Variant
  3. Dim Data As Variant
  4. Dim Cnt As Integer
  5. Set Xrec = GetXRecLisp
  6. Xrec.GetXRecordData DataType, Data
  7. For Cnt = 0 To UBound(Data)
  8.     Debug.Print Data(Cnt)
  9. Next
  10. End Sub

所以我把我的代码改成了上面的样子。 如何让它运行以便我可以测试它? 我点击了播放按钮,但它要求一个宏名称。 这似乎是因为它是用参数定义的。 当我试图把它放进一个没有参数的潜艇里,并调用它时,它不起作用。
谢谢杰夫。
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-7-18 14:24:01 | 显示全部楼层
当您调用这个sub时,需要向它传递一个xrecord。另一个选择是去掉“ByRef Xrec As AcadXRecord ”,并在此sub中将其变暗。如果您这样做,您将不得不在dictionary集合中搜寻字典,然后通过字典找到xrecord。
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-7-18 14:31:55 | 显示全部楼层
Bob 说了什么,但是由于您在代码中获取了它,因此不需要将其作为参数传递。这是从您的其他线程的代码中继承而来的:
  1. Public Function GetXRecLisp() As AcadXRecord
  2. Dim DictCol As AcadDictionaries
  3. Dim MyDict As AcadDictionary
  4. Dim XRec As AcadXRecord
  5. Set DictCol = ThisDrawing.Dictionaries
  6. On Error GoTo MyError
  7. Set MyDict = DictCol.Item("VBAtoLisp")
  8. Set XRec = MyDict.Item("VBAtoLisp")
  9. Set GetXRecLisp = XRec
  10. Exit Function
  11. MyError:
  12.     MsgBox "Error " & Err.Number & " ( " & Err.Description & " )"
  13.    
  14. End Function
  15. Public Sub ShowXrecData()
  16. Dim DataType As Variant
  17. Dim Data As Variant
  18. Dim Cnt As Integer
  19. Dim XRec As AcadXRecord
  20. Set XRec = GetXRecLisp
  21. XRec.GetXRecordData DataType, Data
  22. For Cnt = 0 To UBound(Data)
  23.     MsgBox Data(Cnt)
  24. Next
  25. End Sub
  26. Sub test2()
  27. ShowXrecData
  28. End Sub

回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-7-18 14:33:35 | 显示全部楼层
谢谢你们,三个人。它现在正在工作。不知道我把它放在那里了。一定是在工作日早上试图编码到早期。
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-7-18 14:39:58 | 显示全部楼层
你不知道我花了多长时间才最终发现该怎么做。搜索这里,和帮助文件,但我现在有它,所以一切都很好。该吃午饭了。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 23:03 , Processed in 0.754072 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表