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 + -
显示快捷键?