AutoLISP, VBA, dan Macro

Posting ini saya buat karena ada pembahasan mengenai ini. Karena posisinya agak gak pas, saya buatkan posting khusus agar dapat dibahas lebih leluasa di sini. Terus terang saya gak begitu paham programming. Saya hanya akan bahas sejauh yang saya tau, silahkan tambahkan atau koreksi jika ada yang salah. Ketiganya merupakan bahasa pemograman yang dapat digunakan di AutoCAD. Jujur saja, saya tidak tahu pasti perbedaan antara Macro dan AutoLISP. Keduanya menggunakan bahasa native untuk AutoCAD.

Sejauh yang saya tahu, macro hanya digunakan untuk kostumisasi sederhana. Seperti yang saya gunakan untuk membuat command baru disini. Sementara AutoLISP digunakan untuk kostumisasi yang lebih kompleks. Plugin, program-program 3rd party, atau program tambahan banyak yang menggunakan AutoLISP. AutoLISP mampu menyimpan parameter untuk digunakan dalam fungsi matematika dan fungsi penggambaran.

VBA, merupakan 3rd party. Semua software sekarang sudah memiliki Visual Basic for Application. Di aplikasi Microsoft, software-software CAD lain yang populer, hampir semua software yang mapan punya. Apa yang membedakannya dengan AutoLISP?

Karena VBA populer, jika anda serius ingin menjadi programmer, anda dapat mempertimbangkan ini. Anda dapat berpindah software dan tetap menggunakan bahasa pemograman yang sama. Sementara AutoLISP, lebih mudah dipelajari jika anda memang AutoCAD user. Bahasanya rasanya lebih famliar. Namun anda akan kesulitan jika harus melakukan pemograman untuk software lain.

Sebetulnya masih ada lagi bahasa pemograman yang bisa dipakai. Sejak AutoCAD 2004, anda mungkin memperhatikan setiap menginstall AutoCAD, anda harus menginstall .NET Framework. Ya, sekarang anda dapat menggunakan semua bahasa pemograman .NET. Baik VB.NET, C.NET, dan sebagainya. Namun anda harus menginstall SDK (software development kit) untuk itu.

