鈄圓管展開

  • Share this:

看懂本程式後, 可以試著改寫成 "魚形"......

另一條 "魚" !

******************************************

本程式由此開始展示:

這是斜圓管的立體圖.

這是正視圖,上面是斜的,下面是平的,

上面看懂了,下面要改斜的就容易多了.

這個圓圈圈,當然就是---- 上視圖 ---- 的樣子

這是本程式展開的示意圖.

下面是不同斜角所展開的樣子.

以下是此程式的全部, 請參考, 不再多加解釋:

===========================================

(defun C:tube() ;; 2006.12.30 modify by Ya-Kuei ;  (initerr)     ;intit error (setvar "CMDECHO" 0)    ;reset variables (setvar "osmode" 4223) (setvar "pickbox" 1) (command "undo" "m")    ;set mark

(setq ly (tblsearch "layer" "中心線")) (if (= ly nil) (command ".-layer" "n" "中心線" "c" "11" "中心線" "l" "center" "中心線" "lw" "0.25" "中心線" "") ) (setq ly (tblsearch "layer" "尺寸")) (if (= ly nil) (command ".-layer" "n" "尺寸" "c" "71" "尺寸" "lw" "0.25" "尺寸" "") ) (setq ly (tblsearch "layer" "WHITE")) (if (= ly nil) (command ".-layer" "n" "WHITE" "c" "WHITE" "WHITE" "lw" "0.5" "WHITE" "") ) (setq ly (tblsearch "layer" "YELLOW")) (if (= ly nil) (command ".-layer" "n" "YELLOW" "c" "YELLOW" "YELLOW" "lw" "0.25" "YELLOW" "") ) (setq ly (tblsearch "layer" "noprint")) (if (= ly nil) (command ".-layer" "n" "noprint" "c" "151" "noprint" "lw" "0" "noprint" "") )

;;

(prompt "\n此指令用於繪斜圓管的展開圖...")(princ)

;; ---------------------------------------------------------------- (if (= DIAd nil) (setq DIAd 0.0) (setq DIAd DIA)  ; 設DIAd為預設的 圓管 直徑 ) (prompt "\n 請輸入 圓管 直徑 < ") (princ DIAd) (princ " > : ") (setq DIA (getreal)) ; 可直接輸入 圓管 直徑 (if (= DIA nil) (setq DIA DIAd) ) (while (< DIA 0) ; 輸入值須大於或等於零. (princ "圓管 直徑 不可以小於零!!!")(princ) (prompt "\n 請輸入 圓管 直徑 : ") (setq DIA (getreal)) ; 可直接輸入 圓管 直徑 ) ;; ---------------------------------------------------------------- (if (= CHTd nil) (setq CHTd 0.0) (setq CHTd CHT)  ; 設CHTd為預設的 圓管 中心高度 ) (prompt "\n 請輸入圓管的 中心高度 < ") (princ CHTd) (princ " > : ") (setq CHT (getreal)) ; 可直接輸入 圓管的 中心高度 (if (= CHT nil) (setq CHT CHTd) ) (while (<= CHT 0) ; 輸入值須大於零. (princ " 圓管的 中心高度 不可以小於零!!!")(princ) (prompt "\n 請輸入 圓管的 中心高度 : ") (setq CHT (getreal)) ; 可直接輸入 圓管的 中心高度 ) ;; ---------------------------------------------------------------- (if (= AE1d nil) (setq AE1d 0.0) (setq AE1d AE1)  ; 設AE1d為預設的 角度 1 ) (prompt "\n 請輸入圓管的 角度 1 值 < ") (princ AE1d) (princ " > : ") (setq AE1 (getreal)) ; 可直接輸入圓管的 角度 1 值 (if (= AE1 nil) (setq AE1 AE1d) ) (while (< AE1 0) ; 輸入值須大於零. (princ " 圓管的 角度 1 值 不可以小於零!!!")(princ) (prompt "\n 請輸入圓管的 角度 1 值 : ") (setq AE1 (getreal)) ; 可直接輸入圓管的 角度 1 值 ) (setq ANG1 (/ (* AE1 pi) 180)) (setq AE2 0.0)

;; ---------------------------------------------------------------- (if (= THKd nil) (setq THKd 0.0) (setq THKd THK)  ; 設THKd為預設的 板厚 ) (prompt "\n 請輸入大小頭的 板厚 < ") (princ THKd) (princ " > : ") (setq THK (getreal)) ; 可直接輸入 板厚 (if (= THK nil) (setq THK THKd) ) (while (<= THK 0) ; 輸入值須大於零. (princ " 板厚 不可以小於零!!!")(princ) (prompt "\n 請輸入 板厚 : ") (setq THK (getreal)) ; 可直接輸入 板厚 ) ;; ---------------------------------------------------------------- (initget 1 "1 2") (setq i_od (getkword "\n 請選擇 直徑 為 外尺寸[1] 或 內尺寸[2] : ") ) (if (= i_od "1") (setq i_o "OUT") (setq i_o "IN") ) ;; ----------------------------------------------------------------

(if (= i_o "OUT") (setq DCL (- DIA THK)) (setq DCL (+ DIA THK)) ) (setq PDC (* pi DCL))  ;板中心捲成的圓周長 (setq N10 24)   ;內定的等分數 (setq NBL N10)

(setq INS (getpoint "\n 請輸入 插入點 位置 : ")) (setvar "osmode" 0)

;;

(setq SQ4 (/ NBL 4))

(setq LA10 (polar INS (/ pi 2.0) CHT)) ;AE1側曲線座標(未旋轉ANG3角度) (setq DA1 0.0 DA2 0.0) (setq YA1 (* (/ (sin ANG1) (cos ANG1)) (sin ANG3) (/ DCL 2.0))) (setq LA10 (polar LA10 (/ pi 2) YA1))  ;AE1側曲線座標(旋轉ANG3角度後的高度值) (setq LA1 LA10)

(setq LA20 INS)    ;AE2側曲線座標 (setq LA2 LA20) (setq DN20 LA20)

(setvar "CLAYER" "WHITE") (command "._line" LA1 LA2 "")     ;畫壓折線的起始端 (setq LAR1 LA1 LAR2 LA2) (setq j 0) (setq UP0 LA1 DN0 LA2) (setq j (1+ j))

(setq DAS (/ PDC NBL))   ; 等分後的單位弧長 (setq DDP (/ (* pi 2.0) NBL))   ; 等分後的 單位弳度值 (setq DA1 (+ DA1 DDP)) (setq DA2 (+ DA2 DDP))

(setq i 0) (repeat NBL (draw_line) (draw_arc) (setq i (1+ i)) ) (if (= AE2 0) (command "._line" DN20 DN2 "")     ;畫壓折線 ) (princ)

(setvar "CLAYER" "WHITE")

; ------------------------------------------------------------------------------- (reset) (princ) )

