AutoCAD’de VBNET’e Giriş

VBA Net yerine geçme sürecinde bir işlemdir. Bu VBA konusunda uygulamalara/becerilere sahip olanları hayal kırıklığına uğratacaktır; fakat sahip olduğunuz kodları kullanmaya devam edebileceğinizi bilmek hoşunuza gidecektir ve AutoCAD’de VBA ile programlama ile ilgili tüm bildiklerinizi VB.NET ile kullanmaya devam edebileceksiniz. Aşağıdaki öğretici ilk VB.NET projenizi oluşturmanız için sizlere VB.NET ile ilgili bazı temeller kazandıracaktır ve daha önceki kodlarınızı VB.NET‘e aktarmada iyi bir başlangıç noktası oluşturacaktır.

Nelere ihtiyacımız var?

AutoCAD içerisinde NET projeleri geliştirmek için (VBAIDE komutunu kullanarak) VBA ile yaptığınız gibi bir yerel IDE (bütünleşik geliştirme ortamı “integrated development environment” ) yoktur. Bu yüzden, kodunuzu yazmak ve derlemek için, harici bir yazılım geliştirme paketine ihtiyaç duyarsınız. Bununla birlikte korkmanıza hiç gerek yok, birçok programlama programının ücretsiz hızlı sürümünü Microsoft’un internet sitesinden indirebilirsiniz. İlgili siteyi ziyaret etmek ve Visual Basic 2010 programını indirmek için burayı tıklayın.
Daha sonra, AutoDesk’in internet sitesinden ObjectARX programlama ara yüzünü indirme ihtiyacı duyacaksınız. İlgili siteyi ziyaret etmek ve ObjectARX programlama ara yüzünü indirmek için,  burayı tıklayın. AutoCAD sürümünüz için doğru ObjectARX programlama ara yüzü kütüphanelerini indirdiğinize emin olmalısınız.

İlk VB.NET AutoCAD Projenizi Yaratalım

Visual Basic Express programını çalıştırın ve Yeni Proje “New Project” öğesini seçtikten sonra Klas Kütüphanesi “Class Library” seçeneğini seçin. Bu seçim dinamik bağlantı kütüphanesi (.dll dosyası) derleyen bir proje yaratacaktır. VBA’da BuÇizim “ThisDrawing” gibi AutoCAD nesnelerine otomatik olarak ulaşma hakkına sahiptiniz. Fakat bu programlama ortamında kendimiz AutoCAD‘e doğrudan ulaşan referanslar yaratmak zorundayız. Bunu kullanmak istediğimiz AutoCAD tip kütüphanelerini içeren ObjectARX olarak isimlendirilen referans vasıtasıyla yaparız.

  1. Çözüm Araştırıcısı Solution Explorer” penceresi altında, projeniz (Şayet yeniden isimlendirmediyseniz, KlasKütüphanesi1”ClassLibrary1” isimli proje)üzerine sağ tıklayın ve Properties seçeneğini seçin.
  2. Referanslar “References” sekmesine tıklayın.
  3. Ekle “Add” aşağı açılır ok işaretine tıklayın ve Referans “Reference” öğesini seçin.
  4. Araştır “Browse” seçin ve ObjectARX kütüphanelerinin kurulu olduğu klasörü araştırıp bulun. Bu kütüphaneler tipik olarak C:\ObjectARX 2011\ klasörüne kurulmaktadırlar.
  5. İşletim sisteminize bağlı olarak inc-win32 veya inc-x64 klasörünü açın.
  6. Autodesk.AutoCAD.Interop.dll ve Autodesk.AutoCAD.Interop.Common.dll, dll dosyalarını seçin ve OK düğmesine tıklayın. Bu işlem AutoCAD tip kütüphanelerini içe aktarır.
  7. Başka bir referans ekleyin ve bu sefer inc klasörünü seçin. AcMgd.dll ve AcDbMgd.dll dosyalarını seçin ve OK düğmesini tıklayın. Bu dosyaların niçin gerektiğinden tam olarak da emin değilim; fakat görünen o ki gerekiyorlar!
  8. Son olarak, Referanslar “References” sekmesi üzerinde AcMgd.dll ve AcDbMgd.dll referanslarının Yerel Kopya “Copy Localözelliğinin Doğru True” olarak ayarlandığının uyarısını alırsınız. Bu özelliğin Yanlış “False” olması gerekmektedir. Bunun için, bu referansları seçin ve özellikler penceresinde Yerel Kopya “Copy Localözelliğini Yanlış “False” olarak değiştirin.

