📄 fe_libdlg.cpp
字号:
if(m_dragTargetList!=NULL)
{
if(!IsFolder(m_dragTargetList)){
int k=m_mylist.GetItemData(m_dragTargetList);
ModifyMaterial(k);
m_mylist.SetItemText(m_dragTargetList,LibProps[k].BlockName);
}
}
*pResult = 0;
}
void fe_CLibDlg::OnDblclkMytree(NMHDR* pNMHDR, LRESULT* pResult)
{
POINT point;
GetCursorPos(&point);
CPoint ptList(point);
UINT uHitTest = TVHT_ONITEM;
GetDesktopWindow()->MapWindowPoints( &m_mytree, &ptList, 1 );
m_dragTargetTree = m_mytree.HitTest( ptList, &uHitTest );
m_dragTargetList = NULL;
if(m_dragTargetTree!=NULL)
{
if(!IsFolder(m_dragTargetTree)){
int k=m_mytree.GetItemData(m_dragTargetTree);
ModifyMaterial(k);
m_mytree.SetItemText(m_dragTargetTree,LibProps[k].BlockName);
}
}
*pResult = 0;
}
void fe_CLibDlg::ModifyMaterial(int k)
{
CMatDlg zDlg;
zDlg.m_mu_x=LibProps[k].mu_x;
zDlg.m_mu_y=LibProps[k].mu_y;
zDlg.m_H_c=LibProps[k].H_c;
zDlg.m_Jr=LibProps[k].Jr;
zDlg.m_Ji=LibProps[k].Ji;
zDlg.m_Cduct=LibProps[k].Cduct;
zDlg.m_Lam_d=LibProps[k].Lam_d;
zDlg.m_Theta_hn=LibProps[k].Theta_hn;
zDlg.m_Theta_hx=LibProps[k].Theta_hx;
zDlg.m_Theta_hy=LibProps[k].Theta_hy;
zDlg.m_WireD=LibProps[k].WireD;
zDlg.m_NStrands=LibProps[k].NStrands;
zDlg.m_BlockName=LibProps[k].BlockName;
zDlg.LamType=LibProps[k].LamType;
zDlg.m_lam_fill=LibProps[k].LamFill;
// for(int nn=0;nn<LibProps.GetSize();nn++)
// if(nn!=k) zDlg.namelist.Add(LibProps[nn].BlockName);
if (LibProps[k].BHpoints==0) zDlg.m_nlflag=FALSE;
else{
zDlg.m_nlflag=TRUE;
LibProps[k].BHDataToCString(zDlg.BData,zDlg.HData);
}
if(pDoc->ProblemType==0){
zDlg.m_mu1label="x";
zDlg.m_mu2label="y";
zDlg.m_h1label="hx";
zDlg.m_h2label="hy";
}
else{
zDlg.m_mu1label="r";
zDlg.m_mu2label="z";
zDlg.m_h1label="hr";
zDlg.m_h2label="hz";
}
if(zDlg.DoModal()==IDOK){
LibProps[k].BlockName=zDlg.m_BlockName;
LibProps[k].mu_x=zDlg.m_mu_x;
LibProps[k].mu_y=zDlg.m_mu_y;
LibProps[k].H_c=zDlg.m_H_c;
LibProps[k].Jr=zDlg.m_Jr;
LibProps[k].Ji=zDlg.m_Ji;
LibProps[k].Cduct=zDlg.m_Cduct;
LibProps[k].Lam_d=zDlg.m_Lam_d;
LibProps[k].Theta_hn=zDlg.m_Theta_hn;
LibProps[k].Theta_hx=zDlg.m_Theta_hx;
LibProps[k].Theta_hy=zDlg.m_Theta_hy;
LibProps[k].NStrands=zDlg.m_NStrands;
LibProps[k].WireD=zDlg.m_WireD;
LibProps[k].LamType=zDlg.LamType;
LibProps[k].LamFill=zDlg.m_lam_fill;
if (zDlg.m_nlflag==FALSE)
{
zDlg.BData.Empty();
zDlg.HData.Empty();
}
LibProps[k].StripBHData(zDlg.BData,zDlg.HData);
}
}
void fe_CLibDlg::MouseModify()
{
if(m_dragTargetList!=NULL)
{
if(!IsFolder(m_dragTargetList)){
int k=m_mylist.GetItemData(m_dragTargetList);
ModifyMaterial(k);
m_mylist.SetItemText(m_dragTargetList,LibProps[k].BlockName);
}
}
if(m_dragTargetTree!=NULL)
{
if(!IsFolder(m_dragTargetTree)){
int k=m_mytree.GetItemData(m_dragTargetTree);
ModifyMaterial(k);
m_mytree.SetItemText(m_dragTargetTree,LibProps[k].BlockName);
}
else{
CLibFolderInfo dlg;
int k=m_mytree.GetItemData(m_dragTargetTree);
dlg.m_foldername =FoldProps[k].FolderName;
dlg.m_folderurl =FoldProps[k].FolderURL;
dlg.m_foldervendor=FoldProps[k].FolderVendor;
if (dlg.DoModal()==IDOK)
{
m_mytree.SetItemText(m_dragTargetTree,dlg.m_foldername);
FoldProps[k].FolderName =dlg.m_foldername;
FoldProps[k].FolderURL =dlg.m_folderurl;
FoldProps[k].FolderVendor=dlg.m_foldervendor;
}
}
}
}
void fe_CLibDlg::OnOK()
{
HTREEITEM hChild;
CArray<CMaterialProp,CMaterialProp&> &blockproplist=pDoc->blockproplist;
int k;
// copy Model Materials into the model
blockproplist.RemoveAll();
hChild=m_mytree.GetChildItem(ModelParent) ;
while (hChild!=NULL)
{
k=m_mytree.GetItemData(hChild);
blockproplist.Add(LibProps[k]);
CopyBHdata(LibProps[k],blockproplist[blockproplist.GetUpperBound()]);
hChild = m_mytree.GetNextSiblingItem(hChild) ;
}
// write Library Materials to disk
CString LibName=BinDir+"matlib.dat";
FILE *fp;
if ((fp=fopen(LibName,"wt"))==NULL) return;
hChild=m_mytree.GetChildItem(LibParent);
while(hChild!=NULL)
{
CopyItemToDisk(hChild,fp);
hChild = m_mytree.GetNextSiblingItem(hChild) ;
}
fclose(fp);
CResizableDialog::OnOK();
}
void fe_CLibDlg::CopyItemToDisk(HTREEITEM hItem, FILE *fp)
{
HTREEITEM hChild;
int i = m_mytree.GetItemData(hItem);
if (IsFolder(hItem))
{
fprintf(fp,"<BeginFolder>\n");
fprintf(fp,"<FolderName> = \"%s\"\n",FoldProps[i].FolderName);
if(FoldProps[i].FolderURL!="")
fprintf(fp,"<FolderURL> = \"%s\"\n",FoldProps[i].FolderURL);
if(FoldProps[i].FolderVendor!="")
fprintf(fp,"<FolderVendor> = \"%s\"\n",FoldProps[i].FolderVendor);
hChild=m_mytree.GetChildItem(hItem) ;
while (hChild!=NULL)
{
CopyItemToDisk(hChild,fp) ;
hChild = m_mytree.GetNextSiblingItem(hChild) ;
}
fprintf(fp,"<EndFolder>\n");
}
else{
fprintf(fp,"<BeginBlock>\n");
fprintf(fp,"<BlockName> = \"%s\"\n",LibProps[i].BlockName);
fprintf(fp,"<Mu_x> = %.17g\n",LibProps[i].mu_x);
fprintf(fp,"<Mu_y> = %.17g\n",LibProps[i].mu_y);
fprintf(fp,"<H_c> = %.17g\n",LibProps[i].H_c);
fprintf(fp,"<H_cAngle> = %.17g\n",LibProps[i].Theta_m);
fprintf(fp,"<J_re> = %.17g\n",LibProps[i].Jr);
fprintf(fp,"<J_im> = %.17g\n",LibProps[i].Ji);
fprintf(fp,"<Sigma> = %.17g\n",LibProps[i].Cduct);
fprintf(fp,"<d_lam> = %.17g\n",LibProps[i].Lam_d);
fprintf(fp,"<Phi_h> = %.17g\n",LibProps[i].Theta_hn);
fprintf(fp,"<Phi_hx> = %.17g\n",LibProps[i].Theta_hx);
fprintf(fp,"<Phi_hy> = %.17g\n",LibProps[i].Theta_hy);
fprintf(fp,"<LamType> = %i\n",LibProps[i].LamType);
fprintf(fp,"<LamFill> = %.17g\n",LibProps[i].LamFill);
fprintf(fp,"<NStrands> = %i\n",LibProps[i].NStrands);
fprintf(fp,"<WireD> = %.17g\n",LibProps[i].WireD);
fprintf(fp,"<BHPoints> = %i\n",LibProps[i].BHpoints);
for(int j=0;j<LibProps[i].BHpoints;j++)
fprintf(fp," %.17g %.17g\n",LibProps[i].BHdata[j].re,LibProps[i].BHdata[j].im);
fprintf(fp,"<EndBlock>\n\n");
}
}
void fe_CLibDlg::VendorLink()
{
if (VendorURL!="")
ShellExecute(m_hWnd,"open",VendorURL,"","",SW_SHOWMAXIMIZED);
else
MsgBox("No URL available for %s",VendorName);
}
void fe_CLibDlg::ImportMaterials()
{
CFileDialog *fname_dia;
CString SourceFile;
fname_dia=new CFileDialog(
TRUE,
"fem | * ",
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Magnetostatic Input File (*.fem) | *.fem; *.FEM | All Files (*.*) | *.*||",
NULL);
if(fname_dia->DoModal()==IDCANCEL){
delete[] fname_dia;
return;
}
SourceFile=fname_dia->GetPathName();
delete[] fname_dia;
// Add selected properties to the library;
FILE *fp;
CMaterialProp MProp;
CFolderProp FProp;
char s[1024];
int k;
BOOL bToLibrary=TRUE;
if ((fp=fopen(SourceFile,"rt"))==NULL) return;
Ancestors.RemoveAll();
if(m_dragTargetTree!=NULL){
// importing into the library
// put the imported materials in a new folder
Parent=m_mytree.InsertItem("Imported Materials", 0, 1, LibParent, TVI_FIRST );
FProp.FolderName="Imported Materials";
FProp.FolderURL="";
FProp.FolderVendor="";
FoldProps.Add(FProp);
m_mytree.SetItemData(Parent,FoldProps.GetUpperBound());
}
else if(m_dragTargetList!=NULL){
Parent=ModelParent;
bToLibrary=FALSE;
}
else return;
while (fgets(s,1024,fp)!=NULL)
{
switch(ParseLine(s,fp,MProp))
{
case 1:
// add a material to library
k=LibProps.GetSize();
LibProps.Add(MProp);
if(bToLibrary)
m_mytree.InsertItem(TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_TEXT,
MProp.BlockName,2,2,NULL,NULL,k,Parent,NULL);
else
m_mylist.InsertItem(TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_TEXT,
MProp.BlockName,2,2,NULL,NULL,k,Parent,NULL);
MProp.BHpoints=0;
break;
case 2:
if (bToLibrary)
{
// open a new folder
if (Parent!=NULL) Ancestors.Add(Parent);
k=FoldProps.GetSize();
FoldProps.Add(FProp);
Parent=m_mytree.InsertItem(TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_TEXT,
FProp.FolderName,0,1,NULL,NULL,k,Parent,NULL);
}
break;
case 3:
if (bToLibrary)
{
// close a folder
k=Ancestors.GetUpperBound();
if (k>=0){
Parent=Ancestors[k];
Ancestors.RemoveAt(k);
}
}
break;
default:
break;
}
}
MProp.BHpoints=0;
fclose(fp);
}
BOOL fe_CLibDlg::IsTailChasing(HTREEITEM hSource, HTREEITEM hDest)
{
HTREEITEM hItem;
hItem=hDest;
while(hItem!=NULL)
{
if(hSource==hItem) return TRUE;
hItem=m_mytree.GetParentItem(hItem);
}
return FALSE;
}
void fe_CLibDlg::OnKeydownMylist(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
if(pTVKeyDown->wVKey==VK_DELETE){
HTREEITEM hItem=m_mylist.GetSelectedItem();
if ((hItem!=NULL) && (hItem!=ModelParent))
m_mylist.DeleteItem(hItem);
}
if(pTVKeyDown->wVKey==VK_INSERT){
m_dragTargetList=m_mylist.GetSelectedItem();
m_dragTargetTree=NULL;
AddNewProperty();
}
*pResult = 0;
}
void fe_CLibDlg::OnKeydownMytree(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
if(pTVKeyDown->wVKey==VK_DELETE){
HTREEITEM hItem=m_mytree.GetSelectedItem();
if ((hItem!=NULL) && (hItem!=LibParent))
m_mytree.DeleteItem(hItem);
}
if(pTVKeyDown->wVKey==VK_INSERT){
m_dragTargetTree=m_mytree.GetSelectedItem();
m_dragTargetList=NULL;
AddNewProperty();
}
*pResult = 0;
}
void fe_CLibDlg::OnTimer(UINT nIDEvent)
{
POINT pt ;
GetCursorPos ( &pt ) ;
RECT rect ;
// check if Library needs to be scrolled and do it;
m_mytree.GetClientRect ( &rect ) ;
m_mytree.ClientToScreen ( &rect ) ;
if((pt.x>rect.left) && (pt.x<rect.right))
{
if ( pt.y < rect.top + 10 )
{
CImageList::DragShowNolock ( FALSE ) ;
m_mytree.SendMessage ( WM_VSCROLL, SB_LINEUP ) ;
CImageList::DragShowNolock ( TRUE ) ;
}
else
{
if ( pt.y > rect.bottom - 10 )
{
CImageList::DragShowNolock ( FALSE ) ;
m_mytree.SendMessage ( WM_VSCROLL, SB_LINEDOWN ) ;
CImageList::DragShowNolock ( TRUE ) ;
}
}
}
// check if Model Materials needs to be scrolled and do it;
m_mylist.GetClientRect ( &rect ) ;
m_mylist.ClientToScreen ( &rect ) ;
if((pt.x>rect.left) && (pt.x<rect.right))
{
if ( pt.y < rect.top + 10 )
{
CImageList::DragShowNolock ( FALSE ) ;
m_mylist.SendMessage ( WM_VSCROLL, SB_LINEUP ) ;
CImageList::DragShowNolock ( TRUE ) ;
}
else
{
if ( pt.y > rect.bottom - 10 )
{
CImageList::DragShowNolock ( FALSE ) ;
m_mylist.SendMessage ( WM_VSCROLL, SB_LINEDOWN ) ;
CImageList::DragShowNolock ( TRUE ) ;
}
}
}
CResizableDialog::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -