home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
MACRO
/
GENIE.M
< prev
next >
Wrap
Text File
|
1996-08-02
|
13KB
|
537 lines
//
// ファイル名がGENIEのパーツデータっぽいかどうか調べる
//
function CheckFileNameforGenie( file )
{
var filename, ele[3], i;
var filelist[24], temp1, temp2, temp3;
filelist = { "F1", "F2", "S1", "S2", "W1", "W2", "SD", "EG", "CP", "BR", "G1", "G2", "TK", "SL", "JT", "BL", "BG", "OT", "P1", "P2", "EF", "C1", "C2", "C3" };
filename = toupper( fullpath( file ));
Bunkai( filename, ele );
if( !ele[1] != 4 )
return FALSE;
temp1 = substr( ele[1], 2 );
temp2 = substr( ele[1], -2 );
temp3 = strtoasc( temp2 )- strtoasc( "0" );
if( ( temp3 >= 0 ) & ( temp3 <= 9 ))
{
temp2 = substr( temp2, -1 );
temp3 = strtoasc( temp2 ) - strtoasc( "0" );
if(( temp3 >= 0 ) & ( temp3 <= 9 ))
{
temp2 = atoi( substr( ele[1], -2 ));
if( (temp2 < 0 ) | ( temp2 > 16 ))
return FALSE;
}
else
return FALSE;
}
else
return FALSE;
for( i = 0; i< 24; i++ )
{
if( temp1 == filelist[i] )
return TRUE;
}
if( substr( temp1, 1 ) != "U" )
return FALSE;
temp2 = strtoasc(substr( temp1, -1 )) - strtoasc( "0" );
if(( temp2 >= 0 ) & ( temp2 <= 9 ))
return TRUE;
else
return FALSE;
}
//
// GENIEでつくったメカデータが読めるかもしれない
//
function LoadMechaFile(filename)
{
var i, j, k, temp, temp2, temp3, readfile, flag = OFF;
var key, sel1, sel2, temp_sel, old_max, deleteflag[MAXOBJECT];
var msg[5], ele[3], shikichou, uv[2][2];
var bodym[5], bodyd[5];
DlogOpen( "色調指定", 1 );
msg = {"白", "青","赤","緑","紫" };
DlogSelect( 0, "色調", msg, 0 );
key = DlogWait();
if( key == 0 )
return FALSE;
else
shikichou = DlogAnswer( 0 );
readfile = fullpath( filename );
temp3 = MakeFile(substr( readfile, (!readfile -4 )), ".suf" );
for( i = 0; i< Objects(); i++ )
{
temp2 = fullpath( ObjFile( i ));
if( toupper(temp2) == toupper(temp3) )
{
flag = TRUE;
break;
}
}
if( flag == TRUE )
{
flag = FALSE;
for( i = 0; i< Objects(); i++ )
{
if( toupper(temp3) == toupper( fullpath(ObjFile(i))))
{
if( ObjEdit(i) == TRUE )
{
flag = TRUE;
break;
}
}
}
if( flag == TRUE )
{
Warning();
DlogOpen( "", 2 , "いいえ", "はい" );
DlogMessage( 0, "ファイルはすでに読み込まれています。" );
DlogMessage( 1, "編集中のデータを破棄しますか?" );
key = DlogWait();
if( key == 0 )
return FALSE;
}
SelectAll( TRUE );
sel2 = Select();
PolyInvisible( FALSE );
i = 0;
while( i < Objects() )
{
if( toupper(temp3) == toupper( fullpath( ObjFile(i))))
{
SelectObj( i, TRUE, SELECT_UPDATE );
temp_sel = Select();
Select( sel2 );
PolyDelete( temp_sel );
sel2 = Select();
ObjDelete( i );
}
else
i++;
}
Select( sel2 );
PolyInvisible( invisible_flag );
}
FrmReadFile( readfile, OBJ_CREATE );
sel1 = Select();
bodym = { "BodyM","BodyM_BL","BodyM_RD","BodyM_GR","BodyM_MG" };
bodyd = { "BodyD","BodyD_BL","BodyD_RD","BodyD_GR","BodyD_MG" };
temp = AttrSearch( "BodyM" );
temp2 = AttrSearch( "BodyD" );
if( shikichou == 0 )
{
}
else
{
temp3 = AttrSearch( bodym[shikichou] );
if( temp3 < 0 )
AttrName( temp , bodym[shikichou] );
else
{
SelectAttr( temp, TRUE, SELECT_UPDATE );
AttrChange( temp3 );
}
temp3 = AttrSearch( bodyd[shikichou] );
if( temp3 < 0 )
AttrName( temp2, bodyd[shikichou] );
else
{
SelectAttr( temp2, TRUE, SELECT_UPDATE );
AttrChange( temp3 );
}
Select( sel1 );
}
Bunkai( readfile, ele );
temp = ele[0]+"..\\atr\\genie.atr";
temp2 = ele[0]+"..\\..\\atr\\genie.atr";
temp3 = ele[0]+"..\\..\\..\\atr\\genie.atr";
if( access( temp ))
AttrReadFile( temp );
else if( access( temp2 ))
AttrReadFile( temp2 );
else if( access( temp3 ))
AttrReadFile( temp3 );
else
{
Message( "GENIE.ATR が見つかりません。\n"
+"使用するGENIE.ATRを指定してください。\n" );
temp = GetFile( "データロード", "", "atr" );
if( typeof( temp ) == BOOLEAN )
{
Warning();
return;
}
if( access( temp ) == FALSE )
{
Warning();
Message( "ファイルが存在しません" );
return FALSE;
}
AttrReadFile( temp );
}
for( i = 0; i< Attrs(); i++ )
{
if( AttrMap( i ) == FALSE )
{
AttrMap( i, TRUE );
AttrMapFile( i, MAPPINGFILE );
uv[0] = {0,0};
uv[1] = {MAPWIND-1, MAPWIND-1};
SetAttrMapWind( i, uv[0], uv[1] );
uv[0] = {0,0};
uv[1] = {UVmax, UVmax};
SetAttrMapSize( i, uv[0], uv[1] );
}
}
}
function LoadMecha()
{
var filename, temp;
filename = GetFile( "データロード", "", "fsc" );
if( typeof( filename ) == BOOLEAN )
return;
if( access( filename ) == FALSE )
{
Warning();
Message( "ファイルが存在しません" );
return FALSE;
}
if (LoadMechaFile(filename) == FALSE) {
return FALSE;
}
temp = Objects()-1;
ObjCurrent( temp );
ObjEdit( temp, TRUE );
UpdateObject();
UpdateAttribute();
Update( CLEAR );
return TRUE;
}
//
// 新規作成forGENIE
//
function NewDataforGENIE()
{
var i, uv[2][2];
var flag = OFF;
for( i = 0; i< Objects();i++ )
{
if( ObjEdit( i ))
{
flag = TRUE;
break;
}
}
if( flag )
{
Warning();
DlogOpen( "", 1, "キャンセル " ,"いいえ"," はい " );
DlogMessage( 0, "データが変更されています。保存しますか?" );
i = DlogWait();
if( i == 0 )
return;
else if(( i == 2 ) | ( i == RET ))
SaveAll();
}
PolyInvisible( FALSE );
SelectAll( TRUE, SELECT_UPDATE );
if( SelectPolygons != 0 )
PolyDelete();
while( Objects() > 0 )
ObjDelete( 0 );
while( Attrs() > 0 )
AttrDelete( 0 );
ObjAppend( default_objname, default_filename );
AttrReadFile( model_dir+GENIEATRNAME );
if( EXPERT != TRUE )
{
for( i = 0; i< Attrs(); i++ )
{
AttrMap( i, TRUE );
AttrMapFile( i, MAPPINGFILE );
uv[0] = {0,0};
uv[1] = {MAPWIND-1, MAPWIND-1};
SetAttrMapWind( i, uv[0], uv[1] );
uv[0] = {0,0};
uv[1] = {UVmax, UVmax};
SetAttrMapSize( i, uv[0], uv[1] );
}
}
UpdateObject();
UpdateAttribute();
AllInit();
Polygon();
}
//
// GENIEにパーツを登録できるかもしれない
//
function InstallParts()
{
var const MAXGENIEATR = 19;
var GenieAtrList[MAXGENIEATR];
GenieAtrList = { "BodyM","BodyD","White","Glass","GrayG","Brown",
"WhiLg","BluLg","RedLg","YelLg","Black",
"BeamBlu", "BeamBluLg", "BeamRed", "BeamRedLg",
"BeamWhi", "BeamWhiLg", "BeamYel", "BeamYelLg" };
var obj, i, j, k, double_flag, filecheck_flag;
var sel1, sel2, temp, temp2, flag, ele[3];
var msg[2], atrlist[MAXATTR];
msg = { " する ", "しない" };
DlogOpen( "パーツ登録", 3 );
DlogMessage( 0, "カレントオブジェクトをDOGA-L1のパーツとして登録します" );
DlogSelect( 2, "面二重化",msg, 1 );
if( DlogWait() )
double_flag = ( DlogAnswer(2) == 0 );
else
return FALSE;
k = ObjtoAtr( ObjCurrent(), atrlist );
for( i = 0; i< k; i++ )
{
temp = AttrName( atrlist[i] );
flag = FALSE;
for( j = 0; j< MAXGENIEATR; j++ )
{
if( temp == GenieAtrList[j] )
flag = TRUE;
}
if( flag == FALSE )
{
Warning();
Message( "アトリビュート "+ temp +" \n"+
"はDOGA-L1のアトリビュートとして使用できません" );
return;
}
}
if( CheckFileNameforGenie( fullpath( ObjFile( ObjCurrent()))))
{
DlogOpen( "", 3, "中止", "更新登録", "新規登録" );
DlogMessage( 0, "このデータは既にパーツデータとして" );
DlogMessage( 1, "登録されているようです。登録されて" );
DlogMessage( 2, "いるデータを更新しますか?" );
temp = DlogWait();
if( temp == 1 )
filecheck_flag = TRUE;
else if( temp == 2 )
filecheck_flag = FALSE;
else
{
Warning();
return FALSE;
}
}
else
filecheck_flag = FALSE;
temp2 = Attrs();
AttrReadFile( model_dir+GENIEATRNAME, ATTR_CREATE );
for( i = 0; i< k; i++ )
{
for( j = temp2; j< Attrs(); j++ )
{
if( AttrName( j ) == AttrName(atrlist[i]) )
{
flag = FALSE;
if( AttrCol( j ) != AttrCol( atrlist[i] ))
flag = TRUE;
if( AttrAmb( j ) != AttrAmb( atrlist[i] ))
flag = TRUE;
if( AttrDif( j ) != AttrDif( atrlist[i] ))
flag = TRUE;
if( AttrTra( j ) != AttrTra( atrlist[i] ))
flag = TRUE;
if( AttrSpc( j ) != AttrSpc( atrlist[i] ))
flag = TRUE;
if( AttrSize( j ) != AttrSize( atrlist[i] ))
flag = TRUE;
if( AttrRef( j ) != AttrRef( atrlist[i] ))
flag = TRUE;
if( AttrRfr( j ) != AttrRfr( atrlist[i] ))
flag = TRUE;
if( AttrAtt( j ) != AttrAtt( atrlist[i] ))
flag = TRUE;
if( flag == TRUE )
{
Warning();
DlogOpen( "", 3, "中止" ,"実行" );
DlogMessage( 0, "アトリビュート" + AttrName( atrlist[i] ) + " \n" );
DlogMessage( 1, "は編集されているため、DOGA-L1のアトリビュート \n" );
DlogMessage( 2, "として使用できません。データを元に戻しますか" );
temp = DlogWait();
if( temp )
{
AttrCol( atrlist[i], AttrCol( j ));
AttrAmb( atrlist[i], AttrAmb( j ));
AttrDif( atrlist[i], AttrDif( j ));
AttrTra( atrlist[i], AttrTra( j ));
AttrSpc( atrlist[i], AttrSpc( j ));
AttrSize( atrlist[i], AttrSize( j ));
AttrRef( atrlist[i], AttrRef( j ));
AttrRfr( atrlist[i], AttrRfr( j ));
AttrAtt( atrlist[i], AttrAtt( j ));
AttrCode( atrlist[i], AttrCode( j ));
}
else
{
while( Attrs() > temp2 )
AttrDelete( temp2 );
return;
}
}
}
}
}
while( Attrs() > temp2 )
AttrDelete( temp2 );
if( !access( model_dir+"..\\dogal1\\dogal1.ini" ))
{
Message( "DOGA-L1 がインストールされているディレクトリが\n"
+"見つかりません DOGA-L1 のインストールされている\n"
+"ディレクトリにある DOGAL1.INI を指定してください。\n" );
temp = GetFile( "データロード", "", "ini" );
if( typeof( temp ) == BOOLEAN )
{
Warning();
return;
}
if( access( temp ) == FALSE )
{
Warning();
Message( "ファイルが存在しません" );
return FALSE;
}
Bunkai( temp, ele );
if( toupper(ele[1]+"."+ele[2]) != "DOGAL1.INI" )
{
Warning();
Message( "指定されたファイルは DOGAL1.INI ではありません。" );
return;
}
}
else
ele[0] = model_dir+"..\\dogal1\\";
sel1 = Select();
SelectAll( TRUE );
sel2 = Select();
PolyInvisible( FALSE );
SelectObj( ObjCurrent(), TRUE, SELECT_UPDATE );
if( SelectPolygons() == 0 )
{
Warning();
if( MESSAGE == TRUE )
Message( "カレントオブジェクトには面がないので、パーツ登録を中止しました" );
Select( sel2 );
PolyInvisible( invisible_flag );
Select( sel1 );
return;
}
obj = ObjAppend( "_temp", model_dir+"_temp.suf" );
while( PolyLoad() )
{
PolyObj( obj );
PolyAppend( FALSE );
}
SelectObj( obj, TRUE, SELECT_UPDATE );
ConvexConvert();
if( double_flag == TRUE )
{
j = SelectPolygons();
PolyLoadInit();
while( PolyLoad())
{
PolyInvVertex();
PolyAppend( FALSE );
}
SelectObj( obj, TRUE, SELECT_XOR );
PolyShadeInv();
SelectObj( obj, TRUE, SELECT_UPDATE );
}
WriteFile( obj );
PolyDelete();
ObjDelete( obj );
WriteFrame( pers_mat, model_dir+"_temp.frm", "_temp", vector(0.45,0.29,0.61));
flag = FILE_OVERWRITE;
for (i = 0; i < Attrs(); i++) {
if (AttrPolygons(i) > 0) {
AttrWriteFile(model_dir+"_temp.atr", i, flag);
flag = FILE_APPEND;
}
}
delete( model_dir+"_temp.ind" );
fprint( model_dir+"_temp.ind", "-c128,96 -g\n"
+"-o"+model_dir+"_temp.bmp\n"
+model_dir+"_temp.frm\n"
+model_dir+"_temp.atr\n"
+model_dir+"_temp.suf" );
Child( "rendwin @"+model_dir+"_temp.ind", TRUE );
temp2 = ele[0];
if( access( model_dir+"error.log" ))
delete( model_dir+"error.log" );
if( filecheck_flag )
{
temp = fullpath( ObjFile( ObjCurrent()));
Bunkai( temp, ele );
Child( model_dir + "partsins.bat "+model_dir+" "+model_dir+"_temp.suf " + model_dir+"_temp001.bmp " + temp2 + " " + ele[1], TRUE );
}
else
{
print( model_dir + "partsins.bat "+model_dir+" _temp.suf _temp001.bmp " + temp2, "\n");
Child( model_dir + "partsins.bat "+model_dir+" _temp.suf _temp001.bmp " + temp2, TRUE );
}
if( access( model_dir+"error.log" ))
Message( "パーツデータの登録に失敗しました" );
else
{
ObjEdit( ObjCurrent(), FALSE );
UpdateObject();
}
Select( sel2 );
PolyInvisible( invisible_flag );
Select( sel1 );
Update( OVERWRITE );
}
var private m = MenuPosition(Menu_file);
var private mi;
for (mi = 0; mi < MenuItems(m); mi++)
{
if (MenuFunction(m,mi) == Close)
break;
}
if (mi == MenuItems(m))
mi = 2;
else
mi = mi + 2;
m = InsertMenu(m, mi, "メカデザインデータを開く... ", LoadMecha);
m = InsertMenu(m, mi+1, "-----------------------", SEPARATE_MENU);
m = InsertMenu(m, 2, "DOGA-L1のパーツを新規作成", NewDataforGENIE);
m = InsertMenu(m, 3, "---------------------", SEPARATE_MENU);
m = InsertMenu(m, MenuItems(m)-1, "DOGA-L1のパーツを登録... ", InstallParts);
m = InsertMenu(m, MenuItems(m)-1, "-----------------------", SEPARATE_MENU);
MenuPosition(m, Menu_file);
//filefunc[filefuncs][FILEFUNC_EXT] = "FSC";
//filefunc[filefuncs][FILEFUNC_LOAD] = LoadMechaFile;
//filefunc[filefuncs][FILEFUNC_SAVE] = 0;
//filefunc[filefuncs][FILEFUNC_COMMENT] = "メカデザインデータ(*.FSC)";
//filefuncs++;