Buat 3D Yuk…

091409_0105_Buat3DYuk1.png

Pertama kali saya member sebuah forum, itu di cadalyst, waktu itu ~th2000. kusus di forum autolisp. beberapa sempat dimuat di majalah cadalyst. saya lupa edisinya. dan tulisan yang dimuat itu ternyata hanya di pergunakan oleh orang di luar Indonesia. itu yang membuat saya berhenti menulis program disana.

setelah itu, sempat mampir di beberapa forum, tapi tidak pernah sreg.
disini, aku cukup merasa senang, karena alasan Indonesia, dan beberapa masih aktif. pertama masuk, seperti kegirangan dan hanya membaca, tanpa memperhatikan linknya kemana. maklum, aku baca di laptop, tanpa menggerakkan mouse. masih tidak perhatian dengan warna link.

OK, aku buka topik tidak untuk cerita itu. aku mau membuat satu tulisan yang lebih fokus ke 3D.
aku berharap bisa menyelesaikan ini dulu ketimbang responku ke Edo (tentang perombakan total) untuk menulis sesuatu di topik sebelumnya. dan aku berharap, apa yang aku tulis juga di cari kekurangannya. menjadi sebuah forum diskusi. yang kemudian dicari bagaimana baiknya. dan tentu, keterbatasan karakter per post disini akan selalu membuat postingan ini selalu bersambung ke post-post selanjutnya.

Modeling sederhana, Gardu pandang. Bangunan ini aku ambil dari perencanaan Pekerjaan Taman rekreasi di Cokro Tulung, Klaten yang di buat Mas Nanang, Yodya Karya Semarang.

Bangunan Rumah Tinggal, bagian ini hanya akan aku ambil point yang perlu, karena penyelesaian atap dan railing bisa diambil dari tulisan di point pertama.

Bangunan Gedung Tinggi, sama seperti bangunan Rumah, aku juga hanya akan menampilkan seperlunya.

Mudah-mudahan yang aku tulis bisa bermanfaat bagi yang membaca.

AYO… KITA BUAT ORANG INDONESIA MAKIN PINTER..!!
salam.
-ast-

BAGIAN 1 : Gardu Pandang.

saya akan awali modeling sederhana sebuah gardu pandang. silakan deskripsikan dengan dimensi yang anda sukai, karena pada bagian ini lebih tentang bagaimana membentuk sebuah model.

jika gambar 2D diatas sudah siap, maka model akan bisa diselesaikan kurang dari 10 menit. benarkah ?

1. Masa Kotak

perhatikan gambar kolom berikut.

sebenarnya tidak penting dengan lebar tampak kolom satu dan lainnya mau sama atau berbeda. proses modelingnya akan persis sama.
banyak sekali model suatu bangunan yang punya dasar penyelesaian model seperti kolom ini. dan komponen entity yang akan di bentuk, sebenarnya tidak hanya berupa gabungan garis lurus yang membentuk naad atau list seperti gambar kolom ini, anda bisa terapkan dengan gabungan beberapa lengkungan masih tetap dengan penyelesaian yang sama.

banyak tutorial, entah itu forum atau buku yang beredar di pasaran mengetengahkan panduan dengan menyusun obyek model dari bawah. hasilnya nanti akan persis sama. tapi jika anda menanyakan waktu penyelesaiannya, jelas akan berbeda.

yang utama, dalam permodelan seperti kolom ini adalah membentuk polyline. jangan trace gambar kolom untuk mendapatkan polyline-nya, tetapi buat rectang yang mengelilingi 2 buah kolom tadi dan pergunakan command Bpoly. lihat figur di bawah.
jalankan command Bpoly tadi dengan menggunakan layer lain dan click di areal sembarang diluar kolom seperti yang ditunjukkan dengan titik PT.

 

dari command Bpoly diatas, akan didapat figur gambar dibawah. polyline obyek kolom akan tergambar dengan cepat untuk keduanya seperti yang di indikasikan dengan garis merah dengan detail setiap tekuk-an seperti blow-up gambar di sebelah kanannya.

hide gambar kolom dengan warna hitam (aslinya) dan extrude dengan ketebalan bebas, yang penting lebih lebar dari tampak kolom yang paling lebar.
rubah tampilan anda untuk lebih jelas dengan command ddvpoint (VP). rotate kedua kolom dengan command ROTATE3D dan buat garis diagonal di dasar kolom untuk kedua kolom seperti figur gambar-02. satukan kedua kolom dengan acuan titik tengah garis bantu diagonal seperti figur gambar-03.

