00001
00002
00003
00004
00005
00006
00007
00008 #define MODULE_EXTERNAL 1
00009
00010 #include "design.h"
00011
00012 static void LoadRenderer(int anim);
00013
00014 void LoadMDIviewer(void){
00015 BOOL n=FALSE;
00016 int result;
00017 char modulename[255];
00018 HWND hWnd;
00019 if((hWnd=FindWindow("OFX:Viewer",NULL)) == NULL){
00020 strcpy(modulename,gszHomeDir);strcat(modulename,"mdiview.exe");
00021 n=TRUE;
00022 result=WinExec(modulename,SW_SHOW);
00023 if(result < 32){
00024 if(result == ERROR_FILE_NOT_FOUND ||
00025 result == ERROR_PATH_NOT_FOUND)SendPrgmQuery(IDQ_NOSTART,3);
00026 return;
00027 }
00028 hWnd=FindWindow("OFX:Viewer",NULL);
00029 }
00030 if(IsWindow(hWnd)){
00031 SetForegroundWindow(hWnd);
00032 BringWindowToTop(hWnd);
00033 ShowWindow(hWnd,SW_SHOW);
00034 if(n)PostMessage(hWnd,WM_COMMAND,1004,0);
00035 }
00036 return;
00037 }
00038
00039
00040 BOOL LoadHeightField(HWND hwnd){
00041 BOOL status=FALSE;
00042 HMODULE hLib;
00043 FARPROC fpFun;
00044 char lname[256];
00045 X__STRUCTURE *Evs;
00046 BOOL (*fpFun1)(HWND, char *, X__STRUCTURE *);
00047 if(SelectSfxFileName(0,gszGIFfile,gszGIFdir,IDX_MISC_HEIGHTFIELD,
00048 "(*.GIF)|*.gif|",ghwnd_main) == FALSE)return FALSE;
00049 EDIT_ACTION=YES;
00050 Evs=&EviStructure;
00051 strcpy(lname,gszHomeDir); strcat(lname,"height.dll");
00052 if((hLib=LoadLibrary(lname)) != NULL){
00053 if((fpFun=GetProcAddress(hLib,"_HeightField")) != NULL){
00054 fpFun1 = (void *)fpFun;
00055 status=(*fpFun1)(hwnd,gszGIFfile,Evs);
00056 }
00057 else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00058 FreeLibrary(hLib);
00059 }
00060 else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00061 return status;
00062 }
00063
00064 BOOL TraceImageOutline(HWND hwnd){
00065 BOOL status=FALSE;
00066 static HMODULE hLibTrace=NULL;
00067 FARPROC fpFun;
00068 char lname[256];
00069 X__STRUCTURE *Evs;
00070 BOOL (*fpFun1)(HWND, HWND, char *, X__STRUCTURE *);
00071 if(hLibTrace != NULL){
00072 return FALSE;
00073 }
00074 if(SelectSfxFileName(0,gszIMGfile,gszIMGdir,IDX_MISC_TRACE,
00075 "All Image Formats|*.bmp;*.gif;*.tga|"
00076 "(*.GIF)|*.gif|(*.TGA)|*.tga|(*.BMP)|*.bmp|",
00077 hwnd) == FALSE)return FALSE;
00078 EDIT_ACTION=YES;
00079 Evs=&EviStructure;
00080 strcpy(lname,gszHomeDir); strcat(lname,"trace.dll");
00081 if((hLibTrace=LoadLibrary(lname)) != NULL){
00082 if((fpFun=GetProcAddress(hLibTrace,"_TraceOutline")) != NULL){
00083 fpFun1 = (void *)fpFun;
00084 status=(*fpFun1)(hwnd,ghwnd_info,gszIMGfile,Evs);
00085 }
00086 else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00087 FreeLibrary(hLibTrace);
00088 }
00089 else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00090 hLibTrace=NULL;
00091 return status;
00092 }
00093
00094 BOOL PaintMapOutline(HWND hwnd){
00095 BOOL status=FALSE;
00096 static HMODULE hLibTrace=NULL;
00097 FARPROC fpFun;
00098 char lname[256];
00099 unsigned char *pixels;
00100 long w,h,id;
00101 IMAGEMAP *map;
00102 RAMIMAGE *image;
00103 X__STRUCTURE *Evs;
00104 BOOL (*fpFun1)(HWND, HWND, unsigned char *, long, long, long, X__STRUCTURE *);
00105 if(hLibTrace != NULL){
00106 return FALSE;
00107 }
00108 if(nImaps < 1){ SendPrgmQuery(IDQ_NOBRUSH,0); return status; }
00109 else if(nImaps > 1){
00110 if((id=RequestMapID(ghwnd_main,"Select by Map",0)) < 0)return status;
00111 }
00112 else id=0;
00113 map = &(iMap[id]);
00114 image = NULL;
00115 if(map->s == 1 && map->S != NULL && map->Type != ANIMBRUSH)image = &(map->si);
00116 if(image == NULL)return status;
00117 if( !image->in_use && image->filename == NULL &&
00118 image->data == NULL && image->size == 0)return status;
00119
00120 pixels=MakeFullMemoryImage(image,&w,&h);
00121
00122 if(pixels == NULL){MessageBox(NULL,"Bad Image Make",NULL,MB_OK); return status; }
00123
00124 EDIT_ACTION=YES;
00125 Evs=&EviStructure;
00126 strcpy(lname,gszHomeDir); strcat(lname,"paintmap.dll");
00127 if((hLibTrace=LoadLibrary(lname)) != NULL){
00128 if((fpFun=GetProcAddress(hLibTrace,"_PaintMap")) != NULL){
00129 fpFun1 = (void *)fpFun;
00130 status=(*fpFun1)(hwnd,ghwnd_info,pixels,w,h,id,Evs);
00131 }
00132 else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00133 FreeLibrary(hLibTrace);
00134 }
00135 else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00136 hLibTrace=NULL;
00137 X__Free(pixels);
00138 return status;
00139 }
00140
00141
00142 BOOL ExecuteExternalAction(int id,HWND hwnd){
00143 static BOOL inuse=FALSE;
00144 BOOL status=FALSE;
00145 HMODULE hLib;
00146 FARPROC fpFun;
00147 X__STRUCTURE *Evs;
00148 BOOL (*fpFun1)(HWND, HWND, X__STRUCTURE *);
00149 int l;
00150 char fname[255];
00151 if(tool > INZOOM)DisengageDesignerTool();
00152 if(sktool || SelectedBrush >= 0 || SelectedShader >= 0){
00153 SendPrgmQuery(IDQ_TOOLNOTFINISHED,0);
00154 return FALSE;
00155 }
00156 if(id >= nActionsList)return FALSE;
00157 Empty_Undo();
00158 EDIT_ACTION=YES;
00159 Save_Undo(2);
00160 strcpy(fname,ActionsList[id]);
00161 l=strlen(fname);
00162 fname[l-1]='l';
00163 fname[l-2]='l';
00164 fname[l-3]='d';
00165 if(inuse)return FALSE;
00166 inuse=TRUE;
00167 Evs=&EviStructure;
00168 if((hLib=LoadLibrary(fname)) != NULL){
00169 if((fpFun=GetProcAddress(hLib,"_Xmodeler")) != NULL){
00170 fpFun1 = (void *)fpFun;
00171 status=(*fpFun1)(hwnd,ghwnd_info,Evs);
00172 }
00173 else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00174 FreeLibrary(hLib);
00175 }
00176 else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00177 inuse=FALSE;
00178 return status;
00179 return TRUE;
00180 }
00181
00182 BOOL ExecuteExternalModeler(HWND hwnd){
00183 long l;
00184 static BOOL inuse=FALSE;
00185 BOOL status=FALSE;
00186 HMODULE hLib;
00187 FARPROC fpFun;
00188 X__STRUCTURE *Evs;
00189 BOOL (*fpFun1)(HWND, HWND, X__STRUCTURE *);
00190 if(inuse)return FALSE;
00191 l=strlen(gszDLMfile);
00192 strcpy((gszDLMfile+l-3),"dfx");
00193 if(SelectSfxFileName(0,gszDLMfile,gszDLMdir,IDX_MISC_EXTMODELER,
00194 "(*.dfx)|*.dfx|",ghwnd_main) == FALSE)return FALSE;
00195 l=strlen(gszDLMfile);
00196 strcpy((gszDLMfile+l-3),"dll");
00197 inuse=TRUE;
00198 EDIT_ACTION=YES;
00199 Evs=&EviStructure;
00200 if((hLib=LoadLibrary(gszDLMfile)) != NULL){
00201 if((fpFun=GetProcAddress(hLib,"_Xmodeler")) != NULL){
00202 fpFun1 = (void *)fpFun;
00203 status=(*fpFun1)(hwnd,ghwnd_info,Evs);
00204 }
00205 else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00206 FreeLibrary(hLib);
00207 }
00208 else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00209 inuse=FALSE;
00210 return status;
00211 }
00212
00213 BOOL ExecuteBezierModeler(HWND hwnd){
00214 char lname[256];
00215 static BOOL inuse=FALSE;
00216 BOOL status=FALSE;
00217 HMODULE hLib;
00218 FARPROC fpFun;
00219 X__STRUCTURE *Evs;
00220 BOOL (*fpFun1)(HWND, HWND, X__STRUCTURE *);
00221 if(inuse)return FALSE;
00222 inuse=TRUE;
00223 EDIT_ACTION=YES;
00224 Evs=&EviStructure;
00225 strcpy(lname,gszHomeDir); strcat(lname,"bezier.dll");
00226 if((hLib=LoadLibrary(lname)) != NULL){
00227 if((fpFun=GetProcAddress(hLib,"_BezierModeler")) != NULL){
00228 fpFun1 = (void *)fpFun;
00229 status=(*fpFun1)(hwnd,ghwnd_info,Evs);
00230 }
00231 else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00232 FreeLibrary(hLib);
00233 }
00234 else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00235 inuse=FALSE;
00236 return status;
00237 }
00238
00239 long LoadXmodel(char *name, char *library){
00240 char lname[255],text[128];
00241 long rv=0;
00242 HMODULE hLib=NULL;
00243 FARPROC fpFun;
00244 X__STRUCTURE *Evs;
00245 long (*fpFun1)(HWND, char *, char *, X__STRUCTURE *);
00246 Evs=&EviStructure;
00247 strcpy(lname,gszHomeDir); strcat(lname,library);
00248 if((hLib=LoadLibrary(lname)) != NULL){
00249 if((fpFun=GetProcAddress(hLib,"_Convert")) != NULL){
00250 fpFun1 = (void *)fpFun;
00251 sprintf(lname,"%sW_$.mfx",TempPath);
00252 rv=(*fpFun1)(ghwnd_main,name,lname,Evs);
00253 }
00254 else{
00255 SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00256 }
00257 FreeLibrary(hLib); hLib=NULL;
00258 }
00259 else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00260 if(rv > 0)LoadObject(lname,0);
00261 remove(lname);
00262 return rv;
00263 }
00264
00265 void Export3DSmodel(HWND hwnd){
00266 if(SelectSfxFileName(1,gsz3DSfile,gsz3DSdir,IDX_MISC_EXPORT3DS,
00267 "(*.3DS)|*.3ds|",ghwnd_main) == FALSE)return;
00268 AppendFileExtension(gsz3DSfile,".3ds");
00269 ExportModel(gsz3DSfile,"3dsout.dll");
00270 return;
00271 }
00272
00273 void ExportDXFmodel(HWND hwnd){
00274 if(SelectSfxFileName(1,gszDXFfile,gszDXFdir,IDX_MISC_EXPORTDXF,
00275 "(*.DXF)|*.dxf|",ghwnd_main) == FALSE)return;
00276 AppendFileExtension(gszDXFfile,".dxf");
00277 ExportModel(gszDXFfile,"dxfout.dll");
00278 return;
00279 }
00280
00281 long ExportModel(char *name, char *library){
00282 char lname[255];
00283 long rv=0;
00284 HMODULE hLib=NULL;
00285 FARPROC fpFun;
00286 X__STRUCTURE *Evs;
00287 long (*fpFun1)(HWND, char *, X__STRUCTURE *);
00288 Evs=&EviStructure;
00289 strcpy(lname,gszHomeDir); strcat(lname,library);
00290 if((hLib=LoadLibrary(lname)) != NULL){
00291 if((fpFun=GetProcAddress(hLib,"_Export")) != NULL){
00292 fpFun1 = (void *)fpFun;
00293 rv=(*fpFun1)(ghwnd_main,name,Evs);
00294 }
00295 else{
00296 SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00297 }
00298 FreeLibrary(hLib); hLib=NULL;
00299 }
00300 else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00301 return rv;
00302 }
00303
00304 BOOL LoadInternalAction(char *library){
00305 char lname[128];
00306 static BOOL inuse=FALSE;
00307 BOOL status=FALSE;
00308 HMODULE hLib;
00309 FARPROC fpFun;
00310 X__STRUCTURE *Evs;
00311 BOOL (*fpFun1)(HWND, HWND, X__STRUCTURE *);
00312 if(tool > INZOOM)DisengageDesignerTool();
00313 if(sktool || SelectedBrush >= 0 || SelectedShader >= 0){
00314 SendPrgmQuery(IDQ_TOOLNOTFINISHED,0);
00315 return FALSE;
00316 }
00317 if(inuse)return FALSE;
00318 inuse=TRUE;
00319 Empty_Undo();
00320 EDIT_ACTION=YES;
00321 Save_Undo(2);
00322 Evs=&EviStructure;
00323 strcpy(lname,gszHomeDir); strcat(lname,library);
00324 if((hLib=LoadLibrary(lname)) != NULL){
00325 if((fpFun=GetProcAddress(hLib,"_Xmodeler")) != NULL){
00326 fpFun1 = (void *)fpFun;
00327 status=(*fpFun1)(ghwnd_main,ghwnd_info,Evs);
00328 DrawModel();
00329 UpdateCounters();
00330 UpdateSkTreeView();
00331 }
00332 else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00333 FreeLibrary(hLib);
00334 }
00335 else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00336 inuse=FALSE;
00337 return TRUE;
00338 }
00339
00340
00341
00342
00343 #include "loadview.c"
00344
00345
00346
00347 #include "..\animate\callall.h"
00348
00349 static void LoadRenderer(int anim){
00350 char modulename[256];
00351 HWND hWnd,hWndCall;
00352 int result;
00353 if((hWnd=FindWindow("OFX:RenderClass",NULL)) != NULL){
00354 if (anim == 1)
00355 PostMessage(hWnd,WM_COMMAND,IDM_CALLBACK_SETUP_PREVIEW,0);
00356 else if(anim == 2)
00357 PostMessage(hWnd,WM_COMMAND,IDM_CALLBACK_RUN,(WORD)1);
00358 else if(anim == 3){
00359 if(ghwndOpenGLview == NULL)hWndCall=ghwnd_view;
00360 else hWndCall=ghwndOpenGLview;
00361 PostMessage(hWnd,WM_CALLBACK_MATERIAL,0,(LPARAM)hWndCall);
00362 }
00363 else
00364 SendMessage(hWnd,IDM_CALLBACK_SETUP_MODELLER,0,0);
00365 if(anim != 3){
00366 SetForegroundWindow(hWnd);
00367 BringWindowToTop(hWnd);
00368 ShowWindow(hWnd,SW_SHOW);
00369 }
00370 return;
00371 }
00372 else{
00373 strcpy(modulename,gszHomeDir);strcat(modulename,"render.exe $SAL$");
00374 result=WinExec(modulename,SW_SHOW);
00375 if(result < 32){
00376 if(result == ERROR_FILE_NOT_FOUND ||
00377 result == ERROR_PATH_NOT_FOUND)SendPrgmQuery(IDQ_NOSTART,3);
00378 }
00379 if((hWnd=FindWindow("OFX:RenderClass",NULL)) != NULL){
00380 if (anim == 1)
00381 PostMessage(hWnd,WM_COMMAND,IDM_CALLBACK_SETUP_PREVIEW,0);
00382 else if(anim == 2)
00383 PostMessage(hWnd,WM_COMMAND,IDM_CALLBACK_RUN,(WORD)1);
00384 else if(anim == 3){
00385 if(ghwndOpenGLview == NULL)hWndCall=ghwnd_view;
00386 else hWndCall=ghwndOpenGLview;
00387 PostMessage(hWnd,WM_CALLBACK_MATERIAL,0,(LPARAM)hWndCall);
00388 }
00389 else
00390 PostMessage(hWnd,IDM_CALLBACK_SETUP_MODELLER,0,0);
00391 if(anim != 3){
00392 SetForegroundWindow(hWnd);
00393 BringWindowToTop(hWnd);
00394 ShowWindow(hWnd,SW_SHOW);
00395 }
00396 }
00397 else SendPrgmQuery(IDQ_NOSTART,3);
00398 }
00399 return;
00400 }
00401
00402 void Render_View(int light_pos, long how){
00403 char config_file[64],SCRIPTfilename[256],OBJECTfilename[256];
00404 long i,narg;
00405 FILE *fs,*fc;
00406 HCURSOR lhcurSave;
00407 double lpx,lpy,lpz,rad,dr,llpx,llpy,llpz,Fi,Theta;
00408 if(type_of_view){
00409 Fi = PerspFi; Theta = -PerspTheta;
00410 }
00411 else{
00412 Fi = -PerspFi; Theta = PerspTheta;
00413 }
00414 dr=PI/180.0;
00415 sprintf(OBJECTfilename,"%sW_$.mfx",TempPath);
00416 remove(OBJECTfilename);
00417 lhcurSave=SetCursor(ghcurWait);
00418 SaveObject(OBJECTfilename,2);
00419 SetCursor(lhcurSave);
00420 sprintf(SCRIPTfilename,"%sW_$.scr",TempPath);
00421 if((fs=fopen(SCRIPTfilename,"w")) == NULL){
00422 remove(OBJECTfilename);
00423 return;
00424 }
00425 fprintf(fs,"Renderer-Script\n");
00426 fprintf(fs,"1 1\n");
00427 lpx=(double)(TVpointX+TVsizeX/2);
00428 lpy=(double)(TVpointY+TVsizeY/2);
00429 lpz=(double)(TVpointZ+TVsizeZ/2);
00430 rad=TVsizeX*5;
00431 llpx = lpx-rad*10.0*cos(-(Theta+30)*dr)*sin(-(Fi+45)*dr);
00432 llpy = lpy-rad*10.0*cos(-(Theta+30)*dr)*cos(-(Fi+45)*dr);
00433 llpz = lpz-rad*10.0*sin(-(Theta+30)*dr);
00434 lpx -= rad*cos(-Theta*dr)*sin(-Fi*dr);
00435 lpy -= rad*cos(-Theta*dr)*cos(-Fi*dr);
00436 lpz -= rad*sin(-Theta*dr);
00437 fprintf(fs,"e %.1f %.1f %.1f\n",lpx,lpy,lpz);
00438 fprintf(fs," %.1f %.1f %.1f\n",Fi,0.0,-Theta);
00439 fprintf(fs," %.3f %.3f %.3f\n",3.5,3.5,3.5);
00440 fprintf(fs," %d %d %.1f\n",0,0,0.0);
00441 #if 0
00442 if(light_pos == 0){
00443 fprintf(fs,"l 0\n 255 255 255 1.0\n");
00444 fprintf(fs," %.1f %.1f %.1f\n",llpx,llpy,llpz);
00445 fprintf(fs," 0.0 0.0 0.0\n 0 0 0.0\n");
00446 fprintf(fs," 0 1.0 0.0 0.0\n");
00447 }
00448 #endif
00449 fprintf(fs,"s %ld %ld %ld\n",
00450 (long)Preferences.Vcolour[0],
00451 (long)Preferences.Vcolour[1],
00452 (long)Preferences.Vcolour[2]);
00453 fprintf(fs," %ld %ld %ld\n",
00454 (long)Preferences.Vcolour[0],
00455 (long)Preferences.Vcolour[1],
00456 (long)Preferences.Vcolour[2]);
00457 fprintf(fs," 0.0 0.1 0.08\n");
00458 fprintf(fs," 0 0 0\n");
00459 fprintf(fs," 0 0 0\n");
00460 fprintf(fs," 0\n");
00461 fprintf(fs,"o 1\n");
00462 fprintf(fs,"%s\n",OBJECTfilename);
00463 fprintf(fs,"0\n");
00464 fprintf(fs," %.1f %.1f %.1f\n",0.0,0.0,0.0);
00465 fprintf(fs," %.1f %.1f %.1f\n",0.0,0.0,0.0);
00466 fprintf(fs," %.3f %.3f %.3f\n",1.0,1.0,1.0);
00467 fprintf(fs," %d %d %.1f %d %.3f\n",0,0,0.0,0,1.0);
00468 fprintf(fs," 1 1 1\n");
00469 fprintf(fs,"f\n");
00470 fprintf(fs,"q\n");
00471 fclose(fs);
00472 sprintf(SCRIPTfilename,"%sW_$",TempPath);
00473 if (how == 1)LoadRenderer(2);
00474 else if(how == 0){
00475 LoadRenderer(0);
00476 EnableMenuItem(GetMenu(ghwnd_main),IDM_VIEW_RENDERNOW,MF_ENABLED);
00477 }
00478 else if(how == 2)LoadRenderer(3);
00479 return;
00480 }
00481
00482 void ShaderPreview(void){
00483 LoadRenderer(1);
00484 }
00485
00486