MAYA & VC++ スクリプト(MEL)の説明

VC++でMELスクリプトを作成手順を詳細に説明する。


手順1:必要なライブラリ-を組み込む

手順2:プロジェクト内に定義する

手順3:MAYA内部の各IDをヘッダ-に記載する

手順4:プログラム構造を理解する

以上の様に複数の手順を理解する必要が有ります

手順1:ライブラリ-の確認

基本的に上記のライブラリ-群が揃えばOKです!どの様な処理でも行えます。

MAYA側でのMEL関数を呼び出す構文

VC++で作製したスクリプトMELを呼び出しながら、キ-を書き込む自動記載MEL構文です。

global proc subDriveControl(int $frame)
{
int $i;
string $name[];
//==================================================================
//==================================================================
$name[ 0] =”L_RODE|ConRod|ikHandle1″ ;
$name[ 1] =”L_RODE|ConRod|ikHandle24″;
$name[ 2] =”L_RODE|ConRod|ikHandle25″;
$name[ 3] =”L_RODE|ConRod|ikHandle26″;
$name[ 4] =”L_RODE|ConRod|ikHandle27″;
$name[ 5] =”L_RODE|ConRod|ikHandle28″;
//==================================================================
//==================================================================
$name[ 6] =”L_RODE|ConRod|ikHandle45″;
$name[ 7] =”L_RODE|ConRod|ikHandle46″;
$name[ 8] =”L_RODE|ConRod|ikHandle47″;
$name[ 9] =”L_RODE|ConRod|ikHandle48″;
//==================================================================
//==================================================================
$name[10] =”L_RODE|ConRod|joint1″ ;
$name[11] =”L_RODE|ConRod|joint31″;
$name[12] =”L_RODE|ConRod|joint38″;
$name[13] =”L_RODE|ConRod|LR6center”;
$name[14] =”L_RODE|ConRod|LR6Con2″ ;
$name[15] =”L_RODE|ConRod|LR7con2″ ;
$name[16] =”L_RODE|ConRod|LR8con1″ ;
$name[17] =”L_RODE|ConRod|LR8Con2″ ;
$name[18] =”L_RODE|ConRod|LR11Con4″;
//==================================================================
//==================================================================
$name[19] =”L_RODE|ConRod|LR1_” ;
$name[20] =”L_RODE|ConRod|LR2_” ;
$name[21] =”L_RODE|ConRod|LR3_” ;
$name[22] =”L_RODE|ConRod|LR4_” ;
$name[23] =”L_RODE|ConRod|LR5_” ;
$name[24] =”L_RODE|ConRod|LR6_” ;
$name[25] =”L_RODE|ConRod|LR7_” ;
$name[26] =”L_RODE|ConRod|LR8_” ;
$name[27] =”L_RODE|ConRod|LR9_” ;
$name[28] =”L_RODE|ConRod|LR10_”;
$name[29] =”L_RODE|ConRod|LR14_”;
$name[30] =”L_RODE|ConRod|LR15_”;
//==================================================================
//==================================================================
$name[31] =”R_RODE|ConRod|ikHandle1″ ;
$name[32] =”R_RODE|ConRod|ikHandle24″;
$name[33] =”R_RODE|ConRod|ikHandle25″;
$name[34] =”R_RODE|ConRod|ikHandle26″;
$name[35] =”R_RODE|ConRod|ikHandle27″;
$name[36] =”R_RODE|ConRod|ikHandle28″;
//==================================================================
//==================================================================
$name[37] =”R_RODE|ConRod|ikHandle39″;
$name[38] =”R_RODE|ConRod|ikHandle40″;
$name[39] =”R_RODE|ConRod|ikHandle41″;
$name[40] =”R_RODE|ConRod|ikHandle42″;
//==================================================================
//==================================================================
$name[41] =”R_RODE|ConRod|RR1_” ;
$name[42] =”R_RODE|ConRod|RR2_” ;
$name[43] =”R_RODE|ConRod|RR3_” ;
$name[44] =”R_RODE|ConRod|RR4_” ;
$name[45] =”R_RODE|ConRod|RR5_” ;
$name[46] =”R_RODE|ConRod|RR6_” ;
$name[47] =”R_RODE|ConRod|RR7_” ;
$name[48] =”R_RODE|ConRod|RR8_” ;
$name[49] =”R_RODE|ConRod|RR9_” ;
$name[50] =”R_RODE|ConRod|RR10_”;
$name[51] =”R_RODE|ConRod|RR14_”;
$name[52] =”R_RODE|ConRod|RR15_”;
//==================================================================
//==================================================================
$name[53] =”R_RODE|ConRod|joint1″ ;
$name[54] =”R_RODE|ConRod|joint31″ ;
$name[55] =”R_RODE|ConRod|joint40″ ;
$name[56] =”R_RODE|ConRod|RR6center”;
$name[57] =”R_RODE|ConRod|RR6Con2″ ;
$name[58] =”R_RODE|ConRod|RR7con2″ ;
$name[59] =”R_RODE|ConRod|RR8con1″ ;
$name[60] =”R_RODE|ConRod|RR8Con2″ ;
$name[61] =”R_RODE|ConRod|RR11Con4″;
//=======================================
$name[62] =”polySurface1096″
$name[63] =”polySurface1125″
$name[64] =”polySurface1097″
$name[65] =”polySurface1126″
$name[66] =”polySurface1099″
$name[67] =”polySurface1127″
$name[68] =”polySurface1106″
$name[69] =”polySurface1128″
//==================================================================
$name[70] =”polySurface1135″
$name[71] =”polySurface1136″
//=======================================
//=======================================
for($i=0;$i<$frame;$i++) {
currentTime $i;
//=======================================
//=======================================
int $keyNmber=0;
DriveControl “-mx” 0.0 “-my” 0.0 “-mz” 0.0 “-sp” 1.0 “-fg” 1.0 ;
for($keyNmber=0;$keyNmber<72;$keyNmber++){
setKeyframe -breakdown 0 -hierarchy none -controlPoints 0 -shape 0 {$name[$keyNmber]};

                }
        }

}

