明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: pzweng

批量改文字高度

    [复制链接]
发表于 2012-7-23 22:25:15 | 显示全部楼层
preone 发表于 2012-7-23 19:45
(entmod(reverse(cons new_num (reverse  ent))))
请教 上句是做什么用的? 是把new_num放至ent联合 ...

这句话的前提是判断了图元列表中没有你要更新的组码,例如62组码,在随层的时候是没有的,所以不存在重复的可能。(cons new_num lst)是把new_num放在表头,这样我实验了,更新后不能更新图元列表,故而先将图元列表倒置后加入new_num,然后再倒置,就没有问题了。
发表于 2012-7-23 23:00:02 | 显示全部楼层
duuudu 发表于 2012-7-23 21:59
(apply '(lambda (x) (ch_dxf x 40 ww))
应该不需要apply函数,直接(ch_dxf (ssname SS (setq N (1- N)) ...

因为foreach,apply,mapcar这三个函数半懂不懂,得了强迫症,有机会就用了
发表于 2012-7-23 23:43:02 | 显示全部楼层
改字高是lsp学习中最基本的练习,不过怎么改,什么方式个人习惯不同而已,下面我发一个自己写的一直在用的,源码就没必要发了。。。

本帖子中包含更多资源

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

x
发表于 2012-7-24 13:18:34 | 显示全部楼层
强中更有强中手。
发表于 2012-7-24 16:18:59 | 显示全部楼层
学习~~~~~分享~~~~~~~~~感谢~~~~~~~~
发表于 2012-7-24 18:41:10 | 显示全部楼层
x_s_s_1 发表于 2012-7-23 22:25
这句话的前提是判断了图元列表中没有你要更新的组码,例如62组码,在随层的时候是没有的,所以不存在重复 ...

恩 我明白了 if 函数判断 如果最后一个判断式成立(即联合列表中包括new_num) 则执行第一个entmod  否则(即不包括时)执行第二个entmod。对不对? 呵呵~

点评

是的  发表于 2012-7-24 21:37
发表于 2012-7-24 21:46:44 | 显示全部楼层
x_s_s_1 发表于 2012-7-23 23:00
因为foreach,apply,mapcar这三个函数半懂不懂,得了强迫症,有机会就用了

这三个确实好用,多用用是挺好的,呵呵。
发表于 2012-7-24 22:06:18 | 显示全部楼层
本帖最后由 duuudu 于 2012-7-24 22:08 编辑
  1. (defun C:zg ( / h n s )
  2.   (setq h (getreal "字高:"))
  3.   (repeat (setq n (sslength (setq s (ssget  '((-4 . "<OR") (0 . "MTEXT") (0 . "TEXT") (-4 . "OR>"))))))
  4.     (VLA-PUT-HEIGHT (VLAX-ENAME->VLA-OBJECT (SSNAME s (setq n (1- n)))) h)
  5.   )
  6.   )
尝试最大程度简化了,什么也不判断,都是在前辈基础上弄得
发表于 2012-7-24 22:12:14 | 显示全部楼层
yjr111 发表于 2012-7-23 23:43
改字高是lsp学习中最基本的练习,不过怎么改,什么方式个人习惯不同而已,下面我发一个自己写的一直在用的, ...

好像不能用啊,命令是gzg?
发表于 2012-7-25 16:57:54 | 显示全部楼层
本帖最后由 zhb236623 于 2012-7-25 17:03 编辑
  1. 这个比较直观,扩展也快点……
  2.       (defun c:gzg ()
  3.            (setq ss (ssget '((0 . "text"))))         
  4.             (setq i 0)
  5.         
  6.         (if (not (setq tt (getreal "\n请输入文字高度 <1.5>: ")))
  7.        (setq tt 1.5)
  8.         )        
  9.             (repeat (sslength ss)
  10.                  (setq ssn (ssname ss i)
  11.                    endata (entget ssn)
  12.                     endata (subst (cons 40 tt) (assoc 40 endata) endata)
  13.                         i      (1+ i)
  14.                       )
  15.               (entmod endata)         
  16.             )                                                         
  17.       )        ;end defun




  18. ;;;更改文字宽度gzk
  19.    (defun c:gzk ()
  20.    (setq ss (ssget '((0 . "text"))))

  21.      (if (not (setq tt (getreal "\n请输入字宽 <0.8>: ")))
  22.     (setq tt 0.8)
  23.     )                        
  24.        (setq i 0)
  25.     (repeat (sslength ss)
  26.          (setq ssn (ssname ss i)
  27.           endata (entget ssn)
  28.           endata (subst (cons 41 tt) (assoc 41 endata) endata)
  29.             i      (1+ i)
  30.            )
  31.         (entmod endata)  
  32.      )
  33. ) ;end defun

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

本版积分规则

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

GMT+8, 2024-11-15 15:13 , Processed in 0.184661 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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