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

search v geometrickem setu

Kompletní přehled příspěvků v tématu search v geometrickem setu řazený podle data jejich publikace na fóru.

UživatelPříspěvek
jukom

Poslat zprávu | Profil
Datum: 6.1. 2015 | Zobrazeno: 9215x
Konfigurace CATIA: V5 R19

Text dotazu:
Dobry den, poradi mi niekto ako sa v parte v konkretnom geometrickom sete daju vyhladat vsetky geometricke elementy? mam cast kodu: oSel.Search(" 'Part Design'.'Geometric feature';sel")
Takto sa mi v oznacenom geometrickom sete vyhladaju vsetky geometricke prvky. Problem nastane, ak sa v skumanom geometrickom sete nachadza dalsi set a v nom dalsie prvky. Vtedy sa vyhladaju aj prvky v "podsete". Ako sa da zabezpecit, aby sa vyhladali len prvky, ktore sa priamo v nom nachadzaju?
Skusal som zadat aj ('Part Design'.'Geometric feature' - 'Part Design'.'Geometric feature'.Set='nazov_setu');sel
kde nazov_setu je nazov podsetu, no vysledok bol rovnaky


Dakujem za kazdu radu

Ing Jan Cinert

Poslat zprávu | Profil
[#4871] | Publikováno: 06.01. 2015 - 20:49
Dobrý den,

search se v těchto případech nedá moc omezit, vždy vám vyhledá všechno až úplně dolů. Použijte místo toho kolekci HybridShapes, což je vlastnost set a obsahuje všechny geometrické prvky kromě skic. Kolekce je pak seřazená podle pořadí geometrie ve stromu.

Takže pak nějak takhle:
For i = 1 To oSet.HybridShapes.Count

oHybridShape = oHybridShapes.Item(i)
' dalsi kod ...
Next
jukom

Poslat zprávu | Profil
[#4872] | Publikováno: 06.01. 2015 - 21:28
To som tiež preskúmal. Problém je, že ak sa nachádza nejaký osový kríž v geometrickom sete, ten nepovažuje za objekt hybridshape. Taktiež neberie v úvahu hromadný mirror, pattern atď - tieto objekty berie dokonca Catia ako hybridbody (ten istý ako geometrický set). Takže preto sa mi zdá najlepšia a najspolahlivejšia metóda pomocou search.
Ing Jan Cinert

Poslat zprávu | Profil
[#4873] | Publikováno: 07.01. 2015 - 09:14
Ano, tohle je velká slabina, že se strom v Partu nedá procházet stejně jako strom v sestavě. Nechci tvrdit na 100% že to nepůjde jen pomocí vyhledávací syntaxe, ale podle mě nejde z výběru vyloučit něco co je v jiném setu. Pak asi nezbývá nic jiného než si první - celkový výběr někam uložit (pole, kolekce) a pak z něj odebírat ty prvky, které se nacházejí uvnitř vnořených setů (ty vzniknou úplně stejně). Bude to možná o chvilku déle trvat, pokud bude geometrie víc, ale v principu by to takhle mělo jít.
jukom

Poslat zprávu | Profil
[#4874] | Publikováno: 07.01. 2015 - 10:11
Tento postup ma napadol, len zatial som nezistil akym sposobom odoberat zo setu prvky ktore patria do vnoreneho setu. Zatial som sa vybral cestou premenovania prvkov vo vnorenom sete a to tak, ze pridam priponu za nazov kazdeho prvku ktora bude u vsetkych prvkov tom danom sete rovnaka. A potom pustim opat vyhladavanie prvkov vo vybere:
(Part Design'.'Geometric feature' - 'Part Design'.'Geometric feature'.Name=*_XXX);sel
Nepaci sa mi vsak moc zasah do partu a tiez este nevie ako dlho bude trvat prejdenie celeho partu. Nakoniec sa vsetky prvky premenuju nazad.

Je pravda ze s tym odoberanim prvkov z kolekcie je to elegantnejsie. No ja tuto metodu viem pouzit zatial iba tak, ze pri dvoch kolekciach prechadzam postupne vsetky prvky prvej kolekcie so vsetkymi z tej druhej a hladam zhodu. To je pochopitelneý strsne zdlhave a neprakticke. Ak by bolo mozne spravit akoby kvazi odpocet tej kolekcie prvkov z vnorenej mnoziny od tej hlavnej, tak by to bolo super.

uvitam kazdu radu. Dakujem uz aj za predosle rady
Ing Jan Cinert

Poslat zprávu | Profil
[#4875] | Publikováno: 07.01. 2015 - 14:05
Nevím v jakém prostředí programujete, ale v VB.NET je typ Dictionary, který se přímo nabízí. Nejprve do tohoto seznamu načtete všechny vyhledané feature, a pak budete postupně odebírat ty z vnořených setů. To by znamenalo pouze projít každý vnořený set.

Syntaxe by vypadala takto:

Dim oDict As Dictionary(Of String, SelectedObject)

oDict = New Dictionary(Of String, SelectedObject)
' naplneni
For i = 1 To oSel.Count
oDict.Add(oSel.Item(i).Value.Name, oSel.item(i))
Next
' a odebrani - pro kazdy podset
For i = 1 To oSel.Count
If oDict.ContainsKey(oSel.Item(1).Value.Name Then
oDict.Remove(oSel.Item(1).Value.Name
End IF
Next

Ing Jan Cinert

Poslat zprávu | Profil
[#4876] | Publikováno: 07.01. 2015 - 14:48
Všechno zpět a zpátky na stromy....

Samozřejmě se dá hledat podle viditelnosti, resp. podle Atributu Shown. Takže pak stačí do vyhledávací syntaxe jen ..Visibility=Shown,sel to je celé. Samozřejmě předtím skrýt vnořené sety, ale to už je maličkost.

Už jsem to kdysi takto používal, jen si člověk hned nevzpomene :-)
jukom

Poslat zprávu | Profil
[#4890] | Publikováno: 12.01. 2015 - 19:02
Vďaka, cez atribut shown to funguje dobre a makro je aj relatívne rýchle. Ešte možno skúsim aj tú druhú variantu cez Dictionary.
Ing Jan Cinert

Poslat zprávu | Profil
[#4891] | Publikováno: 12.01. 2015 - 21:10
To ani nezkoušejte, tohle je absolutně nejjednodušší co může být. Druhý způsob by při větším počtu prvků trval zbytečně dlouho.


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.