明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 642|回复: 1

[提问] lisp如何只处理选中的块表

[复制链接]
发表于 2015-12-24 18:07:27 | 显示全部楼层 |阅读模式
Z轴归零,但每次都把块表里的所有块定义都处理一遍,对于图形很大的话会很慢。
(defun zero-block (/)
  (vlax-for block (vla-get-blocks
        (vla-get-activedocument (vlax-get-acad-object))
      )
    (vlax-for e  block
      (zero-ent (vlax-vla-object->ename e))
    )
  )
)

(defun c:z0 (/ c10 c38 dxf ent i len ss)
  (princ "\n选择需要将Z坐标或标高属性清零的对象 <回车选择所有图元>: ")
  (setq ss (ssget))
  (setq  len (sslength ss)
         i   0
         c10 0
         c38 0
  )
  ;; 块定义内实体归零
  (zero-block)
  (setq  len (sslength ss)
         i   0
  )

  (repeat len
    (zero-ent (setq ent (ssname ss i)))
    (setq i (1+ i))
  )
)
怎样写能只处理选中的块的块定义,我的想法是先把选中的对象筛选出Insert,然后做成一个没有重复的块名字的表,最后再在块表中遍历。
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2015-12-25 11:05:12 | 显示全部楼层
  (setq ss1 (ssget "p" (list (cons 0 "insert"))))
  (if ss1
    (zero-blocks ss1)
  )

(defun zero-blocks (ss / knum blklst blkname)
  
  (repeat (setq knum(sslength ss))
    (if (not (member (setq blkname(vla-get-name (vlax-ename->vla-object (ssname ss (setq knum(1- knum)))))) blklst))
      (setq blklst(cons blkname blklst))
    );end if
  )

  (vlax-for block (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
    (if (member (setq blkname (vla-get-name block)) blklst)
      (vlax-for e  block
        (zero-ent (vlax-vla-object->ename e))
      )
    )
  )
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 01:10 , Processed in 0.202412 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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