📄 graphicview.cpp
字号:
PEvsetcellEx(m_hPE, PEP_naTAJUSTIFICATION, 0, 1, &nTmp);
// First Column Text //
for (r=1; r<15; r++)
{
sprintf(szTmp, "%2d", r);
PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, 0, szTmp);
}
// // Second Column Text //
for (r=1; r<15; r++)
{
fp = float(sin(0.3F * (double) r + 1) * 500.0F) + GetRandom(2, 50);
sprintf(szTmp, "%.2f", fp);
PEvsetcellEx(m_hPE, PEP_szaTATEXT, r, 1, szTmp);
}
// Other Table Related Properties ///
PEnset(m_hPE, PEP_bSHOWTABLEANNOTATION, TRUE);
PEnset(m_hPE, PEP_nTALOCATION, PETAL_LEFT_CENTER);
PEnset(m_hPE, PEP_dwTABACKCOLOR, RGB(255,255,255));
PEnset(m_hPE, PEP_nTAHEADERROWS, 1);
PEnset(m_hPE, PEP_bTAHEADERCOLUMN, TRUE);
// Done setting Table Annotations ///
// Set Various Other Properties ///
PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_LIGHT_INSET);
PEnset(m_hPE, PEP_nDATAPRECISION, 0);
}
void CGraphicView::OnBkBarGroup()
{
if(m_hPE)
{
PEdestroy(m_hPE);
Invalidate();
}
RECT rect;
GetClientRect( &rect );
m_canReal=FALSE;
// Construct Object //
m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1000);
PEnset(m_hPE, PEP_nSUBSETS, 4);
PEnset(m_hPE, PEP_nPOINTS, 12);
// Change Data to match example scales which are manually configured //
for (int s=0; s<=3; s++)
{
for (int p=0; p<=11; p++)
{
float f;
f = (p + 1) * 10.0F;
PEvsetcellEx(m_hPE, PEP_faXDATA, s, p, &f);
switch (s)
{
case 0:
f = 0.01F + GetRandom(1, 4);
break;
case 1:
f = 400.0F + GetRandom(1, 450);
break;
case 2:
f = 0.01F + GetRandom(1, 25);
break;
case 3:
f = 0.01F + GetRandom(1, 65);
break;
}
PEvsetcellEx(m_hPE, PEP_faYDATA, s, p, &f);
}
}
// Now sub-divide subsets into 4 individual axes //
// Each axis with one subset in each //
int nArray[4] = {1,1,1,1};
PEvset (m_hPE, PEP_naMULTIAXESSUBSETS, nArray, 4);
// Create Overlapped Axes //
int nOMA[3] = {1,1,2};
PEvset (m_hPE, PEP_naOVERLAPMULTIAXES, nOMA, 3);
// Set Proportions of Axes //
float fMAP[3] = {.2F, .5F, .3F};
PEvset (m_hPE, PEP_faMULTIAXESPROPORTIONS, fMAP, 3);
// Set up First axis parameters //
PEnset(m_hPE, PEP_nWORKINGAXIS, 0);
PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
double dMin = 0.0F;
PEvset(m_hPE, PEP_fMANUALMINY, &dMin, 1);
double dMax = 5.0F;
PEvset(m_hPE, PEP_fMANUALMAXY, &dMax, 1);
PEnset(m_hPE, PEP_bMANUALYAXISTICKNLINE, TRUE);
double dLine = 2.5F;
PEvset(m_hPE, PEP_fMANUALYAXISLINE, &dLine, 1);
double dTick = 0.5F;
PEvset(m_hPE, PEP_fMANUALYAXISTICK, &dTick, 1);
PEnset(m_hPE, PEP_nSHOWTICKMARKY, PESTM_TICKS_HIDE);
PEszset(m_hPE, PEP_szYAXISLABEL, "NPSHR (feet)");
PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_BAR);
// Set up Second axis parameters //
PEnset(m_hPE, PEP_nWORKINGAXIS, 1);
PEnset(m_hPE, PEP_nRYAXISCOMPARISONSUBSETS, 1);
PEnset(m_hPE, PEP_nMANUALSCALECONTROLRY, PEMSC_MINMAX);
dMin = 400.0F;
PEvset(m_hPE, PEP_fMANUALMINRY, &dMin, 1);
dMax = 900.0F;
PEvset(m_hPE, PEP_fMANUALMAXRY, &dMax, 1);
PEnset(m_hPE, PEP_bMANUALRYAXISTICKNLINE, TRUE);
dLine = 100.0F;
PEvset(m_hPE, PEP_fMANUALRYAXISLINE, &dLine, 1);
dTick = 20.0F;
PEvset(m_hPE, PEP_fMANUALRYAXISTICK, &dTick, 1);
PEnset(m_hPE, PEP_nSHOWTICKMARKRY, PESTM_TICKS_HIDE);
PEszset(m_hPE, PEP_szRYAXISLABEL, "Total Head (feet)");
PEnset(m_hPE, PEP_nPLOTTINGMETHODII, PEGPM_POINTSPLUSSPLINE);
// Set up Third axis parameters //
PEnset(m_hPE, PEP_nWORKINGAXIS, 2);
PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
dMin = 0.0F;
PEvset(m_hPE, PEP_fMANUALMINY, &dMin, 1);
dMax = 30.0F;
PEvset(m_hPE, PEP_fMANUALMAXY, &dMax, 1);
PEnset(m_hPE, PEP_bMANUALYAXISTICKNLINE, TRUE);
dLine = 10.0F;
PEvset(m_hPE, PEP_fMANUALYAXISLINE, &dLine, 1);
dTick = 2.0F;
PEvset(m_hPE, PEP_fMANUALYAXISTICK, &dTick, 1);
PEnset(m_hPE, PEP_nSHOWTICKMARKY, PESTM_TICKS_HIDE);
PEszset(m_hPE, PEP_szYAXISLABEL, "Efficiency (%)");
PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE);
// Set up Fourth axis parameters //
PEnset(m_hPE, PEP_nWORKINGAXIS, 3);
PEnset(m_hPE, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
dMin = 0.0F;
PEvset(m_hPE, PEP_fMANUALMINY, &dMin, 1);
dMax = 75.0F;
PEvset(m_hPE, PEP_fMANUALMAXY, &dMax, 1);
PEnset(m_hPE, PEP_bMANUALYAXISTICKNLINE, TRUE);
dLine = 25.0F;
PEvset(m_hPE, PEP_fMANUALYAXISLINE, &dLine, 1);
dTick = 5.0F;
PEvset(m_hPE, PEP_fMANUALYAXISTICK, &dTick, 1);
PEnset(m_hPE, PEP_nSHOWTICKMARKY, PESTM_TICKS_HIDE);
PEszset(m_hPE, PEP_szYAXISLABEL, "Power(HP)");
PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE);
// Done Setting Y Axis Parameters, reset WorkingAxis //
PEnset(m_hPE, PEP_nWORKINGAXIS, 0);
// Set various other properties //
PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_BOTH);
PEnset(m_hPE, PEP_nMULTIAXISSTYLE, PEMAS_GROUP_ALL_AXES);
PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE_INSIDE_OVERLAP);
PEszset(m_hPE, PEP_szXAXISLABEL, "Flow (gpm)");
PEnset(m_hPE, PEP_nBORDERTYPES, PETAB_SINGLE_LINE);
PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
PEnset(m_hPE, PEP_nFONTSIZE, PEFS_MEDIUM);
PEszset(m_hPE, PEP_szMAINTITLE, "");
PEszset(m_hPE, PEP_szSUBTITLE, "");
PEszset(m_hPE, PEP_szSUBTITLEFONT, "Courier New");
float fSize = 1.1F;
PEvset(m_hPE, PEP_fFONTSIZEMSCNTL, &fSize, 1);
PEvset(m_hPE, PEP_fFONTSIZEMBCNTL, &fSize, 1);
PEvsetcell(m_hPE, PEP_szaMULTISUBTITLES, 0, "PUMP PREDICTED PERFORMANCE|Units: US Customary|Date: 06/07/2002");
PEvsetcell(m_hPE, PEP_szaMULTISUBTITLES, 1, "Impeller Diameter (in): Max = 11.875, Rated = 11.72, Min =11.062||");
PEvsetcell(m_hPE, PEP_szaMULTIBOTTOMTITLES, 1, "Customer: Since fixed length courier font, you can create rows by number of spaces, ||");
PEvsetcell(m_hPE, PEP_szaMULTIBOTTOMTITLES, 0, "Pump Model: or, v5 has a table annotation feature which could be used to add text here. ||");
PEnset(m_hPE, PEP_bYAXISONRIGHT, TRUE);
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 0, "NPSHR");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 1, "Head");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 2, "Efficiency");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 3, "Power");
PEnset(m_hPE, PEP_nMULTIAXISSTYLEMENU, PEMC_SHOW);
PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_NONE);
PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT);
PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT);
PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE);
PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE);
DWORD dwArray[4] = { RGB(198,0,0), RGB( 0, 198, 198 ), RGB( 198,198,0 ), RGB( 0,198,0 ) };
PEvset(m_hPE, PEP_dwaSUBSETCOLORS, dwArray, 4);
PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_NO_BORDER);
PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);
}
void CGraphicView::OnBkPie()
{
if(m_hPE)
{
PEdestroy(m_hPE);
Invalidate();
}
//! Double Click to start and stop Auto Rotation. //
//! Click and drag scroll bar thumb tabs to quickly rotate. //
//! Right button click to show popup menu. //
RECT rect;
GetClientRect( &rect );
m_hPE = PEcreate(PECONTROL_3D, WS_VISIBLE, &rect, m_hWnd, 1001);
// Non-Surface chart, set PolyMode //
PEnset(m_hPE, PEP_nPOLYMODE, PEPM_3DBAR);
// Pass Data //
double sMin, sMax;
long Row, Col, o, s, e, nQ;
long nStartRow, nEndRow, nStartCol, nEndCol, nTargetRows, nTargetCols;
nStartRow = 216;
nEndRow = 230;
nTargetRows = nEndRow - nStartRow + 1;
nStartCol = 156;
nEndCol = 170;
nTargetCols = nEndCol - nStartCol + 1;
nQ = nTargetRows * nTargetCols;
long* pElevData = NULL;
float* pMyXData = NULL;
float* pMyYData = NULL;
float* pMyZData = NULL;
char szFile[] = "terrain.bin";
FILE * pFile = NULL;
pFile = fopen(szFile, "rb");
if (pFile)
{
pElevData = new long[202500];
// Transfer entire data file into memory //
size_t cnt;
e = 0;
for (s = 0; s < 45; s++)
{
cnt = fread(&pElevData[e], sizeof(long), 4500, pFile);
e += 4500;
}
fclose(pFile);
}
else
{
MessageBox("Data File [terrain.bin] not found in program directory.");
return;
}
pMyXData = new float[nQ];
pMyYData = new float[nQ];
pMyZData = new float[nQ];
long rowcounter, colcounter;
BOOL foundtargetindex = FALSE;
rowcounter = 0;
colcounter = 0;
sMax = -9999999.9F;
sMin = 9999999.9F;
for (Row=0; Row<450; Row++)
{
for (Col=0; Col<450; Col++)
{
foundtargetindex = FALSE;
if (Row >= nStartRow && Row <= nEndRow)
{
if (Col >= nStartCol && Col <= nEndCol)
{
foundtargetindex = TRUE;
o = (rowcounter * nTargetRows) + colcounter;
pMyXData[o] = (float) Col + 1;
pMyZData[o] = (float) Row + 1;
pMyYData[o] = pElevData[(Row * 450) + Col] * 0.1F;
}
}
if (foundtargetindex)
colcounter++;
}
if (foundtargetindex)
rowcounter++;
}
PEnset(m_hPE, PEP_nSUBSETS, nTargetRows);
PEnset(m_hPE, PEP_nPOINTS, nTargetCols);
// Perform the actual transfer of data //
PEvset(m_hPE, PEP_faXDATA, pMyXData, nQ);
PEvset(m_hPE, PEP_faYDATA, pMyYData, nQ);
PEvset(m_hPE, PEP_faZDATA, pMyZData, nQ);
if (pElevData)
delete pElevData;
if (pMyXData)
delete pMyXData;
if (pMyYData)
delete pMyYData;
if (pMyZData)
delete pMyZData;
// Set Various Other Properties //
PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_DARK_SHADOW);
DWORD dwColor[] = {RGB(0, 148, 0), RGB(148, 0, 0), RGB(0, 0, 148),
RGB(148, 148, 0), RGB(0, 148, 148),
RGB(0, 182, 0), RGB(182, 0, 0), RGB(0, 0, 182),
RGB(182, 182, 0), RGB(0, 182, 182),
RGB(0, 198, 0), RGB(198, 0, 0), RGB(0, 0, 198),
RGB(198, 198, 0), RGB(0, 198, 148) };
PEvset(m_hPE, PEP_dwaSUBSETCOLORS, dwColor, 15);
// Set subset labels for z axis**
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 0, "Row 1");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 1, "Row 2");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 2, "Row 3");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 3, "Row 4");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 4, "Row 5");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 5, "Row 6");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 6, "Row 7");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 7, "Row 8");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 8, "Row 9");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 9, "Row 10");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 10, "Row 11");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 11, "Row 12");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 12, "Row 13");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 13, "Row 14");
PEvsetcell(m_hPE, PEP_szaSUBSETLABELS, 14, "Row 15");
// Set point labels for x axis //
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 0, "Col 1");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 1, "Col 2");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 2, "Col 3");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 3, "Col 4");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 4, "Col 5");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 5, "Col 6");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 6, "Col 7");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 7, "Col 8");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 8, "Col 9");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 9, "Col 10");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 10, "Col 11");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 11, "Col 12");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 12, "Col 13");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 13, "Col 14");
PEvsetcell(m_hPE, PEP_szaPOINTLABELS, 14, "Col 15");
// Set Titles //
PEszset(m_hPE, PEP_szMAINTITLE, "3D Bar");
PEszset(m_hPE, PEP_szSUBTITLE, "");
// Set camera position //
PEnset(m_hPE, PEP_nVIEWINGHEIGHT, 15);
PEnset(m_hPE, PEP_nDEGREEOFROTATION, 314);
// Set Plotting methods //
PEnset(m_hPE, PEP_nPLOTTINGMETHOD, 2); // ' Shading
// Full rotation detail //
PEnset(m_hPE, PEP_nROTATIONDETAIL, PERD_FULLDETAIL);
// Set small font size //
PEnset(m_hPE, PEP_n
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -