public CutParameters GetAverageCutParamsFromLeafNodes(List <BaseItem> leafNodes)
    {
        var cutParams = new CutParameters();

        foreach (var leafNode in leafNodes)
        {
            var index = CPUBuffers.Get.NodeToIngredientLookup[leafNode.Id];
            if (index < 0)
            {
                throw new Exception("Node to protein lookup error");
            }

            foreach (var cutObject in CutObjectManager.Get.GetSelectedCutObjects())
            {
                var cutParam = cutObject.GetCutParametersFor(index);
                cutParams.IsFocus           |= cutParam.IsFocus;
                cutParams.value1            += cutParam.value1;
                cutParams.value2            += cutParam.value2;
                cutParams.fuzziness         += cutParam.fuzziness;
                cutParams.fuzzinessDistance += cutParam.fuzzinessDistance;
                cutParams.fuzzinessCurve    += cutParam.fuzzinessCurve;
                cutParams.Aperture          += cutParam.Aperture;
            }
        }

        var averageTotalCount = (float)(leafNodes.Count * CutObjectManager.Get.GetSelectedCutObjects().Count);

        cutParams.value1            /= averageTotalCount;
        cutParams.value2            /= averageTotalCount;
        cutParams.fuzziness         /= averageTotalCount;
        cutParams.fuzzinessDistance /= averageTotalCount;
        cutParams.fuzzinessCurve    /= averageTotalCount;
        cutParams.Aperture          /= averageTotalCount;
        return(cutParams);
    }
Beispiel #2
0
        public CutResults Optimize(CutParameters parameters)
        {
            var stockItems    = GetStockShapes(parameters.StockItems);
            var requiredItems = GetRequiredItems(parameters.RequiredItems);

            var results = new List <CuttingInstructions>();

            foreach (var item in requiredItems)
            {
                var stock        = stockItems[item.ShapeId];
                var instructions = item.OptimizeFromStock(stock);
                results.AddRange(instructions);
            }
            return(new CutResults
            {
                Groups = results.Select(r => new CutGroupResult
                {
                    Items = r.Items
                            .Select(i => new CutItemResult
                    {
                        Quantity = i.Quantity,
                        Length = i.Length
                    }).ToArray(),
                    Quantity = r.Quantity,
                    StockLength = r.StockLength,
                    ShapeId = r.ShapeId
                }).ToArray(),
                UncutItems = CalculateItemsNotCut(parameters.RequiredItems, results)
            });
        }
Beispiel #3
0
    public void SetCutParametersFor(int ingredientId, CutParameters cutParameters)
    {
        if (IngredientCutParameters.Count == 0 || IngredientCutParameters.Count <= ingredientId)
        {
            InitCutParameters();
        }

        IngredientCutParameters[ingredientId] = cutParameters;
    }
    public CutParameters GetAverageCutParamsFromLeafNodes(List<BaseItem> leafNodes)
    {
        var cutParams = new CutParameters();

        foreach (var leafNode in leafNodes)
        {
            var index = SceneManager.Get.NodeToIngredientLookup[leafNode.Id];
            if(index < 0) throw new Exception("Node to protein lookup error");

            foreach (var cutObject in SceneManager.Get.GetSelectedCutObjects())
            {
                var cutParam = cutObject.GetCutParametersFor(index);
                cutParams.IsFocus |= cutParam.IsFocus;
                cutParams.value1 += cutParam.value1;
                cutParams.value2 += cutParam.value2;
                cutParams.fuzziness += cutParam.fuzziness;
                cutParams.fuzzinessDistance += cutParam.fuzzinessDistance;
                cutParams.fuzzinessCurve += cutParam.fuzzinessCurve;
                cutParams.Aperture += cutParam.Aperture;
            }
        }

        var averageTotalCount = (float)(leafNodes.Count * SceneManager.Get.GetSelectedCutObjects().Count);
        cutParams.value1 /= averageTotalCount;
        cutParams.value2 /= averageTotalCount;
        cutParams.fuzziness /= averageTotalCount;
        cutParams.fuzzinessDistance /= averageTotalCount;
        cutParams.fuzzinessCurve /= averageTotalCount;
        cutParams.Aperture /= averageTotalCount;
        return cutParams;
    }
    public void SetCutParametersFor(int ingredientId, CutParameters cutParameters)
    {
        if (IngredientCutParameters.Count == 0 || IngredientCutParameters.Count <= ingredientId)
        {
            InitCutParameters();
        }

        IngredientCutParameters[ingredientId] = cutParameters;
    }