乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 311|回复: 12

有没有好办法对动态图块块名用ssget选择过滤?

[复制链接]

37

主题

297

帖子

15

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
449
发表于 2010-11-13 14:19:00 | 显示全部楼层 |阅读模式
动态图块的插入实例,每个一实例用Entget得到的都匿名块。不能直接取得块名。

如果用遍历选择集后处理的办法效率比较低,有没有好一点的高效的办法?
回复

使用道具 举报

22

主题

150

帖子

11

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-17 00:56:00 | 显示全部楼层
;取得块名name
(setq en (car (entsel "\n选择块:")))
   (or
      (eq "TCH_BLOCK_INSERT" (cdr (assoc 0 (entget en))))
      (eq "INSERT" (cdr (assoc 0 (entget en))))
      (alert "没有选择块!")
    )
   (setq xobj (vlax-ename->vla-object en))
   (setq name (vlax-get-property xobj 'EffectiveName))
回复

使用道具 举报

0

主题

2

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-8 11:25:00 | 显示全部楼层

新手请教,这代码怎么变成可编译的lsp文件呀?
回复

使用道具 举报

0

主题

2

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-8 11:30:00 | 显示全部楼层
新手请教下,这代码怎么变成可编译的lsp文件?
回复

使用道具 举报

52

主题

380

帖子

11

银币

中流砥柱

Rank: 25

铜币
588
发表于 2010-11-13 14:54:00 | 显示全部楼层
动态图块的出现,是在CAD2006以后的事情了,相信楼主也知道CAD2000以后的visualLISP 函数就一直没有增强。
ssget 函数也一样。

用遍历选择集后处理的办法,效率应该不会低到哪里去。
  
  1. (defun SSGET-DYNBLK->ENTS (SS NAME / E ENTS N)
  2.   ;; By carrot1983 11/13/10
  3.   (repeat (setq N (sslength SS))
  4.     (and (setq E (ssname SS (setq N (1- N))))
  5.   (setq O (vlax-ename->vla-object E))
  6.   (= (vla-get-isdynamicblock O) :vlax-true)
  7.   (= (vla-get-effectivename O) NAME)
  8.   (setq ENTS (cons E ENTS))
  9.     )
  10.   )
  11.   ENTS
  12. )

(defun C:TT ()
  (setq SS (ssget '((0 . "INSERT"))))
  (setq ENTS (SSGET-DYNBLK->ENTS SS "树 - 英制"))
  (print ENTS)
  (princ)
)
回复

使用道具 举报

1

主题

151

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
153
发表于 2010-11-13 15:32:00 | 显示全部楼层
对于编程来说,无名块其实也是一个有名块,只不过他们的名字是系统管理的而已。动态块的选择和选择无名块不一样吗?
(setq tmpp(ssget "x" (list (cons 0 "INSERT")(cons 2 (strcat "`" (vla-get-name (vlax-ename->vla-object(car(entsel "\n选择无名块:")))))))))
回复

使用道具 举报

30

主题

123

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
241
发表于 2010-11-13 17:16:00 | 显示全部楼层
命令: (cons 2 (strcat "`"((_> (vla-get-name (vlax-ename->vla-object(car(entsel "\n选择无名块:"))))))

选择无名块2 . "`*U340")

命令: (ssget "x" (list (cons 0 "INSERT")(2 . "`*U340")))

; 错误: *error* 函数中出错AutoCAD 变量设置被拒绝: "osmode" nil

不行的,SSGET要如何处理才能选择"*U"这一类的无名块


回复

使用道具 举报

30

主题

123

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
241
发表于 2010-11-13 17:22:00 | 显示全部楼层
命令: (ssget "x" (list '(0 . "INSERT")'(2 . "*U340")))
nil
回复

使用道具 举报

1

主题

151

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
153
发表于 2010-11-14 08:07:00 | 显示全部楼层
呵呵,楼上的看完整了吗?(ssget "x" (list '(0 . "INSERT")'(2 . "`*U340")))
回复

使用道具 举报

37

主题

297

帖子

15

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
449
发表于 2010-11-28 22:37:00 | 显示全部楼层
先谢谢二楼提供思路的实现。虽然就是原来的思路。
三楼可能没有明白我的意思。选择是一样的,只是有一点特殊。我和问题不是匿名块和普通块的区别,而是动态块和普通块的区别。
动态块的块名不反映在第一级的dxf表中,在第一级的dxf表中只有一个匿名,这意味着已知动态块的块名,不能高效地通过SSGET的DXF过滤出来,必须选择块后遍历选择集才知道有没有选中,选中几个。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 01:36 , Processed in 0.714607 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表