明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1175|回复: 6

本人刚学vba不久,编了一个随机画正多边形的命令,运行出错,求大神指点

[复制链接]
发表于 2017-11-20 16:45:03 | 显示全部楼层 |阅读模式
Sub polygon()
Dim myselect(1 To 300) As AcadEntity '定义选择集数组
Dim num As Integer
Dim pnt As Variant
Dim lpnt As Variant
num = 5 '正多边形边数
Dim fpnt(0 To 1) As Variant '起点坐标
For i = 1 To 300 '循环300次
fpnt(0) = 3000 * Rnd: fpnt(1) = 3000 * Rnd '起点随机坐标
Dim leng As Double
leng = Rnd * 10 + 1 '边长随机长度
ReDim lpnt(0 To num * 2 - 1) As Double '下面是画正多边形
pnt = fpnt
lpnt(0) = pnt(0)
lpnt(1) = pnt(1)
Dim st As Integer
For st = 1 To num - 1
     pnt = ThisDrawing.Utility.PolarPoint(pnt, (3.14159265 * 2 / num) * (st - 1), leng)
     lpnt(st * 2) = pnt(0)
     lpnt(st * 2 + 1) = pnt(1)
Next st
Set myselect(i) = ThisDrawing.ModelSpace.AddLightWeightPolyline(lpnt)
Next i
ThisDrawing.Regen (True)
End Sub
系统提示pnt = ThisDrawing.Utility.PolarPoint(pnt, (3.14159265 * 2 / num) * (st - 1), leng)出错,求大神指点怎么修改
发表于 2017-11-20 17:37:08 | 显示全部楼层
pnt应该是三维点坐标,你给的是二维的
 楼主| 发表于 2017-11-20 18:21:32 | 显示全部楼层
zzyong00 发表于 2017-11-20 17:37
pnt应该是三维点坐标,你给的是二维的

好的,我现在修改下看行不行
 楼主| 发表于 2017-11-20 18:29:24 | 显示全部楼层
zzyong00 发表于 2017-11-20 17:37
pnt应该是三维点坐标,你给的是二维的

我试过了,还是不行,应该不是pnt几维坐标的问题,我把这个命令流改成只画一个固定起点坐标和固定边长的多边形就可以运行了,改成随机起点和随机边长就行不通
发表于 2017-11-20 21:22:56 | 显示全部楼层
q123135abc 发表于 2017-11-20 18:29
我试过了,还是不行,应该不是pnt几维坐标的问题,我把这个命令流改成只画一个固定起点坐标和固定边长的 ...

不相信?
  1. Sub polygon()
  2. Dim myselect(1 To 300) As AcadEntity '定义选择集数组
  3. Dim num As Integer
  4. Dim pnt As Variant
  5. Dim lpnt As Variant
  6. num = 5 '正多边形边数
  7. Dim fpnt(0 To 2) As Double '起点坐标
  8. Dim leng As Double
  9. Dim i As Long
  10. For i = 1 To 300 '循环300次
  11. fpnt(0) = 3000 * Rnd: fpnt(1) = 3000 * Rnd: fpnt(2) = 0 '起点随机坐标

  12. leng = Rnd * 10 + 1 '边长随机长度
  13. ReDim lpnt(0 To num * 2 - 1) As Double '下面是画正多边形
  14. pnt = fpnt
  15. lpnt(0) = pnt(0)
  16. lpnt(1) = pnt(1)
  17. Dim st As Integer
  18. For st = 1 To num - 1
  19.      pnt = ThisDrawing.Utility.PolarPoint(pnt, (3.14159265 * 2 / num) * (st - 1), leng)
  20.      lpnt(st * 2) = pnt(0)
  21.      lpnt(st * 2 + 1) = pnt(1)
  22. Next st
  23. Set myselect(i) = ThisDrawing.ModelSpace.AddLightWeightPolyline(lpnt)
  24. Next i
  25. ThisDrawing.Regen (True)
  26. End Sub
 楼主| 发表于 2017-11-20 22:20:15 | 显示全部楼层

大神你说的是对的,我应该是把数据类型弄错了,所以导致运行错误,非常感谢你的帮忙,以后还得多多向你请教!
发表于 2018-3-1 16:43:31 | 显示全部楼层
还缺少一行闭合多段线的命令吧?不然会是有缺口的多边形。
myselect(i).Closed = True
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:37 , Processed in 0.196808 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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