明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: yrgui

[公告] 批量文本对齐于框格(Lisp完结版)

    [复制链接]
发表于 2011-2-26 15:36 | 显示全部楼层
yrgui 发表于 2011-2-26 10:45
回复 xiaxiang 的帖子

判断对象的框格用的是“boundary”命令,所以执行textalign时需要保证目标对象在当前 ...

原来这样啊,总算是弄明白了
发表于 2011-2-26 22:38 | 显示全部楼层
发表于 2011-3-2 12:14 | 显示全部楼层
可惜没有币,下载不了!
发表于 2011-3-2 12:29 | 显示全部楼层
谢谢分享,下载试用一下!
发表于 2011-3-2 16:25 | 显示全部楼层
强人,做字牌的时候也可以用到。
发表于 2011-3-2 17:32 | 显示全部楼层
这个我以前也编过,免费给大家。
发表于 2011-3-2 17:35 | 显示全部楼层
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;文字居中;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:wzjz ()
(princ "\n******使用命令:wzjz(文字居中)******")
(setq os(getvar "osmode")) (setvar "osmode" 0)
   (setq ss (ssget))
   (setq n (sslength ss))
   (setq k 0 )
   (setq kk 0 )
  
   (while (< k n)
      (setq name (ssname ss k))
     
      (setq a (entget name))
      (setq str (cdr (assoc 0 a)))
     (if (or (= str "TEXT") (= str "MTEXT"))
       (PROGN
   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;获取文字中点
    (setq data (vlax-ename->vla-object name))
    (VLA-GETBOUNDINGBOX data 'minExt 'maxExt)
  (setq
      x (VLAX-SAFEARRAY-GET-ELEMENT minExt 0)
      y (VLAX-SAFEARRAY-GET-ELEMENT minExt 1)
     x1 (VLAX-SAFEARRAY-GET-ELEMENT maxExt 0)
     y1 (VLAX-SAFEARRAY-GET-ELEMENT maxExt 1)
      )
  (setq pt1 (list x y);;;;;;;;;图框块的四个交点
pt2 (list x1 y1);;;;;;;
pt3 (list x y1);;;;;;;;
pt4 (list x1 y);;;;;;;;
)
  (setq zmidx (+ x (/ (- x1 x) 2))
zmidy (+ y (/ (- y1 y) 2))
  )
      (setq zmid (list zmidx zmidy))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;创造文字外框边界   
      (command "-boundary" zmid "")
      (setq bjie (entlast))
  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 获取外框中点
    (setq data (vlax-ename->vla-object bjie))
    (VLA-GETBOUNDINGBOX data 'minExt 'maxExt)
  (setq
      x (VLAX-SAFEARRAY-GET-ELEMENT minExt 0)
      y (VLAX-SAFEARRAY-GET-ELEMENT minExt 1)
     x1 (VLAX-SAFEARRAY-GET-ELEMENT maxExt 0)
     y1 (VLAX-SAFEARRAY-GET-ELEMENT maxExt 1)
      )
  (setq pt1 (list x y);;;;;;;;;图框块的四个交点
pt2 (list x1 y1);;;;;;;
pt3 (list x y1);;;;;;;;
pt4 (list x1 y);;;;;;;;
)  
  (setq kmidx (+ x (/ (- x1 x) 2))
kmidy (+ y (/ (- y1 y) 2))
  )
      (setq kmid (list kmidx kmidy))
    ;;;(princ name)
    (command "erase" bjie "")
   
    (setq wzg (cdr (assoc 40 a)))
    (setq jiad (cdr (assoc 50 a)))
    (setq wznr (cdr (assoc 1 a)))
    (command "_MOVE" name "" zmid kmid)
           
      (setq k (+ k 1))
      (setq kk k)
      ;;;(princ k)
       )
       (progn
       (SETQ kk (+ k 1))
       (SETQ k kk)
       )
     )
    )
  (setq os(getvar "osmode")) (setvar "osmode" 173)
  (princ)
  )
