Halaman

Jumat, 31 Desember 2010

Menggambar Profil Melintang Sungai/Saluran dengan AutoLisp

Pada postingan terdahulu pernah kami sajikan sebuah tutorial untuk Menggambar Profil Tanah Asli dengan AutoLisp. Pada metode yang disajikan, input data profil melintang dilakukan secara langsung dengan mengetik data elevasi dan jarak pada Command Window. Cara tersebut cukup praktis digunakan apabila data cross section yang akan diplot tidak terlalu banyak. Seperti pada waktu kita akan menggambar profil tanah asli sebelum kita menggambar bangunan air misalnya. Sedangkan apabila cross section yang akan digambar cukup banyak, misalnya data pengukuran profil melintang sungai/saluran yang terdiri dari banyak profil, maka cara tersebut menjadi kurang praktis.
Kali ini kami sajikan sebuah program Lisp untuk menggambar profil melintang sungai/saluran/ atau tanah asli hasil pengukuran dengan menggunakan input data berupa file teks. Atau data dalam lembar kerja excel disimpan dalam file teks (*.prn). Dengan data pengukuran yang biasanya telah diolah dalam program excel selanjutnya akan lebih mudah dijadikan file teks tanpa mengetik kembali data yang diperlukan.

List programnya adalah sebagai berikut:
;========================================
;            < cross-sungai.lsp >        
;            ** crss **                  
;      plot data cross sungai            
;         20 September 2003              
;========================================

(defun c:crss ()
  (setvar "dimzin" 1)
  (setvar "blipmode" 1)
  (setvar "cmdecho" 1)
(princ "\n Format data <10><10>: B1:<No Patok> B2<Datum> B3<Jarak - Elv> ")
(setq p0 (getpoint "\nTitik Awal Gambar Cross  : "))
(setq p00a (polar p0 (* 1.5 pi) 150))
(setq p00b (polar p0 (* 1.5 pi) 300))
  (setvar "dimzin" 0)
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)

;=======================
; skala gambar          
;=======================
;  (setq ssv (getreal "\nSkala Vertikal    < 100 200 : 100 >?:"))
  (setq ssv 100)
  (setq ssh 100)
  (if (equal ssv nil)
    (setq scy 100.0)
    (setq scy ssv)
  )
  ;(setq ssh (getreal "\nSkala Horizontal  < 100 200 500 : 100 >?:"))
  (if (equal ssh nil)
    (setq scx 100.0)
    (setq scx ssh)
  )
  (setq scv (/ 1000 scy)
sch (/ 1000 scx)
  )

;======== INPUT FILE DATA ++++
(setq fnam1 "/Procad/Data/")
(setq fnam2 "*.prn")

(setq lastLL 2 lastRR 5)
(setq f (getstring (strcat "\nFile Input Data Cross c:/procad/data/ < " fnam2 " > ? : ")))
(if (/= f "") (setq fnam2 f))
(setq fnam (strcat fnam1 fnam2))
(setq check (findfile fnam))
(while (= check nil) (prompt "\nFile Not Found .....! ")
  (setq f (getstring (strcat "\nFile Input Data Cross c:/procad/data/ < " fnam2 " > ? : ")))
    (if (/= f "") (setq fnam2 f))
     (setq fnam (strcat fnam1 fnam2))
      (setq check (findfile fnam))
        ) ; while
