Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Modify_Part3-ch09/SectionCalculation.exe
Binary file not shown.
Binary file not shown.
Binary file not shown.
28 changes: 28 additions & 0 deletions Modify_Part3-ch09/SectionCalculation/SectionCalculation.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SectionCalculation", "SectionCalculation\SectionCalculation.vcxproj", "{7B25400A-51C5-449B-87A6-88A0D9B0DC25}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7B25400A-51C5-449B-87A6-88A0D9B0DC25}.Debug|x64.ActiveCfg = Debug|x64
{7B25400A-51C5-449B-87A6-88A0D9B0DC25}.Debug|x64.Build.0 = Debug|x64
{7B25400A-51C5-449B-87A6-88A0D9B0DC25}.Debug|x86.ActiveCfg = Debug|Win32
{7B25400A-51C5-449B-87A6-88A0D9B0DC25}.Debug|x86.Build.0 = Debug|Win32
{7B25400A-51C5-449B-87A6-88A0D9B0DC25}.Release|x64.ActiveCfg = Release|x64
{7B25400A-51C5-449B-87A6-88A0D9B0DC25}.Release|x64.Build.0 = Release|x64
{7B25400A-51C5-449B-87A6-88A0D9B0DC25}.Release|x86.ActiveCfg = Release|Win32
{7B25400A-51C5-449B-87A6-88A0D9B0DC25}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#include "stdafx.h"
#include "BasicCalc.h"


CBasicCalc::CBasicCalc()
{
}


CBasicCalc::~CBasicCalc()
{
}

double CBasicCalc::Azimuth(double x1, double y1, double x2, double y2)//rad
{
double a = 0;
double x = x2 - x1;
double y = y2 - y1;
if (fabs(x) < EPCLONG)
{
if (y > 0)
a = PI * 0.5;
if (y < 0)
a = PI * 1.5;
}
a = atan(y / x);
if (x < 0)
a += PI;
if (a > 2.0 * PI)
a -= 2.0 * PI;
if (a < 0)
a += 2.0 * PI;
return a;
}

double CBasicCalc::Distance(double x1, double y1, double x2, double y2)
{
double x = x2 - x1;
double y = y2 - y1;
double dis = sqrt(x * x + y * y);
return dis;
}

void CBasicCalc::SortDis(std::vector<CPointInfo>& p)
{
CPointInfo temp;
for (int i = 0; i < p.size() - 1; ++i)
{
for (int j = 0; j < p.size() - 1 - i; ++j)
{
if (p[j].Dis() > p[j + 1].Dis())
{
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
}

void CBasicCalc::CalcHeight(std::vector<CPointInfo>& oripoint, std::vector<CPointInfo>& insertpoint)
{
double addNumerator = 0, addDenominator = 0, dis = 0;
for (int i = 0; i < 11; ++i)
{
for (int j = 0; j < oripoint.size(); ++j)
{
dis = Distance(oripoint[j].X(), oripoint[j].Y(), insertpoint[i].X(), insertpoint[i].Y());
oripoint[j].SetDis(dis);
}
SortDis(oripoint);
for (int k = 0; k < 20; ++k)
{
addNumerator += oripoint[k].H() / oripoint[k].Dis();
addDenominator += 1.0 / oripoint[k].Dis();
}
insertpoint[i].SetH(addNumerator / addDenominator);
addNumerator = 0;
addDenominator = 0;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/******************************************************************************

��Ȩ���� (C), 2018-2020,

******************************************************************************
�� �� �� : BasicCalc.h
�� �� �� : ����
�� �� :
�������� : 2018��10��26��
����޸� :
�������� : �����������
�����б� :
*
*

�޸���ʷ :
1.�� �� : 2018��10��26��
�� �� :
�޸����� : �����ļ�

******************************************************************************/
#pragma once
#include "PointInfo.h"
#include <vector>

const double PI = 3.1415926535897932;
const double EPCLONG = 1.0e-10;
class CBasicCalc
{
public:
CBasicCalc();
~CBasicCalc();

double Azimuth(double x1, double y1, double x2, double y2);
double Distance(double x1, double y1, double x2, double y2);
void SortDis(std::vector<CPointInfo> &p); //ð�����򣬰������С����
void CalcHeight(std::vector<CPointInfo>& oripoint, std::vector<CPointInfo>& insertpoint); //����߳�
};

Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
// DrawDlg.cpp : ʵ���ļ�
//

#include "stdafx.h"
#include "SectionCalculation.h"
#include "DrawDlg.h"
#include "afxdialogex.h"


// CDrawDlg �Ի���

IMPLEMENT_DYNAMIC(CDrawDlg, CDialogEx)

CDrawDlg::CDrawDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_DLG_DRAW, pParent)
{

}

CDrawDlg::~CDrawDlg()
{
}

void CDrawDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CDrawDlg, CDialogEx)
ON_WM_SIZE()
ON_WM_MOUSEWHEEL()
ON_WM_MOUSEMOVE()
ON_WM_PAINT()
END_MESSAGE_MAP()


// CDrawDlg ��Ϣ��������


BOOL CDrawDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// TODO: �ڴ����Ӷ���ij�ʼ��
CRect rect;
this->GetParent()->GetClientRect(&rect);
rect.top += 2;
rect.left += 2;
rect.right -= 10;
rect.bottom -= 2;
this->MoveWindow(rect);

return TRUE; // return TRUE unless you set the focus to a control
// �쳣: OCX ����ҳӦ���� FALSE
}


void CDrawDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
if (::IsWindow(m_hWnd))
{
CZoomView::SetScreenPoint(cx, cy);
Invalidate();
}
}


BOOL CDrawDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: �ڴ�������Ϣ������������/�����Ĭ��ֵ
CZoomView::WheelScale(zDelta);
Invalidate();
return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
}


