Пример #1
0
        static void rotate(string inputPath, string outputPath)
        {
            // var test= MFDocument.test(inputPath);
            Console.WriteLine("Working with file " + Path.GetFileName(inputPath));
            var       fileHandler = new FileHandler();
            Stopwatch Total       = new Stopwatch();

            Total.Start();
            var facets = fileHandler.LoadFile(inputPath);

            // var facets = MFDocument.test(inputPath).FirstOrDefault();
            fileHandler.ActionOccured += actionOccured;
            CustomFacet[] preproccessed;
            using (var opti = new Opti()) {
                opti.ActionOccured += actionOccured;
                preproccessed       = opti.PreProcess(facets);
            }

            List <Counter> accumulated;

            using (var opti = new Opti()) {
                opti.ActionOccured += actionOccured;
                accumulated         = opti.AreaZinate(preproccessed);
            }

            Result result;
            IEnumerable <Result> results;
            DetailedResult       detailedResult;

            using (var opti = new Opti()) {
                opti.ActionOccured += actionOccured;
                // results = accumulated.Select (x => opti.CalculateOverhang (opti.ProjectVertices (preproccessed, x.Array), x.Array)).OrderBy (x => ((x.Unprintablitiy + 1) * (x.Overhang + 1)) / ((x.Bottom + 1) * (x.Contour + 1))).ToList();
                results = accumulated.Select(x => opti.CalculateOverhang(opti.ProjectVertices(preproccessed, x.Array), x.Array)).OrderBy(x => x.Unprintablitiy).ToList();
                result  = results.FirstOrDefault();
            }

            using (var opti = new Opti()) {
                opti.ActionOccured += actionOccured;
                detailedResult      = opti.GetEulerParams(result);
            }
            detailedResult.Serialize(outputPath);  //Create log xml file
            Console.WriteLine("-----------------------------------------------------");
            Console.WriteLine(detailedResult);

            IxMilia.Stl.StlTriangle[] rotated;
            using (var opti = new Opti()) {
                opti.ActionOccured += actionOccured;
                rotated             = opti.RotateMesh(facets, detailedResult.RotationMatrix).ToArray();
            }
            fileHandler = new FileHandler();
            fileHandler.WriteFIle(rotated, outputPath);
            fileHandler.ActionOccured += actionOccured;
            Console.WriteLine($"Mesh rotated and writen successfully  in {Total.Elapsed.TotalSeconds} Seconds");
            GC.Collect();
            Total.Stop();
        }
Пример #2
0
        static void comparefunction(string inputPath)
        {
            Console.WriteLine("Analysing the actual Position of the Object " + Path.GetFileName(inputPath));
            var       fileHandler1 = new FileHandler();
            Stopwatch Total        = new Stopwatch();

            Total.Start();
            var facets1 = fileHandler1.LoadFile(inputPath);

            fileHandler1.ActionOccured += actionOccured;
            CustomFacet[] preproccessed1;
            using (var opti1 = new Opti()) {
                opti1.ActionOccured += actionOccured;
                preproccessed1       = opti1.PreProcess(facets1);
                Result   results1;
                double[] orient = { 0, 0, 1 };
                results1 = opti1.CalculateOverhang(preproccessed1, orient);
                Console.WriteLine("Analysis Complete");
                ////////
                Console.WriteLine("Looking for the Perfect Position of the file " + Path.GetFileName(inputPath));
                var fileHandler = new FileHandler();

                var facets = fileHandler.LoadFile(inputPath);

                CustomFacet[] preproccessed;
                using (var opti = new Opti()) {
                    opti.ActionOccured += actionOccured;
                    preproccessed       = opti.PreProcess(facets);
                }

                List <Counter> accumulated;
                using (var opti = new Opti()) {
                    opti.ActionOccured += actionOccured;
                    accumulated         = opti.AreaZinate(preproccessed);
                }

                Result result;
                IEnumerable <Result> results;
                DetailedResult       detailedResult;
                using (var opti = new Opti()) {
                    opti.ActionOccured += actionOccured;
                    // results = accumulated.Select (x => opti.CalculateOverhang (opti.ProjectVertices (preproccessed, x.Array), x.Array)).OrderBy (x => ((x.Unprintablitiy + 1) * (x.Overhang + 1)) / ((x.Bottom + 1) * (x.Contour + 1))).ToList();
                    results = accumulated.Select(x => opti.CalculateOverhang(opti.ProjectVertices(preproccessed, x.Array), x.Array)).OrderBy(x => x.Unprintablitiy).ToList();
                    result  = results.FirstOrDefault();
                }

                using (var opti = new Opti()) {
                    opti.ActionOccured += actionOccured;
                    detailedResult      = opti.GetEulerParams(result);
                }
                Console.WriteLine("Use the following parameters to optimize the Print");
                Console.WriteLine(detailedResult);
                Console.WriteLine($"Perfect position found in {Total.Elapsed.TotalSeconds} Seconds");
                Console.WriteLine(results1.Unprintablitiy);
                Console.WriteLine(result.Unprintablitiy);
                var Compared = (result.Unprintablitiy / results1.Unprintablitiy) * 100;
                Console.WriteLine("The object Orientation is positioned {0} % to the perfect position ", Compared);
                GC.Collect();
                Total.Stop();
            }
        }