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
Vytvořit téma
Koncepty
Seznam oblíbených
Soukromé zprávy
Pravidla
Live CHAT
VIP žádost
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Zjednodušení CATVBA

Kompletní přehled příspěvků v tématu Zjednodušení CATVBA řazený podle data jejich publikace na fóru.

UživatelPříspěvek
Pavel Krsek

Poslat zprávu | Profil
Datum: 28.6. 2012 | Zobrazeno: 12758x
Konfigurace CATIA:

Text dotazu:
Ahoj otázka na tvoření v CATVBA.
Příklad: mám toolbar v CATVBA s ikonamy, kde po kliknuti se v Catii vytvoří napr. kostka o určité výšce.Další ikona vytvoří kostku o jiné výšce atd. - tj. mění se parametr jen výšky.
V CATVBA, ale mám ke každé ikoně cely script s deklarováním proměných, zjištováním, zda-li po spuštění scriptu se nacházím v sestavě, partu atd.........
Tj. omáčka je pořád stejná, ale mění se pouze parametry.

Otázka:
Musí tomu tak být. Nebo je nějaká možnost "omáčku" přiřadit všem ikonám a pak už jen pro každnou ikonu měnit např. jen v jednom řádku parametr např. té výšky???

Děkuji za radu.

Ing Jan Cinert

