My LISP Code : Area Calculator
Sebelumnya saya mencoba untuk membuat kode yang memungkinkan saya untuk menghitung luasan suatu poligon tertutup. Perlu diingat bahwa kode ini masih prototype dan memerlukan penyempurnaan lebih lanjut. Dalam kesempatan kali ini saya akan menjelaskan bagaimana kode saya bekerja. Seperti ini penampakan kodenya:
(defun c:AA(/ pick bo vla_bo area)
(while
(setq pick (getpoint "\nPick internal point:"))
(command "boundary" pick "")
(setq bo (entlast))
(setq vla_bo (vlax-ename->vla-object bo))
(setq area (vla-get-area vla_bo))
(vla-delete vla_bo)
(entmake
(list
(cons 0 "TEXT")
(cons 1 (strcat (rtos area) " cm^2"))
(cons 10 pick)
(cons 40 5) ;text height
(cons 50 0.0) ;text rotation
)
)
(princ (strcat "\nThe area of the enclosed polygon is " (rtos area) " ^2"))
(princ)
)
)
Apakah terlihat ribet? Apakah anda sudah pusing? Tidak apa-apa, saya akan terangkan. Berikut adalah penjelasan satu persatu dari kode saya:
1. Fungsi defun digunakan untuk membuat komando sendiri (user-created command) yang nanti bisa digunakan di aplikasi AutoCAD. Saya namakan komando itu 'AA' karena mudah dijangkau dengan tangan kiri saya.
2. Pertama, saya mengambil titik yang nantinya akan menjadi titik awal untuk mendeteksi zona yang akan dihitung luasannya. Saya menggunakan fungsi getpoint dan memasukkan koordinatnya ke variabel 'pick'.
3. Akses komando boundary AutoCAD dari AutoLISP dengan fungsi command. Sintaks fungsi command menyesuaikan dengan komando AutoCAD yang digunakan.
4. Dalam AutoLISP, tidak ada cara untuk mengakses data suatu objek yang lebih teprerinci seperti luasan suatu poligon. Pertama, saya gunakan fungsi vlax-ename->vla-object untuk mengkonversi objek berbasis AutoLISP menjadi objek berbasis Visual LISP. Lalu saya masukkan ke variabel 'vla_bo'.
5. Kedua, saya akses data luasan boundary yang sudah dibuat menggunakan fungsi vla-get-area. Lalu saya masukkan ke variabel 'area'.
6. Setelah memasukkan data, saya hapus objek boundary yang sudah dibuat menggunakan fungsi vla-delete.
7. Waktunya membuat entitas teks. Ini bisa dilakukan menggunakan fungsi entmake. Didalam fungsi itu saya isi list yang berisi data dan kode DXF yang sesuai. Berikut detail nya:
- Kode DXF 0 untuk tipe entitas. Dalam konteks ini saya isi "TEXT" karena saya akan membuat teks yang memuat luasan boundary.
- Kode DXF 10 adalah titik awal peletakan teks.
- Kode DXF 40 adalah tinggi teks.
- Kode DXF 50 adalah orientasi sudut teks.
- Kode DXF 1 adalah isi teks. Saya menggunakan strcat untuk menggabungkan dua atau lebih string. String pertama adalah luasan dari boundary tersebut. Karena 'area' ini masih dalam nilai real, maka perlu dikonversi menjadi string dengan fungsi rtos. Lalu saya gabungkan dengan string " cm^2".
Ini semua dilakukan agar saat diklik, akan muncul langsung teks yang bertuliskan " ... cm^2"
8. Langkah ini opsional, namun tetap saya tambahkan. Saya menggunakan fungsi princ untuk menampilkan teks di command line yang bertuliskan "The area of the enclosed area is ... cm^2". Caranya sama seperti langkah sebelumnya.
Seperti itu detail kode penghitung luasan saya. Atas perhatiannya, saya ucapkan terimakasih.
Komentar
Posting Komentar