我有一点时间玩这个,所以我想给你一些代码来试用。
同样,不美观,没有错误检查等。
- (defun c:test (/ clyr dwidth wwidth ln lnpt1 lnpt2 pt pt1 pt2 crc doorln offln sideln1 sideln2 sideln3 sideln4 offang offpt1 offpt2 newang newpt)
- (setq clyr (getvar "CLAYER"))
- (setq dwidth (getreal "\nEnter Door Width: "))
- (setq wwidth (getreal "\nEnter Wall Width: "))
- (setq pt (getpoint "\nSelect Point for Circle: "))
- (command "._circle" pt (/ dwidth 2))
- (setq ln (nentselp pt))
- (setq crc (entsel "\nSelect Circle on Wall Side: "))
- (command "._trim" ln "" crc "")
- (command "._trim" crc "" ln "")
- (setq lnpt1 (polar pt (cdr (assoc 50 (entget (car crc)))) (/ dwidth 2)))
- (setq lnpt2 (polar pt (cdr (assoc 51 (entget (car crc)))) (/ dwidth 2)))
- (entdel (car crc))
- (setq sideln1 (nentselp lnpt1))
- (setq sideln2 (nentselp lnpt2))
- (setvar "CLAYER" "ceiling")
- (command "._offset" wwidth sideln1 (cadr crc) "")
- (setq sideln3 (entlast))
- (command "._offset" wwidth sideln2 (cadr crc) "")
- (setq sideln4 (entlast))
- (entmakex (list (cons 0 "LINE")
- (cons 10 lnpt1)
- (cons 11 lnpt2)))
- (setq doorln (entlast))
- (command "._offset" wwidth doorln (cadr crc) "")
- (setq offln (entlast))
- (setq offang (angle (cdr (assoc 10 (entget doorln)))(cdr (assoc 10 (entget offln)))))
- (setq offpt1 (cdr (assoc 10 (entget offln))))
- (setq offpt2 (cdr (assoc 11 (entget offln))))
- (setvar "CLAYER" "building")
- (entmakex (list (cons 0 "LINE")
- (cons 10 (cdr (assoc 10 (entget doorln))))
- (cons 11 (cdr (assoc 10 (entget offln))))))
- (entmakex (list (cons 0 "LINE")
- (cons 10 (cdr (assoc 11 (entget doorln))))
- (cons 11 (cdr (assoc 11 (entget offln))))))
- (setvar "CLAYER" "door")
- (setq pt1 (getpoint "\nSelect Hinge Point: "))
- (setq pt3 (polar pt1 offang dwidth))
- (command "._pline" "_non" pt1 pt3 "")
- (setq newang (angle pt lnpt1))
- (setq newpt (polar pt1 (- newang offang) dwidth))
- (if (equal pt1 offpt2 0.000001)
- (command "._arc" pt3 "_C" pt1 offpt1)
- (command "._arc" offpt2 "_C" pt1 pt3)
- )
- (setvar "CLAYER" clyr)
- (princ)
- )
|