;

(defun draw_line() (if (= (rem i SQ4) (1- SQ4)) (setvar "CLAYER" "YELLOW") (setvar "CLAYER" "noprint") ) (if (= i (1- NBL)) (setvar "CLAYER" "WHITE") )

(setq LA10 (polar LA10 0 DAS)) (setq LA1 LA10) (setq YA1 (* (/ (sin ANG1) (cos ANG1)) (sin DA1) (/ DCL 2.0))) (if (>= YA1 0) (setq LA1 (polar LA1 (/ pi 2) YA1)) (setq LA1 (polar LA1 (/ (* pi 3) 2) (abs YA1))) ) (setq LA20 (polar LA20 0 DAS)) (setq LA2 LA20) (setq YA2 (* (/ (sin ANG2) (cos ANG2)) (sin DA2) (/ DCL 2.0))) (if (>= YA2 0) (setq LA2 (polar LA2 (/ (* pi 3) 2) YA2)) (setq LA2 (polar LA2 (/ pi 2) (abs YA2))) ) (command "._line" LA1 LA2 "")     ;畫壓折線 (setq DA1 (+ DA1 DDP)) (setq DA2 (+ DA2 DDP)) )

;

(defun draw_arc() (if (= (rem j 2) 1) (setq UP1 LA1 DN1 LA2) ) (if (= (rem j 2) 0) (progn (setvar "CLAYER" "WHITE") (setq UP2 LA1 DN2 LA2) (command "._arc" UP0 UP1 UP2 "")     ;畫上側圓弧線

(setq UP0 LA1) ) ) (setq j (1+ j)) )

============================================

會了嗎?

如果懂了,

還可以試著寫個 " 彎頭 " 的展開程式...

寫完了 " 斜圓管 " 的小小程式, 大概又花了兩天的時間,改良程式成 " 雙斜圓管 ",

順便連 " 彎頭 " , 也一起誕生, 讓許多 " 大魚 ", " 小魚 ", 上上下下的相望,

倒是有趣極了!!

tube_2d.lsp 下載


Tags: