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

Pozice těžiště Body v sestavě

Kompletní přehled příspěvků v tématu Pozice těžiště Body v sestavě řazený podle data jejich publikace na fóru.

UživatelPříspěvek
Břeťa Doležal

Poslat zprávu | Profil
Datum: 3.8. 2012 | Zobrazeno: 11262x
Konfigurace CATIA:

Text dotazu:
Neřešil jste někdy někdo výpočet polohy těžiště Body vzhledem ke globálnímu souřadnému systému sestavy. Zvládám projít jednotlivé díly v sestavě, ale určím zatím pouze polohu těžiště k souřadnému systému dílu(Partu).
Jak nejlépe vyzjistit nulu BODY, popř. PARTu vzhledem k souřadnému systému hlavní sestavy PRODUCTU. Půjde o to, že budu muset zjistit vzdálenosti v X,Y,Z a následně i vzájemné pootočení souř. systémů PART A PRODUCT. Mám rozvětvenou sestavu - libovolný počet dílu a libovolnou strukturu podsestav. Nejlépe by mi mohl poradit, někdo kdo prováděl někdy přes makro polohování dílu v sestavě, apod... Děkuji předem za každou radu.

Ing Jan Cinert

Poslat zprávu | Profil
[#3137] | Publikováno: 03.08. 2012 - 14:55
Pro polohování je spousta funkcí v objektu Product. Jde tím nastavit i zjistit pozice instance v sestavě a spousta jiného.

Dá se taky použít objekt Inertia (měření - ikona se závažím), který je podporován i v API - z něj se pak dá zase vyčíst spousta dalšího. Já to používám v makru na vytvoření automatického (nejmenšího) Bounding Boxu.
Břeťa Doležal

Poslat zprávu | Profil
[#3138] | Publikováno: 06.08. 2012 - 09:07
Uživatel odpovídá na příspěvek #3137:

objekt Product není problém. Problém je, pokud mám objekt Inertia z Body a tento objekt Inertia mi dává polohu těžiště k nule Partu. Jde mi o to, jak zjistit polohu těžiště Body v souřadnému systému Sestavy? Ev. polohu těžiště Partu vzhledem k sestavě? Zatím umím určit inertia pouze z Productu a z Body a Inertia z Body je vzhledem k středu Partu :o(


Public Function GetProductInertia(ByVal iProdukt As Product) As Inertia
'If successful, this Function will Return an Inertia object of Product
'Otherwise, Nothing is returned (you should check the Return value)
'Function For Product measuring - from website: http://v5vb.wordpress.com/2010/10/27/measuring-mass-inertia/
'Mass, density, center of gravity, etc. can be obtained from Inertia object
Dim objInertia As Inertia

Try
objInertia = CType(iProdukt.ReferenceProduct.GetTechnologicalObject("Inertia"), Inertia)
Return (objInertia)
Catch ex As Exception
Return (Nothing)
End Try
End Function 'GetProductInertia

Public Function GetBodyInertiaMeasure(ByVal iPart As Part, ByVal iBody As Body) As Inertia
'If Function is successfully proceeded, this Function will Return an inertia object
'Otherwise, Nothing is returned (you should check the Return value)
'Function For body measuring - from website: http://v5vb.wordpress.com/2010/10/27/measuring-mass-inertia/
'Mass, density, center of gravity, etc. can be obtained from Inertia object
Dim objSPAWorkbench As SPAWorkbench
Dim objInertia As Inertia

Try
objSPAWorkbench = CType(iPart.Parent.GetWorkbench("SPAWorkbench"), SPAWorkbench)
objInertia = CType(objSPAWorkbench.Inertias.Add(iBody), Inertia)
Return (objInertia)
Catch ex As Exception
Return (Nothing)
End Try

End Function 'GetBodyInertiaMeasure


Ing Jan Cinert

Poslat zprávu | Profil
[#3139] | Publikováno: 06.08. 2012 - 09:44
V případě Partu by měl jít objekt Inertia získat úplně stejně. Tím získáte polohu těžiště celého Partu. Pak se zjistíte polohu Partu v sestavě a jednoduchým výpočtem (z polohy těžiště v partu a polohu Partu v sestavě) určíte polohu těžiště Partu v sestavě (nebo i polohu těžiště Partu vzhledem k poloze těžiště sestavy).
Břeťa Doležal

Poslat zprávu | Profil
[#3142] | Publikováno: 06.08. 2012 - 10:15
Uživatel odpovídá na příspěvek #3139:

Jak zjistit polohu Partu v sestavě?
Ing Jan Cinert

Poslat zprávu | Profil
[#3144] | Publikováno: 06.08. 2012 - 11:15
Vlastnosti Position a Move objektu Product :-)
Břeťa Doležal

Poslat zprávu | Profil
[#3145] | Publikováno: 06.08. 2012 - 13:13
Uživatel odpovídá na příspěvek #3144:


Tak zakopaný pes je v tom, že pokud provedu přetypování z Product na Part a potom zpět na Product z Part, tak ztrácím informace o poloze. Takže tady mám problém. Jinak zde je moje pidi funkcička na určení polohy objektu Product, kopie z Helpu:


Public Function ProductPosition(ByVal iProduct As Product) As Double()
'' x axis components
'iAxisComponentsArray(0) = 1.0
'iAxisComponentsArray(1) = 0
'iAxisComponentsArray(2) = 0.707
'' y axis components
'iAxisComponentsArray(3) = 0
'iAxisComponentsArray(4) = 0
'iAxisComponentsArray(5) = 0.707
'' z axis components
'iAxisComponentsArray(6) = 0
'iAxisComponentsArray(7) = -0.707
'iAxisComponentsArray(8) = 0.707
'' origin point coordinates
'iAxisComponentsArray(9) = 1.0
'iAxisComponentsArray(10) = 2.0
'iAxisComponentsArray(11) = 3.0

Dim dblAxisComp(11) As Double
Dim locAxisComponentsArray(11) As Object
iProduct.Position.GetComponents(locAxisComponentsArray)
For i As Integer = 0 To 11
dblAxisComp(i) = CType(locAxisComponentsArray(i), Double)
Next i
Return (dblAxisComp)
End Function 'ProductPosition

Ing Jan Cinert

Poslat zprávu | Profil
[#3151] | Publikováno: 06.08. 2012 - 18:26
A proč to přetypování? V sestavě se všechny instance chovají jako product, i instance partu. Tj i na PartDocumentu existuje vlastnost Product, i když v API to napsané není. Schválně to zkuste.

Např.

PartDocument.Product.Position.GetComponents(...) 


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.