Selanjutnya jalankan step berikut
Command: intersect Enter
Select objects: pilih 2 obyek kolom yang telah disatukan tadi, 2 found dan enter.
Selanjutnya obyek kolom akan terbentuk dengan detail seperti yang ditampilkan pada figur gambar-04.

dengan cara yang sama, bisa dibuat bangunan gardu pandang tersebut.

buat gambar gardu pandang, tanpa railing.

buat Boundary dengan menggunakan command Bpoly, dengan sebelumnya membuat rectangle yang mengelilingi gambar bangunan gardu pandang dengan layer yang berbeda.

hide gambar asli dan extrude lurus dengan ketebalan bebas.

buat garis bantu diagonal di sembarang tempat PADA LEVEL YANG SAMA, dan satukan secara menyilang. Pada titik tengah garis bantunya.

jalankan command intersect untuk kdua obyek extrude gardu.

model gardu terbentuk

Railing

aku mengasumsikan render dilakukan dengan 3DSMax, Bagian ini adalah bagian yang paling mudah. yang di perlukan hanya setting layer yang berbeda untuk setiap dimensi railing atau profilnya.
dan yang di gambar hanya single line untuk as railing.

banyak mdeler melakukan ini dengan membuat model railing dalam 3D, sehingga beban file menjadi lebih berat. padahal beberapa software mampu dan menyediakan setting untuk meng-enable-kan obyek line maupun curve untuk di render.

di max, setelah import, select layer railing > modify > click ON Enable untuk parameter Renderable Obyek dan set profil/dimensinya sesuai yang dikehendaki. dan single line obyek yang di pilih sudah bisa diberikan material untuk di render sesuai ukurannya.

Kemiringan Atap

bagian ini juga merupakan bagian yang ribet bagi sebagian modeler.
kebiasaan mereka mencari titik puncak untuk membuat model, cukup menyita waktu dan olah UCS.

sebenarnya, di release 12 (14?) atau sebelumnya, sewaktu solid di support AME, mebuat atap tinggal menggambar denah atap dan di extrude dengan nilai negatif dan modeling selesai. tapi sekarang extrude negatif dengan ketinggian puncak yang melebihi ketinggian puncak yang seharusnya akan berakibat *ERROR*

untuk itu yang biasa saya lakukan adalah, seperti berikut.
contoh saya ambil bentuk atap bebas, denah atap disesuaikan dengan keperluan.

1. Buat Denah Atap
2. buat rectangle dengan dimensi bebas mengelilingi seluruh sisi atap
(kecuali kalau ada sisi yang di kehendaki atap pelana, jangan di buat rectang)
di indikasikan dengan garis merah.
3. extrude lurus denah dengan ketinggian kira-kira 0.5 bentang atap
4. extrude kotak yang mengelilingi denah dengan nilai negatif
nilai negatif didapat dari – (90-kemiringan atap).
misal, kemiringan yang dikehendaki adalah 30 maka 90-30 = -60
5. Subtract denah atap dengan kotak yang mengelilingi

Denah 3D Atap akan terbentuk.

LSP, Orientasi Penyusunan Program.

Aku tidak akan mengulas panjang lebar disini, akan aku usahakan nantinya untuk membuat penjelasan dalam topik lain. Aku berharap, apa yang aku tulis disini akan memjadi sebuah tuntutan minimal. bahwa sebuah program Lsp HARUS bisa menjadi kemudahan dalam bekerja, tidak hanya dalam bentuk gambar, TETAPI harus membantu menyelesaikan Bagaimana bentuk yang seharusnya dipakai pada suatu tatanan tertentu maupun penghitungan matematis. Mudah-mudahan apa yang saya tulis pendek ini bisa memberikan gambaran dan bermanfaat bagi yang membaca. Disini, penggunaan Variabel akan saya usahakan memberikan informasi arti.

1.    Varian masukan

Sebuah LISP, idealnya dibuat untuk banyak dimensi. Membuat suatu obyek dengan LISP, JANGAN hanya berfikir untuk keperluan gambar yang sekarang saja. Sebagai contoh sederhana adalah sebuah Kotak dengan acuan di titik kiri bawah, kotak ini nantinya akan selalu terbawa kedalam banyak kepentingan jenis gambar dan ukuran

