jiajun_16888 发表于 2010-4-30 23:40:00

可以自动改变直线圆等的线形比例 ,但不能改变矩形及多段线的 请修改一下

<p>大家好&nbsp; 我这有一个非常好的LISP程序&nbsp; 可以自动改变直线,圆等的线形比例&nbsp;&nbsp; 但不能改变矩形及多段线的的&nbsp;&nbsp; 哪位大大修改一下</p><p>&nbsp;</p><p>(defun c:df ()&nbsp;&nbsp;&nbsp;&nbsp;;自動變換成適當比例的虛線<br/>&nbsp; (ltchange "dashed"&nbsp; 3 "bylayer")<br/>&nbsp; (princ)<br/>)</p><p>(defun ltchange&nbsp;(type1 scale color /&nbsp; oce&nbsp;&nbsp; lin&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp; nam&nbsp; tab<br/>&nbsp;&nbsp; pt1&nbsp;&nbsp; pt2&nbsp;&nbsp; x1&nbsp;&nbsp;&nbsp; x2&nbsp; y1&nbsp;&nbsp;&nbsp; y2&nbsp;&nbsp;&nbsp; len&nbsp;&nbsp; leg&nbsp; sca<br/>&nbsp;&nbsp; otyp&nbsp; ocol&nbsp; osca&nbsp; col&nbsp; typ&nbsp;&nbsp; lts&nbsp;&nbsp; rad<br/>&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;;自動變換成適當比例的中心線<br/>&nbsp; (setq&nbsp;oce (getvar "cmdecho")<br/>&nbsp;lts (getvar "ltscale")<br/>&nbsp; ) ;_ end of setq<br/>&nbsp; (setvar "cmdecho" 0)<br/>&nbsp; (setq n 0)<br/>&nbsp; (print<br/>&nbsp;&nbsp;&nbsp; (strcat "Select object change to " type1 ":")<br/>&nbsp; ) ;_ end of print<br/>&nbsp; (setq&nbsp;lin (ssget '((-4 . "&lt;OR")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0 . "LINE")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0 . "CIRCLE")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0 . "ELLIPSE")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0 . "ARC")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0 . "polyline")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "OR&gt;")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; ) ;_ end of ssget<br/>&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;end setq<br/>&nbsp; (if (not lin)<br/>&nbsp;&nbsp;&nbsp; (progn</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (alert "\nNo selection!")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (exit)<br/>&nbsp;&nbsp;&nbsp; ) ;_ end of progn<br/>&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;end if<br/>&nbsp; (repeat (sslength lin)<br/>&nbsp;&nbsp;&nbsp; (setq nam (ssname lin n))<br/>&nbsp;&nbsp;&nbsp; (setq tab (entget nam))<br/>;;;;;;;;;;circle<br/>&nbsp;&nbsp;&nbsp; (if&nbsp;(= (cdr (assoc 0 tab)) "CIRCLE")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;(setq rad (cdr (assoc 40 tab)))<br/>&nbsp;(setq len (* 2 (* 3.14 rad)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;如是圓實體取周長為"len"<br/>;;;;;;;;;;ARC<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (cdr (assoc 0 tab)) "ARC")<br/>&nbsp;(progn<br/>&nbsp;&nbsp; (setq rad (cdr (assoc 40 tab)))<br/>&nbsp;&nbsp; (setq len (* 3.14 rad))<br/>&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;;end progn;如是圓弧取其圓周長半 </p><p>;;;;;;;;;;ellipse<br/>&nbsp;&nbsp;&nbsp; (if&nbsp;(= (cdr (assoc 0 tab)) "ellipse")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;(setq rad (cdr (assoc 40 tab)))<br/>&nbsp;(setq len (* 2 (* 3.14 rad)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>;;;;;;;;;LINE<br/>&nbsp;(progn<br/>&nbsp;&nbsp; (setq&nbsp;pt1 (cdr (assoc 10 tab))<br/>&nbsp;&nbsp;pt2 (cdr (assoc 11 tab))<br/>&nbsp;&nbsp;len (distance pt1 pt2)<br/>&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;;end setq<br/>&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;;end progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;end if&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp; );end if</p><p>&nbsp;&nbsp;&nbsp; (cond ((and (&gt; len 0) (&lt;= len 2))<br/>&nbsp;&nbsp;&nbsp; (setq leg 2)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; ((and (&gt; len 2) (&lt;= len 5))<br/>&nbsp;&nbsp;&nbsp; (setq leg 6)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; ((and (&gt; len 5) (&lt;= len 30))<br/>&nbsp;&nbsp;&nbsp; (setq leg 20)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; ((and (&gt; len 30) (&lt;= len 50))<br/>&nbsp;&nbsp;&nbsp; (setq leg 40)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; ((and (&gt; len 50) (&lt;= len 100))<br/>&nbsp;&nbsp;&nbsp; (setq leg 75)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; ((&gt; len 100)<br/>&nbsp;&nbsp;&nbsp; (setq leg 100)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;end cond<br/>&nbsp;&nbsp;&nbsp; (setq sca (/ leg scale lts 2))</p><p>&nbsp;&nbsp;&nbsp; (command "-linetype" "l" type1 "acad.lin" "" "")<br/>&nbsp;&nbsp;&nbsp; (command "change" nam "" "p" "c" color "lt"&nbsp;type1 "s" SCA "") ;_ end of command<br/>&nbsp;;_ end of command<br/>&nbsp;;_ end of command<br/>&nbsp;&nbsp;&nbsp; (setq n (+ n 1))<br/>&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;end repeat<br/>&nbsp; (setvar "cmdecho" oce)<br/>&nbsp; (princ)<br/>) ;_ end of defun<br/></p>

ZZXXQQ 发表于 2010-5-1 10:14:00

本帖最后由 作者 于 2010-5-1 20:42:48 编辑


(defun c:df ()    ;自動變換成適當比例的虛線
(ltchange "dashed" 3 "bylayer")
(princ)
)
(defun ltchange (type1 scale color / oce lts lin n nam len leg sca) ;自動變換成適當比例的中心線
(setq oce (getvar "cmdecho")
       lts (getvar "ltscale"))
(setvar "cmdecho" 0)
(setq n 0)
(princ (strcat "\nSelect object change to " type1 ":"))
(if (setq lin (ssget '((0 . "ARC,CIRCLE,*LINE,ELLIPSE")))) (progn
(repeat (sslength lin)
   (setq nam (ssname lin n))
   (command "lengthen" nam "")
   (setq LEN (getvar "perimeter"))
   (cond
    ((> 2 len 0) (setq leg 2))
    ((> 5 len 2) (setq leg 6))
    ((> 30 len 5) (setq leg 20))
    ((> 50 len 30) (setq leg 40))
    ((> 100 len 50) (setq leg 75))
    ((> len 100) (setq leg 100))
   );end cond
   (setq sca (/ leg scale lts 2))
   (command "-linetype" "l" type1 "acad.lin" "" "")
   (command "change" nam "" "p" "c" color "lt" type1 "s" SCA "") ;_ end of command
   (setq n (1+ n))
);end repeat
));end if
(setvar "cmdecho" oce)
(princ)
);_ end of defun

jiajun_16888 发表于 2010-5-1 10:26:00

谢啦但我试了下说是错误参数太多不能用啊

ZZXXQQ 发表于 2010-5-1 20:43:00

<p>二楼已改,再试试。</p>

jiajun_16888 发表于 2010-5-2 00:14:00

还是不行啊,df \nSelect object change to dashed:; 错误: 参数太多
是不是版本不同啊我是CAD2004的   把矩形及多段线打散也可以的

帮忙再改下

ZZXXQQ 发表于 2010-5-2 21:29:00

<p>我是在2004下调试通过的,没问题呀!</p>

jiajun_16888 发表于 2010-5-2 22:51:00

(defun c:df ()    ;自動變換成適當比例的虛線
(ltchange "dashed" 3 "bylayer")
(princ)
)
(defun ltchange (type1 scale color / oce lts lin n nam len leg sca) ;自動變換成適當比例的中心線
(setq oce (getvar "cmdecho")
       lts (getvar "ltscale"))
(setvar "cmdecho" 0)
(setq n 0)
(princ (strcat "\\nSelect object change to " type1 ":"))
(if (setq lin (ssget \'((0 . "ARC,CIRCLE,*LINE,ELLIPSE")))) (progn
(repeat (sslength lin)
   (setq nam (ssname lin n))
   (command "lengthen" nam "")
   (setq LEN (getvar "perimeter"))
   (cond
    ((&gt; 2 len 0) (setq leg 2))
    ((&gt; 5 len 2) (setq leg 6))
    ((&gt; 30 len 5) (setq leg 20))
    ((&gt; 50 len 30) (setq leg 40))
    ((&gt; 100 len 50) (setq leg 75))
    ((&gt; len 100) (setq leg 100))
   );end cond
   (setq sca (/ leg scale lts 2))
   (command "-linetype" "l" type1 "acad.lin" "" "")
   (command "change" nam "" "p" "c" color "lt" type1 "s" SCA "") ;_ end of command
   (setq n (1+ n))
);end repeat
));end if
(setvar "cmdecho" oce)
(princ)
);_ end of defun


是这样吧我怎么试就是不行呢


[此贴子已经被作者于2010-5-1 20:42:48编辑过]

jiajun_16888 发表于 2010-5-3 08:48:00

谢啦 我又试了下 可以了ssget \'((0 . "ARC,CIRCLE,*LINE,ELLIPSE"))把里面的\去掉就可以了

dcc1973 发表于 2010-5-7 11:41:00

还是不行啊,df \nSelect object change to dashed:; 错误: 参数太多<br/>是不是版本不同啊&nbsp;&nbsp;我是CAD2004的&nbsp;&nbsp;&nbsp;&nbsp; 把矩形及多段线打散也可以的<br/><br/>帮忙再改下

ZZXXQQ 发表于 2010-5-7 21:12:00

回9楼:看8楼的改动。
页: [1]
查看完整版本: 可以自动改变直线圆等的线形比例 ,但不能改变矩形及多段线的 请修改一下