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

Oznaceni elementu makrem

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

UživatelPříspěvek
Pavel Krsek

Poslat zprávu | Profil
Datum: 2.4. 2010 | Zobrazeno: 10768x
Konfigurace CATIA:

Text dotazu:
Dobry den,
mel bych prosim dalsi dotaz jak naprogramovat oznaceni pozadovanych elementu makrem viz.:

Sub CATMain()

Set oSelPart = CATIA.ActiveDocument.Selection
If oSelPart.Count > 0 Then
For I = 1 to oSelPart.Count
Set Feature = oSelPart.Item(I)
MsgBox(Feature.Value.Name)
Next
End If

oSelPart.Clear

End Sub


Do tohoto makra bych potreboval doplnit opetovne oznaceni(vysviceni) elementu ve strome, proto abych pak na danou selekci mohl aplikovat prikaz COPY.

Zkousel jsem neco jako:

selection1.Search "Name=Feature.Value.Name,all"

ale to hleda primo nazev Feature.Value.Name, ale ne skutecne jmeno daneho Feature.

Dekuji za radu

Ing Jan Cinert

Poslat zprávu | Profil
[#358] | Publikováno: 02.04. 2010 - 08:57
Tady je jednoduchá pomoc. Odstraňte řádek oSelPart.Clear() - tím si pokaždé výběr smažete - nebo přidejte oSelPart.Copy() před oSelPart.Clear(). Jinak pokud byste chtěl do výběru opět přidávat, musíte si nejprve geometrii někam uložit (např. jako pole s objekty) a pak přidat do výběru příkazem oSelPart.Add( objekt).
Pavel Krsek

Poslat zprávu | Profil
[#359] | Publikováno: 02.04. 2010 - 09:04
Ten radek oSelPart.Clear(), tam je schvalne - jde jen o nazorny priklad.
Ve skutecnosti to potrebuji k tomu, aby se oznaceny feature ulozil do "pameti" (jak rikate) - pak se dany part otevre v novem okne a tam potrebuji dany feature opet automaticky oznacit, abych mohl provest prikaz copy.

ale nevim jak na to.

Dekuji
Ing Jan Cinert

Poslat zprávu | Profil
[#361] | Publikováno: 02.04. 2010 - 09:11
A vy to potřebujete jen vložit? Pokud to zkopírujete do schránky ještě než otevřete part v novém okně, zůstane to tam a nemusíte to znovu kopírovat.
Pavel Krsek

Poslat zprávu | Profil
[#362] | Publikováno: 02.04. 2010 - 09:18
Ja se snazim sestavit makro na kopirovani linku pomoci metody Multimodellink - jiz zalozene tema.
Proto potrebuji v hlavni sestave oznacit nejaky feature, pak se dany feature (vcetne partu) otevre do noveho okna - tam ho potrebuji nakopirovat, vratit se zpet do sestavy a tam ho vlozit do pozadovaneho partu jako Pastespecial.

Dekuji za pomoc.
Ing Jan Cinert

Poslat zprávu | Profil
[#364] | Publikováno: 02.04. 2010 - 10:01
Aha, to jste měl říct hned. Budu to psát z hlavy, tak snad tam nenasekám chyby.
(kód pro VB Studio 2008, pokud píšete ve VB6, přidejte si 'set' při vytváření objektů)
Sub CatMain()

Dim oSelectedObjecs() As Object 'pole s vybranymi objekty
Dim oSelection As Selection
Dim i As Short
oSelection = CATIA.ActiveDocument.Selection
ReDim oSelectedObjects(oSelection.Count2) 'redeklarace pole
For i = 1 To oSelection.Count2
oSelectedObjects(i - 1) = oSelection.Item(i).Value 'vlozime vybrany prvek Do pole
Next
oSelection.Clear()
'ted si otevrete nove okno s partem a dale si musite znovu nastavit selekci v partu
oSelection = CATIA.ActiveDocument.Selection
For i = 0 To UBound(oSelectedObjects)
oSelection.Add(oSelectedObjects(i)) 'pridate prvek Do vyberu
Next
oSelection.Copy()
End Sub

a pak uz se jen vratite zpatky a vlozite vyber kam potrebujete. Netvrdím, že to bude fungovat. Nejsem si jistý, jestli půjdou přidat prvky do výběru, když se vytvářely v jiném okně. Pak by se musely ukládat názvy objektů a hledat je metodou FindObjectByName()
Pavel Krsek

Poslat zprávu | Profil
[#365] | Publikováno: 02.04. 2010 - 10:23
Dekuji za pomoc,
ale urcite neni mozne, aby se selekce musela znovu v novem okne provest manualne viz.:

'ted si otevrete nove okno s partem a dale si musite znovu nastavit selekci v partu

to by pak nemelo makro temer zadny vyznam.

Neslo by to treba pres ten Search - kde se nejprve nadefinuje jmeno oznacenoho elementu a pak se v novem okne pres search vyhleda?

Dekuji.
Ing Jan Cinert

Poslat zprávu | Profil
[#367] | Publikováno: 02.04. 2010 - 12:16
Search je ošidný, pokud nebudete specifikovat typ elementu, vyhledá i to co nechcete. Třeba pokud zadáte název Point.1, vyberou se všechny body s tímto názvem (i ze skic).
Musel byste tedy u každého elementu přesně specifikovat o jaký typ se jedná, a i pak není zaručeno že se vám některé názvy nebudou shodovat s jinou geometrií.

Jinak tu selekci nebudete dělat znovu - je třeba jen znovu nastavit instanci a do ní pak nasypat prvky uložené v poli. Teď mi ještě napadlo, tu první selekci by asi chtělo nastavit na partu v sestavě, ze kterého kopírujete (byla by deklarovaná vzhledem k partu) a pak by se nemusela nastavovat znovu. Jak to udělat jsem vám odpovídal v posledním příspěvku.
Ing Jan Cinert

Poslat zprávu | Profil
[#372] | Publikováno: 03.04. 2010 - 21:35
Tak jsem to asi vyřešil. Na ten návod v příspěvku 364 zapomeňte, takhle to nejde. Prvky vybrané v jednom dokumentu s nedají přidat do selekce v jiném. Zkusil jsem jiný způsob. V sestavě vyberete co chcete kopírovat (výběr omezen na plochy, wireframe a Body), pak vyberete Part, do kterého chcete kopírovat a zbytek obstará makro. Zdrojový kód, testovací sestava a videoukázka v příloze.

Přiložené soubory:
ccp_link.zip

Pavel Krsek

Poslat zprávu | Profil
[#382] | Publikováno: 06.04. 2010 - 08:41
Dobry den,
dekuji za pomoc.
Ja jsem dane makro take jiz vytvoril - princip je, ale jiny nez ten Vas - ten take vyzkousim - prijde mi lepsi.
To moje makro, ktere jsem sestavil diky vasim dilcim napadum funguje tak, ze part s oznacenymi features se otevre do noveho okna, tam se pomoci funkce FindObjectByName opet reference najdou, zkopiruji, vrati do hlavni sestavy a tam se jako paste special vlozi do aktivniho partu.
Vse funguje OK, ale nevyhoda je, ze pokud zdrojovy part obsahuje hodne features, tak pomerne dlouho trva, nez makro v druhem okne pomoci dane funkce jednotlive features najde.
Vubec me nenapadlo to sestavit Vasim zpusobem tj. ze do druheho okna se neotevira zdrojovy part, ale part do ktereho potrebuji nakopirovat linky. SUPER napad.

Pokud by Vas zajimalo, to moje makro, tak je v priloze.

Diky moc.

Přiložené soubory:
multi-model-link_.zip

Ing Jan Cinert

Poslat zprávu | Profil
[#383] | Publikováno: 06.04. 2010 - 08:49
Pozor na jednu věc. Pokud se budou dvě feature jmenovat stejně, funkce FindObjectByName najde vždy jen jednu, takže to také vůbec nemusí být ta kterou chcete kopírovat.
Příklad: Budete chtít kopírovat bod se jménem Point.1. Makro vám vybere bod v první skice, protože se stoprocentně jmenuje stejně a navíc (téměř) každá skica bod s tímto názvem obsahuje. Jde to použít, pokud zaručíte jedinečné názvy u všech feature...
Používal jsem to v jiném makru a měl jsem velké problémy.
Pavel Krsek

Poslat zprávu | Profil
[#384] | Publikováno: 06.04. 2010 - 09:49
Tak jsem zkousel to vase makro a je "temer" OK.
Vadi mi na nem je to, ze musi byt aktivni sestava a ne part do ktereho kopiruji linky.
Nechapu proc prikaz oSelection.Copy() musi byt pri aktivni sestave, jinak vyskoci chybova hlaska catstriptu.
Pokud makro upravim tak, ze zacatek scriptu vymazu, Copy provedu manualne a pak terpve spustim makro, tak je vse OK. Pri manualnim Copy je jedno co je aktivni (part ci sestava), ale v makru ne. Nechapu.
Predpokladam, ze tema, ktere jste zalozil na aktivaci partu ci produktu makrem se vztahuje k tomuto problemu. Je to tak?

Dekuji.
Ing Jan Cinert

Poslat zprávu | Profil
[#385] | Publikováno: 06.04. 2010 - 10:39
Přesně tak. Lze to obejít nastavením Workbench, pak to funguje bez problémů.
Pavel Krsek

Poslat zprávu | Profil
[#386] | Publikováno: 06.04. 2010 - 11:17
Co myslite terminem "Workbench"?
Jak by se muselo prosim kon***ne nastavit?

Dekuji
Ing Jan Cinert

Poslat zprávu | Profil
[#389] | Publikováno: 06.04. 2010 - 12:32
Workbench je pracovní prostředí - Part Design, Shape Design, Assembly Design atd. Příkaz vypadá CATIA.GetWorkbench("PrtCfg") (pro PartDesign). Problém je, že když se to přepíná do Part Design, otevře se nový Part. Obráceně, tj. přepnutí z Part na Assembly, se aktivuje instance Partu a to stačí.


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.