AutoLİSP NUTSHELL’in Temelleri – Kısım-3

Aşağıdaki resimde görebileceğiniz gibi, hesaplamamız gereken epeyce noktamız var.

Neyse ki, AutoLisp’in polar fonksiyonu bize çok yardımcı olacak bir fonksiyondur.

Polar fonksiyonu şu şekilde çalışır:

Bu fonksiyona bir nokta, bir açı ve bir mesafe verirseniz, fonksiyon birinci noktadan belirtilen açıda ve uzaklıkta ikinci bir nokta geri döndürür.

Ancak burada bir sorunumuz var. AutoLisp’deki tüm açılar radyan cinsinden verilmelidir.

Radyan nedir?

Bir radyan, bir çemberde, uzunluğu çemberin yarıçapına eşit olan yayı gören merkez açıdır. 180 / Pi formülü ile dereceye çevrilebilir.

Bunu yapmak için hızlı bir şekilde bir fonksiyon yazalım. Bu fonksiyonu, Testbeam.lsp dosyanıza ekleyin:

(defun dtr (x)     ;dereceleri radyan fonksiyonuna tanımlar.

(* pi (/ x 180.0))     ;açıyı 180’e böler ve sonar sonucu PI sabiti ile çarpar.

)     ;fonksiyonun sonu.

Tamam!. ” derecelerimizin radyana”  dönüştürülme işlemi halloldu.

Şimdi çalışacak  (polar) fonksiyonuna bir göz atalım.

(setq p2 (polar ip (dtr 180.0) (- (/ lb 2) nl)))

Burada söylediğimiz şey:

P2“değişkenini,”ip“yerleştirme noktasından 180.0 derece (radyana dönüştürülerek) bir açı ile, kirişin toplam uzunluğunun yarı uzunluğundan diş uzunluğunu çıkarttığınızda elde edilen bulunan noktaya ayarla.

Bu, “p2” noktasını hesaplar ve geri döndürür. Haydi devam edelim:

(defun c: testbeam ()     ;fonksiyonu tanımlar

;***************************************************************************************************

;Kullanıcı verilerini elde etme

(setq lb (getdist “\nKirişin boyunu girin : “))     ;kirişin boyunu elde etme

(setq hb (getdist “\nKirişin yüksekliğini girin: “))     ; kirişin yüksekliğini elde etme

(setq wt (getdist “\nKirişin gövde kalınlığını girin: “))     ;kirişin gövde kalınlığını elde etme

(setq ep (getdist “\nKirişin uç plaka kalınlığını girin: “))     ;kirişin uç plaka kalınlığını elde etme

(setq nl (getdist “\n Dişin uzunluğu : “))             ; Dişin uzunluğunu elde etme

(setq nd (getdist “\nDişin derinliği: “))               ; Dişin derinliğini elde etme

;Kullanıcı Veri Girişinin Sonu

;***************************************************************************************************

;Yerleştirme Noktasını Elde etme

(setq ip (getpoint “\nYerleştirme Noktası : “))    ;Yerleştirme noktasını elde etme

;***************************************************************************************************

;Kutupsal “Polar” Hesaplamalara Başlangıcı

(setq p2  (polar ip (dtr 180.0) (- (/ lb 2) nl)))

(setq p3  (polar p2 (dtr 270.0) wt))

(setq p4  (polar p2 (dtr 270.0) nd))

(setq p5  (polar p4 (dtr 180.0) nl))

(setq p6  (polar p5 (dtr 180.0) ep))

(setq p7  (polar p6 (dtr 270.0) (- hb nd)))

(setq p8  (polar p7 (dtr 0.0) ep))

(setq p9  (polar p8 (dtr 90.0) wt))

(setq p10 (polar p9 (dtr 0.0) lb))

(setq p11 (polar p8 (dtr 0.0) lb))

(setq p12 (polar p11 (dtr 0.0) ep))

(setq p13 (polar p12 (dtr 90.0) (- hb nd)))

(setq p14 (polar p13 (dtr 180.0) ep))

(setq p15 (polar p14 (dtr 180.0) nl))

(setq p16 (polar p15 (dtr 90.0) (- nd wt)))

(setq p17 (polar p16 (dtr 90.0) wt))

; Kutupsal “Polar” Hesaplamalara Sonu

;***************************************************************************************************

(princ)     ;temizlik işlemini bitirme

)              ; defun fonksiyonun sonu

;***************************************************************************************************

;Bu fonksiyon dereceleri radyan birimine dönüştürür.

(defun dtr (x)         ;radyan fonksiyonuna girecek dereceleri tanımlama

(* pi (/ x 180.0))    ;açıyı 180’e bölme ve sonucu PI sabiti ile çarpma

)                                 ;fonksiyonun sonu

