Blame mono/Contours/ContourFloat.cs

d33d2a
using System;
d33d2a
using System.Collections.Generic;
d33d2a
using System.Linq;
d33d2a
d33d2a
namespace Contours {
d33d2a
    public struct VectorFloat {
d33d2a
        public float x, y;
d33d2a
d33d2a
        public VectorFloat(float x, float y) {
d33d2a
            this.x = x;
d33d2a
            this.y = y;
d33d2a
        }
d33d2a
    }
d33d2a
d33d2a
    public class ContourFloat {
d33d2a
        public readonly List<list<vectorfloat>> contours = new List<list<vectorfloat>>();</list<vectorfloat></list<vectorfloat>
d33d2a
d33d2a
        public ContourInt toContourInt(float detalization = 10000f) {
d33d2a
            ContourInt contourInt = new ContourInt();
d33d2a
d33d2a
            bool found = false;
d33d2a
            VectorFloat min = new VectorFloat(0f, 0f);
d33d2a
            VectorFloat max = new VectorFloat(0f, 0f);
d33d2a
            foreach(List<vectorfloat> contour in contours) {</vectorfloat>
d33d2a
                foreach(VectorFloat point in contour) {
d33d2a
                    if (!found) {
d33d2a
                        min = max = point;
d33d2a
                        found = true;
d33d2a
                    } else {
d33d2a
                        if (min.x > point.x)
d33d2a
                            min.x = point.x;
d33d2a
                        if (min.y > point.y)
d33d2a
                            min.y = point.y;
d33d2a
                        if (max.x > point.x)
d33d2a
                            max.x = point.x;
d33d2a
                        if (max.y > point.y)
d33d2a
                            max.y = point.y;
d33d2a
                    }
d33d2a
                }
d33d2a
            }
d33d2a
d33d2a
            if (found) {
d33d2a
                contourInt.scale = Math.Max(max.x - min.x, max.y - min.y)/detalization;
d33d2a
                foreach(List<vectorfloat> contour in contours) {</vectorfloat>
d33d2a
                    List<vectorint> newContour = new List<vectorint>();</vectorint></vectorint>
d33d2a
                    foreach(VectorFloat point in contour)
d33d2a
                        newContour.Add(new VectorInt((int)Math.Round(point.x*contourInt.scale), (int)Math.Round(point.y*contourInt.scale)));
d33d2a
                    contourInt.contours.Add(newContour);
d33d2a
                }
d33d2a
            }
d33d2a
d33d2a
            return contourInt;
d33d2a
        }
d33d2a
    }
d33d2a
}
d33d2a