在冻结层上搜索文本
您好,我有一个问题,我认为用普通autocad命令无法解决。。。(我不想使用“数据提取”)我使用一个与autocad一起工作的程序,并使用autocad的功能。。。使用此功能,它可以创建一系列由多层组成的图纸(页面)。。。冻结层的精确组合允许查看当前页面。
好的,在序言之后的问题是:我需要在文件中搜索文本,但我想知道文本的位置(层)。。。
是否可能知道这些信息(搜索文本所在的层)?
问候语 大致如下:
(if (setq s (ssget "_X" '((0 . "TEXT") (1 . "YourTextHere"))))
(cdr (assoc 8 (entget (ssname s 0))))
) 天啊!李先生!你不知道我是谁。。。但我很清楚你是谁!我借此机会感谢您在Lisp程序方面给予我的所有帮助!
说这个。。。不幸的是,我绝对不能从你的建议中得到帮助,因为我不是一个程序员。。。
无论如何,我都会考虑,甚至只是为了更好地重新制定请求! 除李的建议外:
(while (and (setq d (tblnext "LAYER" (not d))) (not s))
(and
(ssget "_X" (list '(0 . "TEXT") '(1 . "YourTextHere") (cons 8 (cdr (assoc 2 d)))))
(setq s d)
)
)
s
谢谢你的感谢,我很高兴听到我的项目帮助你起草工作。
没问题-下面是一个更全面的示例,您可以在AutoCAD命令行中加载并运行该示例:
(defun c:findtextlayer ( / enx idx lay lst sel str )
(cond
( (= "" (setq str (getstring t "\nSpecify text to find: ")))
(princ "\nNo text entered.")
)
( (setq sel (ssget "_X" (list '(0 . "TEXT") (cons 1 str))))
(repeat (setq idx (sslength sel))
(setq idx (1- idx)
enx (entget (ssname sel idx))
lay (cdr (assoc 8 enx))
)
(if (not (member lay lst)) (setq lst (cons lay lst)))
)
(princ (strcat "\nSingle-line text with content \"" str "\" was found on the layers: "))
(foreach lay lst (princ "\n\t") (prin1 lay))
)
( (princ (strcat "\nNo single-line text with text content equal to \"" str "\" was found.")))
)
(princ)
) 非常感谢。lisp正是我所需要的!唯一的问题是,它只适用于单行文字,但我还需要找到多行文字和属性的值。。。我没有指定,对不起。。。 你好同时,我发现了一个不使用lisp的方法(很长)。。。
1) 首先我解冻所有图层,然后使用“查找”命令,在搜索结束时选择所有结果。。。
2) 在这一点上,我打开控制层窗口,我点击“新过滤器”,然后,用鼠标右键点击我选择添加。。。过滤器包含选定对象的层。。。
这不是很舒服,但总比什么都没有好。。。
问题:是否可以使用lisp列出选定对象的图层?所以我可以在第1点停止这个过程)。
提前感谢您的帮助 尝试基于对象选择创建层过滤器。
(defun c:foo (/ a d e f l n s x)
;; RJP 2.6.2018
;; Creates a layer filter from a selection of objects
(cond
((null (setq s (ssget))) (print "Bye..."))
((null
(and (setq a (cdr (assoc 330 (entget (tblobjname "layer" (getvar 'clayer))))))
(setq d (cdr (assoc -1 (dictsearch (cdr (assoc 360 (entget a))) "ACAD_LAYERFILTERS"))))
)
)
(print "No layer filter dictionary...")
)
(t
(foreach x (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
(and (not (member (setq l (cdr (assoc 8 (entget x)))) f)) (setq f (cons l f)))
)
(setq n (strcat (getenv "username") "_SelectionFilter"))
(and (setq e (dictsearch d n)) (entdel (cdr (assoc -1 e))))
(dictadd d
n
(entmakex (list '(0 . "xrecord")
'(100 . "AcDbXrecord")
'(280 . 1)
(cons 1 n)
(cons 1 (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) f)))
'(1 . "*")
'(1 . "*")
'(70 . 0)
'(1 . "*")
'(1 . "*")
)
)
)
(command "_.+layer" n)
;; Qsave regenerates layer palette to show correct filter .. bit of a kludge
(command "_.qsave")
)
)
(princ)
) 哦完美的它将对我非常有用!
非常感谢你!
很高兴你能用
页:
[1]