subDriveControl(1800);//メイン関数です。

//==================================================================
//==================================================================
typedef struct gth{
double polxA1;//動輪軸上の現在極点
double polyA1;
double polxA2;//動輪軸上の現在極点
double polyA2;
//================================
double absPosx1;
double absPosy1;
double degri ;//現在の角度
double BenSpan ;
double BenRajian;
double kepRaji ;//現在の動作角度
double kepOffsetX;
double kepOffsetY;
//================================
MVector vnmA,nawPos,vnmB,vnmC;//現在のロケータ位置
MVector vbnA;
MVector beseMerkU;
MVector beseMerkD;
}s_gth;

//==================================================================
//==================================================================
class DriveControl: public MPxCommand
{
public:
DriveControl();
virtual ~DriveControl();

///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
static  void*    creator();
static MSyntax newSyntax();
virtual MStatus doIt( const MArgList& );

MVector oldRr6pos,oldLr6pos;
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////

private:
MStatus parseArgs(const MArgList& args,MItDag::TraversalType& traversalType,MFn::Type& filter, bool & quiet);
MStatus doScan(const MItDag::TraversalType traversalType,MFn::Type filter, bool quiet);

///////////////////////////////////////////////////////
///////////////////////////////////////////////////////

public:
static MObject input; // 入力用アトリビュート
static MObject output; // 出力用アトリビュート
static MTypeId id; // プラグインのId
static MObject scale;

double moveX,moveY,moveZ,Rotation,Spd,MoveSpan;
int Frg;

///////////////////////////////////////////////////////
s_LocControl  ms_LocControl[STRUCT_SIZE];//管理構造体

///////////////////////////////////////////////////////
int LocaterSamplingCounter;

///////////////////////////////////////////////////////
int ItemSelection(char LocateName[]);
void StructerLisetDeta();
void ItemChek(const MItDag::TraversalType traversalType,MFn::Type filter, bool quiet);
void printTransformData(int structsCount,const MDagPath& dagPath, bool quiet);

double Motor_wheel_rod_left_and_right(void);
double CombertArk(double x,double y);
double ArkPoliConbert(double rj)    ;//ラジアン負極性に対する正極性の変換を行う
double  FindTheGradient(MVector valA,MVector valB);

void Transmission_Left_mechanism()  ;
void Transmission_Right_mechanism() ;

void LeftValvDoreControlA(MVector span) ;
void RightValvDoreControlA(MVector span);
MVector LocationPointerRead(MDagPath dagPath);

void ObjectTransRate(int pos,double valA,double valB,double valC);
void ObjectTranecRotation(int pos,double valA,double valB,double valC);
MVector ObjectTransRateInv(double raj,int pos,double ofX,double ofY);
MVector ObjectTransRateInvA(BOOL invFrg,double raj,int pos,double ofx,double ofy);
MVector ObjectTransRateInvB(BOOL invFrg,double raj,int pos,double ofx,double ofy);
MVector ObjectTransRateInvC(BOOL invFrg,double raj,int pos,double ofx,double ofy);
///////////////////////////////////////////////////////
void leftValveOpenClosingCoontrol();
void rightValveOpenClosingCoontrol();
///////////////////////////////////////////////////////
bool LeftDrivingWheelRotationNmber1(int cunt,double Angle);
bool RightDrivingWheelRotationNmber1(int cunt,double Angle);
MVector CalculationOfTheITEM(double Angle);
MVector GetTransrationVar(int pos);
MVector GetRotatuonVar(int pos)   ;
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////

};

