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

Zjisteni souradnic X,Y,Z partu v sestave

Kompletní přehled příspěvků v tématu Zjisteni souradnic X,Y,Z partu v sestave řazený podle data jejich publikace na fóru.

UživatelPříspěvek
Fojman

Poslat zprávu | Profil
Datum: 6.10. 2013 | Zobrazeno: 10217x
Konfigurace CATIA: V5R19

Text dotazu:
Dobrý den, potřeboval bych poradit jakým způsobem načtu souřadnice partu v sestavě. Něco na způsob jako když přiložím kompas a zobrazí se mi souřadnice X,Y,Z a úhly natočení podle těchto os, jen potřebuji tyto hodnoty načíst do proměnných v kódu. Díky za rady.

Ing Jan Cinert

Poslat zprávu | Profil
[#4154] | Publikováno: 06.10. 2013 - 19:21
Dobrý den,

k tomu slouží metoda GetPosition objektu Position, což je vlastností každého Productu v sestavě (i Partu). Vrací ale vždy pozici vzhledem k sestavě, ve které se nachází, ne k top sestavě. Pokud je tedy Product až v několikáté úrovni, musí se počítat rekurzivní transformace. K tomu doporučuju osvěžit analytickou geometrii, sčítání vektorů atd.

GetPosition vrací pole o 12 prvcích, kde 0-8 jsou normalizované vektory pro směry X, Y, Y a 9-11 pak vlastní pozice počátku. Přesný popis v příloze...

Nedá se použít ani měření, protože na rozdíl od klienta, kde se dá vybrat vzhledem k jakému počátku se má měřit, v API se měří jen vůči prvnímu nadřazenému objektu.

Přiložené obrázky:

Fojman

Poslat zprávu | Profil
[#4163] | Publikováno: 07.10. 2013 - 16:22
Děkuji za odpověď. Přesně to jsem hledal. Vše funguje podle mých představ, jen jsem narazil na problém, že nevím jak získat informaci o natočení podél os. Dokážu otáčet s Partem podle os, ale rád bych získal stejnou informaci o úhlech jako je u kompasu (tedy natočení podle u, v a w respektive x,y,z) a ještě lépe tuto hodnotu upravovat. Nevím jakým způsobem to zpětně získat z vektorů, protože záleží i na pořadí transformací podle os. Víceméně by mi stačilo načíst prvotní hodnotu jako se zobrazuje u kompasu a tu dále upravovat. Díky za případně nasměrování.
Ing Jan Cinert

Poslat zprávu | Profil
[#4165] | Publikováno: 07.10. 2013 - 22:08
Jak jsem psal výše, musíte znát trasformační matici vzhledem k top sestavě. Ta se dá sestavit tak, že při rekurzivním procházení sestavy zjišťujete v případě podsestavy její polohu a přepočtete výslednou pozici a vektory a to samé pak i u partu. Pro zjištění úhlů natočení se už jen vektory přepočtou do, pokud se nepletu, Eulerových úhlů, kterými je definováno natočení kompasu.

Téměř vše se dá najít na Googlu a k tomo opáčko z matiky.
Fojman

Poslat zprávu | Profil
[#4167] | Publikováno: 07.10. 2013 - 22:51
Opět děkuji. Eulerovy úhly - to je ta magie:) Vypadá to, že už se začínám orientovat. Budu se na to muset podívat, už je to nějaký pátek co jsem ze školy. Díky
Ing Jan Cinert

Poslat zprávu | Profil
[#4168] | Publikováno: 07.10. 2013 - 23:08
Já jsem dělal dvě poměrně rozsáhlá makra, v obou byla transformace - jednou tak, podruhé zpět, a u jednoho z maker jsem určoval Eulerovy úhly Axis systému (samozřejmě obecného, pokud je zadaný právě pomocí úhlů, tak se dají lehce vyčíst). Strávil jsem s tím dva dny a několikrát jsem chtěl vrátit diplom....

Jedno z maker - RPS Points , kde se používá výpočet Eulerových úhlů i transformace
Fojman

Poslat zprávu | Profil
[#4191] | Publikováno: 13.10. 2013 - 02:01
Tak už mi to skoro i funguje podle mých představ:) Bohužel něco dělám špatně protože v některých případech se mi špatně vypočítají velikosti úhlů z normalizovaných vektorů - buď se úhel liší o Pí nebo má opačné znaménko a já nějak nemůžu přijít čím to je. Zajímavé je, že ve většině případů je to ok, ale při určitém natočení Partu to prostě nefunguje. Postupuji tak, že přes Arcsin prvku (2) pole spočítám úhel natočení podle osy Y. A tento úhel a další prvky pole využiji pro výpočet zbylých úhlů. Jenže někdy je tato složka vektoru záporná a já tím pádem dostanu úhel s opačným znaménkem a tím jsou ovlivněny další výpočty. Čím víc do toho zabřehávám tak tím méně se orientuji a pokud se to snažím vyřešit nějakou podmínkou tak se chyba objeví jinde. Určitě to bude nějaká blbost co jsem přehlédnul.
Fojman

Poslat zprávu | Profil
[#4192] | Publikováno: 13.10. 2013 - 20:15
Já už to nechápu - když si kompasem zjistím natočení Partu, ručně přepočtu úhly natočení na složky vektorů a nechám vypsat složky vektorů z Catie tak dostanu u některých složek rozdílné hodnoty:(
Ing Jan Cinert

Poslat zprávu | Profil
[#4193] | Publikováno: 14.10. 2013 - 12:41
Ono si to totiž Catie přepočítává nějak jinak. Já to teď zkoušel v mém makru na RPS body a mám takovéto výsledky. Dokud jsou Eulerovy úhly zadané v rozmezí 0 - 180°, vše funguje jak má. Pokud ale zadám hodnoty vyšší, dějou se divné věci. Makro zjistí úplně jiné hodnoty....
Když ale tyto hodnoty použiju pro vytvoření nového Axis systému, ejhle, vytvoří se ten samý, jako kdybych hodnoty zadával v rozmezí 0 - 180°. Vše je krásně vidět na obrázku.

První AS s názvem RPS je zadaný přes Eulerovy úhly (225, 128, 350). Druhý (RPS v Hide) je jeho mrtvá kopie. Makro ho ale načte s hodnotami -135, 128, -10, tedy výsledky jsou odečty skutečných úhlů od 360°. Když pak vytvořím další AS (AxisSystem.4) s těmito hodnotami, vytvoří se identický AS jako v prvním případě. Na obrázku jsou oba dva - evidentně přes sebe, protože je vidět jen jeden.

Zakopaný pes je tedy ve funkci Atan2, která vrací úhly jen v intervalu 0 +/- pí.

Přiložené obrázky:

Fojman

Poslat zprávu | Profil
[#4327] | Publikováno: 15.12. 2013 - 13:24
Nakonec jsem díky vaší pomoci dal vše dohromady a funguje to jak potřebuji. Teď se po čase k makru vracím a chtěl bych ho vylepšit. V současnosti se jedná o jednu velkou proceduru ve které procházím strom v cyklu a u každé instance hned zapisuji její souřadnice do Excelu s tím, že proměnnou "I" z cyklu používám pro určení buňky v Excelu kam se má hodnota zapsat. Rád bych makro upravil tak aby se načítali i souřadnice podsestav a jejich dílů, takže potřebuji rekurzivně procházet sestavu. Problém nastává že když rekurzivně volám proceduru tak se mi proměnná bude opět začínat od 0 a nebude tak pokračovat číslování řádků. Napadá mě využití nějaké globální proměnné se kterou bych počítal kolikrát procedura včetně rekurze proběhla a z toho vycházet pro Excel. Lze to nějak udělat? Nebo existuje lepší způsob?

Ing Jan Cinert

Poslat zprávu | Profil
[#4328] | Publikováno: 15.12. 2013 - 13:35
Globální proměnná, třeba RowIndex je nejsnažší řešení, jak udržet informaci o aktuálním řádku v Excelu.

Ještě Vás upozorním na to, že pokud budete rekurzivně procházet sestavu, je třeba počítat s tím, že GetPosition vrací hodnoty vzhledem k sestavě, kde se instance nachází, nikoliv k top sestavě. Takže se musí použít transformace souřadnic a směrových vektorů, jinak se nedopočítáte.


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.