Referensi | : | https://help.autodesk.com/ |
Platform | : | AutoCAD |
Download | : | Visual Lisp |
Gambar di bawah adalah salah contoh garis as bagunan yang akan dibutkan daftar koordinat as bangunan:
Gambar 1: Contoh as bangunan
Tulisan ini berisi catatan-catatan penting saya terkait dengan pembuatan list koordinat dengan menggunakan program Autolisp dan Visual Basic Application for AutoCAD (VBA AutoCAD), sedangkan untuk detail keterangan tiap baris code bisa dibaca di list program yang bisa di download dari link di atas.
Untuk mengecek program autocad dapat menjalankan program VBA AutoCAD:
- Saat autocad terbuka / aktif, ketik di command:VBARUN. Jika muncul notifikasi
Maka diperlukan program Microsoft VBA Module for AutoCAD yang bisa didownload dari link berikut.
- Pilih module yang saat ini digunakan. Saat ini saya menggunakan Autodesk® Civil 3D® 2021 64Bit, maka versi module yang saya pilih adalah AutoCAD 2021 VBA module 64-bit .
- Install module Microsoft VBA Module for AutoCAD
Secara garis besar, urutan saat menjalankan program adalah:
- Object garis as bangunan harus berupa POLYLINE. Jika berupa object LINE maka perlu diconvert menjadi Polyline dengan menggunakan perintah di Command:pedit.
-
Setting filter dengan menggunakan dxf code : (0 . “LWPOLYLINE”), syntax untuk filter di Visual Lisp dan VBA AutoCAD:
Visual List | VBA AutoCAD |
(setq filter (list (cons 0 “LWPOLYLINE”))) | Dim FilterType(0) As Integer, FilterData(0) As Variant
FilterType(0) = 0: FilterData(0) = “LWPOLYLINE” |
-
Pilih garis polyline untuk as baris. Misal pada contoh di atas (Gambar-1), bagian baris adalah garis as A, A.1, B dan C
(prompt “\nPilih baris>>”)
(setq sSetBaris (ssget filter)) |
acadDoc.Utility.Prompt “Pilih Polyline Baris>>”Set sSetBaris = CreateSelectionSet(acadDoc, “baris”)
sSetBaris.SelectOnScreen FilterType, FilterData |
Tidak seperti di Visual Lisp, Pada code VBA AutoCad menggunakan custom function CreateSelectionSet(). Pada fungsi akan membuat object selection sets dengan terlebih dahulu mengecek apakah object selection sudah terdefiniskan atau belum. Jika ditemukan object selection yang sama, maka object tersebut harus dihapus terlebih dahulu kemudian dibuat object baru. Jika proses pengecekan ini tidak dilakukan, maka akan menyebabkan error di VBA AutoCAD.
On Error Resume Next If aDoc.SelectionSets(ssName) Is Nothing Then ‘jika belum ada If Err.Number Then Set aSet = aDoc.SelectionSets.Add(ssName) ‘buat baru Err.Clear End If Else aDoc.SelectionSets(ssName).Delete ‘jika sudah ada, dihapus Set aSet = aDoc.SelectionSets.Add(ssName) ‘kemudian buat selection baru End If |
- Pilih garis polyline untuk as kolom, pada contoh Gambar-1, bagian kolom adalah garis as 1, 1.1, dan 2
-
Ubah layer polyline baris dan polyline kolom sesuai dengan urutan pemilihan baris dan kolom kemudian setting semua elevasi polyline ke 0 (nol). Setting elevasi ke 0 agar polyline dapat berpotongan dalam ruang dua (2) dimensi.
(SetUbahLayer sSetBaris T)
(SetUbahLayer sSetKolom nil) |
SetUbahLayer sSetBaris, True
SetUbahLayer sSetKolom, False |
Catatan di visual lisp, saat dilakukan looping di object selection set (ss) maka perlu dilakuan proses konversi dari entity object ke vla-object dengan menggunakan syntax:
enttname (ssname ss i)
vla-obj-entt (vlax-ename->vla-object enttname) |
Sedangkan untuk membuat layer menggunakan syntax:
aLayer (vl-catch-all-apply ‘vla-add (list (vla-get-layers (acaddoc)) nmLayer)) | aDoc.Layers.Add nmLayer |
Mengubah layer dan set elevasi = 0
(vla-put-layer vla-obj-entt nmLayer)
(vla-put-elevation vla-obj-entt 0) |
anEntt.Layer = nmLayer
anEntt.Elevation = 0 |
-
Menggunakan method IntersectWith() untuk menentukan perpotongan garis baris dengan garis kolom
XYZ (vla-intersectwith vla-poly-baris vla-poly-kolom acExtendNone)
ListXYZ (vlax-safearray->list (vlax-variant-value XYZ)) |
intPoints = acadPolyRow.IntersectWith(acadPolyCol, acExtendNone) |
Untuk Visual Lisp XYZ yaiut hasil dari method vla-intersectwith menghasilkan object variant array sehingg agar koordinat bisa dibaca , maka perlu dikonversi ke list dengan menggunakan syntax:
ListXYZ (vlax-safearray->list (vlax-variant-value XYZ))
- Simpan hasil ke cvs file dengan format p,x,y,z,d
Silakan download code / list programnya untuk keterangan lebih detail di tiap tahapannya.
Cara penggunaan : https://youtu.be/6lt1T-KDFrY
visual lisp beda dengan autolisp, pak ya?
saya mau belajar, soalnya. utk memudahkan pekerjaan. saya sangat buta ttg pemprograman,
dari dulu saya menghindarinya. sebagaimana saya dulu menghindari AutoCAD, tapi ternyata harus bertemu . mungkin sudah suratan takdir (jadi curhat, he he)
pertama mau bikin script tuk ambil koordinat dari Polyline dan mengexpornya ke txt.
thx