逗亦斗霸 发表于 2024-12-17 14:39:33

文本打断代码求助,谢谢~

本帖最后由 逗亦斗霸 于 2024-12-17 15:24 编辑



(defun c:tt (/ b box ent ent2 h i n name ty num pt pt10 str str1 str2)
        (while
                (and
                        (setq pt (cadr (setq name (entsel "\n请选择文字: ") ) ) )
                        (setq ent (entget (car name) ) )
                        (if (= (cdr (assoc 0 ent) ) "TEXT")
                                (progn
                                        (setq ty (ssget) )
                                        (command "JUSTIFYTEXT" "" ty "L")
                                        (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)
                                        (repeat n (if (> (ascii (substr str i i) ) 160) (setq num (1+ num) ) ) (setq i (1+ i) ) )
                                        (if (= (rem num 2) 1) (setq n (1- n) ) )
                                        (setq str1 (substr str 1 n) str2 (substr str (1+ n) ) )
                                        (entmod (subst (cons 1 str1) (assoc 1 ent) ent ) )
                                        (setq ent2 (subst(cons 1 str2) (assoc 1 ent2) ent2 ) )
                                        (entmake (subst (cons 10 (list (car pt10) (- (cadr pt10) (* 1.4 h) ) ) ) (assoc 10 ent2) ent2) )
                                )
                                nil
                        )
                )
        )
)
原代码可以将对正方式为左对齐的单行文字打断成两行,我尝试加入修改对正方式的两段代码『(setq ty (entlast) ) 和 (command "JUSTIFYTEXT" ty "L")』后却不能正常使用了,请问问题出在哪里?另外,如果想将文字打断但位置不变的话怎么修改(打断的地方没有空格)?谢谢~

自贡黄明儒 发表于 2024-12-17 15:14:47

(setq ty (entlast))是什么,得到的一定是文字?

逗亦斗霸 发表于 2024-12-17 15:20:20

本帖最后由 逗亦斗霸 于 2024-12-17 15:26 编辑

自贡黄明儒 发表于 2024-12-17 15:14
(setq ty (entlast))是什么,得到的一定是文字?
不好意思!开始编辑的时候把后面一段代码给弄没了。我把(setq ty (entlast))换成(setq ty (ssget))也不行~

自贡黄明儒 发表于 2024-12-17 15:28:25

"JUSTIFYTEXT"一旦发生错误,需要重开机才行。应该是bug

逗亦斗霸 发表于 2024-12-17 15:34:31

自贡黄明儒 发表于 2024-12-17 15:28
"JUSTIFYTEXT"一旦发生错误,需要重开机才行。应该是bug

请问黄总有解决思路吗?

自贡黄明儒 发表于 2024-12-17 16:21:33

逗亦斗霸 发表于 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)

逗亦斗霸 发表于 2024-12-17 16:27:39

自贡黄明儒 发表于 2024-12-17 16:21
似乎不好解决。
曾经的解决方案好像也解决不了
(if (findfile "actscale.arx")


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

自贡黄明儒 发表于 2024-12-17 16:43:51

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

可能你写错了吧。
另外 ,你用vlide格式化一下,太难看了。

逗亦斗霸 发表于 2024-12-17 16:57:07

自贡黄明儒 发表于 2024-12-17 16:43
可能你写错了吧。
另外 ,你用vlide格式化一下,太难看了。

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=171156&highlight=%CF%C2%D2%BB
回头来看Gu_xl版主的这个回复,把俩命令结合到一起好像可以了,我再多测试几次,谢谢黄总~
页: [1]
查看完整版本: 文本打断代码求助,谢谢~