Afterglow.Graphics.TriangleParser.Parse C# (CSharp) Method

Parse() public method

public Parse ( ) : GraphicStreamContainer
return GraphicStreamContainer
        public GraphicStreamContainer Parse()
        {
            int triangleCount = Convert.ToInt32(
                mTriangleElement.Attribute("count").Value,
                CultureInfo.InvariantCulture);

            var allIndices = ParseUIntArray(mTriangleElement.Element(
                ColladaImporter.Namespace + "p"));
            var segmentLenght = allIndices.Count() / triangleCount / 3;

            var container = new GraphicStreamContainer();
            var indices = allIndices.EachNthElement(segmentLenght).ToArray();
            container.Create(GraphicStreamUsage.Index, indices);
            var vertexCount = (int)indices.Max() + 1;

            var inputs = ParseInputs();

            foreach (var input in inputs)
            {
                var usage = SemanticHelper.GetUsageForSemantic(input.Semantic);
                var data = new SourceParser(input.SourceElement).Parse();

                if (usage != GraphicStreamUsage.Position)
                {
                    var specificIndices = allIndices.EachNthElement(
                        segmentLenght, input.Offset).ToArray();

                    var newData = new float[vertexCount][];
                    for (int i = 0; i < indices.Length; i++)
                    {
                        var positionIndex = (int)indices[i];
                        newData[positionIndex] = data.ElementAt((int)specificIndices[i]);
                    }

                    data = newData;
                }

                var elementLength = data.First().Length;
                switch (elementLength)
                {
                    case 2:
                        container.Create(usage,
                            data.Select(element => new Vector2(element)).ToArray());
                        break;
                    case 3:
                        container.Create(usage,
                            data.Select(element => new Vector3(element)).ToArray());
                        break;
                    case 4:
                        container.Create(usage,
                            data.Select(element => new Vector4(element)).ToArray());
                        break;
                }
            }

            return container;
        }