void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: �ڴ�������Ϣ������������/�����Ĭ��ֵ
CZoomView::CoorMove(point.x, point.y, nFlags);
if (nFlags == 1)
Invalidate();
CDialogEx::OnMouseMove(nFlags, point);
}


void CDrawDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: �ڴ˴�������Ϣ�����������
// ��Ϊ��ͼ��Ϣ���� CDialogEx::OnPaint()
CZoomView::Draw(dc);
}
29 changes: 29 additions & 0 deletions Modify_Part3-ch09/SectionCalculation/SectionCalculation/DrawDlg.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#pragma once
#include "ZoomView.h"

// CDrawDlg �Ի���

class CDrawDlg : public CDialogEx
{
DECLARE_DYNAMIC(CDrawDlg)

public:
CDrawDlg(CWnd* pParent = NULL); // ��׼���캯��
virtual ~CDrawDlg();

// �Ի�������
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DLG_DRAW };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧��

DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnPaint();
};
104 changes: 104 additions & 0 deletions Modify_Part3-ch09/SectionCalculation/SectionCalculation/DxfFile.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
#include "stdafx.h"
#include "DxfFile.h"


CDxfFile::CDxfFile()
{
}


CDxfFile::~CDxfFile()
{
}

bool CDxfFile::Begin()
{
CFileDialog dlg(false, _T("dxf"), _T("resultDXF"), 6UL, _T("DXF�ļ�(*.dxf)|*.dxf||"));
if (IDCANCEL == dlg.DoModal())
return false;

CString filename = dlg.GetPathName();
if (!file.Open(filename, CFile::modeCreate | CFile::modeWrite))
return false;

file.WriteString(_T("0\n"));
file.WriteString(_T("SECTION\n"));
file.WriteString(_T("2\n"));
file.WriteString(_T("ENTITIES\n"));
return true;
}

void CDxfFile::Line(double x1, double y1, double x2, double y2)
{
file.WriteString(_T("0\n"));
file.WriteString(_T("LINE\n"));
file.WriteString(_T("8\n"));
file.WriteString(_T("0\n"));
file.WriteString(_T("10\n"));
str.Format(_T("%lf\n"), x1);
file.WriteString(str);
file.WriteString(_T("20\n"));
str.Format(_T("%lf\n"), y1);
file.WriteString(str);
file.WriteString(_T("30\n"));
file.WriteString(_T("0.0\n"));

file.WriteString(_T("11\n"));
str.Format(_T("%lf\n"), x2);
file.WriteString(str);
file.WriteString(_T("21\n"));
str.Format(_T("%lf\n"), y2);
file.WriteString(str);
file.WriteString(_T("31\n"));
file.WriteString(_T("0.0\n"));
}

void CDxfFile::Point(double x1, double y1)
{
file.WriteString(_T("0\n"));
file.WriteString(_T("POINT\n"));
file.WriteString(_T("8\n"));
file.WriteString(_T("0\n"));
file.WriteString(_T("10\n"));
str.Format(_T("%lf\n"), x1);
file.WriteString(str);
file.WriteString(_T("20\n"));
str.Format(_T("%lf\n"), y1);
file.WriteString(str);
file.WriteString(_T("30\n"));
file.WriteString(_T("0.0\n"));
}

void CDxfFile::Text(double x1, double y1, CString strID)
{
file.WriteString(_T("0\n"));
file.WriteString(_T("TEXT\n"));
file.WriteString(_T("8\n"));
file.WriteString(_T("0\n"));
file.WriteString(_T("10\n"));
str.Format(_T("%lf\n"), x1);
file.WriteString(str);
file.WriteString(_T("20\n"));
str.Format(_T("%lf\n"), y1);
file.WriteString(str);
file.WriteString(_T("30\n"));
file.WriteString(_T("0.0\n"));
file.WriteString(_T("40\n"));
file.WriteString(_T("10\n"));

file.WriteString(_T("1\n"));
str.Format(_T("%s\n"), strID);
file.WriteString(str);
}

void CDxfFile::End()
{
file.WriteString(_T("0\n"));
file.WriteString(_T("ENDSEC\n"));
file.WriteString(_T("0\n"));
file.WriteString(_T("EOF\n"));

file.Close();
AfxMessageBox(_T("dxf������ϣ���"));
}

Loading