public static bool CheckMergeConnectivity(MyCubeGrid hitGrid, MyCubeGrid gridToMerge, Vector3I gridOffset) { // CH: Beware, this funtion seems horribly inefficient! Think twice before using it (e.g. don't use it in a 10000x loop) or optimize it :-) MatrixI mergeTransform = hitGrid.CalculateMergeTransform(gridToMerge, gridOffset); Quaternion mergeOri; mergeTransform.GetBlockOrientation().GetQuaternion(out mergeOri); foreach (var block in gridToMerge.GetBlocks()) { Quaternion ori; Vector3I pos = Vector3I.Transform(block.Position, mergeTransform); block.Orientation.GetQuaternion(out ori); //Matrix mergeGridMatrix = Matrix.CreateFromQuaternion(mergeOri); //Matrix oriMatrix = Matrix.CreateFromQuaternion(ori); //Matrix result = oriMatrix * mergeGridMatrix; //Quaternion quatFromMatrix = Quaternion.CreateFromRotationMatrix(result); // Seems that quaternion multiplication is reversed to matrix multiplication! ori = mergeOri * ori; var mountPoints = block.BlockDefinition.GetBuildProgressModelMountPoints(block.BuildLevelRatio); if (MyCubeGrid.CheckConnectivity(hitGrid, block.BlockDefinition, mountPoints, ref ori, ref pos)) return true; } return false; }