Minggu, 22 Oktober 2023

Belajar Autolisp dengan Praktek Langsung - 9. Menggambar Ukuran Kertas A4 dengan Manipulasi List (Fungsi List, Car, Cdr)

Selain menggunakan polar, cara lainnya yaitu dengan manipulasi list, dengan fungsi list, car dan cdr. Selain fungsi tersebut terdapat juga fungsi cons dan append untuk manipulasi list.

Fungsi List berfungsi untuk membuat data list

format fungsi list pada BricsCAD V22 - Developer Reference :

(list  [ item [ item [ item ... ]]] )

- item : apapun berupa list atau atom list 

contoh penggunaan 

(list 1 2 3 4) -> (1 2 3 4)

Fungsi car berfungsi untuk mendapatkan elemen list yang pertama

format fungsi car pada BricsCAD V22 - Developer Reference :

(car  lst)

- lst : list atau dottetpair, bisa juga NIL (list kosong / ()), bingung? lain kali dibahas ya. sementara list dulu.

contoh penggunaan 

(car '(1 2 3 4)) -> 1

Fungsi cdr berfungsi untuk mendapatkan list tanpa elemen pertama.

format fungsi cdr pada BricsCAD V22 - Developer Reference :

(cdr  lst)

contoh penggunaan 

(cdr '(1 2 3 4)) -> (2 3 4)


(defun c:ka4( / panjang lebar ttk1 ttk2 ttk3 ttk4 koorx koory)
(setq panjang 297)
(setq lebar 210)
(setq ttk1 (getpoint "Tentukan titik sisip kertas..."))
(setq koorx (car ttk1))
(setq koory (car (cdr ttk1)))
(setq koorx (+ koorx panjang))
(setq ttk2 (list koorx koory))
(setq koory (+ koory lebar))
(setq ttk3 (list koorx koory))
(setq koorx (- koorx panjang))
(setq ttk4 (list koorx koory))
(command "line" ttk1 ttk2 ttk3 ttk4 ttk1 "")
(princ)
)


---000---

Jumat, 13 Oktober 2023

Belajar Autolisp dengan Praktek Langsung - 8. Menggambar Ukuran Kertas A4 dengan Perintah Fungsi Command secara Interaktif dengan Fungsi Polar

Menggambar Ukuran Kertas A4 dengan Perintah Fungsi Command 

Interaktif disini maksudnya saat program berjalan pengguna bisa berinteraksi dengan Bricscad/ Autocad. Misal titik awal penggambaran kertasnya adalah diserahkan pengguna, yaitu dengan memilih titik pada layar. 

Untuk memilih titik pada layar fungsi yang digunakan adalah fungsi getpoint

format fungsi getpoint  pada BricsCAD V22 - Developer Reference :

(getpoint  [ refPoint ]  [ prompt ] )

refPoint : (opsional) titik acuan 2d/3d; jika ditentukan, digunakan sebagai titik awal rubberband; jika dihilangkan, '(0 0) digunakan

prompt : (opsional) teks pada command prompt yang akan ditampilkan; jika dihilangkan, prompt standar akan ditampilkan

fungsi getpoint ini akan mengembalikan list berupa koordinat 3D (x y z), setelah data titik awal diperoleh maka data titik-titik berikutnya bisa diperoleh dari ukuran panjang dan lebar ukuran kertas. Fungsi yang paling banyak digunakan (mungkin karena kemudahannya) adalah polar.

Fungsi Polar digunakan untuk mencari titik terhadap suatu titik lain dengan argument titik, sudut dan jarak.

format fungsi polar  pada BricsCAD V22 - Developer Reference :

(polar point angle distance)

point : titik acuan

angle : sudut, dalam radian

distance : jarak

pada fungsi polar satuan sudut tidak menggunakan derajat melain radian, dimana pi rad = 180 derajat.

Untuk kemudahannya fungsi berikut adalah fungsi untuk mengubah dari derajat ke radian:

(defun d2r (derajat) (* pi (/ derajat 180.0)))

berikut kodenya

(defun c:ka4( / oldos d2r panjang lebar ttk1 ttk2 ttk3 ttk4)
(setq oldos (getvar "OSMODE"))
(setvar "OSMODE" 0)
(defun d2r (derajat) (* pi (/ derajat 180.0)))
(setq panjang 297)
(setq lebar 210)
(setq ttk1 (getpoint "Tentukan titik sisip kertas..."))
(setq ttk2 (polar ttk1 (d2r 0) panjang))
(setq ttk3 (polar ttk2 (d2r 90) lebar))
(setq ttk4 (polar ttk3 (d2r 180) panjang))
(command "line" ttk1 ttk2 ttk3 ttk4 ttk1 "")
(setvar "OSMODE" oldos)
(princ)
)


catatan:

- (setq ttk4 (polar ttk3 (d2r 180) panjang)) bisa juga diganti dengan (setq ttk4 (polar ttk1(d2r 90) lebar))

- fungsi d2r bisa juga diletakkan diluar program, tetapi fungsi ini akan tetap ada meskipun program selesai berjalan.



Rabu, 11 Oktober 2023

Belajar Autolisp dengan Praktek Langsung - 7. Menggambar Ukuran Kertas A4 dengan Perintah Fungsi Command secara Sederhana


Menggambar Ukuran Kertas A4 dengan Perintah Fungsi Command 

Metode untuk menggambar dengan autolisp :

1. Metode "command", metode ini paling mudah digunakan. Dalam pembuatan codenya seperti menggambar dengan memasukkan perintah-perintah pada command prompt.

2. Metode "activex", metode ini menggunakan cara-cara seperti dalam visual basic application.

3. Metode "entmake", metode ini langsung dengan mengubah data base Bricscad/ Autocad

Untuk menggambar garis persegi panjang sesuai ukuran keras meskipin kelihatan sederhana, pembuatan program ini nantinya akan banyak menggunakan fungsi-fungsi yang ada di autolisp. Disini akan digunakan cara bertahap, dari yang paling mudah terlebih dahulu kemudian bertahap ke yang lebih komplek. Untuk membuat gambar dengan autolisp diperlukan pemahaman cara menggambar sesuai prosedur baku penggambaran dalam Bricscad/ Autocad. Jadi bagi para pengguna Bricscad/ Autocad yang belajarnya secara praktis silahkan baca-baca materi menggambar Autocad dari dasar (yang isinya koordinat UCS danWCS, input kooordinat secara relatif maupun absolut, perintah membuat objek/ entity dengan urutan perintah serta opsi-opsinya)

Ukuran kertas A4 : 297mm x 210mm

Fungsi Command

Fungsi command berfungsi menjalankan perintah Bricscad/ Autocad

Format fungsi command di BricsCAD V22 - Developer Reference adalah sebagai berikut : 

(command  [ item1 [ item2 ... ]] )

item1 : perintah atau opsi BricsCAD asli apa pun, atau ekspresi Lisp apa pun yang valid
item2 : perintah atau opsi BricsCAD asli apa pun, atau ekspresi Lisp apa pun yang valid

Karena fungsi command bekerja dengan berinteraksi dengan Bricscad/ Autocad maka saat menjalankan program opsi entity snap (ESNAP di Bricscad/ OSNAP di Autocad) perlu dimatikan semua. Daripada mematikan ESNAP setiap kali mau menjalankan program, maka proses mematikan/menghidupkan dilakukan didalam program. Fungsi yang digunakan adalah fungsi setvar dan getvar.

Format fungsi setvar di BricsCAD V22 - Developer Reference adalah sebagai berikut : 
(setvar sysvar value)

Format fungsi getvar di BricsCAD V22 - Developer Reference adalah sebagai berikut : 
(getvar  sysvar)

sysvar : string atau simbol, yaitu nama variabel sistem, untuk ESNAP adalah "OSMODE"
value : nilai yang akan diberikan (integer, string, double, ...), bergantung pada SystemVariable tertentu

Untuk memudahkan prosedur penggambaran titik awal penggambaran dimulai dari titik 0,0 dan untuk sekarang setiap penggambaran satu ukuran kertas akan dijalankan dengan satu perintah :

Kertas A4,
titik ke-1 : 0,0
titik ke-2 : 297,0
titik ke-3 : 297,210
titik ke-4 : 0,210

Cara 1
Cara ini langsung memasukkan koordinat sebagai teks biasa. dengan tipe objek garis/ line, dan menggunakan acuan koordinat absolut.

codenya adalah sebagai berikut :

(defun c:ka4( / oldos)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0) 
(command "line" "0,0" "297,0" "297,210" "0,210" "0,0" "")
(setvar "osmode" oldos)  
(princ))

untuk mengakhiri perintah line dengan "" yang sama dengan menekan tombol [enter]

bisa juga dengan menyimpan titik-titik tersebut kedalam sebuah variabel

 (defun c:ka4( / oldos ttk1 ttk2 ttk3 ttk4)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ttk1 "0,0"
      ttk2 "297,0"
      ttk3 "297,210"
      ttk4 "0,210")
(command "line" ttk1 ttk2 ttk3 ttk4 ttk1 "")
(setvar "osmode" oldos) 
(princ)
)

