马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
程序稍加修改就可以处理多行,每行上由多个文字实体组成的(比如中英文混排)的多行文字的间距。
- (defun c:tt ()
- (if (and
- (setq dis (getreal "\n行距<退出>:"))
- (setq ss (ssget '((0 . "TEXT"))))
- )
- (progn
- (XD::Begin)
- (setq vdis (list 0 (- (abs dis)) 0) ;;向下移动距离向量
- entl (XD::Pickset:TableSort ss 0 3 '> '<)
- ) ; 把你选的文字实体从上到下拍好序了。
- (setq e (caar entl)
- box (xdrx_entity_box e)
- pj1 (car box) ;;第一行实体的左下点,右下点作为基线
- pj2 (cadr box)
- )
- (foreach n (cdr entl) ; 从第二行文字开始处理
- (setq e (car n)) ; 每行的第一个文字,本程序只处理第一列
- (setq box (xdrx_entity_box e)
- p1 (car box) ; 当前行文字左下点
- p4 (last box) ; 当前行文字左上点
- dis (xdrx_point_dist2Line p4 pj1 pj2) ;;当前行文字顶边到上行文字下边的垂直距离(有正负)
- v_dis (list 0 dis 0) ;;文字先和上行文字相贴,然后再移动夹点,距离向量为间距
- gap (mapcar '+ v_dis vdis)
- )
- (xdrx_entity_moveStretchPoint e gap 0);;移动文字夹点
- (setq box (xdrx_entity_box e)
- pj1 (car box) ;;当前行变成基行,供下行文字参考
- pj2 (cadr box)
- )
- )
- (XD::End)
- )
- )
- (princ)
- )
|