Bazı İlk Kodları Yazalım

Artık projemiz AutoCAD’e bağlanmak için gerekli tüm referanslarla ayarlandı. Şimdi kod yazmaya başlayabiliriz.
Kod görünümüne geri geçiş yapın (Şayet herhangi bir şeyi yeniden isimlendirmediyseniz, Çözüm Araştırıcısı “Solution Explorer” altında Class1.vb  isimli projeye çift tıklayın). Bu sınıftaki “class” referanslarımız içinden kullanmayı planladığımız kütüphaneleri belirleme ihtiyacı duyacağız. Bunun için, sınıfın “class” en üstüne (Genel Sınıf “Public Class” Class1‘den önce) aşağıdaki kodu yerleştirin:

    'Contains the AutoCAD Type Library
    Imports Autodesk.AutoCAD.Interop
    'Contains the AutoCAD/ObjectDBX Type Library
    Imports Autodesk.AutoCAD.Interop.Common

Artık VBA içerisinde, BuÇizim “ThisDrawing” nesnesine ulaşım hakkına sahip olduk. Bu oldukça faydalıdır; yani burada bu fonksiyona sahip olmak çok faydalı olacaktır. Artık AutoCAD nesne modellerine ulaşım hakkımız olduğu için, istediğimiz nesneye ulaşmak için, basit bir Al “Get” prosedürü ekleyebiliriz. Aşağıdaki kodu Sınıfın “Class” içerisine (Genel Sınıf “Public Class” Class1ve Sınıf Sonu “End Class” arasına) yerleştirin:

 
    Public ReadOnly Property ThisDrawing As AcadDocument
        Get
            Return Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.AcadDocument
        End Get
    End Property

Artık BuÇizim “ThisDrawing” nesnesini klas “class” içerisinde her yerde VBA nesnesi olarak kullanabiliriz.

İlk AutoCAD Fonksiyonumuzu Yazalım

Artık AutoCAD komutlarımızı üretmeye başlamak için, her şey hazır. Şayet transfer etmek istediğiniz herhangi bir VBA koduna sahipseniz, şimdi bu kodu bu sınıf “class” içerisine yapıştırabilirsiniz. Aşağıda geçenlerde örnek olarak yazdığım bir kodu bulacaksınız. Bu kod MTEXT nesnelerine çerçeve eklemektedir ve bu kod ile VBA kodu arasındaki tek fark, hata yakalamak için, VBA’daki önceki metotlardan daha iyi olan NET Try/Catch metodunu kullanmış olmamdır:

    Public Sub CreateMTextBorder()
        Dim ent As AcadEntity
        Dim pnt As Object
        Try
            ThisDrawing.Utility.GetEntity(ent, pnt, "Çerçeve eklemek istediğiniz MTEXT nesnesine tıklayın")
            Dim mt As AcadMText
            mt = ent
            Dim Min As Object, Max As Object
            Dim Coords(7) As Double
            mt.GetBoundingBox(Min, Max)
            Coords(0) = Min(0) - 1
            Coords(1) = Min(1) - 1
            Coords(2) = Max(0) + 1
            Coords(3) = Min(1) - 1
            Coords(4) = Max(0) + 1
            Coords(5) = Max(1) + 1
            Coords(6) = Min(0) - 1
            Coords(7) = Max(1) + 1
            If ThisDrawing.ActiveSpace = AcActiveSpace.acModelSpace Then
                ThisDrawing.ModelSpace.AddLightWeightPolyline(Coords).Closed = True
            Else
                ThisDrawing.PaperSpace.AddLightWeightPolyline(Coords).Closed = True
            End If
        Catch
            ThisDrawing.Utility.Prompt("Invalid Selection")
        End Try
    End Sub