Mana yang anda pilih? Menurut saya, tergantung kebutuhan anda. Jika anda memang hanya menggunakan AutoCAD, AutoLISP mungkin lebih mudah dipelajari. Namun jika anda menggunakan beberapa software, dan ingin melakukan kostumisasi, mungkin VBA lebih cocok. Jika anda programmer yang serius mencari uang dari kostumisasi, .NET rasanya lebih masuk akal.

  • “Dari Bung Erwin
    Hai Mas Edo..
    Salam jumpa…
    Saya mau tanya mengenai AutoLisp seperti yang dipaparkan di atas. Bukunya sih saya sudah beli. Tapi isinya cuma deretan perintah2 seperti defun, setq dkk.
    Apakah ada cara mudah dan sederhana untuk belajar AutoLisp bagi pemula?
    Lalu sedikit nanya lagi, Apakah AutoLisp itu berbeda dengan VBA macro?
    Makasih sebelumnya. Sukses selalu Pak Edo..”

    Bung Erwin,
    Sebenarnya program Autolisp adalah program yang sangat mudah di mengerti, dan bisa langsung di eksekusi di command prompt, tetapi kekurangan Autolisp tidak bisa di pakai di program lain selain autocad dan memang Autolisp khusus di adopsi oleh Autodesk untuk Autocad.
    Perbedaan dengan VBA sangat jauh berbeda tapi prinsip programnya mirip sama, masing-masing punya kelebihan dan kekurangan, dan anda bisa mempelajari dua-duanya.

  • Edo

    Buat yang lain,
    mas Ade ini pakarnya AutoLISP, yang juga aktif di milis CADClub dan berbagai milis lain. Buat yang ingin konsultasi, atau mungkin butuh training atau pesan program AutoLISP, bisa hubungi beliau. Senang mas Ade ikut aktif di sini :)

  • Ah………:)
    “mas Ade ini pakarnya AutoLISP”
    Ngak juga sih bisa di bilang pakar, karena saya juga sampai saat ini masih terus belajar..bertanya…belajar, kita semakin tahu tentang Autolisp semakin banyak yang tidak di ketahui.

  • heru h day

    Mas, gimana kalo kita make object ARX dengan C++, kan kita costumasi object dan bisa bikin proxy object, dan menurut artikel yang saya baca hanya objectARX kita full costumasi dari CAD ..
    tnx

  • Edo

    To: Heru,
    Maaf, saya gak terlalu paham dengan object ARX. Silahkan coba posting di forum, di seksi programming. Di sana ada Afri dan abah Adesu yg lebih menguasai soal programming…

  • Jimmy GS

    Saya punya masalah, tentang vba pd autocad 2006, bagaimana membuat form untukprogram berikut ini (membuat gbr kotak 3 dmsi) trims :

    Public Sub TestAddBox()
    Dim varPick As Variant
    Dim dblLength As Double
    Dim dblWidth As Double
    Dim dblHeight As Double
    Dim dblCenter(2) As Double
    Dim objEnt As Acad3DSolid
    ” set the default viewpoint
    SetViewpoint Zoom:=True
    ” get input from user
    With ThisDrawing.Utility
    .InitializeUserInput 1
    varPick = .GetPoint(, vbCr & “Pick a corner point: “)
    .InitializeUserInput 1 + 2 + 4, “”
    dblLength = .GetDistance(varPick, vbCr & “Enter the X length: “)
    .InitializeUserInput 1 + 2 + 4, “”
    dblWidth = .GetDistance(varPick, vbCr & “Enter the Y width: “)
    .InitializeUserInput 1 + 2 + 4, “”
    dblHeight = .GetDistance(varPick, vbCr & “Enter the Z height: “)
    End With
    ” calculate center point from input
    dblCenter(0) = varPick(0) + (dblLength / 2)
    dblCenter(1) = varPick(1) + (dblWidth / 2)
    dblCenter(2) = varPick(2) + (dblHeight / 2)
    ” draw the entity
    Set objEnt = ThisDrawing.ModelSpace.AddBox(dblCenter, dblLength, _
    dblWidth, dblHeight)
    objEnt.Update
    ThisDrawing.SendCommand “_shade” & vbCr
    End Sub

    • heru h day, ST

      Public Sub TestAddBox()
      Dim varPick As Variant
      Dim dblLength As Double
      Dim dblWidth As Double
      Dim dblHeight As Double
      Dim dblCenter(2) As Double
      Dim objEnt As Acad3DSolid
      ” set the default viewpoint
      ”—————————–
      ” MATIKAN SETVIEWPORT -> ERROR DISINI
      ‘SetViewpoint Zoom:=True
      ”—————————

      ” get input from user
      With ThisDrawing.Utility
      .InitializeUserInput 1
      varPick = .GetPoint(, vbCrLf & “Pick a corner point: “)
      .InitializeUserInput 1 + 2 + 4, “”
      dblLength = .GetDistance(varPick, vbCrLf & “Enter the X length: “)
      .InitializeUserInput 1 + 2 + 4, “”
      dblWidth = .GetDistance(varPick, vbCrLf & “Enter the Y width: “)
      .InitializeUserInput 1 + 2 + 4, “”
      dblHeight = .GetDistance(varPick, vbCrLf & “Enter the Z height: “)
      End With
      ” calculate center point from input
      dblCenter(0) = varPick(0) + (dblLength / 2)
      dblCenter(1) = varPick(1) + (dblWidth / 2)
      dblCenter(2) = varPick(2) + (dblHeight / 2)
      ” draw the entity
      Set objEnt = ThisDrawing.ModelSpace.AddBox(dblCenter, dblLength, _
      dblWidth, dblHeight)
      objEnt.Update
      ThisDrawing.SendCommand “_shade” & vbCrLf
      End Sub

      • Jimmy GS

        saya sudh mematikan SETVIEWPORT, memang tdk ngak ada masalah namun masalah yang saya maksud di awal adalah bagai mana menginput angka di user form utk varpick, dbllength, dblHeight, dblWidth, apakah bisa dgn text box ? sya buat berikut
        mis : text1.Text = varpick, dll
        tetapi ngak bisa dirun juga, tk mas heru

        • heru h day

          coba emailkan file dvb (VB macro CAD ) ke email saya: heru.hday@gmail.com mungkin saya bisa bantu debuggingnya.
          untuk input di userform dgn text box selama ini saya tidak ada masalah, kemungkinan kesalahan(error) ada di userform source code. oh ya pesan errornya apa?

          • heru h day

            tadi sudah saya terima attachment nya dan setelah saya periksa ada beberapa kesalahan.
            1> jikalau kita run dari user form kita tidak bisa manggil object ThisDrawing karena itu diganti
            dengan:
            ‘With ThisDrawing.Utility
            Dim doc As AcadDocument
            Set doc = AcadApplication.ActiveDocument
            Dim util As AcadUtility
            Set util = doc.Utility

            With util

            2> method getpoint dari object util tidak ada return sehingga point yg di ambil ada dalam paramater
            dan harus dalam array double static ex:
            Dim pt1(0 To 2) As Double
            ….
            Call .GetPoint(pt1, vbCr & “Pick a corner point: “)

            3>method getdistance dari object util tidak memerlukan input basepoint dari listing, so kita ambil dari
            gambar langsung =>paramater jadi NULL
            dblLength = .GetDistance(, vbCr & “Enter the X length: “)

            lampiran(source yg telah dikoreksi, email nya telah saya reply bersama source code perbaikan):
            Option Explicit

            Private bStuck As Boolean

            Public Sub Gambar()
            ‘Menggambar benda kerja awal bentuk balok

            Dim varPick As Variant
            Dim dblLength As Double
            Dim dblWidth As Double
            Dim dblHeight As Double
            Dim dblCenter(2) As Double
            Dim objEnt As Acad3DSolid

            Dim pt1(0 To 2) As Double
            Dim pttemp(0 To 2) As Double
            ‘set the default viewpoint
            ‘get input from user
            ‘jangan pakai thisdrawing karena thisdrawing invisible(error disini”‘
            ‘ganti dengan ini
            ‘With ThisDrawing.Utility
            Dim doc As AcadDocument
            Set doc = AcadApplication.ActiveDocument
            Dim util As AcadUtility
            Set util = doc.Utility

            With util
            .InitializeUserInput 1

            ‘method getpoint tidak ada return(hanya subroutine) dan pt1 harus array(0 t0 2) as double
            Call .GetPoint(pt1, vbCr & “Pick a corner point: “)
            ‘varPick = .GetPoint(, vbCr & “Pick a corner point: “)
            ‘txtpick.Text = .GetPoint

            .InitializeUserInput 1 + 2 + 4, “”
            ‘modifikasi asumsi paramater getdistance point asumsi null(no base point)
            dblLength = .GetDistance(, vbCr & “Enter the X length: “)
            txtp.Text = dblLength
            .InitializeUserInput 1 + 2 + 4, “”
            ‘modifikasi asumsi paramater getdistance point asumsi null(no base point)

            dblWidth = .GetDistance(, vbCr & “Enter the Y width: “)
            txtl.Text = dblWidth
            .InitializeUserInput 1 + 2 + 4, “”
            ‘modifikasi asumsi paramater getdistance point asumsi null(no base point)

            dblHeight = .GetDistance(, vbCr & “Enter the Z height: “)
            txtt.Text = dblHeight
            End With

            ‘calculate center point from input
            dblCenter(0) = pt1(0) + (dblLength / 2)
            dblCenter(1) = pt1(1) + (dblWidth / 2)
            dblCenter(2) = pt1(2) + (dblHeight / 2)
            ‘draw the entity
            Set objEnt = ThisDrawing.ModelSpace.AddBox(dblCenter, dblLength, _
            dblWidth, dblHeight)
            objEnt.Update
            ThisDrawing.SendCommand “_shade” & vbCr

            ‘ Change the viewing direction of the viewport to better see the box
            Dim NewDirection(0 To 2) As Double
            NewDirection(0) = -1: NewDirection(1) = -1: NewDirection(2) = 1
            ThisDrawing.ActiveViewport.Direction = NewDirection
            ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
            ZoomAll
            End Sub

            Private Sub cmdgbr_Click()
            Call Gambar
            End Sub

            Private Sub cmdsls_Click()
            Unload Me
            End Sub
            Private Sub MultiPage1_Change()

            End Sub

            Private Sub UserForm_Click()

            End Sub

  • arus

    Senang, ada web Indonesia yang mau berbagi seperti ini.

    saya ada sedikit tulisan mengenai memulai dan membangun ide penulisan yang cukup membantu bagi pemula. Dimana dan berapa space yang bisa saya dapat untuk meng-upload tulisan ?

    tulisan yang saya buat ada sisipan gambar untuk mempermudah pembacaan yang membuat sedikit berat. :(

    salam

    • Jimmy GS

      Boleh dikirim ke email saya, tq
      jimmygifson@yahoo.com

    • heru h day

      sebenarnya dalam folder C:\program files\acadxxxx\help byk help2 yg mejadi referensi tutorial, seperti acad_dev.chm merupakan acuan referensi dan contoh2 dari object2 cad.
      yg menjadi sering mehjadi masalah dalam pemograman Cad dgn vba adalah konsep PBO(pemograman Berorientasi Objek/OOP) yg diimplementasi kan pada object CAD.
      untuk itu dalam file cad_dev.chm telah menjelaskan semua model dari object CAD, termasuk event, method, properties, Object serta example.
      selamat mebaca.

  • kris_bajulmati

    ikutan gabung ah. barangkali bisa mengail ilmu disini.

  • diky

    mo tanya npa ya klo qta print out dlayout kadang garis tepinya koq ga kliatan….?n tlg beri tau gmna cranya gmbr mengunakan autolisp……thanx