Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ゴシック体の出力を修正 #7

Merged
merged 2 commits into from
Aug 16, 2023

Conversation

kurgm
Copy link
Contributor

@kurgm kurgm commented Feb 25, 2022

Fixes the corrupted output of the gothic style.
ゴシック体の出力で筆画が欠けるなどの不具合を修正しました。
(関連するIssue: #3, Radically/hanazonolite#13

グリフウィキではゴシック体は生成されないのであまり注目されていないようですが、現状のKAGEエンジンのゴシック体出力には

  1. 左ハネや折れの上ハネなどが消えることがある
  2. 乙線・複曲線が描かれない
  3. 反転・回転が機能しない

という問題があります。
このうち1.の理由は、 Kage.adjustHaneKage.adjustMage で尾形状の100の位と1000の位が変更されうるのを dfDrawFont のゴシック体処理部分が考慮していないためです。2.と3.は単純にゴシック体でまだ実装されていないためです。
これらの問題を修正するため、次のような変更を行いました。

具体的な変更内容

kage.js:

  • Kage.adjustXXX 系関数で設定されるパラメータは実質的に明朝体でしか機能しておらず、明朝体特有の調節事項(ウロコ)もあるため、ゴシック体ではこれら関数を呼ばないように変更しました。(1.の修正)
  • 同時に、 Kage.adjustXXX 系関数を呼ぶコードが Kage.makeGlyph2Kage.makeGlyph3 の2箇所にあったのを、1つの関数 Kage.adjustStrokes にまとめました。

kagedf.js:

  • ゴシック体でも反転・回転機能を実装しました。(3.の修正)
    • 明朝体にあった反転・回転のコードを関数 dfTransform に抽出し、ゴシック体で再利用するようにしました。
  • ゴシック体の乙線を実装しました。(2.の修正)
    • 上ハネの処理はゴシック体の「折れ」に倣いました。そのため、後半(2つ目の制御点→3つ目の制御点)が水平でないと筆画がプツプツに切れてしまう問題を継承しています。
  • ゴシック体の複曲線の左ハネを実装しました。(2.の修正)
  • ゴシック体でも、左ハネかどうか/上ハネかどうかの判定で頭・尾形状の100の位以上/1000の位以上を無視するようにしました(明朝体に合わせました)。(1.の修正)

kagecd.js:

  • ゴシック体の複曲線(3次ベジエ曲線)を実装しました。(2.の修正)
  • 同時に、ベジエ曲線(点の座標と向き)の計算をしているコードを curve.js (下記)にまとめました。

curve.js:

  • ベジエ曲線(点の座標と向き)の計算をしているコード6箇所(kagecd.js: 明朝体の2箇所 + ゴシック体の1箇所,curve.js: 3箇所)を1つの関数 calculateBezier に抽出して再利用するようにしました。
  • 同時に、明朝体で kUseCurve = true としたときに 上向きの筆画のポリゴンが壊れるのを修正 #4 の修正漏れがあったのを修正しました。

グリフウィキへの影響

修正されるのはゴシック体の出力(と明朝体で kUseCurve = true のときの出力)のみで、グリフウィキ上のグリフ画像への影響はありません。

サンプル

twe_sandbox@99(上段)と u221b4-jv(下段)のゴシック体での出力を比較した画像です。(左:変更前、右:変更後、中:左右を重ねたもの)twe_sandbox@99 は上記1.と2.の問題を、 u221b4-jv は3.の問題を修正したことを示しています。

fix-gothic

Fix the corrupted output of the Gothic style.

`kage.js`:
- adjust系関数で設定されるパラメータは実質的に明朝体でしか機能していないため、ゴシック体ではこれら関数を呼ばないように変更
- 同時に、adjust系関数を呼ぶ箇所を1つの関数にまとめる

`kagedf.js`:
- ゴシック体でも反転・回転機能を実装
- ゴシック体の乙線を実装
  + 上ハネの処理は「折れ」に倣った(そのため、後半が水平でないとプツプツに切れる問題を継承している)
- ゴシック体の複曲線の左ハネを実装
- ゴシック体でも頭・尾形状の100の位以上を無視する

`kagecd.js`:
- ゴシック体の複曲線(3次ベジエ曲線)を実装
- 同時に、ベジエ曲線(点の座標と向き)の計算3箇所を1つの関数に抽出して再利用する
@kurgm kurgm marked this pull request as draft February 26, 2022 04:25
`curve.js`にもベジエ曲線(点の座標と向き)の計算があったので、`kagecd.js`に置いた`calculateBezier`関数を
`curve.js`に移動して再利用する
@kurgm kurgm marked this pull request as ready for review February 26, 2022 05:20
@kamichikoichi kamichikoichi merged commit 97dd681 into kamichikoichi:master Aug 16, 2023
@kurgm kurgm deleted the fix-gothic branch September 8, 2023 00:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants