スレッド表示 | 新しいものから 投稿するには登録が必要です | 前のスレッド | 次のスレッド | 下へ |
投稿者 | スレッド |
---|---|
投稿数: 82
|
投稿日時: 2005-09-19 14:06 ポイントではなく形状丸ごとのUNDOの |
ポイントではなく形状丸ごとのUNDOは無いのでしょうか?
ポリゴンに追加して間違えたら、UNDOで追加前に戻したいのです。 ポイントは save_control_pointsで出来たのですが、 見つからないです..... それとも全ポイントを記憶させるのでしょうか? creator_interfaceでプラグインを作っています。 よろしくお願いいたします。 | |
投稿数: 34
|
投稿日時: 2005-09-20 11:17 Re: ポイントではなく形状丸ごとのUNDOの |
Shade開発課の高橋です。
形状に対する操作をUndoする場合は、 shape_saver_interfaceを使用します。 以下にサンプルコードを示します。
Undoをサポートする場合は、対象のplugin_interface派生クラスのundoable関数をオーバーライドしてtrueを返している必要があります。 Undo処理の登録は、 Undoの対象となる処理の直前に、 shape_class::create_shape_saver_interface関数で、形状の情報を保持するshape_saver_interfaceを作成 Undoの対象となる処理の後に、 shape_saver_interface::set_undo_action関数を呼ぶ といった形で行います。 複数の形状を対象とする場合は各形状ごとにshape_saver_interfaceを作成してset_undo_actionで登録します。 これで、shape_saver_interfaceを作成してからset_undo_actionまでに形状に対して行った処理をUndoすることができるようになります。 | |
投稿数: 82
|
投稿日時: 2005-09-20 16:26 Re: ポイントではなく形状丸ごとのUNDOの |
有り難うございます。
自分のでは出来なかったため、 教えて頂いたように丸ごと新規の所に張ってみたのですが、 同じように実行後 線が動いた後に、 取り消しが効かなくなり、 なぜか Undo出来ないどころか以前のUndoまで消えてしまいました..orz もちろん virtual bool undoable (void * = 0) const { return true; } //Undoをサポートする場合はtrueを返す。/ も入れました。 取り消しが効かなくなる(前のUndoまで消える)のに何かお心当たりはないでしょうか? マルチプラグインではだめって事ないですよね...orz すいません よろしくお願いいたします。 struct creator_2_component : creator_interface { virtual int get_shade_version () const { return SHADE_VERSION; } virtual int get_id (void * = 0) { return 0x1ff00000; } virtual bool undoable (void * = 0) const { return true; } //Undoをサポートする場合はtrueを返す。/ virtual bool create (scene_interface *scene, void * = 0) { shape_class &shape = scene->active_shape(); //shape_saver_interfaceを作成。形状の幾何属性を保持。/ compointer<shape_saver_interface> ps(shape.create_shape_saver_interface()); if (ps) { shape.set_point(0, vec3(0,0,0)); ps->set_undo_action(); //Undoアクションを登録する。/ } return true; } }; | |
投稿数: 82
|
投稿日時: 2005-09-20 16:30 Re: ポイントではなく形状丸ごとのUNDOの |
追記
8と7.5両方で試してみました。 お手数おかけいたします...orz | |
投稿数: 82
|
投稿日時: 2005-09-20 20:45 Re: ポイントではなく形状丸ごとのUNDOの |
またすいません。
私のの環境では下記の様にmodifier_interfaceとps->set_undo(); にしたら modifier_interfaceは動きましたが、 creator_interfaceでは動きません...orz struct modifier_0_component : modifier_interface { virtual int get_shade_version () const { return SHADE_VERSION; } virtual int get_id (void * = 0) { return 0x1ff00000; } virtual bool undoable (void * = 0) const { return true; } virtual bool modify (scene_interface *scene, void * = 0) { shape_class &shape = scene->active_shape(); //shape_saver_interfaceを作成。形状の幾何属性を保持。/ compointer<shape_saver_interface> ps(shape.create_shape_saver_interface()); if (ps) { ps->set_undo(); shape.set_point(0, vec3(0,0,0)); ps->set_undo_action(); //Undoアクションを登録する。/ } return true; } }; | |
投稿数: 34
|
投稿日時: 2005-09-20 22:45 Re: ポイントではなく形状丸ごとのUNDOの |
失礼しました。
creator_interfaceではundoableが機能していないのを確認しました。 Undoの必要な処理は、 modifier_interface::modify関数か、plugin_interface::do_it関数 で行うようにしてください。 あと、set_undo_actionの使い方に間違いがあったので サンプルコードを訂正します。 単一形状に対しては、shape_saver_interface::set_undo関数を使い、 複数形状の場合は、scene_interface::reset_undo関数を呼んだあとに、 各形状ごとにshape_saver_interface::set_undo_actionを呼びUndoアクションリストに登録します。 reset_undoが呼ばれたあとに、set_undo_actionで登録されたUndoアクションは、 1回のUndoコマンドでまとめてUndoされます。
| |
投稿数: 82
|
投稿日時: 2005-09-21 22:40 Re: ポイントではなく形状丸ごとのUNDOの |
有り難うございます無事出来ました。
これでまたちょっと小物作れそうです。 助かりました。 | |
スレッド表示 | 新しいものから 投稿するには登録が必要です | 前のスレッド | 次のスレッド | トップ |