明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3239|回复: 13

[在线等待]请问在建立选择集时怎样才能使用平移与缩放命令?

  [复制链接]
发表于 2003-12-21 22:46:00 | 显示全部楼层 |阅读模式
请问在建立选择集时怎样才能使用平移与缩放命令?如下(参考了前面的帖子)
restart:
    On Error Resume Next
    Selset.SelectOnScreen
    '====================================
            If Err Then
               Select Case Err.Number
                    Case -2147467259
                             Err.Clear
                             
                                    
                    Case -2147352567
                                    '按了取消键或其它透明命令
                          varCancel = ThisDrawing.GetVariable ("LASTPROMPT")
                                      If InStr(1, varCancel, "*Cancel*") <> 0 Or InStr(1, varCancel, "*取消*") <> 0 Then
                                        Err.Clear
                                        'Resume Exit_Here
                                        GoTo restart:
                                      Else
                                        Err.Clear
                                        GoTo Exit_Here
                                        'GoTo restart:
                                      End If
               End Select
        End If
但是 Err.Number 的值总是为0,怎样解决?
发表于 2003-12-21 22:51:00 | 显示全部楼层
这个问题目前无法解决,以前也试图解决过,但最后均没有结果。
关键是在按了平移和缩放时不产生出错,取消后选择的对象无法首先进入选择集。
 楼主| 发表于 2003-12-21 23:07:00 | 显示全部楼层
谢谢mccad,请问还有另外建立选择集的方法吗?我现在必须要建立选择集,但操作时总有一些实体不在窗口上,因此还要用平移和缩放。
发表于 2003-12-21 23:14:00 | 显示全部楼层
这是在网上看到的,介绍如何修正这种选择。但我试过之后,还是没有效果。
程序中的注释是我自己添加的,大家可以参考一下。


  1. Private Declare Function GetCursor Lib "user32" () As Long
  2.    
  3. Public Function SelectOnScreenFix() As AcadSelectionSet
  4.     Dim objSelSet As AcadSelectionSet
  5.     Dim objSelCol As AcadSelectionSets
  6.     Dim intCnt As Integer
  7.     Dim objEnts() As AcadEntity
  8.    
  9.     On Error GoTo Err_Control
  10.     ' 创建选择集
  11.     Set objSelCol = ThisDrawing.SelectionSets
  12.     For Each objSelSet In objSelCol
  13.         If objSelSet.Name = "sos" Then
  14.             objSelCol.Item("sos").Delete
  15.             Exit For
  16.         End If
  17.     Next
  18.     Set objSelSet = objSelCol.Add("sos")
  19.    
  20.     ' 当 GetCursor = 0 时,表示正常退出
  21.     ' 当 GetCursor = 65553 时,表示执行平移、缩放等操作
  22.     Do
  23.         objSelSet.SelectOnScreen
  24.         If GetCursor = 2822 Then ' 这儿有出入,实际测试时为65553
  25.             ' 这儿也有疑问,执行其它操作时选择集中的实体还没真正产生,因而它的数目为0
  26.             For intCnt = 0 To ThisDrawing.ActiveSelectionSet.Count - 1
  27.                 ReDim Preserve objEnts(intCnt)
  28.                 Set objEnts(intCnt) = ThisDrawing.ActiveSelectionSet(intCnt)
  29.             Next intCnt
  30.             objSelSet.AddItems objEnts
  31.         End If
  32.     Loop Until GetCursor = 0
  33.     Set SelectOnScreenFix = objSelSet
  34.    
  35. Exit_Here:
  36.     Exit Function
  37.    
  38. Err_Control:
  39.     Select Case Err.Number
  40.         Case Else
  41.             MsgBox Err.Description
  42.     End Select
  43. End Function
 楼主| 发表于 2003-12-21 23:24:00 | 显示全部楼层
拜托大家帮我解决,我着急用,今晚一直等着。主要是我的图上有300多个闭合多段线,又不能全选,要分别选出,不用平移和缩放怎样办。
发表于 2003-12-22 07:53:00 | 显示全部楼层
用鼠标中键平移吧
 楼主| 发表于 2003-12-22 16:47:00 | 显示全部楼层
用鼠标中键倒是可以,如果在没有鼠标中键的机子上就麻烦了,且很容易失误。再看有没人能帮忙解决。
发表于 2003-12-22 17:34:00 | 显示全部楼层
建议:
1.转2004版本;
2.用滚动条平移(呵呵,慢慢点);
3.如果选择对象是在整个程序的最前面(也就是先选择对象,再执行后面的程序),可使用LISP的(ssget)来选择对象,然后再执行程序,在需要选择集时用select方法的acSelectionSetPrevious选项来解决。
 楼主| 发表于 2003-12-22 22:40:00 | 显示全部楼层
我没用过2004,里面能有好方法吗?mccad建议的第三种方法到是可以一试,不过我用vba
发表于 2003-12-22 23:10:00 | 显示全部楼层
300多个闭合图形?说说你要做什么?说不定还有别的方法!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 10:48 , Processed in 0.193644 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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