//==================================================================
//==================================================================
MTypeId DriveControl::id( 0x70001 ); // 適当なid番号(0x00000000以上、0x0007ffff以下)を決める
MObject DriveControl::input ;
MObject DriveControl::output;
MObject DriveControl::scale ;
//==================================================================
//==================================================================

ヘッダ-定義内容です

define LIK1 “L_RODE|ConRod|ikHandle1”

define LIK9 “L_RODE|ConRod|ikHandle24”

define LIK10 “L_RODE|ConRod|ikHandle25”

define LIK11 “L_RODE|ConRod|ikHandle26”

define LIK12 “L_RODE|ConRod|ikHandle27”

define LIK13 “L_RODE|ConRod|ikHandle28”

//==================================================================
//==================================================================

define LIK45 “L_RODE|ConRod|ikHandle45”

define LIK46 “L_RODE|ConRod|ikHandle46”

define LIK47 “L_RODE|ConRod|ikHandle47”

define LIK48 “L_RODE|ConRod|ikHandle48”

//==================================================================
//==================================================================

define L_JN1 “L_RODE|ConRod|joint1”

define L_JN31 “L_RODE|ConRod|joint31”

define L_JN38 “L_RODE|ConRod|joint38”

define LR6_CEN “L_RODE|ConRod|LR6center”

define LR6_CON2 “L_RODE|ConRod|LR6Con2”

define LR7_CON2 “L_RODE|ConRod|LR7con2”

define LR8_CON1 “L_RODE|ConRod|LR8con1”

define LR8_CON2 “L_RODE|ConRod|LR8Con2”

define LR11_CON4 “L_RODE|ConRod|LR11Con4”

//==================================================================
//==================================================================

define LR1 “L_RODE|ConRod|LR1_”

define LR2 “L_RODE|ConRod|LR2_”

define LR3 “L_RODE|ConRod|LR3_”

define LR4 “L_RODE|ConRod|LR4_”

define LR5 “L_RODE|ConRod|LR5_”

define LR6 “L_RODE|ConRod|LR6_”

define LR7 “L_RODE|ConRod|LR7_”

define LR8 “L_RODE|ConRod|LR8_”

define LR9 “L_RODE|ConRod|LR9_”

define LR10 “L_RODE|ConRod|LR10_”

define LR14 “L_RODE|ConRod|LR14_”

define LR15 “L_RODE|ConRod|LR15_”

//==================================================================
//==================================================================

define RIK1 “R_RODE|ConRod|ikHandle1”

define RIK9 “R_RODE|ConRod|ikHandle24”

define RIK10 “R_RODE|ConRod|ikHandle25”

define RIK11 “R_RODE|ConRod|ikHandle26”

define RIK12 “R_RODE|ConRod|ikHandle27”

define RIK13 “R_RODE|ConRod|ikHandle28”

//==================================================================
//==================================================================

define RIK39 “R_RODE|ConRod|ikHandle39”

define RIK40 “R_RODE|ConRod|ikHandle40”

define RIK41 “R_RODE|ConRod|ikHandle41”

define RIK42 “R_RODE|ConRod|ikHandle42”

//==================================================================
//==================================================================

define RR1 “R_RODE|ConRod|RR1_”

define RR2 “R_RODE|ConRod|RR2_”

define RR3 “R_RODE|ConRod|RR3_”

define RR4 “R_RODE|ConRod|RR4_”

define RR5 “R_RODE|ConRod|RR5_”

define RR6 “R_RODE|ConRod|RR6_”

define RR7 “R_RODE|ConRod|RR7_”

define RR8 “R_RODE|ConRod|RR8_”

define RR9 “R_RODE|ConRod|RR9_”

define RR10 “R_RODE|ConRod|RR10_”

define RR14 “R_RODE|ConRod|RR14_”

define RR15 “R_RODE|ConRod|RR15_”

//==================================================================
//==================================================================

define R_JN1 “R_RODE|ConRod|joint1”

