8 Eylül 2009 Salı

AutoCAD.Net API : Nesne Olayları


Merhaba Arkadaşlar,

Bu yazımda AutoCAD nesneleri için tanımlanmış olaylarının nasıl izlenebileceğini basitce göstermeye çalışacağım. Bu olaylar; nesnelerin eklenmesini, silinmesini ve nesnelerde yapılan değişiklikleri dinlemekte kullanılır. AutoCAD.Net API için tanımlanmış olaylar aşağıda:

public event Autodesk.AutoCAD.DatabaseServices.ObjectEventHandler ObjectAppended
public event Autodesk.AutoCAD.DatabaseServices.ObjectErasedEventHandler ObjectErased
public event Autodesk.AutoCAD.DatabaseServices.ObjectEventHandler ObjectModified
public event Autodesk.AutoCAD.DatabaseServices.ObjectEventHandler ObjectOpenedForModify
public event Autodesk.AutoCAD.DatabaseServices.ObjectEventHandler ObjectReappended
public event Autodesk.AutoCAD.DatabaseServices.ObjectEventHandler ObjectUnappended

Nesne olaylarını dinleyebilmek için yapmamız gereken tek şey bu olayları AutoCAD veritabanıyla ilişkilendirmek ve her ilişkilendirdiğimiz olay için bir geri dönüş fonksiyonu yazmak. Geri dönüş fonksiyonlarıyla da yakaladığımız nesneler üzerinde istediğimiz işlemleri yapabiliriz. Bu olayların nasıl işlediğini anlamak için ObjectAppended (nesne eklendi) ve ObjectErased (nesne silindi) olaylarını dinleyen aşağıdaki örnek kodu inceleyebilirsiniz.

using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;

[assembly: ExtensionApplication(
typeof(Autodesk.AutoCAD.ObjectEvents.MyPlugin))]

namespace Autodesk.AutoCAD.ObjectEvents
{

public class MyPlugin : IExtensionApplication
{

void IExtensionApplication.Initialize()
{
Document doc =
Application.DocumentManager.MdiActiveDocument;
Database db =
doc.Database;
// Olayların veritabanıyla ilişkilendirilmesi
db.ObjectAppended +=
new ObjectEventHandler(NesneEklendi);
db.ObjectErased +=
new ObjectErasedEventHandler(NesneSilindi);
}

void IExtensionApplication.Terminate()
{
try
{
Document doc =
Application.DocumentManager.MdiActiveDocument;
Database db =
doc.Database;
// Olayların veritabanıyla ilişkilerinin sonlandırılması
db.ObjectAppended -=
new ObjectEventHandler(NesneEklendi);
db.ObjectErased -=
new ObjectErasedEventHandler(NesneSilindi);
}
catch (System.Exception)
{

}
}

// Database.ObjectAppended için geri dönüş fonksiyonu
private void NesneEklendi(
object sender, ObjectEventArgs e)
{

Autodesk.AutoCAD.ApplicationServices.Application.
ShowAlertDialog("Değiştirilen Nesne :\n" + e.DBObject.GetType().ToString());

}

//Database.ObjectErased olayı için geridönüş fonksiyonu
private void NesneSilindi(
object sender, ObjectErasedEventArgs e)
{
ObjectId id = e.DBObject.ObjectId;
if (e.Erased)
{
Autodesk.AutoCAD.ApplicationServices.Application.
ShowAlertDialog("Silinen Nesne :\n" + e.DBObject.GetType().ToString());
}

}
}
}

Hiç yorum yok:

Yorum Gönder