; çap ve uzunluk girilince metrik vida çizen fonksiyon (defun c:tal_civata (/ rr dd d l h hh p1 cl om) ;;; Civata listesi ;;; (list ;;; (list <çap> ) ;;; ) ; metrik vidalar için çap-adım tablosu (setq C_lst (list (list 1.000 0.250) (list 1.100 0.250) (list 1.200 0.250) (list 1.400 0.300) (list 1.600 0.350) (list 1.800 0.350) (list 2.000 0.400) (list 2.200 0.450) (list 2.500 0.450) (list 3.000 0.500) (list 3.500 0.600) (list 4.000 0.700) (list 4.500 0.750) (list 5.000 0.800) (list 6.000 1.000) (list 7.000 1.000) (list 8.000 1.250) (list 9.000 1.250) (list 10.000 1.500) (list 11.000 1.500) (list 12.000 1.750) (list 14.000 2.000) (list 16.000 2.000) (list 18.000 2.500) (list 20.000 2.500) (list 22.000 2.500) (list 24.000 3.000) (list 27.000 3.000) (list 30.000 3.500) (list 33.000 3.500) (list 36.000 4.000) (list 39.000 4.000) (list 42.000 4.500) (list 45.000 4.500) (list 48.000 5.000) (list 52.000 5.000) (list 56.000 5.500) (list 60.000 5.500) (list 64.000 6.000) (list 68.000 6.000) ) ) ;geçerli osnap ayarları alınıyor (setq om (getvar "OSMODE") oldcmdecho (getvar "cmdecho") ;Vida çapı alınıyor d (getreal "Vida çapını girin: ") ) ;Hatalı nokta yakalamasın diye osnap kapatılıyor (setvar "OSMODE" 0) (setvar "cmdecho" 0) ;Çap-adım listesinden girilen çapa karşılık vida adımı için listeden liste alınıyo (setq cl (assoc d c_lst)) ;Girlen çap değerine karşılık vida bulunuyor mu diye kontrol yapılıyor. (while (null cl) (progn ;girilen değere karşılı vida çapı bulunamadığı ;için tekrar vida çapı isteniyor (setq d (getreal "Geçersiz vida çapı.\nBaşka bir değer girin: ") ;Yeni girilen çapa karşılık vida adımı için listeden liste alınıyo cl (assoc d c_lst) ) ) ) ;Seçilen listeden adım değeri eşitleniyor (setq p (nth 1 cl) ;Vidanın toplam boyu alınıyor l (getreal "Vida boyunu girin: ") ;Vidanın dişsiz kısmının boyu alınıyor hh (getreal "Vidanın dişsiz kısmının uzunluğu(Yoksa sıfır): ") ) ;dişsiz kısmın toplam uzunluktan fazla olup olmadığı kontol ediliyor. (while (<= l hh) (setq hh (getreal "Geçersiz uzunluk.\nBaşka bir değer girin: ")) ) ;diş derinliği hesaplanıyor (setq h (* p (cos (/ pi 6)))) ;ucs world'e getiriliyor. (command "_ucs" "") ; diş profilini çizmek için ucs yeniden ayarlanıyor. (command "_ucs" "x" "90") ;diş profili içi noktlar hesaplanıyor (setq p0 (list 0 (/ p -2) 0) p1 (polar p0 (/ pi 2) (/ p 2)) p2 (polar p1 (/ pi -6) p) p3 (polar p2 (* (/ pi 6) 7) p) ) ;diş profili çizdiriliyor. (command "_pline" p1 p2 p3 "c") ; diş profilinin entitisi alınıyor (setq pr (entlast) p1 (list 0 0 0) r (/ (- d (* 2 h)) 2) p1 (polar p1 0 r) ) (command "_move" "l" "" "0,0,0" p1) (command "_scale" "l" "" p0 "0.990") (command "_ucs" "_W") ;helis çizdiriliyor (command "_helix" "0,0,0" r r "h" p (+ (- l hh) p)) (setq hel (entlast)) ;helisin merkezi yarım adım aşağıya kaydırılıyor (setq p0 (list 0.0 0.0 (/ p -2))) (command "_move" hel "" "0,0,0" p0) (command "_rotate" hel "" "0,0,0" "90") ;çizilen helis üzerinde diş profili döndürülüyor. (command "_sweep" pr "" hel) (setq vida (entlast)) ;helis siliniyor. (command "_erase" hel "") ;çizilen diş profilinin içini doldurmak için silindir çizliyor. (command "_cylinder" "0,0,0" r (- l hh)) (setq silindir1 (entlast)) ;Civatanın kafasını düzeltmek için bir küp çizilip dişten çıkarılıyor (setq p0 (list 0.0 0.0 (- (+ l (/ d 2)) hh))) (command "_box" "c" p0 "c" d) (setq box (entlast)) (command "_subtract" vida "" box "") ;Diçsiz bölüm için silindir çiziliyor. (if (/= hh 0) (command "_cylinder" "0,0,0" "d" d (* -1 hh)) ) (setq silindir2 (entlast)) ;Civata başı için altıgen çizilip extrude ediliyor. (setq p0 (list 0.0 0.0 (* -1 hh))) (command "_polygon" "6" p0 "c" (* d 0.85)) (command "_extrude" "l" "" (* d -0.7)) (setq bas (entlast)) ;Vida başının kenar yuvarlamaları için uzunluklar hesaplanıyor. (setq aa (* d 0.85 2) k (+ (/ aa 2 (cos (/ pi 6))) (/ aa (sqrt 3))) p0 (list 0 0 (- (+ (* d -0.7) (/ (- k aa) (* 2 (sqrt 3)))) hh)) ) ;Vida başının yuvarlaklığını ayarlamak için gerekli objeler çizliyor (command "_cone" p0 (/ k 2) (/ k (* -2 (sqrt 3)))) (setq koni (entlast)) (command "_cylinder" p0 "d" k (* k -1)) (setq silindir3 (entlast)) (command "_subtract" silindir3 "" koni "") (command "_subtract" bas "" silindir3 "") ;Çizilen tüm parçalar birleştirliyor. (Command "_union" vida silindir1 silindir2 bas "") ;osnap ayarları eski haline getirliyor. (setvar "OSMODE" om) (setvar "cmdecho" oldcmdecho) )