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
//=============================================================================
//=============================================================================