Cara 2
Cara ini langsung memasukkan koordinat sebagai teks biasa. dengan tipe objek garis/ line, dan menggunakan acuan koordinat relatif.

codenya adalah sebagai berikut :

(defun c:ka4( oldos)  
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "line" "0,0" "@297,0" "@0,210" "@-297,0" "@0,-210" "")
(setvar "osmode" oldos) 
(princ)
)

tentu saja nilai-nilai relatif ini bisa saja disimpan dalam variabel, tetapi karena sifatnya relatif mungkin penamaan variabelnya agar mudah dibaca seperti ini....

(defun c:ka4( / oldos awal kekanan297 keatas210 kekiri297 kebawah210)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0) 
(setq awal "0,0" 
     kekanan297 "@297,0" 
     keatas210 "@0,210" 
     kekiri297 "@-297,0" 
     kebawah210 "@0,-210") 
(command "line" awal kekanan297 keatas210 kekiri297 kebawah210 "")
(setvar "osmode" oldos) 
(princ) 
)

Cara 3
Cara ini dengan memasukkan koordinat sebagai data list. dengan tipe objek garis/ line.
List adalah format dasar dalam autolisp, bahkan program Autolisp sendiri adalah List. (Lisp adalah singkatan dari List Processing). Titik koordinat dalam Bricscad/Autocad dalam Autolisp bisa berupa titik 2D maupun 3D.
2D -> (x y)
3D -> (x y z)
Untuk tipe garis data titiknya boleh 2D maupun 3D.

