;; 角度轉弧度的函數
(defun dtr (deg)
(* deg (/ pi 180.0))
)
(defun CreateRectBlockWithCircleAndArc ()
(setq p1 (getpoint "\n選擇長方形的第一個角點: "))
(setq ll (getreal "\n輸入長方形的長度: "))
(setq ww (getreal "\n輸入長方形的寬度: "))
;; 計算其餘三個角點
(setq p2 (list (+ (car p1) ll) (cadr p1)))
(setq p3 (list (+ (car p1) ll) (+ (cadr p1) ww)))
(setq p4 (list (car p1) (+ (cadr p1) ww)))
;; 計算對角線的焦點(長方形中心)和圓弧的圓心
(setq center (list (+ (car p1) (/ ll 2)) (+ (cadr p1) (/ ww 2)) 0))
(setq arcCenter (list (car p1) (+ (cadr p1) (/ ww 2)) 0))
;; 計算圓的半徑和圓弧的半徑
(setq radius (/ (distance p1 p3) 2))
(setq arcRadius (/ ww 2))
;; 創建一個臨時圖塊名稱
(setq blkname (strcat "RectBlock_" (rtos (car p1) 2 0) "_" (rtos (cadr p1) 2 0)))
;; 檢查圖塊是否已存在,如果不存在則創建
(if (not (tblsearch "BLOCK" blkname))
(progn
(entmake (list '(0 . "BLOCK") (cons 2 blkname) (cons 70 0) (cons 10 p1)))
(entmake (list '(0 . "LINE") (cons 10 p1) (cons 11 p2)))
(entmake (list '(0 . "LINE") (cons 10 p2) (cons 11 p3)))
(entmake (list '(0 . "LINE") (cons 10 p3) (cons 11 p4)))
(entmake (list '(0 . "LINE") (cons 10 p4) (cons 11 p1)))
;; 添加圓形到圖塊定義
(entmake (list '(0 . "CIRCLE") (cons 10 center) (cons 40 radius)))
;; 添加圓弧到圖塊定義
(entmake (list '(0 . "ARC")
(cons 10 arcCenter) ; 圓弧圓心
(cons 40 arcRadius) ; 圓弧半徑
(cons 50 (dtr 90)) ; 起始角度
(cons 51 (dtr 270)) ; 終止角度
))
(entmake (list '(0 . "ENDBLK")))
)
)
;; 插入圖塊,使用p1作為插入點
(command "_.insert" blkname p1 1 1 0)
(princ)
)
(CreateRectBlockWithCircleAndArc)
在這個例子當中,創建了一個圖塊,名稱使用座標命名避免重複,必且加上了線條,元,弧形等元素。