;===================================================================
;====== BACA DATA ======================================== BARIS 1 =
(setq fp (open fnam "r"))
(setq file (read-line fp)) ; baris 1 no. patok
(if (= file "") (setq file nil))
(if (= file nil) (setq stop 1) (setq stop 0))
(setq noptk (atof (substr file 11 10))) ; No.patok
(setq file (read-line fp)) ; baris 2 
(setq eldat (atof (substr file 11 10))) ; Elevasi datum
(setq file (read-line fp)) ; baris 3 
(setq file (read-line fp)) ; baris 4 
(setq jar0 (atof (substr file 1  10))) ; jarak datar 0
(setq elt1 (atof (substr file 11 10))) ; elevasi titik pertama

  (setq p01 (polar p0 (* 0.5 pi) (* (- elt1 eldat) scv)))
  (command "color" 20 "-linetype" "s" "dashed2" "")
  (command "line" p0 p01 "")
  (command "color" 20 "-linetype" "s" "continuous" "")
  (command "line" p0 (polar p0 (* 1.5 pi) 20) "")
  (command "color" 7)
  (setq p01tx (polar p0 (* 1.5 pi) 5))
  (setq p50 (polar p0 pi 20))
  (setq p51 (polar p0 pi 30))
  (setq p52 (polar p51 (* 1.5 pi) 5))
  (setq p53 (polar p52 (* 1.5 pi) 10))
  (setq p54 (polar p0 pi 33))
  (setq p55 (polar p54 (* 1.5 pi) 10))
  (setq p56 (polar p55 (* 1.5 pi) 10))
  (command "text" "j" "tc" '(346.0 113.0) "3.5" 0 (strcat "P." (rtos noptk 2 0)))
  (command "text" "j" "tc" p01tx "2.5" 90 (rtos elt1 2 2))
  (if (> eldat 0)
  (command "text" "j" "bl" p51 "2.5" 0 (strcat "+" (rtos eldat 2 2) " m"))
  (command "text" "j" "bl" p51 "2.5" 0 (strcat (rtos eldat 2 2) " m"))
  );if
  (command "text" "j" "ml" p52 "2.5" 0 "ELEVASI (m)")
  (command "text" "j" "ml" p53 "2.5" 0 "JARAK  (m)")
  (command "color" 50 "-linetype" "s" "continuous" "")
  (command "line" p0 p54 "")
  (command "color" 20 "-linetype" "s" "continuous" "")
  (command "line" p55 (polar p55 (* 0.0 pi) 33) "")
  (command "line" p56 (polar p56 (* 0.0 pi) 33) "")
  (command "line" p54 p56 "")

(setq file (read-line fp)) ; baris 4 
(setq jar1 (atof (substr file 1  10))) ; jarak datar 1
(setq elt  (atof (substr file 11 10))) ; elevasi titik pertama
;====
  (if (= jar1 "")
    (setq jar1 nil)
  )
  (if (= jar1 nil)
    (setq stop 1)
    (setq stop 0)
  )
  (while (= stop 0)
  (setq jar (- jar1 jar0))
    (setq jar0 jar1)
    (setq p2  (polar p0 0 (* jar sch))
  p21 (polar p2 (* 0.5 pi) (* (- elt eldat) scv))
    )
    (command "color" 20 "-linetype" "s" "dashed2" "")
    (command "line" p2 p21 "")
    (command "color" 20 "-linetype" "s" "continuous" "")
    (command "line" p01 p21 "")
    (command "color" 50 "-linetype" "s" "continuous" "")
    (command "line" p0 p2 "")
    (command "color" 20 "-linetype" "s" "continuous" "")
    (command "line"
     (polar p0 (* 1.5 pi) 10)
     (polar p2 (* 1.5 pi) 10)
     ""
    )
    (command "line"
     (polar p0 (* 1.5 pi) 20)
     (polar p2 (* 1.5 pi) 20)
     ""
    )

    (setq p22 (polar p2 (* 1.5 pi) 20))
    (command "line" p2 p22 "")
    (setq p2tx1 (polar p2 (* 1.5 pi) 5)
  p2tx3 (polar p0 0 (* (/ jar 2) sch))
  p2tx2 (polar p2tx3 (* 1.5 pi) 15)
    )
(if (< (* jar sch) 10) 
    (setq sdttx2 90) (setq sdttx2 0))
    
    (command "color" 7)
    (command "text" "j" "bc" p2tx1 "2.5" 90 (rtos elt 2 2))
    (command "text" "j" "mc" p2tx2 "3.0" sdttx2 (rtos jar 2 2))
    (setq p0 p2)
    (setq p01 p21)

(setq file (read-line fp)) ; baris 5 dst
(setq jar1 (atof (substr file 1  10))) ; jarak datar 1
(setq elt  (atof (substr file 11 10))) ; elevasi titik pertama
;plot patok
    (if (= jar1 "")
      (setq jar1 nil)
    )
    (if (= jar1 nil)
      (setq stop 1)
      (setq stop 0)
    )
  ) ;while

(close fp)
)
;;defun

