明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: meflying

一个拖动函数

  [复制链接]
发表于 2004-4-16 11:39:00 | 显示全部楼层
meflying发表于2004-4-16 8:47:00找到原因了,就是使用entnext的时候会将其跟随对象包含在内,...对于POLYLINE也一样... 至于删除子对象是否就将这个对象给删了,还没研究过这个问题

那就把"ATTRIB" "VERTEX"踢出(不要加進)SS選集。

发表于 2004-4-16 12:46:00 | 显示全部楼层
好像上次在xd论坛,wkai写的一个阵列程序也出现了这个“事故”。原因就是用entnext取得选集。因此建议慎用。



过滤也可以,但何不直接用ss?
发表于 2004-4-16 13:13:00 | 显示全部楼层
改了一下
  1. (defun SSDrag (ss pt DragCommand / get-ss ss2 e cmdecho ret catchit)
  2.    ;; ssdrag main:
  3.    (setq cmdecho (getvar "cmdecho"))
  4.    (setvar "cmdecho" 0)
  5.    (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  6.    (vla-startundomark doc)
  7.    (command "_.copy" ss "" "_non" "0,0,0" "_non" "0,0,0")
  8.    (setq
  9.        catchit (vl-catch-all-apply
  10.              (function
  11.     (lambda  ()
  12.        (command DragCommand ss "" pt)
  13.        (while (/= "" (getvar "cmdnames")) (command pause))
  14.     )
  15.              )
  16.              nil
  17.          )
  18.    )
  19.    (vla-endundomark doc)
  20.    (command ".u")
  21.    (setvar "cmdecho" cmdecho)
  22.    (if (vl-catch-all-error-p catchit)
  23.            nil
  24.            (getvar "lastpoint")
  25.    )
  26. )
发表于 2004-4-16 14:33:00 | 显示全部楼层
UNDO用得不錯,我也用過UNDO這方法好些地方
发表于 2004-4-17 14:48:00 | 显示全部楼层
这样用Undo的话可能会导致使用这个函数的正式的程序不能用UNDO吗?


除非UndoMark可以嵌套?
发表于 2004-4-17 14:51:00 | 显示全部楼层
无痕发表于2004-4-16 11:16:00那就在程序里面用cond分别处理cmdnames返回值

这个当然是很容易想到的~~不过我对怎么得到刚刚运行过的Rotate命令转了多少角度有疑问啊,没有与“lastPOINT”类似功能的系统变量返回这个值。
发表于 2004-4-17 20:37:00 | 显示全部楼层
请教斑竹"_non"的作用是什么?
 楼主| 发表于 2004-4-17 21:00:00 | 显示全部楼层
就是不捕捉,你试试就知道了(用复制命令,打开捕捉点,在输入点的时候先输入non,再选择点...)我又改了一下:
  1. (defun SSDrag (ss pt DragCommand / cmdecho catchit)
  2.    ;; ssdrag main:
  3.    (setq cmdecho (getvar "cmdecho"))
  4.    (setvar "cmdecho" 0)
  5.    (setq catchit (vl-catch-all-apply
  6.        (function
  7.            (lambda ()
  8.                (command DragCommand ss "" pt pause)
  9.            )
  10.        )
  11.        nil
  12.    )
  13.    )
  14.    (command ".undo" "1")
  15.    (setvar "cmdecho" cmdecho)
  16.    (if (vl-catch-all-error-p catchit)
  17.            nil
  18.            (getvar "lastpoint")
  19.    )
  20. )
发表于 2004-4-17 21:19:00 | 显示全部楼层
这个好。相当精练了。精品


对于Rotate, Scale的Drag,有好办法吗?关键是如何取得返回值,SSDrag_Rotate需要返回角度,Scale需要返回比例。Move可以有"lastpoint"返回,但"lastangle"返回的可不是这个东东,"lastscale"有没有啊?
发表于 2004-4-18 00:00:00 | 显示全部楼层
秋枫发表于2004-4-17 21:19:00这个好。相当精练了。精品 对于Rotate, Scale的Drag,有好办法吗?关键是如何取得返回值,SSDrag_Rotate需要返回角度,Scale需要返回比例。Move可以有\"lastpo...

不尽然,我发现响应pause的时候,无论是否点取了,都有“lastpoint”返回值。 而如果在选ss,pt的时候就回车,也会错误执行,vl-catch-all-error-p没有起到它应该有的作用。我初步认为(还在研究,验证),vl-catch-all-apply ,vl-catch-all-error-p是用来处理vl函数返回值的,对autolsp意义不大。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 22:25 , Processed in 0.248301 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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