codenya adalah sebagai berikut :

(defun c:ka4( / oldos )
(setq oldos (getvar "osmode"))
(setvar "osmode" 0) 
(command "line" '(0 0) '(297 0) '(297 210) '(0 210) '(0 0) "")
(setvar "osmode" oldos) 
(princ)
)



atau 

(defun c:ka4( / oldos ttk1 ttk2 ttk3 ttk4)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0) 
(setq ttk1 '(0 0)
          ttk2  '(297 0)
          ttk3  '(297 210)
          ttk4 '(0 210) )
(command "line" ttk1 ttk2 ttk3 ttk4 ttk1 "")
(setvar "osmode" oldos) 
(princ)
)


Selanjutnya untuk titik akan digunakan format list, karena memang nantinya fungsi-fungsi dalam Autolisp adalah memanipulasi data list.

Untuk menggambar dititik yang lain perlu dihitung lagi titik-titiknya, misal jika dimulai dari titik 150,150 codenya menjadi seperti berikut :

(defun c:ka4( / oldos ttk1 ttk2 ttk3 ttk4)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0) 
(setq ttk1 '(150 150)
          ttk2  '(447 150)
          ttk3  '(447 360)
          ttk4 '(150 360) )
(command "line" ttk1 ttk2 ttk3 ttk4 ttk1 "")
(setvar "osmode" oldos) 
(princ)
)

Pada materi kali ini sengaja dibuat dengan perintah yang sederhana dan statis, tetapi dibuat dengan banyak cara dengan harapan ada pemahaman bahwa untuk membuat program dengan hasil akhir yang sama ada banyak cara. Cara mana yang paling baik? Tentu saja tergantung......
Pada materi berikutnya program akan dibuat lebih interaktif.

Selasa, 10 Oktober 2023

Belajar Autolisp dengan Praktek Langsung - 6. Menggabung String dengan Fungsi strcat dan Konversi Data Bilangan ke String

Format fungsi strcat di BricsCAD V22 - Developer Reference adalah sebagai berikut :

(strcat [ stringA [ stringB ... ] ] )

Fungsi ini digunakan untuk menggabungkan semua string masukan yang disediakan stringA, stringB, ...


contoh 1

 (strcat "saya " "sedang " "belajar " "autolisp ")

jika kita ketikkan langsung di command prompt :


: (strcat "saya " "sedang " "belajar " "autolisp ") [enter]

"saya sedang belajar autolisp "


contoh 2

(setq a "saya ")

(setq b "sedang ") 

(setq c "belajar ")

(setq d "autolisp ")

(strcat a b c d)

jika kita ketikkan langsung di command prompt :

: (setq a "saya ") [enter]

"saya "

: (setq b "sedang ") [enter]

"sedang "

: (setq c "belajar ") [enter]

"belajar "

: (setq d "autolisp ") [enter]

"autolisp "

: (strcat a b c d) [enter]

"saya sedang belajar autolisp "


Program f2c bisa dirubah agar lebih ringkas :

(defun c:f2c ( / f)

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

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

(princ (strcat "Nilai Fahrenheit : " (rtos f 2 1) "\n"))

(princ (strcat "Nilai Celcius : " (rtos (+ (* (/ 9.0 5.0)  f) 32) 2 2) ))

(princ)

)


Argument fungsi strcat memerlukan jenis data/ variabel berupa deretan huruf, atau dalam pemrograman disebut dengan jenis data "string". Untuk mengubah data dari bilangan real ke data string yaitu dengan fungsi rtos.

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

(rtos number [ mode [ precision ] ] )

keterangan :
  * number : bilangan yang akan diubah menjadi string
  * mode :  
       1 scientific
       2 decimal
       3 engineering
       4 architectural
       5 fractional
 * precision : jumlah  desimal yang dinginkan

Kamis, 05 Oktober 2023

Belajar Autolisp dengan Praktek Langsung - 4. Menyimpan Nilai (variabel) dengan fungsi set/ setq

 Pada program sebelumnya 

(defun c:f2c()

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

Pada fungsi (getreal "Berapa Fahrenheit : "), nilai yang kita masukan/ketik, bisa kita simpan dalam suatu variabel, misalnya f, sehingga program yang dibuat lebih mudah terbaca dan bisa digunakan berulang-ulang. Fungsi untuk menyimpan nilai kedalam suatu variabel yaitu set dan setq.

Fungsi Set

(defun c:f2c()

(set 'f  (getreal "Berapa Fahrenheit : "))

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



Fungsi Setq

(defun c:f2c()

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

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

sepintas mirip ya, perhatikan tanda petik (quote) sebelum huruf f pada fungsi set. Setq sama saja dengan set quote. Pada prakteknya nanti seringnya fungsi setq ini yang sering dipakai, tetapi fungsi set sebenarnya lebih fleksible (karena dengan fungsi set bisa membuat variabel saat program berjalan, atau kerennya saat "run time")

contoh lain, misal kita ingin menghitung luas empat persegi panjang

(defun c:lpp()

(setq p  (getreal "Panjang : "))

(setq l  (getreal "lebar : "))

(* p l)
)

variabel yang sudah kita buat pada contoh diatas (f, p, l) tidak hilang setelah program selesai, bisa dicek dengan perintah !f, !p, !l pada command prompt.



Variabel seperti ini istilahnya adalah variabel global. Variabel global ini,  untuk alasan "security pemrograman", mestinya secara otomatis hilang saat program selesai ( atau memang jika betul-betul diperlukan baru tidak hilang). Variabel yang hilang saat program (atau fungsi) saat selesai dijalankan dinamakan variable lokal, dalam autolisp dibuat dengan cara menulisan variabel-variabel tersebut di dalam parameter fungsinya setelah tanda slash\ forward slash (/).

contoh 1:

(defun c:f2c( / f)

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

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

contoh 2 :

(defun c:lpp( / p l)

(setq p  (getreal "Panjang : "))

(setq l  (getreal "lebar : "))

(* p l)
)








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.