📄 gridsub3.c
字号:
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 + -