找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1169|回复: 5

(完成)[编程申请]:文字完美斜排...

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-8-14 21:06:44 | 显示全部楼层

程序写好了,请试用

完美斜排做好了,程序可以在两点范围内等距离排文字,文字角度可以不变或者随线,还可以选基准曲线做平齐方向,请试用...



                               
登录/注册后可看大图



  1. [FONT=courier new]
  2. ;|
  3.   命令:txt_xp
  4.   
  5.   功能:把选取的文字依据给定的方向上,按照交互的两点距离为长度或者选取平齐的曲线为方向,等距离斜排(可横,竖)
  6.   
  7. |;
  8. (defun c:txt_xp (/ e e1 pj yes pj2 ang txt cha dis ed ed1 oldtxt oldpj len
  9.                    edl basept tf box box1
  10.                 )
  11.   (if (and
  12.         (setq e (car (xdrx_entsel "\n请选取要斜排的文字<退出>:" '(
  13.                                    (0 . "text")
  14.                                   )
  15.                      )
  16.                 )
  17.         )
  18.         (progn
  19.           (redraw e 3)
  20.           t
  21.         )
  22.         (setq pj (xdrx_getentdxf 10))
  23.         (setq yes (xdrx_yesorno "\n文字角度是否随线" 1))
  24.         (progn
  25.           (initget 128 "Align")
  26.           (if (not (setq pj2 (getpoint pj "\n请指定斜排方向[Align-曲线平齐]<A>:")))
  27.             (progn
  28.               (if (and
  29.                     (setq e1 (xdrx_entsel "\n请选取平齐的基准曲线<退出>:" '
  30.                                           ((0 . "*line,arc,circle,ellipse"))
  31.                              )
  32.                     )
  33.                     (progn
  34.                       (setq oldos (getvar "osmode"))
  35.                       (setvar "osmode" 512)
  36.                       (setq pj2 (getpoint (last e1)
  37.                                           "\n请点曲线另一点决定长度<退出>:"
  38.                                 )
  39.                       )
  40.                       (setvar "osmode" oldos)
  41.                       pj2
  42.                     )
  43.                   )
  44.                 (progn
  45.                   (setq ang ($xdlsp_angle_format (car
  46.                                                       (xdrx_getperpline
  47.                                                                         (car e1)
  48.                                                                         (last e1)
  49.                                                       )
  50.                                                  )
  51.                             )
  52.                         dis (distance (last e1) pj2)
  53.                   )
  54.                 )
  55.               )
  56.               (and
  57.                 e1
  58.                 pj2
  59.               )
  60.             )
  61.             (progn
  62.               (setq ang ($xdlsp_angle_format (angle pj pj2))
  63.                     dis (distance pj pj2)
  64.               )
  65.             )
  66.           )
  67.         )
  68.       )
  69.     (progn
  70.       (xdrx_begin)
  71.       (xdrx_setenttodb e)
  72.       (setq txt (xdrx_getentdxf 1)
  73.             len ($xdlsp_text_wordlen txt)
  74.             ed (entget e)
  75.             box ($xdlsp_textbox ed)

  76.             oldtxt (cons 1 txt)
  77.             oldpj (cons 10 pj)
  78.       )
  79.       ($xdlsp_text_todb txt)
  80.       (setq dis1 0)
  81.       (while (setq cha ($xdlsp_text_getword))
  82.         (setq ed1 (subst
  83.                     (cons 1 cha)
  84.                     oldtxt
  85.                     ed
  86.                   )
  87.               box1 ($xdlsp_textbox ed1)
  88.               dis1 (+ dis1 (- (caadr box1) (caar box1)))
  89.               edl (cons ed1 edl)
  90.         )
  91.       )
  92.       (entdel e)
  93.       (setq tf t)
  94.       (setq dis (/ (- dis dis1) (1- len))
  95.             basept pj
  96.       )
  97.       (foreach n (reverse edl)
  98.         (if tf
  99.           (progn
  100.             (entmake n)
  101.             (setq ed (entget (entlast))
  102.                   tf nil
  103.                   pj (cdr (assoc 10 n))
  104.                   dis2 ($xdlsp_textbox ed)
  105.                   dis2 (- (caadr dis2) (caar dis2))
  106.             )
  107.           )
  108.           (progn
  109.             (setq ed (entget (entlast))
  110.                   dis2 ($xdlsp_textbox ed)
  111.                   dis2 (- (caadr dis2) (caar dis2))
  112.             )
  113.             (setq pj (polar pj ang (+ dis2 dis)))
  114.             (setq n (subst
  115.                       (cons 10 pj)
  116.                       (assoc 10 n)
  117.                       n
  118.                     )
  119.             )
  120.             (entmake n)
  121.           )
  122.         )
  123.         (if (= yes 1)
  124.           (progn
  125.             (xdrx_setenttodb (entlast))
  126.             (xdrx_modent 50 ang)
  127.           )
  128.         )
  129.       )
  130.       (xdrx_end)
  131.     )
  132.   )
  133.   (princ)
  134. )[/FONT]


下面附件是这个程序发布时,最新的所有“文字工具”程序,其中很多工具修改、完善了功能...

下载后,把压缩文件中的两个LISP拷贝到“晓东工具箱”LISP目录下,使用txt_xp执行本程序...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-8-14 21:25:21 | 显示全部楼层
请XD说明怎么样在启动LZ时同时启动XD工具箱?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-8-14 22:37:15 | 显示全部楼层
最初由 asuhe 发布
[B]请XD说明怎么样在启动LZ时同时启动XD工具箱? [/B]


你说的是在R14平台吧,刚给大家做了FLASH教学,去看看下面的帖子:

http://www.xdcad.net/forum/showthread.php?postid=55037#post55037

在2002下面,就非常容易,论坛置顶的帖子里面也有教学,使用工具箱提供的“2000+链接”程序即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-8-15 15:07:26 | 显示全部楼层
由于对txt_xp命令中的提示不清楚,做不出上面图片的效果.请详述
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2002-8-15 17:59:15 | 显示全部楼层
最初由 lxch 发布
[B]由于对txt_xp命令中的提示不清楚,做不出上面图片的效果.请详述 [/B]


很好用的啊,在输入方向时候,橡皮筋第二点和第一点间的长度内,等距离排你选的字,所以,你点第二点的长度一定要比你原来的文字长度要长。晓东的意思应该是视觉上模糊根据两点,定排列后的文字总长度,这点比较符号实际中的需要。橡皮筋的方向定排的方向,长度定排后的总长度,如果横排和竖排,就按F8键把正交给打开。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 00:24 , Processed in 0.393090 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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