Saturday, March 31, 2018

Mali uvod u CATIA V5 API automatizaciju (makroe): Automatsko snimanje tehničkih crteža u PDF format

     CATIA V5 Makro omogućava izvršavanje niza programiranih  naredbi kako bi se automatizovao odgovarajući zadatak, te se brže i efikasnije došlo do potrebnog rješenja. Nakon startovanja makroa korisnik  definiše ulazne podatke, potom se automatski izvršava niz potrebnih naredbi i u tom procesu korisnik najčešće ne učestvuje interaktivno.
     Makroi u CATIA V5 se najčešće koriste za automatsko izvođenje uzastopnih ponavljajućih operacija, pa su tako od pomoći jer povećavaju produktivnost konstruktora, oslobađaju ga od zamornog ponavljajućeg izvođenja određenih naredbi, pa time i znatno smanjuju pojavu grešaka nastalih zbog ljudskog faktora.
     Komunikacija između makroa i CATIA V5 sistema obavlja se preko aplikacionog programskog interfejsa (API-ja) CATIA V5 sistema. CATIA V5 API predstavlja strukturu javnih klasa koje nam stoje na raspolaganju prilikom pisanja makroa u nekom od objektno orjentisanih programskih jezika.
     Najbrži način za razradu makroa je da koristite Visual Basic for Applications (VBA). Prednosti i dobre karakteristike VBA su:
  • Podrazumjevano se instalira uz CATIA V5, SolidWorks, Inventor, Office i dr. 
  • Brže izvršavanje makroa u odnosu na isti makro koji bi se koristio kao eksterna aplikacija
  • Odličan Object Browser
  • Dobri Debug alati
     Treba napomenuti i da je VBA veoma sličan Visual Basic-u 6. Na Mašinskom Fakultetu u Banjoj Luci držao sam vježbe iz predmeta Programiranje na drugoj godini studija. Tada se koristio VB 6 na vježbama. Dobra stvar u vezi toga je što nakon savladanog gradiva student bi se mogao upustiti u učenje API automatizacije u CAD-u primjenom VBA. Loša stvar je što nisam čuo da je iko od studenata sa MF BL išta radio oko API automatizacije u CAD-u. Rijetki su oni koji bi savladali neke napredne funkcionalnosti, ali ja sam nepopravljivi optimista, pa stoga ovo i pišem, iako sam prilično uvjeren da gotovo nikoga sa MF BL neću animirati da samostalno u CATIA uradi išta više od crtanja pravougaonika u skici i ekstrudiranja. 
   
Startovanje VBA unutar CATIA V5 sistema
     VBA projekti za CATIA V5 imaju ekstenziju *.catvba. Prije pisanja novog makroa u VBA, ili kreiranja VBA modula opcijom Start Recording, potrebno je da kreirate novi ili otvorite postojeći *.catvba projekat, prema slici ispod.
Rad sa *.catvba projektima u CATIA V5
     Od velike pomoći za pisanje makroa u CATIA V5 je CAA V5 Visual Basic help. Help se nalazi u instalacionom direktorijumu CATIA V5 sistema, u folderu \win_b64\code\bin , a ime help fajla je V5Automation.chm. Slika ispod prikazuje prvu stranu help-a, na kojoj se nalazi interaktivni CATIA V5 API Object Model. Isti help može poslužiti i ukoliko programirate makroe u nekom drugom programskom jeziku, jer CATIA V5 API Object model ima istu strukturu bez obzira koje razvojno okruženje i programski jezik koristite. 
CATIA V5 API help

ZADATAK:
     Trebamo napraviti VBA makro koji će sve otvorene tehničke crteže snimiti u *.pdf format u zadati folder. 

     Slika ispod prikazuje dio CATIA V5 API strukture, koja se odnosi na interne CATIA dokumente. Kolekcija Documents sadrži sve CATIA dokumente otvorene u trenutnoj sesiji: CATPart-ove, CATDrawing-e, CATProduct-e i dr. Deklarišemo i setujemo objekat kolekcije Documents: 





Sub CATMain()
    Dim oDocuments As Documents
    
    Set oDocuments = CATIA.Documents
End Sub 

     U CATIA V5 VBA objekat CATIA aplikacije se podrazumjevano zove CATIA. Nije ga potrebno deklarisati niti setovati, što nije slučaj ukoliko kreirate makro u Visual Basic 6, ili u Visual Studio koristeći VB.NET, C# ili C++. 
     
     Kako provjeriti da li se otvoreni CATIA V5 dokumenti nalaze u kolekciji oDocuments?
