namespace cviewtype
{

/////////////////////////////////////////////////////////////////////////////
// CNode -- structure that holds information about each control point.

class CNode
{
	public:
		CNode();
			
		double x,y;
		int xs,ys;
		BOOL IsSelected;
		int BoundaryMarker;
		int InGroup,InConductor;

		double GetDistance(double xo, double yo);
		CComplex CC();
		void ToggleSelect();

	private:

};

class CMeshNode
{
	public:
		CMeshNode();
		
		CComplex v;
		double x,y;
		double msk;
		int xs,ys;
		BOOL Q,IsSelected;

		double GetDistance(double xo, double yo);
		CComplex CC();

	private:

};
/////////////////////////////////////////////////////////////////////////////
// CSegment -- structure that holds information about lines joining control pts

class CSegment
{
	public:
		CSegment();
			
		int n0,n1;
		double MaxSideLength;
		BOOL IsSelected;
		BOOL Hidden;
		int BoundaryMarker;
		int InGroup,InConductor;

		void ToggleSelect();

	private:

};

class CArcSegment
{
	public:
		CArcSegment();
			
		int n0,n1;
		BOOL IsSelected;
		BOOL Hidden;
		double MaxSideLength,ArcLength;
		int BoundaryMarker;
		int InGroup, InConductor;

		void ToggleSelect();

	private:

};
/////////////////////////////////////////////////////////////////////////////
// CBlockLabel -- structure that holds block label information

class CBlockLabel
{
	public:
		CBlockLabel();
				
		double x,y;
		double MaxArea;
		BOOL IsSelected;
		int BlockType;
		int InGroup;
		BOOL IsExternal;
		BOOL IsDefault;

		void ToggleSelect();
		double GetDistance(double xo, double yo);

	private:

};

class CMaterialProp
{
	public:

		CString BlockName;
		
		CComplex Kx,Ky;		// effective conductivity
		double ox,oy;		// dc conductivity
		CComplex ex,ey;		// electrical permittivity
		CMaterialProp();

	private:
};

class CBoundaryProp
{
	public:
	
		CBoundaryProp();

		CString BdryName;
		CString InConductor;

		int BdryFormat;			// type of boundary condition we are applying
								// 0 = Fixed Voltage
								// 1 = Mixed BC
								// 2 = Surface Current Density
								// 3 = Periodic
								// 4 = Antiperiodic
		
		CComplex V	;			// Fixed value of V for BdryFormat=0;
		CComplex c0,c1;			// Coefficients for BdryFormat=1;
		CComplex qs;			// Surface current density for Bdryformat=2;

	private:
};

class CPointProp
{
	public:

		CPointProp();

		CString PointName;
		CString InConductor;
		CComplex V,qp;

	private:
};

class CCircuit
{
	public:

		CCircuit();

		CString CircName;
		CComplex V,q;
		int		CircType;

	private:

};

class CElement
{
	public:

		int p[3];
		int blk,lbl;
		CComplex Jx,Jy;		// elemental AC current density
		CComplex jx[3], jy[3];  // smoothed AC current density at corners
		CComplex ctr;
		double rsqr;
		int n[3];  // Add 3 ints to store elem's neigh. 
		
//		CComplex E();

	private:
};

class CPointVals
{
	public:

		CComplex v;		// voltage
		CComplex Ex,Ey;	// electric field intensity
		CComplex Dx,Dy; // electric flux density
		CComplex Jcx,Jcy; // conduction current density
		CComplex Jdx,Jdy; // displacement current density
		CComplex Jx,Jy; // AC current density
		CComplex Kx,Ky;	// effective conductivity
		double   ox,oy; // dc conductivity
		CComplex ex,ey; // permittivity
		
		CPointVals();

	private:
};

}

using namespace cviewtype;