/// <summary> /// Transforms given compound block with matrix for static grid. Rotation of block is not changed. /// </summary> private static void ConvertRotatedGridCompoundBlockToStatic(ref MatrixI transform, MyObjectBuilder_CompoundCubeBlock origBlock) { MyDefinitionId defId = new MyDefinitionId(origBlock.TypeId, origBlock.SubtypeName); MyCubeBlockDefinition blockDefinition; MyDefinitionManager.Static.TryGetCubeBlockDefinition(defId, out blockDefinition); if (blockDefinition == null) { return; } // Orientation quaternion is not setup in origblock MyBlockOrientation origOrientation = origBlock.BlockOrientation; Vector3I origMin = origBlock.Min; Vector3I origMax; MySlimBlock.ComputeMax(blockDefinition, origOrientation, ref origMin, out origMax); Vector3I tMin; Vector3I tMax; Vector3I.Transform(ref origMin, ref transform, out tMin); Vector3I.Transform(ref origMax, ref transform, out tMax); // Write data origBlock.Min = Vector3I.Min(tMin, tMax); }
/// <summary> /// Converts the given block with the given matrix for static grid. /// </summary> private static void ConvertRotatedGridBlockToStatic(ref MatrixI transform, MyObjectBuilder_CubeBlock origBlock) { MyDefinitionId defId = new MyDefinitionId(origBlock.TypeId, origBlock.SubtypeName); MyCubeBlockDefinition blockDefinition; MyDefinitionManager.Static.TryGetCubeBlockDefinition(defId, out blockDefinition); if (blockDefinition == null) { return; } // Orientation quaternion is not setup in origblock MyBlockOrientation origOrientation = origBlock.BlockOrientation; Vector3I origMin = origBlock.Min; Vector3I origMax; MySlimBlock.ComputeMax(blockDefinition, origOrientation, ref origMin, out origMax); Vector3I tMin; Vector3I tMax; Vector3I.Transform(ref origMin, ref transform, out tMin); Vector3I.Transform(ref origMax, ref transform, out tMax); Base6Directions.Direction forward = transform.GetDirection(origOrientation.Forward); Base6Directions.Direction up = transform.GetDirection(origOrientation.Up); // Write data MyBlockOrientation newBlockOrientation = new MyBlockOrientation(forward, up); Quaternion rotationQuat; newBlockOrientation.GetQuaternion(out rotationQuat); origBlock.Orientation = rotationQuat; origBlock.Min = Vector3I.Min(tMin, tMax); }