Ejemplo n.º 1
0
        private Trace Assembly(Matrix matrix)
        {
            var tasks = new FigureDecomposer(matrix).Decompose();

            var ai = new GreedyWithFigureDecomposeAI(tasks, new IsGroundedChecker(matrix), matrix);

            Console.WriteLine("test greedy");

            //
            opLogWriter.WriteLogName("myTest");
            var state = State.CreateInitial(matrix.R, opLogWriter);

            opLogWriter.WriteInitialState(state);

            var simulator = new Simulator();

            while (true)
            {
                var commands = ai.NextStep(state).ToList();
                var trace    = new Trace(commands);

                simulator.NextStep(state, trace);

                if (commands.Count == 1 && commands[0] is HaltCommand)
                {
                    break;
                }
            }

            opLogWriter.Save();

            return(simulator.CreateResultTraceAsTrace());
        }
Ejemplo n.º 2
0
        public static void Main(string[] args)
        {
            var srcModelPath = @"..\..\..\data\problemsF\FR002_src.mdl";
            var tgtModelPath = @"..\..\..\data\problemsF\FR002_tgt.mdl";

            var sourceMatrix = MatrixDeserializer.Deserialize(File.ReadAllBytes(srcModelPath));
            var targetMatrix = MatrixDeserializer.Deserialize(File.ReadAllBytes(tgtModelPath));
//            sourceMatrix = new Matrix(targetMatrix.R);

            var mongoOplogWriter = new JsonOpLogWriter(new MongoJsonWriter());

            mongoOplogWriter.WriteLogName("FigureDecomposer");
            var state = State.CreateInitial(sourceMatrix.R, mongoOplogWriter);

            mongoOplogWriter.WriteInitialState(state);

            var tasks      = new FigureDecomposer(targetMatrix, sourceMatrix).Decompose();
            var fillPoints = new List <Vector>();
            var voidPoints = new List <Vector>();
            var rand       = new Random();

            foreach (var task in tasks)
            {
                if (task.Type == BuildingTaskType.GFill || task.Type == BuildingTaskType.GVoid)
                {
                    var points = new List <Vector>();
                    for (var x = task.Region.Min.X; x <= task.Region.Max.X; x++)
                    {
                        for (var y = task.Region.Min.Y; y <= task.Region.Max.Y; y++)
                        {
                            for (var z = task.Region.Min.Z; z <= task.Region.Max.Z; z++)
                            {
                                points.Add(new Vector(x, y, z));
                            }
                        }
                    }

                    var fill = task.Type == BuildingTaskType.GFill;
                    mongoOplogWriter.WriteGroupColor(points.ToArray(),
                                                     fill ? $"00FF{rand.Next(10, 99)}" : $"FF00{rand.Next(10, 99)}", fill ? 0.8 : 0.5);
                }
                else if (task.Type == BuildingTaskType.Fill || task.Type == BuildingTaskType.Void)
                {
                    if (task.Type == BuildingTaskType.Fill)
                    {
                        fillPoints.Add(task.Region.Min);
                    }
                    else
                    {
                        voidPoints.Add(task.Region.Min);
                    }
                }
            }
            mongoOplogWriter.WriteGroupColor(fillPoints.ToArray(), "0000FF", 0.8);
            mongoOplogWriter.WriteGroupColor(voidPoints.ToArray(), "FFFF00", 0.5);

            mongoOplogWriter.Save();

            Console.WriteLine("Saved to MongoDB");
            Console.ReadLine();
        }