Rabu, 04 Oktober 2023

Belajar Autolisp dengan Praktek Langsung - 5. Menampilkan pesan di Command Prompt dengan Fungsi Princ

Selama ini hasil program yang di buat langsung menampilkan hasilnya setelah program dijalankan, seringnya program memerlukan pesan baik sebelum suatu permintaan input (atau bahkan sebagai judul program), pesan tertentu saat program berjalan, maupun untuk menampilkan hasil program agar lebih mudah dibaca.

Fungsi Princ

Fungsi Princ adalah fungsi yang paling umum digunakan pemrogram lisp untuk menampilkan pesan.

format fungsi princ di BricsCAD V22 - Developer Reference adalah sebagai berikut :

(princ [ expression [ fileHandle ] ] )

expression  (opsional) ekspresi atau nilai Lisp apa pun; jika tidak ada, argumen sama dengan NIL 

fileHandle  (optional) referensi (handle) file dari fungsi (open); jika tidak ada argumen output diarahkanke command prompt.

 contoh pengunaannya :

(defun c:f2c ( / f)

(princ "Program untuk Konversi dari Fahrenheit ke Celcius")

(setq f (getreal "Berapa Fahrenheit : "))

(princ "Nilai Fahrenheit : ")

(princ f)

(princ "\n")

(+ (* (/ 9.0 5.0)  f) 32)
)

(princ "\n"), argumen "\n" artinya kita menyisipkan ganti baris. karakter \n dalam komputer berarti representasi dari karakter/tombol newline atau [enter]
Jika program dijalankan hasilnya seperti berikut


Jika hasil perhitungan ingin lebih "mudah terbaca", maka programnya bisa seperti ini :

(defun c:f2c ( / f)

(princ "Program untuk Konversi dari Fahrenheit ke Celcius")

(setq f (getreal "Berapa Fahrenheit : "))

(princ "Nilai Fahrenheit : ")

(princ f)

(princ "\n")

(princ "Nilai Celcius : ")

(princ (+ (* (/ 9.0 5.0)  f) 32) )

(princ)

)


Fungsi (princ) tanpa argumen berguna untuk menutup program tanpa mengembalikan nilai fungsinya, sehingga tidak muncul hasilnya dua kali/ sperti diulang silahkan dicoba dengan membuang (princ)

Selain dengan fungsi princ, untuk menampilkan pesan di command prompt bisa menggunakan fungsi Print, Print1 dan Prompt . Untuk menampilkan kotak peringatan digunakan perintah alert. Silahkan di coba.
-- 000 ---



Belajar Autolisp dengan Praktek Langsung - 3. Autolisp untuk membuat rumus interaktif dan bisa dipanggil langsung dari Bricscad/ Autocad (seperti perintah bawaaan)

Rumus yang dibuat pada materi sebelumnya menggunakan parameter sebagai input fungsinya, yang mana pengguna harus tahu jumlah dan jenis parameter yang harus digunakan, tentunya jika fungsi ini yang akan menjalankannya adalah pengguna yang tidak paham autolisp maka pengguna ini tidak bisa menggunakannya. Untuk membuat parameter (atau dinamakan argumen saat fungsi dipanggil) ini menjadi suatu input yang interakfif bisa dengan fungsi-fungsi berikut ini :

- getint : fungsi untuk mendapatkan bilangan bulat (integer)

- getreal : fungsi untuk mendapatkan bilangan nyata/pecahan (real)

- getsring : fungsi untuk mendapatkan deretan huruf (string)

- dan get-get lainnya, akan dibahas jika diperlukan


misalkan fungsi pada materi sebelumnya:

;(defun f2c(f)
(+ (* (/ 9.0 5.0) f) 32)
)

versi interaktifnya adalah sebagai berikut :

(defun f2c()
(+ (* (/ 9.0 5.0) (getreal "Berapa Fahrenheit : ")) 32)
)

load programnya, kemudian jalankan fungsinya dengan cara ketik (f2c) [enter], kemudian ketik 10, hasilnya seperti berikut pada command prompt :

: (f2c)
Berapa Fahrenheit : 10 [enter]
50.0

untuk menjalakan fungsi ini seperti perintah Bricscad, tambahkan c: sebelum nama fungsi pada program yang kita buat.

(defun c:f2c()
(+ (* (/ 9.0 5.0) (getreal "Berapa Fahrenheit : ")) 32)
)

load kembali programnya, jalankan fungsinya (sekarang bisa disebut perintah atau program) dengan ketik langsung f2c [enter]

f2c
Berapa Fahrenheit : 10 [enter]
50.0

Belajar Autolisp dengan Praktek Langsung - 2. Autolisp untuk membuat rumus

 Jika perhitungan-perhitungan yang dilakukan ternyata dilakukan berulang-ulang maka perlu dibuat suatu program (disebut fungsi/function) sehingga lebih efisien, contoh sederhana. misal untuk menghitung konversi suhu dari fahrenheit ke celcius, rumusnya adalah sebagai berikut :

                    ,

jika kita menghitung secara langsung untuk nilai F = 5, kita tuliskan di command prompt sebagai berikut:

(+ (* (/ 9.0 5.0) 5) 32)

, untuk nilai F = 10,

(+ (* (/ 9.0 5.0) 10) 32)

dan seterusnya.

Untuk efisiennya buat fungsinya sebagai berikut :

(defun f2c(f)
(+ (* (/ 9.0 5.0) f) 32)
)
, silahkan diketik baris per baris, setiap akhir baris tekan enter untuk memulai baris berikutnya, command prompt bricscad akan mengecek langsung bila tanda kurung tutup masih kurang.   

setelah enter pada baris terbawah akan menampilkan "F2C", yang artinya definisi fungsi f2c  telah dibuat.
untuk menghitung nilai F = 5, kita tinggal menjalankan fungsi tersebut dengan argumen 5

