📄 square.cpp
字号:
{
pDC->MoveTo(m_pointEnd1.x-3,m_pointEnd1.y-3);
pDC->LineTo(m_pointEnd1.x+4,m_pointEnd1.y+4);
pDC->MoveTo(m_pointEnd1.x-3,m_pointEnd1.y+3);
pDC->LineTo(m_pointEnd1.x+4,m_pointEnd1.y-4);
}
else if(m_uEndNodeState==1)//非相切点
{
pDC->Rectangle(m_pointEnd1.x-4,m_pointEnd1.y-4,m_pointEnd1.x+4,m_pointEnd1.y+4);
}
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
}
*/
void CPaintRect::OnDown(CPnt& pointDown)
{
m_pointEnd.x = m_pointPrimary.x = pointDown.x;
m_pointEnd.y = m_pointPrimary.y = pointDown.y;
}
/*
void CPaintRect::ChangeOrigin(CPnt pnt)//改变坐标原点
{
m_pointPrimary.x=m_pointPrimary.x-pnt.x;
m_pointPrimary.y=m_pointPrimary.y-pnt.y;
m_pointEnd.x=m_pointEnd.x-pnt.x;
m_pointEnd.y=m_pointEnd.y-pnt.y;
}
*/
void CPaintRect::OnDown2(CPnt& pointDown)
{
}
void CPaintRect::OnUp(CPnt& pointUp, CWnd* pWnd)
{
CClientDC tempDC(pWnd);
Draw(&tempDC);
}
/*
//
//判断是否点击了某节点
//返回0==没击中,1==击中起点,2==击中终点
UINT CPaintRect::IsHit1(CPnt& pointBang)
{
UINT forreturn=0;
CPoint m_pointPrimary1;
CPoint m_pointEnd1;
CPoint m_pointBang1;
DPtoVP(m_pointPrimary,m_pointPrimary1);
DPtoVP(m_pointEnd,m_pointEnd1);
DPtoVP(pointBang,m_pointBang1);
if(Distance(m_pointBang1.x,m_pointBang1.y,m_pointPrimary1.x,m_pointPrimary1.y)<4)
{
forreturn=1;
}
else if(Distance(m_pointBang1.x,m_pointBang1.y,m_pointEnd1.x,m_pointEnd1.y)<4)
{
forreturn=2;
}
return forreturn;
}
*/
void CPaintRect::IsDblClk(void* pTemp1,void* pTemp2)//是否被双击选中
{
if(m_uObjectType==1)//地图对象的类型0=路径1=建筑2=设备
IsDblClkBuilding(pTemp1,pTemp2);
else if(m_uObjectType==2)
IsDblClkDevice(pTemp1,pTemp2);
}
BOOL CPaintRect::IsHit(CPnt& pointBang)
{
CPoint m_pointPrimary1;
CPoint m_pointBang1;
CPoint m_pointEnd1;
DPtoVP(m_pointPrimary,m_pointPrimary1);
DPtoVP(m_pointEnd,m_pointEnd1);
DPtoVP(pointBang,m_pointBang1);
int x1,y1,x2,y2;
x1=min(m_pointPrimary1.x,m_pointEnd1.x);
y1=min(m_pointPrimary1.y,m_pointEnd1.y);
x2=max(m_pointPrimary1.x,m_pointEnd1.x);
y2=max(m_pointPrimary1.y,m_pointEnd1.y);
CRect rect(x1,y1,x2,y2);
if (!rect.PtInRect(m_pointBang1))
return FALSE;
else
return TRUE;
}
void CPaintRect::GetBoundingRect(double &minx,double &miny,double &maxx,double &maxy)
{
double xmin,xmax,ymin,ymax;
xmin=min(m_pointPrimary.x,m_pointEnd.x);
xmax=max(m_pointPrimary.x,m_pointEnd.x);
ymin=min(m_pointPrimary.y,m_pointEnd.y);
ymax=max(m_pointPrimary.y,m_pointEnd.y);
minx=xmin;
miny = ymin;
maxx =xmax;
maxy =ymax;
}
void CPaintRect::Serialize(CArchive& ar)
{
CPainted::Serialize(ar);
if (ar.IsStoring())
{
ar << m_pointEnd;
ar <<m_rgbInside;
ar <<m_bFilled;
}
else
{
ar >> m_pointEnd;
ar >>m_rgbInside;
ar >>m_bFilled;
}
}
void CPaintRect::onup1(CPnt& point1, CPnt& point2, CPnt& point3,CWnd *pWnd)
{ m_pointPrimary=point1;
m_pointEnd=point2;
}
CPnt CPaintRect::returnattr1()
{
return m_pointPrimary;
}
CPnt CPaintRect::returnattr2()
{
return m_pointEnd;
}
//得到绘制起点
//pnt1 为传递的鼠标点坐标,m_EllipsePaintMode==1时
//修改pnt1为人工输入的端点坐标
//pnt2无意义
//返回值无意义
int CPaintRect::GetPathStartnode(CPnt& pnt1, CPnt& pnt2)
{
if(m_pDoc->m_RectPaintMode==1)//Ellipse的绘制模式
{
pnt1=m_pDoc->m_pPaintStartNode;//绘图时给定的起点
}
return 1;
}
//得到绘制终点
//返回值无意义
//
BOOL CPaintRect::GetPathEndnode(CPnt& pnt1)
{
if(m_pDoc->m_RectPaintMode==1)//Ellipse的绘制模式
{
pnt1=m_pDoc->m_pPaintEndNode;//绘图时给定的起点
}
return 1;
}
/*
double CPaintRect::Distance1(double x1, double y1, double x2, double y2)
{
return (double)sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
void CPaintRect::toChar(char *p_Char)
{
double x1,y1,x2,y2,Speed,Length,Angle;
UINT PathId,StartId,StartType,EndId,EndType,HeadDir,Guide,Obstacle;
x1=m_pointPrimary.x;
y1=m_pointPrimary.y;
x2=m_pointEnd.x;
y2=m_pointEnd.y;
Speed=m_fPathLimit;//速度限制
Length=m_flength;//直线长度
Angle=m_fangle;//直线角度
PathId=m_uPathId;//路径ID 5
StartId=m_uStartNodeId;//起点ID 5
StartType=m_uStartNodeType;//起点类型 2
EndId=m_uEndNodeId;//终点ID 5
EndType=m_uEndNodeType;//终点类型 2
HeadDir=m_uPathHeading;//路径车头方向 2
Guide=m_uPathGuideType;//导航方式 1
Obstacle=m_uPathObstacle;//路径障碍物模式 4
char p1[126];
//把格式化数据写到字符串
sprintf(p1,"%12.4f,%12.4f,%12.4f,%12.4f,%12.4f,%12.4f,%12.4f,%5d,%5d,%2d,%5d,%2d,%2d,%1d,%4d\n",
x1,y1,x2,y2,Speed,Length,Angle,PathId,StartId,
StartType,EndId,EndType,HeadDir,Guide,Obstacle);
p1[125]=0;
lstrcat(p_Char,p1);//增加在p_Char字符串后
}
char * CPaintRect::toData(char *p_Char)
{
float x1,y1,x2,y2,Speed,Length,Angle;
UINT PathId,StartId,StartType,EndId,EndType,HeadDir,Guide,Obstacle;
char p1[126];
strncpy(p1,p_Char,125); //拷贝一个125字节长度的字符串
p_Char+=125; //指向成员变量的字符串后的位置
p1[125]=0;
//从字符串读格式化数据
sscanf(p1,"%f,%f,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%d,%d\n",
&x1,&y1,&x2,&y2,&Speed,&Length,&Angle,&PathId,&StartId,
&StartType,&EndId,&EndType,&HeadDir,&Guide,&Obstacle);
m_pointPrimary.x=x1;
m_pointPrimary.y=y1;
m_pointEnd.x=x2;
m_pointEnd.y=y2;
m_fPathLimit=Speed;//速度限制
m_flength=Length;//直线长度
m_fangle=Angle;//直线角度
m_uPathId=PathId;//路径ID
m_uStartNodeId=StartId;//起点ID
m_uStartNodeType=StartType;//起点类型
m_uEndNodeId=EndId;//终点ID
m_uEndNodeType=EndType;//终点类型
m_uPathHeading=HeadDir;//路径车头方向
m_uPathGuideType=Guide;//导航方式
m_uPathObstacle=Obstacle;//路径障碍物模式
return p_Char; //返回指向成员变量的字符串后的位置
}
void CPaintRect::DrawErase(CDC* pDC)//擦除图形WHITE_BRUSHHOLLOW_BRUSH
{
pDC->SetROP2(R2_COPYPEN);
CPen* pOldPen;
CPen pDrawPen;
CBrush* pOldBrush;
pOldBrush = (CBrush *) pDC->SelectStockObject(HOLLOW_BRUSH);
CPoint m_pointPrimary1;
CPoint m_pointEnd1;
DPtoVP(m_pointPrimary,m_pointPrimary1);
DPtoVP(m_pointEnd,m_pointEnd1);//把最终实际坐标变换为用于显示的逻辑坐标
pDrawPen.CreatePen(PS_SOLID, m_nWidth, RGB(255,255,255));
pOldPen = pDC->SelectObject(&pDrawPen);
pDC->Rectangle(m_pointPrimary1.x-4,m_pointPrimary1.y-4,m_pointPrimary1.x+4,m_pointPrimary1.y+4);
pDC->Rectangle(m_pointEnd1.x-4,m_pointEnd1.y-4,m_pointEnd1.x+4,m_pointEnd1.y+4);
pDC->Ellipse(m_pointPrimary1.x-4,m_pointPrimary1.y-4,m_pointPrimary1.x+4,m_pointPrimary1.y+4);
pDC->Ellipse(m_pointEnd1.x-4,m_pointEnd1.y-4,m_pointEnd1.x+4,m_pointEnd1.y+4);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
}
*/
void CPaintRect::Move(double x_Move,double y_Move)
{
//移动直线的起点和终点坐标
m_pointPrimary.x+=x_Move;
m_pointEnd.x+=x_Move;
m_pointPrimary.y+=y_Move;
m_pointEnd.y+=y_Move;
}
void CPaintRect::toChar(char *p_Char)
{
}
char * CPaintRect::toData(char *p_Char)
{
return p_Char; //返回指向成员变量的字符串后的位置
}
void CPaintRect::ChangeOrigin(CPnt pnt)//改变坐标原点
{
m_pointPrimary.x=m_pointPrimary.x-pnt.x;
m_pointPrimary.y=m_pointPrimary.y-pnt.y;
m_pointEnd.x=m_pointEnd.x-pnt.x;
m_pointEnd.y=m_pointEnd.y-pnt.y;
}
void CPaintRect::IsDblClkBuilding(void *pTemp1, void *pTemp2)
{
BOOL change=FALSE;
m_pDoc = (CPaintobjDoc*) pTemp1;
CRectAttrDlg rectattr;
rectattr.m_pDoc =(CPaintobjDoc*) pTemp1;
rectattr.m_pActive1=this;
rectattr.m_dStartx=m_pointPrimary.x;//起点坐标
rectattr.m_dStarty=m_pointPrimary.y;//起点坐标
rectattr.m_dEndx=m_pointEnd.x;//终点坐标
rectattr.m_dEndy=m_pointEnd.y;//终点坐标
rectattr.m_bFill=m_bFilled;
rectattr.m_ctlFillColor.m_FillColor=m_rgbInside;
if(rectattr.DoModal()==IDOK)
{
if(m_pointPrimary.x!=rectattr.m_dStartx||m_pointPrimary.y!=rectattr.m_dStarty
||m_pointEnd.x!=rectattr.m_dEndx||m_pointEnd.y!=rectattr.m_dEndy)
{
change=TRUE;
m_pointPrimary.x=rectattr.m_dStartx;
m_pointPrimary.y=rectattr.m_dStarty;
m_pointEnd.x=rectattr.m_dEndx;
m_pointEnd.y=rectattr.m_dEndy;
Normalize();
}
if(rectattr.m_bFill!=m_bFilled)
{
change=TRUE;
m_bFilled=rectattr.m_bFill;
}
if(m_bFilled&&m_rgbInside!=rectattr.m_ctlFillColor.m_FillColor)
{
change=TRUE;
m_rgbInside=rectattr.m_ctlFillColor.m_FillColor;
}
if(change)
{
((CPaintobjView*) pTemp2)->Invalidate();
}
}
}
void CPaintRect::IsDblClkDevice(void *pTemp1, void *pTemp2)
{
BOOL change=FALSE;
m_pDoc = (CPaintobjDoc*) pTemp1;
CDeviceRectAttrDlg rectattr;
rectattr.m_nDeviceId=m_nDeviceId;
rectattr.m_nSomeStatus=m_nSomeStatus;
rectattr.m_nStatusNumber=m_nStatusNumber;
rectattr.m_dStartx=m_pointPrimary.x;//起点坐标
rectattr.m_dStarty=m_pointPrimary.y;//起点坐标
rectattr.m_dEndx=m_pointEnd.x;//终点坐标
rectattr.m_dEndy=m_pointEnd.y;//终点坐标
rectattr.m_bFill=m_bFilled;
rectattr.m_ctlFillColor.m_FillColor=m_rgbInside;
if(rectattr.DoModal()==IDOK)
{
m_nDeviceId=rectattr.m_nDeviceId;
m_nSomeStatus=rectattr.m_nSomeStatus;
m_nStatusNumber=rectattr.m_nStatusNumber;
if(m_pointPrimary.x!=rectattr.m_dStartx||m_pointPrimary.y!=rectattr.m_dStarty
||m_pointEnd.x!=rectattr.m_dEndx||m_pointEnd.y!=rectattr.m_dEndy)
{
change=TRUE;
m_pointPrimary.x=rectattr.m_dStartx;
m_pointPrimary.y=rectattr.m_dStarty;
m_pointEnd.x=rectattr.m_dEndx;
m_pointEnd.y=rectattr.m_dEndy;
Normalize();
}
if(rectattr.m_bFill!=m_bFilled)
{
change=TRUE;
m_bFilled=rectattr.m_bFill;
}
if(m_bFilled&&m_rgbInside!=rectattr.m_ctlFillColor.m_FillColor)
{
change=TRUE;
m_rgbInside=rectattr.m_ctlFillColor.m_FillColor;
}
if(change)
{
((CPaintobjView*) pTemp2)->Invalidate();
}
}
}
void CPaintRect::Normalize()
{
double xmin,xmax,ymin,ymax;
xmin=min(m_pointPrimary.x,m_pointEnd.x);
xmax=max(m_pointPrimary.x,m_pointEnd.x);
ymin=min(m_pointPrimary.y,m_pointEnd.y);
ymax=max(m_pointPrimary.y,m_pointEnd.y);
m_pointPrimary.x=xmin;
m_pointPrimary.y=ymax;
m_pointEnd.x=xmax;
m_pointEnd.y=ymin;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -