예제 #1
0
파일: TagCreator.cs 프로젝트: GangBoss/di
        public Result <Bitmap> DrawTag(ReaderSettings readerSettings, DrawerSettings drawerSettings,
                                       LayouterSettings layouterSettings)
        {
            var words = wordsProvider.GetObjectSource(readerSettings);

            if (!words.IsSuccess)
            {
                return(Result.Fail <Bitmap>(words.Error));
            }

            var frequency     = frequencyProvider.GetFrequencyDictionary(words.Value);
            var orderedSource = frequency.OrderByDescending(kv => kv.Value)
                                .Take(readerSettings.MaxObjectsCount).ToList();
            var sizableSource      = sizableProvider.GetSizableSource(orderedSource, drawerSettings);
            var drawableWordSource = drawableProvider.GetDrawableSource(sizableSource, layouterSettings);

            if (!drawableWordSource.IsSuccess)
            {
                return(Result.Fail <Bitmap>(drawableWordSource.Error));
            }

            var cloudInfo = new CloudInfo(drawableWordSource.Value);
            var bitmap    = drawer.GetBitmap(cloudInfo, drawerSettings);

            return(bitmap);
        }
예제 #2
0
        public void Setup()
        {
            var factory = new SpiralFactory();

            center        = new Point(0, 0);
            settings      = new LayouterSettings(center, 1, SpiralType.Ferma);
            cloudLayouter = new DrawableCloudLayouter(factory);
        }
예제 #3
0
 public ApplicationSettings(ImageExt imageExt, ReaderSettings readerSettings,
                            LayouterSettings layouterSettings,
                            DrawerSettings drawerSettings, string savePath)
 {
     ImageExt         = imageExt;
     ReaderSettings   = readerSettings;
     LayouterSettings = layouterSettings;
     DrawerSettings   = drawerSettings;
     SavePath         = savePath;
 }
예제 #4
0
        public ISpiral Create(LayouterSettings layouterSettings)
        {
            switch (layouterSettings.SpiralType)
            {
            case SpiralType.Ferma:
                return(new FermaSpiral(layouterSettings.Center, layouterSettings.SpiralCoefficient));

            case SpiralType.InLine:
                return(new InLineSpiral(layouterSettings.Center, layouterSettings.SpiralCoefficient));

            default:
                return(new RectangleSpiral(layouterSettings.Center, layouterSettings.SpiralCoefficient));
            }
        }
예제 #5
0
        public Result <List <DrawableWord> > GetDrawableSource(List <SizableWord> sizableSource,
                                                               LayouterSettings settings)
        {
            var drawableSource = new List <DrawableWord>();

            Rectangles    = new List <Rectangle>();
            center        = settings.Center;
            spiralPointer = factory.Create(settings);

            foreach (var sizable in sizableSource)
            {
                var nextRect = PutNextRectangle(sizable.DrawSize);
                if (!nextRect.IsSuccess)
                {
                    return(Result.Fail <List <DrawableWord> >(nextRect.Error));
                }
                drawableSource.Add(new DrawableWord(sizable.Value, nextRect.Value));
            }

            return(drawableSource.AsResult());
        }