明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1345|回复: 4

[求助] ObjectModified 多段线调整问题

[复制链接]
发表于 2012-5-25 17:52:35 | 显示全部楼层 |阅读模式
        小弟用 VBA 写的 Modified 事件 遇到一问题,望各位不吝赐教,万分感激

        因为虚拟机现打不开,具体的代码不再贴出,描述如下:
                                
        如图,捕获 多段线 的 Modified 事件,欲实现功能:
        拉动 A 中的 1点, 正常情况下,会产生 B 一样的改变,
        但是我需要的是保持 1.2 点在同一水平线上,即 多段线外形 不发生改变。

       问题是这样的,我写了事件,当调整 1 时, 自动调整 2,
        此时问题出现了, 因为 Modified 事件触发后,多段线便被锁定了,
        即出现了报错:对象正在通知中。即不能在事件中操作事件触发的对象。
        
        望各位不吝赐教,我已经想了好些方法,都没有效果,谁能给点意见,谢谢!!


本帖子中包含更多资源

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

x
发表于 2012-5-28 05:28:33 | 显示全部楼层
本帖最后由 woaishuijia 于 2012-6-2 05:26 编辑

用定时器吧
插入标准模块"模块1",代码
  1. Option Explicit

  2. Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  3. Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

  4. Dim lngTimerID As Long

  5. Private Sub TimerProc()
  6.     KillTimer 0, lngTimerID
  7.     ThisDrawing.ModifyPL
  8. End Sub

  9. Sub ST(T As Integer)
  10.     lngTimerID = SetTimer(0, 0, T, AddressOf TimerProc)
  11. End Sub

thisdrawing模块代码
  1. Option Explicit

  2. Dim WithEvents PL As AcadLWPolyline
  3. Dim P1 As Variant

  4. Private Sub PL_Modified(ByVal pObject As IAcadObject)
  5.     Dim P2 As Variant
  6.     On Error GoTo 10
  7.     P2 = PL.Coordinates
  8.     If P2(2) <> P1(2) Or P2(3) <> P1(3) Then
  9.         P2(4) = P2(4) + P2(2) - P1(2)
  10.         P2(5) = P2(5) + P2(3) - P1(3)
  11.         P1 = P2
  12.         模块1.ST 1
  13.     Else
  14.         P1 = PL.Coordinates
  15.     End If
  16. 10 End Sub

  17. Sub AddPL()
  18.     Dim P2(5) As Double
  19.     P2(2) = 100
  20.     P2(3) = 100
  21.     P2(4) = 200
  22.     P2(5) = 100
  23.     Set PL = ThisDrawing.ModelSpace.AddLightWeightPolyline(P2)
  24.     P1 = P2
  25. End Sub

  26. Sub ModifyPL()
  27.     On Error Resume Next
  28.     PL.Coordinates = P1
  29. End Sub

点评

试过了,很不错。不过这样的话,容易导致屏幕没有及时刷新,只能关闭当前文件后,再打开。 想了下,决定还是将多段线叉开成一条直线和一个块。非常感谢您!  发表于 2012-6-4 18:02
发表于 2012-5-28 05:29:20 | 显示全部楼层
本帖最后由 woaishuijia 于 2012-6-2 05:28 编辑

重复,请版主删帖
 楼主| 发表于 2012-5-31 14:13:38 | 显示全部楼层
非常感谢啊,我试一试。
 楼主| 发表于 2012-5-31 14:15:23 | 显示全部楼层
woaishuijia 发表于 2012-5-28 05:29
用定时器吧
插入标准模块"模块1",代码

非常感谢啊,我试一试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 16:30 , Processed in 0.168401 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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