;***************************************************************************************************

(princ)     ;temizlik işlemini bitirme

;***************************************************************************************************

Artık, kirişi çizmek için gereken tüm noktaları hesapladık, şimdi bizim için bu işi yapması için bir (command) fonksiyonunu eklemeliyiz.

(defun c:testbeam ()    ;fonksiyonu tanımlama

;***************************************************************************************************

;Kullanıcıdan Verileri Alma (setq lb (getdist “\nKirişin Uzunluğu : “))     ;Kirişin uzunluğunu elde etme

(setq hb (getdist “\nKirişin Yükseliği : “))                                                        ;Kirişin yüksekliğini elde etme(setq wt

(getdist “\nGövde Kalınlığı : “))                                                                          ;Gövde kalınlığını elde etme

(setq ep (getdist “\nUç plakası ;Kalınlığı : “))     ; Uç plakası kalınlığını elde etme

(setq nl (getdist “\nDişin Boyu: “))                     ; Dişin boyunu elde etme

(setq nd (getdist “\nDişin Derinliği: “))               ;Dişin derinliğini elde etme

;Kullanıcı Veri Girişleri Sonu

;***************************************************************************************************

;Yerleştirme Noktasını Elde etme

(setq ip (getpoint “\nYerleştirme Noktası : “))   ;yerleştirme noktasını elde etme

;***************************************************************************************************

; Kutupsal “Polar” Hesaplamalara Başlangıcı

(setq p2  (polar ip (dtr 180.0) (- (/ lb 2) nl)))

(setq p3  (polar p2 (dtr 270.0) wt))

(setq p4  (polar p2 (dtr 270.0) nd))

(setq p5  (polar p4 (dtr 180.0) nl))

(setq p6  (polar p5 (dtr 180.0) ep))

(setq p7  (polar p6 (dtr 270.0) (- hb nd)))

(setq p8  (polar p7 (dtr 0.0) ep))

(setq p9  (polar p8 (dtr 90.0) wt))

(setq p10 (polar p9 (dtr 0.0) lb))

(setq p11 (polar p8 (dtr 0.0) lb))

(setq p12 (polar p11 (dtr 0.0) ep))

(setq p13 (polar p12 (dtr 90.0) (- hb nd)))

(setq p14 (polar p13 (dtr 180.0) ep))

(setq p15 (polar p14 (dtr 180.0) nl))

(setq p16 (polar p15 (dtr 90.0) (- nd wt)))

(setq p17 (polar p16 (dtr 90.0) wt))

;Kutupsal “Polar” Hesaplamalara Sonu

;***************************************************************************************************

;Command Fonksiyonunun Başlangıcı

(command “Line” ip p2 p4 p6 p7 p12 p13 p15 p17 “c”

“Line” p3 p16 “”

“Line” p9 p10 “”

“Line” p5 p8 “”

“Line” p11 p14 “”

) ; Command fonksiyonunu sonlandırma

; Command Fonksiyonunun Sonu

;***************************************************************************************************

(princ)     ;işlemleri temizleme

)              ; defun fonksiyonunu sonlandırma

;***************************************************************************************************

(defun dtr (x)         ;radyan fonksiyonuna girecek dereceleri tanımlama

(* pi (/ x 180.0))    ;açıyı 180’e bölme ve sonucu PI sabiti ile çarpma

)              ;fonksiyonun sonu

;***************************************************************************************************

(princ)     ;temizlik işlemini bitirme

;***************************************************************************************************

;Bu fonksiyon dereceleri radyan birimine dönüştürür.

(defun dtr (x)         ;radyan fonksiyonuna girecek dereceleri tanımlama

(* pi (/ x 180.0))    ;açıyı 180’e bölme ve sonucu PI sabiti ile çarpma

)                                 ;fonksiyonun sonu

;***************************************************************************************************

princ)      ;yüklemeyi temizleme

;***************************************************************************************************

Artık tamam. Programı yükleyelim ve çalıştıralım.

Şimdi, nesne çıtçıtının nasıl ayarlandığına bağlı olarak kiriş doğru şekilde çizilebilir de çizilmeyebilir de. Benim sistemimde düzgün çizilmedi. Bunun nedeni, nesne çıtçıtı kesişme “intersection” noktası olarak ön tanımlı olması ve AutoCAD’in , yanlış noktayı yakalamaya çalışmasıdır. Ayrıca ekranda sinir bozucu “artı noktaları” var. 4. kısımda bu problemleri nasıl çözeceğinizi anlatacağım. Daha sonra görüşmek üzere…

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Katman Sarma Hakkında

Kompozit duvar katmanları, duvarın ek yerlerinde ve uç başlarında sarılabilir. Duvarın uçlarına sarılacak bileşik duvar …

Bir cevap yazın

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.