📄 femmedoc.cpp
字号:
// Point Properties
if( _strnicmp(q,"<beginpoint>",11)==0){
PProp.PointName="New Point Property";
PProp.Jr=0.;
PProp.Ji=0.;
PProp.Ar=0.;
PProp.Ai=0.;
q[0]=NULL;
}
if( _strnicmp(q,"<pointname>",11)==0){
v=StripKey(s);
k=strlen(v);
for(i=0;i<k;i++)
if(v[i]=='\"'){
v=v+i+1;
i=k;
}
k=strlen(v);
if(k>0) for(i=k-1;i>=0;i--){
if(v[i]=='\"'){
v[i]=0;
i=-1;
}
}
PProp.PointName=v;
q[0]=NULL;
}
if( _strnicmp(q,"<A_re>",6)==0){
v=StripKey(s);
sscanf(v,"%lf",&PProp.Ar);
q[0]=NULL;
}
if( _strnicmp(q,"<A_im>",6)==0){
v=StripKey(s);
sscanf(v,"%lf",&PProp.Ai);
q[0]=NULL;
}
if( _strnicmp(q,"<I_re>",6)==0){
v=StripKey(s);
sscanf(v,"%lf",&PProp.Jr);
q[0]=NULL;
}
if( _strnicmp(q,"<I_im>",6)==0){
v=StripKey(s);
sscanf(v,"%lf",&PProp.Ji);
q[0]=NULL;
}
if( _strnicmp(q,"<endpoint>",9)==0){
nodeproplist.Add(PProp);
q[0]=NULL;
}
// Boundary Properties;
if( _strnicmp(q,"<beginbdry>",11)==0){
BProp.BdryName="New Boundary";
BProp.BdryFormat=0;
BProp.A0=0.;
BProp.A1=0.;
BProp.A2=0.;
BProp.phi=0.;
BProp.Mu=0.;
BProp.Sig=0.;
BProp.c0=0.;
BProp.c1=0.;
q[0]=NULL;
}
if( _strnicmp(q,"<bdryname>",10)==0){
v=StripKey(s);
k=strlen(v);
for(i=0;i<k;i++)
if(v[i]=='\"'){
v=v+i+1;
i=k;
}
k=strlen(v);
if(k>0) for(i=k-1;i>=0;i--){
if(v[i]=='\"'){
v[i]=0;
i=-1;
}
}
BProp.BdryName=v;
q[0]=NULL;
}
if( _strnicmp(q,"<bdrytype>",10)==0){
v=StripKey(s);
sscanf(v,"%i",&BProp.BdryFormat);
q[0]=NULL;
}
if( _strnicmp(q,"<mu_ssd>",8)==0){
v=StripKey(s);
sscanf(v,"%lf",&BProp.Mu);
q[0]=NULL;
}
if( _strnicmp(q,"<sigma_ssd>",11)==0){
v=StripKey(s);
sscanf(v,"%lf",&BProp.Sig);
q[0]=NULL;
}
if( _strnicmp(q,"<A_0>",5)==0){
v=StripKey(s);
sscanf(v,"%lf",&BProp.A0);
q[0]=NULL;
}
if( _strnicmp(q,"<A_1>",5)==0){
v=StripKey(s);
sscanf(v,"%lf",&BProp.A1);
q[0]=NULL;
}
if( _strnicmp(q,"<A_2>",5)==0){
v=StripKey(s);
sscanf(v,"%lf",&BProp.A2);
q[0]=NULL;
}
if( _strnicmp(q,"<phi>",5)==0){
v=StripKey(s);
sscanf(v,"%lf",&BProp.phi);
q[0]=NULL;
}
if( _strnicmp(q,"<c0>",4)==0){
v=StripKey(s);
sscanf(v,"%lf",&BProp.c0);
q[0]=NULL;
}
if( _strnicmp(q,"<c1>",4)==0){
v=StripKey(s);
sscanf(v,"%lf",&BProp.c1);
q[0]=NULL;
}
if( _strnicmp(q,"<endbdry>",9)==0){
lineproplist.Add(BProp);
q[0]=NULL;
}
// Block Properties;
if( _strnicmp(q,"<beginblock>",12)==0){
MProp.BlockName="New Material";
MProp.mu_x=1.;
MProp.mu_y=1.; // permeabilities, relative
MProp.H_c=0.; // magnetization, A/m
MProp.Jr=0.;
MProp.Ji=0.; // applied current density, MA/m^2
MProp.Cduct=0.; // conductivity of the material, MS/m
MProp.Lam_d=0.; // lamination thickness, mm
MProp.Theta_hn=0.; // hysteresis angle, degrees
MProp.Theta_hx=0.;
MProp.Theta_hy=0.;
MProp.LamFill=1.; // lamination fill factor;
MProp.LamType=0; // type of lamination;
MProp.NStrands=0;
MProp.WireD=0;
MProp.BHpoints=0;
MProp.BHdata=NULL;
q[0]=NULL;
}
if( _strnicmp(q,"<blockname>",10)==0){
v=StripKey(s);
k=strlen(v);
for(i=0;i<k;i++)
if(v[i]=='\"'){
v=v+i+1;
i=k;
}
k=strlen(v);
if(k>0) for(i=k-1;i>=0;i--){
if(v[i]=='\"'){
v[i]=0;
i=-1;
}
}
MProp.BlockName=v;
q[0]=NULL;
}
if( _strnicmp(q,"<mu_x>",6)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.mu_x);
q[0]=NULL;
}
if( _strnicmp(q,"<mu_y>",6)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.mu_y);
q[0]=NULL;
}
if( _strnicmp(q,"<H_c>",5)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.H_c);
q[0]=NULL;
}
if( _strnicmp(q,"<J_re>",6)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.Jr);
q[0]=NULL;
}
if( _strnicmp(q,"<J_im>",6)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.Ji);
q[0]=NULL;
}
if( _strnicmp(q,"<sigma>",7)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.Cduct);
q[0]=NULL;
}
if( _strnicmp(q,"<phi_h>",7)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.Theta_hn);
if(vers==30){
MProp.Theta_hx=MProp.Theta_hn;
MProp.Theta_hy=MProp.Theta_hn;
}
q[0]=NULL;
}
if( _strnicmp(q,"<phi_hx>",8)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.Theta_hx);
q[0]=NULL;
}
if( _strnicmp(q,"<phi_hy>",8)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.Theta_hy);
q[0]=NULL;
}
if( _strnicmp(q,"<d_lam>",7)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.Lam_d);
q[0]=NULL;
}
if( _strnicmp(q,"<LamFill>",8)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.LamFill);
q[0]=NULL;
}
if( _strnicmp(q,"<LamType>",9)==0){
v=StripKey(s);
sscanf(v,"%i",&MProp.LamType);
q[0]=NULL;
}
if( _strnicmp(q,"<NStrands>",10)==0){
v=StripKey(s);
sscanf(v,"%i",&MProp.NStrands);
q[0]=NULL;
}
if( _strnicmp(q,"<WireD>",7)==0){
v=StripKey(s);
sscanf(v,"%lf",&MProp.WireD);
q[0]=NULL;
}
if( _strnicmp(q,"<BHPoints>",10)==0){
v=StripKey(s);
sscanf(v,"%i",&MProp.BHpoints);
if (MProp.BHpoints>0)
{
MProp.BHdata=(CComplex *)calloc(MProp.BHpoints,sizeof(CComplex));
for(j=0;j<MProp.BHpoints;j++){
fgets(s,1024,fp);
sscanf(s,"%lf %lf",&MProp.BHdata[j].re,&MProp.BHdata[j].im);
}
}
q[0]=NULL;
}
if( _strnicmp(q,"<endblock>",9)==0){
blockproplist.Add(MProp);
MProp.BHpoints=0;
q[0]=NULL;
}
// Circuit Properties
if( _strnicmp(q,"<begincircuit>",14)==0){
CProp.CircName="New Circuit";
CProp.Amps=0.;
CProp.CircType=0;
q[0]=NULL;
}
if( _strnicmp(q,"<circuitname>",13)==0){
v=StripKey(s);
k=strlen(v);
for(i=0;i<k;i++)
if(v[i]=='\"'){
v=v+i+1;
i=k;
}
k=strlen(v);
if(k>0) for(i=k-1;i>=0;i--){
if(v[i]=='\"'){
v[i]=0;
i=-1;
}
}
CProp.CircName=v;
q[0]=NULL;
}
if( _strnicmp(q,"<totalamps_re>",14)==0){
double inval;
v=StripKey(s);
sscanf(v,"%lf",&inval);
CProp.Amps+=inval;
q[0]=NULL;
}
if( _strnicmp(q,"<totalamps_im>",14)==0){
double inval;
v=StripKey(s);
sscanf(v,"%lf",&inval);
CProp.Amps+=(I*inval);
q[0]=NULL;
}
if( _strnicmp(q,"<circuittype>",13)==0){
v=StripKey(s);
sscanf(v,"%i",&CProp.CircType);
q[0]=NULL;
}
if( _strnicmp(q,"<endcircuit>",12)==0){
circproplist.Add(CProp);
q[0]=NULL;
}
// Points list;
if(_strnicmp(q,"[numpoints]",11)==0){
v=StripKey(s);
sscanf(v,"%i",&k);
for(i=0;i<k;i++)
{
fgets(s,1024,fp);
v=ParseDbl(s,&node.x);
v=ParseDbl(v,&node.y);
v=ParseInt(v,&t);
v=ParseInt(v,&node.InGroup);
if(t==0) node.BoundaryMarker="";
else if(t<=nodeproplist.GetSize())
node.BoundaryMarker=nodeproplist[t-1].PointName;
nodelist.Add(node);
}
q[0]=NULL;
}
// read in segment list
if(_strnicmp(q,"[numsegments]",13)==0){
v=StripKey(s);
sscanf(v,"%i",&k);
for(i=0;i<k;i++)
{
fgets(s,1024,fp);
// some defaults
segm.MaxSideLength=0;
t=0;
segm.Hidden=0;
segm.InGroup=0;
// scan in data
v=ParseInt(s,&segm.n0);
v=ParseInt(v,&segm.n1);
v=ParseDbl(v,&segm.MaxSideLength);
v=ParseInt(v,&t);
v=ParseInt(v,&segm.Hidden);
v=ParseInt(v,&segm.InGroup);
if(t==0) segm.BoundaryMarker="";
else if (t<=lineproplist.GetSize())
segm.BoundaryMarker=lineproplist[t-1].BdryName;
linelist.Add(segm);
}
q[0]=NULL;
}
// read in arc segment list
if(_strnicmp(q,"[numarcsegments]",13)==0){
v=StripKey(s);
sscanf(v,"%i",&k);
for(i=0;i<k;i++)
{
fgets(s,1024,fp);
// some defaults
asegm.Hidden=0;
asegm.MaxSideLength=-1.;
asegm.InGroup=0;
t=0;
// scan in data
v=ParseInt(s,&asegm.n0);
v=ParseInt(v,&asegm.n1);
v=ParseDbl(v,&asegm.ArcLength);
v=ParseDbl(v,&asegm.MaxSideLength);
v=ParseInt(v,&t);
v=ParseInt(v,&asegm.Hidden);
v=ParseInt(v,&asegm.InGroup);
if(t==0) asegm.BoundaryMarker="";
else if (t<=lineproplist.GetSize())
asegm.BoundaryMarker=lineproplist[t-1].BdryName;
arclist.Add(asegm);
}
q[0]=NULL;
}
// read in list of holes;
if(_strnicmp(q,"[numholes]",13)==0){
v=StripKey(s);
sscanf(v,"%i",&k);
if(k>0)
{
blk.BlockType="<No Mesh>";
blk.MaxArea=0;
blk.InGroup=0;
for(i=0;i<k;i++)
{
fgets(s,1024,fp);
v=ParseDbl(s,&blk.x);
v=ParseDbl(v,&blk.y);
v=ParseInt(v,&blk.InGroup);
blocklist.Add(blk);
}
}
q[0]=NULL;
}
// read in regional attributes
if(_strnicmp(q,"[numblocklabels]",13)==0){
v=StripKey(s);
sscanf(v,"%i",&k);
for(i=0;i<k;i++)
{
fgets(s,1024,fp);
//some defaults
t=0;
blk.MaxArea=0.;
blk.MagDir=0.;
blk.Turns=1;
blk.InCircuit="<None>";
blk.InGroup=0;
blk.IsExternal=0;
// scan in data
v=ParseDbl(s,&blk.x);
v=ParseDbl(v,&blk.y);
v=ParseInt(v,&t);
if (t==0) blk.BlockType="<None>";
else if(t<=blockproplist.GetSize())
blk.BlockType=blockproplist[t-1].BlockName;
v=ParseDbl(v,&blk.MaxArea);
if (blk.MaxArea<0) blk.MaxArea=0;
else blk.MaxArea=PI*blk.MaxArea*blk.MaxArea/4.;
v=ParseInt(v,&t);
if (t==0) blk.InCircuit="<None>";
else if(t<=circproplist.GetSize())
blk.InCircuit=circproplist[t-1].CircName;
v=ParseDbl(v,&blk.MagDir);
v=ParseInt(v,&blk.InGroup);
v=ParseInt(v,&blk.Turns);
v=ParseInt(v,&blk.IsExternal);
blocklist.Add(blk);
}
q[0]=NULL;
}
}
fclose(fp);
if(Depth==-1)
{
// if this is a v3.2 file we are importing, make the length
// equal to 1 meter, because 3.2 was all per-meter calculations
switch(LengthUnits)
{
case 1:
Depth=1000.; //mm
break;
case 2:
Depth=100.; //cm
break;
case 3:
Depth=1.; //m
break;
case 4:
Depth=1000./0.0254; // mils
break;
case 5:
Depth=1.e6; // microns
break;
default:
Depth=1./0.0254; // inches
break;
}
}
FirstDraw=TRUE;
return TRUE;
}
BOOL CFemmeDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
// TODO: Add your specialized code here and/or call the base class
FILE *fp;
int i,j,k,t;
CString s;
// check to see if we are ready to write a datafile;
if ((fp=fopen(lpszPathName,"wt"))==NULL){
AfxMessageBox("Couldn't write to specified file.\nPerhaps the file is write-protected?");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -