Example #1
0
 public ZoneControl(IStackingEnvironment world)
 {
     World        = world;
     RequestQueue = new LinkedList <ZoneRequest>();
     ReleaseQueue = new Queue <Release>();
     Users        = new HashSet <ZoneRequest>();
 }
Example #2
0
 public CraneScheduleStore(IStackingEnvironment environment, ICraneSchedule schedule)
 {
     Environment     = environment;
     Schedule        = schedule;
     GetQueue        = new LinkedList <CraneScheduleStoreGet>();
     WhenAnyQueue    = new List <Event>();
     WhenEmptyQueue  = new List <Event>();
     WhenChangeQueue = new List <Event>();
 }
        public static IStackingEnvironment CheckConstraints(this IStackingEnvironment environment)
        {
            if (environment.Filters.Count > 1 && environment.OutputMode.GetType() == typeof(FfmpegVideoWriter))
            {
                environment.Logger?.WriteLine("Multiple filters and therefore video outputs are currently not supported.", Verbosity.Error, true);
                environment.ThrowMe = true;
                return(environment);
            }

            return(environment);
        }
Example #4
0
 public LocationResource(IStackingEnvironment world, ILocation location)
 {
     Location        = location;
     World           = world;
     DropoffQueue    = new LinkedList <StackingEvent>();
     PickupQueue     = new LinkedList <StackingEvent>();
     WhenNewQueue    = new List <Event>();
     WhenAnyQueue    = new List <Event>();
     WhenFullQueue   = new List <Event>();
     WhenEmptyQueue  = new List <Event>();
     WhenChangeQueue = new List <Event>();
 }
        public static IStackingEnvironment ConfigureFilters(this IStackingEnvironment environment, IEnumerable <string> optionArgs)
        {
            environment.Filters = new List <IFilter <MutableByteImage> >();

            if (optionArgs == null || !optionArgs.Any())
            {
                environment.ThrowMe = true;
                return(environment);
            }

            var filteredOptionArgs = string.Join(' ', optionArgs)
                                     .Replace("--filters=", "")
                                     .Replace("--filters", "")
                                     .Split(" ", StringSplitOptions.RemoveEmptyEntries)
                                     .SelectMany(x => x.Split(',')).ToArray();

            var parameterGroups = new List <List <string> >();
            var previousList    = new List <string> {
                filteredOptionArgs.First()
            };

            foreach (var item in filteredOptionArgs.Skip(1))
            {
                if (item.Contains("="))
                {
                    previousList.Add("--" + item.Trim(','));
                    continue;
                }
                parameterGroups.Add(previousList);
                previousList = new List <string> {
                    item.Trim(',')
                };
            }

            parameterGroups.Add(previousList);

            var factory = new MutableByteImageFilterFactory(true);

            foreach (var group in parameterGroups)
            {
                var result = Parser.Default
                             .ParseArguments <MaxFilterOptions,
                                              MinFilterOptions,
                                              AttackDecayFilterOptions>(group)
                             .WithParsed <MaxFilterOptions>(options => environment.Filters.Add(factory.CreateMaxFilter(options)))
                             .WithParsed <MinFilterOptions>(options => environment.Filters.Add(factory.CreateMinFilter(options)))
                             .WithParsed <AttackDecayFilterOptions>(options => environment.Filters.Add(factory.CreateAttackDecayFilter(options)))
                             .WithNotParsed(e => Console.Write(e.ToString()));
            }

            return(environment);
        }
        public static IStackingEnvironment ConfigureCommonEnvironment(this IStackingEnvironment env, CommonOptions info)
        {
            env.Logger  = CreateLogger(info);
            env.Factory = new MutableByteImageFactory(env.Logger);

            env.ConfigureFilters(info.Filters);

            env.Logger?.WriteLine(info.ToString().Replace(",", Environment.NewLine), Verbosity.Info);

            env.ConfigureInputMode(info);

            env.ConfigureOuptutMode(info);

            return(env);
        }
