[CAD-LIS-06]: Menggunakan Method IntersectWith() di Visual Lisp dan VBA for AutoCAD untuk Membuat Daftar List koordinat As Bangunan

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

One thought on “[CAD-LIS-06]: Menggunakan Method IntersectWith() di Visual Lisp dan VBA for AutoCAD untuk Membuat Daftar List koordinat As Bangunan

  1. 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

Leave a comment