こちらの続きです。
CATIAで2次ベジエ曲線を描きたい2 - C#ATIA
前回の結果がイマイチ過ぎて、無かった事にさえしてしまいたい
ぐらい、モチベーションを失いましたが、最近になりちょっと
わかってきました。
前回の"くたびれた八角形"は、こんな解釈をしていました。
(外周のみで考え ◎の点が始点 ■の点が終点 ×の点は制御点)
始点-2点目-3点目を利用し、パラメータ0.5の2次ベジェ曲線の
通過点を作成する。 こんな感じで通過点は米印の水色の点。
次に 2点目-3点目-4点目で同様の処理をする。
で、こんな感じ
これを1周分処理する。こんな感じ。
ここから、始点は通過させその後は、求めた通過点を通り
閉じたスプラインを作成すると、"くたびれた八角形" の
出来上がりです。
でも、この解釈は大間違いです。
解釈の間違いは2つありました。
まず、通過点の求め方でした。1ヶ所目は始点-2点目-3点目で
通過点求めるのは良いのですが、2ヶ所目は3点目-4点目-5点目
で通過点を求めなければいけなかったようです。
(赤-1点目 オレンジ-2点目)
つまり2点目以降は、"前の最後の点が最初の点になる" って
ことのようです。(=その点は通過点になる)
そこで、その解釈で再度スプラインを作ろうと思った時に、
もう一つの間違いに気が付きました。
水色は大まかに描いた円です。先程の解釈を元に考えると
2次ベジェ曲線であれば、始点から3点2点毎に通過点が存在
することになるのですが、明らかに4点3点毎に通過点が
存在しています。 ・・・と言うことは3次ベジェ曲線?
こちらに記載しましたが、
CATIAで2次ベジエ曲線を描きたい1 - C#ATIA
フォント "MS Gothic" は、TrueTypeフォントで、間違いなく
2次ベジェ曲線です。 でも何故?
ソースコードが公開できるレベルでは無かった為、前回記載しません
でしたが、こんな感じです。
//cs string str = "○"; System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath(); gp.AddString(str, new FontFamily("MS Gothic"), (int)FontStyle.Regular, 150.0F, new Point(3, 3), StringFormat.GenericDefault);
GraphicsPathクラスのAddString関数に文字を突っ込んでいるのですが、
疑わしいのは、ここではないかと。
色々とWeb上で探したのですが、AddString関数を利用したものは
Form等に表示する為、DrawPathにGraphicsPathを放り込んでいる
ものばかりで、AddString関数を利用すると中身がどんな風に
なっているか説明されているサイトが見つかりませんでした。
(確かに、DrawPathが勝手に処理するので考える必要ないです)
確信が持てぬまま、どうしようかと困惑していたらMSDNの
GraphicsPath.PathTypesプロパティの Value "3" の所に
サラッと書いてありましたよ、3次元ベジェスプラインって。
GraphicsPath.PathTypes プロパティ (System.Drawing.Drawing2D)
ここ何度も見たのに気が付かなかった・・・。AddStringメソッド
の所には何も記載されていないし。
推測ですが、AddString関数で文字を取り込むと
TrueTypeフォント等でも、3次ベジェ曲線として
GraphicsPathが作成されるのでは
なかろうか?と。
(その方が、フォントのタイプで処理を変えなくても良いので好都合)
2つの解釈を改めスプラインを作成してみると、こんな感じ。
(赤い点は求めた通過点)
かなり円になりました。
大まかな円と重ねると、こんな感じ。
パラメータ0.5のみなので、この程度であれば十分でしょう。(多分)
モチベーション回復。ファイル間リンクが出来たら再び取り組もう。