7474
7575# function computeInertiaTensorForTwoBodies!(massPropParent, massPropObj, obj; add=true)
7676function addOrSubtractMassPropertiesOfChildToRoot! (obj_root:: Object3D{F} , obj_child:: Object3D{F} ; add= true ):: Nothing where F <: Modia3D.VarFloatType
77- massProperties_child = obj_child. feature. massProperties
77+ solid:: Shapes.Solid{F} = obj_child. feature
78+ massProperties_child = solid. massProperties
7879
79- R_child = obj_child. R_rel
80- r_child = obj_child. r_rel
81- m_child = massProperties_child. m
82- rCM_child = massProperties_child. rCM
83- I_child = massProperties_child. I
80+ R_child:: SMatrix{3,3,F,9} = obj_child. R_rel
81+ r_child:: SVector{3,F} = obj_child. r_rel
82+ m_child:: F = massProperties_child. m
83+ rCM_child:: SVector{3,F} = massProperties_child. rCM
84+ I_child:: SMatrix{3,3,F,9} = massProperties_child. I
8485
85- m_root = obj_root. m
86- rCM_root = obj_root. r_CM
87- I_root = obj_root. I_CM
86+ m_root:: F = obj_root. m
87+ rCM_root:: SVector{3,F} = obj_root. r_CM
88+ I_root:: SMatrix{3,3,F,9} = obj_root. I_CM
8889
8990 # transform childs center of mass to parents coordinate system
90- rCM_child_new:: SVector{3,F} = r_child + R_child' * rCM_child
91+ rCM_child_new:: SVector{3,F} = SVector {3,F} ( r_child + R_child' * rCM_child)
9192
9293 # I_child_steiner: I_child needs to be transformed to parents coordinate system
9394 # I_root_steiner: I_root needs to be transformed to parents coordinate system
9495 # (no need of rotation matrices)
95- I_child_steiner:: SMatrix{3,3,F,9} = Modia3D. NullRotation (F) * I_child * Modia3D. NullRotation (F)' +
96- m_child * Modia3D. skew (rCM_child_new)' * Modia3D. skew (rCM_child_new)
97- I_root_steiner:: SMatrix{3,3,F,9} = I_root +
98- m_root * Modia3D. skew (rCM_root)' * Modia3D. skew (rCM_root)
96+ I_child_steiner:: SMatrix{3,3,F,9} = SMatrix {3,3,F,9} ( Modia3D. NullRotation (F) * I_child * Modia3D. NullRotation (F)' +
97+ m_child * Modia3D. skew (rCM_child_new)' * Modia3D. skew (rCM_child_new) )
98+ I_root_steiner:: SMatrix{3,3,F,9} = SMatrix {3,3,F,9} ( I_root +
99+ m_root * Modia3D. skew (rCM_root)' * Modia3D. skew (rCM_root) )
99100
100101 if add
101102 # ----------- adding mass properties (parent + child) ----------------------
@@ -104,17 +105,16 @@ function addOrSubtractMassPropertiesOfChildToRoot!(obj_root::Object3D{F}, obj_ch
104105
105106 # common center of mass (parent + child)
106107 @assert (m > 0.0 )
107- rCM:: SVector{3,F} = ( m_root * rCM_root + m_child * rCM_child_new)/ m
108+ rCM:: SVector{3,F} = SVector {3,F} (( m_root * rCM_root + m_child * rCM_child_new)/ m)
108109
109110 # I: substract new common mass multiplied with skew matrices of
110111 # center of mass from the sum of I_root_steiner and I_child_steiner
111- I:: SMatrix{3,3,F,9} = I_root_steiner + I_child_steiner - m * Modia3D. skew (rCM)' * Modia3D. skew (rCM)
112+ I:: SMatrix{3,3,F,9} = SMatrix {3,3,F,9} ( I_root_steiner + I_child_steiner - m * Modia3D. skew (rCM)' * Modia3D. skew (rCM) )
112113
113114 # Assign to obj_root
114115 obj_root. m = m
115116 obj_root. r_CM = rCM
116117 obj_root. I_CM = I
117- return nothing
118118
119119 #= # other way to compute inertia tensor
120120 a1 = rCM_new - rCM_child_new
@@ -143,5 +143,6 @@ function addOrSubtractMassPropertiesOfChildToRoot!(obj_root::Object3D{F}, obj_ch
143143 obj_root. m = m
144144 obj_root. r_CM = rCM
145145 obj_root. I_CM = I
146- return nothing
147- end ; end
146+ end
147+ return nothing
148+ end
0 commit comments