Sub'lar
içinde yer alan kod satırlarını kısaca inceleyelim:
UserForm_Initialize
sub'ı içindeki kodlar
On Error
Resume Next
Set catia = GetObject(, "CATIA.Application")
If Err.Number <> 0 Then
MsgBox "Programdan önce CATIA programını çalıştırmalısınız.",
vbCritical, "HATA"
End
End If
Bu kod satırları, CATIA'nın arka planda çalışıp çalışmadığını
kontrol etmektedir. Eğer CATIA çalışmıyorsa, makro ekrana
bir uyarı mesajı getirerek sonlanır.
If catia.ActiveDocument
Is Nothing Then
MsgBox "Açık döküman yok", vbCritical, "HATA"
End
End If
Bu kod satırları CATIA'da açık bir doküman olup olmadığını
kontrol eder. Eğer yoksa macro ekrana bir hata mesajı getirerek
sonlanır.
CommandButton1_Click
sub'ı içindeki kodlar
Set secim
= catia.ActiveDocument.Selection
Set secilen = secim.Item(1)
Bu kod satırları, CATIA'da seçilmiş olan elemanları alır ve
elemanların birincisini secilen nesnesi içine atar. Böylece
çoklu seçim bile yapılmış olsa her zaman ilk seçilen elemanın
koordinatları forma alınır.
ReDim koord(2)
secilen.GetCoordinates koord
Bu
kod satırlarında "koord" isimli bir array oluşturulmakta
ve bu array içine secilen nesnesinin koodinatları "GetCoordinates"
metodu ile alınmaktadır.
If secilen
Is Nothing Then
TextBox1.Text = "#"
TextBox2.Text = "#"
TextBox3.Text = "#"
TextBox4.Text = "Seçim yok"
Else
TextBox1.Text = Round(koord(0), 3)
TextBox2.Text = Round(koord(1), 3)
TextBox3.Text = Round(koord(2), 3)
TextBox4.Text = secilen.Type
End If
secim.Clear
Bu
kod satırlarında ise alınan koordinatlar ve seçilen elemanın
tipi form üzerindeki textbox'lara yazılmaktadır. Daha sonra
secim nesnesinin "Clear" metodu çağrılarak CATIA
üzerindeki seçimler temizlenir.
CommandButton1_MouseDown
sub'ı içindeki kodlar
If InStr(1,
catia.ActiveDocument.Name, ".CATPart") >= 1 And
Button = 2 Then
Set part_dokuman = catia.ActiveDocument
Set hybrid_bodies = part_dokuman.Part.HybridBodies
Set point_body = hybrid_bodies.Item("NOKTALAR")
If Err.Number <> 0 Then
Set point_body = hybrid_bodies.Add
point_body.Name = "NOKTALAR"
Err.Clear
End If
Bu
kod satırlarında CATIA'da açık olan dökümanın CATPart olup
olmadığı kontrol edilmektedir. Eğer kontrol yapılmazsa sub
product üzerine nokta atmaya çalışacağından hata meydana gelecektir.
"HybridBodies" özelliği ile part dökümanı içinde
bulunan tüm Geometrical Set'ler nesneler olarak alınır. Bu
nesneler içinde adı "NOKTALAR" olan Geometrical
Set'in varlığı kontrol edilir. Eğer böyle bir set yoksa oluşturulur
ve bu set "point_body" nesnesi olarak alınır. "NOKTALAR"
Geometrical Set'i noktaların oluşturulacağı yerdir.
Set factory
= part_dokuman.Part.HybridShapeFactory
Set secilen = secim.Item(1)
ReDim koord(2)
secilen.GetCoordinates koord
If Not secilen Is Nothing Then
Set nokta = factory.AddNewPointCoord(koord(0), koord(1), koord(2))
point_body.AppendHybridShape nokta
part_dokuman.Part.Update
End If
CommandButton1_Click
Bu
kod satırlarında seçilen noktanın koordinatları alınmakta
(yukarıda açıklandı) ve bu koordinatlarda noktanın oluşturulması
sağlanmaktadır. Nokta oluşturulurken bir "factory"
nesnesi alınmakta (tüm geometrik elemanlar bu factory yardımıyla
oluşturulur), ve bu nesne ile yeni bir nokta "AddNewPointCoord"
metodu ile oluşturulmaktadır. Oluşturulan bu nokta "AppendHybridShape"
metodu ile daha önce açılan "NOKTALAR" Geometrical
Set'i içine dahil edilir. Part'ımız "Update" metodu
ile güncellenir. En sonunda da "commandbutton1_click"
sub'ı çağrılarak değerler textbox'lar içine yazılır ve seçim
temizlenir.
Yukarıdaki
kodlardan da görüldüğü gibi bir çok CATIA özellikleri ve metotları
kodlama sırasında kullanılmaktır. Geri kalan kod kısmı ise
(if, dim, redim vb.) standart VB kodlamasıdır. Kodlama sırasında
önemli olan, CATIA'ya ait nesnelerin özellik ve metotlarını
iyi kavranmış olmaktır.
Örnek
bir macro - Küp Oyunu
İlgili
dosyaları indirmek için tıklayınız: oyun.zip
(250KB)
Bu
oyun CATIA'nin makro kabiliyetleri kullanılarak oluşturulmuş
bir oyundur. Bu oyun ortaya çıkan farklı renklerdeki küplerin
tabla üzerine 3'lü şekilde sıralanması ile oynanır.
Küpler Oyunu
Küp
Oyunu koduda, bir önceki macroda olduğu gibi birçok CATIA
özelliğini ve metodunu içerir. Kod genel yapı olarak aşağıdaki
gibi bölünebilir:
- Başlangıç
kodu (UserForm_Initialize sub'ı): Değişken atamaları,çoğaltılacak
küpün kopyalanması vb. başlangıç işlemlerinin yapıldığı
sub.
- Ana
döngü (timer_sub sub'ı):Kodun genel akışının sağlandığı,
karar kodlarının cağrıldığı ve küpleri coğaltıldığı sub.
- Küplere
hareketin verilmesi (hareket sub'ı): Bu kısımda küp istenen
değerlerde hareket ettirilmektedir.
- Küplerin
yok olma kararının verilmesi (tarama sub'ı): Bu kısımda
her kat taranarak, yok edilebilecek küpler varsa bunların
yok olması sağlanmaktadır.
- Diğer
işlemler (events): Bu sub'larda butonlara tıklanması sırasında
nelerin yapılması gerektiğini belirten kodlardır.
Kodun
ana akışı yukarıda belirtildiği gibidir, kodun kalan kısımları
ise küplerin düşme efekti, oyun hızlanma şekli, puanlama gibi
diğer yardımcı kodlardır.
CATIA
nesneleri ile ilgili olan önemli kod satırların aşağıda açıklanmıştır.
Set root
= catia.ActiveDocument.Product
Set kup = root.Products.Item(2)
Set kupmove = kup.Move
Bu kod satırlarında küp nesnesi olarak ağaçtaki 2.eleman yani
"kup" elemanı alınmış ve bu kup nesnesinin "kupmove"
isimli hareket nesnesi oluşturulmuştur. Kod boyunca küplerin
hareketlendirilmesi "kupmove" nesnesi ile gerçekleştirilmiştir.
Set kup_secim
= catia.ActiveDocument.Selection
kup_secim.Clear
kup_secim.Add kup
kup_secim.Copy
Bu kod satırlarında küp nesnesi kopyalanmakta ve sonraki küpler
için hazır bekletilmektedir.
kup_secim.VisProperties.SetRealColor
255, 100, 100, 1
Bu kod satırında seçilen küpün görsel özellikler yani rengi
ayarlanmaktadır.
kup_secim.Clear
kup_secim.Add root
kup_secim.Paste
Bu kod satırında hafızadaki kopyalanmış küp, ana product üzerine
yapıştırılıp çoğaltılmaktadır.
kupmove.Apply
tarray
Bu kod ile tarray değişkenine yüklenen değerler ile küp hareket
ettirilmektedir.
kup_secim.Delete
Bu kod ile işi biten küpün silinmesi sağlanmaktadır.
Diğer
açıklamaların bir kısmı vba dosyası içinde açıklama olarak
belirtilmiştir. Macronun kurulup çalıştırılması ile ilgili
bilgiler "oyun_aciklamalar.txt" dosyasında belirtilmiştir.
SONUÇ
CATIA
V5'in VBA ile programlanabilirliği iki farklı örnek ile gösterilmiştir.
Birinci örnek anlaşılabilirliği açısından, ikinci örnek ise
farklı olması açısından seçilmiştir. Örnekler daha fazla tasarım
ve üretime yönelik olacak şekilde çoğaltılabilir. CATIA V5,
VBA ile programlama için oldukça iyi ve esnek çözümler sunmakta,
birçok yerde sınırlar kullanıcının hayal gücü ile belirlenmektedir.
Zamanla
tasarım yazılımlarının içine kod yazılması, daha önemli hale
gelecek, yazılım firmalarınının bu yöndeki açılımları daha
da genişleyecektir. Bu nedenle kullanıcıların bu yönde (sadece
VBA değil aynı zamanda öğrenen yazılımların diğer özellikleri
konusunda) kendilerini geliştirmeleri, çoklu kullanıcıların
bulunduğu işletmelerde bu işe kaynak ayrılması yerinde olacaktır.
|