明经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 | 显示全部楼层
[code="lisp] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;文字居中;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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)
  )[/code]
 楼主| 发表于 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-2017 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2018-1-23 06:09 , Processed in 0.213334 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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