private static void AddTriangle( Dictionary <Point, int> mapPointVertexIndex, DMTTriangleBlock block, Point objPoint1, Point objPoint2, Point objPoint3) { int point1Index; int point2Index; int point3Index; if (!mapPointVertexIndex.TryGetValue(objPoint1, out point1Index)) { point1Index = mapPointVertexIndex.Count; mapPointVertexIndex.Add(objPoint1, point1Index); block.AddVertex(objPoint1); } if (!mapPointVertexIndex.TryGetValue(objPoint2, out point2Index)) { point2Index = mapPointVertexIndex.Count; mapPointVertexIndex.Add(objPoint2, point2Index); block.AddVertex(objPoint2); } if (!mapPointVertexIndex.TryGetValue(objPoint3, out point3Index)) { point3Index = mapPointVertexIndex.Count; mapPointVertexIndex.Add(objPoint3, point3Index); block.AddVertex(objPoint3); } block.AddTriangle(point1Index, point2Index, point3Index); }
/// <summary> /// Reads an ASCII STL file filtered by a provided filter. /// </summary> /// <param name="file">The mesh file.</param> /// <param name="filter">The provided filtered.</param> /// <returns>The DMTModel that obeys to the filter condition.</returns> public List <DMTModel> ReadFile(File file, IDMTModelFilter filter) { if (file.Exists == false) { throw new DMTFileException(DMTFileError.FileDoesNotExist); } var blocksIn = new List <DMTTriangleBlock>(); var blocksOut = new List <DMTTriangleBlock>(); var blockIn = new DMTTriangleBlock(); var blockOut = new DMTTriangleBlock(); var vertices = new List <Point>(); foreach (var strLine in file.ReadTextLines()) { if (strLine.Trim().StartsWith("vertex ")) { //Add position var strCoords = strLine.Trim().Split(' '); var intCounter = 0; double x = 0; double y = 0; double z = 0; foreach (var strCoord in strCoords) { if (Information.IsNumeric(strCoord)) { if (intCounter == 0) { x = Convert.ToDouble(strCoord); } else if (intCounter == 1) { y = Convert.ToDouble(strCoord); } else { z = Convert.ToDouble(strCoord); } intCounter += 1; } } vertices.Add(new Point(x, y, z)); } else if (strLine.Trim().StartsWith("endloop")) { if (filter.CanAddTriangle(vertices.ElementAt(0), vertices.ElementAt(1), vertices.ElementAt(2))) { blockIn.AddTriangle(vertices.ElementAt(0), vertices.ElementAt(1), vertices.ElementAt(2)); } else { blockOut.AddTriangle(vertices.ElementAt(0), vertices.ElementAt(1), vertices.ElementAt(2)); } vertices.Clear(); } } blocksIn.Add(blockIn); blocksOut.Add(blockOut); var modelWithinFilter = new DMTModel(); var modelOutsideFilter = new DMTModel(); modelWithinFilter.TriangleBlocks.AddRange(blocksIn); modelOutsideFilter.TriangleBlocks.AddRange(blocksOut); var result = new List <DMTModel>(); result.Add(modelWithinFilter); result.Add(modelOutsideFilter); return(result); }