private int FindUpSum() { TriTree tree = new TriTree(); tree.SetData(mDataList); return(tree.SumMaxValue()); }
public SCTriangleCrosshatchGenerator( MachineConfig machineConfig, GeneratorConfig generatorConfig, TriTree <PixelTriData> triTree, BitMapPointGenerator bitMapPointGenerator) : base(machineConfig, bitMapPointGenerator.inputImageBox, generatorConfig) { this.triTree = triTree; this.BaseFileName = bitMapPointGenerator.GetBaseName(); this.bitMapPointGenerator = bitMapPointGenerator; }
public static string DebugTree(TriTree tritree) { string s = ""; for (int i = 0; i < tritree.tris.Count; i++) { s += DebugTree(tritree.tris[i]); } s += tritree.index.ToString(); return(s); }
private void SplittingTrianglesIntoGroups() { int k = 0, kk = 0; int verCount = _vertices.Count; int triCount = _triangles.Count; _verData = new List <ushort> [verCount]; for (int i = 0; i < verCount; i++) { _verData[i] = new List <ushort>(); } for (int i = 0; i < triCount; i++) { _verData[_triangles[i]].Add((ushort)(i / 3)); } _triData = new TriTree[triCount / 3]; for (int i = 0; i < triCount / 3; i++) { _triData[i] = new TriTree(i); } for (int i = 0; i < _notPolyLineIndex.Length; i++) { for (k = 0; k < _verData[_notPolyLineIndex[i]].Count; k++) { for (kk = k + 1; kk < _verData[_notPolyLineIndex[i]].Count; kk++) { _triData[_verData[_notPolyLineIndex[i]][k]].AddList(_triData[_verData[_notPolyLineIndex[i]][kk]]); } } } for (int i = 0; i < _polyLineIndex.Length; i++) { if (_polyLineIndex[i] == -1) { continue; } for (k = 0; k < _verData[_polyLineIndex[i]].Count; k++) { for (kk = k + 1; kk < _verData[_polyLineIndex[i]].Count; kk++) { if (CheckTriConnectionForLinePoints(_verData[_polyLineIndex[i]][k], _verData[_polyLineIndex[i]][kk])) { _triData[_verData[_polyLineIndex[i]][k]].AddList(_triData[_verData[_polyLineIndex[i]][kk]]); } } } } }
public void AddList(TriTree added) { while (added.prev != null) { added = added.prev; } TriTree thisStart = this; while (thisStart.prev != null) { thisStart = thisStart.prev; } if (added.index != thisStart.index) { thisStart.tris.Add(added); added.prev = thisStart; } }
private void MakeTrianglesGroupRec(TriTree tri) { for (int i = 0; i < 3; i++) { int ind = verList.IndexOf(_triangles[tri.index * 3 + i]); if (ind == -1) { verout.Add(_vertices[_triangles[tri.index * 3 + i]]); verList.Add(_triangles[tri.index * 3 + i]); triout.Add((ushort)(verout.Count - 1)); } else { triout.Add((ushort)ind); } } for (int i = 0; i < tri.tris.Count; i++) { MakeTrianglesGroupRec(tri.tris[i]); } }
public TriTree <PixelTriData> getPixelTriTree(float scale = 1f) { //TSPPointSets psets = new TSPPointSets(); Box2f imageBox = new Box2f { min = new Vector2f(0f, 0f), max = new Vector2f(texture.width, texture.height) * scale }; var triTree = TriTree <PixelTriData> .TreeToContainBox <PixelTriData>(imageBox, tspProbMaxCities); //triTree.deviationThreshold = deviationThreshold; var tex = texture; if (tex == null) { Debug.Log("null. bmap name: " + bmapName); return(null); } Color pix; Vector2f v; for (int x = 0; x < tex.width; ++x) { for (int y = 0; y < tex.height; ++y) { pix = tex.GetPixel(x, y); // // TODO: handle grey scale images // Tricky: define regions based on blobs of pixels of similar grey-ness // Would help if: triangle regions (or square regions) could join themselves into sets (of similar grey levels)? // Try: divide picture into 'a lot' of triangles // At some point, each triangle should check it's members for tonal homogeneity. // If not enough homogeneity, divide again. // This would include white pixels! // With this set of homogeneous tone triangles // cull the points in each set based on median tone. // lighter tone, more points get culled // cull by again dividing the triangle, fewer times for lighter // each sub triangle gives only one point. (perhaps the average) // Sufficiently dark tonal regions can skip the second divide: we just want all of their points. // Sufficiently filled triangles can skip the averaging, just provide the center point. // //if(pix.grayscale < MaxGrayScale) //{ v = new Vector2f(x * scale, y * scale); var tri = triTree.root.Add(new PixelTriData(new PixelV { pos = v, color = pix })); if (tri != null) { tri.DivideR((IsoTriangle <PixelTriData> _tri) => { return(TriShouldSplit(_tri)); }); } //} } } return(triTree); }