gyxzzza 发表于 2003-8-7 21:51:00

一个小程序:对齐文字,有时我们需要对不同区域内的文字排列整齐以下程序对你有帮助

一个小程序:对齐文字,有时我们需要对不同区域内的文字排列整齐以下程序对你有帮助。加载后命令行输入dq
(defun C:dq ()
(setq oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq oldblip (getvar "blipmode"))
(setvar "blipmode" 0)
(setq oldsnap (getvar "osmode"))
(setvar "osmode" 0)

(setq text (ssget))
(initget "H L")
(setq a (getkword "行对齐(H)/列队齐(L)?"))
(if (= a nil)
    (setq a "l"))
(SETQ a (strcase a T))                ;提示用户建立选择集text
(setq n 0)                                ;设置计数器初始值
(setq pointend0 (getpoint "对齐点:"))
(repeat (sslength text)                ;建立循环长度为所选对象的个数
    (setq name (ssname text n))                ;获取选择集中第n个对象的图元名
    (setq entl (entget name))                ;设置 entl 为最新图元的数据关联表
    (setq ct 9)                                ;设置nth函数参数
    ;(setq pointstar (nth ct entl))        ;获取文字图元的第9个属性---坐标属性
(setq pointstar (nth ct entl))
    (if        (= a "l")
      (progn
        (setq pointentl (list (cadr pointstar) (caddr pointstar)))
                                        ;建立其点表,并将其赋值给pointel1
        (setq pointend (list (car pointend0) (caddr pointstar)))
                                        ;设置对齐点的坐标
        )
      (progn
        (setq pointentl (list (cadr pointstar) (caddr pointstar)))
                                        ;建立其点表,并将其赋值给pointel1
        (setq pointend (list (cadr pointstar) (cadr pointend0)))
                                        ;设置对齐点的坐标
        )
      )
    (command "move" name "" pointentl pointend)
                                        ;)
    (setq n (1+ n))
    )
(setvar "cmdecho" oldcmd)
(setvar "blipmode" oldblip)
(setvar "osmode" oldsnap)

(princ)                                ;静默退出

)

hpy 发表于 2003-8-8 10:59:00

程序不错!功能还有待改进!假如要对齐的文本包括TEXT文本、MTEXT文本或者是与尺寸线、箭头分开的尺寸文本,该程序不能实现列对齐或行对齐。

s678z 发表于 2013-6-8 10:54:37

方便,整理以前的人写乱糟糟的技术要求有办法了
页: [1]
查看完整版本: 一个小程序:对齐文字,有时我们需要对不同区域内的文字排列整齐以下程序对你有帮助