乐筑天下

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

这个程序用到VLAX类及曲线操作,为什么出错?

[复制链接]
gyl

15

主题

127

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2003-10-9 00:55:00 | 显示全部楼层 |阅读模式
我想实现这样一个功能:搜索当前图形中的所有样条曲线,对于每条曲线,从起点开始,每隔一定距离取一个点,然后将点的坐标写入文件,即将连续的样条曲线离散化。因此,写了这个程序,程序中的类和求曲线长的函数以及取曲线上一个点坐标的函数都是从本版下载的,只有宏函数是自己编的。该程序极不稳定,偶尔可以运行成功,多数情况下显示一个只有一个红叉的空白错误框,CAD命令行显示“参数太少”;如果出错后再次运行此宏,CAD必定崩溃退出。程序和图形文件都在此,程序内有详细注释。希望各位高手帮忙看一下毛病究竟出在什么地方。

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

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

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-10-9 06:57:00 | 显示全部楼层
这种出错应属选择集的BUG。而不是曲线的错误。
记得2000版的SsetObj.Delete就有问题,再试试现在的2004版本,其实也有这个BUG,所以不要使用该方法来清除选择集,应改用其它方法。

复制代码
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-10-9 06:59:00 | 显示全部楼层
另外,最后一个点坐标你可以直接使用曲线类的终点,而不必计算总长,再使用总长来找到最后一点,这样可能会由于偏差页找不到点。
你虽然程序中引用了曲线类,但却没有用到。
回复

使用道具 举报

gyl

15

主题

127

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2003-10-9 12:37:00 | 显示全部楼层
对于曲线类的使用,我的确不太理解。站长能否简单介绍一下方法步骤,结合实例更好。什么地方可以找到这方面的资料啊?VBA的随机帮助里好象没有这部分内容。
回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 2003-10-9 12:45:00 | 显示全部楼层
它是Visual Lisp提供的,在VBA中当然找不到了。
查看VL的帮助吧,其中以vlax开头,中间带有curve的几个函数就是它的说明了。
回复

使用道具 举报

gyl

15

主题

127

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2003-10-9 13:40:00 | 显示全部楼层
用曲线类重写了程序,错误依旧。毛病出在Pt = ObjCurve.GetPointAtDistance(dist)这一句,而且每次出错时写入文件的点数都不一样,有多有少。真是百思不得其解!
  1. Sub GetPointAtSpline()
  2.     Const ds As Double = 20          '曲线上的取点间隔
  3.     Dim dist As Double               '点至曲线端点的距离
  4.     Dim SsetObj As AcadSelectionSet  '选择集对象
  5.     Dim SsetName As String           '选择集名称
  6.     Dim LengthOfCurve As Double      '曲线全长
  7.     Dim Pt As Variant                '点坐标
  8.     Dim i As Integer, j As Integer, num As Integer
  9.     Dim gpCode(0) As Integer
  10.     Dim dataValue(0) As Variant
  11.     Dim groupCode As Variant, dataCode As Variant
  12.    
  13.     ThisDrawing.SendCommand "(vl-load-com)" & vbCr
  14.    
  15.     '定义引用曲线类模块
  16.     Dim ObjCurve As Curve
  17.     Set ObjCurve = New Curve
  18.    
  19.     '选择集名称
  20.     SsetName = "SplineSet"
  21.     '建立选择集
  22.     On Error Resume Next
  23.     Set SsetObj = ThisDrawing.SelectionSets.Add(SsetName)
  24.     If Err Then
  25.         Set SsetObj = ThisDrawing.SelectionSets.Item(SsetName)
  26.         SsetObj.Clear
  27.         Err.Clear
  28.     End If
  29.     On Error GoTo 0
  30.    
  31.     '将全部样条曲线添加到选择集
  32.     gpCode(0) = 0
  33.     dataValue(0) = "Spline"
  34.     groupCode = gpCode
  35.     dataCode = dataValue
  36.     SsetObj.Select acSelectionSetAll, , , groupCode, dataCode
  37.    
  38.     '打开文件用于存储样条曲线离散化后的点的坐标
  39.     Open "D:\curve.txt" For Output As #1
  40.     Print #1, "样条曲线数目:" & SsetObj.Count
  41.    
  42.     '在样条曲线上每隔一定距离取一个点,依次将点的坐标写入文件
  43.     For i = 1 To SsetObj.Count
  44.         Set ObjCurve.Entity = SsetObj.Item(i - 1)
  45.         '取得曲线全长
  46.         LengthOfCurve = ObjCurve.length
  47.         '计算要分的整段数
  48.         num = Int(LengthOfCurve / ds)
  49.         Print #1, "第" & i & "样条曲线长度:" & LengthOfCurve & "    曲线点数:" & num + 2
  50.         '起点
  51.         Pt = ObjCurve.StartPoint
  52.         Print #1, "1: "; Format(Pt(0), "0.000"); " "; Format(Pt(1), "0.000"); " "; Format(Pt(2), "0.000")
  53.         '中间各点
  54.         For j = 1 To num
  55.             dist = ds * j
  56.             Pt = ObjCurve.GetPointAtDistance(dist)
  57.             Print #1, j + 1 & ": "; Format(Pt(0), "0.000"); " "; Format(Pt(1), "0.000"); " "; Format(Pt(2), "0.000")
  58.         Next j
  59.         '终点
  60.         Pt = ObjCurve.EndPoint
  61.         Print #1, num + 2 & ": "; Format(Pt(0), "0.000"); " "; Format(Pt(1), "0.000"); " "; Format(Pt(2), "0.000")
  62.     Next i
  63.     Close 1
  64.     SsetObj.Delete
  65.    
  66.     MsgBox "坐标提取成功"
  67.    
  68. End Sub
回复

使用道具 举报

2

主题

77

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2003-10-9 21:36:00 | 显示全部楼层
我VLAX类的那个程序我调试了很多次都没有问题?就是后面这段贴出来的程序用Curve类会出现
“参数太少"崩溃退出.

xcuxyrjcqm3.jpg

xcuxyrjcqm3.jpg


0v2b1g0ki0m.jpg

0v2b1g0ki0m.jpg

回复

使用道具 举报

gyl

15

主题

127

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2003-10-9 21:40:00 | 显示全部楼层
在我的机器上,两种程序出错的几率差不多。而且曲线越多,出错可能越大。会不会是因为同时装了2002和2004的缘故呢?
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-10-9 21:44:00 | 显示全部楼层
不是的,可能是内存的问题。
回复

使用道具 举报

gyl

15

主题

127

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2003-10-9 21:52:00 | 显示全部楼层
内存问题?硬件问题还是软件问题?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-29 08:30 , Processed in 0.529218 second(s), 77 queries .

© 2020-2025 乐筑天下

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