Prochazeni sestavy
Uživatel | Příspěvek |
Pavel Krsek ![]() ![]() Poslat zprávu | Profil |
Datum:
2.8. 2012
| Zobrazeno:
16704x Konfigurace CATIA: Text dotazu: Dim MyProduct As Product Toto makro funguje OK - vymaze v aktivnim partu, productu vsechny parametry az na definovane vyjimky. Nyni potrebuji makro upravit tak, aby proslo celou sestavu a vymazalo dane parametry u vsech partu a productu - to se mi vubec, ale nedari. Mohl by nekdo poradit? Koukal jsem na tuto diskuzi (http://www.catia-forum.cz/forum/topic.php?topic_id=628), ale i kdyz zkousim modifikovat dane priklady, tak to stejne nejede. |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#3126]
| Publikováno:
02.08. 2012 - 09:45 Na procházení sestavy stačí opravdu jednoduchá rekurze, jde jen o to, co bude parametrem funkce. Buď to může být produkt (top sestava) nebo kolekce (produkty v top sestavě). Každý způsob má svoje pro i proti.
V každém případě potřebujete dvě funkce. První získá objekt top sestavy (nebo kolekci jejích podproduktů) a pak zavolá vlastní rekurzivní funkci, např takhle. ' hlavni fce Při tomto způsobu se musí buď v hlavní fci nebo v rekurzi s nějakou podmínkou zpracovat hlavní u sestava, kterou rekurze nezahrne. A to je celé, nic víc k procházení nepotřebujete. Kam si budete ukládat názvy nebo celé objekty a jejich počty už je na Vás. Struktura se dá i načíst do TreeView a pak se s ní dá pracovat, viz obrázek. |
Pavel Krsek ![]() ![]() Poslat zprávu | Profil |
[#3129]
| Publikováno:
02.08. 2012 - 10:57 Diky moc za pomoc,
ale stejne na to koukam jako na prvni makro pred casem. 1) opravdu staci muj script doplnit na oznacene misto? (porad nerozumim jak funguje prikaz "explore" - to postupne aktivuje v sestave vsechny party a produkty?) 2) jak se necha osetrit vynechani hlavni sestavy v dane rekurzy? |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#3130]
| Publikováno:
02.08. 2012 - 12:35 ad 1) To samozřejmě nestačí. Deklarace se musí přesunout do funkce Explore, pak bz to mělo fungovat. Explore neí příkaz, ale procedura (Sub), která v okamžiku, kdy právě procházená sestava obsahuje podstastavy, volá sama sebe - tomu se právě říká rekurze.
ad 2) buď se dá do rekurzivní fce část kódu, která stejným způsobem jako oSubProduct zpracuje i oProduct, ale jen za podmínky, že je počet produktů rovný 1 (první procházený produkt se top sestava. Nebo se top sestava zpracuje v hlavním programu a rekurze se nemění.. |
Pavel Krsek ![]() ![]() Poslat zprávu | Profil |
[#3133]
| Publikováno:
03.08. 2012 - 06:43 Diky za pomoc.
Zkousel jsem zkousel, ale nakonec se nezdarilo. Nakonec jsem jeste zkusil uplne jednoduchy kod bez rekurze a volani podprocedury: Set LocDocs = CATIA.Documents For i = 1 To LocDocs.Count a to udela presne co jsem potreboval - tj. vymaze ve vsech parts a products parametry. Muzete mi prosim rici, jaky teda pak rozdil mezi timto a rekurzy? Diky. |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#3134]
| Publikováno:
03.08. 2012 - 08:33 Tímto Vaším způsobem projdete všechny dokumenty a dostanete se na jejich User Defined properties (ale třeba už na na parametry). Rekurze prochází celou sestavu podle její struktury, tj. projde popořadě každou jednotlivou instanci partu a productu. Používá se třeba při sjednocení PartNumber a InstanceName (pak je to např. Soucast(Soucast.1) atd.)
Klasický příklad na rekurzi je třeba vytvoření kusovníku, kdy potřebujete počty jednotlivých instancí a jejich názvy. To jinak udělat nejde. |
Josef Landa ![]() ![]() Poslat zprávu | Profil |
[#4752]
| Publikováno:
25.09. 2014 - 18:47 Dobrý den,
v příspěvku [#3126] máte náhled na načtenou strukturu do TreeView. Je možné sem dát jednoduchý příklad pro VB.NET? Děkuji. |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#4753]
| Publikováno:
26.09. 2014 - 15:38 Tohle vytvoří strom s načtenými produkty. Stačí přidat rekurzi na procházení sestavy a předávat jí současně i příslušný Node.
Předpokládá komponent TreView a v něm vložený top node. ' nacte seznam otevrenych sestav |
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.