Example #7
0
        public CraneAgent(IStackingEnvironment world, ICrane crane, IDistribution <double> girderSpeed, IDistribution <double> hoistSpeed, IDistribution <double> manipulationTime)
        {
            _world           = world;
            _crane           = crane;
            GirderSpeed      = girderSpeed;
            HoistSpeed       = hoistSpeed;
            ManipulationTime = manipulationTime;

            _pendingMode          = Mode = CraneAgentMode.Work;
            State                 = CraneAgentState.Waiting;
            GoalPosition1         = GoalPosition2 = _crane.GirderPosition;
            _targetGirderPosition = _crane.GirderPosition;

            _lastUpdate  = world.Now;
            _mainProcess = world.Environment.Process(Main());

            WhenPickupOrDropoffQueue = new List <Event>();
        }
        public static IStackingEnvironment ConfigureOuptutMode(this IStackingEnvironment env, CommonOptions commonOptions)
        {
            if (commonOptions.UseOutputPipe)
            {
                env.OutputMode = new ImageStreamWriter <MutableByteImage>(env.Logger, env.Factory, Console.OpenStandardOutput());
                return(env);
            }

            if (!string.IsNullOrWhiteSpace(commonOptions.OutputVideoFile))
            {
                if (!string.IsNullOrWhiteSpace(commonOptions.OutputFolder))
                {
                    env.Logger?.WriteLine("OutputFolder Option set, but is being ignored when using Video as output", Verbosity.Warning, true);
                }

                env.OutputMode = new FfmpegVideoWriter(
                    new FfmpegVideoWriterArguments
                {
                    OutputFile   = commonOptions.OutputVideoFile,
                    CustomArgs   = commonOptions.OutputVideoOptions,
                    PathToFfmpeg = commonOptions.FfmpegLocation
                },
                    env.Logger);
                return(env);
            }

            if (!string.IsNullOrWhiteSpace(commonOptions.OutputFolder))
            {
                env.OutputMode = new ImageFileWriter <MutableByteImage>(commonOptions.OutputFilePrefix, commonOptions.OutputFolder, env.Factory);
                return(env);
            }

            env.Logger?.WriteLine("No Output Mode defined", Verbosity.Error);
            env.Logger?.WriteLine("Consider specifying --UseOutputPipe or --OutputFolder", Verbosity.Error);
            env.Logger?.WriteLine("", Verbosity.Error);
            env.ThrowMe = true;
            return(env);
        }
Example #9
0
 public BasicCraneScheduler(IStackingEnvironment world)
 {
     _world       = world;
     _mainProcess = world.Environment.Process(Main());
 }
        public static IStackingEnvironment ConfigureInputMode(this IStackingEnvironment env, CommonOptions commonOptions)
        {
            if (!string.IsNullOrWhiteSpace(commonOptions.InputVideoFile))
            {
                env.Logger?.WriteLine("Using Video Input - you might occur some bugs.", Verbosity.Warning);

                env.InputMode = new FfmpegVideoReader(new FfmpegVideoReaderArguments
                {
                    InputFile    = commonOptions.InputVideoFile,
                    PathToFfmpeg = commonOptions.FfmpegLocation,
                    CustomArgs   = commonOptions.InputVideoArguments
                }, env.Factory, env.Logger);
                return(env);
            }
            if (commonOptions.UseInputPipe)
            {
                env.Logger?.WriteLine("Currently only BGR24 input supported", Verbosity.Warning);
                var inputSize = commonOptions.InputSize;
                if (string.IsNullOrWhiteSpace(inputSize))
                {
                    env.ThrowMe = true;
                    env.Logger?.WriteLine($"InputSize is not defined but necessary for using inputpipes", Verbosity.Error);
                }
                var wh = Regex.Split(inputSize ?? string.Empty, "[^0-9]");

                if (int.TryParse(wh[0], out int width) && int.TryParse(wh[1], out int height))
                {
                    env.InputMode = new ImageStreamReader <MutableByteImage>(
                        env.Logger,
                        env.Factory,
                        Console.OpenStandardOutput(width * height * 3),
                        width,
                        height,
                        PixelFormat.Format24bppRgb);
                }
                else
                {
                    env.Logger?.WriteLine($"InputSize is not parseable {commonOptions.InputSize}", Verbosity.Error);
                    env.ThrowMe = true;
                }


                return(env);
            }
            if (commonOptions.InputFiles != null && commonOptions.InputFiles.Any())
            {
                env.InputMode = new ImageMutliFileOrderedReader <MutableByteImage>(
                    env.Logger,
                    env.Factory,
                    new ReaderOptions {
                    Files = commonOptions.InputFiles.ToArray()
                });

                return(env);
            }
            if (!string.IsNullOrWhiteSpace(commonOptions.InputFolder))
            {
                env.Logger?.WriteLine("Currently only *.jpg input supported", Verbosity.Warning);
                if (!Directory.Exists(commonOptions.InputFolder))
                {
                    env.Logger?.WriteLine($"InputFolder does not exist {commonOptions.InputFolder}", Verbosity.Error);
                    env.ThrowMe = true;
                }
                else
                {
                    env.InputMode = new ImageMutliFileOrderedReader <MutableByteImage>(
                        env.Logger,
                        env.Factory,
                        new ReaderOptions
                    {
                        FolderName = commonOptions.InputFolder,
                        Filter     = commonOptions.InputFilter
                    });
                }
                return(env);
            }

            env.Logger?.WriteLine("No Input Mode defined", Verbosity.Error);
            env.ThrowMe = true;
            return(env);
        }