明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4185|回复: 27

文字对齐源码

  [复制链接]
发表于 2020-11-1 01:55 | 显示全部楼层 |阅读模式
本帖最后由 whuluqw 于 2020-11-1 02:01 编辑

最近在找文字对齐的程序,在明经看到这个帖还不错。但是原帖代码在文字有转角的时候仍然按照水平方向对齐,而不是沿着文字方向,于是修改一下考虑了文字角度。选择对象前还加了个if语句,如果没选择对象则自动退出。没有动图软件,放两张图片,需要的自行试用。原帖地址:http://bbs.mjtd.com/forum.php?mo ... 085&fromuid=7328399

  1. [code=lisp];;******************************************************
  2. ;;                  文字对齐
  3. ;;******************************************************
  4. ;;源码来源明经社区,最终由whuluqw修改 2020.11.01
  5. (defun c:wzdq (/ ss ent amode obj i ii p px jd jdx jdy ang)
  6.   (setvar "cmdecho" 0)
  7.   ;;-------------------------
  8.   (defun getdxf (ent ii)
  9.     (if (= (type ent) 'ename)
  10.       (setq ent (entget ent))
  11.     )
  12.     (cdr (assoc ii ent))
  13.   )
  14.   ;;-------------------------
  15.   (defun ch_dxf (en num ch / old_num new_num ent)
  16.     (if
  17.       (setq ent     (entget en)
  18.             new_num (cons num ch)
  19.             old_num (assoc num ent)
  20.       )
  21.       (entmod (subst new_num old_num ent))
  22.       (entmod (reverse (cons new_num (reverse ent))))
  23.     )
  24.   )
  25.   ;;-------------------------
  26.   (princ "\n选择要对齐的文字<退出>:")
  27.   (if (setq ss (ssget '((0 . "TEXT"))))
  28.     (progn
  29.       (setq p (getpoint "指定对齐基点:"))
  30.       (setq px (car p)
  31.             py (cadr p)
  32.       );;基点x和y坐标
  33.       (initget "L C R")
  34.       (setq amode (getkword "\n选择对齐方式[左(L)/中(C)/右(R)]<左>:"))
  35.       (if (not amode)
  36.         (setq amode "L")
  37.       )
  38.       (cond
  39.         ((= amode "L")
  40.          (setq ii 10)
  41.          (command "justifytext" ss "" "L")
  42.         )
  43.         ((= amode "C")
  44.          (setq ii 11)
  45.          (command "justifytext" ss "" "C")
  46.         )
  47.         ((= amode "R")
  48.          (setq ii 11)
  49.          (command "justifytext" ss "" "R")
  50.         )
  51.       )
  52.       (setq i 0)
  53.       (while (< i (sslength ss))
  54.         (setq ent (ssname ss i))
  55.         (setq jd (getdxf ent ii))
  56.         (setq jdx (car jd)
  57.               jdy (cadr jd)
  58.         )
  59.         (princ )
  60.         ;;;;;;;;;;;;;;;以下为添加代码 by whuluqw
  61.         (setq ang (getdxf ent 50)) ;;获取文字转角
  62.         (setq dx  (- jdx px)
  63.               dy  (- jdy py)
  64.         ) ;;指定对齐点和文字基点距离
  65.         (setq dx2 (+ (* dx (cos ang)) (* dy (sin ang)))
  66.               dy2 (- (* dy (cos ang)) (* dx (sin ang)))
  67.         ) ;;求移动距离
  68.         (setq newx (- jdx (* dx2 (cos ang)))
  69.               newy (- jdy (* dx2 (sin ang)))
  70.         )
  71.         ;;;;;;;;;;;;;;以上为添加代码
  72.         (setq newjd (list newx newy))
  73.         (apply '(lambda (x) (ch_dxf x ii newjd)) (list ent))
  74.         ;(vl-cmdf "_move" (ssname ss i) "" "non" jd "non" (list px jdy))
  75.         (setq i (+ i 1))
  76.       )
  77.     )
  78.   )
  79.   (princ)
  80. )
[/code]


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2021-2-8 08:00 | 显示全部楼层
那个梁图文字,PKPM下带的那个lsp 程序,可以实现左对齐而不改变文字位置。
但你这个梁图应该有详细点的需求。
比如: 集中标注左对齐, 原位标注,梁下中对齐,梁上,根据支座相对位置确定左或右对齐。
发表于 2020-11-29 12:51 | 显示全部楼层
我有一份图纸,分解后,文字移位了,用CAD的 justifytext 命令选择左对齐,只能在文字当前位置固定
如何能够批量实现文字左对齐,如果有插件,可以付费,联系QQ3395426498

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2021-2-17 22:58 | 显示全部楼层
guankuiwu 发表于 2021-2-8 22:50
不错,如果 整合均布文字间距就更好

调整间距应该有调整间距的程序,我觉得不是每次对齐都要调整间距吧

点评

按需求执行功能  发表于 2022-7-16 14:25
发表于 2020-11-1 10:48 | 显示全部楼层
谢谢楼主分享
发表于 2020-11-1 13:53 | 显示全部楼层
谢谢楼主分享
发表于 2020-11-2 17:15 | 显示全部楼层

谢谢楼主分享
发表于 2020-11-6 09:05 | 显示全部楼层
谢谢楼主分享好程序
发表于 2020-11-7 23:54 | 显示全部楼层
程序还是有点欠缺,如果选中的文字中有多种角度的文字,就不能对齐了,所以除了设置基点外,还应设置对齐的参照角度~谢谢
发表于 2020-11-19 09:11 | 显示全部楼层
感谢楼主分享!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 08:17 , Processed in 0.736877 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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