发表于 2011-3-2 17:36 | 显示全部楼层
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;文字居中;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. (defun c:wzjz ()
  3. (princ "\n******使用命令:wzjz(文字居中)******")
  4. (setq os(getvar "osmode")) (setvar "osmode" 0)
  5.    (setq ss (ssget))
  6.    (setq n (sslength ss))
  7.    (setq k 0 )
  8.    (setq kk 0 )
  9.   
  10.    (while (< k n)
  11.       (setq name (ssname ss k))
  12.      
  13.       (setq a (entget name))
  14.       (setq str (cdr (assoc 0 a)))
  15.      (if (or (= str "TEXT") (= str "MTEXT"))
  16.        (PROGN
  17.    
  18. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;获取文字中点
  19.     (setq data (vlax-ename->vla-object name))
  20.     (VLA-GETBOUNDINGBOX data 'minExt 'maxExt)
  21.   (setq
  22.       x (VLAX-SAFEARRAY-GET-ELEMENT minExt 0)
  23.       y (VLAX-SAFEARRAY-GET-ELEMENT minExt 1)
  24.      x1 (VLAX-SAFEARRAY-GET-ELEMENT maxExt 0)
  25.      y1 (VLAX-SAFEARRAY-GET-ELEMENT maxExt 1)
  26.       )
  27.   (setq pt1 (list x y);;;;;;;;;图框块的四个交点
  28.         pt2 (list x1 y1);;;;;;;
  29.         pt3 (list x y1);;;;;;;;
  30.         pt4 (list x1 y);;;;;;;;
  31.         )

  32.   (setq zmidx (+ x (/ (- x1 x) 2))
  33.         zmidy (+ y (/ (- y1 y) 2))       
  34.   )
  35.       (setq zmid (list zmidx zmidy))

  36. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;创造文字外框边界   
  37.       (command "-boundary" zmid "")
  38.       (setq bjie (entlast))
  39.   
  40. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 获取外框中点
  41.     (setq data (vlax-ename->vla-object bjie))
  42.     (VLA-GETBOUNDINGBOX data 'minExt 'maxExt)
  43.   (setq
  44.       x (VLAX-SAFEARRAY-GET-ELEMENT minExt 0)
  45.       y (VLAX-SAFEARRAY-GET-ELEMENT minExt 1)
  46.      x1 (VLAX-SAFEARRAY-GET-ELEMENT maxExt 0)
  47.      y1 (VLAX-SAFEARRAY-GET-ELEMENT maxExt 1)
  48.       )
  49.   (setq pt1 (list x y);;;;;;;;;图框块的四个交点
  50.         pt2 (list x1 y1);;;;;;;
  51.         pt3 (list x y1);;;;;;;;
  52.         pt4 (list x1 y);;;;;;;;
  53.         )  

  54.   (setq kmidx (+ x (/ (- x1 x) 2))
  55.         kmidy (+ y (/ (- y1 y) 2))       
  56.   )
  57.       (setq kmid (list kmidx kmidy))
  58.     ;;;(princ name)
  59.     (command "erase" bjie "")

  60.    
  61.     (setq wzg (cdr (assoc 40 a)))
  62.     (setq jiad (cdr (assoc 50 a)))
  63.     (setq wznr (cdr (assoc 1 a)))
  64.     (command "_MOVE" name "" zmid kmid)
  65.            
  66.       (setq k (+ k 1))
  67.       (setq kk k)
  68.       ;;;(princ k)
  69.        )

  70.        (progn
  71.        (SETQ kk (+ k 1))
  72.        (SETQ k kk)
  73.        )
  74.      )
  75.     )
  76.   (setq os(getvar "osmode")) (setvar "osmode" 173)
  77.   (princ)
  78.   )
 楼主| 发表于 2011-3-2 20:20 | 显示全部楼层
回复 2005lyf 的帖子

如果仅仅是简单的文本居中,早就有人做过,代码也很简单
但那些,包括你这个根本就不实用。

我这个 TextAlign 结合实际需要做的,可以批量居中对齐和居左对齐,并且文本内容更改后也能保持对齐特性
 楼主| 发表于 2011-3-2 20:25 | 显示全部楼层
tjuzkj 发表于 2011-3-2 12:14
可惜没有币,下载不了!

高级会员还没币啊?积分可以换明经币的,难倒 tjuzkj 您不知道
fas程序已经免费放出,注册会员就可以下载的
lsp代码不想随便就放出去了,呵呵,请原谅,
再说了一个明经币也就等值一块人民币,很便宜了
想研究代码的都付得起,嘻嘻
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 19:05 , Processed in 0.209077 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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