szx025 发表于 2013-11-5 09:03:53

合并程序

;**********单关图层*******************
(Defun C:f1 (/ SS CNT LAY LAYLST VAL)
(if (not (setq SS (ssget "i")))
    (progn
      (setq SS (ssget))))
(if SS
    (progn
      (setq CNT 0)
      (while (setq LAY (ssname SS CNT))
      (setq LAY (cdr (assoc 8 (entget LAY))))
      (if (not (member LAY LAYLST))
          (setq LAYLST (cons LAY LAYLST))
      )
      (setq CNT (1+ CNT))
      )
      (if (member (getvar "CLAYER") LAYLST)
      (setq LAY (getvar "CLAYER"))
      (setvar "CLAYER" (setq LAY (last LAYLST)))
      )
      (command "_.-LAYER" "_OFF" "*" "_Y")
      (foreach VAL LAYLST (command "_ON" VAL))
      (command "")
      
      (if (= (length LAYLST) 1)
      (prompt (strcat "\nLayer " (car LAYLST) " has been isolated."))
      (prompt (strcat "\n" (itoa (length LAYLST)) " layers have been isolated. "
                        "Layer " LAY " is current."
                )
      )
      )
    )
)
(restore_old_error)
(princ)
)
这是一个关闭图层的程序,选中某一物体,程序就关闭除所选物体所在图层的其他层。

(defun C:zx(/ pt1 pt2 dis x1 pt3 pt4 pt5 pt6 p1 p2 p3 p4 ptt pts ang ang1 scale)
;;保存系统变量设置
(setq old_OS(getvar "OSMODE")
      old_CMD (getvar "CMDECHO")
       old_OR (getvar "OrthoMode")
    )
(setvar "CMDECHO" 0)
(setvar "OSMODE" 0)
(setvar "OrthoMode" 0)
(setq scale (getreal "\nScale<100>:"))
(if (= scale nil)
(setq scale 100)
)
(setq pt1 (getpoint "\nFirst point:"))
(setq pt2 (getpoint pt1 "\nSecond point:"))
(setq ang (angle pt1 pt2))
(setq dis (distance pt1 pt2))
(setq x1 (/ (- dis (* 2 scale)) 2))
(setq pt3 (polar pt1 ang x1))
(setq pt4 (polar pt1 ang (+ x1 (* 2 scale))))
(setq pt5 (polar pt3 (+ ang 1.32582) (* 2.0616 scale)))
(setq pt6 (polar pt4 (- ang 1.81577) (* 2.0616 scale)))
(command "pline" pt1 pt2 "")
   (setq ee (entlast))
   (setVar "OrthoMode" 1)
(setq ptt (getpoint pt2 "\n剪切方向:"))
(setq ang1 (angle pt2 ptt))
(setq p1 (polar pt1 ang1 100))
(setq p2 (polar pt2 ang1 100))
(setq p3 (polar pt2 ang1 1000))
(setq p4 (polar pt1 ang1 1000))
(setq pts (list P1 P2 P3 P4))
(command"_ERASE"(ssget "WP" pts)"")
   (command "_trim" ee "" "f" p1 p2"" "")
(entdel ee)
(command "pline" pt1 "w" "0" "0" pt3 pt5 pt6 pt4 pt2 "")
   ;;恢复系统变量设置
    (setvar "CMDECHO" old_CMD)
    (setvar "OSMODE" old_OS)
    (setvar "OrthoMode" old_OR)
(princ)(princ)
)      
这是一个画折断线的程序,请问,如何把这两个程序合并成一个程序,


Andyhon 发表于 2013-11-5 09:13:18

(defun C:zx(/ pt1 pt2 dis x1 pt3 pt4 pt5 pt6 p1 p2 p3 p4 ptt pts ang ang1 scale)
   (C:f1 )
   ;;保存系统变量设置
...
)

szx025 发表于 2013-11-5 09:22:56

不行啊,出现
Layer 楼梯 has been isolated.; 错误: no function definition: RESTORE_OLD_ERROR

Andyhon 发表于 2013-11-5 10:03:38

您得先让 单关图层 可单独执行...

或先行关闭
;; (restore_old_error)

emk 发表于 2013-11-5 11:33:55

楼主不应该把一个截断线程序分n个主题帖子发帖(版主可以合并下),自己发的帖子可以更新帖子标题的。应该说明自己预期的程序运行之目的(最终效果);
Andyhon 长老的用法是对的
话有点多,楼主见谅
页: [1]
查看完整版本: 合并程序