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

📄 gridsub3.c

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 C
📖 第 1 页 / 共 3 页
字号:
	  SetWindowText(hwndMessage, rotinstructn3);
	  SetWindowText(hwndMessage2, rotinstructn4);
	}
      }
      else if((singleblock = unselected.enclosepoint(lever))!=NULL){
	singleblock->getreference(&pivot);
	v1.x = lever.x - pivot.x;
	v1.y = lever.y - pivot.y;
	if(sqrt(v1.x * v1.x + v1.y * v1.y) != 0.0){
	  flag.rotatingobject = UNSELECTED;
	  SetWindowText(hwndMessage, rotinstructn5);
	  SetWindowText(hwndMessage2, rotinstructn6);
	}
      }
      psin = 0.0;
      pcos = 1.0;
      flag.previousoutline = NO;
      flag.reconnect = NO;
    }
    else if(flag.rotatingobject == SELECTED){
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      if(flag.previousoutline){
	selected.outline(hdc, R2_NOTXORPEN, hPenDotBlack, pivot, psin, pcos);
	flag.previousoutline = NO;
      }
      ReleaseDC(hwnd, hdc) ;
      if(flag.reconnect == YES){
	hcursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
	ShowCursor(TRUE);
	selected.disconnect(unselected);
	selected.move(pivot, psin, pcos);
	selected.clearconnectmask();
	unselected.clearconnectmask();
	totalcount = selected.connect(unselected);
	ShowCursor(FALSE);
	SetCursor(hcursor);
      }
      flag.reconnect = NO;
      flag.rotatingobject = NO;
      InvalidateRect(hwndPaper, NULL, TRUE);
      SendMessage(hwndMain, WM_COMMAND, NEEDSAVE, 0L);
      sprintf(connectmessage, "Connection: node:%d side:%d .",
	    totalcount.node, totalcount.side);
      SetWindowText(hwndMessage3, connectmessage);
      SetWindowText(hwndMessage, rotinstructn1);
      SetWindowText(hwndMessage2, rotinstructn2);
    }

    else if(flag.rotatingobject == UNSELECTED){
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      if(flag.previousoutline){
	singleblock->outline(hdc, R2_NOTXORPEN, hPenDotBlack, pivot, psin, pcos);
	flag.previousoutline = NO;
      }
      ReleaseDC(hwnd, hdc) ;
      if(flag.reconnect == YES){
	hcursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
	ShowCursor(TRUE);
	singleblock->disconnect();
	singleblock->move(pivot, psin, pcos);
	selected.clearconnectmask();
	unselected.clearconnectmask();
	totalcount = singleblock->connect(selected);
	nscount    = singleblock->connect(unselected);
	totalcount.node += nscount.node;
	totalcount.side += nscount.side;
	ShowCursor(FALSE);
	SetCursor(hcursor);
      }
      flag.reconnect = NO;
      flag.rotatingobject = NO;
      InvalidateRect(hwndPaper, NULL, TRUE);
      SendMessage(hwndMain, WM_COMMAND, NEEDSAVE, 0L);
      sprintf(connectmessage, "Connection: node:%d side:%d .",
	    totalcount.node, totalcount.side);
      SetWindowText(hwndMessage3, connectmessage);
      SetWindowText(hwndMessage, rotinstructn1);
      SetWindowText(hwndMessage2, rotinstructn2);
    }
}

