[求助]下面程序选择时不能选到矩形,请版主帮忙改改
本帖最后由 作者 于 2010-5-19 23:46:21 编辑 <br /><br /> <p></p><p> ((> 2 len 0) (setq leg 2))<br/> ((> 5 len 2) (setq leg 6))<br/> ((> 30 len 5) (setq leg 20))<br/> ((> 50 len 30) (setq leg 40))<br/> ((> 100 len 50) (setq leg 75))<br/> ((> len 100) (setq leg 100))</p><p>下面程序选择时不能选到矩形,请版主帮忙改改</p><p>我想把上面的线形比例功能添加到下面程序中 谢谢 </p><p>(defun c:cs (/ oce lin n nam tab pt1 pt2 x1 x2 y1 y2 len sca otyp<br/> osca col typ col) ;auto change linescale(dashed and center)<br/> <br/> (setvar "cmdecho" 0)<br/> (if (not (setq lin (ssget "_i" '(<br/> (-4 . "<AND")<br/> (-4 . "<OR")<br/> (6 . "DASHED")<br/> (6 . "CENTER")<br/> (6 . "HID")<br/> (6 . "HIDDEN")<br/> (-4 . "OR>")<br/> (-4 . "<OR")<br/> (0 . "LINE")<br/> (0 . "CIRCLE")<br/> (0 . "ARC")<br/> (-4 . "OR>")<br/> (-4 . "AND>")<br/> ))))<br/> (progn<br/> (princ "\nPlease Select dashed or center: ")<br/> (setq lin (ssget '(<br/> (-4 . "<AND")<br/> (-4 . "<OR")<br/> (6 . "DASHED")<br/> (6 . "CENTER")<br/> (6 . "HID")<br/> (6 . "HIDDEN")<br/> (-4 . "OR>")<br/> (-4 . "<OR")<br/> (0 . "LINE")<br/> (0 . "CIRCLE")<br/> (0 . "ARC")<br/> (-4 . "OR>")<br/> (-4 . "AND>")<br/> )))<br/> );end progn<br/> );end if<br/> (setq oce (getvar "cmdecho")<br/> lts (getvar "ltscale")<br/> n 0<br/> );end setq<br/> (if lin<br/> (repeat (sslength lin)<br/> (setq nam (ssname lin n)<br/> tab (entget nam)<br/> typ (cdr (assoc 6 tab))<br/> otyp (cdr (assoc 0 tab))<br/> )</p><p> (if (= otyp "CIRCLE")<br/> (setq rad (cdr (assoc 40 tab))<br/> len (* 2 (* 3.14 rad))<br/> );END setq<br/> ;如是圓實體取周長為"len"<br/> (if (= otyp "ARC")<br/> (setq rad (cdr (assoc 40 tab))<br/> len (* 3.14 rad)<br/> );end setq<br/> ;如是圓弧取其圓周長一半 <br/> (progn<br/> (setq pt1 (assoc 10 tab)<br/> pt2 (assoc 11 tab)<br/> x1 (cadr pt1)<br/> y1 (caddr pt1)<br/> x2 (cadr pt2)<br/> y2 (caddr pt2)<br/> )<br/> (setq len<br/> (sqrt (+ (* (- x1 x2) (- x1 x2)) (* (- y1 y2) (- y1 y2)))<br/> );end sqrt<br/> );end setq<br/> );end progn ;如是直線由x,y坐標求長度<br/> );end if<br/> );end if<br/> (cond<br/> ((= typ "DASHED")<br/> (setq sca (/ len 3 lts)<br/> col "bylayer"<br/> )<br/> )<br/> ((= typ "CENTER")<br/> (setq sca (/ len 5 lts)<br/> col "magenta"<br/> )<br/> )<br/> ((= typ "HID")<br/> (setq sca (/ len 5 lts)<br/> col "bylayer"<br/> )<br/> )<br/> ((= typ "HIDDEN")<br/> (setq sca (/ len 14 lts)<br/> col "bylayer"<br/> )<br/> )<br/> );end cond<br/> (command "change" nam "" "p" "s" sca "c" col "")<br/> (setq n (+ n 1))<br/> );end repeat<br/> (alert "\nNo Selection!")<br/> );end if</p><p> (setvar "cmdecho" oce)<br/> (princ)<br/>)<br/></p> 本帖最后由 作者 于 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/> (setq oce (getvar "cmdecho")<br/> lts (getvar "ltscale"))<br/> (setvar "cmdecho" 0)<br/> (setq n 0)<br/> (princ (strcat "<a href="file://nSelect/">\\nSelect</a> object change to " type1 ":"))<br/> (if (setq lin (ssget '((0 . "ARC,CIRCLE,*LINE,ELLIPSE")))) (progn<br/> (repeat (sslength lin)<br/> (setq nam (ssname lin n))<br/> (command "lengthen" nam "")<br/> (setq LEN (getvar "perimeter"))<br/> (cond<br/> ((> 2 len 0) (setq leg 2))<br/> ((> 5 len 2) (setq leg 6))<br/> ((> 30 len 5) (setq leg 20))<br/> ((> 50 len 30) (setq leg 40))<br/> ((> 100 len 50) (setq leg 75))<br/> ((> len 100) (setq leg 100))<br/> );end cond<br/> (setq sca (/ leg scale lts 2))<br/> (command "-linetype" "l" type1 "acad.lin" "" "")<br/> (command "change" nam "" "p" "c" color "lt" type1 "s" SCA "") ;_ end of command<br/> (setq n (1+ n))<br/> );end repeat<br/> ));end if<br/> (setvar "cmdecho" oce)<br/> (princ)<br/>);_ end of defun</p> <p>不知道这样行不:(另:我不是本版版主)<br/><br/>(defun c:cs (/ oce lin n nam tab pt1 pt2 x1 x2 y1 y2 len sca otyp<br/> osca col typ col) ;auto change linescale(dashed and center)<br/> (setvar "cmdecho" 0)<br/> (setq oce (getvar "cmdecho")<br/> lts (getvar "ltscale")<br/> n 0)<br/> (princ "\nPlease Select dashed or center: ")<br/> (if (setq lin (ssget '((0 . "ARC,CIRCLE,*LINE") (6 . "DASHED,CENTER,HID,HIDDEN"))))<br/> (repeat (sslength lin)<br/> (setq nam (ssname lin n)<br/> tab (entget nam)<br/> typ (cdr (assoc 6 tab))<br/> otyp (cdr (assoc 0 tab)))<br/> (if (= otyp "CIRCLE")<br/> (setq rad (cdr (assoc 40 tab))<br/> len (* 2 (* 3.14 rad)))<br/> ;如是圓實體取周長為"len"<br/> (if (= otyp "ARC")<br/> (setq rad (cdr (assoc 40 tab))<br/> len (* 3.14 rad))<br/> ;如是圓弧取其圓周長一半 <br/> (progn<br/> (setq pt1 (assoc 10 tab)<br/> pt2 (assoc 11 tab)<br/> x1 (cadr pt1)<br/> y1 (caddr pt1)<br/> x2 (cadr pt2)<br/> y2 (caddr pt2))<br/> (setq len (sqrt (+ (* (- x1 x2) (- x1 x2)) (* (- y1 y2) (- y1 y2)))))<br/> );end progn ;如是直線由x,y坐標求長度<br/> );end if<br/> );end if<br/> (cond<br/> ((= typ "DASHED") (setq sca (/ len 3 lts) col "bylayer"))<br/> ((= typ "CENTER") (setq sca (/ len 5 lts) col "magenta"))<br/> ((= typ "HID") (setq sca (/ len 5 lts) col "bylayer"))<br/> ((= typ "HIDDEN") (setq sca (/ len 14 lts) col "bylayer"))<br/> );end cond<br/> (command "change" nam "" "p" "s" sca "c" col "")<br/> (setq n (+ n 1))<br/> );end repeat<br/> (alert "\nNo Selection!")<br/> );end if<br/> (setvar "cmdecho" oce)<br/> (princ)<br/>)<br/></p> <p>谢谢 我在你的基础上改了一下 好了 </p><p>(setq sca (/ leg scale lts 2)) 我想问一下这句后面的2代表什么意思<br/></p><p></p> 就是sca等于leg除以scale除以lts除以2
页:
[1]