明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8221|回复: 30

[源码] 单行文本动态拉伸

  [复制链接]
发表于 2017-10-19 19:29:05 | 显示全部楼层 |阅读模式
本帖最后由 langjs 于 2017-10-20 11:18 编辑

;;; -----------------------------------
;;; 单行文本动态拉伸 by:langjs
;;; -----------------------------------
(defun C:qq (/ box data ent gr h hb hh loop p ss w wb)
(defun emod (h w ent) (entmod (subst (cons h w) (assoc h ent) ent ) ) )
(if (setq ss (ssget ":E:S" '((0 . "TEXT"))))
(progn
(setq ent (entget (ssname ss 0)) p (cdr (assoc 10 ent)) h (cdr (assoc 40 ent))
  w (cdr (assoc 41 ent)) box (textbox (cdr ent)) hb (/ h (cadr (cadr box)))
  wb (/ (car (cadr box)) (* h w)) loop t )
(princ "\n指定拉伸点:")
(while loop
(setq gr (grread t 15 0) data (cadr gr))
(cond
  ((= (car gr) 3) (setq loop nil) )
  ((= (car gr) 5) (setq hh (* hb (abs (- (cadr data) (cadr p)))) ent (emod 40 hh ent))
  (emod 41 (/ (abs (- (car data) (car p))) (* hh wb)) ent))
  ((member (car gr) '(11 25)) (setq loop nil ent (emod 40 h ent)) (emod 41 w ent)
  )))))
(princ)
)

点评

文字如果是垂直写的,拉伸不了,如何改写?  发表于 2018-5-5 17:08

评分

参与人数 1明经币 +1 收起 理由
love1030312 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-11-14 11:32:24 | 显示全部楼层
请问怎样修改能固定字高,仅仅拉伸宽度?
回复 支持 1 反对 0

使用道具 举报

发表于 2023-6-18 06:19:23 | 显示全部楼层
本帖最后由 lee50310 于 2023-6-18 06:22 编辑
戏男 发表于 2023-6-17 19:28
不能框选文字,只能单独处理一个文字

圈選 多組文字
無法同步縮放
只能 一個文字縮放完 在換下一個文字

  1. ;;; -----------------------------------
  2. ;;; 多组单行文本动态拉伸 by:langjs
  3. ;;  
  4. ;;; -----------------------------------

  5. (defun C:qq2 (/ box data ent gr h hb hh loop p ss w wb)
  6. ;---------------------------------------
  7.   (defun emod (v w ent)
  8.     (entmod (subst (cons v w) (assoc v ent) ent))
  9.   )
  10. ;---------------------------------------  
  11. (defun get-tt(ent)      
  12.   (setq p         (cdr (assoc 10 ent))
  13.             h         (cdr (assoc 40 ent))
  14.             w         (cdr (assoc 41 ent))
  15.             box         (textbox (cdr ent))
  16.             hb         (/ h (cadr (cadr box)))
  17.             wb         (/ (car (cadr box)) (* h w))
  18.             loop t
  19.   );end_setq
  20. )  
  21. ;----------------------------------------
  22.   
  23.   (if (setq ss (ssget '((0 . "TEXT"))))
  24.     (progn
  25.                        
  26.           (princ "\n指定拉伸点:")
  27.                   (foreach ex lst
  28.                     (setq ent(entget ex))
  29.                              (get-tt ent)
  30.       (while loop
  31.                  (setq gr   (grread t 15 0)
  32.                        data (cadr gr)
  33.                  );end_setq
  34.                  
  35.                                    
  36.                                         (cond
  37.                                                    ((= (car gr) 3)(setq loop nil))
  38.                                                  ((= (car gr) 5)
  39.                                          (setq hh(* hb (abs (- (cadr data) (cadr p)))))
  40.                                  (if (<= hh 0)(setq hh 0.1)) ;预防分母为0
  41.                                  (setq ent (emod 40 hh ent))
  42.                                  (emod 41 (/ (abs (- (car data) (car p))) (* hh wb)) ent)
  43.                              )
  44.                              ((member (car gr) '(11 25))           
  45.                                       (setq loop nil ent (emod 40 h ent))           
  46.                                       (emod 41 w ent)
  47.                              )
  48.             );end_cond
  49.                     
  50.       );end_while
  51.            );end_foreach
  52.     );end_progn
  53.   );end_if
  54.   (princ)
  55. );end_defun_qq

发表于 2018-4-25 10:16:09 | 显示全部楼层
本帖最后由 尘缘一生 于 2018-5-6 18:18 编辑

程序修改下:增加改后变色,增加垂直书写判断合理调节。
  1. ;;; -----------------------------------
  2. ;;; 单行文本动态拉伸 by:langjs
  3. ;;; -----修改:白领坛主------------------------------
  4. (defun c:qq (/ box data ent gr h hb hh loop p ss w wb ang)
  5.   (defun emod (h w ent)
  6.     (entmod (subst
  7.               (cons h w)
  8.               (assoc h ent)
  9.               ent
  10.             )
  11.     )
  12.   )
  13.   (if (setq ss (ssget ":E:S" '((0 . "TEXT"))))
  14.     (progn
  15.       (setq ent (entget (ssname ss 0))
  16.         p (cdr (assoc 10 ent))
  17.         h (cdr (assoc 40 ent))
  18.         w (cdr (assoc 41 ent))
  19.         ang (cdr (assoc 50 ent))
  20.         box (textbox (cdr ent))
  21.         hb (/ (cadr (cadr box)) h)
  22.         wb (/ (car (cadr box)) (* h w))
  23.         loop t
  24.       )   
  25.       (princ "\n指定拉伸点:")
  26.       (while loop
  27.         (setq gr (grread t 15 0)
  28.           data (cadr gr)
  29.         )
  30.         (cond
  31.           ((= (car gr) 3)
  32.             (setq loop nil)
  33.           )
  34.           ((= (car gr) 5)
  35.             (if (/= 1 (sin ang))
  36.               (progn
  37.                 (setq hh (* hb (abs (- (cadr data) (cadr p))))
  38.                   ent (emod 40 hh ent)
  39.                 )
  40.                 (emod 41 (/ (abs (- (car data) (car p))) (* hh wb)) ent)
  41.               )
  42.             )
  43.             (if (= 1 (sin ang))
  44.               (progn
  45.                 (setq hh (/ (* hb (abs (- (cadr data) (cadr p)))) 2)
  46.                   ent (emod 40 hh ent)
  47.                 )
  48.                 (emod 41 (/ (abs (- (cadr data) (cadr p))) (* hh wb)) ent)
  49.               )
  50.             )            
  51.           )
  52.           ((member (car gr) '(11 25))
  53.             (setq loop nil
  54.               ent (emod 40 h ent)
  55.             )
  56.             (emod 41 w ent)
  57.           )
  58.         )
  59.       )
  60.     )
  61.   )
  62.   (setq oldlup (getvar "LUPREC"))
  63.   (setvar "LUPREC" 0)           ; 精度到各位,以便后续取得标准颜色号
  64.   (command "CHANGE" (ssname ss 0) "" "P" "C" (rtos (1+ (rem (getvar "CPUTICKS")
  65.                                                          8
  66.                                                        )
  67.                                                    )
  68.                                              ) ""
  69.   )
  70.   (setvar "LUPREC" oldlup)         ; 恢复数值小数位数
  71.   (princ)
  72. )
发表于 2017-10-20 09:14:08 | 显示全部楼层
大师的思路和技巧是值得学习的!
发表于 2017-10-20 12:14:18 | 显示全部楼层
进来好好学习,感谢大师分享源码
发表于 2017-10-20 12:27:06 | 显示全部楼层
这个有用,支持支持
发表于 2017-10-21 09:06:45 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 谢谢
发表于 2017-10-21 10:48:31 | 显示全部楼层
版本的作品,必须顶
发表于 2017-10-24 19:25:00 | 显示全部楼层
谢谢大师的分享。。
发表于 2017-10-25 10:26:22 | 显示全部楼层

感谢大师的分享。。
发表于 2017-10-27 19:17:05 | 显示全部楼层
很好用,以后不用这么麻烦的缩放字体了
发表于 2017-10-31 10:25:52 | 显示全部楼层
不错的楼主,谢谢分享啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 16:35 , Processed in 0.188796 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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