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

Nastavení hodnoty dle volby parametru typu String

UživatelPříspěvek
Tomáš Fridrichovský

Poslat zprávu | Profil
Datum: 13.7. 2021 | Zobrazeno: 3548x
Konfigurace CATIA: V5-6R2018, MD2

Text dotazu:
Dobrý den,
potřeboval bych vytvořit následující:
- uživatel si vybere z nabídky hodnotu pro parametr TYP (A, B, případně i další),
- podle toho se automaticky nastaví velikost parametru POLOROZVOR, který si bude tahat informace z parametrů POLOROZVOR A, POLOROZVOR B apod.

Parametr TYP je typu String. Parametr POLOROZVOR je Real.

Pro tento účel vytvořím pravidlo Law s názvem Law.1-rozvor_podvozku. V něm založím v kolonce Formal parameters následující subparametry:
- typ (String),
- rozvor (Real).

Syntaxi pro rozhodovací pravidlo udělám následovně:
If (`typ` =="A")
{`rozvor`=`POLOROZVOR A`}

else if (`typ` =="B")
{`rozvor`=`POLOROZVOR B`}



Když pak chci promítnout výsledek pravidla do parametru POLOROZVOR přes formuli:
`Relations\Law.1-rozvor_podvozku` ->Evaluate(`Typ_podvozku` )
Vyskočí ba ně hláška:
Syntax Error line 1 :
bad kind of argument number 1 in Method Evaluate
(should be Real instead String)
Do you want to go to...



Otázka - co je špatně? Jak do Law, tak do Formula vstupují typově stejné hodnoty (String, Real). Je někde nějaký zádrhel např. se psaním syntaxe IF funkce? V jedné z diskuzí jsem narazil na zmínku, že Law neumí String, to je pravda?


P.S.: Snahou je udělat si parametrický podklad pro skeleton vozidla, kde uživatel pouze vybere z nabídky typ vozidla (A, B...) a vše (rozvor, průměry kol...) se přenastaví samo.


Děkuji

Ing Jan Cinert

Poslat zprávu | Profil
[#6992] | Publikováno: 13.07. 2021 - 16:04
Dobrý den,

problém je v tom, že Law skutečně umí pracovat jen s typem Real (pro mě stále nepochopitelné). Řešením je Rule, ale na to zase potřebujete licenci KWA.

Workaround:
Jediná mě známá možnost je dostat do hodnot parametrů nějaká čísla, např. 1_A, 2_B atd. ty pak vypreparovat pomocí String->Extract a String->ToReal do dalšího parametru - již typu Real, a s ním jít do Law. Samotný Law pak nemusí přebírat hodnoty dalších parametrů, ale rovnou řídit POLOROZVOR (dá se větvit neomezeně).

Je to trochu krkolomnější, ale funkční řešení.
Tomáš Fridrichovský

Poslat zprávu | Profil
[#6993] | Publikováno: 13.07. 2021 - 17:28
Dobrý den, sice to nebude úplně čisté řešení, ale použití číslovek by nevadilo. Pro změnu teď narážím na problém syntaxe příkazu String To Real. Nemáte nějaký příklad, jak jí přesně napsat, respektive co přesně vložit? Dostávám jen errory...
Pavel Krsek

Poslat zprávu | Profil
[#6994] | Publikováno: 14.07. 2021 - 06:54
Dobrý den,
další možnost je také ve skeletonu vytvořit design table ze kterého se nalinkují parametry. Něco hodné podobného jsme měli u nás také vytvořené a fungovalo to OK. Sice jsem to nakonec předělal jako externí makro, ale jen z důvodu, že při práci s naším PLM systémem se musí XLS tabulka design table ukládat jako samostatný dataset.
Tomáš Fridrichovský

Poslat zprávu | Profil
[#6995] | Publikováno: 14.07. 2021 - 10:20
Dobrý den,
design table je určitě je ve hře, ale tak trochu povinností je mít z hlediska uživatelského komfortu vybíratelné menu - typ A, typ B, anebo typ 1_A, typ 2_B apod. Bohužel převod ze String na Real se mi furt nedaří, respektive nevím, jak přesně má vypadat syntaxe.
Pokud dovytvořím parametr TYP_Real, tak ve skupině příkazů String je "String->ToReal (): Real" s obsahem v kolonce pro formuli "->ToReal()". Bohužel ať zkouším libovolnou syntaxi, např.: "->ToReal(`TYP_Real` )" nebo "`typ` ->ToReal(`TYP_Real` )" atd., tak skončím u chyby Syntax Error line 0... apod.
Počítám, že prostor před šipkou nezůstává prázdný, ale to se spíš jen domnívám podle vyhodnocení pro Law.
Ing Jan Cinert

Poslat zprávu | Profil
[#6996] | Publikováno: 15.07. 2021 - 14:46
Zkuste to takhle...

Extract se musí nastavit tak, aby vytáhl tu číselnou hodnotu ze stringu. První parametr je odkud (pozor, první znak je na pozici 0), druhý udává délku podřetězce. Pokud budete mít více než 10 hodnot, pak je dobré začít s 01 atd a tahat dva znaky.

Přiložené obrázky:



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.