明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: sunqv

[经验] 【已解决】如何跟据扩展属性修改线型?

[复制链接]
 楼主| 发表于 2020-12-3 11:39 | 显示全部楼层
yshf 发表于 2020-11-26 21:32
(defun c:gxx()
    (setq osm (getvar "osmode"))
    (setvar "osmode" 0)

大神,我想把这3个改线型的合并成一个,条件怎么改?我用了3个if()  然后发现改不了,用cond 也该不了。。。

(defun c:gkg()
    (setq osm (getvar "osmode"))
    (setvar "osmode" 0)
    (command "_undo" "be")
    (if (setq ssa (ssget '((0 . "LINE") )))
        (progn
            (setq i 0)
            (repeat (sslength ssa)
               (setq dxf (entget (ssname ssa i) '("*")))
               (if (setq kzsj (cdr (assoc -3 dxf)))
                   (if (= (cdadr (assoc "线型2" kzsj)) "空管")
                       (progn
                           (if (assoc 6 dxf)
                               (setq newdxf (subst (cons 6 "KG") (assoc 6 dxf) dxf))
                               (setq newdxf (append dxf (list (cons 6 "KG"))))
                           )
                           (entmod newdxf)
                       )
                   )

               )
               (setq i (1+ i))
            )
        )
    )
    (command "_undo" "e")
    (setvar "osmode" osm)
    (princ)
)
(defun c:gdg()
    (setq osm (getvar "osmode"))
    (setvar "osmode" 0)
    (command "_undo" "be")
    (if (setq ssa (ssget '((0 . "LINE") )))
        (progn
            (setq i 0)
            (repeat (sslength ssa)
               (setq dxf (entget (ssname ssa i) '("*")))
               (if (setq kzsj (cdr (assoc -3 dxf)))
                   (if (= (cdadr (assoc "线型2" kzsj)) "顶管")
                       (progn
                           (if (assoc 6 dxf)
                               (setq newdxf (subst (cons 6 "DG") (assoc 6 dxf) dxf))
                               (setq newdxf (append dxf (list (cons 6 "DG"))))
                           )
                           (entmod newdxf)
                       )
                   )
               )
               (setq i (1+ i))
            )
        )
    )
    (command "_undo" "e")
    (setvar "osmode" osm)
    (princ)
)
(defun c:gfk()
    (setq osm (getvar "osmode"))
    (setvar "osmode" 0)
    (command "_undo" "be")
    (if (setq ssa (ssget '((0 . "LINE") )))
        (progn
            (setq i 0)
            (repeat (sslength ssa)
               (setq dxf (entget (ssname ssa i) '("*")))
               (if (setq kzsj (cdr (assoc -3 dxf)))
                   (if (= (cdadr (assoc "线型2" kzsj)) "非空管")
                       (progn
                           (if (assoc 6 dxf)
                               (setq newdxf (subst (cons 6 "FK") (assoc 6 dxf) dxf))
                               (setq newdxf (append dxf (list (cons 6 "FK"))))
                           )
                           (entmod newdxf)
                       )
                   )
               )
               (setq i (1+ i))
            )
        )
    )
    (command "_undo" "e")
    (setvar "osmode" osm)
    (princ)
)

发表于 2020-12-3 15:29 | 显示全部楼层
本帖最后由 yshf 于 2020-12-3 15:32 编辑
  1. 自行改不了
复制代码
发表于 2020-12-3 15:33 | 显示全部楼层
  1. (defun c:gkgdgfk()
  2.     (setq osm (getvar "osmode"))
  3.     (setvar "osmode" 0)
  4.     (command "_undo" "be")

  5.     (setq pdsjb (list (list "KG" "空管")
  6.                       (list "DG" "顶管")
  7.                       (list "FK" "非空管")
  8.                 )
  9.     )
  10.     (initget "KG DG FK") ;关键字
  11.     (setq pdbz (getkword "\n请选取[空管K/顶管D/非空管F]<K>:"))
  12.     (If (null pdbz) (setq pdbz "KG"))
  13.     (setq sjb (assoc pdbz pdsjb))
  14.   
  15.     (if (setq ssa (ssget '((0 . "LINE") )))
  16.         (progn
  17.             (setq i 0)
  18.             (repeat (sslength ssa)
  19.                (setq dxf (entget (ssname ssa i) '("*")))
  20.                (if (setq kzsj (cdr (assoc -3 dxf)))
  21.                    ;(if (= (cdadr (assoc "线型2" kzsj)) "空管")
  22.                    (if (= (cdadr (assoc "线型2" kzsj)) (cadr sjb))
  23.                        (progn
  24.                            (if (assoc 6 dxf)
  25.                                ;(setq newdxf (subst (cons 6 "KG") (assoc 6 dxf) dxf))
  26.                                ;(setq newdxf (append dxf (list (cons 6 "KG"))))
  27.                                (setq newdxf (subst (cons 6 (car sjb)) (assoc 6 dxf) dxf))
  28.                                (setq newdxf (append dxf (list (cons 6 (car sjb)))))
  29.                            )
  30.                            (entmod newdxf)
  31.                        )
  32.                    )

  33.                )
  34.                (setq i (1+ i))
  35.             )
  36.         )
  37.     )
  38.     (command "_undo" "e")
  39.     (setvar "osmode" osm)
  40.     (princ)
  41. )
 楼主| 发表于 2020-12-3 17:46 来自手机 | 显示全部楼层
高手就是高手…膜拜
 楼主| 发表于 2020-12-3 17:49 来自手机 | 显示全部楼层
还有个问题,代能批量全选来自动修改吗?
发表于 2020-12-3 18:00 | 显示全部楼层
sunqv 发表于 2020-12-3 17:49
还有个问题,代能批量全选来自动修改吗?

将 (if (setq ssa (ssget '((0 . "LINE") )))
改为 (if (setq ssa (ssget  "x" '((0 . "LINE") )))
发表于 2020-12-3 18:14 | 显示全部楼层
本帖最后由 yshf 于 2020-12-3 18:17 编辑
sunqv 发表于 2020-12-3 17:49
还有个问题,代能批量全选来自动修改吗?


或者:

(defun c:gkgdgfk1()
    (setq osm (getvar "osmode"))
    (setvar "osmode" 0)
    (command "_undo" "be")

    (setq pdsjb (list (list "KG" "空管")
                      (list "DG" "顶管")
                      (list "FK" "非空管")
                )
    )

    (if (setq ssa (ssget "x" '((0 . "LINE") )))
        (progn
            (setq i 0)
            (repeat (sslength ssa)
               (setq dxf (entget (ssname ssa i) '("*")))
               (if (setq kzsj (cdr (assoc -3 dxf)))
                   (progn
                       (setq xxmc (cdadr (assoc "线型2" kzsj)))
                       (if (member xxmc (mapcar 'cadr pdsjb))
                           (progn
                               (setq sjb (reverse (assoc  xxmc (mapcar 'reverse  pdsjb))))
                               (if (assoc 6 dxf)
                                   (setq newdxf (subst (cons 6 (car sjb)) (assoc 6 dxf) dxf))
                                   (setq newdxf (append dxf (list (cons 6 (car sjb)))))
                               )
                               (entmod newdxf)
                           )
                      )
                   )
               )
               (setq i (1+ i))
            )
        )
    )
    (command "_undo" "e")
    (setvar "osmode" osm)
    (princ)
)
 楼主| 发表于 2020-12-4 12:32 | 显示全部楼层
完美解决,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 07:12 , Processed in 0.190817 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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