AutoLISP program: Reset property ke ByLayer

typing_keyboard.jpg

Saya termasuk yang tidak suka kalau ada yang meng-override properti objek ke selain ByLayer.

Jika saya menerima gambar yang harus saya teruskan, saya usahakan mengembalikannya ke ByLayer.

Ini adalah program AutoLISP sederhana yang mengubah properti semua objek ke ByLayer.

Yang diubah adalah:

  1. Color
  2. Line weight
  3. Line type

Silahkan copy kode dibawah ke notepad, save dengan extension .LSP.

Lalu load ke AutoCAD dan jalankan dengan perintah RST.

(defun c:rst (/ sel1)

(setq sel1 (ssget "x"))

(command "CHPROP" sel1 ""

"COLOR" "BYLAYER"

"LWEIGHT" "BYLAYER"

"LTYPE" "BYLAYER" "")

Bagi yang berminat belajar AutoLISP dari basic bersama saya (saya juga lagi belajar) bisa mengikuti tutorialnya di: http://cad-notes.com/contents/autolisp-articles/

Semoga berguna!

Mengenal Fungsi WHILE Pada Autolisp

041210_0331_MengenalFun1.png

Fungsi “while” hampir menyerupai fungsi “repeat”, tapi beda, kalau repeat fungsinya sudah jelas mengulang dengan sekian kali , tapi kalau while sangat beda dan lebih luas cara penggunaannya, fungsi while bisa di gabung pengunaanya dengan fungsi lain sehingga menjadi lebih efektif, para programer propesional sangat sering menggunakan fungsi while ini.

Gambar 1. Format utama dari fungsi while.

Kelebihannya bisa di pakai untuk mengulang, dari yang di batasai sampai yang tidak terbatas

Contoh pengulangan dengan batasan tertentu

Gambar 2. While untuk membuat daftar kordinat atau mengumpulkan.

Gambar 3. While ketika mencetak.

Gambar 4. Sama seperti gambar 3.

Contoh pengulangan yang tidak terbatas

Gambar 5. Pengulangan yang memakai while tak terbatas.

Contoh lain penggunaan while yang lebih luas

Gambar 6. Fungsi while di gabung dengan fungsi cond dan getstring.

Gambar 7. Fungsi while di gabung dengan cond, nul dan getdist.

Gambar 8. Fungsi while dengan progn, getdist, getpoint dll.

Mencari Kekeliruaan di Program DCL

041010_0331_MencariKeke1.png

“Saya coba memodifikasi program tersebut menjadi lebih detail namun gak bisa proses. Gambar tidak muncul di previewnya dan bila di OK programnya tidak membuat gambar…”

Anda bisa buka topik yang dibicarakan dan bisa mengunduh kode lisp, dcl maupun slide, pada kalimat di bawah ini

[url]http://forum.tentangcad.com/viewtopic.php?f=6&t=503[/url]

Kalimat paling atas sering di temui, ketika programer pemula membuat program Autolisp maupun DCL nya, keluhan tersebut adalah saya sunting dari sebuah topik yang di sampaikan oleh rekan kita, yaitu Bung “Pither”, saya bukan untuk mengekspos Bung Pither, tapi saya akan mempersembahkan buat semua pembaca tutorial ini, “cara mencari di mana letak kekeliruan” kode Autolisp maupun pada dclnya, hal ini paling sering di temui oleh programer pemula, sangat beruntung Bung Pither punya masalah “tidak” di telan sendiri, tetapi di lempar ke forum yang tepat sehingga saya bisa ikut memecahkan permasalahan yang di hadapinya. Kesulitan yang di hadapi oleh Bung Pither merupakan inspirasi buat saya lebih korektif melihat dan mencari kekeliruan pada setiap kode.

Pertama kita akan bahas dulu kode dclnya, mengapa kode dcl ini tidak bisa tampil ketika kode lisp sudah di panggil

Gambar 1. Sebuah kode dcl yang akan di cari kekeliruannya.

Langkah pertama buka editor Autolisp anda, lantas buka file dcl yang bernama “pondt.dcl” , arahkan kursor anda ke “Tools -> Interface Tools -> Preview DCL in Editor”, setelah itu akan tampil sebuah dialog box, lihat gambar di bawah ini dan coba perhatikan pada kotak editnya tidak tampil kode panggil dari kode dcl itu.

Gambar 2. Dialog box yang akan menampilkan kode panggil dcl.

Seharusnya kode panggil yang bernama “pondt” harus muncul di kotak edit, ini artinya ada ketidak beresan dengan kode panggil, atau memang pada kode nya sendiri ada yang tidak beres, maka kita coba lagi “Tools -> Interface Tools -> Preview DCL in Editor”, setelah muncul ketik “pondt”.

Gambar 4. Kata “pondt” sudah di ketik pada kotak edit.

Sekarang anda lakukan tekan tombol “OK” untuk melihat kejadian yang akan datang

Gambar 5. Dialog box yang menampilkan kekeliruan.

Ini artinya ada ketidak beresan pada akhir kode, mungkin tanda tutup “kurung kurawalnya” kurang atau keliru, kita lanjutkan dengan tekan tombol “OK”, maka akan muncul lagi dialog berikutnya.

Gambar 6. Dialog box lanjutan menampilkan kekeliruan.

Pada dialog box ini masih terjadi kekeliruan pada syntaxnya, mari kita koreksi kodenya.

Gambar 7. Kode dcl yang terdapat kekeliruan lihat tanda kotak merah bandingkan dengan gambar 1.

Mari kita kode pada gambar 7 kita eksekusi gimana hasilnya

Gambar 8. Kode panggil dcl langsung muncul dengan sendirinya.

Ternyata setelah di revisi kode pada gambar 1 diatas, ketika di eksekusi kode panggilnya langsung muncul tanpa kita melakukan pengetikan, ini artinya kode tersebut sudah bisa tampil.

Gambar 9. Tampilan dialog box dari kode gambar 7

Kita sekarang beralih ke kode lispnya

Gambar 10. Kode lisp yang di potong karena terlalu panjang

Gambar 11. Kode sambungan dari gambar 10

Gambar 12. Kode sambungan dari gambar 11.

Dari kode yang di tampilkan oleh gambar 10 s/d 12, kita eksekusi lihat hasilnya

Gambar 13. Hasil eksekusi dari kode lisp

Ternyata dialog sudah bisa tampil, tapi kenapa gambar “image” tidak muncul, ini artinya kode dcl maupun kode lispnya masih ada kekeliruan, mari kita koreksi

Pada kode dcl kita tambahkan kalimat ini, agar gambar image bisa tampil

“: radio_button {label = “Tampilkan”;key = “gbr”;}”

Lihat pada gambar 14 setelah kode di tambah kode tambahan.

Gambar 14. Lihat tanda kotak merah adalah kode tambahan.

Alihkan perhatian kita pada kode lispnya, lihat atau bandingkan gambar 10 dengan gambar 15 yang telah di revisi

Gambar 15 . Gambar 10 yang di revisi, lihat tanda kotak merah.

 

Gambar 16. Gambar image sudah muncul.

Ketik “pondt” pada command prompt maka akan muncul dialog gambar 16,di klik radio button “tampilkan” dan isi setiap kotak dengan data ini

Panjang = T1 = 1000

Lebar = T2″ = 800

Tebal = T3″ = 250

Panjang = K1 = 400

Lebar = K2 = 350

Pedestal Kolom = K4 =1500

Kedalaman Kolom = K3 = 600

Lapisan Pasir = L1 = 100

Lapisan Pemadatan = L2 = 200

Kemudian tekan tombol “Ok” dan lihat hasilnya

 

Gambar 17. Terjadi error saat eksekusi lisp di atas

 

Jalan satunya kita harus melakukan eksekusi baris perbaris atau manual, agar di ketahui letak kesalahan tiap barisnya, di blok lah gambar 10 mulai kalimat ini “(setq dcl_id (load_dialog “Pondt Revisi.DCL”))”, kemudian tekan “tombol selection”.

Di blok lagi pada di gambar di bawah in

Gambar 18.Contoh kode yang di blok

Gambar 19, Hasil kode yang di blok

Nah sekarang dengan cara manual sudah di ketahui letak kekeliruannya, ternyata terletak pada baris ke 7, coba anda perhatikan disana ada variable “T4″, yang tidak di ketahui asal usulnya sehingga kekeliruan program yang di buat oleh rekan kita sudah ketahuan.

Mengenal Fungsi OPERATORS Pada Autolisp

040810_0211_MengenalFun1.png

Apa sih “Operators”, yang pasti anda akan berpikiran lain, karena kata itu konotasinya lebih ke objek manusia, seperti operator mesin, radio atau yang lainnya. Tapi di program Autolisp kata “operator s” lebih menitik beratkan pada sejumlah fungsi matematis, diantaranya perkalian, penjumlahan, pembagian dan pengurangan serta yang lainnya.

Gambar 1. Sejumlah fungsi operators pada program Autolisp.

Yang biasa menjalankan atau menggunakan program VBA, kalau melihat fungsi operators di program Autolisp, selalu bilang bikin pusing ketika menjalankan perhitungan matematisnya, memang betul karena fungsi matematis di program VBA dengan di program Autolisp sangat beda, di program VBA kalau kita ingin membuat perkalian sebagai contoh sangat mudah, tapi kalau di program Autolisp bentuknya akan di balik, hal inilah yang kurang di sukai oleh programer yang biasa menjalankan VBA.

Gambar 2. Perbedaan bentuk perkalian antara VBA dan Autolisp.

Pada program Autolisp semua fungsi operators (tambah, bagi, perkalian dll) selalu di tempatkan di depan variablenya (angka), tapi kalau anda sudah biasa menjalankan program Autolisp, menemui hal itu bukan suatu masalah jadi prinsipnya tergantung kebiasaan anda program apa yang anda jalankan.

Contoh fungsi operator yang di gunakan.

Gambar 3. Fungsi tambah, kurang, kali dan bagi.

Gambar 4. Bentuk fungsi persamaan atau lebih besar, kecil dan lainnya.

Gambar 5. Bentuk bitwise serta penabahn/ pengurangan.

Mengenal Fungsi CAR, CADR, CADDR dan CDR Pada Autolisp

040710_1311_MengenalFun1.png

Salah satu fungsi untuk mengurai data atau daftar (list) adalah dengan fungsi “Car”, car adalah singkatan untuk “Contents of the Address Register”, selain car masih ada fungsi lain yaitu “cadr”,”caddr” serta masih banyak anakan dari ketiga kode tersebut .

Gambar 1. Fungsi car,cadr,caddr dan cdr serta hasilnya.

Car bila di fungsikan pada sebuah daftar (list) akan di dapat daftar pertama dari daftar tersebut.

Cadr bila di fungsikan pada sebuah daftar (list) akan di dapat daftar kedua dari daftar tersebut.

Caddr bila di fungsikan pada sebuah daftar (list) akan di dapat daftar ketiga dari daftar tersebut.

Cdr bila di fungsikan pada sebuah daftar (list) akan di dapat daftar kedua dan seterusnya dari daftar tersebut, atau daftar pertama tidak di tampilkan.

Contoh lain yang di dapat dari sumber lain.

Gambar 2. Contoh car dan turunannya serta hasilnya.

Pemahaman terhadap car,cadr,caddr maupun cdr masih mudah di pahami (lihat gambar 1), tapi kalau sudah mengarah kepada turunannya akan lebih ngejelimet, lihat gambar 3 sebelah kiri namun untuk memudahkan arti lebih luas anda bisa lihat sebelah kanannya.

Gambar 3. Equivalent antara car dan uraiannya.

Fungsi car dan cdr bisa membuat turunannya sampai 4 level

Gambar 4. Car dengan turunannya.

 

Mengenal Fungsi GETKWORD Pada Autolisp

040710_0124_MengenalFun1.png

Getkword adalah sebuah fungsi untuk memasukin data dengan di gabung fungsi initget dan di kontrol oleh batasan bit, artinya bila anda menggunakan fungsi ini, maka data yang akan di masukin sudah di set sedemikian rupa, bila memasukin data di luar batasan maka hasilnya akan “Invalid option keyword.”, biasanya fungsi getkword terlebih dahulu di ikuti oleh fungsi “initget”, fungsi ini akan mengontrol terhadap fungsi getkword, fungsi initget selalu di ikuti sebuah nilai bit, nilai bit dengan angka tertentu akan membatasi pemakai memasukin data di luar dari ketentuan initget tadi.


Gambar 1. Format utama dari fungsi getkword.


Gambar 2. Fungsi getkword yang di ikuti oleh fungsi initget.

Nilai bits dengan ketentuannya.

Kode bit akan mengijinkan atau tidak mengijinkan terhadap pemakai ketika memasukin input data, bit bisa ditambahkan bersama yang lain untuk mendapatkan nilai kombinasi dari mulai nilai 0 s/d 255, jika nilai bit tidak di sertakan asumsinya tanpa kondisi.

1 (bit 0)  Mencegah pemakai menekan tombol enter.

2 (bit 1)  Mencegah pemakai menekan tombol nol.

4 (bit 2)  Mencegah pemakai memasukan nilai negatif.

8 (bit 3)  Mengijinkan ke pemakai untuk memasukan sebuah titik di luar batasan gambar, kondisi bisa di pergunakan untuk fungsi pemasukan yang akan datang dari pemakai, jika variable “limcheck” di set ke yang berlaku.

16 (bit 4)  tidak di gunakan.

32 (bit 5)  Menggunakan garis dashed ketika menggambar sebuah garis rubber band atau kotak, Untuk itu fungsi ini pemakai dapat memilih sebuah titik yang terpilih lokasinya di area gambar, nilai bit ini menyebabkan garis rubber band atau kotak menjadi dashed sebagai pengganti solid. (beberapa tampilan drivers di gunakan khusus membedakan warna sebagai pengganti garis dashed, jika systim variable POPUPS adalah 0, AutoCAD akan mengabaikan bit itu.

64 (bit 6)  Melarang memasukan input kordinat Z pada fungsi getdist, sebuah aplikasi akan menjamin fungsi ini kembali ke nilai 2D.

128 (bit 7)  Mengijinkan bebas data input jika itu sebagai kunci kata, sebagai penghotmatan terhadap kontrol bit yang lain dan kata kunci yang terdaftar. Bit ini lebih di utamakan di atas bit 0, jika bit 7 dan 0 di set maka pemakai cukup tekan tombol enter, maka akan di hasilkan sebuah kalimat batal.

 

 

CATATAN : Masa yang akan datang atau ke depannya versi Autolisp mungkin akan menggunakan initget kontrol bit, untuk mencegah setting yang tidak terdaftar.

 

Contoh fungsi getkword dengan fungsi initget dan fungsi lainnya.


Gambar 3. Fungsi getkword di gabung dengan fungsi lain.

 

Contoh lain


Gambar 4. Fungsi initget dengan nilai kode 1.

Mengenal Fungsi ALERT Pada Autolisp

040510_2342_MengenalFun1.png

Alert adalah sebuah fungsi untuk menampilkan sebuah dialog box, yang berisi sejumlah kalimat perhatian, peringatan atau kekeliruan pada sebuah program, fungsi ini bisa berdiri sendiri maupun bergabung dengan fungsi lain, fungsi alert sangat berguna untuk memberi peringatan ataupun informasi pada pemakai sebelum sebuah program di lanjutkan.

Gambar 1. Bentuk format utama dari fungsi alert.

Gambar 2. Tampilan fungsi alert.

Jika kalimat fungsi alert panjang buatlah menjadi berjajar ke bawah, contohnya seperti di bawah ini

Gambar 3. Kalimat pada fungsi alert yang panjang di buat berjajar ke bawah.

Gambar 4. Tampilan kalimat yang di jajarkan ke bawah.

Fungsi “strcat” adalah untuk menggabungkan antara sebuah kalimat dengan kalimat lain, dan fungsi “\n” supaya kalimat di tempatkan pada alinea baru.

Di gabungkan dengan variable lain

Gambar 5. Alert di gabung dengan variable lain.

Gambar 6. Fungsi alert di sisipi variable lain.

Bentuk lain kalimat yang di jajar ke bawah bisa di gunakan cara ini

Gambar 7. Cara lain format kalimat yang di jajar ke bawah.

Gambar 8. Hasil tampilan dari kode gambar 7.

Mengenal Fungsi COND Pada Autolisp

040510_0126_MengenalFun1.png

Salah satu fungsi yang juga banyak di gunakan para programer Autolisp adalah “COND”, cond adalah merupakan singkatan untuk “CONDITION”, fungsi ini merupakan fungsi yang semua variable inputnya benar semua, tetapi harus di pilih salah satu.

Format utama cond seperti ini

Gambar 1. Bentuk format untuk fungsi cond.

Variable “opt” adalah variable input dari pemakai yang akan memasukan nilai, fungsi alert disini adalah salah satu contoh fungsi yang di gunakan, anda bisa ganti dengan fungsi program lain, tergantung kebutuhan dari program tersebut, jadi cara kerja fungsi “cond” ini adalah bila pemakai memasukin nilai “1 s/d 4″, semua nilai ini adalah benar tetapi program harus memilih salah satu nilai.

Contoh fungsi cond

Gambar 2. Salah satu contoh fungsi cond di gunakan lebih luas.

Pada gambar 2 di atas pemakai akan memilih salah satu tipe baut yang akan di olah, karena pada variable “ext_db” hanya membutuhkan data dari asosiasi tipe baut tersebut.

Gambar 3. Contoh lain penggunaan cond.

Mengenal Fungsi SSNAME pada Autolisp

032810_0117_MengenalFun1.png

Bagi programer pemula atau yang masih belajar pasti akan bingung bila mendapatkan fungsi “SSNAME” ini, ssname adalah “selection set name” tetapi ssname ini tidak bisa berdiri sendiri harus ada fungsi lain yang menyertainya, diantaran fungsi “ssget”, “sslength”.

Format utama dari ssname seperti ini

Gambar 1. Bentuk format dari fungsi ssname.

Ssx adalah variable yang di dapat dengan menggunakan fungssi “ssget” dan cnt adalah variable bilangan, biasanya di mulai dari angka 0. Hasil diatas akan berupa nama sebuah entity.

Gambar 2. Hasil perolehan dari kode gambar 1.

Di bawah ini kode ssname secara lengkap

Gambar 3. Contoh lengkap fungsi ssname beserta fungsi yang lain.

Bagaimana cara kerja fungsi ssname ini, adalah sebagai berikut

Variable ssx dengan fungsi “ssgetnya” akan menangkap semua objek gambar yang anda pilih dalam lingkup window,dengan hasil seperti ini.

Gambar 4. Hasil tangkapan objek gambar oleh fungsi ssget.

Kemudian karena hasilnya berupa “selection set: 6″ yang kita tidak bisa di mengerti, kita tidak tahu ada berapa objek yang dapat di tangkap oleh fungsi ssget tersebut, maka harus di ukur panjang atau banyaknya objek yang di tangkap itu, dilakukan dengan fungsi “sslength”, dengan hasil ini.

Gambar 5. Jumlah hasil tangkapan objek.

Langkah berikutnya men set variable “cnt” ke angka 0, kemudian dengan fungsi ssname kita akan mengetahui nama dari objek yang di tangkap tadi, perlu di ketahui bahwa objek yang di tangkap oleh fungsi ssget adalah objek yang terakhir di buat.

Gambar 6. Sebuah nama dari objek.

Nama entity sudah di ketahui, tetapi kita masih belum tahu objek apa itu, yang jelas seperti telah di sebutkan di atas bahwa objek itu pasti objek yang terakhir di buat itu saja. Langkah berikut kita akan uraikan lebih rinci nama entity tersebut dengan bantuan fungsi “entget”

Gambar 7. Isi dari pada sebuah entity.

Wah….pasti semakin tidak mengerti hasil pada gambar 7 itu, bagaimana cara mengetahui arti uraian di atas itu, sekarang anda buka editor “Visual LISP”, dengan cara arahkan kursor anda ke menu “Tools -> Autolisp -> Visual LISP editor”, atau ketik saja di command prompt “VLIDE”, setelah editor terbuka kemudian kursor anda arahkan ke menu “Help”, setelah terbuka pilih tab “Contents”, kemudian cari “DFX Reference -> Entities Section -> Text” , kolom sebelah kanan akan terbuka dengan uraian seperti ini.

Pada gambar 7 di atas coba anda perhatikan pasti terdiri dari “(1 . “Adesu”)”, angka 1 menunjukan keterangan “string” dan kata “Adesu” adalah text yang berada di area gambar, nilai angka 40 menunjukan tinggi huruf, nilai 10 menunjukan titik insert dari huruf tersebut dan angka 7 menunjukan jenis huruf yang di pakai, kalau anda ingin lebih detail lihat pada gambar 8.

Gambar 8. Uraian dari sebuah entity name.

Ok mari kita lanjutkan, untuk mengetahui nama objek kita gunakan gabungan fungsi antara “cdr” dan “assoc”, apa sih arti dari kata assoc itu, assoc adalah kepanjangan dari kata “association”, karena yang akan kita urai adalah “(0 . “TEXT”)”, nilai “0” adalah asosiasi dari text, bagaimana untuk memisahkan antara “0” “.” Dan “TEXT”,kita gunakan fungsi “CDR” (fungsi CDR akan di bahas di lain sesi). Dan hasilnya akan seperti ini

Gambar 9. Nama entity sudah diketahui yaitu sebuah text.

Untuk lebih gampang di ketahui oleh user atau pemakai, fungsi alert di munculkan sebuah dialog dengan menyebutkan nama objeknya, di lanjutkan dengan seting cnt di tambah satu nilainya, sehingga fungsi repeat akan berlanjut sesuai panjang atau banyaknya entity.

 

Gambar 10. Sebuah fungsi alert menampilkan nama objek.

Mengenal Fungsi IF pada Autolisp

032710_0230_MengenalFun1.png

Fungsi “IF” banyak sekali di gunakan pada setiap program, tujuannya tiada lain untuk lebih menekankan fungsi sebelumnya , khususnya pada setiap variable input yang biasa terdapat simbol “<0,0,0>”, simbol tersebut menandakan dalam keadaan default pemakai cukup menekan tombol enter saja, tetapi hasil dari variable tersebut biasanya kalau ngak “nil” atau “”, ini yang akan merepotkan untuk program selanjutnya, makanya disini fungsi if akan menset ke nilai “<0,0,0,>” makanya fungsi ini sangat bermanfaat.

Format utama dari fungsi “if” seperti ini

Gambar 1. Format utama dari fungsi if.

Bagaimana cara kerja if, uraiannya seperti ini fungsi if akan mendeteksi variable yang ada dalam kurung atau “(= 10 11)”, bila variable angka 10 nilainya sama dengan nilai varia ble angka 11, maka akan di jawab “(alert “Jawaban anda benar”)”, dan bila persamaan itu nilainya salah maka akan di jawab “(alert “jawaban anda salah”)”.

Selain ada dua pilihan jawaban, anda bisa memutuskan untuk satu jawaban saja, contohnya seperti ini

Gamabar 2. Fungsi if dengan satu jawaban atau pilihan.

Contoh fungsi if dengan fungsi and

Gambar 3. Fungsi if di gabung dengan fungsi and.

Beberapa contoh fungsi if di gabung dengan fungsi lain

Gambar 4. Beberapa contoh fungsi if di gabung dengan fungsi lain.