Poslat zprávu | Profil
[#3063] | Publikováno: 28.06. 2012 - 19:26
Jestli chcete opravdu konkrétně měnit jen výšku, tak si do formu dejte rozbalovací seznam a výšku vybírejte z něj. Mít na každou výšku tlačítko je dost nepraktické.

A ta "omáčka", které vám zjišťuje to či ono, se dá pohodlně napsat do funkcí, které pak zavoláte u každého skriptu v jednom řádku a nemusíte to psát pořád dokola. Napíšete si např funkce ZjistiTypDokumentu, která vám bude vracet řetězec podle toho co je otevřené (prázdný řetezec, když nebude otevřeno nic). Tato funkce může vracet i vrcholový objekt jako Part, Product, DrawingRoot atd. Já mám v .NET vytvořené vlastní knihovny, které si najdou co potřebují, a pak si jenom jednoduše sahám pro to, co potřebuju. V kódu to pak jsou dva řádky...
Pavel Krsek

Poslat zprávu | Profil
[#3065] | Publikováno: 28.06. 2012 - 20:57
Dekuji za odpoved.
S tou kostickou se zmenou vysky jsem to udaval jako priklad, takze s tou rozbalovaci nabidkou to asi nepude.
Co se tyka te funkce, tak rozumim tomu dobre tak, ze:

Ve MVB 6.0 napr. do Zalozky General zadam:

Function dekla()


bla,bla,bla

End Function


a pak u codu k tlacitku zadam:

Private Sub Buttom_xxx_Click()


a zde bude odkaz - pozadavek na spusteni nadefinovane funkce? Jak to bude vypadat?

Diky za radu.
Ing Jan Cinert

Poslat zprávu | Profil
[#3066] | Publikováno: 29.06. 2012 - 08:41
Velmi zjednodušeně třeba takhle. V tomto případě nejde o funkci, ale o proceduru (funkce vrací hodnotu).

Dim oDoc As Document
Dim sDocTyp As String

Sub GetDoc()

Dim sDocExt

Dim Parts()

If CATIA.Documents.Count > 0 Then
Set oDoc = CATIA.ActiveDocument
Parts = Split(".", oDoc.Name) ' rozdelime nazev souboru na casti podle tecky
sDocExt = Parts(UBound(Parts)) ' typ souboru urcuje cast za posledni teckou

If oDocExt = "CATPart" Then
oDocType = "dil"
ElseIf oDocType = "CATProduct" Then
oDocType = "sestava"
Else
oDocType = "neznamy"
End If

Else
oDocTyoe = "none" ' zadny dokument
End If
End Sub


V hlavnim kodu potom bude:

Sub K_Tlacitku_Click()


GetDoc() ' zavolame proceduru, ktera nam naplni promenne

' overeni aktivniho partu
If sDocType = "dil" Then

zbytek kodu

End Sub


Do funkci si ještě můžete dát různá ošetření atd.
Pavel Krsek

Poslat zprávu | Profil
[#3069] | Publikováno: 29.06. 2012 - 14:25
Diky za pomoc.
Jakmile po dane uprave viz. Vas prispevek spustim makro, tak v hlavnim kodu u radku:

GetDoc()


dostanu chybu - "Compile error: Syntax error"
Ing Jan Cinert

Poslat zprávu | Profil
[#3070] | Publikováno: 29.06. 2012 - 15:29
Aha, závorky pryč, v CATVBA se u volání funkce neuvádí... To je zvyk z VB.NET.
Pavel Krsek

Poslat zprávu | Profil
[#3071] | Publikováno: 29.06. 2012 - 16:13
Diky.
Bez zavorek to jiz funguje, tj. makro vykona proceduru, ale problem je v tom, ze po vraceni do hlavniho kodu nezna promenne z procedury.

Priklad: když do vaseho makra doplnim MsgBox

Sub GetDoc()

Dim sDocExt
Dim Parts()
If CATIA.Documents.Count > 0 Then
Set oDoc = CATIA.ActiveDocument
MsgBox oDoc.Name
...................

tak, dostanu nazev partu.

Ale když stejny MsgBox zaradím do hlavniho kodu za "Getdoc", tak dostanu hlasku "....424:Object required" s odkazem chyby na radek MsgBox v hlavnim kodu.
Ing Jan Cinert

Poslat zprávu | Profil
[#3072] | Publikováno: 30.06. 2012 - 12:23
Říká Vám něco globální a lokální proměnná? Pokud máte proměnnou deklarovanou uvnitř procedury, hlavní kód ji nezná - platí jen lokálně uvnitř procedury, proto ta chyba. Proměnná oDoc musí být deklarovaná v hlavním kódu.

Ve skutečnosti je to ještě ještě o něco složitější, deklarace může mít různý zápis. Výraz Dim pouze rezervuje místo v paměti pro proměnnou. Pak jsou ještě další výrazy, např. Private, Public, kterými určujeme přístupnost proměnné pro ostatní části projektu.
Pavel Krsek

Poslat zprávu | Profil
[#3073] | Publikováno: 02.07. 2012 - 06:46
Co se tyka globalnich a lokalnich promennych, tak to mi opravdu moc nerika. Snad se to doucim pozdeji.
Muzu pro pochopeni poprosit o priklad. Napr. kdyz mam:

Sub Alfa()

Set partDocument1 = CATIA.ActiveDocument
End Sub


a chci aby po zavolani procedury se mi v boxu ukazalo jmeno aktivniho partu:

Private Sub CommandButton1_Click()

Dim partDocument1 As PartDocument
Alfa
MsgBox partDocument1.Name
End Sub


Dekuji moc.

Ing Jan Cinert

Poslat zprávu | Profil
[#3074] | Publikováno: 02.07. 2012 - 08:33
Takhle by to mělo být OK. Proměnná partDocument1 je deklarovaná globálně, proto je viditelná ve všude, tj. i v sub Alfa. Pokud by to bylo obráceně, tedy proměnná by byla deklarovaná uvnitř Alfa, nebyla by viditelná v hlavním programu.
Pavel Krsek

Poslat zprávu | Profil
[#3075] | Publikováno: 02.07. 2012 - 08:40
Problem je ale v tom, ze takhle to nefununguje a po spusteni dostanu hlasku 424(viz.nahore) s chybou na radku MsgBox.
Ing Jan Cinert

Poslat zprávu | Profil
[#3076] | Publikováno: 02.07. 2012 - 11:06
Já jsem si toho všimnul až teď, deklaraci proměnné musíte mít úplně na začátku, vy ji máte zase uvnitř CommandButton1_Click, tj. opět jen jako lokální pro tento Sub. globální proměnné musejí být úplně na začátku.

Příklad:

' zacatek kodu


Dim PromGlob1 As String ' globalni promenna, pristupna vsude
Dim PromGlob2 As Integer

Sub1()
Dim ProbLok1 As String ' lokalni promenna, pristupna jen v Sub1

End Sub

Sub2()
Dim ProbLok2 As String

End Sub

' pokracovani


Tohle patří spíš do obecných základů programování, bez toho budete občas narážet :-)


Uživatel nepřihlášen

Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.