Foros: ドキュメント作成 (Thread #36047)

psFileImageSpaceRestoreとpsFileImageSpaceRotateRestoreの違い (2014-10-08 17:27 by kinoshita-eos #74556)

前提として確認して頂きたいことがありますので、実質2つの質問事項となります。


【質問1】前提の質問です。
あるPostScriptファイル開いたところの"gsave"と"grestore"がそれぞれ連続で書かれていましたが、この2つはスコープ(括弧)のような働きができるのでしょうか。

例えば、

gsave
1.000000 1.000000 scale
0.000000 0.000000 translate
処理1
gsave
2.000000 2.000000 scale
3.000000 3.000000 translate
処理2
grestore
処理3
grestore

上記のような構文があった場合
処理1, 3は1.000000 1.000000 scale, 0.000000 0.000000 translate、
処理2は2.000000 2.000000 scale, 3.000000 3.000000 translate
の設定で処理が行われるのでしょうか。

-経緯-
これまでgsaveは現在の設定を保存、grestoreは保存したデータに戻るとだけ思って、複数の設定を記憶できると思っていませんでしたので、上記の疑問が出てきました。


【質問2】gsave, grestoreの動作が質問1の推測通りだった場合の質問です。
/src/Objects/DataExpress/psFile/src/psFileImage.cにて

psFileImageSpaceRotateRestoreとpsFileImageSpaceRestoreは同じ処理で、
grestoreをpsファイルに記述するだけですが、
これはpsFileImageSpaceRotateSetやpsFileImageSpaceSetのうちどちらの処理の終わりを意味するのかをはっきりさせるためにあえて別々にしているのでしょうか。

その場合は、
SetとRestoreは常に対に使用するということですよね。(こちらの注意事項をドキュメントに記載しようと思います)

Re: psFileImageSpaceRestoreとpsFileImageSpaceRotateRestoreの違い (2014-10-08 20:59 by tacyas #74558)

[メッセージ #74556 への返信]
> 前提として確認して頂きたいことがありますので、実質2つの質問事項となります。
>
>
> 【質問1】前提の質問です。
> あるPostScriptファイル開いたところの"gsave"と"grestore"がそれぞれ連続で書かれていましたが、この2つはスコープ(括弧)のような働きができるのでしょうか。
>
> 例えば、
>
> gsave
> 1.000000 1.000000 scale
> 0.000000 0.000000 translate
> 処理1
> gsave
> 2.000000 2.000000 scale
> 3.000000 3.000000 translate
> 処理2
> grestore
> 処理3
> grestore
>
> 上記のような構文があった場合
> 処理1, 3は1.000000 1.000000 scale, 0.000000 0.000000 translate、
> 処理2は2.000000 2.000000 scale, 3.000000 3.000000 translate
> の設定で処理が行われるのでしょうか。
>
> -経緯-
> これまでgsaveは現在の設定を保存、grestoreは保存したデータに戻るとだけ思って、複数の設定を記憶できると思っていませんでしたので、上記の疑問が出てきました。
>

 gsave/grestoreは、グラフィックスのためのスタックを利用する方法です。
したがって、gsaveがpush, grestoreがpopと思って頂ければと思います。
スタックですので、LIFO(Last In FIrst Out)です。grestoreで、最後のgsaveの
前の状態が戻ってきます。
>


> 【質問2】gsave, grestoreの動作が質問1の推測通りだった場合の質問です。
> /src/Objects/DataExpress/psFile/src/psFileImage.cにて
>
> psFileImageSpaceRotateRestoreとpsFileImageSpaceRestoreは同じ処理で、
> grestoreをpsファイルに記述するだけですが、
> これはpsFileImageSpaceRotateSetやpsFileImageSpaceSetのうちどちらの処理の終わりを意味するのかをはっきりさせるためにあえて別々にしているのでしょうか。
>
> その場合は、
> SetとRestoreは常に対に使用するということですよね。(こちらの注意事項をドキュメントに記載しようと思います)

はい。どちらの場合も、grestoreで戻すことが出来ます。
Setと組になっていると思っていただければよく、想像の通りです。

中身がどうなっているか知らなくても、Set/Restoreの組み合わせで済ませてもらいたく、将来、grestore以外の命令がはいる可能性もあるとお考え頂ければと思います。
Responder al #74556