[sourcecode language=’cpp’]
(defun c:kotak (/ osn panjang lebar acuan pt1 pt2 pt3)
(setvar “cmdecho” 0)
(setq osn (getvar “osmode”))
(setvar “osmode” 0)
(setq panjang (getdist “\n Panjang : “)
lebar (getdist “\n Lebar : “)
acuan (getpoint “\n Titik acuan : “)
pt1 (polar acuan 0 panjang)
pt2 (polar pt1 (/ pi 2) lebar)
pt3 (polar acuan (/ pi 2) lebar)
); setq
(command “pline” acuan pt1 pt2 pt3 “c”)
(setvar “osmode” osn)
(princ)
); defun
[/sourcecode]

load dan jalankan perintah KOTAK, semua kotak dengan berbagai ukuran panjang yang dikehendaki akan terbentuk.

2.    Library Program

Sebuah kotak, adalah sebuah bentuk dasar dari berbagai bentuk. sekali anda selesai menyelesaikan program untuk bentuk ini, jangan berfikir hanya untuk kepentingan gambar sebuah kotak saja. tetapi usahakan untuk nantinya bisa dimanfaatkan untuk kepentingan obyek gambar lain. sehingga kalau memungkinkan, sebuah routine yang sudah ditulis, diupayakan untuk menjadi subroutine

sehingga, koreksi dari program nomor satu adalah sebagai berikut :

[sourcecode language=’cpp’]
 (defun box () ;; bagian ini ditulis tanpa prompt C
(setvar “cmdecho” 0)
(setq osn (getvar “osmode”))
(setvar “osmode” 0)
(setq panjang (getdist “\n Panjang : “)
lebar (getdist “\n Lebar : “)
acuan (getpoint “\n Titik acuan : “)
pt1 (polar acuan 0 panjang)
pt2 (polar pt1 (/ pi 2) lebar)
pt3 (polar acuan (/ pi 2) lebar)
); setq
(command “pline” acuan pt1 pt2 pt3 “c”)
(setvar “osmode” osn)
(princ)
); defun
[/sourcecode]

disini BOX adalah sebuah subroutine untuk SELURUH program gambar lain yang membutuhkan bentuk kotak. sehingga terapan untuk penulisan kotak menjadi seperti dibawah.

Box sebagai sub routine sebuah kotak, box diatas harus selalu ikut di load dalam program autocad

[sourcecode language=’cpp’]
(defun c:kotak () ;;command dengan prompt C yang merupakan routine KOTAK yang sebenarnya
(box)
)
[/sourcecode]

atau anda bisa juga menggunakan alternatif berikut
disini, panjang dan lebar kita pakai sebagai input langsung tanpa prompt pesan / message.

[sourcecode language=’cpp’]
(defun box1 (panjang lebar) ;; bagian ini ditulis tanpa prompt C
(setvar “cmdecho” 0)
(setq osn (getvar “osmode”))
(setvar “osmode” 0)
(setq acuan (getpoint “\n Titik acuan : “)
pt1 (polar acuan 0 panjang)
pt2 (polar pt1 (/ pi 2) lebar)
pt3 (polar acuan (/ pi 2) lebar)
); setq
(command “pline” acuan pt1 pt2 pt3 “c”)
(setvar “osmode” osn)
(princ)
); defun
[/sourcecode]

ATAU

[sourcecode language=’cpp’]
(defun box2 (panjang lebar acuan) ;; bagian ini ditulis tanpa prompt C
(setvar “cmdecho” 0)
(setq osn (getvar “osmode”))
(setvar “osmode” 0)
(setq pt1 (polar acuan 0 panjang)
pt2 (polar pt1 (/ pi 2) lebar)
pt3 (polar acuan (/ pi 2) lebar)
); setq
(command “pline” acuan pt1 pt2 pt3 “c”)
(setvar “osmode” osn)
(princ)
); defun
[/sourcecode]

terapannya,
[sourcecode language=’cpp’]
(defun c:kotak1 () ;;command dengan prompt C yang merupakan routine KOTAK
(box1 150 150)
)
[/sourcecode]

setiap kali anda menjalankan perintah kotak1, akan tergambar kotak dengan ukuran 150X150

3.    Library Obyek

peruntukan program kotak awal akan dipergunakan sebagai library program. sehingga apabila program diatas sudah di load, program selanjutnya bisa kita manfaatkan.

misal, sebuah denah jendela sederhana, yang membutuhkan kotak di sisi kiri dan kanan dengan dimensi kusen 50X150

