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

select FACE - name

Kompletní přehled příspěvků v tématu select FACE - name řazený podle data jejich publikace na fóru.

UživatelPříspěvek
Peter Kovac

Poslat zprávu | Profil
Datum: 8.10. 2012 | Zobrazeno: 10742x
Konfigurace CATIA:

Text dotazu:
zdravim

potreboval by som spravit nasledovne:

Mam nejaku hlavnu zostavu, v ktorej mam dalsie podzostavy (cize som v assembly mode).Pri interaktivnom vybere potrebujem referenciu na face, kde dostanem nazov toho face v nejakom takomto tvare:

Selection_RSur:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:();Cf11:());Chamfer.1_ResultOUT;Z0;G2796))


problem je, ze ho chcem dostat v takomto tvare:

("Product1/Product7.1/Product6.1/Product3.1/Part2.1/!Axis:(Selection_RSur:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:();Cf11:());Chamfer.1_ResultOUT;Z0;G2796))")


kde vlastne product1 je hlavna zostava a product7.1 je podzostava v ktorej je vybraty hladany face. Je nejaka moznost pri interaktivnom vybere dostat nielen "cisty" face, ale nazov aj s nadzostavami? Aj v pripade, ze ta podzostava moze mat niekolko podzostav...



Ing Jan Cinert

Poslat zprávu | Profil
[#3390] | Publikováno: 08.10. 2012 - 12:46
Samozřejmě to jde, přes vlastnost parent najdete nejprve rodiče (produkt) vybrané plochy, a pak se stejným způsobem propracujete až k vrcholové sestavě. Název, resp. kontext v sestavě se pak poskládá z názvů (instance name) jednotlivých produktů. V každém případě ale nebude fungovat reference - tu stejně musíte vytvářet na nějakém objektu typu Part podle názvu.

Jinak ten název co uvádíte pochází z BRep elementu a moc bych nedoporučoval s tím takhle pracovat. U objektů typu face, edge, vertex někdy není nutné vytvářet reference, ale lze je podstrčit funkci přímo jako vstup.
Peter Kovac

Poslat zprávu | Profil
[#3391] | Publikováno: 08.10. 2012 - 13:38
V každém případě ale nebude fungovat reference - tu stejně musíte vytvářet na nějakém objektu typu Part podle názvu

ak chcem referenciu na BREPelement a nahram to cez makro, dostanem:
Product1/Product7.1/Product6.1/Product3.1/Part2.1/!Axis:(Selection_RSur:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:();Cf11:());Chamfer.1_ResultOUT;Z0;G2796))


ak na ten isty face vyberem cez interaktivny vyber, dostanem:
Selection_RSur:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:();Cf11:());Chamfer.1_ResultOUT;Z0;G2796))


..v mojom pripade budem potrebovcat produktov s nazvom "Product7.1" vela kopii, v celom odkaze sa mi bude menit len ten jediny nazov sposobom "Product7.x", kde x je pocet tych kopii a zvysok ostava nezmeneny vratane BREPelementu. Takze ta referencia musi fungovat a to ako:

Set reference1 = product1.CreateReferenceFromName("Product1/Product7.1/Product6."& x &"/Product3.1/Part2.1/!Axis:(Selection_RSur:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:();Cf11:());Chamfer.1_ResultOUT;Z0;G2796))")

ten nazov som schopny menit a ta referencia by mala fungovat. Cez ten parrent by som sa snad k tomu mal dopracovat. Este neviem presne syntax, ale k tomu sa uz dopracujem. (rad by som sa vyhol BREPelementom, ale v tomto mojom konkretnom pripade sa to neda...)

U objektů typu face, edge, vertex někdy není nutné vytvářet reference, ale lze je podstrčit funkci přímo jako vstup.
tomu moc dobre nerozumiem, ako?


Ing Jan Cinert

Poslat zprávu | Profil
[#3392] | Publikováno: 08.10. 2012 - 14:49
A nebylo by lepší místo složitého odkazování na brep element prostě tu plochu zkopírovat, pak postupně vkládat do jednotlivých partů pomocí paste special (stejně se vám vytvoří instance v setu External references), a pak jednoduše v těch partech vytvářet referenci z této face (line, point,...)? Skládání té kontextové cesty je strašně složité.

Tím že není nutné vytvářet referenci jsem myslel že u funkcí, kde je vstupem objekt typu Reference se dá použít přímo objekt pro vytvoření reference, tedy zmíněná plocha, hrana, vrchol atd.
Peter Kovac

Poslat zprávu | Profil
[#3393] | Publikováno: 09.10. 2012 - 09:36
A nebylo by lepší místo složitého odkazování na brep element prostě tu plochu zkopírovat, pak postupně vkládat....

neviem, ako to je myslene, ale vysvetlim presne, co kcem spravit. Dajme tomu, ze mam 30 dier ku ktorym chcem zavazbit napr. skrutky. Na objekte, kde su diery, tie plochy musim tak ci tak vyklikat (+ dosadaciu plochu). To je ale vsetko. Zo skrutky potrebujem jeden BREPelement (popripade 2, ak chcem valcovu cast a plochu dosadaciu, popripde aj ine). Na zaklade referencii z dier a jedneho (alebo viacej) brep elementov na skrutke by uz mala vazba vzniknut. Cize chcem spravit, aby makro spravilo nasledovne: na objekte s dierami treba vyklikat valcove plochy dier a jednu dosadaciu. Na skrutke vybrat len face jednej valcovej a rovnej plochy. Makro potom skopiruje pruslisny pocet skrutiek a zavazbi.

Teraz este k problemu: ak vyberam face, som schopny sa s funkciou parent dostat sa len po part. V pripade vyberu produktov do najhlavnejsej zostavy. Ja chcem ale vyberat face, ako vsak zistit rodicov aj v assembly? a ako sa to da zacyklit? kedze kod je:

MyString = Selection1.Item(1).Value.Parent.Name


a ak chcem zistit rodica tohto rodica, tak:

MyString = Selection1.Item(1).Value.Parent.Parent.Name


neviem z toho spravit cyklus po pociatocneho rodica...
Peter Kovac

Poslat zprávu | Profil
[#3394] | Publikováno: 09.10. 2012 - 09:42
alebo inak povedane, k tomuto sa viem dopracovat:

Selection_RSur:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:();Cf11:());Chamfer.1_ResultOUT;Z0;G2796))

