明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6861|回复: 35

批量改文字高度

    [复制链接]
发表于 2012-7-18 08:08:24 | 显示全部楼层 |阅读模式
昨天写了个改文字高度的程序,大伙帮我看看有改进的地方吗,多谢
(defun C:matext (/ a b n ss aa ss1 h)
  (setq ss (ssget))
  (setq loop T)
  (setq n 0)
  (while loop
    (setq h (getstring "\n请输入新文本高度[选取对象(S)][选取两点(D)]:"))
    (cond ((or (= h "s") (= h "S"))
    (while loop
      (princ "\n选取文字:")
      (setq ss1 (entsel))
      (if (= ss1 nil)
        (progn
   (princ "\n选取文字:")
   (setq loop t)
        )
        (progn
   (setq ss2 (entget (car ss1)))
   (setq aa (cdr (assoc 0 ss2)))
   (if (or (= "TEXT" aa) (= "MTEXT" aa))
     (progn
       (setq h (cdr (assoc 40 ss2)))
             (setq loop nil)
     )
   )
        )
      )
    )
   )
((numberp (read h))
       (setq h   (atof h)
      loop nil
       )
      )
  ((or (= h "d") (= h "D"))
    (progn
      (setq h (getdist "\n请选取两点:"))
      (setq loop nil)
    )
   )
   
    (T
      (setq loop T)
    )
  )
    )
  (repeat (sslength ss)
    (setq a (ssname ss n))
    (setq b (entget a))
    (if (or (= "TEXT" (cdr (assoc 0 b)))  (= "MTEXT" (cdr (assoc 0 b))) )
      (progn
(setq b (subst (cons 40 h) (assoc 40 b) b))
(if (= 3 (cdr (assoc 72 b)))
   (setq b (subst (cons 72 0) (assoc 72 b) b))
)
(entmod b)
      )
    )
    (setq n (1+ n))
  )
  (print "文字高度已改为:")
  (print h)
)
(princ "\n by pzweng 命令:matext")
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-7-18 08:34:05 | 显示全部楼层
本帖最后由 革天明 于 2012-7-18 08:50 编辑

谢谢楼主分享,很好
发表于 2012-7-18 09:04:09 | 显示全部楼层
谢谢楼主的分享!
先收藏看看
谢谢!
发表于 2012-7-18 09:56:26 | 显示全部楼层
支持源码,搞了一个短点的,但是只针对text,共同学习
  1. (defun ch_dxf(en num ch / old_num new_num ent)
  2.   (if (setq ent (entget en)
  3.     new_num (cons num ch)
  4.     old_num (assoc num ent)
  5.     )
  6.     (entmod(subst new_num old_num ent))
  7.     (entmod(reverse(cons new_num (reverse  ent))))
  8.     ))
  9. (defun c:test1( / ss n x ww)
  10.   (setq ss (ssget '((0 . "text"))))
  11.   (setq ww (getreal "请输入字高:"))
  12.   (repeat (setq N (sslength SS))
  13.     (apply '(lambda (x) (ch_dxf x 40 ww))
  14.    (list (ssname SS (setq N (1- N))))
  15.     )
  16.   )
  17.   (princ)
  18. )
  19.   (defun c:test2( / ss n x ww)
  20.   (setq ss (ssget '((0 . "text"))))
  21.   (setq ww (getreal "请输入长高比:"))
  22.   (repeat (setq N (sslength SS))
  23.     (apply '(lambda (x) (ch_dxf x 41 ww))
  24.    (list (ssname SS (setq N (1- N))))
  25.     )
  26.   )
  27.   (princ)
  28. )

点评

修改dxf这个功能非常好,  发表于 2012-12-18 11:34
很好,刚好用得到改dxf这个功能,谢谢!  发表于 2012-11-8 12:43
发表于 2012-7-18 12:03:35 | 显示全部楼层
好样的,顶楼主,
发表于 2012-7-18 13:32:21 | 显示全部楼层

  1. ;; 改换字高
  2. ;; 伪源码需要e派工具箱(XCAD)的支持
  3. (defun c:tt ()
  4.   (CMDLA0)
  5.   (xyp-initSet '(ukw th) '("1" 500.))
  6.   (setq ukw (UKWORD 1 "1 2" "高度方式: 1-选样板/2-两点" ukw))
  7.   (if (= ukw "1")
  8.     (if        (and (setq s1 (car (entsel "\n选择文本: ")))
  9.              (xyp-etype s1 "text,mtext")
  10.         )
  11.       (setq th (xyp-get-dxf 40 s1))
  12.       (setq th 500)
  13.     )
  14.     (setq th (Udist 1 "" "高度<输入或鼠标直接量取>" th nil))
  15.   )
  16.   (setq        ss (ssget '((0 . "*TEXT")))
  17.         i  -1
  18.   )
  19.   (while (setq s1 (ssname ss (setq i (1+ i))))
  20.     (xyp-SubUpd s1 40 th)
  21.   )
  22.   (CMDLA1)
  23. )
 楼主| 发表于 2012-7-18 14:11:31 | 显示全部楼层
xyp1964 发表于 2012-7-18 13:32

如简洁,可惜全是伪源码
发表于 2012-7-18 18:54:08 | 显示全部楼层
这个学习学习。
 楼主| 发表于 2012-7-19 12:51:13 | 显示全部楼层
x_s_s_1 发表于 2012-7-18 09:56
支持源码,搞了一个短点的,但是只针对text,共同学习

    (apply '(lambda (x) (ch_dxf x 40 ww))
这段怎么理解,望兄台指点
发表于 2012-7-19 15:16:53 | 显示全部楼层
pzweng 发表于 2012-7-19 12:51
(apply '(lambda (x) (ch_dxf x 40 ww))
这段怎么理解,望兄台指点

(apply '(lambda (x) (ch_dxf x 40 ww)) lsp)就是对lsp(图元表)中的每个图元进行更换40组码的操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 15:01 , Processed in 0.182882 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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