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. 









Tuesday, March 20, 2018

CATIA V5 sartni fajlovi

     Šta bi to bio CATIA V5 startni fajl?
CATIA V5 startni fajl je gotovo isto što i templejt u SolidWorks-u, Inventor-u, AutoCAD-u. 
Nije isključeno da se termin templejt koristi i za CATIA V5, ili neki drugi naziv za startni fajl.

     Koja je razlika između templejta u navedenim CAD sistemima i CATIA startnog fajla?

Startni fajl ima istu ekstenziju kao i fajl koji kreirate na osnovu njega, u odnosu na iznad pomenute CAD sisteme, kod kojih templejti imaju posebne ekstenzije. CATIA V5 nema posebnu proceduru za pripremu startnog fajla. 

     Kako se kreira startni fajl i šta sve on treba da sadrži?
Startni fajl se kreira na isti način kao i bilo koji drugi 3D model ili crtež.
Startni fajl treba da sadrži sva obilježja koja su zajednička za svaki 3D model ili crtež, kao i ona obilježja koja će eventualno zatrebati. Kada su 3D modeli u pitanju startni fajl treba imati razrađenu strukturu obilježja, koja je jedinstvena za svaki 3D model istog tipa.  


Slike koje su date ispod prikazuju primjer razrađene strukture za komponente alata za deformisanje lima, koje se izrađuju mašinskom obradom i eventualno tretiraju termički. 


Jedinstveni set parametara koji se upisuju u sastavnicu

Jedinstvena struktura 3D modela komponenata koje se izrađuju. Standardizovane komponente koje se nabavljaju kao gotovi proizvodi od dobavljača ne treba da imaju ovakvu složenu  strukturu
To Add i To Remove Body-ji sa publikacijama
Ovakav CATPart startni fajl omogućava da svi 3D modeli komponenata , kreirani na osnovu njega, imaju jedinstvenu strukturu obilježja. Dobro razrađena struktura modela doprinosi boljoj organizaciji rada, kako pojedinačno tako i u timu, prati proces izrade 3D modela (workflow), omogućava efikasniju API automatizaciju i sl.

Slika ispod prikazuje startni fajl za crteže, koji sadrži pripremljene okvirove crteža sa zaglavljima, kao i dodatne simbole, pomoćne skice, tablice i slično, koje se po potrebi ubacuju u crteže.
Drafting standard koji je izabran pri kreiranju startnog crteža će biti primjenjen i na svakom sljedećem crtežu, kreiranom na osnovu startnog crteža.



     Kako se koristi startni fajl?
Novi 3D model ili crtež se kreira na osnovu startnog crteža tako što se koristi naredba File/New from... , iz glavnog menija CATIA V5 sistema. 


     Kako startni fajlovi povećavaju produktivnost?
Pored osnovnog (univerzalnog) startnog fajla možete kreirati i više ''specijalizovanih'' startnih fajlova za određene komponente. Tako na primjer, ukoliko konstruišete alat za deformisanje lima, možete pripremiti posebne startne fajlove za matrice, žigove, skidačke ploče, noseće ploče i td. Ovi startni fajlovi pored jedinstvene strukture i obilježja, treba da imaju feature-e koji izgrađuju 3D model komponente i 3D modele To Add i To Remove Body-ja. Video klip prikazuje startni model matrice za rezanje lima. Konkretan model matrice dobija se brzom korekcijom rezne konture, osnovne skice i položaja rupa za centriranje i stezanje.