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

Rovnice souřadnic bodu v makru

Kompletní přehled příspěvků v tématu Rovnice souřadnic bodu v makru řazený podle data jejich publikace na fóru.

UživatelPříspěvek
Michal Nytra

Poslat zprávu | Profil
Datum: 28.1. 2018 | Zobrazeno: 7335x
Konfigurace CATIA: V5R20

Text dotazu:
Dobrý den,

chtěl bych se prosím zeptat, jak můžu vytvořit bod pomocí souřadnic vůči vztažnému bodu pomocí sady definovaných parametrů a hodnoty souřadnic definovat jako rovnice, skrze makro.
Zkoušel jsem makro nahrát, ale definice rovnic se nevypsala.

Děkuji za odpověď. S pozdravem Michal Nytra.

Ing Jan Cinert

Poslat zprávu | Profil
[#6408] | Publikováno: 28.01. 2018 - 17:13
Dobrý den,

vytvoření formule rekordér nenahraje.

Formule se vytváří vlastností Create formula objektu Relations.

Syntaxe je pak následující:
oPart.Relations.CreateFormula("nazev", "komentář",rízeny_parametr,"tělo formule").

kde rizeny_parametr je parametr bodu, tedy jeho souřadnice.

"tělo formule" je textový zápis rovnice tak, jak byste jej zadával ve formula editoru (pozor na apostrofy a správnou syntaxi...)
Michal Nytra

Poslat zprávu | Profil
[#6409] | Publikováno: 28.01. 2018 - 17:49
Dobrý den,

a jak se prosím mohu odkázat na souřadnice vytvořeného bodu, abych mohl správně zadat řízený parametr? Rovnici jsem zvládl vytvořit např. pro velikost vysunutí, ale s bodem a souřadnicemi si nevím rady
Michal Nytra

Poslat zprávu | Profil
[#6410] | Publikováno: 28.01. 2018 - 18:08
Tak už jsem objevil způsob


Dim hybridShapePointCoord1 As HybridShapePointCoord

Dim parameters1 As Parameters
Set parameters1 = part1.Parameters

Dim relations1 As Relations
Set relations1 = part1.Relations

If (MirrorWidth = True) Then
Set hybridShapePointCoord1 = hybridShapeFactory1.AddNewPointCoord(diameter / 2, 0, width / 2)
Else
Set hybridShapePointCoord1 = hybridShapeFactory1.AddNewPointCoord(diameter / 2, 0, width)

End If
hybridShapePointCoord1.Name = "Helix_start_point"
hybridShapePointCoord1.RefAxisSystem = reference1

hybridBody1.AppendHybridShape hybridShapePointCoord1

part1.Update

Dim formula1 As Formula
Set formula1 = relations1.CreateFormula("Formula.4", "", hybridShapePointCoord1.x, "pitch_circle / 2")

Dim formula2 As Formula
If (MirrorWidth = True) Then
Set formula2 = relations1.CreateFormula("Formula.5", "", hybridShapePointCoord1.z, "width / 2")
Else
Set formula2 = relations1.CreateFormula("Formula.5", "", hybridShapePointCoord1.z, "width")

End If


A mohl se prosím ještě zeptat na způsob, jak do reference vložit osu souřadného systému, např. osu Z? Kód níže nefunguje


Dim axisSystems1 As AxisSystems
Set axisSystems1 = part1.AxisSystems

Dim axisSystem1 As AxisSystem
Set axisSystem1 = axisSystems1.Item("Absolute Axis System")

Dim reference3 As Reference
Set reference3 = part1.CreateReferenceFromObject(axisSystem1.GetZAxis)
Ing Jan Cinert

Poslat zprávu | Profil
[#6411] | Publikováno: 28.01. 2018 - 18:42
Tohle samozřejmě fungovat nebude - metoda GetZAxis vrací pole s vektory pro osu Z, podívejte se do dokumentace API než začnete zkoušet.

Jediný způsob, jak referenci vytvořit přímo z osy Z axis systému, je použití metody CreateReferenceFromBRepName. U této metody se ale musí poměrně složitě poskládat název BRep elementu (zkuste si rekordérem nahrát a podívat se, jak to vypadá). Kdysi jsem se o to pokoušel, ale nepřišel na přesná pravidla syntaxe - sice se mi reference vytvářely, ale často z jiné osy než jsem chtěl. Od té době jsem znovu nezkoušel.

Dá se ještě použít metoda GetZAxisDirection, což vrací přímo refenci, která osu určuje (line, plane). Pokud ale není zadaná, je to opět nepoužitelné. Pak nezbývá než si zjistit vektor, vytvořit direction a podle něj tvořit dál. V tomto případě ale nebude vazba mezi Axis systémem a vytvářenou geometrií.
Ing Jan Cinert

Poslat zprávu | Profil
[#6412] | Publikováno: 28.01. 2018 - 19:11
Ještě přidávám příklad, můžete si to vyzkoušet sám. V modelu je vytvořený AxisSystem.1. Použiju syntaxi pro vytvoření reference z BRep názvu

oPart.CreateReferenceFromBRepName("REdge: (Edge: (Face: (Brp:(AxisSystem.1; XXX; None:(); Cf11:()); Face: (Brp: (AxisSystem.1; YYY); None:();Cf11:()); None:(Limits1:(); Limits2:()); Cf11:()); WithPermanentBody; WithoutBuildError; WithSelectingFeatureSupport; MFBRepVersion_CXR15)", axisSystem1)
.

Když za XXX a YYY dosadíte čísla od 1 do 3, dostanete podle kombinace následující:

1 - 3 : osa X
2 - 1 : osa Y
3 - 2 : osa Z

Když čísla prohodíte, otočí se směr reference. Já narazil na to, že i jiného Axisu už tohle pravidlo neplatilo, dal jsem kombinaci 1 - 3 a místo osy X mi to vrátilo osu Y apod. (Pozn. vytahoval jsem sice roviny, ale předpokládám, že u os můžebýt chování stejné).

A pozor - na konci názvu někam zmizela tečka u axisSystem1!! Je zde velká řada neznámých a spolehlivost této metody proto nepovažuju za 100%.
Michal Nytra

Poslat zprávu | Profil
[#6413] | Publikováno: 29.01. 2018 - 06:42
Děkuji za odpověď. Rekordér píše právě Vámi výše zmíněný příkaz, jeho syntaxi jsem ale úplně nepochopil, takže jsem se to snažil nějak obejít.
GetZDirection funguje bez problémů, výsledkem je rovina xy. Bohužel, funkce Helix neumožňuje jako volbu směru šroubovice rovinu, resp. její normálu.
Ing Jan Cinert

Poslat zprávu | Profil
[#6414] | Publikováno: 29.01. 2018 - 07:50
Tak s tím už se dá něco dělat. Pokud máte rovinu, dá se jednoduše vytvořit line kolmá k této rovině a tu už můžete použít jako osu. Je to sice o krok navíc, a ale někdy to prostě jinak nejde.


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.