⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 igrid.c

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 C
📖 第 1 页 / 共 5 页
字号:
    SelectObject (hdcMem, hBitmap);
    SetMapMode (hdcMem, GetMapMode (hdc));

    GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
    ptSize.x = bm.bmWidth;
    ptSize.y = bm.bmHeight;
    DPtoLP(hdc, &ptSize, 1);

    ptOrg.x = 0;
    ptOrg.y = 0;
    DPtoLP(hdcMem, &ptOrg, 1);

    BitBlt(hdc, xStart, yStart, ptSize.x, ptSize.y,
	   hdcMem, ptOrg.x, ptOrg.y, SRCCOPY);

    DeleteDC(hdcMem);
}


BOOL FAR PASCAL _export RectDlgProc(HWND hDlg, UINT message, UINT wParam,
				    LONG lParam)
{

    static double  tepsilon = 1.0, tsigma = 0.0, tmu = 1.0, tsigma_mu = 0.0;
    static double  txloc = (DEFAULTPAPERLEFT + DEFAULTPAPERRIGHT) / 2.0;
    static double  tyloc = (DEFAULTPAPERTOP + DEFAULTPAPERBOTTOM) / 2.0;
    static double  tlength1 = (DEFAULTPAPERRIGHT - DEFAULTPAPERLEFT)/25.0;
    static double  tlength2 = (DEFAULTPAPERTOP - DEFAULTPAPERBOTTOM) / 25.0;
    static int     tdiv1 = 4, tdiv2 = 4;
    static double  torientatn = 0.0;
    HWND    hep, hsigma, hmu, hmu_sigma, hxloc, hyloc, hlength1, hlength2,
	    hdiv1, hdiv2, horientatn;
    HDC     hdc;
    PAINTSTRUCT ps;
    dPOINT  gcenter;
    block   *tmpblk;
    COUNT   totalcount, nscount;
    HMENU   hMenu ;


    switch(message)
      {

      case WM_INITDIALOG:

	if(rectblockselected == NULL){

	  sprintf(sepsilon, "%lg", tepsilon);
	  sprintf(ssigma,   "%lg", tsigma);
	  sprintf(smu,      "%lg", tmu);
	  sprintf(ssigma_mu,"%lg", tsigma_mu);
	  sprintf(sxloc, "%lg", txloc);
	  sprintf(syloc, "%lg", tyloc);
	  sprintf(slength1, "%lg", tlength1);
	  sprintf(slength2,  "%lg", tlength2);
	  sprintf(sdiv1, "%d", tdiv1);
	  sprintf(sdiv2, "%d", tdiv2);
	  sprintf(sorientatn, "%lg", torientatn);

	  hep    = GetDlgItem(hDlg, EPSILON);
	  SetWindowText(hep, sepsilon);

	  hsigma = GetDlgItem(hDlg, SIGMA);
	  SetWindowText(hsigma, ssigma);

	  hmu    = GetDlgItem(hDlg, MU);
	  SetWindowText(hmu, smu);

	  hmu_sigma = GetDlgItem(hDlg, SIGMA_MU);
	  SetWindowText(hmu_sigma, ssigma_mu);

	  hyloc = GetDlgItem(hDlg, YLOC);
	  SetWindowText(hyloc, syloc);

	  hxloc = GetDlgItem(hDlg, XLOC);
	  SetWindowText(hxloc, sxloc);

	  hlength1 = GetDlgItem(hDlg, WIDTH);
	  SetWindowText(hlength1, slength1);

	  hlength2 = GetDlgItem(hDlg, HEIGHT);
	  SetWindowText(hlength2, slength2);

	  hdiv1 = GetDlgItem(hDlg, COLUMN);
	  SetWindowText(hdiv1, sdiv1);

	  hdiv2 = GetDlgItem(hDlg, ROW);
	  SetWindowText(hdiv2, sdiv2);

	  horientatn = GetDlgItem(hDlg, ORIENTATN);
	  SetWindowText(horientatn, sorientatn);
	}
	else{

	  tepsilon = rectblockselected->epsilon;
	  sprintf(sepsilon, "%lg", tepsilon);
	  tsigma = rectblockselected->sigma;
	  sprintf(ssigma, "%lg", tsigma);
	  tmu = rectblockselected->mu;
	  sprintf(smu, "%lg", tmu);
	  tsigma_mu = rectblockselected->sigma_mu;
	  sprintf(ssigma_mu, "%lg", tsigma_mu);

	  txloc = rectblockselected->xloc;
	  sprintf(sxloc, "%lg", txloc);
	  tyloc = rectblockselected->yloc;
	  sprintf(syloc, "%lg", tyloc);
	  tlength1 = rectblockselected->length1;
	  sprintf(slength1, "%lg", tlength1);
	  tlength2 = rectblockselected->length2;
	  sprintf(slength2, "%lg", tlength2);

	  tdiv1 = rectblockselected->div1;
	  sprintf(sdiv1, "%d", tdiv1);
	  tdiv2 = rectblockselected->div2;
	  sprintf(sdiv2, "%d", tdiv2);

	  torientatn = rectblockselected->angle;
	  sprintf(sorientatn,  "%lg", torientatn);

	  hep    = GetDlgItem(hDlg, EPSILON);
	  SetWindowText(hep, sepsilon);

	  hsigma = GetDlgItem(hDlg, SIGMA);
	  SetWindowText(hsigma, ssigma);

	  hmu    = GetDlgItem(hDlg, MU);
	  SetWindowText(hmu, smu);

	  hmu_sigma = GetDlgItem(hDlg, SIGMA_MU);
	  SetWindowText(hmu_sigma, ssigma_mu);

	  hyloc = GetDlgItem(hDlg, YLOC);
	  SetWindowText(hyloc, syloc);

	  hxloc = GetDlgItem(hDlg, XLOC);
	  SetWindowText(hxloc, sxloc);

	  hlength1 = GetDlgItem(hDlg, WIDTH);
	  SetWindowText(hlength1, slength1);

	  hlength2 = GetDlgItem(hDlg, HEIGHT);
	  SetWindowText(hlength2, slength2);

	  hdiv1 = GetDlgItem(hDlg, COLUMN);
	  SetWindowText(hdiv1, sdiv1);

	  hdiv2 = GetDlgItem(hDlg, ROW);
	  SetWindowText(hdiv2, sdiv2);

	  horientatn = GetDlgItem(hDlg, ORIENTATN);
	  SetWindowText(horientatn, sorientatn);

	}

	return TRUE;

      case WM_COMMAND:

	switch(wParam)
	  {
	  case EPSILON:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		tepsilon = atof((const char *)sepsilon);
		if(tepsilon <= 1.0){
		  SetDlgItemText(hDlg, EPSILON, "1.0");
		  tepsilon = 1.0;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, EPSILON, sepsilon, 12);
	      break;
	    }
	  return TRUE;

	  case SIGMA:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		tsigma = atof((const char *)ssigma);
		if(tsigma < 0){
		  SetDlgItemText(hDlg, SIGMA, "0.0");
		  tsigma = 0.0;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, SIGMA, ssigma, 12);
	      break;
	    }
	  return TRUE;

	  case MU:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		tmu = atof((const char *)smu);
		if(tmu < 1.0){
		  SetDlgItemText(hDlg, MU, "1.0");
		  tmu = 1.0;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, MU, smu, 12);
	      break;
	    }
	  return TRUE;

	  case SIGMA_MU:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		tsigma_mu = atof((const char *)ssigma_mu);
		if(tsigma_mu < 0.0 ){
		  SetDlgItemText(hDlg, SIGMA_MU, "0.0");
		  tsigma_mu = 0.0;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, SIGMA_MU, ssigma_mu, 12);
	      break;
	    }
	  return TRUE;

	  case XLOC:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		txloc = atof((const char *)sxloc);
		if(txloc < papersize.left){
		  sprintf(sxloc, "%lg", papersize.left);
		  SetDlgItemText(hDlg, XLOC, sxloc);
		  txloc = papersize.left;
		}
		if(txloc > papersize.right){
		  sprintf(sxloc, "%lg", papersize.right);
		  SetDlgItemText(hDlg, XLOC, sxloc);
		  txloc = papersize.right;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, XLOC, sxloc, 12);
	      break;
	    }

	  case YLOC:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		tyloc = atof((const char *)syloc);
		if(tyloc < papersize.bottom){
		  sprintf(syloc, "%lg", papersize.bottom);
		  SetDlgItemText(hDlg, YLOC, syloc);
		  tyloc = papersize.bottom;
		}
		if(tyloc > papersize.top){
		  sprintf(syloc, "%lg", papersize.top);
		  SetDlgItemText(hDlg, YLOC, syloc);
		  tyloc = papersize.top;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, YLOC, syloc, 12);
	      break;
	    }

	  return TRUE;

	  case WIDTH:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		tlength1 = atof((const char *)slength1);
		if(tlength1 < 0.0 ){
		  sprintf(slength1, "%lg", paperwidth/50.0);
		  SetDlgItemText(hDlg, WIDTH, slength1);
		  tlength1 = paperwidth/50.0;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, WIDTH, slength1, 12);
	      break;
	    }
	  return TRUE;

	  case HEIGHT:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		tlength2 = atof((const char *)slength2);
		if(tlength2 < 0.0 ){
		  sprintf(slength2, "%lg", paperheight/50.0);
		  SetDlgItemText(hDlg, HEIGHT, slength2);
		  tlength2 = paperheight/50.0;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, HEIGHT, slength2, 12);
	      break;
	    }
	  return TRUE;

	  case COLUMN:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		tdiv1 = atoi((const char *)sdiv1);
		if(tdiv1 <= 0 ){
		  SetDlgItemText(hDlg, COLUMN, "1");
		  tdiv1 = 1;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, COLUMN, sdiv1, 12);
	      break;
	    }
	  return TRUE;


	  case ROW:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		tdiv2 = atoi((const char *)sdiv2);
		if(tdiv2 <= 0 ){
		  SetDlgItemText(hDlg, ROW, "2");
		  tdiv2 = 2;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, ROW, sdiv2, 12);
	      break;
	    }
	  return TRUE;

	  case ORIENTATN:
	    switch(HIWORD(lParam)){
	      case EN_KILLFOCUS:
		torientatn = atof((const char *)sorientatn);
		if((torientatn < -360.0) || (torientatn > 360.0)){
		  SetDlgItemText(hDlg, ORIENTATN, "0.0");
		  torientatn = 0.0;
		}
	      break;

	      default:
		GetDlgItemText(hDlg, ORIENTATN, sorientatn, 12);
	      break;
	    }
	  return TRUE;

	  case BYMOUSE:
	    EndDialog(hDlg, 0);

	    if(rectblockselected != NULL){
	      rectblockselected->disconnect();
	      if(selected.remove(rectblockselected) == NO)
		unselected.remove(rectblockselected);
	      InvalidateRect(hwndPaper, NULL, TRUE);
	      rectblockselected = NULL;
	    }
	    tmpblk = new rectblk(tepsilon, tsigma, tmu, tsigma_mu,
	      txloc, tyloc, tlength1, tlength2, tdiv1, tdiv2, torientatn);
	    addon.insert(tmpblk);
	    addon.center(&gcenter);
	    adder.setcenter(gcenter);
	    usermode->releasetoolbar();
	    internalmode = mouse = &adder;
	  return TRUE;

	  case BYCOORD:
	    EndDialog(hDlg, 0);
	    if(rectblockselected != NULL){
	      rectblockselected->disconnect();
	      if(selected.remove(rectblockselected) == NO)
		unselected.remove(rectblockselected);
	      InvalidateRect(hwndPaper, NULL, TRUE);
	      rectblockselected = NULL;
	    }
	    tmpblk = new rectblk(tepsilon, tsigma, tmu, tsigma_mu,
	      txloc, tyloc, tlength1, tlength2, tdiv1, tdiv2, torientatn);
	    addon.insert(tmpblk);
	    adjustallowablesnap();
	    addon.clearconnectmask();
	    unselected.clearconnectmask();
	    selected.clearconnectmask();
	    totalcount = addon.connect(unselected);
	    nscount    = addon.connect(selected);
	    totalcount.node += nscount.node;
	    totalcount.side += nscount.side;
	    addon.transfer(unselected);
	    hdc = GetDC(hwndPaper);
	    setdrawingcoord(hdc);
	    ReleaseDC(hwndPaper, hdc);
	    InvalidateRect(hwndPaper, NULL, TRUE);
	    sprintf(connectmessage, "Connection: node:%d side:%d .",
		    totalcount.node, totalcount.side);
	    SetWindowText(hwndMessage3, connectmessage);
	    hMenu = GetMenu (hwndMain) ;
	    EnableMenuItem (hMenu, IDM_GENERATE, MF_ENABLED);
	    DrawMenuBar(hwndMain);
	  return TRUE;


	  case DLGCANCEL:
	    EndDialog(hDlg, 0);
	    rectblockselected = NULL;
	  return TRUE;

	}
      break;
    }
    return FALSE;
}


BOOL FAR PASCAL _export QuadDlgProc(HWND hDlg, UINT message, UINT wParam,
				    LONG lParam)
{

    static double  tepsilon = 1.0, tsigma = 0.0, tmu = 1.0, tsigma_mu = 0.0;
    static double  txloc = (DEFAULTPAPERLEFT + DEFAULTPAPERRIGHT) / 2.0;
    static double  tyloc = (DEFAULTPAPERTOP + DEFAULTPAPERBOTTOM) / 2.0;
    static double  tcornerx1 = (DEFAULTPAPERRIGHT - DEFAULTPAPERLEFT) / 25.0, tcornery1 = 0.0;
    static double  tcornerx2 = (DEFAULTPAPERRIGHT - DEFAULTPAPERLEFT) * 3.0 / 100.0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -