明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 451|回复: 2

提问-单线变双线图层不能设置

[复制链接]
发表于 2023-6-6 22:19 | 显示全部楼层 |阅读模式
请教一下,为什么下面程序无法更改图层,

  • (defun myerr (s)
  •   (if (/= s "Function cancelled")
  •     (princ (strcat "\nError: " s)))
  •   (if _oc (setvar "cmdecho" _oc))
  •   (setq *error* olderr)
  •   (princ)
  • )
  • (if wid nil (setq wid 240.0))
  • (defun CSDBL(/ ss _oc ssl yn llay tllay)
  •   (setq _oc (getvar "cmdecho"))
  •   (setvar "cmdecho" 0)
  •   (setq olderr *error* *error* myerr)
  •   (setq llay (getvar "clayer"))
  •   (command "undo" "group")
  •   (graphscr)
  •   (setq ss0 (ssget '((0 . "LINE"))) cont 0)
  •   (if ss0
  •     (progn
  •       (setq ssl (sslength ss0))
  •       (initget "Yes No")
  •       (setq yn (getkword "是否改变变双后线的图层[Y,N]<Y>: "))
  •       (if (or (= yn "") (= yn nil))
  •         (progn
  •           (setq tllay (getstring (strcat "请输入图层名<" llay ">: ")))
  •           (if (/= tllay "") (setq llay tllay))
  •         )
  •       )
  •       (setq twid (getreal (strcat "请输入变双后双线间的宽度<" (rtos wid 2) ">: ")))
  •       (if twid (setq wid twid))
  •       (setq hwid (/ wid 2.0))
  •       (if (> ssl 30)
  •         (progn
  •           (princ)
  •           (princ "\n程序正在执行中 -- 稍待...")
  •         )
  •       )
  •       (while (setq el (ssname ss0 cont))
  •        (cond ((= "LINE" (cdr (assoc 0 (entget el)))) (dbl hwid))
  •              (t (setq ss0 (ssdel el ss0) cont (1- cont)))
  •        )
  •        (setq cont (1+ cont))
  •       )
  •     )
  •     (princ "\n没有选到任何实体")
  •   )
  •   (command "undo" "end")
  •   (if _oc (setvar "cmdecho" _oc))
  •   (princ)
  • )
  • ;;;Get insective point's max distance
  • (defun gtl (p1 p2 / p3 p4 an1 mx mn c1 ipt n )
  •   (setq n (length clst) mx -1200000.0 mn 1200000.0 c1 0)
  •   (repeat n      
  •    (setq el0 (entget (ssname ss (nth c1 clst)))
  •          w1 (gthw (ssname ss (nth c1 clst)))
  •          p3 (cdr (assoc 10 el0)) p4 (cdr (assoc 11 el0))
  •          an1 (angle p3 p4)
  •    )
  •    (if (setq ipt (inters p1 p2 (polar p3 (+ an1 (/ pi 2)) hwid)
  •                             (polar p4 (+ an1 (/ pi 2)) hwid)))
  •     (setq ipt (distance p1 ipt) mn (min mn ipt) mx (max mx ipt))
  •     (if (setq ipt (inters p1 p2 (polar p3 (+ an1 (/ pi 2)) hwid)
  •                             (polar p4 (+ an1 (/ pi 2)) hwid) nil))
  •      (if (/= (+ (distance p1 ipt) (distance ipt p2)) (distance p1 p2))
  •       (setq ipt (- (distance ipt p1)) mn (min mn ipt) mx (max mx ipt))
  •      )
  •      (setq mx (max 0.0 mx))
  •     )
  •    )
  •    (if (setq ipt (inters p1 p2 (polar p3 (- an1 (/ pi 2)) hwid)
  •                             (polar p4 (- an1 (/ pi 2)) hwid)))
  •     (setq ipt (distance p1 ipt) mn (min mn ipt) mx (max mx ipt))
  •     (if (setq ipt (inters p1 p2 (polar p3 (- an1 (/ pi 2)) hwid)
  •                         (polar p4 (- an1 (/ pi 2)) hwid) nil))
  •      (if (/= (+ (distance p1 ipt) (distance ipt p2)) (distance p1 p2))
  •       (setq ipt (- (distance ipt p1)) mn (min mn ipt) mx (max mx ipt))
  •      )
  •      (setq mx (max 0.0 mx))
  •     )
  •    )
  •    (setq c1 (1+ c1))
  •   )   ;;;end repeat
  •   (list mx mn)
  • )
  • (defun dbl  (hwid / ss pt1 pt2 pt3 pt4 ipt
  •                n1 el0 ang c1 plst clst)
  •   (setq el (entget el)
  •         pt1 (cdr (assoc 10 el)) pt2 (cdr (assoc 11 el))
  •         ang (angle pt1 pt2) c1 0 plst () ld (distance pt1 pt2)
  •         el (subst (cons 8 llay) (assoc 8 el) el)
  •   )
  •   (setq ss (ssdel (cdr (assoc -1 el))
  •      (ssget "c" (mapcar '+ '(20 20) (mapcar 'max pt1 pt2))
  •                 (mapcar '- (mapcar 'min pt1 pt2) '(20 20))
  •   )))
  •   (while (setq el0 (ssname ss c1))
  •    (cond
  •     ((and (= "LINE" (cdr (assoc 0 (entget el0)))) (ssmemb el0 ss0))
  •       (setq dt nil el0 (entget el0)
  •             pt3 (cdr (assoc 10 el0)) pt4 (cdr (assoc 11 el0)))
  •       (if (setq ipt (inters pt1 pt2 pt3 pt4))
  •         (cond ((equal ipt pt1 0.1) (setq dt ld))
  •               ((equal ipt pt2 0.1) (setq dt 0.0))
  •               (t  (setq dt (distance ipt pt2)))
  •         )  ;end cond
  •       )
  •       (if dt
  •        (if (setq clst (assoc dt plst))
  •         (setq plst (subst (append clst (list c1)) clst plst))
  •         (setq plst (cons (list dt c1) plst))
  •       ))
  •     )  ;;end of line
  •    )  ;end of cond
  •    (setq c1 (1+ c1))
  •   ) ;end while
  •   (setq pt1 (polar pt1 (+ ang (/ pi 2)) hwid)
  •         pt2 (polar pt2 (+ ang (/ pi 2)) hwid)
  •         pt3 (polar pt1 (- ang (/ pi 2)) (* 2 hwid))
  •         pt4 (polar pt2 (- ang (/ pi 2)) (* 2 hwid))
  •   )
  •   (if plst (progn
  •     (setq t1 0)
  •     (while (< -1.0 (setq dt (apply 'max (mapcar 'car plst))))
  •      (setq clst (cdr (assoc dt plst))
  •            plst (subst '(-1 0) (assoc dt plst) plst)
  •      )
  •      (cond
  •       ((= dt ld) (setq t1 1)
  •        (setq dt (gtl pt1 pt2) pt1 (polar pt1 ang (car dt))
  •              dt (gtl pt3 pt4) pt3 (polar pt3 ang (car dt)))
  •       )
  •       ((= dt 0.0)
  •        (if (= t1 0)
  •         (setq el (subst (cons 10 pt1) (assoc 10 el) el)
  •               el (subst (cons 11 pt3) (assoc 11 el) el)
  •               el (entmake el) t1 1
  •        ))
  •        (setq t1 2)
  •        (setq dt (gtl pt2 pt1) pt2 (polar pt2 (+ ang pi) (car dt))
  •              dt (gtl pt4 pt3) pt4 (polar pt4 (+ ang pi) (car dt)))
  •       )
  •       (t (if (= t1 0)
  •         (setq el (subst (cons 10 pt1) (assoc 10 el) el)
  •               el (subst (cons 11 pt3) (assoc 11 el) el)
  •               el (entmake el) t1 1
  •         ))
  •        (if (< (car clst) 0.0)
  •         (setq ipt (polar pt2 ang (+ (- dt) (car clst)))
  •               el (subst (cons 10 pt1) (assoc 10 el) el)
  •               el (subst (cons 11 ipt) (assoc 11 el) el)
  •               el (entmake el)
  •               dt (polar pt4 ang (+ (- dt) (car clst)))
  •               el (subst (cons 10 dt) (assoc 10 el) el)
  •               el (entmake el)
  •               el (subst (cons 11 pt3) (assoc 11 el) el)
  •               el (entmake el)
  •               pt1 (polar ipt ang (* (car clst) -2))
  •               pt3 (polar dt ang (* (car clst) -2))
  •               el (subst (cons 10 pt1) (assoc 10 el) el)
  •               el (subst (cons 11 pt3) (assoc 11 el) el)
  •               el (entmake el)
  •         )
  •        (progn
  •         (if (> (car (setq dt (gtl pt1 pt2))) 0.0)
  •           (setq ipt (polar pt1 ang (cadr dt))
  •                 el (subst (cons 10 pt1) (assoc 10 el) el)
  •                 el (subst (cons 11 ipt) (assoc 11 el) el)
  •                 el (entmake el) pt1 (polar pt1 ang (car dt))
  •         ))
  •         (if (> (car (setq dt (gtl pt3 pt4))) 0.0)
  •           (setq ipt (polar pt3 ang (cadr dt))
  •                 el (subst (cons 10 pt3) (assoc 10 el) el)
  •                 el (subst (cons 11 ipt) (assoc 11 el) el)
  •                 el (entmake el) pt3 (polar pt3 ang (car dt))
  •         ))
  •        )) ;;;end of if <
  •       )
  •      )   ;;; end cond
  •     )    ;;; end while
  •     (setq el (subst (cons 10 pt1) (assoc 10 el) el)
  •           el (subst (cons 11 pt2) (assoc 11 el) el)
  •           el (entmake el)
  •           el (subst (cons 10 pt3) (assoc 10 el) el)
  •           el (subst (cons 11 pt4) (assoc 11 el) el)
  •           el (entmake el)
  •     )
  •     (if (/= t1 2)
  •        (setq el (subst (cons 10 pt2) (assoc 10 el) el)
  •              el (subst (cons 11 pt4) (assoc 11 el) el)
  •              el (entmake el) t1 1
  •     ))
  •     )    ;; end if plst progn
  •     (setq el (subst (cons 10 pt1) (assoc 10 el) el)
  •           el (subst (cons 11 pt3) (assoc 11 el) el)
  •           el (entmake el)
  •           el (subst (cons 11 pt2) (assoc 11 el) el)
  •           el (entmake el)
  •           el (subst (cons 10 pt4) (assoc 10 el) el)
  •           el (entmake el)
  •           el (subst (cons 11 pt3) (assoc 11 el) el)
  •           el (entmake el)
  •     )
  •    )    ;;; end if plst
  • )    ;;;End defun dbl
  • ;;;; Get half width
  • (defun gthw (sn / w1)
  • (setq w1 (cdr (assoc -3 (entget sn (list "AP_"))))
  •        w1 (if w1 (cdr (assoc 1040 (cdar w1))) 240)
  •        w1 (/ w1 2.0)
  • ))
  • (defun c:dbl   () (csdbl))
  • (princ "\n\t\t Copyright by 陈松 -- 南昌 (c) 1996.9.22")
  • (princ "\n\t\tC:CSDBL 已经加载. 键入 DBL 执行命令.")
  • (princ)
  • 

本帖子中包含更多资源

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

x
发表于 2023-6-7 09:21 | 显示全部楼层
楼主23行写的有点问题。
  1. (defun myerr (s)
  2.   (if (/= s "Function cancelled")
  3.     (princ (strcat "\nError: " s)))
  4.   (if _oc (setvar "cmdecho" _oc))
  5.   (setq *error* olderr)
  6.   (princ)
  7. )

  8. (if wid nil (setq wid 240.0))
  9. (defun CSDBL(/ ss _oc ssl yn llay tllay)
  10.   (setq _oc (getvar "cmdecho"))
  11.   (setvar "cmdecho" 0)
  12.   (setq olderr *error* *error* myerr)
  13.   (setq llay (getvar "clayer"))
  14.   (command "undo" "group")
  15.   (graphscr)
  16.   (setq ss0 (ssget '((0 . "LINE"))) cont 0)
  17.   (if ss0
  18.     (progn
  19.       (setq ssl (sslength ss0))
  20.       (initget "Yes No")
  21.       (setq yn (getkword "是否改变变双后线的图层[Y,N]<Y>: "))
  22.       (if (or (= yn "")(= yn "Yes")(= yn nil))
  23.         (progn
  24.           (setq tllay (getstring (strcat "请输入图层名<" llay ">: ")))
  25.           (if (/= tllay "") (setq llay tllay))
  26.         )
  27.       )
  28.       (setq twid (getreal (strcat "请输入变双后双线间的宽度<" (rtos wid 2) ">: ")))
  29.       (if twid (setq wid twid))
  30.       (setq hwid (/ wid 2.0))
  31.       (if (> ssl 30)
  32.         (progn
  33.           (princ)
  34.           (princ "\n程序正在执行中 -- 稍待...")
  35.         )
  36.       )
  37.       (while (setq el (ssname ss0 cont))
  38.        (cond ((= "LINE" (cdr (assoc 0 (entget el)))) (dbl hwid))
  39.              (t (setq ss0 (ssdel el ss0) cont (1- cont)))
  40.        )
  41.        (setq cont (1+ cont))
  42.       )
  43.     )
  44.     (princ "\n没有选到任何实体")
  45.   )
  46.   (command "undo" "end")
  47.   (if _oc (setvar "cmdecho" _oc))
  48.   (princ)
  49. )

  50. ;;;Get insective point's max distance
  51. (defun gtl (p1 p2 / p3 p4 an1 mx mn c1 ipt n )
  52.   (setq n (length clst) mx -1200000.0 mn 1200000.0 c1 0)
  53.   (repeat n      
  54.    (setq el0 (entget (ssname ss (nth c1 clst)))
  55.          w1 (gthw (ssname ss (nth c1 clst)))
  56.          p3 (cdr (assoc 10 el0)) p4 (cdr (assoc 11 el0))
  57.          an1 (angle p3 p4)
  58.    )
  59.    (if (setq ipt (inters p1 p2 (polar p3 (+ an1 (/ pi 2)) hwid)
  60.                             (polar p4 (+ an1 (/ pi 2)) hwid)))
  61.     (setq ipt (distance p1 ipt) mn (min mn ipt) mx (max mx ipt))
  62.     (if (setq ipt (inters p1 p2 (polar p3 (+ an1 (/ pi 2)) hwid)
  63.                             (polar p4 (+ an1 (/ pi 2)) hwid) nil))
  64.      (if (/= (+ (distance p1 ipt) (distance ipt p2)) (distance p1 p2))
  65.       (setq ipt (- (distance ipt p1)) mn (min mn ipt) mx (max mx ipt))
  66.      )
  67.      (setq mx (max 0.0 mx))
  68.     )
  69.    )
  70.    (if (setq ipt (inters p1 p2 (polar p3 (- an1 (/ pi 2)) hwid)
  71.                             (polar p4 (- an1 (/ pi 2)) hwid)))
  72.     (setq ipt (distance p1 ipt) mn (min mn ipt) mx (max mx ipt))
  73.     (if (setq ipt (inters p1 p2 (polar p3 (- an1 (/ pi 2)) hwid)
  74.                         (polar p4 (- an1 (/ pi 2)) hwid) nil))
  75.      (if (/= (+ (distance p1 ipt) (distance ipt p2)) (distance p1 p2))
  76.       (setq ipt (- (distance ipt p1)) mn (min mn ipt) mx (max mx ipt))
  77.      )
  78.      (setq mx (max 0.0 mx))
  79.     )
  80.    )
  81.    (setq c1 (1+ c1))
  82.   )   ;;;end repeat
  83.   (list mx mn)
  84. )

  85. (defun dbl  (hwid / ss pt1 pt2 pt3 pt4 ipt
  86.                n1 el0 ang c1 plst clst)
  87.   (setq el (entget el)
  88.         pt1 (cdr (assoc 10 el)) pt2 (cdr (assoc 11 el))
  89.         ang (angle pt1 pt2) c1 0 plst () ld (distance pt1 pt2)
  90.         el (subst (cons 8 llay) (assoc 8 el) el)
  91.   )
  92.   (setq ss (ssdel (cdr (assoc -1 el))
  93.      (ssget "c" (mapcar '+ '(20 20) (mapcar 'max pt1 pt2))
  94.                 (mapcar '- (mapcar 'min pt1 pt2) '(20 20))
  95.   )))
  96.   (while (setq el0 (ssname ss c1))
  97.    (cond
  98.     ((and (= "LINE" (cdr (assoc 0 (entget el0)))) (ssmemb el0 ss0))
  99.       (setq dt nil el0 (entget el0)
  100.             pt3 (cdr (assoc 10 el0)) pt4 (cdr (assoc 11 el0)))
  101.       (if (setq ipt (inters pt1 pt2 pt3 pt4))
  102.         (cond ((equal ipt pt1 0.1) (setq dt ld))
  103.               ((equal ipt pt2 0.1) (setq dt 0.0))
  104.               (t  (setq dt (distance ipt pt2)))
  105.         )  ;end cond
  106.       )
  107.       (if dt
  108.        (if (setq clst (assoc dt plst))
  109.         (setq plst (subst (append clst (list c1)) clst plst))
  110.         (setq plst (cons (list dt c1) plst))
  111.       ))
  112.     )  ;;end of line
  113.    )  ;end of cond
  114.    (setq c1 (1+ c1))
  115.   ) ;end while
  116.   (setq pt1 (polar pt1 (+ ang (/ pi 2)) hwid)
  117.         pt2 (polar pt2 (+ ang (/ pi 2)) hwid)
  118.         pt3 (polar pt1 (- ang (/ pi 2)) (* 2 hwid))
  119.         pt4 (polar pt2 (- ang (/ pi 2)) (* 2 hwid))
  120.   )
  121.   (if plst (progn
  122.     (setq t1 0)
  123.     (while (< -1.0 (setq dt (apply 'max (mapcar 'car plst))))
  124.      (setq clst (cdr (assoc dt plst))
  125.            plst (subst '(-1 0) (assoc dt plst) plst)
  126.      )
  127.      (cond
  128.       ((= dt ld) (setq t1 1)
  129.        (setq dt (gtl pt1 pt2) pt1 (polar pt1 ang (car dt))
  130.              dt (gtl pt3 pt4) pt3 (polar pt3 ang (car dt)))
  131.       )
  132.       ((= dt 0.0)
  133.        (if (= t1 0)
  134.         (setq el (subst (cons 10 pt1) (assoc 10 el) el)
  135.               el (subst (cons 11 pt3) (assoc 11 el) el)
  136.               el (entmake el) t1 1
  137.        ))
  138.        (setq t1 2)
  139.        (setq dt (gtl pt2 pt1) pt2 (polar pt2 (+ ang pi) (car dt))
  140.              dt (gtl pt4 pt3) pt4 (polar pt4 (+ ang pi) (car dt)))
  141.       )
  142.       (t (if (= t1 0)
  143.         (setq el (subst (cons 10 pt1) (assoc 10 el) el)
  144.               el (subst (cons 11 pt3) (assoc 11 el) el)
  145.               el (entmake el) t1 1
  146.         ))
  147.        (if (< (car clst) 0.0)
  148.         (setq ipt (polar pt2 ang (+ (- dt) (car clst)))
  149.               el (subst (cons 10 pt1) (assoc 10 el) el)
  150.               el (subst (cons 11 ipt) (assoc 11 el) el)
  151.               el (entmake el)
  152.               dt (polar pt4 ang (+ (- dt) (car clst)))
  153.               el (subst (cons 10 dt) (assoc 10 el) el)
  154.               el (entmake el)
  155.               el (subst (cons 11 pt3) (assoc 11 el) el)
  156.               el (entmake el)
  157.               pt1 (polar ipt ang (* (car clst) -2))
  158.               pt3 (polar dt ang (* (car clst) -2))
  159.               el (subst (cons 10 pt1) (assoc 10 el) el)
  160.               el (subst (cons 11 pt3) (assoc 11 el) el)
  161.               el (entmake el)
  162.         )
  163.        (progn
  164.         (if (> (car (setq dt (gtl pt1 pt2))) 0.0)
  165.           (setq ipt (polar pt1 ang (cadr dt))
  166.                 el (subst (cons 10 pt1) (assoc 10 el) el)
  167.                 el (subst (cons 11 ipt) (assoc 11 el) el)
  168.                 el (entmake el) pt1 (polar pt1 ang (car dt))
  169.         ))
  170.         (if (> (car (setq dt (gtl pt3 pt4))) 0.0)
  171.           (setq ipt (polar pt3 ang (cadr dt))
  172.                 el (subst (cons 10 pt3) (assoc 10 el) el)
  173.                 el (subst (cons 11 ipt) (assoc 11 el) el)
  174.                 el (entmake el) pt3 (polar pt3 ang (car dt))
  175.         ))
  176.        )) ;;;end of if <
  177.       )
  178.      )   ;;; end cond
  179.     )    ;;; end while
  180.     (setq el (subst (cons 10 pt1) (assoc 10 el) el)
  181.           el (subst (cons 11 pt2) (assoc 11 el) el)
  182.           el (entmake el)
  183.           el (subst (cons 10 pt3) (assoc 10 el) el)
  184.           el (subst (cons 11 pt4) (assoc 11 el) el)
  185.           el (entmake el)
  186.     )
  187.     (if (/= t1 2)
  188.        (setq el (subst (cons 10 pt2) (assoc 10 el) el)
  189.              el (subst (cons 11 pt4) (assoc 11 el) el)
  190.              el (entmake el) t1 1
  191.     ))
  192.     )    ;; end if plst progn
  193.     (setq el (subst (cons 10 pt1) (assoc 10 el) el)
  194.           el (subst (cons 11 pt3) (assoc 11 el) el)
  195.           el (entmake el)
  196.           el (subst (cons 11 pt2) (assoc 11 el) el)
  197.           el (entmake el)
  198.           el (subst (cons 10 pt4) (assoc 10 el) el)
  199.           el (entmake el)
  200.           el (subst (cons 11 pt3) (assoc 11 el) el)
  201.           el (entmake el)
  202.     )
  203.    )    ;;; end if plst
  204. )    ;;;End defun dbl

  205. ;;;; Get half width
  206. (defun gthw (sn / w1)
  207. (setq w1 (cdr (assoc -3 (entget sn (list "AP_"))))
  208.        w1 (if w1 (cdr (assoc 1040 (cdar w1))) 240)
  209.        w1 (/ w1 2.0)
  210. ))

  211. (defun c:dbl   () (csdbl))
  212. (princ "\n\t\t Copyright by 陈松 -- 南昌 (c) 1996.9.22")
  213. (princ "\n\t\tC:CSDBL 已经加载. 键入 DBL 执行命令.")
  214. (princ)
 楼主| 发表于 2023-6-7 09:31 | 显示全部楼层
foolishzy 发表于 2023-6-7 09:21
楼主23行写的有点问题。

可以了,谢谢   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 03:03 , Processed in 0.278657 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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