「ユーザーブロマガ」サービスの終了(10月7日を予定)にあたり、残したいユーザーブロマガ記事への投票を受け付けています

闇鍋プラグイン 選択面のコピー機能
閉じる
閉じる

闇鍋プラグイン 選択面のコピー機能

2015-09-14 01:13
  • 3

残したいユーザーブロマガ記事への投票はこちらです

闇鍋プラグイン(https://bowlroll.net/file/9765)に
選択面をコピーする機能追加しました。

・CopyFace.dll [FACE] 選択面をコピーする。
・CopyFaceNewMaterial.dll [FACE] 選択面をコピーする。(新規材質)
選択した面を同一材質にコピーする。/選択面を新規材質にコピーする。

■使い方
・[FACE] 選択面をコピーする。
1.PMXViewにて面を選択し実行します。




2.面が同一材質に追加されます。




・[FACE] 選択面をコピーする。(新規材質)
1.PMXViewにて面を選択し実行します。


2.元材質名_Addという材質が追加されそこに選択面がコピーされます。


以上です。

この記事のコメント欄は以下の記事通り解放します
http://ch.nicovideo.jp/t0r0/blomaga/ar760385


面の処理少々めんどうだったのでメモがわり

/// <summary>
/// 面の含まれる材質を取得する。
/// </summary>
/// <param name="Face"></param>
/// <param name="type"></param>
/// <returns></returns>
private IPXMaterial GetFaceMaterial(IPXFace Face, int type = 0)
{
int Index = this.GetFaceMaterialIndex(Face, type);
if (Index != -1)
{
return this.PMX.Material[Index];
}
else
{
return null;
}
}
/// <summary>
/// 面の含まれる材質Indexを取得する。
/// </summary>
/// <param name="Face"></param>
/// <param name="type"></param>
/// <returns></returns>
private int GetFaceMaterialIndex(IPXFace Face, int type = 0)
{
for (int i = 0; i < this.PMX.Material.Count; i++)
{
for (int j = 0; j < this.PMX.Material[i].Faces.Count; j++)
{
if (this.PMX.Material[i].Faces[j] == Face)
{
return i;
}
}
}
if (type == 0)
{
return -1;
}
else
{
throw new System.Exception("面を含む材質は存在しません。");
}
}
/// <summary>
/// 選択した面をリストアップする。
/// </summary>
/// <returns></returns>
private List<IPXFace> GetSelectedFaceList()
{
List<IPXFace> Faces = new List<IPXFace>();
List<IPXFace> AllFaces = this.GetAllFaceList();
for (int i = 0; i < this.connect.View.PmxView.GetSelectedFaceIndices().Length; i++)
{

if (this.connect.View.PmxView.GetSelectedFaceIndices()[i] % 3 == 0)
{
Faces.Add(AllFaces[this.connect.View.PmxView.GetSelectedFaceIndices()[i] / 3]);
}
}
return Faces;
}

/// <summary>
/// 面の含まれる材質Indexと面Indexを取得する。
/// </summary>
/// <param name="Face"></param>
/// <param name="MaterialIndex"></param>
/// <param name="FaceIndex"></param>
private void GetFaceInfo(IPXFace Face, out int MaterialIndex, out int FaceIndex)
{
for (int i = 0; i < this.PMX.Material.Count; i++)
{
for (int j = 0; j < this.PMX.Material[i].Faces.Count; j++)
{
if (this.PMX.Material[i].Faces[j] == Face)
{
MaterialIndex = i;
FaceIndex = j;
return;
}
}
}
MaterialIndex = -1;
FaceIndex = -1;
}
/// <summary>
/// すべての面リストを生成する。
/// </summary>
/// <returns></returns>
private List<IPXFace> GetAllFaceList()
{
List<IPXFace> ret = new List<IPXFace>();
for (int i = 0; i < this.PMX.Material.Count; i++)
{
for (int j = 0; j < this.PMX.Material[i].Faces.Count; j++)
{
ret.Add(this.PMX.Material[i].Faces[j]);
}
}
return ret;
}

/// <summary>
/// 面に含まれる法線の外積
/// </summary>
/// <param name="Face"></param>
/// <returns></returns>
private V3 GetFaceNormal(IPXFace Face)
{
V3 ret = Vector3.Cross(Face.Vertex2.Position - Face.Vertex1.Position,Face.Vertex3.Position - Face.Vertex1.Position);
ret.Normalize();
return ret;
}


広告
×
お疲れ様です。

「材質ごと複製して、余分の面をカット」する手間が省けますね>助かります
72ヶ月前
×
はじめまして。闇鍋プラグインにいつもお世話になっています。
便利なものをありがとうございます。

剛体・ジョイント操作のローカル回転・移動がとても便利で、
もうこれがないとジョイントをいじるのが辛いくらいなのですが、
ジョイントを回転させた時に入力した数値と全く違う回転をしたり、
回転させたジョイントが画面から消えてしまうようになりました。
全てのジョイントで起こるわけではなく、特定のジョイントで発生するようですが
原因が分からず困っています。

PMXeのバージョンは0232b、闇鍋プラグインは現在最新のものを入れなおしています。
72ヶ月前
×
>>2
可能ならばその現象が発生しているモデルと手順もらえますか?
72ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。