明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 531|回复: 6

[提问] 各位大侠帮忙看下这个对齐的代码,他现在的顺序是先Y方向,然后X方向,能不能改一...

[复制链接]
发表于 2024-12-19 17:50:59 | 显示全部楼层 |阅读模式
各位大侠帮忙看下这个对齐的代码,他现在的顺序是先Y方向,然后X方向,能不能改一下,先X方向,然后Y方向

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2024-12-19 21:50:32 | 显示全部楼层
修改了,你看看

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2024-12-19 22:02:46 | 显示全部楼层

可惜带转角的文字没办法实现转角对齐,还是x y常规那样对齐
回复 支持 反对

使用道具 举报

发表于 2024-12-19 22:05:22 | 显示全部楼层
  1. ;; 更改文字为左对齐
  2. (defun Just-Left (ent) (entmod (subst (cons 72 0) (assoc 72 ent) ent)))

  3. ;; 文字横向对齐
  4. (defun dq-hor (ss p0 dd / i boxpt lst d0 s1)
  5.   (setq i -1)
  6.   (repeat (sslength ss)
  7.     (setq s1 (ssname ss (setq i (1+ i))))
  8.     (Just-Left (entget s1)) ;文字改为左对齐
  9.     (setq boxpt (textbox (entget s1))
  10.           lst   (cons (list
  11.                         s1
  12.                         (cdr (assoc 10 (entget s1)))
  13.                         (1+ (fix (- (nth 0 (nth 1 boxpt)) (nth 0 (nth 0 boxpt)))))
  14.                       )
  15.                       lst
  16.                 ) ;构建((图元名1 对齐点1 字长1) (图元名2 对齐点2 字长2)...)列表
  17.           lst   (vl-sort lst '(lambda (a b) (< (caadr a) (caadr b))));x向从左到右排序
  18.     )
  19.   )
  20.   (setq d0 0)
  21.   (foreach a lst
  22.     (if (or (= dd nil)(= dd 0))
  23.       (vla-move (vlax-ename->vla-object (nth 0 a))
  24.                 (vlax-3d-point (nth 1 a))
  25.                 (vlax-3d-point
  26.                   (list (car (nth 1 a)) (cadr p0) (caddr (nth 1 a)))
  27.                 )
  28.       )
  29.       (progn
  30.         (vla-move (vlax-ename->vla-object (nth 0 a))
  31.                   (vlax-3d-point (nth 1 a))
  32.                   (vlax-3d-point
  33.                     (list (+ (car p0) d0) (cadr p0) (caddr p0))
  34.                   )
  35.         )
  36.         (setq d0 (+ d0 (nth 2 a) dd))
  37.       )
  38.     )
  39.   )
  40.   (princ)
  41. )


  42. ;; 文字纵向对齐
  43. (defun dq-ver (ss p0 dd / i boxpt lst d0 s1)
  44.   (setq i -1)
  45.   (repeat (sslength ss)
  46.     (setq s1 (ssname ss (setq i (1+ i))))
  47.     (Just-Left (entget s1)) ;文字改为左对齐
  48.     (setq boxpt (textbox (entget s1))
  49.           lst   (cons (list
  50.                         s1
  51.                         (cdr (assoc 10 (entget s1)))
  52.                         (cdr (assoc 40 (entget s1)))
  53.                       )
  54.                       lst
  55.                 ) ;构建((图元名1 对齐点1 字高1) (图元名2 对齐点2 字高2)...)列表
  56.           lst   (vl-sort lst '(lambda (a b) (> (cadadr a) (cadadr b))));y向从上到下排序
  57.     )
  58.   )
  59.   (setq d0 0)
  60.   (foreach a lst
  61.     (if (or (= dd nil)(= dd 0))
  62.       (vla-move (vlax-ename->vla-object (nth 0 a))
  63.                 (vlax-3d-point (nth 1 a))
  64.                 (vlax-3d-point
  65.                   (list (car p0) (cadr (nth 1 a)) (caddr (nth 1 a)))
  66.                 )
  67.       )
  68.       (progn
  69.         (vla-move (vlax-ename->vla-object (nth 0 a))
  70.                   (vlax-3d-point (nth 1 a))
  71.                   (vlax-3d-point
  72.                     (list (car p0) (- (cadr p0) d0) (caddr p0))
  73.                   )
  74.         )
  75.         (setq d0 (+ d0 dd))
  76.       )
  77.     )
  78.   )
  79. )

  80. ;; 执行函数
  81. (defun c:dq ()
  82.   (or kw (setq kw "2"))
  83.   (or dd (setq dd 450))
  84.   (setq kw (Ukword 1 "1 2" "[竖向对齐(1)/横向对齐(2)]" kw)
  85.         dd (Udist 1 "" "间距<输入或鼠标直接量取>" dd nil)
  86.   )
  87.   (while (and (setq ss (ssget '((0 . "TEXT"))))
  88.               (setq p0 (getpoint "\n指定对齐点: "))
  89.          )
  90.     (if (= kw "1")
  91.       (dq-ver ss p0 dd)
  92.       (dq-hor ss p0 dd)
  93.     )
  94.   )
  95.   (princ)
  96. )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-20 09:17:05 | 显示全部楼层

大哥顺序还是不对的
回复 支持 反对

使用道具 举报

发表于 2024-12-20 09:26:34 | 显示全部楼层
原代码这两句改全一下。
  1.   (initget "s h")
  2.   (setq m (getkword "[竖向对齐(s)/横向对齐(h)]"))


你的原图纸先h横向对齐,再s竖向对齐就可以达到目的了。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-21 12:05:18 | 显示全部楼层
咏君修改;---------------------------------------------------------------------;
;已完成,勿动(-_-!)
;根据参数返回点列表按某一坐标轴排序,ordor=1为降序,=0为升序
(defun pzj:sort(ptlst axis ordor / tmp)
  (setq tmp
    (cond
      ((= axis "x") (vl-sort ptlst '(lambda(a b) (< (car a) (car b)))))
      ((= axis "y") (vl-sort ptlst '(lambda(a b) (< (cadr a) (cadr b)))))
      ((= axis "z") (vl-sort ptlst '(lambda(a b) (< (caddr a) (caddr b)))))
    )
  )
  (if (= ordor 1)
    (reverse tmp)
    tmp
  )
)
;---------------------------------------------------------------------;
;更改文字为左对齐
(defun pzj:chalignCur(ent)
  (if (not (= (assoc 72 ent) 0))
    (setq ent (entmod (subst (cons 72 0) (assoc 72 ent) ent)))
  )
  (princ)
)
;---------------------------------------------------------------------;
;文字横向对齐
(defun pzj:dqth(ss dqpt space / i boxpt lst sph)
  (setq i 0)
  (repeat (sslength ss)
    (pzj:chalignCur (entget (ssname ss i)));文字改为左对齐
    (setq
      boxpt (textbox (entget (ssname ss i)))
      lst (cons (list
      (ssname ss i)
      (cdr (assoc 10 (entget (ssname ss i))))
      (1+ (fix (- (nth 0 (nth 1 boxpt)) (nth 0 (nth 0 boxpt)))))
    )
      lst
    );构建((图元名1 对齐点1 字长1) (图元名2 对齐点2 字长2)...)列表
      lst (vl-sort lst '(lambda(a b) (< (nth 0 (nth 1 a)) (nth 0 (nth 1 b)))));((图元名1 对齐点1 字长1) (图元名2 对齐点2 字长2)...)列表按x轴排序,升序
    )
    (setq i (1+ i))
  )
  (setq sph 0)
  (foreach each lst
    (if (= space nil)
      (vla-move (vlax-ename->vla-object (nth 0 each)) (vlax-3d-point (nth 1 each)) (vlax-3d-point (list (car (nth 1 each)) (cadr dqpt) (caddr (nth 1 each)))))
      (progn
        (vla-move (vlax-ename->vla-object (nth 0 each)) (vlax-3d-point (nth 1 each)) (vlax-3d-point (list (+ (car dqpt) sph) (cadr dqpt) (caddr dqpt))))
  (setq sph (+ (+ (nth 2 each) space) sph))
      )
    )
  )
  (princ)
)
;---------------------------------------------------------------------;
;文字纵向对齐
(defun pzj:dqts(ss dqpt space / i boxpt lst spz)
  (setq i 0)
  (repeat (sslength ss)
    (pzj:chalignCur (entget (ssname ss i)));文字改为左对齐
    (setq
      boxpt (textbox (entget (ssname ss i)))
      lst (cons (list
      (ssname ss i)
      (cdr (assoc 10 (entget (ssname ss i))))
      (cdr (assoc 40 (entget (ssname ss i))))
    )
      lst
    );构建((图元名1 对齐点1 字高1) (图元名2 对齐点2 字高2)...)列表
                        lst (vl-sort lst '(lambda(a b) (if (equal (nth 0 (nth 1 a)) (nth 0 (nth 1 b))100)(> (nth 1 (nth 1 a)) (nth 1 (nth 1 b)))(< (nth 0 (nth 1 a)) (nth 0 (nth 1 b))))));先按x轴小到大排序容差调整这里(nth 0 (nth 1 b))100)
                        ;lst (mapcar '(lambda(x)(if))lst)
      ;lst (vl-sort lst '(lambda(a b) (> (nth 1 (nth 1 a)) (nth 1 (nth 1 b)))));((图元名1 对齐点1 字高1) (图元名2 对齐点2 字高2)...)列表按轴排序,升序(x轴m=0、y轴m=1、z轴m=2)
    )
    (setq i (1+ i))
  )
  
  (setq spz 0)
  (foreach each lst
    (if (= space nil)
      (vla-move (vlax-ename->vla-object (nth 0 each)) (vlax-3d-point (nth 1 each)) (vlax-3d-point (list (car dqpt) (cadr (nth 1 each)) (caddr (nth 1 each)))))
      (progn
        (vla-move (vlax-ename->vla-object (nth 0 each)) (vlax-3d-point (nth 1 each)) (vlax-3d-point (list (car dqpt) (- (cadr dqpt) spz) (caddr dqpt))))
        (setq spz (+ (+ (nth 2 each) space) spz))
      )
    )
  )
)
;---------------------------------------------------------------------;
;执行函数
(vl-load-com)
(defun c:dq (/ m)
  (initget "s h")
  (setq m (getkword "[竖向对齐(s)/横向对齐(h)]"))
  (if (= m "s")
    (pzj:dqth (ssget "" '((0 . "TEXT"))) (getpoint "\n指定对齐点:") (getreal"\n指定间距:"))
                (pzj:dqts (ssget "" '((0 . "TEXT"))) (getpoint "\n指定对齐点:") (getreal"\n指定间距:"))
  )
  (princ)
)
;---------------------------------------------------------------------;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-22 22:03 , Processed in 0.217810 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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