jiajun_16888 发表于 2010-5-19 18:56:00

[求助]下面程序选择时不能选到矩形,请版主帮忙改改

本帖最后由 作者 于 2010-5-19 23:46:21 编辑 <br /><br /> <p></p><p>&nbsp; ((&gt; 2 len 0) (setq leg 2))<br/>&nbsp;&nbsp;&nbsp; ((&gt; 5 len 2) (setq leg 6))<br/>&nbsp;&nbsp;&nbsp; ((&gt; 30 len 5) (setq leg 20))<br/>&nbsp;&nbsp;&nbsp; ((&gt; 50 len 30) (setq leg 40))<br/>&nbsp;&nbsp;&nbsp; ((&gt; 100 len 50) (setq leg 75))<br/>&nbsp;&nbsp;&nbsp; ((&gt; len 100) (setq leg 100))</p><p>下面程序选择时不能选到矩形,请版主帮忙改改</p><p>我想把上面的线形比例功能添加到下面程序中&nbsp; 谢谢 </p><p>(defun c:cs (/&nbsp; oce lin n nam tab pt1 pt2 x1 x2 y1 y2 len sca otyp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; osca col typ col)&nbsp;&nbsp;;auto change linescale(dashed and center)<br/>&nbsp; <br/>&nbsp; (setvar "cmdecho" 0)<br/>&nbsp;&nbsp;&nbsp; (if (not (setq lin (ssget "_i" '(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "&lt;AND")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "&lt;OR")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6 . "DASHED")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6 . "CENTER")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6 . "HID")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6 . "HIDDEN")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "OR&gt;")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-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 . "ARC")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "OR&gt;")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "AND&gt;")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))))<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\nPlease Select dashed or center: ")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lin (ssget '(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "&lt;AND")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "&lt;OR")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6 . "DASHED")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6 . "CENTER")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6 . "HID")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6 . "HIDDEN")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "OR&gt;")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-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 . "ARC")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "OR&gt;")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "AND&gt;")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )))<br/>&nbsp;&nbsp;&nbsp; );end progn<br/>&nbsp; );end if<br/>&nbsp; (setq&nbsp;oce (getvar "cmdecho")<br/>&nbsp;lts (getvar "ltscale")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n 0<br/>&nbsp;);end setq<br/>&nbsp; (if lin<br/>&nbsp; (repeat (sslength lin)<br/>&nbsp;&nbsp;&nbsp; (setq nam (ssname lin n)<br/>&nbsp;&nbsp; tab (entget nam)<br/>&nbsp;&nbsp; typ (cdr (assoc 6 tab))<br/>&nbsp;&nbsp; otyp (cdr (assoc 0 tab))<br/>&nbsp;&nbsp;&nbsp; )</p><p>&nbsp;&nbsp;&nbsp; (if&nbsp;(= otyp "CIRCLE")<br/>&nbsp;(setq rad (cdr (assoc 40 tab))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len (* 2 (* 3.14 rad))<br/>&nbsp; );END setq<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;如是圓實體取周長為"len"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= otyp "ARC")<br/>&nbsp;&nbsp; (setq rad (cdr (assoc 40 tab))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len (* 3.14 rad)<br/>&nbsp;&nbsp; );end setq<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;如是圓弧取其圓周長一半&nbsp; <br/>&nbsp;(progn<br/>&nbsp;&nbsp; (setq&nbsp;pt1 (assoc 10 tab)<br/>&nbsp;&nbsp;pt2 (assoc 11 tab)<br/>&nbsp;&nbsp;x1&nbsp; (cadr pt1)<br/>&nbsp;&nbsp;y1&nbsp; (caddr pt1)<br/>&nbsp;&nbsp;x2&nbsp; (cadr pt2)<br/>&nbsp;&nbsp;y2&nbsp; (caddr pt2)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (setq&nbsp;len<br/>&nbsp;&nbsp; (sqrt (+ (* (- x1 x2) (- x1 x2)) (* (- y1 y2) (- y1 y2)))<br/>&nbsp;&nbsp; );end sqrt<br/>&nbsp;&nbsp; );end setq<br/>&nbsp;);end progn&nbsp;&nbsp;;如是直線由x,y坐標求長度<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );end if<br/>&nbsp;&nbsp;&nbsp; );end if<br/>&nbsp; (cond<br/>&nbsp;&nbsp;&nbsp; ((= typ "DASHED")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq sca (/ len 3 lts)<br/>&nbsp;&nbsp;&nbsp; col "bylayer"<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; ((= typ "CENTER")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq sca (/ len 5 lts)<br/>&nbsp;&nbsp;&nbsp; col "magenta"<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; ((= typ "HID")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq sca (/ len 5 lts)<br/>&nbsp;&nbsp;&nbsp; col "bylayer"<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; ((= typ "HIDDEN")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq sca (/ len 14 lts)<br/>&nbsp;&nbsp;&nbsp; col "bylayer"<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; );end cond<br/>&nbsp;&nbsp;&nbsp; (command "change" nam "" "p" "s" sca "c" col "")<br/>&nbsp;&nbsp;&nbsp; (setq n (+ n 1))<br/>&nbsp; );end repeat<br/>&nbsp;&nbsp;&nbsp; (alert "\nNo Selection!")<br/>&nbsp;&nbsp;&nbsp; );end if</p><p>&nbsp; (setvar "cmdecho" oce)<br/>&nbsp; (princ)<br/>)<br/></p>

jiajun_16888 发表于 2010-5-19 20:31:00

本帖最后由 作者 于 2010-5-19 23:16:48 编辑 <br /><br /> <p>下面是你以前给我写过的一个程序 </p><p>(defun ltchange (type1 scale color / oce lts lin n nam len leg sca) ;自動變換成適當比例的中心線<br/>&nbsp;(setq oce (getvar "cmdecho")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lts (getvar "ltscale"))<br/>&nbsp;(setvar "cmdecho" 0)<br/>&nbsp;(setq n 0)<br/>&nbsp;(princ (strcat "<a href="file://nSelect/">\\nSelect</a> object change to " type1 ":"))<br/>&nbsp;(if (setq lin (ssget '((0 . "ARC,CIRCLE,*LINE,ELLIPSE")))) (progn<br/>&nbsp; (repeat (sslength lin)<br/>&nbsp;&nbsp; (setq nam (ssname lin n))<br/>&nbsp;&nbsp; (command "lengthen" nam "")<br/>&nbsp;&nbsp; (setq LEN (getvar "perimeter"))<br/>&nbsp;&nbsp; (cond<br/>&nbsp;&nbsp;&nbsp; ((&gt; 2 len 0) (setq leg 2))<br/>&nbsp;&nbsp;&nbsp; ((&gt; 5 len 2) (setq leg 6))<br/>&nbsp;&nbsp;&nbsp; ((&gt; 30 len 5) (setq leg 20))<br/>&nbsp;&nbsp;&nbsp; ((&gt; 50 len 30) (setq leg 40))<br/>&nbsp;&nbsp;&nbsp; ((&gt; 100 len 50) (setq leg 75))<br/>&nbsp;&nbsp;&nbsp; ((&gt; len 100) (setq leg 100))<br/>&nbsp;&nbsp; );end cond<br/>&nbsp;&nbsp; (setq sca (/ leg scale lts 2))<br/>&nbsp;&nbsp; (command "-linetype" "l" type1 "acad.lin" "" "")<br/>&nbsp;&nbsp; (command "change" nam "" "p" "c" color "lt" type1 "s" SCA "") ;_ end of command<br/>&nbsp;&nbsp; (setq n (1+ n))<br/>&nbsp; );end repeat<br/>&nbsp;));end if<br/>&nbsp;(setvar "cmdecho" oce)<br/>&nbsp;(princ)<br/>);_ end of defun</p>

ZZXXQQ 发表于 2010-5-20 19:11:00

<p>不知道这样行不:(另:我不是本版版主)<br/><br/>(defun c:cs (/&nbsp; oce lin n nam tab pt1 pt2 x1 x2 y1 y2 len sca otyp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; osca col typ col)&nbsp; ;auto change linescale(dashed and center)<br/>&nbsp;(setvar "cmdecho" 0)<br/>&nbsp;(setq oce (getvar "cmdecho")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lts (getvar "ltscale")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n 0)<br/>&nbsp;(princ "\nPlease Select dashed or center: ")<br/>&nbsp;(if (setq lin (ssget '((0 . "ARC,CIRCLE,*LINE") (6 . "DASHED,CENTER,HID,HIDDEN"))))<br/>&nbsp; (repeat (sslength lin)<br/>&nbsp;&nbsp; (setq nam (ssname lin n)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tab (entget nam)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typ (cdr (assoc 6 tab))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; otyp (cdr (assoc 0 tab)))<br/>&nbsp;&nbsp; (if (= otyp "CIRCLE")<br/>&nbsp;&nbsp;&nbsp; (setq rad (cdr (assoc 40 tab))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len (* 2 (* 3.14 rad)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;如是圓實體取周長為"len"<br/>&nbsp;&nbsp;&nbsp; (if (= otyp "ARC")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq rad (cdr (assoc 40 tab))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len (* 3.14 rad))<br/>&nbsp;&nbsp;&nbsp;&nbsp; ;如是圓弧取其圓周長一半&nbsp; <br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq pt1 (assoc 10 tab)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pt2 (assoc 11 tab)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x1&nbsp; (cadr pt1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y1&nbsp; (caddr pt1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x2&nbsp; (cadr pt2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y2&nbsp; (caddr pt2))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq len (sqrt (+ (* (- x1 x2) (- x1 x2)) (* (- y1 y2) (- y1 y2)))))<br/>&nbsp;&nbsp;&nbsp; );end progn&nbsp; ;如是直線由x,y坐標求長度<br/>&nbsp;&nbsp;&nbsp; );end if<br/>&nbsp;&nbsp; );end if<br/>&nbsp;&nbsp; (cond<br/>&nbsp;&nbsp;&nbsp; ((= typ "DASHED") (setq sca (/ len 3 lts) col "bylayer"))<br/>&nbsp;&nbsp;&nbsp; ((= typ "CENTER") (setq sca (/ len 5 lts) col "magenta"))<br/>&nbsp;&nbsp;&nbsp; ((= typ "HID") (setq sca (/ len 5 lts) col "bylayer"))<br/>&nbsp;&nbsp;&nbsp; ((= typ "HIDDEN") (setq sca (/ len 14 lts) col "bylayer"))<br/>&nbsp;&nbsp; );end cond<br/>&nbsp;&nbsp; (command "change" nam "" "p" "s" sca "c" col "")<br/>&nbsp;&nbsp; (setq n (+ n 1))<br/>&nbsp; );end repeat<br/>&nbsp; (alert "\nNo Selection!")<br/>&nbsp;);end if<br/>&nbsp;(setvar "cmdecho" oce)<br/>&nbsp;(princ)<br/>)<br/></p>

jiajun_16888 发表于 2010-5-20 22:44:00

<p>谢谢 我在你的基础上改了一下 好了&nbsp; </p><p>(setq sca (/ leg scale lts 2))&nbsp; 我想问一下这句后面的2代表什么意思<br/></p><p></p>

ZZXXQQ 发表于 2010-5-21 16:10:00

就是sca等于leg除以scale除以lts除以2
页: [1]
查看完整版本: [求助]下面程序选择时不能选到矩形,请版主帮忙改改