明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 763|回复: 6

[讨论] 求能批量按顺充提取多段线上的文字的LSP

[复制链接]
发表于 2018-11-19 14:14 | 显示全部楼层 |阅读模式
求能批量按顺充提取多段线上的文字的LSP.
只要与多段线相交的文字撮按顺序提取出来:如下图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2018-11-19 20:41 来自手机 | 显示全部楼层
按线段方向顺序提取
发表于 2018-11-19 23:48 | 显示全部楼层
  1. ;按顺序提取单行文字
  2. (defun c:sxtqwz()
  3.     (setq cmd (getvar "cmdecho"))
  4.     (setvar  "cmdecho" 0)
  5.     (if (progn
  6.                (princ "\n请选取多段线:")
  7.                (setq ssa (ssget ":S" '((0 . "lwpolyline"))))
  8.         )
  9.         (progn
  10.             (setq ent (ssname ssa 0))
  11.             (setq dxf (entget ent))
  12.             (setq pts (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) dxf)))
  13.             (setq ptmin (mapcar '+ (apply 'mapcar (cons 'min pts)) '(-100 -100)))
  14.             (setq ptmax (mapcar '+ (apply 'mapcar (cons 'max pts)) '( 100  100)))
  15.             (if (setq ssb (ssget "w" ptmin ptmax '((0 . "text"))))
  16.                 (progn
  17.                     (setq i 0)
  18.                     (setq n (sslength ssb))
  19.                     (setq jgb nil)
  20.                     (repeat n
  21.                         (setq entt (ssname ssb i))
  22.                         (setq dxft (entget entt))
  23.                         (setq pt (cdr (assoc 10 dxft)))
  24.                         (setq str (cdr (assoc 1 dxft)))
  25.                         (setq ptt (vlax-curve-getclosestpointto ent pt))
  26.                         (setq jgb (cons (list ptt str) jgb))
  27.                         (setq i (1+ i))   
  28.                     )
  29.                     (setq jgb (vl-sort jgb '(lambda(a b)
  30.                                                (< (vlax-curve-getdistatpoint ent (car a))
  31.                                                   (vlax-curve-getdistatpoint ent (car b))
  32.                                                )
  33.                                             )
  34.                               )
  35.                    )
  36.                    (foreach pt jgb
  37.                        (princ (strcat "\n" (cadr pt)))
  38.                    )
  39.                 )
  40.             )
  41.          )
  42.      )
  43.      (setvar "osmode" osm)
  44.      (princ)
  45. )

命令: SXTQWZ

请选取多段线:
选择对象:

批注:变更13
批注:变更14
批注:变更15
批注:变更16
批注:变更17
批注:变更19
批注:变更18
批注:变更20
批注:变更21
批注:变更22
批注:变更23
批注:变更24
发表于 2018-11-19 23:56 | 显示全部楼层
本帖最后由 lisperado 于 2018-11-20 00:25 编辑

以fence简单思路
缺点:所有字体要zoom可见性,不支持孤形或曲线,交叉可能错选
以下只示范于WCS坐标系
  1. (defun c:tt (/ en lst s)
  2.   (and (setq en (car (entsel "\n选取多段线 ")))
  3.        (setq lst (mapcar 'cdr (vl-remove-if-not ''((x) (= (car x) 10)) (entget en))))
  4.        (setq s (ssget "_F" lst '((0 . "TEXT") (1 . "*批注: 变更*[1-9]"))))
  5.        (foreach x (acet-ss-to-list s) (terpri) (princ (cdr (assoc 1 (entget x)))))
  6.        )
  7.   (textscr)
  8.   (princ)
  9.   )


以上字串"*批注: 变更*", 请自行调试有无空格都会影响选取无效!


 楼主| 发表于 2018-11-20 19:51 来自手机 | 显示全部楼层
yshf 发表于 2018-11-19 23:48
命令: SXTQWZ

请选取多段线:

提取的文字的顺序不对哦
发表于 2018-11-24 21:08 | 显示全部楼层
excel里面排序不就解决了哇
 楼主| 发表于 2018-11-25 10:11 | 显示全部楼层
jun353835273 发表于 2018-11-24 21:08
excel里面排序不就解决了哇

其它要提取的文字是没有顺序,不规则的。看来是这个例子放错了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-3-29 09:32 , Processed in 0.322052 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表