// Matt Streeter
// 2/27/00
// NVIS.H
// Header for class TNVisWindow; window class for visualization of a
// single neural network.
// Copyright Matt Streeter, 2000. All rights reserved
#ifndef __NVIS_H__
#define __NVIS_H__
#include <owl/owlpch.h>
#include <owl/applicat.h>
#include <owl/framewin.h>
#include <owl/dc.h>
#include <owl/inputdia.h>
#include "network.h"
#include "types.h"
#include "eswindow.h"
#include "backprop.h"
struct TDrawnWeight
{
TPoint P1,P2,PCenter;
};
class TNVisWindow : public TESWindow {
public:
TNVisWindow(TWindow *pParent,Network *pNetwork,Chromosome *pChromosome,
Parameter *pParam);
~TNVisWindow();
bool IdleAction(long);
void BackProp();
double GetFitness();
static TColor mGrayLineColor;
static TColor mRingColor;
static TColor mActivityColor;
protected:
TBackpropWindow *mpBackpropWin;
TEdit *mpSampleEdit;
TESStatic *mpSampleStatic;
TScrollBar *mpHScroll;
Network mNetwork;
double *mpWeights;
int miWeights;
int miSample;
double mdMaxWeight;
float mfNodeRadius;
TPoint *mpNodeCenterPoints;
TDrawnWeight *mpWeightEndPoints;
int miSelectedNode,miSelectedWeight,miSelectedWeightSign;
Parameter mParam;
Chromosome mChromosome;
char *mpFilename;
byte mbShowSigmas;
void SetupWindow();
void Paint(TDC&, bool, TRect&);
int FindNode(TPoint& point);
int FindWeight(TPoint& point);
void DrawHighlight(int iNode,byte bHighlight);
void DrawNodeInfo();
TPoint DrawWeight(TDC& dc,TPoint& P1,TPoint& P2,double dNormWeight,
double dNormSigma,double dMinSigmaLen,double dMaxSigmaLen);
void EvLButtonDown(uint, TPoint& point);
void EvLButtonUp(uint, TPoint&);
void EvMouseMove(uint modKeys, TPoint& point);
void EvSampleScroll(UINT code);
void EvSampleEdit(UINT code);
void EvSize(UINT SizeType, TSize& Size);
void CmFileLoad();
void CmFileSave();
void CmFileSaveAs();
void CmFileLoadTestSet();
void CmNetworkEval();
void CmNetworkViewActivations();
void CmNetworkBackProp();
void CmViewVolatility();
void CeFileSave(TCommandEnabler& ce);
void CeViewVolatility(TCommandEnabler& ce);
int SaveAs(char *pFile);
int Load(char *pFile);
void UpdateSampleEdit();
void UpdateCaption();
DECLARE_RESPONSE_TABLE(TNVisWindow);
};
TColor WeightToColor(double dNormWeight);
TColor SigmaToColor(double dNormSigma);
#endif // __NVIS_H__