乐筑天下

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

[编程交流] 在冻结层上搜索文本

[复制链接]

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 15:36:21 | 显示全部楼层 |阅读模式
您好,我有一个问题,我认为用普通autocad命令无法解决。。。(我不想使用“数据提取”)
我使用一个与autocad一起工作的程序,并使用autocad的功能。。。使用此功能,它可以创建一系列由多层组成的图纸(页面)。。。冻结层的精确组合允许查看当前页面。
好的,在序言之后的问题是:我需要在文件中搜索文本,但我想知道文本的位置(层)。。。
是否可能知道这些信息(搜索文本所在的层)?
问候语
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:44:11 | 显示全部楼层
大致如下:
  1. (if (setq s (ssget "_X" '((0 . "TEXT") (1 . "YourTextHere"))))
  2.    (cdr (assoc 8 (entget (ssname s 0))))
  3. )
回复

使用道具 举报

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 15:53:20 | 显示全部楼层
天啊!李先生!你不知道我是谁。。。但我很清楚你是谁!我借此机会感谢您在Lisp程序方面给予我的所有帮助!
说这个。。。不幸的是,我绝对不能从你的建议中得到帮助,因为我不是一个程序员。。。
无论如何,我都会考虑,甚至只是为了更好地重新制定请求!
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 15:58:13 | 显示全部楼层
除李的建议外:
 
  1. (while (and (setq d (tblnext "LAYER" (not d))) (not s))
  2. (and
  3.    (ssget "_X" (list '(0 . "TEXT") '(1 . "YourTextHere") (cons 8 (cdr (assoc 2 d)))))
  4.    (setq s d)
  5. )
  6. )
  7. s
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:09:03 | 显示全部楼层
 
谢谢你的感谢,我很高兴听到我的项目帮助你起草工作。
 
 
没问题-下面是一个更全面的示例,您可以在AutoCAD命令行中加载并运行该示例:
  1. (defun c:findtextlayer ( / enx idx lay lst sel str )
  2.    (cond
  3.        (   (= "" (setq str (getstring t "\nSpecify text to find: ")))
  4.            (princ "\nNo text entered.")
  5.        )
  6.        (   (setq sel (ssget "_X" (list '(0 . "TEXT") (cons 1 str))))
  7.            (repeat (setq idx (sslength sel))
  8.                (setq idx (1- idx)
  9.                      enx (entget (ssname sel idx))
  10.                      lay (cdr (assoc 8 enx))
  11.                )
  12.                (if (not (member lay lst)) (setq lst (cons lay lst)))
  13.            )
  14.            (princ (strcat "\nSingle-line text with content "" str "" was found on the layers: "))
  15.            (foreach lay lst (princ "\n\t") (prin1 lay))
  16.        )
  17.        (   (princ (strcat "\nNo single-line text with text content equal to "" str "" was found.")))
  18.    )
  19.    (princ)
  20. )
回复

使用道具 举报

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 16:09:48 | 显示全部楼层
非常感谢。lisp正是我所需要的!唯一的问题是,它只适用于单行文字,但我还需要找到多行文字和属性的值。。。我没有指定,对不起。。。
回复

使用道具 举报

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 16:20:20 | 显示全部楼层
你好同时,我发现了一个不使用lisp的方法(很长)。。。
1) 首先我解冻所有图层,然后使用“查找”命令,在搜索结束时选择所有结果。。。
2) 在这一点上,我打开控制层窗口,我点击“新过滤器”,然后,用鼠标右键点击我选择添加。。。过滤器包含选定对象的层。。。
这不是很舒服,但总比什么都没有好。。。
问题:是否可以使用lisp列出选定对象的图层?所以我可以在第1点停止这个过程)。
提前感谢您的帮助
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:25:06 | 显示全部楼层
尝试基于对象选择创建层过滤器。
  1. (defun c:foo (/ a d e f l n s x)
  2. ;; RJP 2.6.2018
  3. ;; Creates a layer filter from a selection of objects
  4. (cond
  5.    ((null (setq s (ssget))) (print "Bye..."))
  6.    ((null
  7.       (and (setq a (cdr (assoc 330 (entget (tblobjname "layer" (getvar 'clayer))))))
  8.     (setq d (cdr (assoc -1 (dictsearch (cdr (assoc 360 (entget a))) "ACAD_LAYERFILTERS"))))
  9.       )
  10.     )
  11.     (print "No layer filter dictionary...")
  12.    )
  13.    (t
  14.     (foreach x        (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
  15.       (and (not (member (setq l (cdr (assoc 8 (entget x)))) f)) (setq f (cons l f)))
  16.     )
  17.     (setq n (strcat (getenv "username") "_SelectionFilter"))
  18.     (and (setq e (dictsearch d n)) (entdel (cdr (assoc -1 e))))
  19.     (dictadd d
  20.       n
  21.       (entmakex        (list '(0 . "xrecord")
  22.                       '(100 . "AcDbXrecord")
  23.                       '(280 . 1)
  24.                       (cons 1 n)
  25.                       (cons 1 (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) f)))
  26.                       '(1 . "*")
  27.                       '(1 . "*")
  28.                       '(70 . 0)
  29.                       '(1 . "*")
  30.                       '(1 . "*")
  31.                 )
  32.       )
  33.     )
  34.     (command "_.+layer" n)
  35.     ;; Qsave regenerates layer palette to show correct filter .. bit of a kludge
  36.     (command "_.qsave")
  37.    )
  38. )
  39. (princ)
  40. )
回复

使用道具 举报

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 16:34:22 | 显示全部楼层
哦完美的它将对我非常有用!
非常感谢你!
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:40:48 | 显示全部楼层
 
很高兴你能用
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:06 , Processed in 2.307366 second(s), 72 queries .

© 2020-2025 乐筑天下

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