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