Ana sayfa   Sponsorlarımız:
Rapor - Makale > CAD/CAM/CAE > CATIA VBA Uygulamaları:

Mesut Özer
Makine Müh., CATIA V5 Uzmanı
Mayıs 2006, Bursa

GİRİŞ

Günümüzdeki tasarım yazılımları ilk yüklendiklerinde beraberlerinde kullanıcının birçok işini görebilen tasarım araçları içerir. Aynı zamanda tasarım yazılımları, her yeni versiyonda bir önceki versiyonda yapılan işi kolaylaştıran yeni araçları kullanıma sunar. Bununla birlikte bu yazılımlarının, her kullanıcının tüm isteklerini yerine getirmesi mümkün değildir. Bir kullanıcı için mutlaka olması gereken bir özellik, bir başka kullanıcı için gereksiz olabilir.

Tasarım yazılımlarını üreten firmalar bir çoğu, kullanıcıların büyük kısmını memnun edebilmek ve aynı zamanda rekabet için satış fiyatını minimum seviyede tutabilmek için modüler yapı çözümüne başvurur. Aynı zamanda bu yapı ile yazılım firması kaynak planlamasını daha iyi yapabilir. Modüler yapı ile kullanıcı da işine yaramayan özellikler için para ödemez. Tasarım yazılımları ayrıca kullanıcıya yazılım içine bazı tanımlamalar yapabilme ve kodlar yazabilme fırsatını vererek, bu modüler yapıyı daha da esnetebilir.

Her kullanıcı kendi tanımlamalarını bu yazılım üzerinde kullanabilmek ister. Örneğin tasarımın gerçekleştirilmesinde kullanılacak malzemelerin herhangi bir yerde değil de, CAD dosyasının içinde tanımlanması gibi daha çok veri tipindeki tanımlamalar bu grup içine dahil olurlar.

Durum kullanıcının kendi yazılım kodunu tasarım yazılımı içine yerleştirmek olduğunda bulunmaz bir fırsat ortaya çıkar. Örneğin, bir kalıp tasarımında, kalıplanacak malzemenin özelliğine bağlı olarak, kalıp malzemelerinin ebatlarının ve cinsinin otomatik seçilmesi gibi daha çok karar mekanizmasına sahip tanımlamalar ile rutin bir işin birçok kez tekrarlanmasının gerektiği durumlarda, bu işi otomotikleştiren tanımlamalar bu grup içine dahil edilebilir.

Ayrıca bu tanımlamalara ilave olarak, her tasarım yazılımına özgü, ilave fonksiyonlar olabilir. Bu fonksiyonlar daha önce yapılmış bir tasarımın tasarım bilgilerinin (knowledge) yakalanması (capture), düzenlenmesi, paylaşılması (share) ve uygulanması (reapply) şeklinde olabilir. Bu kabiliyetlere sahip olan yazılımlara öğrenen yazılımlar diyebiliriz. Bu öğretme işini kullanıcı yazılım kabiliyetlerini kullanarak yapar.

Tasarım yazılımı içinde yapılan her tanımlama ve kod, tasarımın belli kriterlere uyan bir standart tasarım olmasını da sağlar.

Tüm bu katma değerler tasarım sürelerinin kısaltılmasını ve bu süreçlerin hatasızlaştırılması sağlayan önemli birer parametre olurlar. Tasarım süreçlerinin uzunluğu, hata kaynaklı geri dönüşler ve standart olmayan çalışmalar her zaman kaynak kaybı anlamına gelir. Bu kayıpları ortadan kaldırmak için günümüzde kullanıcıya ve tasarım yazılımına iş düşmektedir.

CATIA V5 üzerinde parametreler, kodlar ve knowledge

CATIA V5 tasarım yazılımı, tanımlama, kod yazımı ve öğrenme fonksiyonlarını ve daha fazlasını bir arada içeren bir yazılımdır.

Kullanıcı tanımlamaları parametre oluşturulması şeklindedir. Tasarım içindeki herhangi bir parça için, istediğiniz özellikleri içeren, kullanıcı tanımlı ve formüle edilebilir parametreler oluşturulabilir. Örneğin bir kalıp parçası için "Malzeme" isimli bir parametre oluşturup, bu parametre içine, bu parçanın yapılacağı malzemenin standart kodunu girebilirsiniz. Böylece ilişkili iki veriyi (parça ve malzeme) aynı doküman içinde saklamış olursunuz (CATPart dosyasında). Bu parametreler ayrıca formüle edilebilir. Örneğin bir kalıp için alt ve üst plaka için 1050 standardındaki malzemeyi yazılım otomatik olarak seçerken, kesme çeliği için 2379 standardındaki malzemeyi otomatik olarak seçebilir.