k tomuto zatial nie a to prave potrebujem:
("Product1/Product7.1/Product6.1/Product3.1/Part2.1/!Axis:(Selection_RSur:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:();Cf11:());Chamfer.1_ResultOUT;Z0;G2796))")

Ing Jan Cinert

Poslat zprávu | Profil
[#3395] | Publikováno: 09.10. 2012 - 12:00
Tak jsem se na to podíval pořádně a ... Máte pravdu, že v sestavě jde reference vytvořit pouze z Brep názvu, na to jsem poprvé nevzpomněl. K tomu samozřejmě potřebujete celou cestu k elementu, a tu dostanete např. takhle.

Sub CATMain()


Set oSelection = CATIA.ActiveDocument.Selection

Dim Filter(0)
Filter(0) = "Face"

oSelection.SelectElement2 Filter, "Vyberte plochu...", false

Set oUpperProduct = oSelection.Item(1).leafproduct.parent.parent
Set oTopProduct = CATIA.ActiveDocument.product

' Do kontextu pridame instanci, ze ktere vybirame
Kontext = oSelection.Item(1).leafproduct.name & "/"

Do While Not oUpperProduct is oTopProduct ' kontrolujeme, zda jsme jiz u top sestavy

Set oUpperProduct = oUpperProduct.Parent.Parent

' pridame pod sestavy
Kontext = Kontext & oUpperProduct.name & "/"

Loop

' pridame top sestavu
Kontext = Kontext & oUpperProduct.name & "/"

MsgBox Kontext

End Sub


Jediné co zbývá, je obrátit pořadí produktů v cestě - takže místo vytváření cesty přímo stačí jednotlivé části cesty ukládat do pole, a potom ho projít obráceně a cestu poskládat správně.
Peter Kovac

Poslat zprávu | Profil
[#3396] | Publikováno: 09.10. 2012 - 12:48
tak toto funguje presne ako ma, akurat stacilo odobrat predposledny riadok Kontext = Kontext & oUpperProduct.name & "/" a v cykle stacilo vymenit kontext za znak &, teda Kontext = oUpperProduct.Name & "\" & Kontext, tym padom netreba ani nahravat do pola a potom prejst obratene a takto dostanem presne strukturu aku som chcel.
DAKUJEM!
zaroven som rad, ze som sa opat nieco naucil, ako ze existuje nieco ako leafproduct a co znamena parent.parent ;)
Ing Jan Cinert

Poslat zprávu | Profil
[#3397] | Publikováno: 09.10. 2012 - 16:01
:-) ono je to všechno popsané v dokumentaci API, jen si to přečíst. Někdy je to ale zdlouhavé, protože člověk vlastně neví co hledá...

Docela jsem zvědavý na výsledek vašeho snažení. Přemýšlel jsem o tom co chcete udělat, snad by to mělo jít, pokud nebude problém s orientací vazeb (u vazby hlava šroubu - deska se musí použít Contact, Coincidence by mohla zlobit).
Pavel Krsek

Poslat zprávu | Profil
[#3410] | Publikováno: 15.10. 2012 - 07:12
Ahoj,
vaše diskuze mě zaujala, protože nedávno jsem řešil něco podobného. Potřeboval jsem také uložit nějakým způsobem strukturu podsestav až k označenému partu, tak abych mohl později zase part(parts) označit.
Dělam to složitým způsobem, kdy postupně do různých polích ukladám rodiče partu a ty pak zase postupně deklaruji.

Nyni, kdybych chtěl využít váš příklad:

Kontext = oSelection.Item(1).LeafProduct.Name & "/"

a dostanu např.:
Kontext = "Product2.0/Product1.3/Product1.1/", tak nevim jak jednoduše deklarovat z tohoto řetězce poslední podsestavu "Product1.1".
Mě by napadlo jen najít znaménko "/", pak text oříznout nechat jen xxx="Product2.0" a pak:

Set oProductParent = oAtiveDocument.Product.Products.Item(xxx)

a pak podobným způsobem pokračovat dále, ale to je moc složité.
Nechá se to prosím řešit jednoduše?


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.