Blob Blame Raw
using System;
using System.Collections.Generic;
using System.Linq;

namespace Contours {
    public struct VectorFloat {
        public float x, y;

        public VectorFloat(float x, float y) {
            this.x = x;
            this.y = y;
        }
    }

    public class ContourFloat {
        public readonly List<List<VectorFloat>> contours = new List<List<VectorFloat>>();

        public ContourInt toContourInt(float detalization = 10000f) {
            ContourInt contourInt = new ContourInt();

            bool found = false;
            VectorFloat min = new VectorFloat(0f, 0f);
            VectorFloat max = new VectorFloat(0f, 0f);
            foreach(List<VectorFloat> contour in contours) {
                foreach(VectorFloat point in contour) {
                    if (!found) {
                        min = max = point;
                        found = true;
                    } else {
                        if (min.x > point.x)
                            min.x = point.x;
                        if (min.y > point.y)
                            min.y = point.y;
                        if (max.x > point.x)
                            max.x = point.x;
                        if (max.y > point.y)
                            max.y = point.y;
                    }
                }
            }

            if (found) {
                contourInt.scale = Math.Max(max.x - min.x, max.y - min.y)/detalization;
                foreach(List<VectorFloat> contour in contours) {
                    List<VectorInt> newContour = new List<VectorInt>();
                    foreach(VectorFloat point in contour)
                        newContour.Add(new VectorInt((int)Math.Round(point.x*contourInt.scale), (int)Math.Round(point.y*contourInt.scale)));
                    contourInt.contours.Add(newContour);
                }
            }

            return contourInt;
        }
    }
}