CATIA V5 içindeki kod yazılımı visual basic (VB) ya da CAA lisansı (Component Application Architecture) üzerinde oluşturulabilir. VB uygulamaları son CATIA kullanıcıları tarafından kullanılırken, CAA ise CATIA üzerinde yazılım geliştiren firmalar tarafından kullanılır. Ayrıca scriptler ile (CATScript ve vbscript) programlama yapmak da mümkündür. (Detaylı bilgi için www.3ds.com/plm-glossary ve www.3ds.com/alliances )

CATIA V5 içindeki öğrenme işi ise knowledge modülleri ile gerçekleştirilir. Bu modüller, programlama bilgisi gerektirmeden, çok basit ifadelerle tasarım bilgilerinin yakalanması, paylaşılması ve yeniden kullanılmasını sağlar. Detaylı bilgi için: www.3ds.com/products-solutions/plm-solutions/catia/all-products/domain/Product_Synthesis


CATIA V5 ve VBA

CATIA içine kod yazımında, kullanıcı tanımlı formlarının kullanılabilmesi nedeniyle VBA (Visual Basic for Applications) ya da VB (Visual Basic) , scriptlere tercih edilir.
VBA yazılım geliştirme ortamı lisans gerektirmeyen bir ortamdır. Bununla birlikte VBA ile geliştirdiğiniz kodları derleyip (compile) "exe" dosya haline getiremezsiniz.
VB yazılım geliştirme ortamı ise VBA'ya ilave özellikler içerir ve VB ile kodunuzu exe dosya haline getirebilirsiniz. VB kullanabilmek için bu yazılımın lisansına sahip olmanız gerekir. Bu nedenle her kullanıcının uygulayabilmesi için örneklerde VBA ortamı seçilmiştir.

VBA'nın avantajlarını öğrenmek için aşağıdaki site ziyaret edilebilir
www.microsoft.com/europe/vba/news/strategic_reviews/155.htm

CATIA'da kod geliştirme, CATIA nesnelerine (bir product, bir part, bir pad vs) VBA yardımıyla ulaşmayı, bu nesnelerin özelliklerini (properties) değiştirmeyi ve nesne metotlarını (methods) çağırmayı içerir.

Nesne, özellik ve metot kavramlarını birer kod satırı ile açıklayacak olursak:

Set catia = GetObject(, "CATIA.Application")
komut satırı catia nesnesine erişmemizi ve onu almamızı sağlar. (Eğer CATIA açık değilse, bu kod hata oluşturur bu durumda CreateObject fonksiyonunu kullanmak gerekebilir)

Bu nesneye eriştikten sonra bu nesne ile ilgili diğer özellikler alınabilir. Örneğin "catia" nesnesine ait ActiveDocument nesnesini alıp, daha sonra bu nesnenin Name özelliğini alarak, aktif olan dökümanının isim bilgisine ulaşılabilir.

If InStr(1, catia.ActiveDocument.Name, "OYUN.CATProduct") < 1 Then
komut satırı aktif olan doküman adının "OYUN.CATProduct" olup olmadığını kontrol etmekte, buna göre program akışı değişmektedir.

Bazı durumlarda nesnelere ait metotları çağırmak gerekir. Örneğin aktif olan dökümanı kaydetmek isteyebilirsiniz. Bu durumda yapmanız gereken save metodunu çağırmaktır.

Catia.ActiveDocument.Save
komut satırı aktif olan dökümanı kaydedecektir.

Yukarıdaki örneklerdeki gibi CATIA içinde birçok özellik ve metot vardır. Bunların hepsini bilmek mümkün olmadığı gibi gerekli de değildir. CATIA'nin help dökümanları, tüm özelliklerin ve metotların listesini içerir. Ayrıca bu dökümantasyon, özellik ve metotlarla ile ilgili detaylı bilgilerde sağlar. CATIA help dökümantasyonu, programlama yapan CATIA kullanıcılarının başvuru dökümanı olarak kullanacağı bir kaynaktır.

CATIA'da Macroların Kullanımı