void rotateobjectmode::move(HWND hwnd, LONG lParam){

    POINT point;
    dPOINT p;
    HDC   hdc;
    double sintheta, costheta;

    if(flag.rotatingobject == SELECTED){
      point = MAKEPOINT(lParam);
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      DPtoLP(hdc, &point, 1);
      if(flag.previousoutline){
	selected.outline(hdc, R2_NOTXORPEN, hPenDotBlack, pivot, psin, pcos);
	flag.previousoutline = NO;
      }
      lptodrawing(point, &lever);
      messagemouseloc(lever);
      v2.x = lever.x - pivot.x;
      v2.y = lever.y - pivot.y;
      if(evalsin(v1, v2, &sintheta) &&
	 evalcos(v1, v2, &costheta)){
	selected.outline(hdc, R2_NOTXORPEN, hPenDotBlack, pivot, sintheta, costheta);
	psin  = sintheta;
	pcos = costheta;
	flag.previousoutline = YES;
	flag.reconnect = YES;    
      }
      ReleaseDC(hwnd, hdc) ;
      SetWindowText(hwndMessage, rotinstructn7);
      SetWindowText(hwndMessage2, rotinstructn8);
    }

    else if(flag.rotatingobject == UNSELECTED){
      point = MAKEPOINT(lParam);
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      DPtoLP(hdc, &point, 1);
      if(flag.previousoutline){
	singleblock->outline(hdc, R2_NOTXORPEN, hPenDotBlack, pivot, psin, pcos);
	flag.previousoutline = NO;
      }
      lptodrawing(point, &lever);
      messagemouseloc(lever);
      v2.x = lever.x - pivot.x;
      v2.y = lever.y - pivot.y;
      if(evalsin(v1, v2, &sintheta) &&
	 evalcos(v1, v2, &costheta)){
	singleblock->outline(hdc, R2_NOTXORPEN, hPenDotBlack, pivot, sintheta, costheta);
	psin  = sintheta;
	pcos = costheta;
	flag.previousoutline = YES;
	flag.reconnect = YES;    
      }
      ReleaseDC(hwnd, hdc) ;
      SetWindowText(hwndMessage, rotinstructn7);
      SetWindowText(hwndMessage2, rotinstructn8);
    }
    else{
      point = MAKEPOINT(lParam);
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      DPtoLP(hdc, &point, 1);
      lptodrawing(point, &p);
      messagemouseloc(p);
      ReleaseDC(hwnd, hdc) ;
    }
}

void rotateobjectmode::ldownmove(HWND hwnd, LONG lParam){

    move(hwnd, lParam);
}

void rotateobjectmode::rbuttondown(void){

    HDC hdc;

    hdc = GetDC(hwndPaper);
    setdrawingcoord(hdc);
    if(flag.rotatingobject == SELECTED){
      if(flag.previousoutline)
	selected.outline(hdc, R2_NOTXORPEN, hPenDotBlack, pivot, psin, pcos);
      flag.rotatingobject = NO;
    }

    if(flag.rotatingobject == UNSELECTED){
      if(flag.previousoutline)
	singleblock->outline(hdc, R2_NOTXORPEN, hPenDotBlack, pivot, psin, pcos);
      flag.rotatingobject = NO;
    }
    ReleaseDC(hwndPaper, hdc);
    flag.previousoutline = NO;
    flag.reconnect = NO;
    SetWindowText(hwndMessage, rotinstructn1);
    SetWindowText(hwndMessage2, rotinstructn2);
}


void rotateobjectmode::ldblclk(HWND hwnd, LONG lParam){

    POINT  point;
    dPOINT p;
    HDC    hdc;
    block  *bp;

    rbuttondown();
    point = MAKEPOINT(lParam);
    hdc = GetDC(hwnd);
    setdrawingcoord(hdc);
    DPtoLP(hdc, &point, 1);
    ReleaseDC(hwnd, hdc) ;
    lptodrawing(point, &p);

    if((bp = selected.enclosepoint(p)) != NULL){
      blockselected = bp;
      snapedcoord = bp->snaptonode(p);
      SendMessage(hwndMain, WM_COMMAND, IDM_ROTATEBYANGLE, 0L);
    }
    else if((bp = unselected.enclosepoint(p)) != NULL){
      blockselected = bp;
      snapedcoord = bp->snaptonode(p);
      SendMessage(hwndMain, WM_COMMAND, IDM_ROTATEBYANGLE, 0L);
    }
    else if(selected.empty() == NO){
      blockselected = NULL;
      if(option.checkposition == YES){
	snapedcoord.x = (double)(option.position * floor(0.5 + p.x/option.position));
	snapedcoord.y = (double)(option.position * floor(0.5 + p.y/option.position));
      }
      else{
	snapedcoord.x = p.x;
	snapedcoord.y = p.y;
      }
      SendMessage(hwndMain, WM_COMMAND, IDM_ROTATEBYANGLE, 0L);
    }
}


