本文整理汇总了C#中System.Boolean.ToList方法的典型用法代码示例。如果您正苦于以下问题:C# Boolean.ToList方法的具体用法?C# Boolean.ToList怎么用?C# Boolean.ToList使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Boolean
的用法示例。
在下文中一共展示了Boolean.ToList方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Run
/// <summary>
/// Triangulates a Polygon into faces.
/// </summary>
/// <param name="points2D">The 2D points represented in loops.</param>
/// <param name="isPositive">Indicates whether the corresponding loop is positive or not.</param>
/// <returns>List<Point[]>, which represents vertices of new faces.</returns>
/// <exception cref="System.NotImplementedException"></exception>
public static List<PolygonalFace> Run(List<Point[]> points2D, Boolean[] isPositive)
{
//Return variable triangles
var triangles = new List<PolygonalFace>();
#region Preprocessing
//Preprocessing
// 1) For each loop in points2D
// 2) Create nodes and lines from points, and retain whether a point
// was in a positive or negative loop.
// 3) Add nodes to an ordered loop (same as points2D except now Nodes)
// and a sorted loop (used for sweeping).
var i = 0;
var orderedLoops = new List<List<Node>>();
var sortedLoops = new List<List<Node>>();
var listPositive = isPositive.ToList<bool>();
foreach (var loop in points2D)
{
var orderedLoop = new List<Node>();
//Create first node
var nodeType = GetNodeType(loop.Last(), loop[0], loop[1], isPositive[i]);
var firstNode = new Node(loop[0], nodeType, i);
var previousNode = firstNode;
orderedLoop.Add(firstNode);
//Create other nodes
for (var j = 1; j < loop.Count() - 1; j++)
{
//Create New Node
nodeType = GetNodeType(loop[j - 1], loop[j], loop[j + 1], isPositive[i]);
var node = new Node(loop[j], nodeType, i);
//Add node to the ordered loop
orderedLoop.Add(node);
//Create New Line
var line = new Line(previousNode, node);
previousNode.StartLine = line;
node.EndLine = line;
previousNode = node;
}
//Create last node
nodeType = GetNodeType(loop[loop.Count() - 2], loop[loop.Count() - 1], loop[0], isPositive[i]);
var lastNode = new Node(loop[loop.Count() - 1], nodeType, i);
orderedLoop.Add(lastNode);
//Create both missing lines
var line1 = new Line(previousNode, lastNode);
previousNode.StartLine = line1;
lastNode.EndLine = line1;
var line2 = new Line(lastNode, firstNode);
lastNode.StartLine = line2;
firstNode.EndLine = line2;
//Sort nodes by descending Y, ascending X
var sortedLoop = orderedLoop.OrderByDescending(node => node.Y).ThenBy(node => node.X).ToList<Node>();
orderedLoops.Add(orderedLoop);
sortedLoops.Add(sortedLoop);
i++;
}
#endregion
// 1) For each positive loop
// 2) Remove it from orderedLoops.
// 3) Create a new group
// 4) Insert the first node from all the negative loops remaining into the group list in the correct sorted order.
// 5) Use the red-black tree to determine if the first node from a negative loop is inside the polygon.
// Refer to http://alienryderflex.com/polygon/ for how to determine if a point is inside a polygon.
// 6) If not inside, remove that nodes from the group list.
// 7) else remove the negative loop from orderedLoops and merge the negative loop with the group list.
// 8) Continue with Trapezoidation
List<List<Node>> completeListSortedLoops = new List<List<Node>>(sortedLoops);
while (orderedLoops.Any())
{
//Get information about positive loop, remove from loops, and create new group
i = listPositive.FindIndex(true);
var posOrderedLoop = new List<Node>(orderedLoops[i]);
var sortedGroup = new List<Node>(sortedLoops[i]);
listPositive.RemoveAt(i);
orderedLoops.RemoveAt(i);
sortedLoops.RemoveAt(i);
//Insert the first node from all the negative loops remaining into the group list in the correct sorted order.
for (var j = 0; j < orderedLoops.Count(); j++)
{
if (listPositive[j] == false)
{
InsertNodeInSortedList(sortedGroup, sortedLoops[j][0]);
}
//.........这里部分代码省略.........