183017064 发表于 2025-4-7 17:07:32

文字自适宽度-表格内多行的单行文字对齐

本帖最后由 183017064 于 2025-4-27 09:20 编辑

表格内多行的单行文字对齐[左中/中间/右中]
http://bbs.mjtd.com/forum.php?mo ... 685&fromuid=7333152
(出处: 明经CAD社区)

修改大佬lostbalance的代码,添加左右上下边距(字高倍数 ps:0.1字高),(可以按需修改)。强制文字宽度0.8(可以按需修改)

________________________________________________________


(setq texts lsti)
      (setq H_list (mapcar '(lambda (txt) (cdr (assoc 40 (entget txt)))) texts))
      (setq H_max (apply 'max H_list))
      (setq margin_top (* 0.2 H_max))   ; 上边距----------------------------------------------------------------------
      (setq margin_bottom (* 0.1 H_max)) ; 下边距---------------------------------------------------------------------
      (setq available_height (- (- py2 py1) margin_top margin_bottom))
      (setq py (/ available_height n))(defun AdjustTextWidth (txtent ty px1 px2 / current_41 tmp_txtdata tbox original_width available_width new_41 height)
    (setq current_41 (cdr (assoc 41 txtent)))
    (setq height (cdr (assoc 40 txtent))) ; 获取当前文字高度
    (setq tmp_txtdata (subst (cons 72 0) (assoc 72 txtent) txtent))
    (setq tmp_txtdata (subst (cons 73 0) (assoc 73 tmp_txtdata) tmp_txtdata))
    (setq tmp_txtdata (subst (cons 41 1.0) (assoc 41 tmp_txtdata) tmp_txtdata))
    (setq tmp_txtdata (subst (cons 10 (list 0 0 0)) (assoc 10 tmp_txtdata) tmp_txtdata))
    (setq tbox (textbox tmp_txtdata))
    (if (and tbox (car tbox) (cadr tbox))
      (progn
            (setq original_width (- (caadr tbox) (caar tbox)))
            (setq available_width
                (cond
                  ((= ty "s") (- (- px2 px1) (* 0.2 height))) ; 左边距0.1H -------------------------------------------------------
                  ((= ty "d") (- (- px2 px1) (* 0.4 height))) ; 中间左右各0.2H边距----------------------------------------------------
                  ((= ty "f") (- (- px2 px1) (* 0.2 height))) ; 右边距0.1H ---------------------------------------------------------
                )
            )
            (if (and (> original_width 0) (> (* original_width current_41) available_width))
                (progn
                  (setq new_41 (min (/ available_width original_width) 0.8))
                  (setq txtent (subst (cons 41 new_41) (assoc 41 txtent) txtent))
                )
            )
            ;; 强制宽度因子限制
            (setq current_41 (cdr (assoc 41 txtent)))
            (if (> current_41 0.8)
                (setq txtent (subst (cons 41 0.8) (assoc 41 txtent) txtent))
            )
      )
    )
    txtent
)——————————————————————————————————————————————————————————————
2025.04.23优化
无论当前宽度因子如何​,只要文字自然宽度允许,就强制设为最大可能值(不超过0.8)。

[*]文字在未超过边界时,宽度因子尽可能设为0.8,保持统一美观。
[*]当文字可能超出边界时,自动缩小宽度因子,确保不溢出。

收一个币 不过分吧
:lol
——————————————————————————————————————————————————————————————
2025.04.24更新
把边距系数单独拿出来,方便不同CAD猿使用,修改了一点小bug。

(setq topfactor 0.6)    ; 上边距系数(相对文字高度)
(setq bottomfactor 0.1) ; 下边距系数
(setq leftfactor 0.9)   ; 左边距系数
(setq rightfactor 0.5); 右边距系数
PS:右对齐还是有点bug,但是一般不会用到右对齐,有时间修理吧。





183017064 发表于 7 小时前

本帖最后由 183017064 于 2025-4-30 09:17 编辑

图示的收费版的。收费没只是为了快乐一下,添加一丢丢成就感。不喜勿喷,出门右转,这种功能的插件论坛多的是。(ps:原作者是免费的,我用大佬的程序做了修改就不应该收费。MD。什么逻辑 。如有违背伦理道德或者侵权那也是我自己的事情)(哪里改名称,刚来时候用qq号。真有人顺着QQ来“交流”)

183017064 发表于 4 天前

本帖最后由 183017064 于 2025-4-28 09:40 编辑

逗亦斗霸 发表于 2025-4-26 13:02
插件很好,功能很强大,但有个小问题不知道是不是只有我有遇到,就是输入命令后,只显示"d"和“s”,不显示 ...
确实有这个问题,原作者也有提到过,一般很少会用到右对齐,所以就没有修复。现在已经修复了不显示的问题,还有一个问题,当表格比较大,文字宽度比较小的时候,不会去调整。现在已经修复了

逗亦斗霸 发表于 4 天前

插件很好,功能很强大,但有个小问题不知道是不是只有我有遇到,就是输入命令后,只显示"d"和“s”,不显示"f"~
另外,建议大佬在标题上加上“文字自适宽度”之类的字样吧,因为搜了一下,论坛上这方面的功能好像很少~
PS:请问付币下载的那个功能有何不同呀?

183017064 发表于 2025-4-7 17:40:22

欢迎大佬指正

jkop 发表于 2025-4-8 00:24:15

简单、好用、适合目前工作所需,谢谢分享~

szhorse 发表于 2025-4-8 23:36:44

本帖最后由 szhorse 于 2025-4-9 10:11 编辑

太感谢了,已经有了表格文字居中,就缺楼主的这个,明早试试我
还需修改一下,不支持天正文字

lxl217114 发表于 2025-4-9 10:19:32

谢谢楼主分享,点赞

心雨飞飞 发表于 2025-4-9 10:24:16

支持一下,谢谢分享。

183017064 发表于 2025-4-9 13:37:39

szhorse 发表于 2025-4-8 23:36
太感谢了,已经有了表格文字居中,就缺楼主的这个,明早试试我
还需修改一下,不支持天正文字

不好意思,我没接触过天正。

技术工作室 发表于 2025-4-10 07:07:21

支持一下,谢谢分享。

paulpipi 发表于 2025-4-10 10:41:44

感谢分享,确实好用
页: [1] 2
查看完整版本: 文字自适宽度-表格内多行的单行文字对齐