void rotateobjectmode::presstoolbar(void){

    HDC hdc;

    hdc = GetDC(hwndMain);
    DrawBitmap(hdc, hBmproton, ROTATE_X,  0);
    ReleaseDC(hwndMain, hdc);
}

void rotateobjectmode::releasetoolbar(void){

    HDC hdc;

    hdc = GetDC(hwndMain);
    DrawBitmap(hdc, hBmprotoff, ROTATE_X,  0);
    ReleaseDC(hwndMain, hdc);

    rbuttondown();
}



void modifymode::lbuttondown(HWND hwnd, LONG lParam){

    POINT point;
    HDC   hdc;

    if(flag.anchor == NO){
      point = MAKEPOINT(lParam);
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      DPtoLP(hdc, &point, 1);
      ReleaseDC(hwnd, hdc) ;
      enclosure.left = point.x;
      enclosure.top = point.y;
      flag.previousoutline = NO;
      flag.anchor = YES;
    }
}

void modifymode::move(HWND hwnd, LONG lParam){

    POINT point;
    dPOINT p;
    HDC   hdc;

    point = MAKEPOINT(lParam);
    hdc = GetDC(hwnd);
    setdrawingcoord(hdc);
    DPtoLP(hdc, &point, 1);
    lptodrawing(point, &p);
    messagemouseloc(p);
    ReleaseDC(hwnd, hdc) ;
}


void modifymode::ldownmove(HWND hwnd, LONG lParam){

    POINT point;
    dPOINT p;
    HDC   hdc;

    if(flag.anchor == YES){
      point = MAKEPOINT(lParam);
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      DPtoLP(hdc, &point, 1);
      lptodrawing(point, &p);
      messagemouseloc(p);
      if(flag.previousoutline){
	drawdottedrect(hdc, enclosure);
	flag.previousoutline = NO;
      }
      enclosure.right = point.x;
      enclosure.bottom = point.y;
      drawdottedrect(hdc, enclosure);
      flag.previousoutline = YES;
      ReleaseDC(hwnd, hdc) ;
    }
}

void modifymode::lbuttonup(HWND hwnd){

    POINT point;
    HDC   hdc;
    HMENU hMenu;
    dRECT drect;
    int   n1 = 0, n2 = 0;
    dPOINT dpoint;

    if(flag.anchor == YES){
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      if(flag.previousoutline){ // modify properties enclosed
	drawdottedrect(hdc, enclosure);
	point = *(PPOINT) &enclosure.left;
	lptodrawing(point, (dPOINT *)&(drect.left));
	point = *(PPOINT) &enclosure.right;
	lptodrawing(point, (dPOINT *)&(drect.right));
	n1 = selected.modifyproperty(hdc, drect);
	n2 = unselected.modifyproperty(hdc, drect);
      }
      else{ // modify properties pointed by the mouse
	point = *(PPOINT) &enclosure.left;
	lptodrawing(point, &dpoint);
	if((n1 = selected.modifyproperty(hdc, dpoint)) == 0)
	  n2 = unselected.modifyproperty(hdc, dpoint);
      }
      ReleaseDC(hwnd, hdc) ;
      flag.anchor = NO;
      flag.previousoutline = NO;
    }
    if((n1 > 0) || (n2 > 0)){
      InvalidateRect(hwndPaper, NULL, TRUE);
      SendMessage(hwndMain, WM_COMMAND, NEEDSAVE, 0L);
    }

}

void modifymode::presstoolbar(void){

    HDC hdc;

    hdc = GetDC(hwndMain);
    DrawBitmap(hdc, hBmpmodon, MODIFY_X,  0);
    ReleaseDC(hwndMain, hdc);
}


void modifymode::releasetoolbar(void){

    HDC hdc;

    hdc = GetDC(hwndMain);
    DrawBitmap(hdc, hBmpmodoff, MODIFY_X,  0);
    ReleaseDC(hwndMain, hdc);
    hdc = GetDC(hwndPaper);
    setdrawingcoord(hdc);
    if(flag.anchor == YES){
      if(flag.previousoutline){
	drawdottedrect(hdc, enclosure);
      }
      flag.anchor = NO;
    }
    ReleaseDC(hwndPaper, hdc);
    flag.previousoutline = NO;
}


