linedlg.cpp

来自「VC做的矢量画图程序!」· C++ 代码 · 共 1,095 行 · 第 1/2 页

CPP
1,095
字号
// LineDlg.cpp : implementation file
//

#include "stdafx.h"
#include "draw.h"
#include "drawdoc.h"
#include "drawview.h"
#include "LineDlg.h"
#include "graphpa.h"
#include "textwdlg.h"
#include "tag.h"
#include "block.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLineDlg dialog
extern 	CGraphPara *p_GraphPara;		
extern CDrawView *p_View;

CLineDlg::CLineDlg(CLine* pLine,CWnd* pParent /*=NULL*/)
	: CDialog(CLineDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLineDlg)
	m_bDelete = FALSE;
	m_X1 = 0.0f;
	m_Y1 = 0.0f;
	m_X2 = 0.0f;
	m_Y2 = 0.0f;
	//}}AFX_DATA_INIT
	m_pLine=pLine;
	m_X1=m_pLine->m_X1;
	m_X2=m_pLine->m_X2;
	m_Y1=m_pLine->m_Y1;
	m_Y2=m_pLine->m_Y2;
	m_LineWide=m_pLine->m_LineWide;	//线宽(像素)
	m_LineType=m_pLine->m_LineType;	//线型(像素)
	m_Layer=m_pLine->m_Layer;		//所处层
	m_ColorPen=m_pLine->m_ColorPen;	//笔色
	m_ColorBrush=m_pLine->m_ColorBrush;	//填充刷颜色
	m_bDelete=m_pLine->b_Delete;
}


void CLineDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLineDlg)
	DDX_Check(pDX, IDC_CHECK1, m_bDelete);
	DDX_Text(pDX, IDC_EDIT1, m_X1);
	DDX_Text(pDX, IDC_EDIT2, m_Y1);
	DDX_Text(pDX, IDC_EDIT3, m_X2);
	DDX_Text(pDX, IDC_EDIT4, m_Y2);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLineDlg, CDialog)
	//{{AFX_MSG_MAP(CLineDlg)
	ON_BN_CLICKED(IDC_PARA, OnPara)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLineDlg message handlers

void CLineDlg::OnOK() 
{
	CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
	m_Layer=pcom1->GetCurSel();
	UpdateData(1);	//
	m_pLine->m_X1=m_X1;
	m_pLine->m_X2=m_X2;
	m_pLine->m_Y1=m_Y1;
	m_pLine->m_Y2=m_Y2;
	m_pLine->m_LineWide=m_LineWide;	//线宽(像素)
	m_pLine->m_LineType=m_LineType;	//线型(像素)
	m_pLine->m_Layer=m_Layer;		//所处层
	m_pLine->m_ColorPen=m_ColorPen;	//笔色
	m_pLine->m_ColorBrush=m_ColorBrush;	//填充刷颜色
	m_pLine->b_Delete=m_bDelete;
	EndDialog(IDOK);
}

//设置直线的颜色、线型和线宽
void CLineDlg::OnPara() 
{
	XxColorSetDialog pDg1(m_ColorPen,p_View->m_bColor,m_ColorBrush,p_View->m_beColor,m_LineType,m_LineWide);	
	if(pDg1.DoModal()==IDOK)
	{
		m_ColorPen=pDg1.m_color1;
		m_ColorBrush=pDg1.m_color3;
		m_LineWide=pDg1.m_linewide;
		m_LineType=pDg1.m_linetype;
		Invalidate();
	}
}

BOOL CLineDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
	pcom1->ResetContent();
	for(int i=0;i<p_GraphPara->n_LayerNumb;i++)
		pcom1->AddString(p_GraphPara->m_LayerList[i].m_Name);
	pcom1->SetCurSel(m_Layer);
	return TRUE;  // return TRUE unless you set the focus to a control
}

/////////////////////////////////////////////////////////////////////////
// CPLineDlg dialog


