惜惜2 发表于 2024-9-4 22:14:42

识别线型指定层

本帖最后由 惜惜2 于 2024-9-8 22:29 编辑

帮忙写一个LISP可以把块炸开然后放入0层,0层的颜色以及线型线宽随层,其中需要优先点选一个图元(同时全选相同线型的所有图元)指定到Bend层,如果BEND层不存在则自动创建,bend层颜色黄色,线型随层,线宽随层,点选的图元颜色随层,线宽随层,然后把剩余的图元放入0层。



(defun C:A11()
(vl-cmdf "qaflags" 1 "explode" (ssget "x") "" "qaflags" 0)
(if (= (getvar "cmdactive") 0)
(progn
(vl-cmdf "change" (ssget "x") "" "p" "la" 0 "")
(vl-cmdf "change" (ssget "x") "" "p" "c" "ByLayer" "")
(vl-cmdf "change" (ssget "x") "" "p" "LT" "ByLayer" "")
)
)
(command"_copyclip"(ssget "x" '((8 . "0"))))
(command"")
(princ)
)

qazxswk 发表于 2024-9-5 03:27:27

别人帮你回答了问题,你却设置成仅作者可见?你也太自私了吧。这不利于论坛的发展,别人也无心来回答你的问题了。

惜惜2 发表于 2024-9-8 22:10:53

qazxswk 发表于 2024-9-5 03:27
别人帮你回答了问题,你却设置成仅作者可见?你也太自私了吧。这不利于论坛的发展,别人也无心来回答你的问 ...

(defun c:A11 ()
    (vlax-for blockref (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
      (if (vlax-property-available-p blockref 'Explode)
            (vlax-invoke blockref 'Explode)
      )
    )
    (setq bend-layer-exists nil)
    (setq acad-doc (vla-get-activedocument (vlax-get-acad-object)))
    (setq layers (vla-get-layers acad-doc))
    (vlax-for layer layers
      (if (and layer (equal (strcase (vla-get-name layer)) "BEND"))
            (setq bend-layer-exists t)
      )
    )
    (if (not bend-layer-exists)
      (progn
            (setq newLayer (vla-add layers "BEND"))
            (vla-put-color newLayer 2) ;
            (setq linetypes (vla-get-linetypes acad-doc))
            (setq byLayerLinetype nil)
            (vlax-for linetype linetypes
                (if (equal (strcase (vla-get-name linetype)) "BYLAYER")
                  (setq byLayerLinetype linetype)
                )
            )
            (if byLayerLinetype
                (setq byLayerLinetypeName (vla-get-name byLayerLinetype))
            )
            (vla-put-lineweight newLayer -1) ; -1 表示 BYLAYER
      )
    )
    (setq picked-ent (car (entsel "\n 选择一个图元: ")))
    (if picked-ent
      (progn
            (setq ent-data (entget picked-ent))
            (if ent-data
                (progn
                  (setq linetype (cdr (assoc 6 ent-data)))
                  (setq filter (list (cons 0 (cdr (assoc 0 ent-data))) (cons 6 linetype)))
                  (setq same-linetype-ss (ssget "_X" filter))
                  (if same-linetype-ss
                        (progn
                            (setq i 0)
                            (repeat (sslength same-linetype-ss)
                              (setq entity (ssname same-linetype-ss i))
                              (if entity
                                    (progn
                                        (setq ent-obj (vlax-ename->vla-object entity))
                                        (vla-put-layer ent-obj "BEND")
                                    )
                              )
                              (setq i (1+ i))
                            )
                        )
                        (princ "\n 没有找到相同线型的图元.")
                  )
                  (setq remaining-ss (ssget "_X" (list (cons 0 (cdr (assoc 0 ent-data))))))
                  (if remaining-ss
                        (progn
                            (setq j 0)
                            (repeat (sslength remaining-ss)
                              (setq entity (ssname remaining-ss j))
                              (if entity
                                    (progn
                                        (setq ent-obj (vlax-ename->vla-object entity))
                                        (vla-put-layer ent-obj "0")
                                        (vla-put-linetype ent-obj byLayerLinetypeName)
                                        (vla-put-lineweight ent-obj -1)
                                    )
                              )
                              (setq j (1+ j))
                            )
                        )
                        (princ "\n 没有剩余图元.")
                  )
                )
                (princ "\n 无法获取实体数据.")
            )
      )
      (princ "\n 未选择图元.")
    )
    (princ)
)
大佬帮忙改下
页: [1]
查看完整版本: 识别线型指定层