nvoss 发表于 2022-7-5 16:05:23

需要LISP函数来读取tex

我有一个地板的矢量图,我得到的是地板的矢量和坡度比(即1:155.095,1:97.561)。问题是,我只想查看低于特定坡度比(1:69)的楼层面积,但它们是设置为文本内容的比例,因此AutoCAD不理解这些比例是数字。
 
我正在寻找一个Lisp函数,对于每个文本,如果在整个楼层(或布局)中有一个比率,则复制文本(这是一个比率),找出该比率的数字(即取1除以69),然后用数字(0.0145)替换文本。我希望每一个例子都能做到这一点,地板上有37000多个这样的文本。
 
我附上了一个图像,描述了我在布局。
 
有谁知道lisp函数可以做到这一点吗?

Lee Mac 发表于 2022-7-5 16:30:37

快速书写:
(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)
)

BIGAL 发表于 2022-7-5 16:42:36

嗨,李需要第二个部分,把文本复制到另一个层上,结果是
 
有一点时间。
 
; 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)
)

devitg 发表于 2022-7-5 16:58:01

李,你好,Lisp程序。
 
你能解释一下吗
 
(setq s (ssget "_:L" '((0 . "TEXT")(1 . "#*:#*")(1 . "~*[~.:0-9]*")(1 . "~**"))))
 
关于1过滤器
 
也可以将8 dxf代码添加到表格中,因为它是文本层。

Lee Mac 发表于 2022-7-5 17:17:42

 
(1 . "#*:#*")
匹配以数字开头并包含冒号和数字的文本,例如“1abc:2def”
 
(1 . "~*[~.:0-9]*")
匹配仅包含字符“:0123456789”的文本,例如“1.23:4.56:7.89”
 
(1。“~**”
确保字符串仅包含一个冒号。
 
这并不能解释所有情况,因为您可以在小数点上执行额外的验证(确保它在冒号的任意一侧最多出现一次)。
 
也可以包括层过滤器,但它会降低其他成员轻松使用代码的能力。
页: [1]
查看完整版本: 需要LISP函数来读取tex