public void ResetAll(float circleRadius, ICirclePackingBorder border, float precision) { this.circleRadius = circleRadius; circleArea = new Circle2(Vector2.Zero, circleRadius).Area; this.border = border; this.precision = precision; maxNumCircles = (int)(border.Area / circleArea); backCircleCenters = new Vector2[maxNumCircles]; frontCircleCenters = new Vector2[maxNumCircles]; frontCirclesGrid = new CirclePackingCircleGrid(circleRadius, border.BoundingRect); frontCircleStatuses = new CircleStatus[maxNumCircles]; }
private IModel3D GetRelevantBorderModel() { if (lastBorder == border) { return(borderModel); } lastBorder = border; borderModel.Positions = lastBorder.Points.ConcatSingle(lastBorder.Points[0]).Select(x => new Vector3(x, 0)).ToArray(); borderModel.Indices = Enumerable.Range(0, lastBorder.Points.Count + 1).ToArray(); borderModel.IndexSubranges[0] = new ExplicitModelIndexSubrange(0, borderModel.Indices.Length); borderModel.RecalculateInfo(); borderModel.OnModified(null); return(borderModel); }
public void Reset() { border = BorderByName(ShapeName); solvingProcess = solver.Solve(new CirclePackingSolverSettings { CircleRadius = CircleRadius, Precision = Precision, Border = border, MaxIterationsPerAttempt = MaxIterationsPerAttempt, CostDecreaseGracePeriod = CostDecreaseGracePeriod, ShakeIterations = ShakeIterations, ShakeStrength = ShakeStrength, MinCostDecrease = MinCostDecrease }); }