找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2939|回复: 31

[LISP函数]:我编了一个文字对齐的程序,大家看看!

[复制链接]
发表于 2003-5-7 17:22:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
希望起到抛砖引玉的效果,那位再更新后,请上传,供大家分享。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-5-7 21:05:18 | 显示全部楼层
既然没有设下载收币,不介意我把你的程序贴出来吧?

  1. (progn
  2. (setq ifhv nil)
  3. (setq soname nil)
  4. (setq lsoname nil)
  5. (setq xyzsoname nil)
  6. (setq ysoname nil)
  7. (setq xsoname nil)
  8. (setq fx nil fy nil fz nil)
  9. (setq fysoname nil)
  10. (setq fxyzsoname nil flsoname nil)
  11. (setq fsname nil)
  12. (setq lfxyz nil)
  13. (setq flsoname nil)
  14. (setq sobjectx nil)

  15. (setvar "cmdecho" 0)
  16. );;end progn
  17. (defun C:tt ( )

  18. (setq ifhv (getstring "please input Horiz or Vertical (H/<V>):"))

  19. (if (or (= ifhv "h") (= ifhv "H"))
  20. (progn
  21. (prompt "please select a soure text for align:")
  22. (setq sobjectx (ssget))
  23. (setq soname (ssname sobjectx 0))
  24. (setq lsoname (entget soname))
  25. (setq xyzsoname (assoc '10 lsoname))
  26. (setq ysoname (caddr xyzsoname))

  27. ;;(print ysoname)
  28. ;;(print soname)

  29. (prompt "please select aligned text:")
  30. (setq i 0)  
  31. (setq ent (ssget '((0 . "TEXT"))))
  32. (setq l (sslength ent))
  33. (while (< i l)   
  34. (progn
  35. (setq fsname (ssname ent i))
  36.   (setq flsoname (entget fsname))
  37.   (setq fxyzsoname (assoc '10 flsoname))
  38.   (setq fx (cadr fxyzsoname))
  39.   (setq fz (caddr fxyzsoname))
  40.   (setq lfxyz (list 10 fx ysoname fz))
  41.   (setq flsoname (subst lfxyz (assoc 10 flsoname) flsoname))
  42. ;;(print fx)
  43. ;;(print fz)
  44. ;;(print lfxyz)
  45. ;; (print flsoname)
  46.   (entmod flsoname)
  47.   (entupd fsname)
  48.   (setq i (1+ i))
  49. )
  50. )
  51. (setq i nil)
  52. (setq ent nil)
  53. (setq l nil)
  54. (princ)  ; Exit quietly.

  55. );end progn
  56. );end if

  57. ;;;;;;;;;;;;;;;;;;;;;;;;X align
  58. (progn

  59. (prompt "please select a soure text for align:")
  60. (setq sobjectx (ssget))
  61. (setq soname (ssname sobjectx 0))
  62. (setq lsoname (entget soname))
  63. (setq xyzsoname (assoc '10 lsoname))
  64. (setq xsoname (cadr xyzsoname))

  65. (prompt "please select aligned text:")
  66. (setq i 0)  
  67. (setq ent (ssget '((0 . "TEXT"))))
  68. (setq l (sslength ent))
  69. (while (< i l)   
  70. (progn
  71. (setq fsname (ssname ent i))
  72.   (setq flsoname (entget fsname))
  73.   (setq fxyzsoname (assoc '10 flsoname))
  74.   (setq fy (caddr fxyzsoname))
  75.   (setq fz (cadddr fxyzsoname))
  76.   (setq lfxyz (list 10 xsoname fy fz))
  77.   (setq flsoname (subst lfxyz (assoc 10 flsoname) flsoname))
  78. ;;(print fx)
  79. ;;(print fz)
  80. ;;(print lfxyz)
  81. ;; (print flsoname)
  82.   (entmod flsoname)
  83.   (entupd fsname)
  84.   (setq i (1+ i))
  85. )
  86. )
  87. (setq i nil)
  88. (setq ent nil)
  89. (setq l nil)
  90. (princ)  ; Exit quietly.



  91. );end progn




  92. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-8 09:16:31 | 显示全部楼层
可是对于有些文字还是会出现问题阿!那位老兄再辛苦,完善一下。
斑竹阿,干吗贴出来阿,很寒颤阿。让我很害怕。别人会扔砖头的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-8 15:27:14 | 显示全部楼层
thank!
还有,能不能在选择源(对齐)文本的时候,自动就选择一个物体,不用回车了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-8 17:21:39 | 显示全部楼层
tt--运行文字对齐程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-9 21:32:58 | 显示全部楼层
看起来似乎很有用  我具体用一下 看看怎么样
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-10 10:40:47 | 显示全部楼层
很好用,谢谢你们。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-10 11:43:15 | 显示全部楼层
好东西 谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-16 01:38:57 | 显示全部楼层
好东西啊,我想要
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-16 07:55:39 | 显示全部楼层
试试签名栏下的“文本编辑套件”……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-30 16:22:30 | 显示全部楼层
请哪位兄弟提供一个调整文字行间距的lisp源代码,非常感谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-30 19:49:25 | 显示全部楼层
7楼楼主说:        
请哪位兄弟提供一个调整文字行间距的lisp源代码,非常感谢!


借用网上朋友的程序了
国内的(更实用一些)
[php]
;平均分布各行文字
;作者:吴殷飞
;作者单位:安庆市水利水电规划设计院
;禁止以商业为目的在网上传播
;如有疑问,请联系aqsssjy@mail.hf.ah.cn

(defun c:ath()

(setq a (ssget (list (cons 0 "text"))))
(setq n (sslength a))
(setq all nil)
(setq m 0)
(while (< m n)
  (setq all (append all (list (entget (ssname a m)))))
  (setq m (1+ m))
)


(setq l 0)
(setq m 1)
(while (< l n)
  (setq b (nth l all))
  (while (< m n)
    (setq c (nth m all))
    (if (> (nth 2 (assoc '10 c)) (nth 2 (assoc '10 b)))
      (progn
      (setq all (subst 'aa (nth l all) all))
      (setq all (subst 'bb (nth m all) all))
      (setq all (subst c 'aa all))
      (setq all (subst b 'bb all))
      (setq b c)
      )
     )
    (setq m (1+ m))
  )
  (setq l (1+ l))
  (setq m (1+ l))
)

(setq a (nth 0 all))
(setq b (nth (1- n) all))
(setq detay (/ (- (nth 2 (assoc '10 a)) (nth 2 (assoc '10 b))) (1- n)))
(setq y0 (nth 2 (assoc '10 a)))

(setq m 0)
(while (< m n)
  (setq b (nth m all))
  (setq x (nth 1 (assoc '10 b)))
  (setq y (- y0 (* m detay)))
  (setq z (nth 3 (assoc '10 b)))
  (setq xyz_new (list '10 x y z))
  (setq b (subst xyz_new (assoc '10 b) b))
  (entmod b)
  ;(entupd b)
  (setq m (1+ m))
)

)

[/php]

国外的
[php]
  ; Text Reshuffler - moves text vertically so that it is evenly
  ; spaced between two picked points - the top of the top line
  ; and the bottom of the bottom one.
  ; By SW for Rocket Software  Copyright 1991
(DEFUN C:SHUX ( / ss xa xb num incr txa txb nna enn nn yy ord)
  (setvar "cmdecho" 0)
  (command "undo" "mark")
  (prompt "Pick text strings: ")
  (setq ss (ssget)
        xa (getpoint "\nPick top line: ")
        num 0
        xb (getpoint xa "\nAnd bottom line: "))
;---------------Remove non-text entities from ss------------------
  (while (setq txb (ssname ss num))
         (if (= (cdr (assoc 0 (entget txb))) "TEXT")
             (setq num (1+ num))
             (ssdel txb ss)))
  (setq num 0)
;-----------------------------------------------------------------
  (setq ssl (sslength ss))
  (if (> ssl 1) (progn
  (setq ht (- (cadr xa) (cadr xb)))                   ; total height
  (setq txh (cdr (assoc 40 (entget (ssname ss 0)))))  ; text height
  (setq txht (* ssl txh))                             ; total txt ht
  (setq ht (- ht txht))                               ; difference
  (setq ht (/ ht (1- ssl)))                           ; spaces
  (setq incr (+ txh ht))
         (setq xa (list (car xa) (- (cadr xa) txh)))  
  (while (setq txa (ssname ss 0))
         (setq enn 1)
         (setq nna (entget txa))
         (setq ya (cdr (assoc 10 nna)))

;---------------See if next entity in ss is highest on screen-------
         (while (setq txb (ssname ss enn))
                (setq yb (cdr (assoc 10 (entget txb))))
                (if (> (cadr yb) (cadr ya))
                    (progn
                          (setq txa txb)
                          (setq nna (entget txa))
                          (setq ya (cdr (assoc 10 nna)))))
                (setq enn (1+ enn)))
         (setq num (1+ num))

;-------------------------Get registration type-----------------------
        (if (or (= (cdr (assoc 72 nna)) 2)
                 (= (cdr (assoc 72 nna)) 4)
                 (= (cdr (assoc 72 nna)) 1))
             (progn
                   (if (= (cdr (assoc 72 nna)) 4)
                       (progn
                             (setq yy (cdr (assoc 11 nna)))
                             (setq nn (list (car yy) (+ (/ txh 2)(cadr xa))))
                             (command "move" txa "" yy nn))
                       (progn
                             (setq yy (cdr (assoc 11 nna)))
                             (setq nn (list (car yy) (cadr xa)))
                             (command "move" txa "" yy nn))))
             (progn
                   (setq yy (cdr (assoc 10 nna)))
                   (setq nn (list (car yy) (cadr xa)))
                   (command "move" txa "" yy nn)))
         (ssdel txa ss)
         (setq xa (list (car xa) (- (cadr xa) incr))))
  ) (if (< 0 ssl)
        (write-line "\nThere aren't any spaces between one line.")))
  (setq ss nil)
  (if (> num 0)
      (prompt (strcat "\n" (ITOA num) " lines neatly stacked.")))
(PRINC))
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-30 22:11:26 | 显示全部楼层
8楼楼主:
有没有能自已输入行间距值的LISP程序!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-7-10 16:56:02 | 显示全部楼层
有没有能自已输入行间距值的LISP程序!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-7-10 20:45:47 | 显示全部楼层
最初由 coolzhb 发布
[B]tt--运行文字对齐程序 [/B]
你发的与楼主的有什么区别啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-25 18:23 , Processed in 0.479978 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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