Berikut langkah-langkah menggunakan program ini :
1. Copy dan paste list program diatas di note pad atau di program AutoLisp, simpan dengan nama cross-sungai.lsp atau langsung download program autolisp yang sudah saya siapkan (cross-sungai.lsp ) dan tempatkan di folder yang anda pilih 
2. Buat file input data dengan excel sebagai berikut :
• Buka lembar kerja baru dalam excel
• Edit lebar kolom A dan B menjadi 10 dengan cara (select kolom A dan B > Format> column width> 10> OK)
• Pada cell A1 : isi dengan nomor patok, misalnya : P1
• Pada cell A2 : isi dengan elevasi datum (bidang referensi) dari gambar cross section. (ambil elevasi terendah dari data yang akan digambar (mis:13.45), kurangi dengan 3 sampai 5 dan ambil harga bulat, (misalnya diambil nilai datum 10.00))
• Pada cell A3 : ketik "Jarak datar"
• Pada cell B3 : ketik "Elevasi"
• Pada baris ke-4,5,6..... dan seterusnya isilah dengan data cross section, yang berupa jarak datar (jarak kumulatif dari kiri ke kanan, jarak datar pertama = 0) di kolom A, dan elevasi di kolom B.
(Contoh input file excel dapat anda download disini)
• Selanjutnya simpan data dalam bentuk file teks dengan cara : 
File> Save as> (pada save as type cari pilihan “formatted text (*.prn)”> ketik nama file (mis:cross-1.prn) > simpan file di lokasi folder (C:/Procad/data/), kalau belum ada folder tersebut buatlah terlebih dahulu.
 
3. Dari program AutoCad, selanjutnya Load program dengan cara : Klik menu Tools> Load Application> cross-sungai.lsp (cari di folder tempat anda menempatkan file)> Load> Close
4. Pada Command Window di Auto CAD ketik “crss” lalu tekan
5. Selanjutnya masukkan nama file input data yang diminta di command window (mis: cross-1.prn). Maka cross section akan tergambar.

18 komentar:

  1. mohon toritorialnya gan
    ane masih bingung ne,,

    BalasHapus
  2. ndak terbaca perintah "crss" di autoCAD bro!!!

    BalasHapus
  3. mohon pencerahan petunjuk pengisian data untuk dimesi cross untuk design..sy sudah download tapi untuk berm dan tanggung sy binggung mau ngisi dimana


    regards,

    febrinoviansyah@yahoo.com

    BalasHapus
    Balasan
    1. Untuk menggambar profil melintang yang sudah ada desainnya lebih baik gunakan Procad saja

      Hapus
  4. ada nggak procad untuk desain gambar long & cross jalan raya yang sudah di modifikasi!!!!

    BalasHapus
    Balasan
    1. Setahu saya belum ada.. barangkali rekan-rekan yang punya bisa dishare disini

      Hapus
  5. hasil gambarnya nanti skalanya berapa? apa kita bisa mengatur skalanya sendiri?
    karena saya biasa menggunakan skala yang berbeda untuk vertikal dan horizontalnya. mohon pencerahan terima kasih.

    BalasHapus
    Balasan
    1. Hasilnya dengan Skala gambar 1:100 untuk ukuran kertas gambar A1. Kalau mau dibuat skala berbeda antara vertikal dan horisontal perlu dirubah dulu di dalam programnya. Untuk praktisnya pakai saja program procad yang bisa didownload di blog ini. Disana untuk gambar cross section bisa diatur skala gambarnya.

      Hapus
  6. mohon diperjelas tutorialnya gan, soalnya masih bingung

    BalasHapus
  7. https://www.facebook.com/Budiyanto-Mayulu-344893475587767

    BalasHapus
  8. mau tanya gan, itu kan untuk menggambar satu profil, kalau mau menggambar lebih dari satu profil, apanya yang dirubah dari lispnya?? mohon pencerahannya

    BalasHapus
  9. saya terhitung baru dalam hal ini pak bagaimana untuk mencari koordinat x-y dengan bacaan benang tengah dan atas kemudian sudut mohon bantuannya pak....

    BalasHapus
  10. file nya sudah tidak bisa didownload

    BalasHapus