乐筑天下

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

[编程交流] LISP计算多行文字和多段线

[复制链接]

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 16:18:49 | 显示全部楼层
 
我能得到的最接近的是。。。。。。。。。
 
  1. (defun C:demo  (/ ss i pl_list mt_list mtpt_list sn a b c d e f g h tmp _nearest thelenght)
  2. (setq _relist (lambda (m)
  3.      ((if m vl-remove-if vl-remove-if-not) '(lambda (x)
  4.                         (equal (car f) (car x))) g)))
  5. (if (setq ss (ssget
  6.                '((410 . "Model")(8 . "0gas")
  7.                  (-4 . "<OR")
  8.                         (-4 . "<AND")(0 . "MTEXT")(1 . "#****")
  9.                  (-4 . "AND>") (0 . "LWPOLYLINE") (-4 . "OR>")))
  10.         )
  11.         (progn         
  12.                 (repeat (setq i (sslength ss))
  13.                       (setq sn (ssname ss (setq i (1- i))))
  14.                             
  15.                               (if (eq (cdr (assoc 0 (setq ent (entget  sn)))) "LWPOLYLINE")
  16.                                     (setq pl_list (cons (list (vlax-curve-getDistAtParam sn
  17.                                                                 (vlax-curve-getendparam sn)) sn ) pl_list))
  18.                                     (setq mt_list (cons (list (cdr (assoc 10 ent)) (cdr (assoc 1 ent))) mt_list))
  19.                             )
  20.                             )       
  21.                 (while (and (setq a (car mt_list)) pl_list)
  22.                           (setq tmp (mapcar '(lambda (c)
  23.                                         (list c (distance (car a)
  24.                                                        (vlax-curve-getClosestPointTo (cadr c) (car a)))
  25.                                                       (car c) (cadr a)))  pl_list))
  26.                                       (setq _nearest (car (vl-sort tmp '(lambda ( d e )
  27.                                                                     (< (cadr d) (cadr e)))))
  28.                                              
  29.                                       pl_list (vl-remove (Car _nearest) pl_list)
  30.                                       mtpt_list (cons (list   (cadddr _nearest) (caddr _nearest)) mtpt_list)
  31.                                       mt_list (cdr mt_list))
  32.                       )
  33.                      
  34.                               (setq mtpt_list (vl-sort mtpt_list
  35.                                                   '(lambda (u v)
  36.                                                     (< (car u) (car v))
  37.                                                     )
  38.                                                   )
  39.                                     
  40.                   )
  41.                         (while (setq f (car mtpt_list))
  42.                          (setq g (cdr mtpt_list))
  43.                                (setq thelenght (rtos
  44.                                 (if (setq h (_relist nil))
  45.                                     (progn
  46.                                           (setq g (_relist t))
  47.                                                     (apply '+ (mapcar 'cadr (cons f h))))
  48.                                         (cadr f)) 2 2 ))               
  49.                 (princ (strcat "\nThere are "
  50.                                  (itoa (if h (1+ (length h)) 1))
  51.                                  " MTEXT objects with content ""
  52.                                  (car f)
  53.                                  "" on the current tab and the "
  54.                                   (if h "total " "")
  55.                                  "length is " thelenght  "m."))
  56.                         (setq mtpt_list g)
  57.                         )
  58.               )
  59.   )
  60.          (princ)
  61. )

 
我尝试了一些东西,但我必须承认我是一个初学者,所以我有点挣扎!
我所能做的就是替换(-4)。”
现在,它列出了每个场景,但它们是单独列出的。
我的代码如下所示。。。。
当前选项卡上有1个多行文字对象,其内容为“63 Pe”
长度为11.93m。
当前选项卡上有1个多行文字对象,其内容为“63mm Pe”
长度为2.44m。
 
理想情况下,我希望它能做到这一点,但将它们列为每个直径的总数。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:20:50 | 显示全部楼层
上一个有点相关的线程:
http://www.cadtutor.net/forum/showthread.php?98447-LISP显示多行文字内容&p=671463#post671463
我想知道为什么不将所有名称变体重命名为一个全局名称,即:
  1. 63mm PE, 63mm Pe, 63 PE, 63 Pe,  -> 63mm PE
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 16:23:37 | 显示全部楼层
 
你几乎做到了,安迪,如果多行文字字符串值总是以PE或PE,PE,PE结尾,那么用
 
  1. (1 . "#*[Pp][Ee]")

 
现在的条件是字符串需要以数字值“#”开头,只要以字母p&e结尾。
下一步是巩固“相似”的价值观……你可以做到,安迪
并学习如何使用代码标记。
回复

使用道具 举报

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 16:26:53 | 显示全部楼层
 
再次感谢,下面列出了所有场景。现在唯一的事情是,它将它们列为单独的对象,就像这样。。。
 
当前选项卡上有1个多行文字对象,其内容为“63mm PE”
长度为25.1m。
当前选项卡上有两个内容为“63mm Pe”的多行文字对象,并且
总长20.2m。
 