void modifymode::ldblclk(HWND hwnd, LONG lParam){

    POINT  point;
    dPOINT p;
    HDC    hdc;
    block  *bp;

    point = MAKEPOINT(lParam);
    hdc = GetDC(hwnd);
    setdrawingcoord(hdc);
    DPtoLP(hdc, &point, 1);
    ReleaseDC(hwnd, hdc) ;
    lptodrawing(point, &p);

    if((bp = selected.enclosepoint(p)) == NULL)
      bp = unselected.enclosepoint(p);

    if(bp != NULL){
      bp->dialog();
    }
}



void addmode::move(HWND hwnd, LONG lParam){

    POINT  point;
    HDC    hdc;
    dPOINT loc;


    if(addon.empty() == NO){
      point = MAKEPOINT(lParam);
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      DPtoLP(hdc, &point, 1);
      if(flag.previousoutline)
	addon.outline(hdc, R2_NOTXORPEN, hPenDotBlack, center, ploc);
      lptodrawing(point, &loc);
      messagemouseloc(loc);
      addon.outline(hdc, R2_NOTXORPEN, hPenDotBlack, center, loc);
      ploc = loc;
      flag.previousoutline = YES;
      ReleaseDC(hwnd, hdc) ;
    }
}

void addmode::lbuttondown(HWND hwnd, LONG lParam){

    POINT   point;
    HDC     hdc;
    dPOINT  loc;
    double  tsnap;
    HCURSOR hcursor;
    HMENU   hMenu ;
    COUNT   nscount, totalcount = {0, 0, 0};

    if(addon.empty() == NO){
      point = MAKEPOINT(lParam);
      hdc = GetDC(hwnd);
      setdrawingcoord(hdc);
      if(flag.previousoutline){
	addon.outline(hdc, R2_NOTXORPEN, hPenDotBlack, center, ploc);
	flag.previousoutline = NO;
      }
      DPtoLP(hdc, &point, 1);
      lptodrawing(point, &loc);
      addon.move(center.x, center.y, loc.x, loc.y);
      adjustallowablesnap();
      hcursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
      ShowCursor(TRUE);

      addon.clearconnectmask();
      unselected.clearconnectmask();
      selected.clearconnectmask();
      totalcount = addon.connect(unselected);
      nscount    = addon.connect(selected);
      totalcount.node += nscount.node;
      totalcount.side += nscount.side;

      sprintf(connectmessage, "Connection: node:%d side:%d .",
	    totalcount.node, totalcount.side);
      SetWindowText(hwndMessage3, connectmessage);


      addon.transfer(unselected);

      ShowCursor(FALSE);
      SetCursor(hcursor);
      ReleaseDC(hwnd, hdc) ;
      InvalidateRect(hwndPaper, NULL, TRUE);
      SendMessage(hwndMain, WM_COMMAND, NEEDSAVE, 0L);
      hMenu = GetMenu (hwndMain) ;
      EnableMenuItem (hMenu, IDM_GENERATE, MF_ENABLED);
      DrawMenuBar(hwndMain);
    }
}


void addmode::rbuttondown(void){

    HDC hdc;

    if(addon.empty() == NO){
      if(flag.previousoutline){
	hdc = GetDC(hwndPaper);
	setdrawingcoord(hdc);
	addon.outline(hdc, R2_NOTXORPEN, hPenDotBlack, center, ploc);
	ReleaseDC(hwndPaper, hdc) ;
      }
      addon.clear();
      flag.previousoutline = NO;
    }
}

void addmode::releasetoolbar(void){

    rbuttondown();
}


void resizeobjectmode::lbuttondown(HWND hwnd, LONG lParam){

    POINT   point;
    dPOINT  hookpoint;
    HDC     hdc;
    int     blockcount;
    block   *bp;
    HCURSOR hcursor;

⌨️ 快捷键说明

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