乐筑天下

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

圆的中心

[复制链接]

4

主题

54

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2009-10-22 07:13:34 | 显示全部楼层 |阅读模式
这是我在AutoCAD中的第一个VBA。我试着把一张桌子的中心和直径放进去,但我可以#039;t处理点。有人能纠正我的代码吗
  1. Option Explicit
  2. Private Sub cercuri_Click()
  3. Dim SS As AcadSelectionSet
  4. Dim coords As AcadTable
  5. Dim i As Integer
  6. Dim st As String
  7. Dim p0 As AcadPoint
  8. Dim Code(0) As Integer
  9. Dim Val(0) As Variant
  10. Dim insp(0 To 2) As Double
  11. insp(0) = 0#
  12. insp(1) = 0#
  13. insp(2) = 0#
  14. Code(0) = 0
  15. Val(0) = "CIRCLE"
  16. Set SS = ThisDrawing.SelectionSets.Add("ss")
  17. UserForm1.hide
  18. SS.SelectOnScreen Code, Val
  19. Set coords = ThisDrawing.ModelSpace.AddTable(insp, SS.Count + 2, 5, 10, 30)
  20. For i = 0 To SS.Count - 1
  21. st = CStr(SS.Item(i).Diameter)
  22. coords.SetText i + 2, 3, st
  23. p0 = SS.Item(i).Center ' WHAT'S WRONG HERE?
  24. Next i
  25. SS.Delete
  26. UserForm1.Show
  27. End Sub


回复

使用道具 举报

0

主题

13

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2009-10-22 14:14:28 | 显示全部楼层
我将沿着这条路走
  1. Dim oEnt as Acadentity
  2. Dim oCircle as acadcircle
  3. For Each oEnt in SS
  4. set oCircle =oEnt
  5. st = CStr(oCircle.Diameter)
  6. coords.SetText i + 2, 3, st
  7. p0 = oCircle.Center
  8. Next oEnt
(未测试);J#039~
回复

使用道具 举报

0

主题

10

帖子

7

银币

初来乍到

Rank: 1

铜币
11
发表于 2009-10-22 14:52:16 | 显示全部楼层
谢谢你的回答,菲索
明天早上我会试试——那是在12个小时后。
回复

使用道具 举报

0

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
9
发表于 2009-10-22 16:01:26 | 显示全部楼层
Fuccaro,
如果您查看帮助,您将看到Center返回一个数组,而不是像p0定义的那样返回一个AcadPoint 尝试Dim P0作为变体,看看会发生什么。
回复

使用道具 举报

0

主题

9

帖子

4

银币

初来乍到

Rank: 1

铜币
13
发表于 2009-10-23 01:32:55 | 显示全部楼层
Fixo代码p0=oCircle。中心不工作
Cathy说得对,Center返回一个数组。Dim p0作为变体并没有解决问题,但我最终找到了正确的代码:Dim p0(0到2)作为Double
谢谢booth的回答 
回复

使用道具 举报

0

主题

3

帖子

4

银币

初来乍到

Rank: 1

铜币
4
发表于 2009-10-27 15:14:33 | 显示全部楼层
使用这段代码,当用户在屏幕上选择对象时,程序将只考虑圆
  1. Dim Code(0) As Integer
  2. Dim Val(0) As Variant
  3. Code(0) = 0
  4. Val(0) = "CIRCLE"
  5. Set SS = ThisDrawing.SelectionSets.Add("ss")
  6. UserForm1.hide
  7. SS.SelectOnScreen Code, Val
通过扩展代码和Val数组,我还可以添加更多的过滤条件(比如层名称)
但是如何在SS中保留用户选择的圆和椭圆?
回复

使用道具 举报

0

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
9
发表于 2009-10-28 13:57:26 | 显示全部楼层

可以构建复杂过滤器(与lisp中的方法相同):
  1. Dim ss As AcadSelectionSet
  2. ReDim Code(3) As Integer
  3. ReDim Val(3) As Variant
  4. Code(0) = -4
  5. Val(0) = ""
  6.           With ThisDrawing.SelectionSets
  7.                While .Count > 0
  8.                     .Item(0).Delete
  9.                Wend
  10.           Set ss = .Add("mySet")
  11.           End With
  12. UserForm1.hide
  13. ss.SelectOnScreen Code, Val
或者这个:
  1. ReDim Code(6) As Integer
  2. ReDim Val(6) As Variant
  3. Code(0) = -4
  4. Val(0) = ""
  5. Code(5) = 8
  6. Val(5) = "MyLayer"
  7. Code(6) = -4
  8. Val(6) = "AND>"

~&039;J#039~
回复

使用道具 举报

0

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
9
发表于 2009-10-29 02:04:32 | 显示全部楼层
哇!好消息,我非常熟悉Lisp选择集。再次感谢菲索
你能告诉我你为什么用ReDim吗?帮助文件不't建议使用ReDim声明新变量,它仅用于更改现有变量。
回复

使用道具 举报

0

主题

10

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2009-10-29 02:30:40 | 显示全部楼层

很高兴为您提供帮助,我已经从我的一个现有代码中自动复制了这段代码,并将其更改为适合您的代码;J#039~
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-1 18:07 , Processed in 0.937986 second(s), 81 queries .

© 2020-2025 乐筑天下

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