İçeriğe geç

[Kod] Sketch’ler ile çalışmak

Sketch içinde de macro yardımı ile çizim yapmak ve gerekli geometrik ve ölçüsel şartları atamak mümkündür.  Her ne kadar sketch içinde macro ile çizim yapmak zaman alıcı ve zor olsada, bazı standart elemanlar için macro kullanmak faydalı olabilir. Aşağıdaki örnekte sketch içinde bir dik ikizkenar üçgen oluşturulup, simetri-açı-uzunluk gibi şartların çizgiler üzerine ataması yapılmıştır.

    

Sub CATMain()

'Aktif dökümanı alıyoruz
Dim document As PartDocument
Set document = CATIA.ActiveDocument

'Aktif dökümana bağlı part ve bu part altındaki Partbdy'i nesne olarak alıyoruz
Dim prt As Part
Set prt = document.Part
Dim bdies As bodies
Set bdies = prt.bodies
Dim bdy As body
Set bdy = bdies.Item(1)
'XY düzlemimizi plan olarak tanımlıyor ve yeni bir sketch oluşturuyoruz
Dim sketches As sketches
Set sketches = bdy.sketches
Dim orgElements As OriginElements
Set orgElements = prt.OriginElements
Dim referencePlane As Reference
Set referencePlane = orgElements.PlaneXY
Dim skecth As Sketch
Set skecth = sketches.Add(referencePlane)

'Bu sketch'imiz için eksen takımını tanımlıyoruz.
'tmpArray için ilk 3 değişken eksen takımı orginini, 2. 3 değişken H eksenini, 3. 3 değişken V eksenini belirleyecektir
Dim tmpArray(8)
tmpArray(0) = 0#
tmpArray(1) = 0#
tmpArray(2) = 0#
tmpArray(3) = 1#
tmpArray(4) = 0#
tmpArray(5) = 0#
tmpArray(6) = 0#
tmpArray(7) = 1#
tmpArray(8) = 0#
Set skecthVariant = skecth
skecthVariant.SetAbsoluteAxisData tmpArray

prt.InWorkObject = skecth
'Sketch içine birşeyler ilave edebilmek için sketch'i open edition moduna alıyoruz
'Line,point gibi elemanlarımızı sketch içine factory2D nesnesi yardımı ile ilave edeceğiz
Dim factory2D As factory2D
Set factory2D = skecth.OpenEdition()

'Daha sonra kullanmak üzere H ve V yönlerimizi nesne olarak alıyoruz
Dim geometricElements As geometricElements
Set geometricElements = skecth.geometricElements
Dim axis2D As axis2D
Set axis2D = geometricElements.Item("AbsoluteAxis")
Dim HDir As Line2D
Set HDir = axis2D.GetItem("HDirection")
HDir.ReportName = 1
Dim VDir As Line2D
Set VDir = axis2D.GetItem("VDirection")
VDir.ReportName = 2