Alt yordamınızı “Subroutine” AutoCAD tarafından görülebilir olmasını sağlamak için, Özel “Private“ karşıtı olan Genel “Public“ olarak ayarladığınıza emin olun. Ayrıca, yukarıdaki kodun AutoCAD tarafından görülebilir olmasını sağlamak için, son bir kod daha vardır. Alt yordamdan “Subroutine” önce AutoCAD’e bu alt yordamın “subroutine” direkt olarak AutoCAD’den çağrılabilir olduğunu söyleyen birkaç META veriyi eklememiz gerekmektedir. Bu META veri alt yordamımızı “subroutine” AutoCAD komut satırına atadığımız yerdir. Aşağıdaki kodu  Public Sub CreateMTextBorder() satırından önceki satıra ekleyin:

               <Autodesk.AutoCAD.Runtime.CommandMethod("MTEXTB")> _

Küçüktür Büyüktür (<>) işaretleri arasına koyacağımız her şey AutoCAD komut satırına yazdığımız komut olacaktır.

Artık, sınıfımız “class” tamamlandı ve AutoCAD’in kullanımı için, bir DLL dosyası içerisine derlenmeye “compile” hazırdır.

Derleme “Compiling”

dll dosyamızı yaratmak için, Yanlış Ayıklama “Debug” menüsü altında, Oluştur “Build” komutunu seçebiliriz. Fakat şayet bu oluşturma işlemini şimdi yaparsak, AutoCAD’de NETLOAD komutu dll dosyasını yükleme işlemi başarısız olacaktır. Bu başarısız yükleme işlemi dll dosyasının yaratıldığı NET açık ortam çerçevesinin “framework“ sürümünün kullandığınız AutoCAD sürümü ile aynı olma zorunluluğundan kaynaklanmaktadır. AutoCAD 2011 NET açık ortam çerçevesinin “framework“ 3.5 sürümünü ile oluşturulmuştur. Bu yüzden VB’ye sınıfımızı “class” bu sürümü kullanarak derlemesi gerektiğini söylemeliyiz.

  1. Daha önce referansları eklerken yaptığımız gibi proje özellikleri penceresine gidin.
  2. 2.      Derleme “Compile” sekmesine tıklayın.
  3. Sekmenin en altındaki Gelişmiş Derleme Seçenekleri “Advanced Compile Options” kısmına tıklayın.
  4. 4.      Gelişmiş Derleyici Ayarları “Advance Compiler Settings” iletişim kutusunun en altındaki, Hedef Açık Ortam Çerçevesi Target Framework .

NET Açık Ortam Çerçevesi v.3.5 “Framework v.3.5

  1.  OK düğmesine tıklayın. Tıkladıktan sonra projeyi kapatıp yeniden açmanız gerekecektir.

Artık dll dosyamızı AutoCAD ile uyumlu yapacak NET açık ortam çerçevesi “framework“ üzerinde oluşturabiliriz. Oluşturma işlemi tamamlandığında derlenmiş dll dosyasının yerini yakalayabilmemiz için, Çıktı “Output” penceresinin açık olması faydalı olacaktır. Bu pencereyi Yanlış Ayıklama “Debug” > Windows > Çıktı “Output menüsüne giderek açabiliriz. Yanlış Ayıklama “Debug” > Oluştur “Build” menü komutuna gidin. Bu işlem dll dosyasını derleyecektir. Çıktı “Output” penceresinden dll dosyasının klasör yolunu kopyalayın ve AutoCAD‘i açın.

Komut satırına NETLOAD yazıp Enter tuşuna basın. Bu NET projeleri yükleme komutudur. Klasör yolunu vermeniz için bir uyarı (veri istemi) alabilirsiniz. Bu durumda, az önce yaratmış olduğumuz ve Windows panosuna kopyaladığımız dll dosyasının klasör yolunu yapıştırın. Şayet bu işlem işe yararsa, komut sessizce bitirilecektir; yani herhangi bir hata mesajı almayacaksınız. Artık, dll dosyası yüklendi ve dll dosyası içerisindeki alt yordamı “subroutine” çağırmak ve kodda belirttiğimiz işleri yaptırmak için, komutu yazabilirsiniz. Bu makaledeki örnek için bu komut,MTEXTB dir.