CPLineDlg::CPLineDlg(CPline* pPline,CWnd* pParent /*=NULL*/)
	: CDialog(CPLineDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPLineDlg)
	m_X = 0.0f;
	m_Y = 0.0f;
	m_Z = 0.0f;
	m_bFill = FALSE;
	m_bDelete = FALSE;
	//}}AFX_DATA_INIT
	m_pPline=pPline;				//指向要修改的连续直线对象
	pPointxy=p_View->PointXyz;
	m_PointNumb=m_pPline->m_Numble;
	for(int i=0;i<m_PointNumb;i++)
		pPointxy[i]=m_pPline->m_PointList[i];
	m_LineWide=m_pPline->m_LineWide;	//线宽(像素)
	m_LineType=m_pPline->m_LineType;	//线型(像素)
	m_Layer=m_pPline->m_Layer;		//所处层
	m_ColorPen=m_pPline->m_ColorPen;	//笔色
	m_ColorBrush=m_pPline->m_ColorBrush;	//填充刷颜色
	m_bDelete=m_pPline->b_Delete;	//是否做了删除标志
	m_bFill=m_pPline->b_Fill;		//是否填充
}


void CPLineDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPLineDlg)
	DDX_Text(pDX, IDC_EDIT1, m_X);
	DDX_Text(pDX, IDC_EDIT2, m_Y);
	DDX_Text(pDX, IDC_EDIT3, m_Z);
	DDX_Check(pDX, IDC_CHECK1, m_bFill);
	DDX_Check(pDX, IDC_CHECK2, m_bDelete);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPLineDlg, CDialog)
	//{{AFX_MSG_MAP(CPLineDlg)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_DELETE, OnDelete)
	ON_BN_CLICKED(IDC_INSERT, OnInsert)
	ON_BN_CLICKED(IDC_MODIFY, OnModify)
	ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
	ON_BN_CLICKED(IDC_PARA, OnPara)
	ON_CBN_EDITCHANGE(IDC_COMBO1, OnEditchangeCombo1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPLineDlg message handlers

void CPLineDlg::OnOK() 
{
	//UpdateData(1);
	if(m_bFill&&m_PointNumb<3||!m_bFill&&m_PointNumb<2)
	{
		AfxMessageBox("连续直线必须最少有2个顶点,而多边形区域最少有3个顶点");
		return;
	}
	CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
	m_Layer=pcom1->GetCurSel();
	UpdateData(1);
	m_pPline->m_LineWide=m_LineWide;	//线宽(像素)
	m_pPline->m_LineType=m_LineType;	//线型(像素)
	m_pPline->m_Layer=m_Layer;		//所处层
	m_pPline->m_ColorPen=m_ColorPen;	//笔色
	m_pPline->m_ColorBrush=m_ColorBrush;	//填充刷颜色
	m_pPline->b_Delete=m_bDelete;	//是否做了删除标志
	m_pPline->b_Fill=m_bFill;		//是否填充
	m_pPline->ModifyXyz(m_PointNumb,pPointxy);	
	EndDialog(IDOK);
}

void CPLineDlg::OnCancel() 
{
	CDialog::OnCancel();
}

//增加连续直线的顶点
void CPLineDlg::OnAdd() 
{
	UpdateData(1);	//保存编辑框内的内容到变量
	sprintf(p1,"X=%10.3f  Y=%10.3f  Z=%10.3f",m_X,m_Y,m_Z);
	plist1->AddString(p1);
	pPointxy[m_PointNumb].x=m_X;
	pPointxy[m_PointNumb].y=m_Y;
	pPointxy[m_PointNumb++].z=m_Z;
	plist1->SetCurSel(m_PointNumb-1);
	OnSelchangeList1();
}

//删除连续直线的顶点
void CPLineDlg::OnDelete() 
{
	int nn=plist1->GetCurSel();
	if(nn<0)
		return;
	for(int i=nn;i<m_PointNumb-1;i++)
		pPointxy[i]=pPointxy[i+1];
	m_PointNumb--;
	plist1->DeleteString(nn);
	if(nn==m_PointNumb)	//如果删除的是最后一个顶点
		plist1->SetCurSel(nn-1);
	else
		plist1->SetCurSel(nn);
	OnSelchangeList1();
}

//插入连续直线的顶点
void CPLineDlg::OnInsert() 
{
	int nn=plist1->GetCurSel();
	if(nn<0)
		return;
	UpdateData(1);	//保存编辑框内的内容到变量
	sprintf(p1,"X=%10.3f  Y=%10.3f  Z=%10.3f",m_X,m_Y,m_Z);
	plist1->InsertString(nn,p1);
	plist1->SetCurSel(nn);		//设置列表框中选择的顶点
	for(int i=m_PointNumb;i>nn;i--)
		pPointxy[i]=pPointxy[i-1];
	pPointxy[nn].x=m_X;
	pPointxy[nn].y=m_Y;
	pPointxy[nn].z=m_Z;
	m_PointNumb++;
	OnSelchangeList1();
}

//修改连续直线的顶点
void CPLineDlg::OnModify() 
{
	int nn=plist1->GetCurSel();
	if(nn<0)
		return;
	UpdateData(1);	//保存编辑框内的内容到变量
	sprintf(p1,"X=%10.3f  Y=%10.3f  Z=%10.3f",m_X,m_Y,m_Z);
	plist1->DeleteString(nn);
	if(nn==m_PointNumb-1)	//如果修改的是最后一个顶点
		plist1->AddString(p1);
	else
		plist1->InsertString(nn,p1);
	plist1->SetCurSel(nn);
	pPointxy[nn].x=m_X;
	pPointxy[nn].y=m_Y;
	pPointxy[nn].z=m_Z;
	OnSelchangeList1();
}

void CPLineDlg::OnSelchangeList1() 
{
	CButton* pbut;
	CListBox *plist=(CListBox *)GetDlgItem(IDC_LIST1);
	int nn=plist->GetCurSel();
	if(nn<0)
	{
		pbut=(CButton *)GetDlgItem(IDC_MODIFY);
		pbut->EnableWindow(FALSE);
		pbut=(CButton *)GetDlgItem(IDC_DELETE);
		pbut->EnableWindow(FALSE);
		pbut=(CButton *)GetDlgItem(IDC_INSERT);
		pbut->EnableWindow(FALSE);
		SetDlgItemText(IDC_EDIT1,"0");
		SetDlgItemText(IDC_EDIT2,"0");
		SetDlgItemText(IDC_EDIT3,"0");

		return;
	}

	m_X=pPointxy[nn].x;
	m_Y=pPointxy[nn].y;
	m_Z=pPointxy[nn].z;
	UpdateData(0);			//将坐标值填写到编辑框
	pbut=(CButton *)GetDlgItem(IDC_MODIFY);
	pbut->EnableWindow(TRUE);
	pbut=(CButton *)GetDlgItem(IDC_DELETE);
	pbut->EnableWindow(TRUE);
	pbut=(CButton *)GetDlgItem(IDC_INSERT);
	pbut->EnableWindow(TRUE);
}

//修改图形参数
void CPLineDlg::OnPara() 
{
	XxColorSetDialog pDg1(m_ColorPen,p_View->m_bColor,m_ColorBrush,p_View->m_beColor,m_LineType,m_LineWide);	
	if(pDg1.DoModal()==IDOK)
	{
		m_ColorPen=pDg1.m_color1;
		m_ColorBrush=pDg1.m_color3;
		m_LineWide=pDg1.m_linewide;
		m_LineType=pDg1.m_linetype;
		Invalidate();
	}

}

BOOL CPLineDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
	pcom1->ResetContent();
	for(int i=0;i<p_GraphPara->n_LayerNumb;i++)
		pcom1->AddString(p_GraphPara->m_LayerList[i].m_Name);
	pcom1->SetCurSel(m_Layer);
	plist1=(CListBox *)GetDlgItem(IDC_LIST1);
	plist1->ResetContent();
	for(i=0;i<m_PointNumb;i++)
	{
		sprintf(p1,"X=%10.3f  Y=%10.3f  Z=%10.3f",pPointxy[i].x,pPointxy[i].y,pPointxy[i].z);
		plist1->AddString(p1);
	}
	OnSelchangeList1();
	return TRUE;  // return TRUE unless you set the focus to a control
}
/////////////////////////////////////////////////////////////////////////////
// CCircleDlg dialog