'İlk line için başlangıç ve bitiş noktalarını oluşturuyoruz
Dim startPoint_line1 As Point2D
Set startPoint_line1 = factory2D.CreatePoint(-50#, 0#)
startPoint_line1.ReportName = 3
Dim endPoint_line1 As Point2D
Set endPoint_line1 = factory2D.CreatePoint(-0#, 50#)
endPoint_line1.ReportName = 4

'İlk line'nımızı oluşturuyoruz
Dim line1 As Line2D
Set line1 = factory2D.CreateLine(-50#, 0#, -0#, 50#)
line1.ReportName = 5
line1.startPoint = startPoint_line1
line1.endPoint = endPoint_line1

'İlk line'nın başlangıç ve bitiş noktalarını sırası ile V ve H eksenlerine contraint ediyoruz.
'Bu kısımda reference kullanmak ve AddBiEltCst gibi constraint oluşturma komutlarını kullanmak gerekecektir.
Dim skecth_constraints As constraints
Set skecth_constraints = skecth.constraints
Dim rfr_startPoint_line1 As Reference
Set rfr_startPoint_line1 = prt.CreateReferenceFromObject(startPoint_line1)
Dim rfr_HDir As Reference
Set rfr_HDir = prt.CreateReferenceFromObject(HDir)
Dim constraint_HDir1 As Constraint
Set constraint_HDir1 = skecth_constraints.AddBiEltCst(catCstTypeOn, rfr_startPoint_line1, rfr_HDir)
constraint_HDir1.Mode = catCstModeDrivingDimension
Dim rfr_endPoint_line1 As Reference
Set rfr_endPoint_line1 = prt.CreateReferenceFromObject(endPoint_line1)
Dim rfr_VDir As Reference
Set rfr_VDir = prt.CreateReferenceFromObject(VDir)
Dim constraint_VDir1 As Constraint
Set constraint_VDir1 = skecth_constraints.AddBiEltCst(catCstTypeOn, rfr_endPoint_line1, rfr_VDir)
constraint_VDir1.Mode = catCstModeDrivingDimension
'İkinci line'nımızı oluşturuyoruz
Dim endPoint_line2 As Point2D
Set endPoint_line2 = factory2D.CreatePoint(50#, 0#)
endPoint_line2.ReportName = 6
Dim line2 As Line2D
Set line2 = factory2D.CreateLine(0#, 50#, 50#, 0#)
line2.ReportName = 7
line2.startPoint = endPoint_line1
line2.endPoint = endPoint_line2

'İkinci line'nın bitiş noktasını H eksenine contraint ediyoruz.
Dim rfr_endPoint_line2 As Reference
Set rfr_endPoint_line2 = prt.CreateReferenceFromObject(endPoint_line2)
Dim constraint_VDir2 As Constraint
Set constraint_VDir2 = skecth_constraints.AddBiEltCst(catCstTypeOn, rfr_endPoint_line2, rfr_HDir)
constraint_VDir2.Mode = catCstModeDrivingDimension

'Üçüncü line'nımızı oluşturuyoruz
Dim line3 As Line2D
Set line3 = factory2D.CreateLine(50#, -0#, -50#, -0#)
line3.ReportName = 8
line3.startPoint = endPoint_line2
line3.endPoint = startPoint_line1

'Üçüncü line'nın kendisi H eksenine constraint ediliyor
Dim rfr_line3 As Reference
Set rfr_line3 = prt.CreateReferenceFromObject(line3)
Dim constraint_HDir3 As Constraint
Set constraint_HDir3 = skecth_constraints.AddBiEltCst(catCstTypeHorizontality, rfr_line3, rfr_HDir)
constraint_HDir3.Mode = catCstModeDrivingDimension

'Birinci ve ikinci line arasındaki simetrimizi oluşturuyoruz
Dim rfr_plane0 As Reference
Set rfr_plane0 = prt.CreateReferenceFromObject(line1)
Dim rfr_plane1 As Reference
Set rfr_plane1 = prt.CreateReferenceFromObject(line2)
Dim rfr_plane2 As Reference
Set rfr_plane2 = prt.CreateReferenceFromObject(VDir)
Dim constraint_symmetry As Constraint
Set constraint_symmetry = skecth_constraints.AddTriEltCst(catCstTypeSymmetry, rfr_plane0, rfr_plane1, rfr_plane2)
constraint_symmetry.Mode = catCstModeDrivingDimension

'Birinci ve ikinci line arasında açı oluşturuyoruz
Dim rfr_plane3 As Reference
Set rfr_plane3 = prt.CreateReferenceFromObject(line1)
Dim rfr_plane4 As Reference
Set rfr_plane4 = prt.CreateReferenceFromObject(line2)
Dim constraint_angle As Constraint
Set constraint_angle = skecth_constraints.AddBiEltCst(catCstTypeAngle, rfr_plane3, rfr_plane4)
constraint_angle.Mode = catCstModeDrivingDimension
constraint_angle.AngleSector = catCstAngleSector1
Dim angle1 As Angle
Set angle1 = constraint_angle.Dimension
angle1.Value = 90#

'Üçüncü line'a uzunluk atamsı yapıyoruz
Dim rfr_plane5 As Reference
Set rfr_plane5 = prt.CreateReferenceFromObject(line3)
Dim constraint_length As Constraint
Set constraint_length = skecth_constraints.AddMonoEltCst(catCstTypeLength, rfr_plane5)
constraint_length.Mode = catCstModeDrivingDimension
Dim length1 As Length
Set length1 = constraint_length.Dimension
length1.Value = 100#
'Sketch kapatılıyor
skecth.CloseEdition

'Değişen sketche bağlı olarak part update ediliyor
prt.InWorkObject = bdy
prt.Update

'Pad oluşturuluyor
Dim shapeFactory1 As ShapeFactory
Set shapeFactory1 = prt.ShapeFactory
Dim pad1 As Pad
Set pad1 = shapeFactory1.AddNewPad(skecth, 20#)

'Part yeniden update ediliyor
prt.Update

End Sub

Reklamlar

[Kod] Body ve Geometric setler ile çalışmak: Grafik özelliklerini değiştirmek ve yeni isim vermek

Aşağıda, bir CATPart üzerindeki tüm body ve geometric setlerin yeni bir isim ile adlandırılmasının ve ilgili set’in selection sınıfı yardımıyla, grafik özelliklerinin değiştirilmesinin kod yardımıyla nasıl yapıldığını bulacaksınız.

Sub CATMain()
'Bu macro ile bir Part'ın içindeki tüm body ve gemetric setleri alıp, isimlerini ve renklerini değiştireceğiz.
'Aktif olan dökümanımızı alıyoruz
Dim document As document
Set document = CATIA.ActiveDocument
'Aktif olan dökümanın bir CATPart olup olmadığını kontrol ediyoruz
If Not (document.Name Like "*.CATPart") Then
sonuc = MsgBox("Aktif olan döküman bir CATPart dosyası değil", vbCritical)
End
End If
'Aktif dökümanı PartDocument olarak alıyoruz
Dim prtDoc As PartDocument
Set prtDoc = document
'Bodyler'i alıyoruz
Dim bodies As bodies
Set bodies = prtDoc.part.bodies
'Geometric setleri alıyoruz
Dim geoSets As HybridBodies
Set geoSets = prtDoc.part.HybridBodies
'Tüm Part Body'lerin rengini mavi ve adını B1,B2.. şeklinde değiştiriyoruz
'Tüm Geometric Set'lerin rengini yeşil ve adını G1,G2.. şeklinde değiştiriyoruz
'Bu iş için öncelikli olarak bir selection nesnesi oluşturmamız gerekir. Bu şekilde nesnelerin grafik özelliklerine müdahale edebiliyoruz.
Dim sel As Selection
Set sel = document.Selection
sel.Clear
'bodyler için birinci döngü
Dim body As body
For i = 1 To bodies.Count
Set body = bodies.Item(i)
body.Name = "B" + Str(i)
sel.Add body
sel.VisProperties.SetVisibleColor 0, 0, 255, 0
sel.Clear
Next i
'geometric setleri için diğer döngü
Dim geoSet As HybridBody
For i = 1 To geoSets.Count
Set geoSet = geoSets.Item(i)
geoSet.Name = "G" + Str(i)
sel.Add geoSet
sel.VisProperties.SetVisibleColor 0, 255, 0, 0
sel.Clear
Next i
End Sub

[Video] Bir CATIA toolbarına bir macroyu button olarak eklemek

Bir CATIA toolbarına bir macroyu button olarak ekleyebiliriz. Bu işlemin nasıl yaplacağını anlatan video aşağıdadır.

[Video] CATIA içine yeni bir VBA Macro kütüphanesi ekleme ve yeni bir macro oluşturma

Bu blogda CATIA üzerine nasıl bir VBA kütüphanesi ve bir boş macro eklenebileceğini, bu macronun VBA üzerinden nasıl çalıştırılacağını ekteki youtube linkinde bulabilirsiniz.

[Kod] CATIA içindeki bir button ile bir dökümanı açma

Aşağıdaki kod yardımı ile bir dökümanı, CATIA toolbarları üzerine kendimizin atayacağı bir button ile kolayca açabiliriz. Bu uygulama daha çok sürekli ihtiyacımız olan bir excel,word,pdf gibi bir dökümana, windows ortamına gitmeden hızlıca ulaşmamızı sağlar. Bu dökümanlar bir firma standardı, bir mühendislik tablosu ya da doldurulması gereken bir kontrol listesi olabilir. Böylece çok kısa olan bu kod ile dosya aramakla geçen bir zaman kaybını engellemiş oluruz. Daha sonra bu macro CATIA toolbarları üzerine button olarak eklenebilir. CATIA üzerine macroların eklenmesi ve bir buton ile ilişkilendirilmesi konusunu bloglarda youtube linki ile paylaşacağım.


Sub CATMain()

Dim myShell As Object

Set myShell = CreateObject("WScript.Shell")

'myShell nesnesini kullanarak c:\ dizini altındaki deneme.pdf dosyasını açıyoruz

myShell.Run "c:\deneme.pdf"

End Sub

[Duyuru] Uygulamalar

CATIA üzerinde yapılmış VBA uygulama dosyalarına kaynak kodları ile birlikte uygulamalar kategorisinden ulaşabilirsiniz.