📄 paintvw.cpp
字号:
}
else if(pDoc->m_bMove)//移动图形
{
::SetCursor(m_hcurMove);
}
else if(pDoc->m_bZoomIn)
{
::SetCursor(m_hcurZoomin);
}
else if(pDoc->m_bZoomOut)
{
::SetCursor(m_hcurZoomout);
}
else
{
CPainted* pPainted;
UINT bIsHit1=0;
int nShapes = pDoc->NumShapes();
for (int index = 0; index < nShapes; index++)
{
pPainted =(CPainted*) pDoc->GetShape(index);
bIsHit1=pPainted->IsHit1(pnt);
if(bIsHit1)
break;
}
if(bIsHit1)
{
bIsHit1=0;
::SetCursor(m_hcurNodeattr);
}
else
::SetCursor(m_hcurArrow);
}
}
else
{
CPainted* pPainted;
UINT bIsHit1=0;
int nShapes = pDoc->NumShapes();
for (int index = 0; index < nShapes; index++)
{
pPainted =(CPainted*) pDoc->GetShape(index);
bIsHit1=pPainted->IsHit1(pnt);
if(bIsHit1)
break;
}
if(bIsHit1)
{
bIsHit1=0;
::SetCursor(m_hcurChange);
}
else
::SetCursor(m_hcurCross);
}
if(pDoc->m_bMove1)//移动图形
{
double minx,miny;
double minx1,miny1;
CRect rect;
minx=pnt.x-pDoc->m_pStartMove.x;
miny=pnt.y-pDoc->m_pStartMove.y;
for(int i=0;i<pDoc->m_nGraphSelect;i++)
{
CPainted* pPainted;
pPainted =pDoc->GetShape(pDoc->GraphSelect[i].Index);
pPainted->Move(minx,miny);//移动图形元素
pPainted->MoveDraw(&ClientDC,pPainted->returnattr1(),pPainted->returnattr2());
}
pDoc->m_pStartMove=pnt;
CRect rect4;
pDoc->ExpandBounds(&rect4);
CSize siz;
pDoc->GetBounds(&siz);
//SetScrollSizes(MM_TEXT, siz);
//以下程序判断选中的图形是否与未选中的图形有相连的节点
//若有则使之为当前最大节点号顺序递增
int nShapes = pDoc->NumShapes();
for (int index = 0; index < nShapes; index++)
{
CPainted* pPainted;
pPainted =pDoc->GetShape(index);
if(!pPainted->m_bSelect)
{
UINT id1=pPainted->m_uStartNodeId;
UINT id2=pPainted->m_uEndNodeId;
BOOL flag1=FALSE;
BOOL flag2=FALSE;
//如果选中的图形与未选中的某图形起点相连
for(int i=0;i<pDoc->m_nGraphSelect;i++)
{
CPainted* ppp;
ppp =pDoc->GetShape(pDoc->GraphSelect[i].Index);
UINT idd1=ppp->m_uStartNodeId;
UINT idd2=ppp->m_uEndNodeId;
if(idd1==id1)
{
ppp->m_uStartNodeId=pDoc->m_uCurNodeIdMax;
flag1=TRUE;
}
else if(idd2==id1)
{
ppp->m_uEndNodeId=pDoc->m_uCurNodeIdMax;
flag1=TRUE;
}
}
if(flag1)
{
flag1=FALSE;
pDoc->m_uCurNodeIdMax++;
}
//如果选中的图形与未选中的某图形终点相连
for(i=0;i<pDoc->m_nGraphSelect;i++)
{
CPainted* ppp;
ppp =pDoc->GetShape(pDoc->GraphSelect[i].Index);
UINT idd1=ppp->m_uStartNodeId;
UINT idd2=ppp->m_uEndNodeId;
if(idd1==id2)
{
ppp->m_uStartNodeId=pDoc->m_uCurNodeIdMax;
flag2=TRUE;
}
else if(idd2==id2)
{
ppp->m_uEndNodeId=pDoc->m_uCurNodeIdMax;
flag2=TRUE;
}
}
if(flag2)
{
flag2=FALSE;
pDoc->m_uCurNodeIdMax++;
}
}
}
/////////////////////////////////////////////////////
BOOL endloop=FALSE;
int nShapes1 = pDoc->NumShapes();
for (int index1 = 0; index1 < nShapes1; index1++)
{
CPainted* pPainted;
pPainted =pDoc->GetShape(index1);
if(!pPainted->m_bSelect)
{
UINT id1=pPainted->m_uStartNodeId;
UINT id2=pPainted->m_uEndNodeId;
CPnt pointEnd;
CPnt pointPrimary;
CPoint pointEnd1;
CPoint pointPrimary1;
pointPrimary=pPainted->returnattr1();
pointEnd=pPainted->returnattr2();
DPtoVP(pointPrimary,pointPrimary1);
DPtoVP(pointEnd,pointEnd1);
for(int i=0;i<pDoc->m_nGraphSelect;i++)
{
CPainted* ppp;
CPnt End;
CPnt Primary;
CPoint End1;
CPoint Primary1;
ppp =pDoc->GetShape(pDoc->GraphSelect[i].Index);
Primary=ppp->returnattr1();
End=ppp->returnattr2();
DPtoVP(Primary,Primary1);
DPtoVP(End,End1);
if(Distance(Primary1.x,Primary1.y,pointPrimary1.x,pointPrimary1.y)<4)
{
minx1=pointPrimary.x-Primary.x;
miny1=pointPrimary.y-Primary.y;
ppp->m_uStartNodeId=id1;
endloop=TRUE;
}
else if(Distance(Primary1.x,Primary1.y,pointEnd1.x,pointEnd1.y)<4)
{
minx1=pointEnd.x-Primary.x;
miny1=pointEnd.y-Primary.y;
ppp->m_uStartNodeId=id2;
endloop=TRUE;
}
else if(Distance(End1.x,End1.y,pointPrimary1.x,pointPrimary1.y)<4)
{
minx1=pointPrimary.x-End.x;
miny1=pointPrimary.y-End.y;
ppp->m_uEndNodeId=id1;
endloop=TRUE;
}
else if(Distance(End1.x,End1.y,pointEnd1.x,pointEnd1.y)<4)
{
minx1=pointEnd.x-End.x;
miny1=pointEnd.y-End.y;
ppp->m_uEndNodeId=id2;
endloop=TRUE;
}
}
}
}
if(endloop)
{
CPainted* ppp;
for(int i=0;i<pDoc->m_nGraphSelect;i++)
{
ppp =pDoc->GetShape(pDoc->GraphSelect[i].Index);
ppp->Move(minx1,miny1);//移动图形元素
ppp->MoveDraw(&ClientDC,ppp->returnattr1(),ppp->returnattr2());
}
endloop=FALSE;
CRect rect;
pDoc->ExpandBounds(&rect);
CSize siz;
pDoc->GetBounds(&siz);
pDoc->GetNodeIdMax();
}
}
else if (pDoc->m_bpaintarc &&m_npushnumber==1)
{ //实时动态显示圆心半径及圆弧所在的圆
int aa;
aa=((CPaintArc*) pDoc->m_pSelectedTool)->GetArcCirclecenter1(pnt,pDoc);
((CPaintArc*) pDoc->m_pSelectedTool)->DragDrawCircle(&ClientDC,pnt,pDoc);
}
else if (pDoc->m_bpaintChord &&m_npushnumber==1)
{ //实时动态显示圆心半径及圆弧所在的圆
int aa;
aa=((CPaintChord*) pDoc->m_pSelectedTool)->GetChordCirclecenter(pnt,pDoc);
((CPaintChord*) pDoc->m_pSelectedTool)->DragDrawCircle(&ClientDC,pnt,pDoc);
}
else if (pDoc->m_bpaintPie &&m_npushnumber==1)
{ //实时动态显示圆心半径及圆弧所在的圆
int aa;
aa=((CPaintPie*) pDoc->m_pSelectedTool)->GetPieCirclecenter(pnt,pDoc);
((CPaintPie*) pDoc->m_pSelectedTool)->DragDrawCircle(&ClientDC,pnt,pDoc);
}
else if (!m_bTracking)
return;
else if(pDoc->m_bpaintLine)
{
((CPaintLine*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
BOOL ccc;
ccc=((CPaintLine*) pDoc->m_pSelectedTool)->GetPathEndnode1(pnt);
pDoc->m_bEndnodeIndep=!ccc;//TRUE==独立
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
CPnt p1,p2;
double angle,length;
p1=pDoc->m_pSelectedTool->returnattr1();
p2=pDoc->m_pSelectedTool->returnattr2();
length=((CPaintLine *)pDoc->m_pSelectedTool)->m_flength;
angle=((CPaintLine *)pDoc->m_pSelectedTool)->m_fangle;
angle=angle*180.0/pi;
CString str;
str.Format("起点(%.4f,%.4f)终点(%.4f,%.4f)长度(%.4f)角度(%.4f)",p1.x,p1.y,p2.x,p2.y,length,angle);
p_Wnd->m_wndMyDialogBar.SetDlgItemText(IDC_EDIT1,str);
}
else if (pDoc->m_bpaintarc &&m_npushnumber==2)
{
((CPaintArc*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
BOOL eee;
eee=((CPaintArc*) pDoc->m_pSelectedTool)->GetPathEndnode1(pnt);
pDoc->m_bEndnodeIndep=!eee;//TRUE==独立
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
CPnt p1,p2,p3;
double r,angle1,angle2;//起始弧度结束弧度
p1=pDoc->m_pSelectedTool->returnattr1();
p2=pDoc->m_pSelectedTool->returnattr2();
p3=pDoc->m_pSelectedTool->returncirclecenter();//返回圆心
r=pDoc->m_pSelectedTool->returnradius(); //返回半径
angle1=((CPaintArc *)pDoc->m_pSelectedTool)->m_Angle1;
angle2=((CPaintArc *)pDoc->m_pSelectedTool)->m_Angle2;
angle1=angle1*180.0/pi;
angle2=angle2*180.0/pi;
CString str;
str.Format("起点(%.4f,%.4f)终点(%.4f,%.4f)圆心(%.4f,%.4f)半径(%.4f)角度(%.4f,%.4f)",p1.x,p1.y,p2.x,p2.y,p3.x,p3.y,r,angle1,angle2);
p_Wnd->m_wndMyDialogBar.SetDlgItemText(IDC_EDIT1,str);
}
else if (pDoc->m_bpaintChord &&m_npushnumber==2)//TRUE表示正在画弦
{
((CPaintChord*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
BOOL eee;
eee=((CPaintChord*) pDoc->m_pSelectedTool)->GetPathEndnode(pnt);
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
CPnt p1,p2,p3;
double r,angle1,angle2;//起始弧度结束弧度
p1=pDoc->m_pSelectedTool->returnattr1();
p2=pDoc->m_pSelectedTool->returnattr2();
p3=pDoc->m_pSelectedTool->returncirclecenter();//返回圆心
r=pDoc->m_pSelectedTool->returnradius(); //返回半径
angle1=((CPaintChord *)pDoc->m_pSelectedTool)->m_Angle1;
angle2=((CPaintChord *)pDoc->m_pSelectedTool)->m_Angle2;
angle1=angle1*180.0/pi;
angle2=angle2*180.0/pi;
CString str;
str.Format("起点(%.4f,%.4f)终点(%.4f,%.4f)圆心(%.4f,%.4f)半径(%.4f)角度(%.4f,%.4f)",p1.x,p1.y,p2.x,p2.y,p3.x,p3.y,r,angle1,angle2);
p_Wnd->m_wndMyDialogBar.SetDlgItemText(IDC_EDIT1,str);
}
else if (pDoc->m_bpaintPie &&m_npushnumber==2)//TRUE表示正在画扇形
{
((CPaintPie*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
BOOL eee;
eee=((CPaintPie*) pDoc->m_pSelectedTool)->GetPathEndnode(pnt);
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
CPnt p1,p2,p3;
double r,angle1,angle2;//起始弧度结束弧度
p1=pDoc->m_pSelectedTool->returnattr1();
p2=pDoc->m_pSelectedTool->returnattr2();
p3=pDoc->m_pSelectedTool->returncirclecenter();//返回圆心
r=pDoc->m_pSelectedTool->returnradius(); //返回半径
angle1=((CPaintPie *)pDoc->m_pSelectedTool)->m_Angle1;
angle2=((CPaintPie *)pDoc->m_pSelectedTool)->m_Angle2;
angle1=angle1*180.0/pi;
angle2=angle2*180.0/pi;
CString str;
str.Format("起点(%.4f,%.4f)终点(%.4f,%.4f)圆心(%.4f,%.4f)半径(%.4f)角度(%.4f,%.4f)",p1.x,p1.y,p2.x,p2.y,p3.x,p3.y,r,angle1,angle2);
p_Wnd->m_wndMyDialogBar.SetDlgItemText(IDC_EDIT1,str);
}
else if(pDoc->m_bpaintEllipse)//TRUE表示正在画椭圆
{
((CPaintEllipse*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
((CPaintEllipse*) pDoc->m_pSelectedTool)->GetPathEndnode(pnt);
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
}
else if(pDoc->m_bpaintLazys)//TRUE表示正在画懒-S
{
((CPaintLazys*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
BOOL ccc;
ccc=((CPaintLazys*) pDoc->m_pSelectedTool)->GetPathEndnode1(pnt);
pDoc->m_bEndnodeIndep=!ccc;//TRUE==独立
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
CPnt p1,p2;
double angle;
p1=pDoc->m_pSelectedTool->returnattr1();
p2=pDoc->m_pSelectedTool->returnattr2();
angle=((CPaintLazys *)pDoc->m_pSelectedTool)->m_angStart;
angle=angle*180.0/pi;
CString str;
str.Format("起点(%.4f,%.4f)终点(%.4f,%.4f)起点的倾斜角(%.4f)",p1.x,p1.y,p2.x,p2.y,angle);
p_Wnd->m_wndMyDialogBar.SetDlgItemText(IDC_EDIT1,str);
}
else if(pDoc->m_bpaintPolygon)//TRUE表示正在画多边形
{
if(pDoc->m_PolygonPaintMode==0)//鼠标拖拽画法
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
}
else if(pDoc->m_bpaintRect) //TRUE表示正在画矩形
{
((CPaintRect*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
((CPaintRect*) pDoc->m_pSelectedTool)->GetPathEndnode(pnt);
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
}
else if(pDoc->m_bpaintRoundrect)//TRUE表示正在画圆角矩形
{
((CPaintRoundrect*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
((CPaintRoundrect*) pDoc->m_pSelectedTool)->GetPathEndnode(pnt);
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
}
else if(pDoc->m_bpaintScp)//TRUE表示正在画软侧移
{
((CPaintScp*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
BOOL ccc;
ccc=((CPaintScp*) pDoc->m_pSelectedTool)->GetPathEndnode1(pnt);
pDoc->m_bEndnodeIndep=!ccc;//TRUE==独立
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
CPnt p1,p2;
double angle;
p1=pDoc->m_pSelectedTool->returnattr1();
p2=pDoc->m_pSelectedTool->returnattr2();
angle=((CPaintScp *)pDoc->m_pSelectedTool)->m_angStart;
angle=angle*180.0/pi;
CString str;
str.Format("起点(%.4f,%.4f)终点(%.4f,%.4f)车头方向角(%.4f)",p1.x,p1.y,p2.x,p2.y,angle);
p_Wnd->m_wndMyDialogBar.SetDlgItemText(IDC_EDIT1,str);
}
else if(pDoc->m_bpaintSide)//TRUE表示正在画硬侧移
{
((CPaintSide*) pDoc->m_pSelectedTool)->m_pDoc=pDoc;
BOOL ccc;
ccc=((CPaintSide*) pDoc->m_pSelectedTool)->GetPathEndnode1(pnt);
pDoc->m_bEndnodeIndep=!ccc;//TRUE==独立
pDoc->m_pSelectedTool->DragDraw(&ClientDC, pnt);
CPnt p1,p2;
double angle;
p1=pDoc->m_pSelectedTool->returnattr1();
p2=pDoc->m_pSelectedTool->returnattr2();
angle=((CPaintSide *)pDoc->m_pSelectedTool)->m_angHeading;
angle=angle*180.0/pi;
CString str;
str.Format("起点(%.4f,%.4f)终点(%.4f,%.4f)车头方向角(%.4f)",p1.x,p1.y,p2.x,p2.y,angle);
p_Wnd->m_wndMyDialogBar.SetDlgItemText(IDC_EDIT1,str);
}
CScrollView::OnMouseMove(nFlags, point);
}
void CPaintobjView::InitView()
{
double fbasicscale1;
CPaintobjDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CSize siz(3,3);
// pDoc->GetBounds(&siz);
m_bZoomMode = FALSE;
SetScrollSizes(MM_TEXT, siz);
fbasicscale1=(double) ((fxmax-fxmin)/(0.8*m_wscreen));
fbasicscale=(double) ((fymax-fymin)/(0.8*m_hscreen));
if(fbasicscale1>fbasicscale) fbasicscale=fbasicscale1;
m_xstart=(double) (fxmin-fbasicscale*m_wscreen*0.1);
m_ystart=(double) (fymin-fbasicscale*m_hscreen*0.1);
}
void CPaintobjView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
InitView();
}
void CPaintobjView::OnViewScroll()
{
CPaintobjDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CSize siz;
pDoc->GetBounds(&siz);
m_bZoomMode = FALSE;
SetScrollSizes(MM_TEXT, siz);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -