找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 811|回复: 6

[VBA程序]:VBA编程中如何实现橡皮筋功能?

[复制链接]
发表于 2004-5-1 14:26:48 | 显示全部楼层 |阅读模式

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

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

×
各位大侠:如何在VBA中实现橡皮筋功能?
如实现CAD系统的画圆弧中的橡皮筋功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-5-1 20:41:30 | 显示全部楼层
如果通过CAD的命令调用还基本可以,如果要自己实现,难度比较大,得不偿失。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-3 14:53:22 | 显示全部楼层
如果是取点的处理,将前一个点作为参数,传递给第二个点的取得那个函数
Dim basePnt(0 To 2) As Double
basePnt(0) = 2#: basePnt(1) = 2#: basePnt(2) = 0#
returnPnt = ThisDrawing.Utility.GetPoint(basePnt, "Enter a point: ")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-5-9 12:23:33 | 显示全部楼层
将VLAX类的EvalLispExpression子程改动一下可以实现



Public function EvalLispExpression(lispStatement As String)
    On Error GoTo ErrClear
    Dim sym As Object, ret As Object, retVal
    EvalLispExpression = ""
    Set sym = VLF.Item("read").funcall(lispStatement)
    retVal = VLF.Item("eval").funcall(sym)
    EvalLispExpression = retVal
ErrClear:
End Function



总觉得VLAX类不太健壮

测试(插入一个块,拖动并旋转):

先导入Lisp函数dd,再生成一个名为"123"的块



Sub Test()
On Error Resume Next
    Dim obj As VLAX, retVal
    Dim a As String, b
    Dim c(2) As Double, d(2) As Double
    Dim pObj As AcadBlockReference, pLine As AcadLine
    Set obj = New VLAX
    retVal = obj.EvalLispExpression("(dd)")
    Set obj = Nothing
    a = Split(retVal, ",")(0)
    Err.Clear
    Set pObj = ThisDrawing.ModelSpace.InsertBlock(c, "123", 1, 1, 1, 0)
    ThisDrawing.Utility.Prompt vbCr & "请输入插入点:" & vbCr
    Do While a <> "3"
        Set obj = New VLAX
        retVal = obj.EvalLispExpression("(dd)")
        Set obj = Nothing
        a = Split(retVal, ",")(0)
        Err.Clear
        If a = 5 Then
            b = Split(retVal, ",")
            Err.Clear
            c(0) = b(1)
            c(1) = b(2)
            pObj.InsertionPoint = c
            Err.Clear
        End If
    Loop
    a = 5
    ThisDrawing.Utility.Prompt vbCr & "请输入旋转角度:" & vbCr
    Set pLine = ThisDrawing.ModelSpace.AddLine(c, d)
    Do While a <> "3"
        Set obj = New VLAX
        retVal = obj.EvalLispExpression("(dd)")
        Set obj = Nothing
        a = Split(retVal, ",")(0)
        Err.Clear
        If a = 5 Then
            b = Split(retVal, ",")
            Err.Clear
            c(0) = b(1)
            c(1) = b(2)
            pLine.EndPoint = c
            pObj.Rotation = ThisDrawing.Utility.AngleFromXAxis(pObj.InsertionPoint, c)
            Err.Clear
        End If
    Loop
    pLine.Delete
End Sub










Lisp函数



(defun dd()
  (setq a (grread t))
  (if (OR (= 3 (car a)) (= 5 (car a)))
    (setq str (strcat (itoa (car a))
        ","
        (rtos (caadr a) 2 4)
        ","
        (rtos (cadadr a) 2 4)
        ","
        (rtos (cadr (cdadr a)) 2 4)
       )
    )
  )
  (IF (OR (= 2 (car a)) (= 11 (car a)))
    (setq str (strcat (itoa (car a))
        ","
        (itoa (cadr a))
       )
    )
  )
    str
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-5-13 11:42:15 | 显示全部楼层
具体思路是不断调用VLAX类,用Lisp函数(DD)返回当前鼠标位置,直到按下鼠标左键为止
不过由于VLAX类不够健壮,上述测试有10%的几率会使AutoCad崩溃
最好的办法还是调用ObjectArx
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 04:45 , Processed in 0.170881 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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