明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 941|回复: 3

程序求修改

[复制链接]
发表于 2023-4-8 20:49:30 | 显示全部楼层 |阅读模式
2明经币


我在站内找到一个程序,可以实现框选范围内的块全部变为匿名块,但是有一个问题,只要遇到属性块就不行了,希望大家修改。
程序附后:



(defun c:gk (/ ss lst-ename lst-b x y ss-c)
  (vl-load-com)
  (setvar "CMDECHO" 0)
;;;选择框选范围内的所有块
(setq ss (ssget '((0 . "INSERT"))))
;;; 定义将选择集转化为对象图元名列表
  (defun ss-enamelst (ss)
    (vl-remove-if-not
      '(lambda (x) (equal (type x) 'ename))
      (mapcar 'cadr (ssnamex SS))
    )
  )
;;;end defun

;;; 将块选择集转化为图元名列表
  (setq lst-ename (ss-enamelst ss))
;;; 通过 ssget "WP" 将多线段和多线段内部的对象(可以再加上过滤,过滤掉非园)组成一个表
  (setq
    lst-b
     (mapcar '(lambda (x)
    (progn
;;; 多线段端点列表内部窗选
      (setq  ss-c (ssget "WP"
            (apply
              'append
              (mapcar '(lambda (y)
             (if (eq (car y) 10)
               (list (cdr y))
             )
                 )
                (entget x)
              )
            )
           )
      )
;;;判断选择集是否存在。也可以加入其它的判断
      (if (null ss-c)
        (list x)
        (append (list x) (ss-enamelst ss-c))
      )
    )      ;end progn
        )        ;end lambda
       lst-ename
     )
  )
;;;生成无名块并删除原有对象
  (mapcar '(lambda (x)
       (progn
         (entmakenonameblock x (cdr (assoc 10 (entget (car x)))))
         (mapcar '(lambda  (y)
        (vl-cmdf "erase" y "")
      )
           x
         )
       )
     )
    lst-b
  )


  (prin1)
)
;;;; 图元列表生成无名快
(defun entmakenonameblock (lst pt / i name)
  (entmake
    (list '(0 . "block") '(2 . "*U") '(70 . 1) (cons 10 pt))
  )
  (mapcar '(lambda (x) (entmake (cdr (entget x)))) lst)
  (setq name (entmake '((0 . "ENDBLK"))))
  (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
  name
)

发表于 2023-4-18 14:27:31 | 显示全部楼层

(defun c:gk (/ ss lst-ename lst-b x y ss-c)
  (vl-load-com)
  (setvar "CMDECHO" 0)
;;;选择框选范围内的所有块
  (setq ss (ssget '((0 . "INSERT"))))
;;; 定义将选择集转化为对象图元名列表
  (defun ss-enamelst (ss)
    (vl-remove-if-not
      '(lambda (x) (equal (type x) 'ename))
      (mapcar 'cadr (ssnamex ss))
    )
  )
;;;end defun

;;; 将块选择集转化为图元名列表
  (setq lst-ename (ss-enamelst ss))
;;; 通过 ssget "WP" 将多线段和多线段内部的对象(可以再加上过滤,过滤掉非园)组成一个表
  (setq
    lst-b
     (mapcar '(lambda (x)
                (progn
;;; 多线段端点列表内部窗选
                  (setq        ss-c (ssget "WP"
                                    (apply
                                      'append
                                      (mapcar '(lambda (y)
                                                 (if (eq (car y) 10)
                                                   (list (cdr y))
                                                 )
                                               )
                                              (entget x)
                                      )
                                    )
                             )
                  )
;;;判断选择集是否存在。也可以加入其它的判断
                  (if (null ss-c)
                    (list x)
                    (append (list x) (ss-enamelst ss-c))
                  )
                ) ;end progn
              ) ;end lambda
             lst-ename
     )
  )
;;;生成无名块并删除原有对象
  (mapcar '(lambda (x)
             (progn
               (entmakenonameblock x (cdr (assoc 10 (entget (car x)))))
               (mapcar '(lambda        (y)
                          (vl-cmdf "erase" y "")
                        )
                       x
               )
             )
           )
          lst-b
  )


  (prin1)
)
;;;; 图元列表生成无名快
(defun entmakenonameblock (lst pt / i name)
  (entmake (list '(0 . "block") '(2 . "*U") '(70 . 1) (cons 10 pt)))
  (mapcar '(lambda (x) (entmake (cdr (entget x)))) lst)
  (entmake '((0 . "SEQEND")))
  (setq name (entmake '((0 . "ENDBLK"))))
  (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
  name
)
回复

使用道具 举报

 楼主| 发表于 2023-7-17 14:25:39 | 显示全部楼层
pzweng 发表于 2023-4-18 14:27
(defun c:gk (/ ss lst-ename lst-b x y ss-c)
  (vl-load-com)
  (setvar "CMDECHO" 0)

不行,属性块里面的文字不见了
回复

使用道具 举报

发表于 2023-7-17 15:17:28 | 显示全部楼层
如果有问题,可以上传dwg文件测试
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 16:02 , Processed in 0.141077 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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