[CAD-LIS-05]: Topology Poligon untuk Mengecek Koordinat Batas Bidang / Persil

Referensi

:

 

Platform

:

Autocadmap

Download

:

download

Kali ini akan saya share/bagikan metode yang saya gunakan untuk mengecek kelengkapan kordinat dan symbol titik yang seharusnya ada tiap lekukan / vertex garis bidang. Terkadang saya jumpai beberapa bidang belum dilengkapi dengan symbol titik / symbol patok lengkap dengan daftar koordinatnya.

Cara yang aku secara garis besar adalah sebagai berikut:

  1. Copy/Salin garis bidang ke layer baru.
  2. Hasil copy garis bidang tersebut kemudian dibuat polygon topology dengan pilihan “create nodes” / buat titik baru di vertex.
  3. Ambil koordinat nodes/vertices hasil topology polygon tersebut kemudian dibandingkan dengan koordinat hasil plotting lapangan.
  4. Rangkup/rekap koordinat yang ada di nodes tetapi tidak ditemukan di hasil plotting sebagai koordinat yang harus dicek.
  5. Simpan dan plot lokasi yang harus dicek tersebut.

Untuk mempercepat proses langkah-langkah di atas, saya membuat code program autolisp sebagai berikut:

;;autolisp untuk mengecek garis bidang tanah yang belum ada titik surveynya

;;menggunakan fungsi topology poligon di autocadmap

;;oleh: zainul_ulum@cbn.net.id

 

(defun c:z_cektitik(        ;progam utama dijalankan dengan ketik di command:z_cektitik

         /        ;local variables:

         layer_garis_bidang layer_titik_bidang layer_garis_bidang_copy

         msg nm_layer flag ss cen_layer nod_layer

         list_titik_topology i en xy ly toponame

         i offs pt pt1 pt2 aRec Records x y z pnt3D acadPoint acadText

         c f f_out tulis_ke_csv

         )

(setvar “osmode” 0)        ;object snap tidak diaktifkan

(setvar “cmdecho” 0)        ;echo command tidak diaktifkan

 

(setq                ;definisi variable

layer_garis_bidang “020100” ;layer garis bidang yang akan cek koordinatnya

layer_titik_bidang “060800”    ;layer tempat plotting titik

layer_garis_bidang_copy (strcat layer_garis_bidang “_copy”)    ;layer hasil copy layer bidang

)

 

;;======================sub program

(defun *error* ( msg )

    (setvar “cmdecho” 1)

(princ “error: “)

(princ msg)

(princ)

)

(defun buat_layer (nm_layer)            ;subprogran buat layer

(if (not (tblsearch “layer” nm_layer))    ;jika nama layer belum ada

    (command “._layer” “m” nm_layer “”)    ;buat layer baru

);end if

)

(defun pilih_garis_di_layer (nm_layer)    ;subprogram untuk memilih

(ssget “X”                    ;semua object di modelspace

     (List (cons -4 “<AND”)

             (cons -4 “<OR”)

                 (cons 0 “LWPOLYLINE”)(cons 0 “LINE”)    ;hanya untuk object polyline dan line

             (cons -4 “OR>”)

         (cons 8 nm_layer)        ;di layer nm_layer

         (cons -4 “AND>”))

     );ssget

);end defun

;=======================end subprogram

;setting layer untuk proses topology

(buat_layer (setq cen_layer (strcat layer_garis_bidang “_cen”)))    ;buat layer untuk menampung centroid topology

(buat_layer (setq nod_layer (strcat layer_garis_bidang “_nod”)))    ;buat layer untuk node/titik digaris/link topology

(buat_layer layer_garis_bidang_copy)                    ;buat layer baru jika belum ada

 

(foreach ly (list nod_layer cen_layer layer_garis_bidang_copy)

    (command “._erase”

         (ssget “x” (list (cons 8 ly)))    ;hapus object berdasarkan nama layer: ly

         “”)

);for

 

(command “._COPYTOLAYER”                    ;jalankan perintah COPYTOLAYER

     (pilih_garis_di_layer layer_garis_bidang)        ;pilih object line atau polyline di layer bidang

     “”                            ;enter atau spasi

     layer_garis_bidang_copy

     “X”                            ;exit

     );command

 

;set variable qaflags

;http://forums.augi.com/showthread.php?11688-Explode-in-LISP-Does-Not-Explode-Selection-Set

(setq flag (getvar “qaflags”))                ;ambil nilai variable QAFLAGS

(setvar “qaflags” 5)                        ;set qaflags ke 5 agar selection sets bisa di-explode

    (command “._explode”                    ;jalankan perintah explode

         (pilih_garis_di_layer layer_garis_bidang_copy)    ;pilih garis dan polyline di layer hasil copy layer bidang

         “”

         )                        ;hasil explode polyline akan menjadi line

(setvar “qaflags” flag)                    ;kembalikan setting qflag ke nilai semula

;;

;;membuat topologi dengan pilihan create node akan dibuat titik-titik disetiap line hasil proses explode

;;

;; nama topologi : bts_bidang

 

(if (tpm_acexist (setq toponame “bts_bidang”))        ;jika topology bts_bidang sudah ada

(tpm_mnterase toponame)                    ;hapus topologi tersebut

);end if

 

;setting variable topology

(setq var_id (tpm_varalloc))            ;alokasi memory untuk proses topologi

(tpm_varset var_id “STOP_AT_MISSING_CNTR” 0)    ;continue for missing centroid

(tpm_varset var_id “CREATE_MARKERS” 1)    ;mark error locations

(tpm_varset var_id “CREATE_CNTR” 1)        ;create centroid

(tpm_varset var_id “CNTR_LAYER” cen_layer)    ;set layer for centroid

(tpm_varset var_id “CREATE_NODE” 1)        ;create new nodes

(tpm_varset var_id “NODE_LAYER” nod_layer)    ;set layer for nodes

 

(if (not

    (tpm_mntbuild                ;proses topologi

    var_id                    ;sesuai dengan setting variable var_id

    toponame                ;nama topology

    “topologi bidang untuk extract points”    ;keterangan topologi

    3                    ;type=3 untuk topology polygon

    (ssget “X” (list (cons 8 nod_layer)))            ;setting layer nodes

    (ssget “X” (list (cons 8 layer_garis_bidang_copy)))    ;setting layer link

    (ssget “X” (list (cons 8 cen_layer)))            ;setting centroid layer

    );end build topologi

    )

(exit)                    ;keluar program jika topologi gagal

);end if

 

;;salah satu hasil topolgy adalah object point/nodes di tiap ujung lines di nod_layer

;;langkah selanjutnya memilih semua titik tersebut kemudian dibandingkan dengan

;;titik hasil plotting data ukuran di layer_titik_bidang

 

(if (setq ss (ssget “X”            ;pilih semua object

         (list (cons 0 “POINT”)    ;type object titik / POINT

             (cons 8 nod_layer)    ;di layer nod_layer

             )

         )

     )

(progn                    ;proses dilanjtukan jika ada object yang terpilih

(setq list_titik_topology (list))        ;variable untuk menampung titik / node topology

(setq i -1)

     (repeat (sslength ss);loop ke selection set

     (setq i (1+ i))

     (setq en (ssname ss i));ambil entity dari selection set

     (setq xy (cdr (assoc 10 (entget en))))

     (setq list_titik_topology (append list_titik_topology (list xy)))

     );repeat

;hapus topology dan object di layer temporary

(tpm_mnterase toponame)

(foreach ly (list nod_layer cen_layer layer_garis_bidang_copy)

    (command “._erase”

         (ssget “x” (list (cons 8 ly)))    ;hapus object berdasarkan nama layer: ly

         “”)

    );for

 

;memilih object titik di layer_titik_bidang dengan menggunakan

;koordinat yang telah disimpan di variable list_titik_topology

 

(setq i 0 offs 1 Records (list))

(foreach pt list_titik_topology

    (setq pt1 (list (nth 0 pt) (+ (nth 1 pt) offs)))    ;awal selection by fence

    (setq pt2 (list (nth 0 pt) (- (nth 1 pt) offs)))    ;akhir pilihan by fence

    (if (not (setq ss (ssget “_F”                ;select by fence

         (list pt1 pt2)                ;dari pt1 ke pt2

         (list (cons 0 “POINT”)(cons 8 layer_titik_bidang));untuk object titik di layer_titik_bidang

         )

         ))                        ;jika tidak ditemukan titik di layer_titik_bidang

        (progn                         ;proses ambil titik topology

            (setq i (1+ i))

            (setq aRec (list i (nth 0 pt) (nth 1 pt)))

            (setq Records (append Records (list aRec)))

         );progn

     );end if

 

);next

);progn

);end if

 

;plot lokasi titik tambahan untuk cek dan simpan list koordinat di csv file

(setvar “clayer” nod_layer)                    ;plot titik di layer nod_layer

(vl-load-com)                            ;activekan com

(setq

acadDoc (vla-get-activedocument (vlax-get-acad-object))    ;object acaddocument

mSpace (vlax-get-property acadDoc ‘ModelSpace)        ;object modelspace

dTextHeight 1.0

 

c “,”                            ;delimited

f_out (strcat (getvar “dwgprefix”)(getvar “dwgname”))    ;nama file di folder dwg+nama dwg

f_out (substr f_out 1 (- (strlen f_out) 3))            ;menghilangkan .dwg

f_out (strcat f_out “csv”)                    ;ganti extensi menjadi .csv

 

f (open f_out “w”)                        ;buka file mode write / tulis

     )

 

(foreach pt Records

(setq

txtID (strcat “cek-” (itoa (nth 0 pt)))            ;text id diawali dengan cek-

x (nth 1 pt)                        ;ambil koord x

y (nth 2 pt)                        ;nilai y

z 0.0                            ;nilai z

pnt3D (vlax-3d-point (list x y z))            ;ubah x y z ke object 3d-point

acadPoint (vla-addpoint mSpace pnt3D)            ;buat titik di model space di titik pnt3D

acadText (vla-addtext mSpace txtID pnt3D dTextHeight)    ;buat text dengan string=txtID

 

tulis_ke_csv (strcat                    ;format csv untuk export koordinat

         txtID c                    ;txtID akhiri dengan delimeted c

         (rtos x 2 3) c                ;ubah nilai x ke text format 3 digit

         (rtos y 2 3)                ;ubah nilai y ke text format 3 digit

         )

)

(vla-put-layer acadPoint nod_layer)            ;object titik diubah ke layer nod_layer

(vla-put-layer acadText nod_layer)                ;object titik juga diubah ke layer nod_layer

(vla-put-Alignment acadText acAlignmentCenter)        ;set alignment text ke center

(vla-put-TextAlignmentPoint acadText pnt3D)        ;set alignment coordinates

 

(write-line tulis_ke_csv f)                    ;menulist txtID,x,ya ke file

);next

(close f)                            ;tutup file karena loop sudah selesai

(command “regen”)                        ;regen untuk refresh gambar

(setvar “cmdecho” 1)                        ;kembalikan setting smdecho

(if Records

    (alert (strcat “list koordinat disimpan di ” “\n”

         f_out))

    (alert “Koordinat lengkap”)

)

(princ)                            ;blank

);akhir program utama

 

==semoga bermanfaat==

Leave a comment