⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphicview.cpp

📁 一个非常完美的工业曲线显示控件。可供学习研究!
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -