// Pyramid3dView.cpp // // (c)1998-2025 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "ChartBrowser.h" #include "BaseView.h" #include "ComponentSliderCtrl.h" #include "3dParametersDlg.h" #include "Pyramid3dOptionsDlg.h" #include "Pyramid3dView.h" // CPyramid3dView IMPLEMENT_DYNCREATE(CPyramid3dView, CBase3dView) CPyramid3dView::CPyramid3dView(UINT nID) : CBase3dView(nID) , m_pOptionsDlg(NULL) { m_strCaption = _T("3D Pyramid Style"); } CPyramid3dView::~CPyramid3dView() { SAFE_DELETE(m_pOptionsDlg); } void CPyramid3dView::DoDataExchange(CDataExchange* pDX) { CBase3dView::DoDataExchange(pDX); DDX_Control(pDX, IDC_CHARTCONTROL, m_wndChartControl); } BEGIN_MESSAGE_MAP(CPyramid3dView, CBase3dView) END_MESSAGE_MAP() // CPyramid3dView diagnostics #ifdef _DEBUG void CPyramid3dView::AssertValid() const { CBase3dView::AssertValid(); } # ifndef _WIN32_WCE void CPyramid3dView::Dump(CDumpContext& dc) const { CBase3dView::Dump(dc); } # endif #endif //_DEBUG // CPyramid3dView message handlers void CPyramid3dView::OnInitialUpdate() { CBase3dView::OnInitialUpdate(); m_pOptionsDlg = new CPyramid3dOptionsDlg(*this, &m_wndTabControl); if (m_pOptionsDlg->Create(CPyramid3dOptionsDlg::IDD, &m_wndTabControl)) { m_pOptionsDlg->SetWindowText(_T("Options")); AddTab(0, m_pOptionsDlg); SetActiveTab(0); } else { TRACE(_T("Unable to create CPyramid3dOptionsDlg.\n")); } m_wndTabControl.SetCurSel(0); CreateChart(); } static CXTPChartSeriesPoint* CreatePyramidPoint(LPCTSTR lpszLegendText, double nYear, double nValue, double dWidth) { CXTPChartSeriesPoint* pPoint = new CXTPChartSeriesPoint(nYear, nValue, dWidth); pPoint->SetLegendText(lpszLegendText); return pPoint; } void CPyramid3dView::CreateChart() { CXTPChartContent* pContent = m_wndChartControl.GetContent(); pContent->GetLegend()->SetVisible(TRUE); CXTPChartTitle* pTitle = pContent->GetTitles()->Add(new CXTPChartTitle()); pTitle->SetText(_T("Top 5 States by Population")); CXTPChartSeries* pSeries = pContent->GetSeries()->Add(new CXTPChartSeries()); pSeries->SetName(_T("Top 5 States by Population")); CXTPChart3dPyramidSeriesStyle* pStyle = new CXTPChart3dPyramidSeriesStyle(); pStyle->SetBaseEdgeCount(4); pStyle->SetHeightToWidthRatio(1.5); pStyle->Enable3dEdgeSmoothing(); pSeries->SetStyle(pStyle); CXTPChart3dRotation chartRotation = pStyle->Get3dRotation(); chartRotation.m_dYaw = 203; chartRotation.m_dPitch = 355; chartRotation.m_dRoll = 79; pStyle->Set3dRotation(chartRotation); CXTPChartSeriesPoint* pPoint = NULL; CXTPChartSeriesPointCollection* pPoints = pSeries->GetPoints(); pPoint = pPoints->Add(CreatePyramidPoint(_T("California"), 10, 37.623, 11.95)); pPoint = pPoints->Add(CreatePyramidPoint(_T("Texas"), 9, 25.532, 7.81)); pPoint = pPoints->Add(CreatePyramidPoint(_T("New York"), 8, 20.987, 6.31)); pPoint = pPoints->Add(CreatePyramidPoint(_T("Florida"), 7, 18.145, 5.97)); pPoint = pPoints->Add(CreatePyramidPoint(_T("Illinois"), 6, 13.320, 4.2)); pStyle->GetLabel()->SetFormat(_T("{V} Million")); if (NULL != m_p3dParametersDlg) { CXTPChartDiagram3DAppearance* p3dAppearance = m_wndChartControl.GetContent()->GetAppearance()->GetDiagram3DAppearance(); _ASSERTE(NULL != p3dAppearance); m_p3dParametersDlg->SetRotation(pStyle->Get3dRotation()); m_p3dParametersDlg->SetLightPosition(p3dAppearance->LightPosition); m_p3dParametersDlg->SetLightModelAmbient(p3dAppearance->LightModelAmbientColor); m_p3dParametersDlg->SetLightAmbient(p3dAppearance->LightAmbientColor); m_p3dParametersDlg->SetLightDiffuse(p3dAppearance->LightDiffuseColor); m_p3dParametersDlg->SetLightSpecular(p3dAppearance->LightSpecularColor); m_p3dParametersDlg->SetMaterialEmission(p3dAppearance->MaterialEmissionColor); m_p3dParametersDlg->SetMaterialDiffuse(p3dAppearance->MaterialDiffuseColor); m_p3dParametersDlg->SetMaterialSpecular(p3dAppearance->MaterialSpecularColor); m_p3dParametersDlg->SetMaterialShininess(p3dAppearance->MaterialShininess); m_p3dParametersDlg->SetAntialiasing(p3dAppearance->Antialiasing); } } void CPyramid3dView::OnBnClickedCheckShowLabels() { if (NULL != m_pOptionsDlg) { CXTPChartSeriesCollection* pSeriesCollection = m_wndChartControl.GetContent()->GetSeries(); for (int i = 0; i < pSeriesCollection->GetCount(); i++) { CXTPChartSeriesStyle* pStyle = pSeriesCollection->GetAt(i)->GetStyle(); pStyle->GetLabel()->SetVisible(m_pOptionsDlg->GetShowLabelsValue()); } m_pOptionsDlg->GetDlgItem(IDC_COMBO_LABEL_POSITION) ->EnableWindow(m_pOptionsDlg->GetShowLabelsValue()); } } void CPyramid3dView::OnBnClickedCheckSmoothEdges() { if (NULL != m_pOptionsDlg) { CXTPChartSeriesCollection* pSeriesCollection = m_wndChartControl.GetContent()->GetSeries(); CXTPChart3dPyramidSeriesStyle* pPyramidStyle = (CXTPChart3dPyramidSeriesStyle*)pSeriesCollection->GetAt(0)->GetStyle(); pPyramidStyle->Enable3dEdgeSmoothing(m_pOptionsDlg->GetSmoothEdges()); } } void CPyramid3dView::OnCbnSelChangeComboLabelPosition() { if (NULL != m_pOptionsDlg) { CXTPChartSeriesCollection* pSeriesCollection = m_wndChartControl.GetContent()->GetSeries(); CXTPChart3dPyramidSeriesStyle* pPyramidStyle = (CXTPChart3dPyramidSeriesStyle*)pSeriesCollection->GetAt(0)->GetStyle(); CXTPChartPyramidSeriesLabel* pLabel = (CXTPChartPyramidSeriesLabel*) pPyramidStyle->GetLabel(); pLabel->SetPosition( static_cast(m_pOptionsDlg->GetPositionValue())); } } void CPyramid3dView::OnCbnSelChangeComboBaseEdgeCount() { if (NULL != m_pOptionsDlg) { CXTPChartSeriesCollection* pSeriesCollection = m_wndChartControl.GetContent()->GetSeries(); CXTPChart3dPyramidSeriesStyle* pPyramidStyle = (CXTPChart3dPyramidSeriesStyle*)pSeriesCollection->GetAt(0)->GetStyle(); pPyramidStyle->SetBaseEdgeCount(m_pOptionsDlg->GetBaseEdgeCount()); } } void CPyramid3dView::OnCbnSelChangeComboPointDistance() { if (NULL != m_pOptionsDlg) { CXTPChartSeriesCollection* pSeriesCollection = m_wndChartControl.GetContent()->GetSeries(); CXTPChart3dPyramidSeriesStyle* pPyramidStyle = (CXTPChart3dPyramidSeriesStyle*)pSeriesCollection->GetAt(0)->GetStyle(); pPyramidStyle->SetPointDistance(m_pOptionsDlg->GetPointDistance()); } } void CPyramid3dView::OnCbnSelChangeComboTransparency() { if (NULL != m_pOptionsDlg) { CXTPChartSeriesCollection* pSeriesCollection = m_wndChartControl.GetContent()->GetSeries(); CXTPChart3dPyramidSeriesStyle* pPyramidStyle = DYNAMIC_DOWNCAST( CXTPChart3dPyramidSeriesStyle, pSeriesCollection->GetAt(0)->GetStyle()); _ASSERTE(NULL != pPyramidStyle); pPyramidStyle->SetTransparency(m_pOptionsDlg->GetTransparency()); } } void CPyramid3dView::OnCbnSelChangeComboHeightToWidthRatio() { if (NULL != m_pOptionsDlg) { CXTPChartSeriesCollection* pSeriesCollection = m_wndChartControl.GetContent()->GetSeries(); CXTPChart3dPyramidSeriesStyle* pPyramidStyle = DYNAMIC_DOWNCAST( CXTPChart3dPyramidSeriesStyle, pSeriesCollection->GetAt(0)->GetStyle()); _ASSERTE(NULL != pPyramidStyle); pPyramidStyle->SetHeightToWidthRatio(m_pOptionsDlg->GetHeightToWidthRatio()); } } CXTPChart3dRotation CPyramid3dView::GetChartRotation() const { CXTPChartSeriesCollection* pSeriesCollection = m_wndChartControl.GetContent()->GetSeries(); CXTPChart3dPyramidSeriesStyle* pPyramidStyle = DYNAMIC_DOWNCAST(CXTPChart3dPyramidSeriesStyle, pSeriesCollection->GetAt(0)->GetStyle()); _ASSERTE(NULL != pPyramidStyle); return pPyramidStyle->Get3dRotation(); } void CPyramid3dView::SetChartRotation(CXTPChart3dRotation rotation) { CXTPChartSeriesCollection* pSeriesCollection = m_wndChartControl.GetContent()->GetSeries(); CXTPChart3dPyramidSeriesStyle* pPyramidStyle = DYNAMIC_DOWNCAST(CXTPChart3dPyramidSeriesStyle, pSeriesCollection->GetAt(0)->GetStyle()); _ASSERTE(NULL != pPyramidStyle); pPyramidStyle->Set3dRotation(rotation); }