doremidai 发表于 2009-6-26 23:26:00

不同数字宽度比例自动调整。

<p>钢筋编号,从1~上百,如1~199,每个数字都在圆内,用lisp可以自动找到所有文字,并全部修改为一个高度和宽度比例,但我想将1~9号数字的宽度比例用0.7,10~99号数字的宽度比例用0.65,100~199号数字的宽度比例用0.55,如何能自动搜索文字字段并修改圆内数字相应宽度比例?是个头痛的问题,请高手不吝赐教。</p><p>;**********&nbsp;&nbsp; PMZT&nbsp;&nbsp; 将钢筋标注字体左对齐(L)***<br/>(defun PMZT()</p><p>&nbsp;&nbsp;&nbsp; (setq old_hh 2.50)&nbsp; ;字体高度(默认为2.5)<br/>(setq str_hh (strcat "\n 请输入钢筋标注字体高度&lt;" (rtos old_hh 2) "&gt;: "))<br/>(setq hh (getdist str_hh))<br/>(if (null&nbsp; hh) (setq hh old_hh))</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq zkxs (getreal "\n 请输入钢筋标注字体宽度比例系数&lt;0.7&gt;: "));字体宽度系数(默认为0.7)&nbsp; <br/>(if (null zkxs) (setq zkxs 0.7))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq sszt (ssget "X" '((0 . "TEXT"))))<br/>&nbsp;(command "justifytext" "P" "" "M")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ztdX)<br/>&nbsp; (prin1)<br/>)</p><p>(defun ztdX()<br/>&nbsp; (setq i 0)&nbsp; <br/>&nbsp; (setq nn (sslength sszt))<br/>&nbsp; (repeat nn<br/>&nbsp;&nbsp;&nbsp; (setq ssn (ssname sszt i))<br/>&nbsp;&nbsp;&nbsp; (setq ssdata (entget ssn))<br/>&nbsp;&nbsp;&nbsp; (setq sstyp (cdr (assoc 0 ssdata)))<br/>&nbsp;&nbsp;&nbsp; (if (= sstyp "TEXT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn&nbsp;&nbsp; <br/>&nbsp;(setq old_hh (assoc 40 ssdata));改文字高度<br/>&nbsp;(setq new_hh (cons 40 hh))<br/>&nbsp;(setq old_kb (assoc 41 ssdata));改宽度比例数<br/>&nbsp;(setq new_kb (cons 41 zkxs))<br/>&nbsp;(setq ssdata (subst new_hh old_hh ssdata))<br/>&nbsp;(setq ssdata (subst new_kb old_kb ssdata))<br/>&nbsp;(entmod ssdata)&nbsp;<br/>&nbsp;&nbsp;&nbsp; );end if<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;);end if&nbsp; <br/>&nbsp;(setq i (1+ i))<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;)<br/>&nbsp; (prompt "\n 正在处理...请稍候......")<br/>&nbsp; (prin1)<br/>)</p>

ZZXXQQ 发表于 2009-6-28 08:29:00

本帖最后由 作者 于 2009-6-30 11:50:49 编辑


;改圆内文字宽度 明经 ZZXXQQ 2009.6.28
(defun PMZT ()
(setvar "CMDECHO" 0)
(setq old_hh 2.5);字体高度(默认为2.5)
(setq str_hh (strcat "\n 请输入钢筋标注字体高度<" (rtos old_hh 2) ">: "))
(setq hh (getdist str_hh))
(if (null hh) (setq hh old_hh))
;(setq sszt (ssget "X" '((0 . "TEXT"))))
(if (setq ssy (ssget "X" '((0 . "CIRCLE")))) (progn
   (prompt "\n 正在处理...请稍候......")
   (command "justifytext" "P" "" "M")
   (setq i 0)
   (repeat (sslength ssy)
    (setq ssn (ssname ssy i))
    (setq ssdata (entget ssn))
    (setq pc (cdr(assoc 10 ent)))
    (setq r (cdr(assoc 40 ent)))
    (setq p1 (polar(polar pc 0 r) (/ pi 2) r))
    (setq p2 (polar(polar pc pi r) (/ pi -2) r))
    (if (setq sst (ssget "W" p1 p2 '((0 . "TEXT")))) (progn
(setq entt (entget(ssname sst 0)))
   (setq sl (strlen(cdr(assoc 1 entt))))
   (setq new_kb (cons 41 (cond ((= sl 1) 0.7) ((= sl 2) 0.65) (T 0.55))));改宽度比例数
   (setq entt (subst (cons 40 hh) (assoc 40 entt) entt))
   (setq entt (subst new_kb (assoc 41 entt) entt))
   (entmod entt)
    ))
    (setq i (1+ i))
   )
))
(setvar "CMDECHO" 1)
(princ)
)

doremidai 发表于 2009-6-28 19:53:00

<p><font face="Verdana" color="#da2549"><strong>感谢ZZXXQQ回帖,你用了</strong><font color="#000000">&nbsp; </font><a href="http://www.mjtd.com/object/autolisp/strlen.htm" target="_black"><font color="#0000ff">strlen</font></a>来确定字符串的长度,以此来判断字符使用的宽度比例系数。</font></p><p><font face="Verdana" color="#da2549">但我只是要改变每个圆圈以内的字符宽度,在圆圈以外的数字,有的是3个字符,有的字符更多,都用0.7的宽度比例系数.如何搜索圆圈以内的字符?</font></p>

ZZXXQQ 发表于 2009-6-28 23:13:00

2楼已改。再试试看。

doremidai 发表于 2009-6-30 11:26:00

<p><font color="#ff0000">19,20行有点小遗漏,改成以下可用。</font></p><p><font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/setq.htm" target="_black"><font color="#0000ff">setq</font></a> p1 <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/polar.htm" target="_black"><font color="#0000ff">polar</font></a><font color="#ff0000">(</font>polar pc <font color="#008000">0</font> r<font color="#ff0000">)</font>
                <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/47.htm" target="_black"><font color="#0000ff">/</font></a> pi <font color="#008000">2</font><font color="#ff0000">)</font> r<font color="#ff0000">)</font><font color="#ff0000">)</font><br/><font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/setq.htm" target="_black"><font color="#0000ff">setq</font></a> p2 <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/polar.htm" target="_black"><font color="#0000ff">polar</font></a><font color="#ff0000">(</font>polar pc pi r<font color="#ff0000">)</font>
                <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/47.htm" target="_black"><font color="#0000ff">/</font></a> pi <font color="#008000">-2</font><font color="#ff0000">)</font> r<font color="#ff0000">)</font><font color="#ff0000">)</font></p><p><strong><font face="Verdana" color="#da2549">ZZXXQQ兄思路很好,学习了。3q。</font></strong></p><p><br/></p>

493514506 发表于 2011-11-3 12:43:43

功能很强大
页: [1]
查看完整版本: 不同数字宽度比例自动调整。