明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 148|回复: 8

[提问] 文本打断代码求助,谢谢~

[复制链接]
发表于 前天 14:39 | 显示全部楼层 |阅读模式
本帖最后由 逗亦斗霸 于 2024-12-17 15:24 编辑


  1. (defun c:tt (/ b box ent ent2 h i n name ty num pt pt10 str str1 str2)
  2.         (while
  3.                 (and
  4.                         (setq pt (cadr (setq name (entsel "\n请选择文字: ") ) ) )
  5.                         (setq ent (entget (car name) ) )
  6.                         (if (= (cdr (assoc 0 ent) ) "TEXT")
  7.                                 (progn
  8.                                         (setq ty (ssget) )
  9.                                         (command "JUSTIFYTEXT" "" ty "L")
  10.                                         (setq str (cdr (assoc 1 ent) ) pt10 (cdr (assoc 10 ent) ) h (cdr (assoc 40 ent) ) ent2 (cdr ent) box (textbox ent2) n (fix (/ (- (car pt) (car pt10) ) (/ (- (car (cadr box) ) (car (car box) ) ) (strlen str) ) ) ) num 0 i 1)
  11.                                         (repeat n (if (> (ascii (substr str i i) ) 160) (setq num (1+ num) ) ) (setq i (1+ i) ) )
  12.                                         (if (= (rem num 2) 1) (setq n (1- n) ) )
  13.                                         (setq str1 (substr str 1 n) str2 (substr str (1+ n) ) )
  14.                                         (entmod (subst (cons 1 str1) (assoc 1 ent) ent ) )
  15.                                         (setq ent2 (subst(cons 1 str2) (assoc 1 ent2) ent2 ) )
  16.                                         (entmake (subst (cons 10 (list (car pt10) (- (cadr pt10) (* 1.4 h) ) ) ) (assoc 10 ent2) ent2) )
  17.                                 )
  18.                                 nil
  19.                         )
  20.                 )
  21.         )
  22. )

原代码可以将对正方式为左对齐的单行文字打断成两行,我尝试加入修改对正方式的两段代码『(setq ty (entlast) ) 和 (command "JUSTIFYTEXT" ty "L")』后却不能正常使用了,请问问题出在哪里?另外,如果想将文字打断但位置不变的话怎么修改(打断的地方没有空格)?谢谢~
回复

使用道具 举报

发表于 前天 15:14 | 显示全部楼层
(setq ty (entlast))是什么,得到的一定是文字?
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 15:20 | 显示全部楼层
本帖最后由 逗亦斗霸 于 2024-12-17 15:26 编辑
自贡黄明儒 发表于 2024-12-17 15:14
(setq ty (entlast))是什么,得到的一定是文字?

不好意思!开始编辑的时候把后面一段代码给弄没了。我把(setq ty (entlast))换成(setq ty (ssget))也不行~
回复 支持 反对

使用道具 举报

发表于 前天 15:28 | 显示全部楼层
"JUSTIFYTEXT"一旦发生错误,需要重开机才行。应该是bug
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 15:34 | 显示全部楼层
自贡黄明儒 发表于 2024-12-17 15:28
"JUSTIFYTEXT"一旦发生错误,需要重开机才行。应该是bug

请问黄总有解决思路吗?
回复 支持 反对

使用道具 举报

发表于 前天 16:21 | 显示全部楼层
逗亦斗霸 发表于 2024-12-17 15:34
请问黄总有解决思路吗?

似乎不好解决。
曾经的解决方案好像也解决不了
(if (findfile "actscale.arx")
    (ARXLOAD "actscale.arx")
  )
  (if (findfile "acTscale.crx")
    (ARXLOAD "acTscale.crx")
  )
(VL-CATCH-ALL-APPLY '(lambda() (vl-cmdf "_.JUSTIFYTEXT" ss "" "MC")) nil)
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 16:27 | 显示全部楼层
自贡黄明儒 发表于 2024-12-17 16:21
似乎不好解决。
曾经的解决方案好像也解决不了
(if (findfile "actscale.arx")

有插件实现改文字对正方式的,但一结合就行不行了,难道必须要分两个命令里去配合使用啊?
回复 支持 反对

使用道具 举报

发表于 前天 16:43 | 显示全部楼层
逗亦斗霸 发表于 2024-12-17 16:27
有插件实现改文字对正方式的,但一结合就行不行了,难道必须要分两个命令里去配合使用啊?

可能你写错了吧。
另外 ,你用vlide格式化一下,太难看了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 16:57 | 显示全部楼层
自贡黄明儒 发表于 2024-12-17 16:43
可能你写错了吧。
另外 ,你用vlide格式化一下,太难看了。

http://bbs.mjtd.com/forum.php?mo ... hlight=%CF%C2%D2%BB
回头来看Gu_xl版主的这个回复,把俩命令结合到一起好像可以了,我再多测试几次,谢谢黄总~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-19 07:04 , Processed in 0.175504 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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