示例#1
0
        public IWord SetQuestionByUser(long userId, ELearnMode mode)
        {
            var path     = $"/word/user/{userId}/nextWord/{mode}";
            var response = ApiClient.CallApi(path, Method.PUT);

            ApiClient.CheckResponse(response);
            return(ApiClient.Deserialize <Word>(response));
        }
 public LearnUnit LearnWord(long userId, ELearnMode learnMode)
 {
     return
         (_wordRepository.GetNextWord(new WordSettings
     {
         LearnMode = learnMode,
         UserId = userId,
         PollAnswersCount = PollAnswersCount
     }));
 }
示例#3
0
        LearnUnit GetLearnUnit(EGettingWordsStrategy strategy, ELearnMode mode)
        {
            var user = _userApi.GetUserById(UserIdLong);

            user.Mode = strategy.ToString();
            _userApi.UpdateUser(UserIdLong, user);

            var learnUnit = _restWordRepository.GetNextWord(new WordSettings
            {
                LearnMode = mode, PollAnswersCount = AnswersCount, UserId = UserIdLong
            });

            return(learnUnit);
        }
        public GenerateImageResult Generate(IWord word, ELearnMode learnMode)
        {
            var result    = new GenerateImageResult();
            var syllables = _wordParseProvider.GetOrderedSyllables(word);

            var originalChars = CutToMaxLength(word.OriginalWord, HanMaxCharsCount);

            var originalLength = 0;
            var pinyinLength   = 0;

            syllables = syllables.TakeWhile(a =>
            {
                originalLength++;
                pinyinLength += a.Pinyin.Length;

                return(pinyinLength < MainMaxCharsCount && originalLength <= originalChars.Length);
            }).ToArray();

            var y        = 0f;
            var maxWidth = 0f;

            using (var img = new Image <Rgba32>(MaxWidth, MaxHeight))
            {
                var builder  = new GlyphBuilder();
                var renderer = new TextRenderer(builder);

                img.Mutate(a => a.Fill(BackgroundColor));

                if (learnMode == ELearnMode.FullView || learnMode != ELearnMode.OriginalWord)
                {
                    var text          = CutToMaxRow(originalChars, HanMaxLineCharsCount, true);
                    var renderOptions = GetRenderOptions(KaitiHanFont, y);
                    var size          = TextMeasurer.Measure(text, renderOptions);
                    y += size.Height + LineSpace;

                    if (size.Width > maxWidth)
                    {
                        maxWidth = size.Width;
                    }

                    var paths = RenderText(builder, renderer, renderOptions, text);

                    for (var i = 0; i < Math.Min(syllables.Length, paths.Length); i++)
                    {
                        var iLocal   = i;
                        var syllable = syllables[iLocal];
                        img.Mutate(a => a.Fill(syllable.Color.ToRgba32(), paths[iLocal]));
                    }
                }

                if (learnMode == ELearnMode.FullView || learnMode != ELearnMode.Pronunciation)
                {
                    var text          = string.Join(" ", syllables.Select(a => a.Pinyin));
                    var renderOptions = GetRenderOptions(ArialUnicodeMainFont, y);
                    var size          = TextMeasurer.Measure(text, renderOptions);
                    y += size.Height + LineSpace;

                    if (size.Width > maxWidth)
                    {
                        maxWidth = size.Width;
                    }

                    var paths = RenderText(builder, renderer, renderOptions, text);

                    var currentPathPosition = 0;
                    foreach (var syllable in syllables)
                    {
                        if (currentPathPosition >= paths.Length)
                        {
                            break;
                        }

                        var pathCollection = new PathCollection(paths.Skip(currentPathPosition).Take(syllable.Pinyin.Length));

                        img.Mutate(a => a.Fill(syllable.Color.ToRgba32(), pathCollection));
                        currentPathPosition += syllable.Pinyin.Length;
                    }
                }

                if (learnMode == ELearnMode.FullView || learnMode != ELearnMode.Translation)
                {
                    var renderOptions = GetRenderOptions(ArialUnicodeMainFont, y);
                    var transChars    = CutToMaxRow(CutToMaxLength(word.Translation, MainMaxCharsCount, string.Empty),
                                                    MainMaxLineCharsCount);
                    var size = TextMeasurer.Measure(transChars, renderOptions);
                    y += size.Height + LineSpace;

                    if (size.Width > maxWidth)
                    {
                        maxWidth = size.Width;
                    }

                    var paths = RenderText(builder, renderer, renderOptions, transChars);
                    img.Mutate(a => a.Fill(MainColor, new PathCollection(paths)));
                }

                var finalWidth = (int)(maxWidth + 2 * Padding);
                img.Mutate(a => a.Crop(new Rectangle((MaxWidth - finalWidth) / 2, 0, finalWidth, (int)y)));

                result.Width  = img.Width;
                result.Height = img.Height;
                using (var ms = new MemoryStream())
                {
                    img.Save(ms, new PngEncoder());
                    result.ImageBody = ms.ToArray();
                }
            }

            return(result);
        }