(f2c 5)



untuk menghitung nilai F = 10, 

(f2c 10)

untuk menghitung nilai F = 15, 

(f2c 15),

dan seterusnya....

Fungsi ini hanya ada pada jendela file autocad yang sedang aktif, agar fungsi ini bisa digunakan pada file autocad yang lainnya fungsi ini harus disimpan pada file selanjutnya bisa di "load" saat membutuhkannya atauapun bisa di "load" secara otomatis.

Untuk menyimpannya buka text editor (misal notepad, sublime, emacs atau sejenisnya), pada contoh ini menggunakan text editor notepad yang sudah terinstal di windows.


saat menyimpan file, ektesinya adalah .lsp, misal f2c.lsp, pilih All Files (*.*) pada Save as Type.


misal file f2c.lsp nya di simpan di Direktory D:, untuk me-loadnya gunakan perintah seperti berikut :

(load "d:\\f2c")




selanjutnya, untuk menjalakannya sama seperti di atas.



Selasa, 29 Agustus 2023

Belajar Autolisp dengan Praktek Langsung - 1. Autolisp sebagai Kalkulator Sederhana

Praktek disini dilakukan dengan BricsCAD versi 2018 tetapi bisa dilakukan

BricsCAD dan Autocad versi manapun.


1. Autolisp sebagai Kalkulator

Secara sederhana autolisp bisa dijalankan secara langsung dari command prompt

misal untuk penambahan 2 + 3, ketikkan secara langsung di command prompt :

(+ 2 3)

kemudian tekan enter.

Penjelasan :

- tanda kurung buka dan kurung tutup adalah format baku autolisp

- tanda plus adalah nama fungsi, nama fungsi bisa berupa fungsi bawaan autolisp

  maupun fungsi buatan sendiri. tanda ples adalah fungsi bawaan autolisp untuk

  penambahan, untuk fungsi-fungsi matematika lainnya misalnya :

      - pengurangan, -

      - perkalian, *

      - pembagian, /

     - akar kuadrat, sqrt

     - nilai minimal, min

     - nilai maksimal, max

     - pangkat bilangan e, exp

     - pangkat bilangan, expt

     - log basis bilangan e, log

     - nilai sin sudut dalam radian, sin

     - nilai cos sudut dalam radian, cos

     - nilai arcus tangen dalam radian, atan

     - nilai mutlak (absolut), abs

     - sisa pembagian, rem

     - nilai faktor persekutuan terbesar (FPB), gcd

     - penambahan 1, 1+

     - Pengurangan 1, 1-

- angka 2 dan 3 adalah argumen fungsi plus, yang sebenarnya argumen fungsi ples ini tidak 

  harus 2 argumen, boleh satu argumen, lebih dari dua argumen, atau tidak memiki argumen.

Untuk operasi aritmatika yang lebih komplek berikut contohnya:

untuk menghitung
 , penulisan di autolispnya sebagai berikiut :

(sqrt (/ (+ 9 3) (- 7 4))), 




Jumat, 23 Juni 2023

Fungsi vlax-curve-getDistAtParam

Fungsi autolisp kategori ActiveX ini baik contoh di Autocad maupun di Bricscad sempat membuat pusing lo. Di Bricscad contohnya cuma begini:

(setq vlaLine (vlax-ename->vla-object (entlast)))  #<VLA-OBJECT IAcadCircle 000000003A012150>
(vlax-curve-getdistatparam vlaLine 0.75)  188.669747018779

terus dikasih keterangan seperti ini :

the "distance" is a relative length value, for some curve types !
to obtain the real distance, in such cases, you need to determine the point at the parameter, and use (vlax-curve-getdistatpoint)

Di Autocad sebenarnya lebih detil penjelasannya dengan contoh yang lebih jelas pula, tetapi saya aplikasikan di objek arc (busur) yang lebih sederhana hasilnya malah "nil".

ternyata Argument Param yang dimaksud adalah harus dalam jangkauan pada fungsi vlax-curve-getStartParam dan vlax-curve-getEndParam, pada contoh di Autocad nilai vlax-curve-getStartParam adalah 0.0 dan nilai vlax-curve-getEndParam adalah 17.1546 sehingga nilai Param lebih kecil dari 0.0 atau lebih besar 17.154 akan menghasilkan nilai "nil".

berikut coba-coba fungsi nya sehingga menjadi paham : 

silahkan gambar arc dengan panjang 300

(setq objekku (car(entsel)))  => <Entity name: 772ca8a0> (Tentu saja nantinya Entity namenya berbeda)


(setq awal (vlax-curve-getStartParam objekku )) => 0.501547233590248 (nilainya bisa saja berbeda)

nilai ini adalah nilai parameter titik start kurvanya, jadi jika Argument Param diisi dengan nilai ini fungsi vlax-curve-getDistAtParam akan menghasilkan nilai 0.0 (pada parameter ini panjangnya 0.0)


(setq akhir (vlax-curve-getEndParam objekku)) => 1.55726844093916 (nilainya bisa saja berbeda)

nilai ini adalah nilai parameter titik terakhir kurvanya, jadi jika Argument Param diisi dengan nilai ini fungsi vlax-curve-getDistAtParam akan menghasilkan nilai 300.0 (pada parameter ini panjangnya 300.0)

singkatnya :

(setq panjang (vlax-curve-getDistAtParam objekku awal)) => 0.0

(setq panjang (vlax-curve-getDistAtParam objekku akhir)) => 300.0

Mudah-mudahan bermanfaat.


ps: karena kurva yang dicoba baru "arc" bisa jadi keterangan pada Bricscad pada kurva objek lain memang perlu perhatian.