// MutFView.cpp : implementation of the CMutFView class
//
#include "stdafx.h"
#include "MutF.h"
#include "MutFDoc.h"
#include "MutFView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMutFView
IMPLEMENT_DYNCREATE(CMutFView, CView)
BEGIN_MESSAGE_MAP(CMutFView, CView)
//{{AFX_MSG_MAP(CMutFView)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMutFView construction/destruction
CMutFView::CMutFView()
{
// TODO: add construction code here
}
CMutFView::~CMutFView()
{
delete thechartview;
}
BOOL CMutFView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
void CMutFView::Define3DGraph(void)
{
// Create data locally even though it should probably come from
// the CMutFDoc class.
realtype xdata[10] = {87, 88, 89, 90, 91, 92, 93, 94, 95, 96};
realtype Karpman[10] = {100, 120, 130, 180, 200, 250, 360, 370, 390, 430};
realtype MacGuard[10] = {70, 80, 90, 130, 160, 220, 230, 250, 240, 260};
realtype Infidel[10] = {40, 50, 110, 130, 120, 150, 170, 200, 200, 210};
realtype Annubus[10] = {30, 90, 100, 110, 120, 130, 150, 160, 190, 200};
realtype * FundZList[4] = {Karpman, MacGuard, Infidel, Annubus};
realtype *FundXList[4] = {xdata, xdata, xdata, xdata};
int numDataList[4] = {10, 10, 10, 10};
realtype width, basevalue, constvalue;
int justify, indaxis, numpoints;
RGBDType fillcolor;
CString xtitle("Year");
CString ytitle("");
CString ztitle("Return");
CString TicStrings[4] = {"Karpman", "MacGuard", "Infidel", "Annubus"};
CChartObj3D *chartobj1, *chartobj2, *chartobj3, *chartobj4;
GLViewRType chartpos;
point3Dtype minscale, maxscale, chartrot, chartrect;
point3Dtype light;
thechartview->SetViewBkColor(RGBWHITE);
thechart = thechartview->NewChart3D();
// Auto transform for multiple chart objects
transform1 = thechart->AutoTransformN25D (FundXList,
FundZList, numDataList, 4, 1.0, X_AXIS, 0);
// Make y direction 4 units wide
minscale = transform1->GetScaleMin();
maxscale = transform1->GetScaleMax();
maxscale.y = 4.0;
minscale.z = 0.0;
transform1->SetScale(&minscale, &maxscale);
// Auto axes
axes1 = thechart->AutoAxes(transform1);
// Override tic mark spacing attributes
axes1->SetAxisTicSpace(X_AXIS, 1.0);
axes1->SetAxisNthTicMajor(X_AXIS, 1);
axes1->SetAxisTicSpace(Y_AXIS, 1.0);
axes1->SetAxisNthTicMajor(Y_AXIS, 1);
axes1->SetAxisLabelsStrings(Y_AXIS, TicStrings, 4);
// Set wall plane attributes
axes1->SetWallPlane(XY_MINZ_PLANE,
SetRGBD(0.0,0.2,0.4,0.0), SetRGBD(0.0,0.0,0.0,1.0));
axes1->SetPlaneGrid(XY_MINZ_PLANE,1,1, RGBBLACK, 1.0, 0, 1);
axes1->SetAxisTitleString(X_AXIS,&xtitle);
axes1->SetWallPlane(XZ_MINY_PLANE,
SetRGBD(0.0,0.2,0.4,0.0), SetRGBD(0.0,0.0,0.0,1.0));
axes1->SetPlaneGrid(XZ_MINY_PLANE,1,1, RGBBLACK, 1.0, 0, 1);
axes1->SetAxisTitleString(Y_AXIS, &ytitle);
axes1->SetAxisTitlePlane(Y_AXIS, XZ_PLANE);
axes1->SetWallPlane(YZ_MINX_PLANE,
SetRGBD(0.0,0.2,0.4,0.0), SetRGBD(0.0,0.0,0.0,1.0));
axes1->SetPlaneGrid(YZ_MINX_PLANE,1,1, RGBBLACK, 1.0, 0, 1);
axes1->SetAxisTitleString(Z_AXIS, &ztitle);
// light source
light.x = 0.1; light.y = 1.0; light.z = 1.0; light.v = 0;
thechart->SetLightPosition(&light);
thechart->SetColorMode(1);
// Set chart headers
thechart->ChartHeader->Title1->SetCharSize(1.0);
thechart->ChartHeader->Title1->SetString("Mutual Fund Comparison");
thechart->ChartHeader->Title2->SetCharSize(0.5);
thechart->ChartHeader->Title2->SetString("Total Return");
thechart->ChartHeader->Footer->SetCharSize(0.5);
thechart->ChartHeader->Footer->SetString("Dividends Reinvested");
// Position chart within chart window
AssignViewR(chartpos, 0.0, 0.0, 1.0, 1.0);
thechart->SetChartPosition(&chartpos);
thechart->SetFontSize(0.133);
// Chart rotation within window
chartrot.x = -40.0;
chartrot.y = 0.0;
chartrot.z = 10.0;
transform1->SetRotate(&chartrot );
chartrect.x = 0.55; chartrect.y = 0.4; chartrect.z = 0.45;
transform1->SetChartRect(&chartrect);
// Chartobj #1
width = 0.5;
basevalue = minscale.z;
numpoints = 10;
justify = JUSTIFY_MIN;
indaxis = X_AXIS;
constvalue = 0.0;
fillcolor = RGBBLUE;
chartobj1 = thechart->NewChartObj(transform1);
chartobj1->AreaFillChart25D ( xdata,
Karpman,
basevalue,
constvalue,
numpoints,
width,
fillcolor, RGBBLACK,
justify,
indaxis);
// Chartobj #2
constvalue = 1.0;
fillcolor = RGBGREEN;
chartobj2 = thechart->NewChartObj(transform1);
chartobj2->AreaFillChart25D ( xdata,
MacGuard,
basevalue,
constvalue,
numpoints,
width,
fillcolor, RGBBLACK,
justify,
indaxis);
// Chartobj #3
constvalue = 2.0;
fillcolor = RGBRED;
chartobj3 = thechart->NewChartObj(transform1);
chartobj3->AreaFillChart25D ( xdata,
Infidel,
basevalue,
constvalue,
numpoints,
width,
fillcolor, RGBBLACK,
justify,
indaxis);
constvalue = 3.0;
fillcolor = RGBMAGENTA;
// Chartobj #4
chartobj4 = thechart->NewChartObj(transform1);
chartobj4->SetFillGap(0.02);
chartobj4->AreaFillChart25D ( xdata,
Annubus,
basevalue,
constvalue,
numpoints,
width,
fillcolor, RGBBLACK,
justify,
indaxis);
}
/////////////////////////////////////////////////////////////////////////////
// CMutFView drawing
void CMutFView::OnDraw(CDC* pDC)
{
CMutFDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
thechartview->DrawViewScreen(pDC);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CMutFView printing
BOOL CMutFView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMutFView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMutFView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
thechartview->OnPrint(pDC, pInfo);
}
void CMutFView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMutFView diagnostics
#ifdef _DEBUG
void CMutFView::AssertValid() const
{
CView::AssertValid();
}
void CMutFView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMutFDoc* CMutFView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMutFDoc)));
return (CMutFDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMutFView message handlers
void CMutFView::OnInitialUpdate()
{
CView::OnInitialUpdate();
thechartview = new CChartView3D(this);
Define3DGraph();
// TODO: Add your specialized code here and/or call the base class
}