CCircleDlg::CCircleDlg(CCircle* pCircle,CWnd* pParent /*=NULL*/)
	: CDialog(CCircleDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCircleDlg)
	m_bFill = FALSE;
	m_bDelete = FALSE;
	m_X = 0.0f;
	m_Y = 0.0f;
	m_R = 0.0f;
	//}}AFX_DATA_INIT
	m_pCircle=pCircle;
	m_X=m_pCircle->m_CircleX;
	m_Y=m_pCircle->m_CircleY;
	m_R=m_pCircle->m_CircleR;
	m_LineWide=m_pCircle->m_LineWide;		//线宽(像素)
	m_LineType=m_pCircle->m_LineType;		//线型(像素)
	m_Layer=m_pCircle->m_Layer;				//所处层
	m_ColorPen=m_pCircle->m_ColorPen;		//笔色
	m_ColorBrush=m_pCircle->m_ColorBrush;	//填充刷颜色
	m_bDelete=m_pCircle->b_Delete;
	m_bFill=m_pCircle->b_Fill;
}


void CCircleDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCircleDlg)
	DDX_Check(pDX, IDC_CHECK1, m_bFill);
	DDX_Check(pDX, IDC_CHECK2, m_bDelete);
	DDX_Text(pDX, IDC_EDIT1, m_X);
	DDX_Text(pDX, IDC_EDIT2, m_Y);
	DDX_Text(pDX, IDC_EDIT3, m_R);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCircleDlg, CDialog)
	//{{AFX_MSG_MAP(CCircleDlg)
	ON_BN_CLICKED(IDC_PARA, OnPara)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCircleDlg message handlers