define R_JN31 “R_RODE|ConRod|joint31”

define R_JN40 “R_RODE|ConRod|joint40”

define RR6_CEN “R_RODE|ConRod|RR6center”

define RR6_CON2 “R_RODE|ConRod|RR6Con2”

define RR7_CON2 “R_RODE|ConRod|RR7con2”

define RR8_CON1 “R_RODE|ConRod|RR8con1”

define RR8_CON2 “R_RODE|ConRod|RR8Con2”

define RR11_CON4 “R_RODE|ConRod|RR11Con4”

//==================================================================
//==================================================================

define PAI 3.14159265358979323846

//==================================================================
//==================================================================

define MAIN_L “Main_L”

define MAIN_R “Main_R”

//==================================================================
//=========================== 動輪 ==============================

define HOIL_L1 “polySurface1096”

define HOIL_R1 “polySurface1125”

define HOIL_L2 “polySurface1097”

define HOIL_R2 “polySurface1126”

define HOIL_L3 “polySurface1099”

define HOIL_R3 “polySurface1127”

define HOIL_L4 “polySurface1106”

define HOIL_R4 “polySurface1128”

//==================================================================

define HOIL_F1 “polySurface1135”

define HOIL_F2 “polySurface1136”

//=============================================================================
//======================= 動輪組(左右) 1~4 ===========================
//=============================================================================

define NM1 “Hoil1”

define NM2 “Hoil2”

define NM3 “Hoil3”

define NM4 “Hoil4”

define LSPIK1 “ikHandle31”

define LSPIK2 “ikHandle33”

define RSPIK1 “ikHandle32”

define RSPIK2 “ikHandle34”

//=============================================================================
//========================= 動輪間隔 ======================================
//=============================================================================

define SPAN_A 4.473568

define SPAN_B 4.466325

define SPAN_C 4.531432

//=============================================================================
//======================= A~L 長さ ======================================
//=============================================================================

define A_SPAN 1.290507

define B_SPAN 5.879283

define C_SPAN 1.040132

define D_SPAN 8.441184

define E_SPAN 8.992677

define F_SPAN 3.789835

define G_SPAN 0.677125

define H_SPAN 4.450422

define I_SPAN 4.557056

define J_SPAN 2.423067

define K_SPAN 1.281325

define L_SPAN 0.526616

define M_SPAN 1.181063

//=============================================================================
//=============================================================================
//=======================後方 弁関係IKハンドルの基準極点======================

define V_RADIUS_A 1.240533

define VALVE_A1_CONTROL_X -3.66

define VALVE_A1_CONTROL_Y -3.239

define VALVE_A2_CONTROL_X -4.048

define VALVE_A2_CONTROL_Y -4.47

define ANGLE_OFSET_A 252.3

//=============================================================================
//=============================================================================
//=======================前方弁 関係IKハンドルの基準極点======================

define V_RADIUS_J 2.423067

define VALVE_J1_CONTROL_X -8.052

define VALVE_J1_CONTROL_Y -3.208

define VALVE_K2_CONTROL_X -8.023

define VALVE_K2_CONTROL_Y -5.603

define ANGLE_OFSET_J 270.1

//=============================================================================
//=============================================================================
//=============================================================================

define V_RADIUS_C 1.040132

define VALVE_C1_CONTROL_X 1.801

define VALVE_C1_CONTROL_Y -5.085

define VALVE_C2_CONTROL_X 2.259

define VALVE_C2_CONTROL_Y -6.019

define ANGLE_OFSET_C 115.43

//=============================================================================
//================================動輪中心実測値===============================

define RADIUS 0.949358

define HOIL1_CENTER_X -6.668

define HOIL1_CENTER_Y -5.085

define HOIL2_CENTER_X -2.204

define HOIL2_CENTER_Y -5.073

define HOIL3_CENTER_X 2.263

define HOIL3_CENTER_Y -5.073

define HOIL4_CENTER_X 6.791

define HOIL4_CENTER_Y -5.076

//=============================================================================
//=================画面絶対零点からの動輪中心点距離 ===========================

define NM1_ORGN_X -6.676

define NM1_ORGN_Y -5.078

//=============================================================================

define NM2_ORGN_X -2.304

define NM2_ORGN_Y -5.078

//=============================================================================

define NM3_ORGN_X 2.263

define NM3_ORGN_Y -5.078

//=============================================================================

define NM4_ORGN_X 6.788

define NM4_ORGN_Y -5.078

//=============================================================================
//=============================================================================

MAYA側へ通達する スクリプト関数本体