CATIA üzerinde yeni bir macro yazma ve varolan bir makroyu kullanmak için "Tools-Macro-Macros" komut dizilimi ile açılan Macros penceresi kullanılır. Bu pencerede bulunan "Run" butonu ile var olan bir macroyu çalıştırabilir, "Edit" butonu ile bu macroyu değiştirebilir,"Create" butonu ile yeni bir macro oluşturabilirsiniz.


Macros Penceresi

Bir "catvba" dosyası birden çok macroyu içerebilir. Bu vba dosyası bir macro kütüphanesidir (macro library) CATIA içine yeni bir macro kütüphanesi ilave etmek için bu penceredeki "Maco Libraries" butonu kullanılır.


Macro Libraries Penceresi

Bu pencerede bulunan "Add existing library" seçeneği ile var olan bir vba dosyası CATIA içine dahil edilebilir.

Macrolar Edit ya da Ceate butonu ile açılan VBA geliştirme ortamında yazılır.


VBA geliştirme ortamı


Örnek bir makro - Koordinat Alma

İlgili dosyaları indirmek için tıklayınız: koordinat.zip (41KB)

CATIA içine VBA ile kod yazılmasına ilişkin inceleyeceğimiz örneklerden ilki, ekran üzerinde seçilen noktanın x,y,z eksenlerindeki koordinatlarını alan ve gerektiğinde bu koordinata bir nokta ekleyen bir macrodur.


Koordinat alma macrosu

Bu macro arka planda sürekli aktif olarak kaldığı için, hızlı koordinat değerlerini alma ve noktalama işlemlerinde kullanıcıya önemli kazançlar sunabilir. Boşluk dışında her nokta seçilebilir.

Macronun kullanımı, ilgili noktanın seçilip, formun üzerine sol ya da sağ mouse tuşuna basılması şeklindedir. Sol tuşa basıldığında form üzerindeki textbox'lara koordinat değeri gelir. Sağ tuşa basıldığında textbox'lara hem koordinat değeri gelir, hem de seçilen yerde nokta oluşturulur.

Başlangıç kodunun oluşturulması:

CATIA'da yeni bir makro oluşturulduğunda (Create) ilgili vba dosyasına bir modül ilave edilir. Macroda bu modül "koordinat_alma" ismindedir. Siz daha sonra, hangi formu çağırmak isterseniz bu formun show metodunu kullanarak ekrana getirirsiniz.

secim_koord_frm.Show vbModeless
Bu komur satırı secim_koord_frm isimli formu ekrana getirmektedir. Bu form ise bizim KOORDINAT isimli (caption) formumuzdur. Satır sonunda bulunan vbModeless ifadesi, formumuz aktifken CATIA'nin da kullanılabilmesini sağlayan bir ifadedir ve bu makro için gereklidir.

Formun oluşturulması:

Form dört adet label (X,Y,Z ve Tip), dört adet textbox ve görünmeyen (transparant) ve en üstte yer alan bir CommandButton'dan oluşur. Bu commandbutton formun boş bir yerine tıklama zorluğunu ortadan kaldırmak için konulmuştur.

Form kodunun oluşturulması:

Form üzerinde yapılan işlemler için (events) belli fonksiyonların ya da sub'ların cağrılması gerekir. Bu fonksiyon ya da sub'ların yapacağı işlemler, bizim programımızın akışını belirler.
Form kodumuzda toplam üç adet sub bulunmaktadır.

Private Sub UserForm_Initialize()
...
...
End Sub

Bu sub macromuz ilk çalıştırıldığında devreye girer ve CATIA'nın çalışıp çalışmadığını kontrol eder.

Private Sub CommandButton1_Click()
...
...
End Sub

Bu sub en üstte bulunan gizli (transparant) commandbutton'nuna tıkladığınızda devreye girer ve bu sub CATIA'da seçilen noktanın koordinatlarını textbox'lar üzerine taşır.


Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
...
...
End Sub

Bu sub gizli commandbutton üzerine sağ mouse tuşu ile tıklandığında devreye girer ve texboxlar üzerine seçilen noktanın koordinatların yazdıktan sonra, seçilen yerde bir de nokta oluşturur.

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.

TurkCADCAM.net > Türkiye'nin Yeni Ürün Tasarım, Geliştirme, CAD/CAM/CAE ve İmalat Teknolojileri Portalı
***** Sektörün Profesyonel Bilgi ve İşbirliği Platformu *****
© 2008 Sinerji Yayıncılık, Tanıtım ve Danışmanlık Hizmetleri
Bu portaldaki içerik, ancak kaynak belirtilmesi ve izin alınması şartıyla yayınlanabilir.