乐筑天下

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

[编程交流] 需要LISP函数来读取tex

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:30:37 | 显示全部楼层
快速书写:
  1. (defun c:fixratios ( / a b e i p s x )
  2.    (if (setq s (ssget "_:L" '((0 . "TEXT")(1 . "#*:#*")(1 . "~*[~.:0-9]*")(1 . "~**"))))
  3.        (repeat (setq i (sslength s))
  4.            (setq e (entget (ssname s (setq i (1- i))))
  5.                  x (cdr (assoc 1 e))
  6.                  p (vl-string-position 58 x)
  7.            )
  8.            (if (and (setq a (distof (substr x 1 p) 2))
  9.                     (setq b (distof (substr x (+ 2 p)) 2))
  10.                     (not (equal 0.0 b 1e-)
  11.                )
  12.                (entmod (subst (cons 1 (rtos (/ a b))) (assoc 1 e) e))
  13.            )
  14.        )
  15.    )
  16.    (princ)
  17. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:42:36 | 显示全部楼层
嗨,李需要第二个部分,把文本复制到另一个层上,结果是
 
有一点时间。
 
  1. ; original code by Lee-mac Aug 2017
  2. ; changed to only modify 1:x below 1:69
  3. ; by Alan H Aug 2017
  4. (defun c:fixratios ( / a b e i p s x ab)
  5. ; new layer added
  6. (if (/= (tblsearch "Layer" "Xgrade") nil)
  7.      (setvar 'clayer "Grade2")
  8.      (command "-layer" "m" "Xgrade" "c" 10 "Xgrade" "")
  9. )
  10. (if (setq s (ssget "_:L" '((0 . "TEXT")(1 . "#*:#*")(1 . "~*[~.:0-9]*")(1 . "~**"))))
  11. (repeat (setq i (sslength s))
  12.    (setq e (vlax-ename->vla-object (ssname s (setq i (1- i)))))
  13.    (setq x (vla-get-textstring e))
  14.    (setq p (vl-string-position 58 x))
  15.    (if (and
  16.          (setq a (distof (substr x 1 p) 2))
  17.          (setq b (distof (substr x (+ 2 p)) 2))
  18.          (not (equal 0.0 b 1e-)
  19.          (< (setq ab (/ a b)) (/ 1.0 69.0))
  20.           )
  21.          (progn
  22.            (vla-put-textstring  e (rtos ab 2 3))
  23.            (vla-put-layer e "Xgrade")
  24.          )
  25.      )
  26. )
  27. )
  28. (princ)
  29. )
回复

使用道具 举报

32

主题

430

帖子

423

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
150
发表于 2022-7-5 16:58:01 | 显示全部楼层
李,你好,Lisp程序。
 
你能解释一下吗
 
  1. (setq s (ssget "_:L" '((0 . "TEXT")(1 . "#*:#*")(1 . "~*[~.:0-9]*")(1 . "~**"))))

 
关于1过滤器
 
也可以将8 dxf代码添加到表格中,因为它是文本层。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:17:42 | 显示全部楼层
 
(1 . "#*:#*")
匹配以数字开头并包含冒号和数字的文本,例如“1abc:2def”
 
(1 . "~*[~.:0-9]*")
匹配仅包含字符“:0123456789”的文本,例如“1.23:4.56:7.89”
 
[noparse](1。“~**”[/noparse]
确保字符串仅包含一个冒号。
 
这并不能解释所有情况,因为您可以在小数点上执行额外的验证(确保它在冒号的任意一侧最多出现一次)。
 
也可以包括层过滤器,但它会降低其他成员轻松使用代码的能力。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:08 , Processed in 1.795151 second(s), 66 queries .

© 2020-2025 乐筑天下

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