0 Members and 1 Guest are viewing this topic.
typedef struct { HINSTANCE hDLL; HFONT hFont[1]; HPEN hPen[2]; HBRUSH hBrush[1];} GDIParams;// Some mesh groups referenced in the code#define MESHGRP_VC_LMFDDISP 2#define MESHGRP_VC_RMFDDISP 3#define AID_MFD1_LBUTTONS 7#define AID_MFD1_RBUTTONS 6#define AID_MFD2_LBUTTONS 4#define AID_MFD2_RBUTTONS 5#endif // !__HST_H
bool supplymodule::clbkLoadVC (int id){ static VCMFDSPEC mfds_left = {1, MESHGRP_VC_LMFDDISP}; static VCMFDSPEC mfds_right = {1, MESHGRP_VC_RMFDDISP}; id = 0; SetCameraDefaultDirection (_V(0,0,1)); oapiVCRegisterMFD (MFD_LEFT, &mfds_left); // left MFD oapiVCRegisterMFD (MFD_RIGHT, &mfds_right); // right MFD SURFHANDLE tex1 = oapiGetTextureHandle (vcmesh_tpl, 7); SURFHANDLE tex2 = oapiGetTextureHandle (vcmesh_tpl, 6); SURFHANDLE tex3 = oapiGetTextureHandle (vcmesh_tpl, 4); SURFHANDLE tex4 = oapiGetTextureHandle (vcmesh_tpl, 5); oapiVCSetNeighbours (-1, 1, -1, 2); //InitPanel(-1);// VC is -1 // MFD controls on the front panel oapiVCRegisterArea (AID_MFD1_LBUTTONS, _R(0, 0, 254, 254), PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN, PANEL_MAP_BACKGROUND, tex1); oapiVCSetAreaClickmode_Quadrilateral (AID_MFD1_LBUTTONS, _V(1.37,-0.41,2.71), _V(1.37,-0.41,2.69), _V(1.37,-0.58,2.71), _V(1.37,-0.58,2.69)); //Top left, Top Right, Bottom Left, Bottom Right oapiVCRegisterArea (AID_MFD1_RBUTTONS, _R(0, 0, 254, 254), PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN, PANEL_MAP_BACKGROUND, tex2); oapiVCSetAreaClickmode_Quadrilateral (AID_MFD1_RBUTTONS, _V(1.37,-0.41,2.31), _V(1.37,-0.41,2.29), _V(1.37,-0.58,2.31), _V(1.37,-0.58,2.29)); oapiVCRegisterArea (AID_MFD2_LBUTTONS, _R(0, 0, 254, 254), PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN, PANEL_MAP_BACKGROUND, tex3); oapiVCSetAreaClickmode_Quadrilateral (AID_MFD2_LBUTTONS, _V(1.37,-0.41,2.21), _V(1.37,-0.41,2.19), _V(1.37,-0.58,2.21), _V(1.37,-0.58,2.19)); oapiVCRegisterArea (AID_MFD2_RBUTTONS, _R(0, 0, 254, 254), PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN, PANEL_MAP_BACKGROUND, tex4); oapiVCSetAreaClickmode_Quadrilateral (AID_MFD2_RBUTTONS, _V(1.37,-0.41,1.81), _V(1.37,-0.41,1.79), _V(1.37,-0.58,1.81), _V(1.37,-0.58,1.79)); return true;}bool supplymodule::clbkVCMouseEvent (int id, int event, VECTOR3 &p){ static int ctrl = 0, mode = 0; static double py = 0; // Process other controls switch (id) { case AID_MFD1_LBUTTONS: case AID_MFD1_RBUTTONS: case AID_MFD2_LBUTTONS: case AID_MFD2_RBUTTONS: { double dp; if (modf (p.y*23.0/4.0, &dp) < 0.75) { int mfd = (id <= AID_MFD1_RBUTTONS ? MFD_LEFT : MFD_RIGHT); int bt = (int)dp + (id == AID_MFD1_LBUTTONS || id == AID_MFD2_LBUTTONS ? 0 : 6); oapiProcessMFDButton (mfd, bt, event); return true; } } break; }}void supplymodule::clbkMFDMode (int mfd, int mode){ switch (mfd) { case MFD_LEFT: oapiTriggerRedrawArea (0, 0, AID_MFD1_LBUTTONS); oapiTriggerRedrawArea (0, 0, AID_MFD1_RBUTTONS); break; case MFD_RIGHT: oapiTriggerRedrawArea (0, 0, AID_MFD2_LBUTTONS); oapiTriggerRedrawArea (0, 0, AID_MFD2_RBUTTONS); break; }}bool supplymodule::clbkVCRedrawEvent (int id, int event, SURFHANDLE surf){ switch (id) { case AID_MFD1_LBUTTONS: RedrawPanel_MFDButton (surf, MFD_LEFT, 0); return true; case AID_MFD1_RBUTTONS: RedrawPanel_MFDButton (surf, MFD_LEFT, 1); return true; case AID_MFD2_LBUTTONS: RedrawPanel_MFDButton (surf, MFD_RIGHT, 0); return true; case AID_MFD2_RBUTTONS: RedrawPanel_MFDButton (surf, MFD_RIGHT, 1); return true; } return false;}void supplymodule::RedrawPanel_MFDButton (SURFHANDLE surf, int mfd, int side){ HDC hDC = oapiGetDC (surf); SelectObject (hDC, g_Param.hFont[0]); SetTextColor (hDC, RGB(0, 200, 0)); SetTextAlign (hDC, TA_CENTER); SetBkMode (hDC, TRANSPARENT); const char *label; for (int bt = 0; bt < 6; bt++) { if (label = oapiMFDButtonLabel (mfd, bt+side*6)) TextOut (hDC, 256, 42*bt, label, strlen(label)); else break; } oapiReleaseDC (surf, hDC);}
// ==============================================================// API callback interface// ==============================================================// --------------------------------------------------------------// Module initialisation// --------------------------------------------------------------DLLCLBK void InitModule (HINSTANCE hModule){ g_Param.hDLL = hModule; oapiRegisterCustomControls (hModule); // allocate GDI resources g_Param.hFont[0] = CreateFont (-10, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, "Arial"); g_Param.hPen[0] = CreatePen (PS_SOLID, 3, RGB (120,220,120)); g_Param.hPen[1] = CreatePen (PS_SOLID, 1, RGB (220,220,120)); g_Param.hBrush[0] = CreateSolidBrush (RGB(0,128,0));}// --------------------------------------------------------------// Module cleanup// --------------------------------------------------------------DLLCLBK void ExitModule (HINSTANCE hModule){ int i; // deallocate GDI resources for (i = 0; i < 1; i++) DeleteObject (g_Param.hFont[i]); for (i = 0; i < 2; i++) DeleteObject (g_Param.hPen[i]); for (i = 0; i < 1; i++) DeleteObject (g_Param.hBrush[i]); oapiUnregisterCustomControls (g_Param.hDLL);}
#define AID_MFD1_LBUTTONS 7#define AID_MFD1_RBUTTONS 6#define AID_MFD2_LBUTTONS 4#define AID_MFD2_RBUTTONS 5
TEXTURES 2shuttlepb.ddsshuttlepbwing.dds
oapi::Sketchpad* skp = oapiGetSketchpad (surf); skp->SetFont(g_Param.hFont[0]); skp->SetTextColor (RGB(0, 200, 0)); skp->SetTextAlign (CENTER, BASELINE); skp->SetBackgroundMode (BK_TRANSPARENT); const char *label; for (int bt = 0; bt < 6; bt++) { if (label = oapiMFDButtonLabel (mfd, bt+side*6)) skp->Text(256, 42*bt, label, strlen(label)); else break; } oapiReleaseSketchpad(skp);
ea76620 a écrit:Quelques images pour illustrer la situation :Ici, on peut voir les numéros des groupes dans mesh wizard :Ils correspondent bien à ceci :Code: [Select]#define AID_MFD1_LBUTTONS 7#define AID_MFD1_RBUTTONS 6#define AID_MFD2_LBUTTONS 4#define AID_MFD2_RBUTTONS 5
#define GRP_Lighted 0#define GRP_GrisFonce 1#define GRP_MainArriere 2#define GRP_ANIM_BayDoorLeft 3#define GRP_ANIM_BayDoorRight 4#define GRP_ANIM_PorteAzure 5#define GRP_Noir 6#define GRP_ANIM_Ascensceur 7#define GRP_ANIM_Roues 8#define GRP_ANIM_VitreRoue 9
Regarde si ton exporteur à une fonctionnalité dans le genre ou une fonction de tri ?
il faut spécifier le numéro de texture. Relis mon dernier post pour l'explication des numéros de texture.
Ah oui Bibi à raison sur ce bug, c'est bien le No de texture