ORBITER-FORUM will be temporarily closed at 2026-07-23 18:00 UTC while we complete some OF maintenance tasks. The amount of downtime is expected to take up to one hour, but probably less.
A Sketchpad solution sounds like the best approach to me.... what would be needed for that?
Would something help reducing the "Waiting present" times?
The ADI ball is spherical and if I remember my calculations it has a diameter equal to the diameter of the "window" times the square root of 2.* I have a picture of the ADI somewhere... let me find it.
The needles and arrows are probably not that expensive... or are they?
So, any progress in towards SSU 4.0?
I'm currently doing some small changes to the manual. I don't know if anybody seen it, but 1 or 2 weeks ago I added a small checklist for Centaur deployment.... and given that the IUS panel isn't working fully I'm wondering if I should do a (simplified) checklist for it as well.
Other than that, the only major things missing are the CISS bellows stuff and then me updating the Centaur images in the manual.
Could someone take a look at issue#103? It's the only one that isn't a major system undertaking and would fit well with a 4.0 release.
There are several procedures that could be implemented with regards to the IUS. The ones I'm thinking about are:
- PCP/CIU/SSP ACT AND C/O (2-6)
- ACTUATOR ENGAGEMENT (3-6)
#include "gcAPI.h"
#include "Sketchpad2.h"
// ---- Init Code ----
SKETCHMESH hMesh = NULL;
if (gcInitialize()) {
hMesh = gcLoadSketchMesh("Phobos");
}
// ---- Render Code -----
if (gcSketchpadVersion(pSkp)==2 && hMesh) {
// It is safe to cast to Sketchpad2 only if version returns 2
oapi::Sketchpad2 *pSkp2 = (oapi::Sketchpad2 *)pSkp;
// Build World Matrix, zFar clip plane is at max(W,H) and zNear plane is at 0.0f
FMATRIX4 mat;
gcWorldMatrix(&mat, _V(float(W/2), float(H/2), float(W)), _V(1,0,0), _V(0,0,1), 200.0f);
// Apply World transform
pSkp2->SetWorldTransform(&mat);
// Render Mesh group 0
// Resulting color.rgba = Texture.rgba * Material.rgba * Pen.rgba
pSkp2->DrawMeshGroup(hMesh, 0, SMOOTH_SHADE);
// Reset to default world transform
pSkp2->SetWorldTransform();
}
// ---- Cleanup Code ----
if (hMesh) {
gcDeleteSketchMesh(hMesh);
}
Is there also a way in gcAPI to create a mesh like it is done for Panel2D?
What do you mean ? I have never created a panel for Orbiter but as far as I can tell there exists no API to create a mesh. Panel mesh is created in a 3D editor like any other Orbiter mesh.
void DeltaGlider::DefinePanelMain (PANELHANDLE hPanel)
{
MESHGROUP grp;
memset (&grp, 0, sizeof(MESHGROUP));
ReleaseSurfaces();
const DWORD NVTX = 4, NIDX = 6;
const DWORD texw = PANEL2D_TEXW, texh = PANEL2D_TEXH;
const DWORD panelw = PANEL2D_WIDTH, panelh = 572, panely0 = PANEL2D_TEXH-572;
int xofs, g = 0;
// panel billboard definition
static NTVERTEX VTX[NVTX] = {
{ 0, 0,0, 0,0,0, 0, 1.0f-(float)panelh/(float)texh},
{panelw, 0,0, 0,0,0, (float)panelw/(float)texw,1.0f-(float)panelh/(float)texh},
{panelw,panelh,0, 0,0,0, (float)panelw/(float)texw,1},
{ 0,panelh,0, 0,0,0, 0, 1}
};
static WORD IDX[NIDX] = {
0,1,2,2,3,0
};
DWORD i, mfdgrp[2];
// Create the mesh for defining the panel geometry
if (hPanelMesh) oapiDeleteMesh (hPanelMesh);
hPanelMesh = oapiCreateMesh (0, 0);
for (i = 0; i < 5; i++)
oapiAddMeshGroup (hPanelMesh, &grp);
// 1. Define panel elements underneath the the main panel (mesh group 0)
// Attitude, HSI, AOA and VS tapes
for (i = 0; i < 4; i++)
instr[i]->AddMeshData2D (hPanelMesh, 0);
// 2. Define main panel background (group 1)
oapiAddMeshGroupBlock (hPanelMesh, 1, VTX, NVTX, IDX, NIDX);
// 3. Define panel elements on top of the main panel (group 2)
for (i = 4; i < ninstr_main; i++)
instr[i]->AddMeshData2D (hPanelMesh, 2);
aap->AddMeshData2D (hPanelMesh, 2);
// 4. Define left and right MFD displays (groups 3+4)
static NTVERTEX VTX_MFD[2][4] = {
{{ 216, 65,0, 0,0,0, 0,0},
{ 504, 65,0, 0,0,0, 1,0},
{ 216,353,0, 0,0,0, 0,1},
{ 504,353,0, 0,0,0, 1,1}},
{{ 778, 65,0, 0,0,0, 0,0},
{1066, 65,0, 0,0,0, 1,0},
{ 778,353,0, 0,0,0, 0,1},
{1066,353,0, 0,0,0, 1,1}}
};
static WORD IDX_MFD[6] = {
0,1,2,3,2,1
};
for (i = 0; i < 2; i++) {
mfdgrp[i] = 3+i;
oapiAddMeshGroupBlock (hPanelMesh, mfdgrp[i], VTX_MFD[i], 4, IDX_MFD, 6);
}
SetPanelBackground (hPanel, &panel2dtex, 1, hPanelMesh, panelw, panelh, 190,
PANEL_ATTACH_BOTTOM | PANEL_MOVEOUT_BOTTOM);
// Define MFD layout (display and buttons)
RegisterPanelMFDGeometry (hPanel, MFD_LEFT, 0, mfdgrp[0]);
RegisterPanelMFDGeometry (hPanel, MFD_RIGHT, 0, mfdgrp[1]);
xofs = 173; // left MFD
RegisterPanelArea (hPanel, AID_MFD1_BBUTTONS, _R( 51+xofs,359,321+xofs,377), PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_ONREPLAY, panel2dtex, instr[30]); // bottom button row
RegisterPanelArea (hPanel, AID_MFD1_LBUTTONS, _R( xofs,100, 25+xofs,323), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED|PANEL_MOUSE_ONREPLAY, panel2dtex, instr[31]); // left button column
RegisterPanelArea (hPanel, AID_MFD1_RBUTTONS, _R(348+xofs,100,373+xofs,323), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED|PANEL_MOUSE_ONREPLAY, panel2dtex, instr[32]); // right button column
xofs = 736; // right MFD
RegisterPanelArea (hPanel, AID_MFD2_BBUTTONS, _R( 51+xofs,359,321+xofs,377), PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_ONREPLAY, panel2dtex, instr[33]); // bottom button row
RegisterPanelArea (hPanel, AID_MFD2_LBUTTONS, _R( xofs,100, 25+xofs,323), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED|PANEL_MOUSE_ONREPLAY, panel2dtex, instr[34]); // left button column
RegisterPanelArea (hPanel, AID_MFD2_RBUTTONS, _R(348+xofs,100,373+xofs,323), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED|PANEL_MOUSE_ONREPLAY, panel2dtex, instr[35]); // right button column
RegisterPanelArea (hPanel, AID_HORIZON, _R(0,0,0,0), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_IGNORE, 0, instr[0]);
RegisterPanelArea (hPanel, AID_HSIINSTR, _R(0,0,0,0), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_IGNORE, 0, instr[1]);
RegisterPanelArea (hPanel, AID_AOAINSTR, _R(0,0,0,0), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_IGNORE, panel2dtex, instr[2]);
RegisterPanelArea (hPanel, AID_VSINSTR, _R(0,0,0,0), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_IGNORE, panel2dtex, instr[3]);
RegisterPanelArea (hPanel, AID_MAINPROP, _R(0,0,0,0), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_IGNORE, panel2dtex, instr[4]);
RegisterPanelArea (hPanel, AID_NAVMODE, _R(1121,119,1197,273), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN, panel2dtex, instr[5]);
RegisterPanelArea (hPanel, AID_ELEVATORTRIM, _R(1242,135,1262,195), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_LBUP, panel2dtex, instr[6]);
RegisterPanelArea (hPanel, AID_AIRBRAKE, _R(1242,215,1262,275), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN, panel2dtex, instr[7]);
RegisterPanelArea (hPanel, AID_ENGINEMAIN, _R(108,52,161,227), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBPRESSED, panel2dtex, instr[8]);
RegisterPanelArea (hPanel, AID_ENGINEHOVER, _R(108, 234,161,374), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_LBPRESSED, panel2dtex, instr[9]);
RegisterPanelArea (hPanel, AID_ATTITUDEMODE, _R(1136,69,1176,113), PANEL_REDRAW_MOUSE, PANEL_MOUSE_DOWN, panel2dtex, instr[10]);
RegisterPanelArea (hPanel, AID_ADCTRLMODE, _R(1217,69,1257,113), PANEL_REDRAW_MOUSE, PANEL_MOUSE_DOWN, panel2dtex, instr[11]);
RegisterPanelArea (hPanel, AID_DOCKRELEASE, _R(1141,474,1172,504), PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBUP, panel2dtex, instr[12]);
RegisterPanelArea (hPanel, AID_HUDMODE, _R( 15, 18, 122, 33), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_ONREPLAY, panel2dtex, instr[13]);
RegisterPanelArea (hPanel, AID_GEARLEVER, _R(1230,286,1262,511), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN, panel2dtex, instr[14]);
RegisterPanelArea (hPanel, AID_PGIMBALMAINDISP, _R(0,0,0,0), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE, panel2dtex, instr[15]);
RegisterPanelArea (hPanel, AID_PGIMBALMAIN, _R( 63, 83, 98,125), PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_LBUP, panel2dtex, instr[16]);
RegisterPanelArea (hPanel, AID_PGIMBALMAINMODE, _R(57,139,69,151), PANEL_REDRAW_USER | PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN, panel2dtex, instr[17]);
RegisterPanelArea (hPanel, AID_YGIMBALMAINDISP, _R(0,0,0,0), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE, panel2dtex, instr[18]);
RegisterPanelArea (hPanel, AID_YGIMBALMAIN, _R( 56, 178, 98,213), PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_LBUP, panel2dtex, instr[19]);
RegisterPanelArea (hPanel, AID_YGIMBALMAINMODE, _R(8,165,20, 211), PANEL_REDRAW_USER | PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN, panel2dtex, instr[20]);
RegisterPanelArea (hPanel, AID_HBALANCEDISP, _R(0,0,0,0), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE, panel2dtex, instr[21]);
RegisterPanelArea (hPanel, AID_HOVERBALANCE, _R( 63, 304,79, 348), PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_LBUP, panel2dtex, instr[22]);
RegisterPanelArea (hPanel, AID_HBALANCEMODE, _R( 57, 354, 69,366), PANEL_REDRAW_USER | PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN, panel2dtex, instr[23]);
RegisterPanelArea (hPanel, AID_GEARINDICATOR, _R(0,0,0,0), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE, panel2dtex, instr[24]);
RegisterPanelArea (hPanel, AID_NOSECONELEVER, _R(1141,327,1180,421), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN, panel2dtex, instr[25]);
RegisterPanelArea (hPanel, AID_NOSECONEINDICATOR, _R(0,0,0,0), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE, panel2dtex, instr[26]);
RegisterPanelArea (hPanel, AID_SWITCHARRAY, _R( 855,415,1106,453), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN, panel2dtex, instr[27]);
RegisterPanelArea (hPanel, AID_WBRAKE_BOTH, _R(1221,494,1273,557), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBUP, panel2dtex, instr[28]);
RegisterPanelArea (hPanel, AID_MWS, _R(1071, 6,1098, 32), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_LBDOWN, panel2dtex, instr[29]);
if (ScramVersion()) {
RegisterPanelArea (hPanel, AID_ENGINESCRAM, _R(108,386,161,488), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBPRESSED, panel2dtex, instr[instr_scram0+0]);
RegisterPanelArea (hPanel, AID_GIMBALSCRAMDISP, _R(0,0,0,0), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE, panel2dtex, instr[instr_scram0+1]);
RegisterPanelArea (hPanel, AID_GIMBALSCRAM, _R( 63,411, 98,455), PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_LBUP, panel2dtex, instr[instr_scram0+2]);
RegisterPanelArea (hPanel, AID_GIMBALSCRAMMODE, _R(57,468,69,480), PANEL_REDRAW_USER | PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN, panel2dtex, instr[instr_scram0+3]);
}
aap->RegisterPanel (hPanel);
InitPanel (0);
}
Since the Orbiter already has an API to create a mesh then would it be simply enough to add a playback function to the sketchpad ?
Sketchpad2:rawMesh(MESHHANDLE hMeshTemplate, int grp, DWORD flags)
I did some changes to the reentry plasma mesh math, and got a pretty good result IMO. The mesh is now visible from ~260kft to ~140kft on the way down, which while not perfect, is much better than it was. The mesh still needs resizing though...
On another front, I think we should add a small change list to the release package, containing the major changes from the last release, so the users can see that we are not releasing the same thing over and over again. My question is: should it go in the manual (one page max) or on a separate txt file?
Can't we do both, a Latex include file for the manual and a simple plain text readme file for the current release?
*** Major changes from SSU 3.0 ***
corrected orbiter vehicle textures
corrections to external airlock and tunner adapter
fixed orbiter vehicle mesh
fixed Item 27 issue for OMS-2
small corrections to RMS systems and its cameras
corrected colors in displays
added some funcionality to Ku-band antenna (radar and manual slew)
added Centaur upper stage and its vc panel
added IUS upper stage and its vc panels
updated HUD graphics
fixed wrong WT parameter in MNVR display
fixed issue with the event timer
new texture for RMS
corrected position of PLB handrails
fixed reentry mesh not showing