PmxEプラグイン用覚書(C#)

今回PmxEプラグインを書いてて(C#)、あると便利だと思ったメソッドと、その他の覚書。

T0R0さんの「PMDEプラグインの作り方」をベースにしてあるので、
そのサンプルに入ってるメソッド使用している部分もあります。
(GetBoneIndexとか)



【基本】 C#は大文字と小文字表記を区別する。
VBは、Dim CCC As String で一度定義すれば、
cccと入力しても自動的にCCCに書き換えてくれるが、
C#はCCCとcccは別の変数名として認識するので注意。
MainFormを入れるための変数をmainformなどにできるが、個人的には混乱しやすいのでヤダ。

【クラス】 クラス間の変数での数値のやりとり。
変数は「public 型 変数名;」(例:public float AA;)で定義する。
通常の「型 変数名」だけだと、そのクラス内でしか扱えない。
form名「MainForm」からメインのcs「MainCS」に引っ張ってくる場合は、 MainForm内に「public 型 変数;」を書いた上で、
MainCS側に、using (var クラスを入れる変数名 = new クラス名());
例:using (var m_form = new MainForm())

ただし、何でもかんでもusing(var 変数 = new クラス名());で引っ張ってくる感覚は、
多分間違っていて、using(var 変数 = new クラス名());は、「新しいクラスあるで!」という意味。
(だと思う)
ので、最初、MainCSから呼び出して起動させるMainFormに
using (var m_CS= new MainCS())と書いていたらダメだった。
ここでさらにMainCSという名前は被ってるけど新しいクラスあるで!と呼び出してるっぽい。

MainCSでnew MainFormで生み出したMainForm内では、
public MainForm(MainCS m_CS) として、publicの中で扱うm_CSは、MainCSのことだよ、と扱わせる。
MainCSではusing (var m_form = new MainForm(this)) と、後にthisを挟むこと(this=MainCS)で、
うちの変数を扱うよ、ということにするんだと思う。
()だと空っぽの入れ物が作られる。
だから(this)にすると、こっちの側の変数を継承(?)したMainFormを作るよ、ということになるんだと思う。

(この辺まだ混乱してるから次回からも悩みそう)。


【表示枠】 どこかしらの表示枠に入っていた場合に、ボーンを表示枠から取り除く。
指定のボーンがどこに入っているかは分からないけど、
どこかに入ってるであろうボーンを外して、別の表示枠に入れたい時に使う。

使う時→ RemoveBoneAllFrame(ここに取り除きたいボーン名);

public void RemoveBoneAllFrame(string BoneName)
{
IPXNode[] BoneFrame = new IPXNode[this.PMX.Node.Count];
int k = this.GetBoneIndex(BoneName);
IPXBone Bone = (IPXBone)this.PMX.Bone[k];
for (int j = 0; j < this.PMX.Node.Count; j++)
{
BoneFrame[j] = (IPXNode)this.PMX.Node[j];
for (int i = 0; i < BoneFrame[j].Items.Count; i++)
{
if (BoneFrame[j].Items[i].IsBone)
{
if (BoneFrame[j].Items[i].BoneItem.Bone == Bone)
{ BoneFrame[j].Items.Remove(BoneFrame[j].Items[i]); }
}
}
}
}


【表示枠】 Rootボーンを入れ替えて、今までRootに入っていたボーン名を取得する。
Rootボーンの入れ替え方法が分からなかったので、なんか自分で編み出してみた。

使う時→ string 変数名 = RootBoneChange(ここに新しくRootに入れたいボーン名)
※いままでRootに入っていたボーン名が取得されるので、これを別の枠に入れる必要がある。

public string RootBoneChange(string BoneName)
{
IPXBone item2 = this.PMX.RootNode.Items[0].BoneItem.Bone;
string BoneName2 = item2.Name;
this.PMX.RootNode.Items.Clear();
IPXBoneNodeItem item = PEStaticBuilder.Pmx.BoneNodeItem();
IPXBone bone = (IPXBone)this.PMX.Bone[GetBoneIndex(BoneName)];
item.Bone = bone;
this.PMX.RootNode.Items.Add(item);
return BoneName2;
}

【float型に変換する】
(float)変数;

【小数点切り捨て】
Math.Floor(変数);

【小数点を切り捨てた上でfloatに変換する】
(float)Math.Floor(変数);

【数値をstringに変換する】
変数.ToString();

【メッセージボックスでの改行】
'\n'

コメントの投稿

非公開コメント

プロフィール

のののP

Author:のののP
絵描いたり動画作ったり歌ったり3Dモデリングしたりゲームしたり。

■ニコ動
mylist/2325248
■youtube
nononoP00
■Pixiv
id=141058
■連絡
opm_niconico○yahoo.co.jp
○→@

MMD配布系まとめ
PMDE講座まとめ
blender tips

配布物以外の無断使用禁止。

商用利用、商業依頼については上記連絡先までメール下さい。

カテゴリー
アーカイブ
ブログ内検索
リンク
RSSフィード