乐筑天下

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

[编程交流] 我需要lisp那分割的文本。

[复制链接]

10

主题

38

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:26:57 | 显示全部楼层 |阅读模式
我英语不好。。所以
我附上了文件。你可以轻松理解。。
QQ。图纸
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:37:37 | 显示全部楼层
试试这个
 
  1. (defun c:test  ( / Text obj ht str ptList)
  2. (vl-load-com)
  3.      (defun Text  (pt hgt wd str)
  4.            (entmakex
  5.                  (list (cons 0 "TEXT")
  6.                        (cons 10 pt)
  7.                        (cons 40 hgt)
  8.                        (cons 41 wd)
  9.                        (cons 1 str))))
  10.      (cond (
  11.             (and
  12.      (setq obj (car (entsel "\nSelect Text:")))
  13.      (setq obj (entget obj))
  14.      (eq (cdr (assoc 0 obj)) "TEXT")
  15.      (setq ht (cdr (assoc 40 obj)))
  16.      (setq str
  17.                 (vl-remove-if
  18.                       '(lambda (y)
  19.                              (eq " "
  20.                                  (chr y)))
  21.                       (vl-string->list (cdr (assoc 1 obj)))))
  22.      (setq ptList (list
  23.                         (setq Pt   (getpoint
  24.                                          "\nPick point to place text:"))))
  25.      (repeat (1- (length str))
  26.            (setq ptList (cons
  27.                               (setq pt (vl-list*
  28.                                              (+ (* ht 1.5)
  29.                                                 (car pt))
  30.                                              (cdr pt)))
  31.                               ptList)))
  32.      (mapcar '(lambda (k l)
  33.                     (Text l (cdr (assoc 40 obj)) (cdr (assoc 41 obj))(chr k)))
  34.              str
  35.              (reverse ptList))
  36.       )
  37.             )
  38.            )
  39.      (princ)
  40.      )
回复

使用道具 举报

10

主题

38

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:46:41 | 显示全部楼层
谢谢PBe公司
 
lisp正在工作。但这和我的意图没什么不同。
 
我要分解原始文本。而这个Lisp程序就是改变原文的位置。。。。。
 
 
谢谢你关注我的问题。^
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:53:20 | 显示全部楼层
 
 
  1. (defun c:test  ( / Text obj [color=blue]objent[/color] ht str ptList)
  2.      (defun Text  (pt hgt wd str)
  3.            (entmakex
  4.                  (list (cons 0 "TEXT")
  5.                        (cons 10 pt)
  6.                        (cons 40 hgt)
  7.                        (cons 41 wd)
  8.                        (cons 1 str))))
  9.      (cond (
  10.             (and
  11.      (setq obj (car (entsel "\nSelect Text:")))
  12.      (setq [color=blue]objent[/color] (entget obj))
  13.      (eq (cdr (assoc 0 [color=blue]objent[/color])) "TEXT")
  14.      (setq ht (cdr (assoc 40 [color=blue]objent[/color])))
  15.      (setq str
  16.                 (vl-remove-if
  17.                       '(lambda (y)
  18.                              (eq " "
  19.                                  (chr y)))
  20.                       (vl-string->list (cdr (assoc 1 [color=blue]objent[/color])))))
  21.      [color=blue](progn
  22.            (vla-GetBoundingBox (vlax-ename->vla-object obj) 'a 'b)
  23.            (setq ptList (list
  24.                               (setq Pt
  25.                                          (vlax-safearray->list a))
  26.                               )))
  27. [/color]      (repeat (1- (length str))
  28.            (setq ptList (cons
  29.                               (setq pt (vl-list*
  30.                                              (+ (* ht 1.5)
  31.                                                 (car pt))
  32.                                              (cdr pt)))
  33.                               ptList)))
  34.      (mapcar '(lambda (k l)
  35.                     (Text l (cdr (assoc 40 objent)) (cdr (assoc 41 objent))(chr k)))
  36.              str
  37.              (reverse ptList))
  38.       [color=blue](entdel obj)
  39. [/color]       )
  40.             )
  41.            )
  42.      (princ)
  43.      )

 
这是我能得到的。
回复

使用道具 举报

44

主题

542

帖子

502

银币

后起之秀

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

铜币
220
发表于 2022-7-6 10:04:31 | 显示全部楼层
你错过了一个
  1. (vl-load-com)
。我觉得不错。失败的一件事是,如果旋转数据文本,则单独的文本组件无法保持其方向/位置。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:05:29 | 显示全部楼层
希望你不介意pBe
 
我确实喜欢写它。
 
  1. (defun c:Test (/ i ss e spc lst p t1 hgt)
  2. (setq i 0)
  3. (if
  4.    (and
  5.      (setq ss (car (entsel "\n Select Text :")))
  6.      (eq (cdr (assoc 0 (setq e (entget ss)))) "TEXT")
  7.    )
  8.     (progn
  9.       (setq spc (* (cdr (assoc 40 e)) 1.5))
  10.       (setq lst (vl-string->list (cdr (assoc 1 e))))
  11.       (setq p (cdr (assoc 10 e)))
  12.       (repeat
  13.         (length lst)
  14.          (setq t1 (chr (nth i lst)))
  15.          (entmakex (list (cons 0 "TEXT")
  16.                          (cons 10 p)
  17.                          (cons 40 (setq hgt (cdr (assoc 40 e))))
  18.                          (cons 1 t1)
  19.                    )
  20.          )
  21.          (setq i (+ i 1)
  22.                p (list (+ (car p) spc)
  23.                        (cadr p)
  24.                  )
  25.          )
  26.       )
  27.       (entdel ss)
  28.     )
  29. )
  30. (princ)
  31. )
Tharwat
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:16:40 | 显示全部楼层
 
好点子丁克
 
  1. (defun c:Test (/ i ss e spc lst p t1 hgt)
  2. (setq i 0)
  3. (if
  4.    (and
  5.      (setq ss (car (entsel "\n Select Text :")))
  6.      (eq (cdr (assoc 0 (setq e (entget ss)))) "TEXT")
  7.    )
  8.     (progn
  9.       (setq spc (* (cdr (assoc 40 e)) 1.5))
  10.       (setq lst (vl-string->list (cdr (assoc 1 e))))
  11.       (setq p (cdr (assoc 10 e)))
  12.       (repeat
  13.         (length lst)
  14.          (setq t1 (chr (nth i lst)))
  15.          (entmakex (list (cons 0 "TEXT")
  16.                          (cons 10 p)
  17.                          (cons 40 (setq hgt (cdr (assoc 40 e))))
  18.                          (cons 1 t1)
  19.                    )
  20.          )
  21.          (setq i (+ i 1)
  22.                p (polar (list (+ (car p) spc)(cadr p))(cdr (assoc 50 e)) spc)
  23.          )
  24.       )
  25.       (entdel ss)
  26.     )
  27. )
  28. (princ)
  29. )

塔瓦特
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:22:22 | 显示全部楼层
 
这是正确的,此外还有一些因素需要考虑。与str上的空格数“”一样,如果原始文本对正不是中间中心,则更容易解决位置问题(这就是为什么我加入了boundingbox函数)和yes旋转。我写的是最小值,仅适用于某些条件(因此命令名测试)
 
感谢您对Dink87522的见解,也感谢tharwat。
 
编辑。请随意修改我的代码来解析旋转和位置,我想看看其他人会如何处理它
回复

使用道具 举报

10

主题

38

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 10:30:55 | 显示全部楼层
谢谢大家。
这些lisp对我很有用。^
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 03:24 , Processed in 0.432056 second(s), 70 queries .

© 2020-2025 乐筑天下

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