AutoCAD için Yönetilebilir VB.NET Kodla Tanışma

AutoCADBeyni.com sitesinin faaliyette olduğu yıllar içerisinde yüzlerce AutoCAD kullanıcısının AutoCAD için kendi araçlarını yazmaya çok istekli olduklarını gördüm. Bununla birlikte, VB.NET kullanarak AutoCAD için birçok farklı yolla araçlar yazabilirsiniz. Bu esnada insanların COM otomasyonu ve yönetilebilir .NET çözümleri hakkında çok fazla bilgileri olmadığını sıklıkla görüyorum.

VB.NET, COM ve yönetilebilir .NET kavramları hakkında temel bir fikriniz olmadan, yazdığınız bazı kodların AutoCAD ‘de niçin çalışmadığı hakkında kafanız karışabilir. İşte bu makaleyi yazmamın amacı da bu kavramları olabildiğince açık bir şekilde anlatmak ve farklılıklarını açıklamaktır.

COM Nedir?

Şayet bir program yaratıyorsanız, oldukça kolay bir şekilde bir değişken “variable” tanımlayabilir ve bu değişkeni yazdığınız kod içinde kullanabilirsiniz. Bununla birlikte, şayet aynı anda çalışan ayrı ayrı iki programa sahipseniz, bir programdan diğerine ulaşamazsınız. Şayet bir programda yaratılmış olan değişkene ulaşmak isterseniz, bu ulaşım isteği reddedilir (engellenir). – işte burada zorlanırsınız.

Bu Microsoft’un icat ettiği Bileşen Nesne Modelinden “Component Object Model“ kaynaklanmaktadır. Bu Bileşen Nesne Modeli “Component Object Model“ programların diğer programlarla nasıl etkileşeceği ile ilgili olarak bir standart getirmektedir. Bu aslında diğer programı (diğer programı AutoCAD kabul edelim) otomatikleştirmek için, kodu bir programda (örneğin Excel) yazabileceğimiz anlamına gelmektedir.

Örneğin, aşağıdaki VBA kodunu Excel’de yazabiliriz:

Set ACAD = GetObject(, “AutoCAD.Application”)
ACAD.ActiveDocument.Utility.Prompt “Excel’den Merhaba!”

Bu kod AutoCAD’de “Excel’den Merhaba!” uyarısını görüntületecek talimatı AutoCAD’e gönderecektir.

Bu temel olarak işlemler arasındaki iletişim problemlerini çözmek için harika bir fikirdir ve programları otomatikleştirmek için çok kullanışlı bir yoldur. Bununla birlikte, COM kendi sınırlamalarına sahiptir.

COM ‘un Sınırlamaları Nelerdir?

COM çalışmasını almak için, Autodesk diğer programlar bu COM arayüzünü kullanabilsinler diye AutoCAD için bir COM arayüzü yaratmak ve sunmak zorundaydı. Bu ayrıca Autodesk’in her özellik için kesinlikle bir COM arayüzü yaratması anlamına gelmektedir ki; bu da bu yeni işlevin COM arayüzü ile otomatik olarak çalışamayacağı anlamına gelir. Bu yüzden, yeni bir COM arayüzü yaratılmak zorundaydı.

Her şeyi desteklemek, her bit işlev (özellik) için, ayrı bir arayüz yazmak Autodesk için pratik bir yol değildi ve ayrıca şayet Autodesk sizin ulaşmayı amaçladığınız şey için bir COM arayüzü yazmadıysa, sorununuz var demektir.

Bu COM ve iki program (veya işlem) arasındaki haberleşme ile ilgili asıl problemdi. Her programın kendi desteklediği haberleşme mekanizmaları sizi sınırlandırmaktadır.

NETLOAD Komutu Tam olarak Ne Yapar?

Önce NETLOAD komutunu – bu komut bir DLL dosyasını alır ve onu AutoCAD’in içerisine yükler kullanabilirsiniz. Bu aslında DLL dosyasının sahip olduğu iki program (veya işlem) arasındaki haberleşmeyi ortadan kaldıran işlevselliği AutoCAD’in içerisine yüklemek anlamına gelmektedir.

Böylece AutoCAD’in iç değişkenlerine hali hazırda direkt ulaşım yetkiniz olacağı için, COM gibi teknolojileri kullanma ihtiyacınız ortadan kalkacaktır. Bu size yapmak istediklerinize ulaşmak için daha fazla güç sağlayacaktır ve AutoCAD’i idare etmek için, AutoCAD’e içeriden ulaşmak dışarıdan ulaşmaktan çok daha kolaydır.

Bu yüklenmiş bir DLL dosyasını kullanmayı daha fazla tercih edilen bir seçenek haline getirmektedir.

Yönetilebilir Kodun Anlamı Nedir?

AutoCAD büyüklüğünde bir uygulama yazma kursu boyunca uygulamanın çeşitli yönlerinin davranışlarını incelemek için birçok dahili sınıf “class” ve alt uygulama “subroutine” yazmanız gerekecektir. AutoCAD işlemi içerisinde bir DLL dosyası olmak bize bizi AutoCAD uygulaması ile daha içli dışlı hale getiren bazı dahili işlemlere ve potansiyel olarak daha etkili yöntemlere daha etkili yollarla olanağı ulaşma sağlar.

Fakat programcılar olarak bizler AutoCAD’in bu dahili işlemleri ile iletişime geçebilmek için, bu dahili işlemlerin neler olduğunu bilmek zorundayız. İlaveten, kodlarımızı AutoCAD’in bu dahili işlemlerini doğru olarak kullanacak şekilde yazmalıyız.

Aslında, kodlarımızı uygulamanın kendisi tarafından kullanılan aynı uygulama programlama ara yüzünü kullanarak yönetmek zorundayız.

Yani örneğin, şayet AutoCAD “DrawLine()” olarak adlandırılan bir dahili fonksiyona sahipse, bizde kendi kodumuz içerisinde fonksiyonu “DrawLine()” olarak (tabi ki bir çizgi çizmek istediğimizi varsayarsak ) kullanmalıyız.

Hangi APIs Nerede Nasıl Bileceğiz?

Yapılacak ilk iş .NET projeniz içersinde AutoCAD  tipi kütüphaneler yaratmaktır. Bunu yapmak için, VB.NET içerisinde projenize sağ tıklayın ve referans ekleme seçeneğini seçin. Bu işlem aşağıdaki formu açacaktır:

Sekil-1

AutoCAD ‘de yönetilebilir kütüphanelere ulaşmak için, acdbmgd.dll, acmgd.dll ve accoremgd.dll dosyalarını seçmek isteyeceksiniz. Bu işlem VB.NET projenize uygun tipte kütüphaneleri ekleyecek ve daha sonra bunları kodunuz içerisinde kullanabileceksiniz.