明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: liminnet

子块中的块名到底藏在组码那个位置[highflybir师傅还有点问题]

  [复制链接]
 楼主| 发表于 2009-3-25 09:11:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2009-3-26 12:21:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-3-26 22:29:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-26 22:31:47 编辑

这个不是很简单的吗,可以用:

(last (nentselp "选择图块:"))

或者(last (nentsel "选择图块:"))

非常简单啊,以上返回来的顺序是:如果点选的是嵌套块,那么这里是该嵌套块的块图元名及其内部所有嵌套的块图元名列表,最内层的排在前面,其本身排在最后

对于,楼上说的,不用选择图块,只知道图块名,我有个程序就涉及到这样的,不过还的增加判别,你所说的图块名的图块是否存在的代码。

 楼主| 发表于 2009-3-27 12:49:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-3-27 20:05:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-27 21:25:50 编辑

我已经说的很明确了,为什么你就不明白呢?我真是纳闷了。无语!!!!!!!
(last (nentselp "选择图块:"))或(last (nentsel "选择图块:")),你要的子块名只需去掉最后一个即可。
代码为:
  1. ;; By 木子CAD工具 小李子 2009-3-27
  2. ;;  返回所点选子块向外的块名嵌套关系
  3. (defun c:test (/ lst rtn)
  4.   (if (setq lst (last (nentselp "选择图块:"))) ;或(last (nentsel "选择图块:"))
  5.     (setq rtn (mapcar '(lambda (x) (vla-get-name (vlax-ename->vla-object x))) lst))
  6.     (princ "\n你没有选择物体!")
  7.   )
  8.   (if rtn (princ rtn))
  9.   (princ)
  10. )
给你弄一个吧:
  1. ;; By 木子CAD工具 小李子 2009-3-27
  2. (defun AllBlkNInBlkdef (blkn / blkdef e typ bn bnl e-l)
  3.   (setq bnl '() blkdef (tblobjname "block" blkn))
  4.   (while (setq e (entnext blkdef))
  5.     (setq typ (cdr (assoc 0 (entget e))))
  6.     (if (= typ "INSERT")
  7.       (setq bn (vla-get-name (vlax-ename->vla-object e))
  8.      bnl (if bn
  9.     (append (cons bn (AllBlkNInBlkdef bn)) bnl)
  10.   )
  11.       )
  12.       ;(setq el (cons e el))
  13.     )
  14.     (setq blkdef e)
  15.   )
  16.   bnl
  17. )
  18. (defun c:ABnInBl (/ i en ss blknlst ABblknlst)
  19.   (setq ss   (ssget '((0 . "INSERT")))
  20. ABblknlst '()
  21.   )
  22.   (if ss
  23.     (repeat (setq i (sslength ss))
  24.       (setq en       (ssname ss (setq i (1- i)))
  25.      blkn      (vla-get-name (vlax-ename->vla-object en))
  26.      blknlst   (AllBlkNInBlkdef blkn)
  27.      ABblknlst (append (cons blkn blknlst) ABblknlst)
  28.       )
  29.     )
  30.     (princ "*** 你没有选择任何图块 ***")
  31.   )
  32.   ;(princ)
  33. )
发表于 2009-3-27 22:55:00 | 显示全部楼层

其实楼主为什么不能多思考一下呢?

下面提供两种方式:

一种列表形式为树状(多叉数结构)

另外一种仅仅是集合,(把所有与之相关的嵌套块名列出来)

本帖子中包含更多资源

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

x
发表于 2009-3-28 09:05:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-28 9:19:06 编辑

再贴一个,树状结构的:
  1. ;; By 木子CAD工具 小李子 2009-3-28
  2. (defun AllBlkNInBlkdef (blkn / blkdef e typ bn bnl e-l nl)
  3.   (setq
  4.   ;bnl    '()
  5. blkdef (tblobjname "block" blkn)
  6.   )
  7.   (while (setq e (entnext blkdef))
  8.     (setq typ (cdr (assoc 0 (entget e))))
  9.     (if
  10.   (= typ "INSERT")
  11.       (setq bn
  12.   (vla-get-name (vlax-ename->vla-object e))
  13.     bnl
  14.   (if bn
  15.   (cons (if (setq nl (AllBlkNInBlkdef bn))
  16.     (list bn nl)
  17.     bn
  18.   )
  19.   bnl
  20.   )
  21. )
  22.       )
  23.     )
  24.     (setq blkdef e)
  25.   )
  26.   bnl
  27. )
  28. (defun c:ABnInBl (/ i en ss blknlst ABblknlst)
  29.   (setq
  30.   ss
  31.     (ssget '((0 . "INSERT")))
  32. ;ABblknlst '()
  33.   )
  34.   (if ss
  35.     (repeat (setq i (sslength ss))
  36.       (setq en
  37.         (ssname ss (setq i (1- i)))
  38.     blkn      (vla-get-name (vlax-ename->vla-object en))
  39.     blknlst   (AllBlkNInBlkdef blkn)
  40.     ABblknlst (cons (if blknlst
  41. (list blkn blknlst)
  42. blkn
  43.       )
  44.       ABblknlst
  45.       )
  46.       )
  47.     )
  48.     (princ "*** 你没有选择任何图块 ***")
  49.   )
  50.   (princ ABblknlst)
  51. (princ)
  52. )
发表于 2009-3-28 09:41:00 | 显示全部楼层

楼主就是这样......

得把东西写好,他再去凑程序!

支持!

发表于 2009-4-1 11:12:00 | 显示全部楼层
本帖最后由 作者 于 2009-4-1 11:12:30 编辑

  1. ;; By 木子CAD工具 小李子 2009-3-28
  2. (defun AllBlkNInBlkdef (blkn / blkdef e typ bn bnl e-l nl)
  3.    (setq blkdef (tblobjname "block" blkn))
  4.    (while (setq e (entnext blkdef))
  5.      (setq typ (cdr (assoc 0 (entget e))))
  6.      (if (= typ "INSERT")
  7.        (setq bn (vla-get-name (vlax-ename->vla-object e))
  8.       bnl (if bn
  9.      (cons (if (setq nl (AllBlkNInBlkdef bn))
  10.       (list bn nl)
  11.       bn
  12.     )
  13.     bnl
  14.      )
  15.   )
  16. )
  17.      )
  18.      (setq blkdef e)
  19.    )
  20.    bnl
  21. )
  22. (defun c:ABnInBl (/ i en ss blknlst ABblknlst)
  23.    (if (setq ss (ssget '((0 . "INSERT"))))
  24.      (repeat (setq i (sslength ss))
  25.        (setq en  (ssname ss (setq i (1- i)))
  26.       blkn (vla-get-name (vlax-ename->vla-object en))
  27.       blknlst (AllBlkNInBlkdef blkn)
  28.       ABblknlst (cons (if blknlst
  29.     (list blkn blknlst)
  30.     blkn
  31.          )
  32.          ABblknlst
  33.    )
  34.        )
  35.      )
  36.      (princ "*** 你没有选择任何图块 ***")
  37.    )
  38.   (princ ABblknlst)
  39.   (princ)
  40. )
 楼主| 发表于 2009-4-1 22:33:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-25 12:43 , Processed in 0.185520 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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