// femmviewDoc.h : interface of the CFemmviewDoc class // ///////////////////////////////////////////////////////////////////////////// #include "lua.h" #include "luadebug.h" #include "luaconsoledlg.h" //#define APPROXGAP extern CFemmApp theApp; // class CFemmviewDoc : public CDocument { protected: // create from serialization only CFemmviewDoc(); DECLARE_DYNCREATE(CFemmviewDoc) // Attributes public: // General problem attributes double Frequency; double Depth; int LengthUnits; double *LengthConv; BOOL ProblemType; BOOL Coords; CString ProblemNote; CString PrevSoln; int PrevType; BOOL bIncremental; BOOL FirstDraw; BOOL Smooth; BOOL bMultiplyDefinedLabels; int WeightingScheme; double extRo,extRi,extZo; double A_High, A_Low; double A_lb, A_ub; double PlotBounds[9][2]; double d_PlotBounds[9][2]; // double Br_High,Br_Low; // double Bi_High,Bi_Low; double B_High, B_Low; double H_High; // double B_lb, B_ub; // double Jr_High,Jr_Low; // double Ji_High,Ji_Low; // double J_High, J_Low; // Some default behaviors CString BinDir; int d_LineIntegralPoints; int d_WeightingScheme; BOOL d_ShiftH; BOOL bHasMask; // lists of nodes, segments, and block labels CArray< femmviewdata::CNode, femmviewdata::CNode&> nodelist; CArray< femmviewdata::CSegment, femmviewdata::CSegment&> linelist; CArray< femmviewdata::CBlockLabel, femmviewdata::CBlockLabel&> blocklist; CArray< femmviewdata::CArcSegment, femmviewdata::CArcSegment&> arclist; // CArrays containing the mesh information CArray< femmviewdata::CMeshNode, femmviewdata::CMeshNode&> meshnode; CArray< femmviewdata::CElement, femmviewdata::CElement&> meshelem; CArray< femmviewdata::CAirGapElement, femmviewdata::CAirGapElement&> agelist; // List of elements connected to each node; int *NumList; int **ConList; // lists of properties CArray< femmviewdata::CMaterialProp, femmviewdata::CMaterialProp& > blockproplist; CArray< femmviewdata::CBoundaryProp, femmviewdata::CBoundaryProp& > lineproplist; CArray< femmviewdata::CPointProp, femmviewdata::CPointProp& > nodeproplist; CArray< femmviewdata::CCircuit, femmviewdata::CCircuit& > circproplist; // list of points in a user-defined contour; CArray< CComplex, CComplex& > contour; // stuff that PTLOC needs CArray< CMeshNode, CMeshNode&> *pmeshnode; CArray< CElement, CElement&> *pmeshelem; // TriEdge recenttri; // int samples; // unsigned long randomseed; // TriEdge bdrylinkhead[512]; // int numberofbdrylink; // member functions int InTriangle(double x, double y); BOOL InTriangleTest(double x, double y, int i); BOOL GetPointValues(double x, double y, CPointVals &u); BOOL GetPointValues(double x, double y, int k, CPointVals &u); void GetLineValues(CXYPlot &p, int PlotType, int npoints); void GetGapValues(CXYPlot &p, int PlotType, int npoints, int myAGE); void GetElementB(femmviewdata::CElement &elm); void OnReload(); void FindBoundaryEdges(); int ClosestNode(double x, double y); int ClosestSegment(double x, double y); double ShortestDistance(double p, double q, int segm); CComplex Ctr(int i); double ElmArea(int i); double ElmArea(femmviewdata::CElement *elm); void GetPointB(double x, double y, CComplex &B1, CComplex &B2, femmviewdata::CElement &elm); void GetNodalB(CComplex *b1, CComplex *b2,femmviewdata::CElement &elm); CComplex BlockIntegral(int inttype); void LineIntegral(int inttype, CComplex *z); int ClosestArcSegment(double x, double y); void GetCircle(femmviewdata::CArcSegment &asegm,CComplex &c, double &R); double ShortestDistanceFromArc(CComplex p, femmviewdata::CArcSegment &arc); double ShortestDistanceFromSegment(double p, double q, int segm); CComplex GetJA(int k,CComplex *J,CComplex *A); CComplex PlnInt(double a, CComplex *u, CComplex *v); CComplex AxiInt(double a, CComplex *u, CComplex *v,double *r); BOOL ScanPreferences(); void BendContour(double angle, double anglestep); BOOL MakeMask(); CComplex HenrotteVector(int k); BOOL IsKosher(int k); double AECF(int k); void GetFillFactor(int lbl); CComplex GetStrandedVoltageDrop(int lbl); CComplex GetVoltageDrop(int circnum); CComplex GetFluxLinkage(int circnum); CComplex GetStrandedLinkage(int lbl); CComplex GetSolidAxisymmetricLinkage(int lbl); CComplex GetParallelLinkage(int numcirc); CComplex GetParallelLinkageAlt(int numcirc); void GetMu(CComplex b1, CComplex b2,CComplex &mu1, CComplex &mu2, int i); void GetMu(double b1, double b2, double &mu1, double &mu2, int i); void GetMagnetization(int n, CComplex &M1, CComplex &M2); void GetH(double b1, double b2, double &h1, double &h2, int k); void GetH(CComplex b1, CComplex b2, CComplex &h1, CComplex &h2, int k); // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CFemmviewDoc) public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); virtual BOOL OnOpenDocument(LPCTSTR lpszPathName); virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); //}}AFX_VIRTUAL // Implementation public: // lua extensions bool luafired; void initalise_lua(); static int lua_dumpheader(lua_State * L); static int lua_getpointvals(lua_State * L); static int lua_exitpost(lua_State * L); static int lua_addcontour(lua_State * L); static int lua_clearcontour(lua_State * L); static int lua_lineintegral(lua_State * L); static int lua_selectblock(lua_State * L); static int lua_groupselectblock(lua_State * L); static int lua_blockintegral(lua_State * L); static int lua_clearblock(lua_State * L); static int lua_zoomout(lua_State * L); static int lua_zoomin(lua_State * L); static int lua_zoomnatural(lua_State * L); static int lua_hidemesh(lua_State * L); static int lua_showmesh(lua_State * L); static int lua_showgrid(lua_State * L); static int lua_hidegrid(lua_State * L); static int lua_showdensity(lua_State * L); static int lua_hidedensity(lua_State * L); static int lua_hidecountour(lua_State * L); static int lua_showcountour(lua_State * L); static int lua_zoom(lua_State * L); static int lua_smoothing(lua_State * L); static int lua_hidepoints(lua_State * L); static int lua_showpoints(lua_State * L); static int lua_gridsnap(lua_State * L); static int lua_setgrid(lua_State * L); static int lua_getprobleminfo(lua_State * L); static int lua_savebitmap(lua_State * L); PBITMAPINFO CreateBitmapInfoStruct(HWND hwnd, HBITMAP hBmp); void CreateBMPFile(HWND hwnd, LPTSTR pszFile, PBITMAPINFO pbi,HBITMAP hBMP, HDC hDC) ; static int lua_getcircuitprops(lua_State *L); static int lua_saveWMF(lua_State *L); static int lua_refreshview(lua_State *L); static int lua_selectline(lua_State *L); static int lua_seteditmode(lua_State *L); static int lua_bendcontour(lua_State *L); static int lua_makeplot(lua_State *L); static int lua_shownames(lua_State *L); static int lua_vectorplot(lua_State *L); static int lua_gradient(lua_State *L); static int lua_reload(lua_State *L); static int lua_switchfocus(lua_State *L); static int luaResize(lua_State *L); static int luaMinimize(lua_State *L); static int luaMaximize(lua_State *L); static int luaRestore(lua_State *L); static int lua_gettitle(lua_State *L); static int lua_weighting(lua_State *L); // commands to access low-level information through Lua static int lua_numnodes(lua_State *L); static int lua_numelements(lua_State *L); static int lua_getnode(lua_State *L); static int lua_getelement(lua_State *L); // functions used for compatibility with older versions static int old_lua_lineintegral(lua_State * L); static int old_lua_getpointvals(lua_State * L); static int old_lua_blockintegral(lua_State * L); static int old_lua_getcircuitprops(lua_State *L); // functions used to query air gap elements static int lua_getAGEflux(lua_State *L); static int lua_gapintegral(lua_State *L); static int lua_getgapa(lua_State *L); static int lua_getgapharmonics(lua_State *L); virtual ~CFemmviewDoc(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Generated message map functions protected: //{{AFX_MSG(CFemmviewDoc) //}}AFX_MSG DECLARE_MESSAGE_MAP() public: }; ///////////////////////////////////////////////////////////////////////////// char* StripKey(char *c);