元記事:Mesh editing rewrite
選択モードとオプションの描画モード(半透明Face、Normal、Solid Draw)は一緒に動作します。すべてのBlenderのMesh編集ツールも、修正された選択モードに反応します。
また、Edge loop(Edge選択モード中)やFace loop(Face選択モード中)を(Edgeモード)ループの一部を成すEdgeもしくは、(Faceモード)ループの一部をなす二つのFaceにつながるEdge上で[Alt]+右クリックすることにより、すばやい選択が行えるようになりました。この説明用のデモムービーをご覧下さい。
EdgeやFace選択モード中のExtrudeにより、extrudeするものとすべきでないものをより正しくコントロールできます。例えば格子模様に選択を行い、extrudeしてみて下さい。
もしFaceをExtrudeする場合、Extrudeは旧FaceのNormalにそって行われ、3DViewでのワークフローがかなり楽になっています。[G](Grab/Move)、[R](Rotate)、[S](Scale)を一度押せば、通常のようにtransformモードが変更できます。
新しい方法のExtrudeも追加されています。最初の二つはFace選択モードでのRegionとIndividual Faceで、新しいFaceを集めたまま維持、もしくは個別のFaceのNormalにそって別々に分割します。また、Edge選択もしくはVertex選択モードでも、Edgeのみ、もしくはVertexのみのExtrudeが可能です。
この新しいオプションは背面で見えないVertex、Edge、Faceの描画を隠し、選択できないようにします。これはVertex、Edgeの終端、Faceの中心点のZバッファ(デプス:深度)値を元にしています。表示と同じアルゴリズムを使用しているため、選択は高精度です。この選択モードは3DViewのHeaderのアイコンでON/OFFできます→
SubSurfにOptimalモードを使用中、Blenderが再分割された形状自身の(選択可能な)EdgeとFaceをオリジナルの元となるMeshを完全に隠して表示するようになりました。また、これは表示オプションの'Draw Faces'と'Draw Edges'にも動作します。開発中に作成されたデモムービーをご覧ください。
一般的なフラグの使用方法
"->f" フラグはeditmesh.cとeditmesh_lib.cのコア関数のための予約となっています。実際には現在は選択状態にしか使用されていません。
"->f1" と "->f2" フラグは自由に使えます。これらはVertex/Edge/face構造体で利用できます。自由であるがため、これらのフラグを使用している他の関数を呼び出すとき、チェックは慎重に行ってください…例えばextrude()やsubdivide()がこれらを使用しています。
選択フラグ
EditVert: eve->f & SELECT
EditEdge: eed->f & SELECT
EditFace: efa->f & SELECT
- 選択はhideでない場合のみ使用可能です!
- 選択フラグは常に更新されますが、しかし、
if 選択モード >= SELECT_EDGE Vertexの選択フラグは不正になる場合があります。
if 選択モード == SELECT_FACE Vertex/Edgeの選択フラグは不正になる場合があります。
これはVertexもしくはEdgeが共有されている所為です。
- Vertexを選択する場合
eve->f &= SELECT
- 常にEdgeを選択する場合
void EM_select_edge(eed, 1) // 1 = select, 0 = deselect
- 常にFaceを選択する場合
void EM_select_face(efa, 1) // 1 = select, 0 = deselect
- すべてのデータの'f'フラグをセット
void EM_set_flag_all(int flag);
void EM_clear_flag_all(int flag);
- 旧faceselectedOR()とfaceselectedAND()もまだありますが、そのVertexの評価にのみ使用されます。
選択を扱うコードのヒント
もし選択モードが 'face'の場合、VertexもしくはEdgeの選択は上位(下記参照)にフラッシュする必要があります。'Edge'選択モードにも同じことがいえます。これはすべての選択をコーディング中、注意を向けておく必要があるということです…ある一つのFaceの4つのVertexを選択しても、もう自動的にそのFaceが選択されることはありません。
しかしながら、上記のコールを使用することで、少なくとも選択は下位(Vertexレベル)にフラッシュされます。この時使用できるコールは以下のとおりです。
void EM_selectmode_flush(void);
これは選択モードを元に、選択を上位にフラッシュします。この関数は下記のような動作をします。
- もし選択モードが'vertex':Edge/Faceが選択されたVertexを元に選択されます。
- もし選択モードが'Edge':Faceが選択されたEdgeを元に選択されます。
上手くコントロールされた状況ではちゃんと動作します。
しかし、Faceモードで単にVertexの選択を変更しただけは、まだFaceは選択されません! もしどうしてもVertexの選択だけでの動作が避けられない場合、このコールを使用して下さい。
void EM_select_flush(void);
現在の選択モードを参照せず、今の選択を上流にフラッシュします。しかし、チェッカーボード状のFace選択のような特殊なケースでは破綻する恐れがあります。よってこれはあなたが他のすべてが非選択になっているのを知っている(もしくはそれを非選択にする)場合にのみ使用して下さい。例:プリミティブの追加。
Hideフラグ
EditVert: eve->h
EditEdge: eed->h
EditFace: efa->h
- すべてのhideフラグは常に新しく更新されます。
- hideしているVertex/Edge/Faceは常に非選択状態になります。よって選択されているものだけを操作する場合、hideフラグのチェックは必要ありません。
EditModeとのUndoの統一
新ファイル: editmode_undo.h
ポインタハンドルスタイルのUndoの、非常に素晴らしい関数です。たった三つのコア関数で、あなたのUndoは空へ舞い上がります! このCファイルは素晴らしいリファレンスになります。
また、古いUndoシステムは置き換えられたことに注意して下さい。現在Mesh自身への依存は最小限に(EditModeへの出入りを悪用しなければ)留めており、EditMode関数に上手く制限されています。
EditModeへの出入り
すべてのVertex/Face/Edgeが3つの大きなチャンクに割り当てられたためスピードアップしました。Vertex/Face/Edgeにはこのようなデータが解放できないことを示すためのタグがセットされています。
また、Edgeのハッシュテーブル(参照テーブル)がEditEdge自身の一部を除き、すべてにおいてもうmallocを使用しないようになりました。
リライトされたMesh編集
Ton Roosendaal氏
新しい選択モード
選択モードとオプションの描画モード(半透明Face、Normal、Solid Draw)は一緒に動作します。すべてのBlenderのMesh編集ツールも、修正された選択モードに反応します。
すばやいEdge/Face loop選択
また、Edge loop(Edge選択モード中)やFace loop(Face選択モード中)を(Edgeモード)ループの一部を成すEdgeもしくは、(Faceモード)ループの一部をなす二つのFaceにつながるEdge上で[Alt]+右クリックすることにより、すばやい選択が行えるようになりました。この説明用のデモムービーをご覧下さい。
Extrude
EdgeやFace選択モード中のExtrudeにより、extrudeするものとすべきでないものをより正しくコントロールできます。例えば格子模様に選択を行い、extrudeしてみて下さい。
もしFaceをExtrudeする場合、Extrudeは旧FaceのNormalにそって行われ、3DViewでのワークフローがかなり楽になっています。[G](Grab/Move)、[R](Rotate)、[S](Scale)を一度押せば、通常のようにtransformモードが変更できます。
新しい方法のExtrudeも追加されています。最初の二つはFace選択モードでのRegionとIndividual Faceで、新しいFaceを集めたまま維持、もしくは個別のFaceのNormalにそって別々に分割します。また、Edge選択もしくはVertex選択モードでも、Edgeのみ、もしくはVertexのみのExtrudeが可能です。
Region | Individual Faces | Only Edges | Only Vertices |
Zバッファクリッピング(隠面排除)選択
この新しいオプションは背面で見えないVertex、Edge、Faceの描画を隠し、選択できないようにします。これはVertex、Edgeの終端、Faceの中心点のZバッファ(デプス:深度)値を元にしています。表示と同じアルゴリズムを使用しているため、選択は高精度です。この選択モードは3DViewのHeaderのアイコンでON/OFFできます→
Subdivision Surface
SubSurfにOptimalモードを使用中、Blenderが再分割された形状自身の(選択可能な)EdgeとFaceをオリジナルの元となるMeshを完全に隠して表示するようになりました。また、これは表示オプションの'Draw Faces'と'Draw Edges'にも動作します。開発中に作成されたデモムービーをご覧ください。
その他注意点
- Edge・FaceのHideは選択モードによっても違う挙動をします。
- 編集中、FaceのNormalは常に更新されるようになりました。
- Border Select([B]キー)はEdgeには選択ルールに二つの違う方法があります。まず、完全にボーダー内にあるEdgeがひとつある場合、完全に内側にあるEdgeのみが選択されます。もう一つは、ボーダーに交差しているEdgeを選択します。
- Faceモードでは、追加されたVertexやEdge、Circle(訳注:プリミティブ)が見えません…。
- "Add → monkey"が通常のプリミティブとして動作するように(3Dカーソル上に回転して出現)。
- MeshのUndoは完全に書き直されました。VertexKeyとVertexGroupsの問題が解決されていることを願います。
- EditModeの出入りも完全に書き直されています。特に大きなモデルではかなりスピードアップしていることに気づくでしょう。
- Todo: UVテクスチャの表示と編集を含む、'FaceSelect mode'の機能のEditModeへの追加。
EditMesh開発ノート
一般的なフラグの使用方法
"->f" フラグはeditmesh.cとeditmesh_lib.cのコア関数のための予約となっています。実際には現在は選択状態にしか使用されていません。
"->f1" と "->f2" フラグは自由に使えます。これらはVertex/Edge/face構造体で利用できます。自由であるがため、これらのフラグを使用している他の関数を呼び出すとき、チェックは慎重に行ってください…例えばextrude()やsubdivide()がこれらを使用しています。
選択フラグ
EditVert: eve->f & SELECT
EditEdge: eed->f & SELECT
EditFace: efa->f & SELECT
- 選択はhideでない場合のみ使用可能です!
- 選択フラグは常に更新されますが、しかし、
if 選択モード >= SELECT_EDGE Vertexの選択フラグは不正になる場合があります。
if 選択モード == SELECT_FACE Vertex/Edgeの選択フラグは不正になる場合があります。
これはVertexもしくはEdgeが共有されている所為です。
- Vertexを選択する場合
eve->f &= SELECT
- 常にEdgeを選択する場合
void EM_select_edge(eed, 1) // 1 = select, 0 = deselect
- 常にFaceを選択する場合
void EM_select_face(efa, 1) // 1 = select, 0 = deselect
- すべてのデータの'f'フラグをセット
void EM_set_flag_all(int flag);
void EM_clear_flag_all(int flag);
- 旧faceselectedOR()とfaceselectedAND()もまだありますが、そのVertexの評価にのみ使用されます。
選択を扱うコードのヒント
もし選択モードが 'face'の場合、VertexもしくはEdgeの選択は上位(下記参照)にフラッシュする必要があります。'Edge'選択モードにも同じことがいえます。これはすべての選択をコーディング中、注意を向けておく必要があるということです…ある一つのFaceの4つのVertexを選択しても、もう自動的にそのFaceが選択されることはありません。
しかしながら、上記のコールを使用することで、少なくとも選択は下位(Vertexレベル)にフラッシュされます。この時使用できるコールは以下のとおりです。
void EM_selectmode_flush(void);
これは選択モードを元に、選択を上位にフラッシュします。この関数は下記のような動作をします。
- もし選択モードが'vertex':Edge/Faceが選択されたVertexを元に選択されます。
- もし選択モードが'Edge':Faceが選択されたEdgeを元に選択されます。
上手くコントロールされた状況ではちゃんと動作します。
しかし、Faceモードで単にVertexの選択を変更しただけは、まだFaceは選択されません! もしどうしてもVertexの選択だけでの動作が避けられない場合、このコールを使用して下さい。
void EM_select_flush(void);
現在の選択モードを参照せず、今の選択を上流にフラッシュします。しかし、チェッカーボード状のFace選択のような特殊なケースでは破綻する恐れがあります。よってこれはあなたが他のすべてが非選択になっているのを知っている(もしくはそれを非選択にする)場合にのみ使用して下さい。例:プリミティブの追加。
Hideフラグ
EditVert: eve->h
EditEdge: eed->h
EditFace: efa->h
- すべてのhideフラグは常に新しく更新されます。
- hideしているVertex/Edge/Faceは常に非選択状態になります。よって選択されているものだけを操作する場合、hideフラグのチェックは必要ありません。
EditModeとのUndoの統一
新ファイル: editmode_undo.h
ポインタハンドルスタイルのUndoの、非常に素晴らしい関数です。たった三つのコア関数で、あなたのUndoは空へ舞い上がります! このCファイルは素晴らしいリファレンスになります。
また、古いUndoシステムは置き換えられたことに注意して下さい。現在Mesh自身への依存は最小限に(EditModeへの出入りを悪用しなければ)留めており、EditMode関数に上手く制限されています。
EditModeへの出入り
すべてのVertex/Face/Edgeが3つの大きなチャンクに割り当てられたためスピードアップしました。Vertex/Face/Edgeにはこのようなデータが解放できないことを示すためのタグがセットされています。
また、Edgeのハッシュテーブル(参照テーブル)がEditEdge自身の一部を除き、すべてにおいてもうmallocを使用しないようになりました。
投票数:15
平均点:10.00
Blender2.35 Outliner |
Blender機能別 |
Blender2.35 Python API |
ログイン
クイックリンク
2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki