Selectelement3
Uživatel | Příspěvek |
Pavel Krsek ![]() ![]() Poslat zprávu | Profil |
Datum:
30.7. 2012
| Zobrazeno:
11027x Konfigurace CATIA: Text dotazu: Status = oSelection.SelectElement3(InputObjectType, "Select Body", _ a mam prazdny part napr. ze 4 Bodies s nazvy PartBody, Body.1, Body.2, Body.3. Po spusteni makra pres funkci SelectElement3 mam moznost vice Bodies, to provedu - oznacim Body.2 a Body.3 - ukoncim vyber a kontrolni MsgBox by mel vyhodit nazvy danych Bodies, ale vyhodi nazev 2 prvnich Bodies (tj. PartBody, Body.1)!!! Tzn. makro pozna pocet vybranych Bodies, ale ignoruje specificky vyber, ale pocet Bodies si odpocita od PartBody dale. Ma s tim nekdo zkusenost? Nebo je nekde chyby v mem scriptu? |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#3114]
| Publikováno:
30.07. 2012 - 08:29 Máte chybu ve skriptu. Nemůžete použít bodies1.Item(i) - to je kolekce se všemi Body v partu (kterou ještě ke všemu máte zřejmě náhodou vytvořenou, jinak by to ani nefungovalo. Ve For cyklu musíte použít kolekci selekce, procházíte přeci vybrané feature a ne Body v Partu:
For i = 1 to oSelection.Count |
Pavel Krsek ![]() ![]() Poslat zprávu | Profil |
[#3115]
| Publikováno:
30.07. 2012 - 08:38 Ja, ale potrebuji prochazet Body v Partu.
Uzivatel pres SelectElement oznaci zadouci Body v Partu a ty se pak dle dalsiho scriptu korektne prejmenuji. |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#3116]
| Publikováno:
30.07. 2012 - 09:36 Mícháte jablka a hrušky dohromady. Chcete procházet to, co předtím vyberete - a je jedno jestli to jsou Body nebo něco jiného. Proto musíte procházet kolekci oSelection, která se vytvoří po výběru features uživatelem.
Pokud chcete procházet jen Body (nebo všechna Body), není důvod používat Selekci, jde to udělat jinak a efektivněji. Vy ale berete index i z kolekce Selection (to je seznam všech vybraných features) ale pak berete objekty z kolekce bodies1 (to jsou asi ta Body v Partu). To ale přece nejde, počet prvků v Selekci může být vyšší než počet Body v bodies1 a hlavně je to programově totální šílenost. Takže, chcete přejmenovat jen vybraná Body nebo všechna? |
Pavel Krsek ![]() ![]() Poslat zprávu | Profil |
[#3117]
| Publikováno:
30.07. 2012 - 09:42 V pripade, ktery jsem napsal, chci opravdu prejmenovat jen vybrana Body uzivatelem. |
Pavel Krsek ![]() ![]() Poslat zprávu | Profil |
[#3118]
| Publikováno:
30.07. 2012 - 10:12 Dekuji moc za rady.
Nahradil jsem tedy radek: Set oBodyx = bodies1.Item(i)
radkem: Set oBodyx = oSelection.Item(i).Value
a jiz to funguje. Tim jsem vyresil prvni problem v celem scriptu. Druhy je ten, ze pokud uzivatel nechce prejmnovat jen vybrana Body, ale vsechny, tak nevim, jak oznacit jen Body "v rootu" viz. obr. (potrebuji oznacit jen PartBody, Body.2 a Body.3). Pokud pouziji funkci search Bodies, tak dostanu samozrejmne kolekci vsech Body vcetne tech vlozenych pres boolovske operace. Diky za radu |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#3119]
| Publikováno:
30.07. 2012 - 11:19 To je jednoduché, jsou v podstatě dvě cesty:
1. zapomeňte na selekci - kolekce root Body je ve vlastnosti Bodies partu
2. ověřte si, je-li body v Booleovské operaci - pokud ano, pak to nemůže být root Body For i = 1 To oSelection.Count |
Pavel Krsek ![]() ![]() Poslat zprávu | Profil |
[#3121]
| Publikováno:
30.07. 2012 - 13:04 Diky moc,
uz to funguje. Akorat na podminku "True" to nijak neregovalo tj. neokazalo napr. nazev Body, kterou jsou v boolovske operaci. Pri podmince "False" to funguje tj.napr. ukaze nazev Body ktere jsou v zakladnim rootu. |
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#3122]
| Publikováno:
30.07. 2012 - 15:14 :-) Já mám sice v kódu true, ale předtím píšu, že pokud je Body v bool. operaci (true) pak nemůže být root Body - proto logicky musí být v podmínce false. Bylo to jen na ukázku, ale asi vás to zmátlo. |
Břeťa Doležal ![]() ![]() Poslat zprávu | Profil |
[#3175]
| Publikováno:
13.08. 2012 - 10:27 Snažím se použít funkci SelectElement3 ve VB 2008, ale mám problém. Ve VB6 se použilo pole typu Variant pro první parametr iFilterType. Jaký se deklaruje typ ve VB2008? Intelisens nabízí System.Array, ale s tím to nechce projít. SelectElement3( CATSafeArrayVariant iFilterType, CATBSTR iMessage, boolean iObjectSelectionBeforeCommandUsePossibility, CATMultiSelectionMode iMultiSelectionMode, boolean iTooltip) As CATBSTR
|
Břeťa Doležal ![]() ![]() Poslat zprávu | Profil |
[#3176]
| Publikováno:
13.08. 2012 - 12:17 Uživatel odpovídá na příspěvek #3175:
asi né ideální, ale zatím řeším takto:
|
Ing Jan Cinert ![]() ![]() Poslat zprávu | Profil |
[#3178]
| Publikováno:
13.08. 2012 - 14:36 Já to deklaruju takto:
Dim iFilter(0)
a pak např. iFilter(0) = "Body"
a je to OK. Mělo by to jít i podstrčit jako parametr té vaší funkci. |
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.