可以这样列出它们吗(合并):
当前选项卡上有3个多行文字对象,其内容为“63mm Pe”
总长45.3m。
我认为这可能需要寻找数字(63/90/125等)才能起作用。
回复

使用道具 举报

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 16:29:26 | 显示全部楼层
 
对不起,我刚刚看到这个帖子,所以你已经知道我的下一个问题了!我会试着让你知道!
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 16:34:13 | 显示全部楼层
 
已经做了,更新了演示代码所在帖子上的例程
 
请尝试用代码标签修复您的帖子
回复

使用道具 举报

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 16:36:33 | 显示全部楼层
对不起,下次我会记得的。谢谢你的帮助,代码完全符合我的要求!
回复

使用道具 举报

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 16:39:04 | 显示全部楼层
 
嗨,又是我。
 
再次感谢您的代码,我一直在使用它,它工作得很好。
您是否能够将其设置为使多段线的每个长度向上或向下舍入为整数(18.35m=18m/18.65m=19m)?
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 16:42:54 | 显示全部楼层
请阅读代码发布指南,并编辑代码以包含在代码标记(非HTML标记)中。[NOPARSE]
  1. Your Code Here[/NOPARSE]
=
  1. Your Code Here
回复

使用道具 举报

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 16:46:23 | 显示全部楼层
 
希望这是正确的。。。。
 
嗨,又是我。
 
再次感谢您的代码,我一直在使用它,它工作得很好。
您是否能够将其设置为使多段线的每个长度向上或向下舍入为整数(18.35m=18m/18.65m=19m)?
 
  1. (defun C:demo  (/ ss i pl_list mt_list mtpt_list sn a b c d e f g h tmp _nearest thelenght)
  2. (setq _relist (lambda (m)
  3.      ((if m vl-remove-if vl-remove-if-not) '(lambda (x)
  4.                         (equal (car f) (car x))) g)))
  5. (if (setq ss (ssget
  6.                '((410 . "Model")(8 . "0gas")
  7.                  (-4 . "<OR")
  8.                         (-4 . "<AND")(0 . "MTEXT")(1 . "#*[Pp][Ee]")
  9.                  (-4 . "AND>") (0 . "LWPOLYLINE") (-4 . "OR>")))
  10.         )
  11.         (progn         
  12.                 (repeat (setq i (sslength ss))
  13.                       (setq sn (ssname ss (setq i (1- i))))
  14.                             
  15.                               (if (eq (cdr (assoc 0 (setq ent (entget  sn)))) "LWPOLYLINE")
  16.                                     (setq pl_list (cons (list (vlax-curve-getDistAtParam sn
  17.                                                                 (vlax-curve-getendparam sn)) sn ) pl_list))
  18.                                     (setq mt_list (cons (list (cdr (assoc 10 ent)) (atoi (cdr (assoc 1 ent)))) mt_list))
  19.                             )
  20.                             )       
  21.                 (while (and (setq a (car mt_list)) pl_list)
  22.                           (setq tmp (mapcar '(lambda (c)
  23.                                         (list c (distance (car a)
  24.                                                        (vlax-curve-getClosestPointTo (cadr c) (car a)))
  25.                                                       (car c) (cadr a)))  pl_list))
  26.                                       (setq _nearest (car (vl-sort tmp '(lambda ( d e )
  27.                                                                     (< (cadr d) (cadr e)))))
  28.                                              
  29.                                       pl_list (vl-remove (Car _nearest) pl_list)
  30.                                       mtpt_list (cons (list   (cadddr _nearest) (caddr _nearest)) mtpt_list)
  31.                                       mt_list (cdr mt_list))
  32.                       )
  33.                      
  34.                               (setq mtpt_list (vl-sort mtpt_list
  35.                                                   '(lambda (u v)
  36.                                                     (< (car u) (car v))
  37.                                                     )
  38.                                                   )
  39.                                     
  40.                   )
  41.                         (while (setq f (car mtpt_list))
  42.                          (setq g (cdr mtpt_list))
  43.                                (setq thelenght (rtos
  44.                                 (if (setq h (_relist nil))
  45.                                     (progn
  46.                                           (setq g (_relist t))
  47.                                                     (apply '+ (mapcar 'cadr (cons f h))))
  48.                                         (cadr f)) 2 2 ))               
  49.                 (princ (strcat "\nThere are "
  50.                                  (itoa (if h (1+ (length h)) 1))
  51.                                  " MTEXT objects with content ""
  52.                                  (itoa (car f))
  53.                                  "mm PE" on the current tab and the "
  54.                                   (if h "total " "")
  55.                                  "length is " thelenght  "m."))
  56.                         (setq mtpt_list g)
  57.                         )
  58.               )
  59.   )
  60.          (princ)
  61. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-6 18:15 , Processed in 0.907524 second(s), 81 queries .

© 2020-2025 乐筑天下

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