BOOL CCircleDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
	pcom1->ResetContent();
	for(int i=0;i<p_GraphPara->n_LayerNumb;i++)
		pcom1->AddString(p_GraphPara->m_LayerList[i].m_Name);
	pcom1->SetCurSel(m_Layer);
	return TRUE;  // return TRUE unless you set the focus to a control
}

//保存退出对话框
void CCircleDlg::OnOK() 
{
	CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
	m_Layer=pcom1->GetCurSel();
	UpdateData(1);	//
	m_pCircle->m_CircleX=m_X;
	m_pCircle->m_CircleY=m_Y;
	m_pCircle->m_CircleR=m_R;
	m_pCircle->m_LineWide=m_LineWide;	//线宽(像素)
	m_pCircle->m_LineType=m_LineType;	//线型(像素)
	m_pCircle->m_Layer=m_Layer;		//所处层
	m_pCircle->m_ColorPen=m_ColorPen;	//笔色
	m_pCircle->m_ColorBrush=m_ColorBrush;	//填充刷颜色
	m_pCircle->b_Delete=m_bDelete;
	m_pCircle->b_Fill=m_bFill;
	EndDialog(IDOK);
}

//修改颜色、线型及线宽
void CCircleDlg::OnPara() 
{
	XxColorSetDialog pDg1(m_ColorPen,p_View->m_bColor,m_ColorBrush,p_View->m_beColor,m_LineType,m_LineWide);	
	if(pDg1.DoModal()==IDOK)
	{
		m_ColorPen=pDg1.m_color1;
		m_ColorBrush=pDg1.m_color3;
		m_LineWide=pDg1.m_linewide;
		m_LineType=pDg1.m_linetype;
		Invalidate();
	}

}
/////////////////////////////////////////////////////////////////////////////
// CArcDlg dialog


CArcDlg::CArcDlg(CArc* pArc,CWnd* pParent /*=NULL*/)
	: CDialog(CArcDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CArcDlg)
	m_X = 0.0f;
	m_Y = 0.0f;
	m_R = 0.0f;
	m_Angle1 = 0.0f;
	m_Angle2 = 0.0f;
	m_bDelete = FALSE;
	//}}AFX_DATA_INIT
	m_pArc=pArc;
	m_X=m_pArc->m_CircleX;
	m_Y=m_pArc->m_CircleY;
	m_R=m_pArc->m_CircleR;
	m_Angle1=m_pArc->m_Angle1*180/(float)pi;
	m_Angle2=m_pArc->m_Angle2*180/(float)pi;
	m_LineWide=m_pArc->m_LineWide;		//线宽(像素)
	m_LineType=m_pArc->m_LineType;		//线型(像素)
	m_Layer=m_pArc->m_Layer;				//所处层
	m_ColorPen=m_pArc->m_ColorPen;		//笔色
	m_ColorBrush=m_pArc->m_ColorBrush;	//填充刷颜色
	m_bDelete=m_pArc->b_Delete;
}


void CArcDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CArcDlg)
	DDX_Text(pDX, IDC_EDIT1, m_X);
	DDX_Text(pDX, IDC_EDIT2, m_Y);
	DDX_Text(pDX, IDC_EDIT3, m_R);
	DDX_Text(pDX, IDC_EDIT4, m_Angle1);
	DDX_Text(pDX, IDC_EDIT5, m_Angle2);
	DDX_Check(pDX, IDC_CHECK1, m_bDelete);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CArcDlg, CDialog)
	//{{AFX_MSG_MAP(CArcDlg)
	ON_BN_CLICKED(IDC_PARA, OnPara)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CArcDlg message handlers

void CArcDlg::OnPara() 
{
	XxColorSetDialog pDg1(m_ColorPen,p_View->m_bColor,m_ColorBrush,p_View->m_beColor,m_LineType,m_LineWide);	
	if(pDg1.DoModal()==IDOK)
	{
		m_ColorPen=pDg1.m_color1;
		m_ColorBrush=pDg1.m_color3;
		m_LineWide=pDg1.m_linewide;
		m_LineType=pDg1.m_linetype;
		Invalidate();
	}
}

void CArcDlg::OnOK() 
{
	CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
	m_Layer=pcom1->GetCurSel();
	UpdateData(1);	//
	m_pArc->m_CircleX=m_X;
	m_pArc->m_CircleY=m_Y;
	m_pArc->m_CircleR=m_R;
	m_pArc->m_Angle1=m_Angle1*(float)pi/180;
	m_pArc->m_Angle2=m_Angle2*(float)pi/180;
	m_pArc->m_LineWide=m_LineWide;	//线宽(像素)
	m_pArc->m_LineType=m_LineType;	//线型(像素)
	m_pArc->m_Layer=m_Layer;		//所处层
	m_pArc->m_ColorPen=m_ColorPen;	//笔色
	m_pArc->m_ColorBrush=m_ColorBrush;	//填充刷颜色
	m_pArc->b_Delete=m_bDelete;
	EndDialog(IDOK);
}

BOOL CArcDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
	pcom1->ResetContent();
	for(int i=0;i<p_GraphPara->n_LayerNumb;i++)
		pcom1->AddString(p_GraphPara->m_LayerList[i].m_Name);
	pcom1->SetCurSel(m_Layer);
	return TRUE;  // return TRUE unless you set the focus to a control
}
/////////////////////////////////////////////////////////////////////////////
// CTextDlg dialog


CTextDlg::CTextDlg(CText* pText,CWnd* pParent /*=NULL*/)
	: CDialog(CTextDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTextDlg)
	m_bDelete = FALSE;
	m_Startx = 0.0f;
	m_Starty = 0.0f;
	m_Text = _T("");
	//}}AFX_DATA_INIT
	m_pText=pText;
	m_Startx=m_pText->m_StartX;
	m_Starty=m_pText->m_StartY;
	m_Text=m_pText->c_Text;
	m_Layer=m_pText->m_Layer;				//所处层
	m_ColorPen=m_pText->m_ColorPen;			//笔色
	m_bDelete=m_pText->b_Delete;
	m_TextHeight=m_pText->m_TextHeight;		//字体高度
	m_TextWide=m_pText->m_TextWide;			//字体宽度
	m_OffWide=m_pText->m_OffWide;			//间隔宽度
	m_Angle1=m_pText->m_Angle1;				//标注角度
	m_Angle2=m_pText->m_Angle2;				//字体旋转角度
	m_bDelete=m_pText->b_Delete;

}

⌨️ 快捷键说明

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