x_s_s_1 发表于 2012-7-23 22:25:15

preone 发表于 2012-7-23 19:45 static/image/common/back.gif
(entmod(reverse(cons new_num (reverseent))))
请教 上句是做什么用的? 是把new_num放至ent联合 ...

这句话的前提是判断了图元列表中没有你要更新的组码,例如62组码,在随层的时候是没有的,所以不存在重复的可能。(cons new_num lst)是把new_num放在表头,这样我实验了,更新后不能更新图元列表,故而先将图元列表倒置后加入new_num,然后再倒置,就没有问题了。

x_s_s_1 发表于 2012-7-23 23:00:02

duuudu 发表于 2012-7-23 21:59 static/image/common/back.gif
(apply '(lambda (x) (ch_dxf x 40 ww))
应该不需要apply函数,直接(ch_dxf (ssname SS (setq N (1- N)) ...

因为foreach,apply,mapcar这三个函数半懂不懂,得了强迫症,有机会就用了

yjr111 发表于 2012-7-23 23:43:02

改字高是lsp学习中最基本的练习,不过怎么改,什么方式个人习惯不同而已,下面我发一个自己写的一直在用的,源码就没必要发了。。。

MH520 发表于 2012-7-24 13:18:34

强中更有强中手。

梦醒才知原是梦 发表于 2012-7-24 16:18:59

学习~~~~~分享~~~~~~~~~感谢~~~~~~~~

preone 发表于 2012-7-24 18:41:10

x_s_s_1 发表于 2012-7-23 22:25 static/image/common/back.gif
这句话的前提是判断了图元列表中没有你要更新的组码,例如62组码,在随层的时候是没有的,所以不存在重复 ...

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

duuudu 发表于 2012-7-24 21:46:44

x_s_s_1 发表于 2012-7-23 23:00 static/image/common/back.gif
因为foreach,apply,mapcar这三个函数半懂不懂,得了强迫症,有机会就用了

这三个确实好用,多用用是挺好的,呵呵。

duuudu 发表于 2012-7-24 22:06:18

本帖最后由 duuudu 于 2012-7-24 22:08 编辑

(defun C:zg ( / h n s )
(setq h (getreal "字高:"))
(repeat (setq n (sslength (setq s (ssget'((-4 . "<OR") (0 . "MTEXT") (0 . "TEXT") (-4 . "OR>"))))))
    (VLA-PUT-HEIGHT (VLAX-ENAME->VLA-OBJECT (SSNAME s (setq n (1- n)))) h)
)
)尝试最大程度简化了,什么也不判断,都是在前辈基础上弄得

duuudu 发表于 2012-7-24 22:12:14

yjr111 发表于 2012-7-23 23:43 static/image/common/back.gif
改字高是lsp学习中最基本的练习,不过怎么改,什么方式个人习惯不同而已,下面我发一个自己写的一直在用的, ...

好像不能用啊,命令是gzg?

zhb236623 发表于 2012-7-25 16:57:54

本帖最后由 zhb236623 于 2012-7-25 17:03 编辑

这个比较直观,扩展也快点……
      (defun c:gzg ()
         (setq ss (ssget '((0 . "text"))))         
            (setq i 0)
      
      (if (not (setq tt (getreal "\n请输入文字高度 <1.5>: ")))
       (setq tt 1.5)
      )      
            (repeat (sslength ss)
               (setq ssn (ssname ss i)
                   endata (entget ssn)
                  endata (subst (cons 40 tt) (assoc 40 endata) endata)
                        i      (1+ i)
                      )
            (entmod endata)         
            )                                                         
      )      ;end defun




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

   (if (not (setq tt (getreal "\n请输入字宽 <0.8>: ")))
    (setq tt 0.8)
    )                        
       (setq i 0)
    (repeat (sslength ss)
         (setq ssn (ssname ss i)
          endata (entget ssn)
          endata (subst (cons 41 tt) (assoc 41 endata) endata)
            i      (1+ i)
         )
      (entmod endata)
   )
) ;end defun

页: 1 2 [3] 4
查看完整版本: 批量改文字高度