明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 909|回复: 6

[已解答] 请教“U”回的问题

[复制链接]
发表于 2013-12-8 20:13 | 显示全部楼层 |阅读模式
请各位高手帮忙怎样写可以让LISP画的线只用一次“U”回去。谢谢了!
(defun c:inbb ()
(setq temperr *error*)
  (setq *error* trap8)
  (setq old1 (getvar "blipmode"))
  (setq old (getvar "pickfirst"))
  (setq cmd (getvar "cmdecho"))
  (setq os (getvar "osmode"))
  (setvar "cmdecho" 0)
  (command "undo" "m")
  (command "undo" "m")
  (setvar "blipmode" 0)
  (setvar "pickfirst" 0)
  (setvar "osmode" 0)
  (setq di (getdist "\n请您指定请指定线条宽度1.05mm<0.35>:"))
  (if (= di nil) (setq di 0.35) (setq di di))
  (setq d (/ di 2))
  (setq ss (ssget))
  (setq si 0)
  (repeat (sslength ss)
    (setq na (ssname ss si))
    (setq ac (cdr (assoc 0 (entget na))))
    (cond ((= ac "LINE")
    (setq sp (cdr (assoc 10 (entget na))))
    (setq ep (cdr (assoc 11 (entget na))))
           (cond ((>= di 0.1)
           (setq jd (angle sp ep))
    (setq a1 (+ jd (/ pi 2)))
    (setq a2 (+ jd pi (/ pi 2)))
    (setq p1 (polar sp a1 d))
    (setq p2 (polar sp a2 d))
           (setq hd (angle ep sp))
           (setq a3 (+ hd (/ pi 2)))
           (setq a4 (+ hd pi (/ pi 2)))
           (setq p3 (Polar ep a3 d))
           (setq p4 (polar ep a4 d))
           (command "_.offset" d na p1 "")
           (command "_.offset" d na p2 "")
           (command "_.line" p1 p2 "")
           (command "_.line" p3 p4 "")
           (command "_.erase" na "")))
    (cond ((< di 0.8)
           (setq jd (angle sp ep))
    (setq a1 (+ jd (/ pi 2)))
    (setq a2 (+ jd pi (/ pi 2)))
    (setq p1 (polar sp a1 d))
    (setq p2 (polar sp a2 d))
    (command "_.offset" d na p1 "")
    (command "_.offset" d na p2 "")
    (command "_.erase" na "")))))
    (cond ((= ac "CIRCLE")
    (setq yx (cdr (assoc 10 (entget na))))
    (setq r (cdr (assoc 40 (entget na))))
    (setq pt (polar yx 0 (+ r 3)))
    (command "_.offset" d na yx "")
    (command "_.offset" d na pt "")
    (command "_.erase" na "")))
    (cond ((= ac "ARC")
    (setq zx (cdr (assoc 10 (entget na))))
    (setq r (cdr (assoc 40 (entget na))))
    (setq sa (cdr (assoc 50 (entget na))))
    (setq pt (polar zx sa (+ r 3)))
    (command "_.offset" d na zx "")
    (command "_.offset" d na pt "")
    (command "_.erase" na "")))
    (cond ((= ac "ELLIPSE")
    (setq zd (cdr (assoc 10 (entget na))))
    (setq dd (cdr (assoc 11 (entget na))))
    (setq dist (distance zd dd))
    (setq ang (angle zd dd))
    (setq od (polar zd ang (+ dist 3)))
    (command "_.offset" d na zd "")
    (command "_.offset" d na od "")
    (command "_.erase" na "")))
    (setq si (+ si 1)))
  (setvar "cmdecho" cmd)
  (setvar "blipmode" old1)
  (setvar "pickfirst" old)
  (setvar "osmode" os)
  (command "-OSNAP" "END,MID,QUA")
  (setq *error* temperr)

  (princ)
  )
发表于 2013-12-8 21:08 来自手机 | 显示全部楼层
貌似lisp执行的是连续的过程,你想u到第几步,不如直接删除了算了
发表于 2013-12-8 21:49 | 显示全部楼层
发表于 2013-12-8 22:01 | 显示全部楼层
我这里还有个简单一点的:http://bbs.xdcad.net/forum.php?mod=viewthread&tid=24561
发表于 2013-12-9 23:35 | 显示全部楼层
在程序开始用(Command "UNDO" "BEGIN")
结尾用(Command "UNDO" "END")
 楼主| 发表于 2013-12-11 06:24 | 显示全部楼层
1993063 发表于 2013-12-9 23:35
在程序开始用(Command "UNDO" "BEGIN")
结尾用(Command "UNDO" "END")

非常感谢!问题解决了!
发表于 2013-12-11 09:30 | 显示全部楼层
本帖最后由 1993063 于 2013-12-10 15:32 编辑
←═╬═☆心_傷 发表于 2013-12-10 12:24
非常感谢!问题解决了!

还有一个VLA方式设置回退点
(setq Doc (vla-get-activedocument (vlax-get-acad-object)))
开始:        (vla-EndUndoMark Doc)   ;结束这前没有结束的编组
        (vla-StartUndoMark Doc)          ;设定回退

结束:(vla-EndUndoMark Doc)           ;结束回退
这个好处是可以先选择再操作,那种command方式不能先选择再操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 21:46 , Processed in 0.202665 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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