明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1800|回复: 16

[讨论] 仿JUSTIFYTEXT

[复制链接]
发表于 2024-4-1 14:56:38 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2024-4-1 16:03 编辑

;;BCAD没有JUSTIFYTEXT,仿AutoCAD写一个

;; [功能] 获取两点的中点坐标
(defun MJ:MIDPOINT (P1 P2)
  (mapcar '(lambda (X Y) (* (+ X Y) 0.5)) P1 P2)
)

  1. (defun C:t1 (/ KEY SS)
  2.   (setq ss (ssget '((0 . "TEXT"))))
  3.   (initget "L A F C M R TL TC TR ML MC MR BL BC BR ")
  4.   (setq        key
  5.          (getkword
  6.            "\n[左对齐(L)/对齐(A)/布满(F)/居中(C)/中间(M)/右对齐(R)/左上(TL)/中上(TC)/右上(TR)/左中(ML)/正中(MC)/右中(MR)/左下(BL)/中下(BC)/右下(BR)] <正中(MC)>:"
  7.          )
  8.   )
  9.   (if (not key)
  10.     (setq key "MC")
  11.   )
  12.   (MY-JUSTIFYTEXT ss key)
  13.   (princ)
  14. )

  15. (DEFUN MY-JUSTIFYTEXT(ss key / E EN N P P10 PTS)
  16.   (repeat (setq n (sslength ss))
  17.     (setq e (ssname ss (setq n (1- n))))
  18.     (setq en (entget e))
  19.     (setq p10(cdr (assoc 10 en)))
  20.     (setq pts (textbox en))
  21.     (setq p (apply 'MJ:MIDPOINT pts))
  22.     (cond
  23.       ((= key "L");左对齐
  24.        (entmod (append en
  25.                        (list (cons 10 p10)
  26.                              '(71 . 0)
  27.                              '(72 . 0)
  28.                              '(11 0 0)
  29.                              '(73 . 0)
  30.                        )
  31.                )
  32.        )
  33.       )
  34.       ((= key "A");/对齐
  35.        (entmod (append en
  36.                          (list (cons 10 p10)
  37.                                '(71 . 0)
  38.                                '(72 . 3)
  39.                                (list 11 (+ (car p10) (caadr pts)) (cadr p10))
  40.                                '(73 . 0)
  41.                          )
  42.                  )
  43.          )
  44.       )
  45.       ((= key "F");/布满
  46.        (entmod (append en
  47.                          (list (cons 10 p10)
  48.                                '(71 . 0)
  49.                                '(72 . 5)
  50.                                (list 11 (+ (car p10) (caadr pts)) (cadr p10))
  51.                                '(73 . 0)
  52.                          )
  53.                  )
  54.          )
  55.       )
  56.       ((= key "C");居中
  57.        (entmod (append en
  58.                          (list (cons 10 p10)
  59.                                '(71 . 0)
  60.                                '(72 . 1)
  61.                                (list 11 (+ (car p10) (car p)) (cadr p10))
  62.                                '(73 . 0)
  63.                          )
  64.                  )
  65.          )
  66.       )
  67.       ((= key "M");/中间
  68.        (entmod (append en
  69.                        (list (cons 10 p10)
  70.                              '(71 . 0)
  71.                              '(72 . 4)
  72.                              (cons 11 (mapcar '+ p p10))
  73.                              '(73 . 0)
  74.                        )
  75.                )
  76.        )
  77.       )
  78.       ((= key "R");右对齐(R)
  79.        (entmod (append en
  80.                          (list (cons 10 p10)
  81.                                '(71 . 0)
  82.                                '(72 . 2)
  83.                                (list 11 (+ (car p10) (caadr pts)) (cadr p10))
  84.                                '(73 . 0)
  85.                          )
  86.                  )
  87.          )
  88.       )
  89.       ((= key "TL");/左上
  90.        (entmod (append en
  91.                        (list (cons 10 p10)
  92.                              '(71 . 0)
  93.                              '(72 . 0)
  94.                              (list 11 (car p10) (+ (cadr p10) (cadadr pts)))
  95.                              '(73 . 3)
  96.                        )
  97.                )
  98.        )
  99.       )
  100.       ((= key "TC");/中上
  101.        (entmod (append en
  102.                        (list (cons 10 p10)
  103.                              '(71 . 0)
  104.                              '(72 . 1)
  105.                              (list 11 (+ (car p10) (car p)) (+ (cadr p10) (cadadr pts)))
  106.                              '(73 . 3)
  107.                        )
  108.                )
  109.        )
  110.       )
  111.       ((= key "TR");/右上
  112.        (entmod (append en
  113.                        (list (cons 10 p10)
  114.                              '(71 . 0)
  115.                              '(72 . 2)
  116.                              (list 11 (+ (car p10) (caadr pts)) (+ (cadr p10) (cadadr pts)))
  117.                              '(73 . 3)
  118.                        )
  119.                )
  120.        )
  121.       )
  122.       ((= key "ML");/左中
  123.        (entmod (append en
  124.                        (list (cons 10 p10)
  125.                              '(71 . 0)
  126.                              '(72 . 0)
  127.                              (list 11 (car p10) (+ (cadr p10) (cadr p)))
  128.                              '(73 . 2)
  129.                        )
  130.                )
  131.        )
  132.       )
  133.       ((= key "MC");/正中
  134.        (entmod (append en
  135.                        (list (cons 10 p10)
  136.                              '(71 . 0)
  137.                              '(72 . 1)
  138.                              (cons 11 (mapcar '+ p10 p))
  139.                              '(73 . 2)
  140.                        )
  141.                )
  142.        )
  143.       )
  144.       ((= key "MR");/右中
  145.        (entmod (append en
  146.                        (list (cons 10 p10)
  147.                              '(71 . 0)
  148.                              '(72 . 2)
  149.                              (list 11 (+ (car p10) (caadr pts)) (+ (cadr p10) (cadr p)))
  150.                              '(73 . 2)
  151.                        )
  152.                )
  153.        )
  154.       )
  155.       ((= key "BL");/左下
  156.        (entmod (append en
  157.                        (list (cons 10 p10)
  158.                              '(71 . 0)
  159.                              '(72 . 0)
  160.                              (cons 11 p10)
  161.                              '(73 . 1)
  162.                        )
  163.                )
  164.        )
  165.       )
  166.       ((= key "BC");/中下
  167.        (entmod (append en
  168.                        (list (cons 10 p10)
  169.                              '(71 . 0)
  170.                              '(72 . 1)
  171.                              (list 11 (+ (car p10) (car p)) (cadr p10))
  172.                              '(73 . 1)
  173.                        )
  174.                )
  175.        )
  176.       )
  177.       ((= key "BR");右下
  178.        (entmod (append en
  179.                        (list (cons 10 p10)
  180.                              '(71 . 0)
  181.                              '(72 . 2)
  182.                              (list 11 (+ (car p10) (caadr pts)) (cadr p10))
  183.                              '(73 . 1)
  184.                        )
  185.                )
  186.        )
  187.       )
  188.     )
  189.   )
  190. )


评分

参与人数 6明经币 +6 金钱 +10 收起 理由
Bao_lai + 1 赞一个!
hubeiwdlue + 1 很给力!
zhoupeng220 + 1 很给力!
tigcat + 1 + 10 很给力!
ssyfeng + 1 赞一个!
kucha007 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2024-4-2 16:19:18 | 显示全部楼层
根据老迈建议,文字修改后移回原来的基点,这样看起来文字 就不动了
;;BCAD没有JUSTIFYTEXT,仿autocad写一个
(defun C:JUSTIFYTEXT (/ E KEY N OBJ P1 P2 SS)
  (setq ss (ssget '((0 . "TEXT"))))
  (initget "L A F C M R TL TC TR ML MC MR BL BC BR ")
  (setq        key
         (getkword
           "\n[左对齐(L)/对齐(A)/布满(F)/居中(C)/中间(M)/右对齐(R)/左上(TL)/中上(TC)/右上(TR)/左中(ML)/正中(MC)/右中(MR)/左下(BL)/中下(BC)/右下(BR)] <正中(MC)>:"
         )
  )
  (if (not key)
    (setq key "MC")
  )
  (repeat (setq n (sslength ss))
    (setq e (ssname ss (setq n (1- n))))
    (setq obj (vlax-ename->vla-object e))
    ;;(vla-getboundingbox e 'bp 'up)
    ;;(setq p1 (Entity:Box e))
    (setq p1 (vlax-get obj 'InsertionPoint))
    (MY-JUSTIFYTEXT e key)
    ;;(setq p2 (Entity:Box e))
    (setq p2 (vlax-get obj 'InsertionPoint))
    (vla-move obj (vlax-3D-point p2) (vlax-3D-point p1))
  )
  (princ)
)
;;bcad不能像acad增加表来更新,必须用subst
(DEFUN MY-JUSTIFYTEXT (e key / EN P P10 PTS)
  (setq en (entget e))
  (setq p10 (cdr (assoc 10 en)))
  (setq pts (textbox en))
  (setq p (apply 'MJ:MIDPOINT pts))
  (cond
    ((= key "L")                        ;左对齐
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 0)(assoc 72 en) en))
     (setq en (subst '(11 0 0)(assoc 11 en) en))
     (entmod (subst '(73 . 0)(assoc 73 en) en))     
    )
    ((= key "A")                        ;/对齐
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 3)(assoc 72 en) en))
     (setq en (subst (list 11 (+ (car p10) (caadr pts)) (cadr p10))(assoc 11 en) en))
     (entmod (subst '(73 . 0)(assoc 73 en) en))
    )
    ((= key "F")                        ;/布满
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 5)(assoc 72 en) en))
     (setq en (subst (list 11 (+ (car p10) (caadr pts)) (cadr p10))(assoc 11 en) en))
     (entmod (subst '(73 . 0)(assoc 73 en) en))
    )
    ((= key "C")                        ;居中
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 1)(assoc 72 en) en))
     (setq en (subst (list 11 (+ (car p10) (car p)) (cadr p10))(assoc 11 en) en))
     (entmod (subst '(73 . 0)(assoc 73 en) en))
    )
    ((= key "M")                        ;/中间
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 4)(assoc 72 en) en))
     (setq en (subst (cons 11 (mapcar '+ p p10))(assoc 11 en) en))
     (entmod (subst '(73 . 0)(assoc 73 en) en))     
    )
    ((= key "R")                        ;右对齐(R)
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 2)(assoc 72 en) en))
     (setq en (subst (list 11 (+ (car p10) (caadr pts)) (cadr p10))(assoc 11 en) en))
     (entmod (subst '(73 . 0)(assoc 73 en) en))
    )
    ((= key "TL")                        ;/左上
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 0)(assoc 72 en) en))
     (setq en (subst (list 11 (car p10) (+ (cadr p10) (cadadr pts)))(assoc 11 en) en))
     (entmod (subst '(73 . 3)(assoc 73 en) en))
    )
    ((= key "TC")                        ;/中上
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 1)(assoc 72 en) en))
     (setq en (subst (list 11 (+ (car p10) (car p)) (+ (cadr p10) (cadadr pts)))(assoc 11 en) en))
     (entmod (subst '(73 . 3)(assoc 73 en) en))
    )
    ((= key "TR")                        ;/右上
      (setq en (subst (cons 10 p10) (assoc 10 en) en))
      (setq en (subst '(71 . 0) (assoc 71 en) en))
      (setq en (subst '(72 . 2) (assoc 72 en) en))
      (setq en (subst (list 11
                            (+ (car p10) (caadr pts))
                            (+ (cadr p10) (cadadr pts))
                      )
                      (assoc 11 en)
                      en
               )
      )
      (entmod (subst '(73 . 3) (assoc 73 en) en))
    )
    ((= key "ML")                        ;/左中
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 0)(assoc 72 en) en))
     (setq en (subst (list 11 (car p10) (+ (cadr p10) (cadr p)))(assoc 11 en) en))
     (entmod (subst '(73 . 2)(assoc 73 en) en))
    )
    ((= key "MC")                        ;/正中
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 1)(assoc 72 en) en))
     (setq en (subst (cons 11 (mapcar '+ p10 p))(assoc 11 en) en))
     (entmod (subst '(73 . 2)(assoc 73 en) en))
    )
    ((= key "MR")                        ;/右中
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 2)(assoc 72 en) en))
     (setq en (subst (list 11 (+ (car p10) (caadr pts)) (+ (cadr p10) (cadr p)))(assoc 11 en) en))
     (entmod (subst '(73 . 2)(assoc 73 en) en))
    )
    ((= key "BL")                        ;/左下
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 0)(assoc 72 en) en))
     (setq en (subst (cons 11 p10)(assoc 11 en) en))
     (entmod (subst '(73 . 1)(assoc 73 en) en))
    )
    ((= key "BC")                        ;/中下
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 1)(assoc 72 en) en))
     (setq en (subst (list 11 (+ (car p10) (car p)) (cadr p10))(assoc 11 en) en))
     (entmod (subst '(73 . 1)(assoc 73 en) en))
    )
    ((= key "BR")                        ;右下
     (setq en (subst (cons 10 p10)(assoc 10 en) en))
     (setq en (subst '(71 . 0)(assoc 71 en) en))
     (setq en (subst '(72 . 2)(assoc 72 en) en))
     (setq en (subst (list 11 (+ (car p10) (caadr pts)) (cadr p10))(assoc 11 en) en))
     (entmod (subst '(73 . 1)(assoc 73 en) en))     
    )
  )
)

点评

赞  发表于 2024-4-7 20:01
发表于 2024-5-9 10:29:05 | 显示全部楼层
自贡黄明儒 发表于 2024-4-2 16:19
根据老迈建议,文字修改后移回原来的基点,这样看起来文字 就不动了
;;BCAD没有JUSTIFYTEXT,仿autocad写 ...

大师,为什么会报错呀?
AOTU cad2014
错误: no function definition: nil

点评

这个这个。。。我不知道呀  发表于 2024-5-9 10:56
发表于 2024-5-9 10:45:18 | 显示全部楼层
自贡黄明儒 发表于 2024-4-2 16:19
根据老迈建议,文字修改后移回原来的基点,这样看起来文字 就不动了
;;BCAD没有JUSTIFYTEXT,仿autocad写 ...

为什么我在选择对齐方式后会出错?
发表于 2024-4-1 17:13:59 | 显示全部楼层
没有JUSTIFYTEXT的年代,写过这个;后来有了JUSTIFYTEXT,显然就用新的JUSTIFYTEXT了。
发表于 2024-4-1 19:38:10 来自手机 | 显示全部楼层
这个文字位置会变么?

点评

会变的,可能还要处理一下  发表于 2024-4-2 06:59
发表于 2024-4-1 20:03:03 | 显示全部楼层
(command)调用转换为(command-s)运行不了啊大师

点评

vl-cmdf  发表于 2024-4-2 06:58
发表于 2024-4-1 23:32:56 | 显示全部楼层
黄大师产量高,质量好,乐于分享,太感谢了.
发表于 2024-4-3 21:32:33 来自手机 | 显示全部楼层
直接文字选中,在属性框里改不香吗
发表于 2024-4-3 23:52:43 | 显示全部楼层
caoyongjun 发表于 2024-4-3 21:32
直接文字选中,在属性框里改不香吗

不香,不符合左手键盘,右手鼠标的图农。
发表于 2024-4-4 14:52:53 | 显示全部楼层
做个面板对话框会更方便使用
发表于 2024-4-6 01:00:17 | 显示全部楼层
本帖最后由 hsiga123 于 2024-4-6 01:07 编辑

BCAD是哪款CAD啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 06:44 , Processed in 0.163295 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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