需要LISP函数来读取tex
我有一个地板的矢量图,我得到的是地板的矢量和坡度比(即1:155.095,1:97.561)。问题是,我只想查看低于特定坡度比(1:69)的楼层面积,但它们是设置为文本内容的比例,因此AutoCAD不理解这些比例是数字。我正在寻找一个Lisp函数,对于每个文本,如果在整个楼层(或布局)中有一个比率,则复制文本(这是一个比率),找出该比率的数字(即取1除以69),然后用数字(0.0145)替换文本。我希望每一个例子都能做到这一点,地板上有37000多个这样的文本。
我附上了一个图像,描述了我在布局。
有谁知道lisp函数可以做到这一点吗?
快速书写:
(defun c:fixratios ( / a b e i p s x )
(if (setq s (ssget "_:L" '((0 . "TEXT")(1 . "#*:#*")(1 . "~*[~.:0-9]*")(1 . "~**"))))
(repeat (setq i (sslength s))
(setq e (entget (ssname s (setq i (1- i))))
x (cdr (assoc 1 e))
p (vl-string-position 58 x)
)
(if (and (setq a (distof (substr x 1 p) 2))
(setq b (distof (substr x (+ 2 p)) 2))
(not (equal 0.0 b 1e-)
)
(entmod (subst (cons 1 (rtos (/ a b))) (assoc 1 e) e))
)
)
)
(princ)
) 嗨,李需要第二个部分,把文本复制到另一个层上,结果是
有一点时间。
; original code by Lee-mac Aug 2017
; changed to only modify 1:x below 1:69
; by Alan H Aug 2017
(defun c:fixratios ( / a b e i p s x ab)
; new layer added
(if (/= (tblsearch "Layer" "Xgrade") nil)
(setvar 'clayer "Grade2")
(command "-layer" "m" "Xgrade" "c" 10 "Xgrade" "")
)
(if (setq s (ssget "_:L" '((0 . "TEXT")(1 . "#*:#*")(1 . "~*[~.:0-9]*")(1 . "~**"))))
(repeat (setq i (sslength s))
(setq e (vlax-ename->vla-object (ssname s (setq i (1- i)))))
(setq x (vla-get-textstring e))
(setq p (vl-string-position 58 x))
(if (and
(setq a (distof (substr x 1 p) 2))
(setq b (distof (substr x (+ 2 p)) 2))
(not (equal 0.0 b 1e-)
(< (setq ab (/ a b)) (/ 1.0 69.0))
)
(progn
(vla-put-textstringe (rtos ab 2 3))
(vla-put-layer e "Xgrade")
)
)
)
)
(princ)
)
李,你好,Lisp程序。
你能解释一下吗
(setq s (ssget "_:L" '((0 . "TEXT")(1 . "#*:#*")(1 . "~*[~.:0-9]*")(1 . "~**"))))
关于1过滤器
也可以将8 dxf代码添加到表格中,因为它是文本层。
(1 . "#*:#*")
匹配以数字开头并包含冒号和数字的文本,例如“1abc:2def”
(1 . "~*[~.:0-9]*")
匹配仅包含字符“:0123456789”的文本,例如“1.23:4.56:7.89”
(1。“~**”
确保字符串仅包含一个冒号。
这并不能解释所有情况,因为您可以在小数点上执行额外的验证(确保它在冒号的任意一侧最多出现一次)。
也可以包括层过滤器,但它会降低其他成员轻松使用代码的能力。
页:
[1]