[sourcecode language=’cpp’]
(defun c:jendela ()
(setq osn (getvar “osmode”))
(setq leb_jen (getdist ” \lebar jendela : “))
(setvar “osmode” 0)
(box1 50 150)
(command “line” pt1 (setq pt4 (polar pt1 0 leb_jen)) “”
“line” (polar pt1 (/ pi 2) 75) (polar pt4 (/ pi 2) 75) “”
“line” pt2 (polar pt2 0 leb_jen) “”
)
(box2 50 150 pt4)
(setvar “osmode” osn)
(princ)
)
[/sourcecode]

jalankan dari program autocad

Command : Jendela ENTER
lebar jendela : 700 ENTER

pick point, akan tergambar jendela sederhana dengan bukaan 700

disini beberapa variabel seperti pt1, pt2, pt3 tidak perlu didefinisikan ulang, karena sudah tertulis dalam sub routine BOX1.
anda tinggal menggunakan perintah box1 atau box2 untuk berbagai obyek gambar yang dikehendaki yang memerlukan gambar obyek kotak.

4. Memberikan alternatif bentuk

misalnya, apabila kotak yang akan tergambar,
1. lebar < 100, maka kotak akan disilang
2. lebar = 100, ditengah kotak ada lingkaran
3. lebar > 100, ada tanda plus ditengah kotak

terapannya,

[sourcecode language=’cpp’]
(defun c:bentuk ()
(box)
(if (< lebar 100) (command "line" acuan pt2 "" "line" pt1 pt3 "")) (if (= lebar 100) (command "circle" (polar acuan (angle acuan pt2) (/ (distance acuan pt2) 2.0)) (/ lebar 4.0))) (if (> lebar 100)
(command “line”
(polar acuan 0 (/ (distance acuan pt1) 2.0))
(polar pt3 0 (/ (distance acuan pt1) 2.0)) “”

“line”
(polar acuan (/ pi 2) (/ (distance acuan pt3) 2.0))
(polar PT1 (/ pi 2) (/ (distance acuan pt3) 2.0)) “”
)
)
(princ)
)
[/sourcecode]

jalankan Command BENTUK, untuk 3 pilihan lebar jarak seperti diatas. maka gambar yang dihasilkan akan memenuhi kriteria bentuk
1. lebar < 100, maka kotak akan disilang
2. lebar = 100, ditengah kotak ada lingkaran
3. lebar > 100, ada tanda plus ditengah kotak

5.    Calculator

Sebuah Lisp, juga bisa dimanfaatkan untuk kalkulator, bahkan untuk penghitungan matematis yang rumit sekalipun. sebagai contoh sederhana, dari sebuah tangga dengan tinggi lantai tertentu dan jumlah anak tangga tertentu juga

[sourcecode language=’cpp’]
(defun c:tangga ()
(setq level (getdist “\n Tinggi Lantai : “);;; dengan getdist bukan getreal
upstair (getint “\n Jumlah anak tangga : “)
up (/ level upstair)
)
(princ up)
(princ)
)
[/sourcecode]

UP, yang merupakan tinggi anak tangga bisa dihitung dengan fungsi pembagian

Getdist, meminta masukan jarak dari bilangan real.
dengan getreal, masukan hanya bisa di input dengan mengetikan saja.
tetapi dengan getdist, masukan bisa diberikan dengan mengetikan angka jarak atau klik klik (2 kali klik) mouse  untuk terbaca sebagai masukan jarak antara 2 titik klik mouse tadi.

lebih lengkap mengenai fungsi matematis bisa dilihat di HELP

saya menyertakan attachment yang terbagi menjadi 2 dalam artikel ini, subroutine.lsp dan artikel1.lsp. Load 2 file ini dan ada beberapa command baru.
1.    kotak
2.    kotak1
3.    jendela
4.    bentuk
5.    tangga

salam,
-ast-

—————————

Profil Penulis:

Saya Arus, tahun 1997 – 2000 (Singapore) dan th 2003 – 2005 (Sydney) saya banyak menulis tentang AutoLISP dan pekerjaan 3D. pada masa itu saya harus membuat standar untuk berbagai parameter. Banyaknya konsultan yang memberikan masukan data gambar, dengan berbagai karakter dan kebiasaan serta software yang beragamlah yang menempa saya untuk mendefinisikan data agar mudah diterjemahkan dan di modifikasi di AutoCAD.