本文整理汇总了C#中Piece.AxisMask方法的典型用法代码示例。如果您正苦于以下问题:C# Piece.AxisMask方法的具体用法?C# Piece.AxisMask怎么用?C# Piece.AxisMask使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Piece
的用法示例。
在下文中一共展示了Piece.AxisMask方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FindPlace
public int[] FindPlace(Piece piece)
{
//Выполняет поиск места для блока и помечает это место как занятое
//Возвращает координаты, оговоренные условием
Dictionary<Axis, int> StartIndices = new Dictionary<Axis, int>(3);
Dictionary<Axis, int> StopIndices = new Dictionary<Axis, int>(3);
foreach (Axis axis in Enum.GetValues(typeof(Axis)))
{
if (piece.AxisMask(axis, ".C"))
{
//Если блок должен прилегать к грани, удаленной от оси,
//начальный индекс поиска его места приравнивается к максимальному индексу
StartIndices[axis] = cutsLengths[axis].Count - 1;
}
else
{
StartIndices[axis] = 0;
}
if (piece.AxisMask(axis, "C."))
{
//Если блок должен прилегать к грани, проходящей через ось,
//конечный индекс поиска его места приравнивается к минимальному индексу плюс один
StopIndices[axis] = 1;
}
else
{
StopIndices[axis] = cutsLengths[axis].Count;
}
}
//Поиск места для блока полным перебором с промежуточными условиями,
//Отражающими, подходит ли блок для данной плоскости(ряда) блоков
for (int i = StartIndices[Axis.X]; i < StopIndices[Axis.X]; i++)
{
if (cutsLengths[Axis.X][i] == piece.Measure[Axis.X])
{
for (int j = StartIndices[Axis.Y]; j < StopIndices[Axis.Y]; j++)
{
if (cutsLengths[Axis.Y][j] == piece.Measure[Axis.Y])
{
for (int k = StartIndices[Axis.Z]; k < StopIndices[Axis.Z]; k++)
{
if (cutsLengths[Axis.Z][k] == piece.Measure[Axis.Z])
{
if (!Taken[i, j, k])
{
//Если блок подходит по размерам и это место еще не занято,
//Оно занимается и возвращаются координаты, оговоренные условием
Taken[i, j, k] = true;
return new int[] { cutsPositions[Axis.X][i], cutsPositions[Axis.Y][j], cutsPositions[Axis.Z][k] };
}
}
}
}
}
}
}
//Если подходящий блок не найден, возвращаются нулевые координаты.
return new int[] { 0, 0, 0 };
}