Vítejte !   Přihlášení | Registrace
Hlavní menu
CATIA fórum.cz
Novinky
Seriál CATIA
Obecně o CAD
Novinky ze světa DS
Makra pro CATIA V5
Diskuse
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Programujeme: Jednoduché příklady

Publikováno: 12. listopadu 2011 | Zobrazeno: 8186x
V dnešním dílu si ukážeme několik jednoduchých příkladů s základními konstrukcemi, které se dají využít při psaní složitějších maker. Každý příklad bude obsahovat komentáře a podrobnější vysvětlení dané problematiky. Předpokládáná je základní znalost Visual Basicu - k té se v článku již věnovat nebudu.
Skripty samozřejmě nejsou nijak ošetřené, tj. předpokladem pro bezchybný běh je otevřený dokument požadovaného typu.

I. Spuštění makra z externího souboru

Někdy je třeba spustit makro z externího souboru. V takovém případě použijeme příkaz Call (CATIA.SystemService.ExecuteScript). Proměnná Params je typu Array a slouží k předání případných vstupních parametrů. Musí se uvádět, i když žádné nejsou.
Sub CATMain()

Dim params()
' Možné typy umístění skriptu
' catScriptLibraryTypeDirectory (catScript je v adresáři)
' catScriptLibraryDocument (catScript je v dokumentu CATpart)
' catScriptLibraryVBAProject (catScript je ve VBA projektu)
CATIA.SystemService.ExecuteScript "cesta", "typ", "nazev", "CATMain", params
End Sub

Přesunutí feature jednoho typu do NoShow

Tento jednoduchý skript vyhledá všechny elementy určitého v aktivním dokumentu a přesune je do NoShow prostoru. Typ feature specifikujeme jeho názvem (např. pro rovinu je to Plane, pro úsečku Line).
Sub CATMain()

Dim oActiveDocument As Document
Dim oSelection As Selection

' vytvorime objekt aktivniho dokumentu
Set oActiveDocument = CATIA.ActiveDocument

' vytvorime objekt vyberu jako vlastnost objektu oActiveDocument
Set oSelection = oActiveDocument.Selection

' zadame typ a vlastnost hledaneho objektu a oblast hledani
oSelection.Search ".Plane.Visibility=Visible;all"

' nastavime vlastnost vyberu VisProperties na 1 (Show)
oSelection.VisProperties.SetShow 1

' zrusime vyber
oSelection.Clear
End Sub

Stejným způsobem můžeme i obarvit vybrané feature. V kódu pak místo SetShow bude použita metoda SetRealColor.
' obarveni elementu - jednotlive parameTry jsou slozky RGB, posledni je dedicnost

oSelection.VisProperties.SetRealColor 255,0,255,0

Interaktivní výběr feature

Velmi často potřebujeme vybrat konkrétní feature, např. jako vstupní objekt makra (skicovací rovina, počáteční bod, atd). Následující příklad ukazuje interaktivní výběr, kdy je uživatel vyzván k výběru feature. Skript pokračuje po výběru objektu nebo při stisku ESC.
Sub CATMain()

Dim oSelection As Selection
Dim oSelectedElement As SelectedElement

Set oSelection = Catia.ActiveDocument.Selection

' pole pro definici typu, ktere lze vybirat
Dim sFilter(2)

' povolime vyber bodu, usecky a roviny
Filter(0) = "Point"
Filter(1) = "Line"
Filter(2) = "Plane"

' spustime interaktivni vyber (omezeni typu, vyzva - status ber, predvyber)
Status = oSelection.SelectElement2(Filter, "Vyberte objekt...", False)

' ukoncime pri stisku ESC
If Status = "Cancel" Then
Exit Sub
End If

' provedeme pozadovane operace s vybranym objektem
oSelectedElement = oSelection.Item(1)

' dalsi cast kodu

End Sub

Rekurzivní procházení sestavy

Vysvětlovat programátor co je rekurze asi nemá smysl. Pro ostatní je to situace, kdy funkce v určitém kroku volá sama sebe. Typickým příkladem použití je procházení hierarchického stromu sestavy.

' hlavni procedura
Sub CATMain()
Dim oRootDocument As Product
' nacteme aktivni dokument (sestavu)
Set oRootDocument = Catia.ActiveDocument

' zavolame funkci pro prochazeni sestavy
NavigateProduct oRootDocument.Products
End Sub


' cast kodu pro prochazeni sestavy
Sub NavigateProduct(oProducts)
Dim oSubProducts As Products

' projdeme vsechny instance
For i = 1 to oProducts.Count
' vlastni kod, ktery se vykona na kazdem dokumentu
' ...
' seznam operaci
' ...

' ziskame kolekci vnorenych instanci (partu a podsestav)
Set oSubProducts = oProducts.Item(i).Products

' pokud ma instance (sestava) potomky, spustime rekurzi
If oSubProducts.Count > 0 Then
' vlastni rekurze - volame funkci s konkretni podsestavou
NavigateProduct oProducts.Item(i).Products
Else
Next
End Sub


Zjištění aktvivního partu v sestavě

Pokud máme makro, které pracuje s Partem, nastává problém ve chvíli, kdy máme Part otevřený v rámci sestavy. Makro totiž nějak musí poznat, který (a jestli vůbec nějaký) Part je aktivní, aby si mohlo správně nastavit příslušný objekt oPart. Následující skript to řeší pomocí malé finty.
Sub CATMain()

'zjistime typ dokumentu
sDocumentType = TypeName(CATIA.ActiveDocument)

' rozvetveni programu podle typu dokumentu
Select Case sDocumentType
' je otevren samotny Part
Case "PartDocument"
' vytvorime objekt Partu
Set oPart = CATIA.ActiveDocument.Part

MsgBox "Je otevřen part: " & PartName"

' je otevreny Product
Case "
ProductDocument"
Set oActiveDocument = CATIA.ActiveDocument
' zjistime typ pracovniho prostredi
WBId = CATIA.GetWorkbenchId()

' je-li aktivni PartDesign (nebo cokoliv, kde se pracuje s Partem)
If WBId = "
PrtCfg" Or WBId = "jiny WB" Or ... Then
' zkusime vyhledat rovinu xy v aktivnim Partu
Set oSelection = oActiveDocument.Selection
oSelection.Search "
Name='xy plane',in" ' tohle je ta mala finta

' vytvorime instanci Partu - rodice roviny xy
Set oPart = oSelection.Item(1).Value.Parent

MsgBox "
Je otevřena sestava, ale aktivní je part " & oPart.Name"

Else
MsgBox "Je aktivní sestava " & oActiveDocument.Name"
End If

' pokud je otevren jiny dokument (napr. vykres)
Case Else
MsgBox "
Je aktivní jiný typ dokumentu"

End Select
End Sub

Příště: Další část ukázek (zjištění počtu instancí v sestavě, práce s výkresy)