Postavićemo Break Point na kraj makro podprograma, dodaćemo objekat kolekcije u Watches prozor i startovati makro - slika ispod. 


     Izvršavanje makroa se zaustavlja na Break Point i možemo provjeriti šta se nalazi u kolekciji oDocuments. Otvorio sam 4 tehnička crteža, startovao makro, a stanje kolekcije oDocuments je prikazano na slici ispod. 


     Otvorena su 4 crteža, a svojstvo Count kolekcije oDocuments ima vrijednost 8. U Watch prozoru se mogu pregledati i svojstva otvorenih dokumenata i kako se vidi na slici iznad neki imaju ekstenziju *.CATDrawing, a neki *.CATPart. O čemu se tu radi?
     Ako je CATIA V5 crtež generativan (kreiran na osnovu 3D modela) onda se prilikom otvaranja crteža podrazumjevano otvori i 3D model. 3D modeli budu učitani sa eksterne memorije u CATIA interni model (RAM memoriju) iako nisu prikazani. Isto možete provjeriti ako statujete File/Desk... iz glavnog menija. Ovo malo otežava rješenje našeg zadatka. Snimanje CATIA V5 dokumenta u *.pdf izvodi se jednostavno, pozivanjem ExportData() metode, ali taj metod moramo pozivati samo u slučaju ako dokument ima *.CATDrawing ekstenziju. 
     
     Opisaću algoritam mog rješenja:
1. Korisnik upisuje putanju foldera u koji ću snimiti *.pdf dokumente
2. Koristim ciklus u kom u objekat oDocument ''ubacujem'' redom jedan po jedan CATIA dokument iz kolekcije oDocuments
2.1. Određujem ekstenziju dokumenta
2.2. Snimam dokument u *.pdf ukoliko je njegova ekstenzija *.CATDrawing. 

     Treba napomenuti da sve kolekcije CATIA V5 API-ja imaju svojstvo Count, koje odgovara broju objekata koji se nalaze u kolekciji. Stoga u mom algoritmu ću koristiti ciklus sa brojačem (For next), a  u nekim slučajevima naravno bolje mogu poslužiti Do Loop ili For Each ciklusi. 

Slijedi rješenje sa komentarima:

Deklaracija varijabli i objekata

Dim i As Integer
Dim n As Integer
Dim exportfolder As String
Dim ime As String
Dim exportime As String
    
Dim oDocuments As Documents
Dim oDocument As Document

i - brojač ciklusa
n - pozicija ekstenzije u imenu fajla CATIA dokumenta
exportfolder - putanja do foldera u koji će se crteži snimiti u pdf formatu
ime - ime CATIA dokumenta bez ekstenzije
exportime - ime pdf dokumenta
Korisnik može zadati putanju do foldera u koji će snimiti crteže u pdf pomoću InputBox() funkcije:

exportfolder = InputBox("Unesi putanju do foldera u koji eksportujes crteze u PDF", "Path",_ "C:\Test")

Setovanje kolekcije otvorenih CATIA dokumenata
Set oDocuments = CATIA.Documents
Ciklus:
For i = 1 To oDocuments.Count

next i

Tijelo ciklusa:

Setovanje objekta dokumenta, u koji se ''ubacuje'' i-ti dokument iz oDocuments kolekcije
Set oDocument = oDocuments.Item(i)

Svojstvo Name sadrži ime fajla CATIA dokumenta. Varijabli n ću dodijeliti vrijednost pozicije na kojoj se nalazi ekstenzija fajla pomoću funkcije InStr()
n = InStr(1, oDocument.Name, "CATDrawing")

InStr() vraća nulu ako ne pronađe ''CATDrawing'' u imenu dokumenta, što ću iskoristiti u koraku odluke, kojim se zaključuje da li je dokument crtež ili ne. Pomoću Mid() funkcije iz imena dokumenta uzimam sve znakove do ekstenzije, i prosljeđujem ih stringu ime. String exportime se formira kao što je prikazano ispod i koristi se kao argument u metodi ExportData().
If (n <> 0) Then
     ime = Mid(oDocument.Name, 1, n - 1)
     exportime = exportfolder & "\" & ime & "pdf"
     Call oDocument.ExportData(exportime, "pdf")
End If

Slika ispod prikazuje kompletiran makro, a video klip funkcionalnost makroa. 

VBA Makro za snimanje otvorenih CATIA V5 crteža u pdf. 









No comments:

Post a Comment