📄 jcview.cpp
字号:
// JcView.cpp : implementation file
//
#include "stdafx.h"
#include "demo_devstudio.h"
#include "JcView.h"
#include "treeviewfile.h"
#include "afxdao.h"
#include "demo_devstudiodoc.h"
#include "mainfrm.h"
#include "childfrm.h"
#include "crack.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define pi 3.1415926
#define po 206265
/////////////////////////////////////////////////////////////////////////////
// CJcView
IMPLEMENT_DYNCREATE(CJcView, CFormView)
CJcView::CJcView()
: CFormView(CJcView::IDD)
{
//{{AFX_DATA_INIT(CJcView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CJcView::~CJcView()
{
ljb.DeleteAllItems();
for(int b=0;b<=m_myyzarray.GetUpperBound();b++)
{
if(m_myyzarray.GetAt(b))
delete m_myyzarray.GetAt(b);
}
m_myyzarray.RemoveAll();
}
void CJcView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CJcView)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CJcView, CFormView)
//{{AFX_MSG_MAP(CJcView)
ON_WM_SIZE()
ON_BN_CLICKED(IDC_NEXT, OnNext)
ON_BN_CLICKED(IDC_JIESHU, OnJieshu)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CJcView diagnostics
#ifdef _DEBUG
void CJcView::AssertValid() const
{
CFormView::AssertValid();
}
void CJcView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CJcView message handlers
void CJcView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
CRect rect1;
if(!GetDlgItem(IDC_NEXT))
return;
if(!GetDlgItem(IDC_JIESHU))
return;
if(!GetDlgItem(IDC_EDIT1))
return;
GetClientRect(rect1);
GetDlgItem(IDC_NEXT)->SetWindowPos(0,rect1.left+15,rect1.bottom-75,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_SHOWWINDOW);
GetDlgItem(IDC_JIESHU)->SetWindowPos(0,rect1.left+15,rect1.bottom-40,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_SHOWWINDOW);
GetDlgItem(IDC_EDIT1)->SetWindowPos(0,0,0,250,rect1.bottom-80,SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
// TODO: Add your message handler code here
}
void CJcView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
}
typedef struct jiedian
{
CString dianhao;
bool isknow;
}*jd;
double chazhaojuli(CArray<jl,jl>* parray,CString sd,CString md)
{
for(int r=0;r<=parray->GetUpperBound();r++)
{if(strcmp(parray->GetAt(r)->shoudian,sd)==0&&strcmp(parray->GetAt(r)->modian,md)==0)
return parray->GetAt(r)->juli;
if(strcmp(parray->GetAt(r)->shoudian,md)==0&&strcmp(parray->GetAt(r)->modian,sd)==0)
return parray->GetAt(r)->juli;
}
return -1;
}
extern double liushizshi(double liudata);
extern CString liushiyunsuan(double m_str1,double m_str2);
void CJcView::OnNext()
{
// TODO: Add your control notification handler code here
CMainFrame* p_mainfrm;
p_mainfrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
ASSERT(p_mainfrm);
CChildFrame* pchildframe;
pchildframe=(CChildFrame*)p_mainfrm->GetActiveFrame();
ASSERT(pchildframe);
CDemo_DevStudioDoc *mydoc=(CDemo_DevStudioDoc*)pchildframe->GetActiveDocument();
ASSERT(mydoc);
CString dbname=mydoc->m_workname;
CString commandstr;
GetDlgItem(IDC_NEXT)->GetWindowText(commandstr);
CDaoDatabase *m_database;
CDaoRecordset *m_recordset;
m_database=new CDaoDatabase;
try
{
m_database->Open(dbname);
m_recordset=new CDaoRecordset(m_database);
}
catch(CDaoException* e)
{
e->ReportError();
delete m_database;
m_database=NULL;
e->Delete();
return;
}
if(!strcmp(commandstr,"开始"))
{ GetDlgItem(IDC_NEXT)->SetWindowText("平差");
if(m_recordset->IsOpen())
m_recordset->Close();
try
{
CString strselect(_T("Select * From["));
strselect+="水平观测角";
strselect+=_T("]");
m_recordset->Open(dbOpenDynaset,strselect);
if(!m_recordset->CanUpdate())
return;
COleVariant var1,var2,var3;
CString czstr=_T("havenoyuanshu");
double dxjiao,gcjiao;
while(!m_recordset->IsEOF())
{
var1=m_recordset->GetFieldValue(0);
var2=m_recordset->GetFieldValue(1);
var3=m_recordset->GetFieldValue(2);
gcjiao=atof(CCrack::strVARIANT(var3));
if(!strcmp(czstr,CCrack::strVARIANT(var1)))
ljb.Addzzdian(CCrack::strVARIANT(var1),CCrack::strVARIANT(var2),atof(liushiyunsuan(gcjiao,dxjiao)));
else
{
ljb.Addcezhan(CCrack::strVARIANT(var1),CCrack::strVARIANT(var2));
dxjiao=atof(CCrack::strVARIANT(var3));
czstr=CCrack::strVARIANT(var1);
}
m_recordset->MoveNext();
}
}
catch(CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
m_recordset->Close();
//把已知信息写入邻接表
CArray<jl,jl> pjlarray;
try
{
CString select(_T("Select * From["));
select+="已知点坐标高程";
select+=_T("]");
m_recordset->Open(dbOpenDynaset,select);
if(!m_recordset->CanUpdate())
return;
COleVariant var1,var2,var3;
while(!m_recordset->IsEOF())
{
var1=m_recordset->GetFieldValue(0);
var2=m_recordset->GetFieldValue(1);
var3=m_recordset->GetFieldValue(2);
CString str2=CCrack::strVARIANT(var2);
CString str1=CCrack::strVARIANT(var1);
CString str3=CCrack::strVARIANT(var3);
yz newyz=new yizhidian;
newyz->dianhao=str1;
newyz->x=atof(str2);
newyz->y=atof(str3);
m_myyzarray.Add(newyz);
int index =ljb.Findczd(str1);
if(index!=-1)
{
ljb.m_xian.GetAt(index)->x=atof(str2);
ljb.m_xian.GetAt(index)->y=atof(str3);
ljb.m_xian.GetAt(index)->isknow=1;
}
m_recordset->MoveNext();
}
}
catch(CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
m_recordset->Close();
try
{
CString select(_T("Select * From["));
select+="距离";
select+=_T("]");
m_recordset->Open(dbOpenDynaset,select);
if(!m_recordset->CanUpdate())
return;
COleVariant var1,var2,var3;
while(!m_recordset->IsEOF())
{ var1=m_recordset->GetFieldValue(0);
var2=m_recordset->GetFieldValue(1);
var3=m_recordset->GetFieldValue(2);
jl pjl=new cjuli;
pjl->shoudian=CCrack::strVARIANT(var1);
pjl->modian=CCrack::strVARIANT(var2);
pjl->juli=atof(CCrack::strVARIANT(var3));
pjlarray.Add(pjl);
m_recordset->MoveNext();
}
}
catch(CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
m_recordset->Close();
//开始求近似值
CArray<qsd,qsd> qsdarray;//存放能够起算的数据
CArray<hd,hd> hdarray;//存放弧段
CString qicstr;
CString qidstr;
double qicdatax,qicdatay,qiddatax,qiddatay;
qicstr.Empty();
qidstr.Empty();
for(int index=0;index<=ljb.m_xian.GetUpperBound();index++)
{
if(ljb.m_xian.GetAt(index)->isknow)
{ qicstr=ljb.m_xian.GetAt(index)->czdian;
int b;
CString dxname=ljb.m_xian.GetAt(index)->dxdian;
for( b=0;b<=m_myyzarray.GetUpperBound();b++)
{
if(!strcmp(dxname,m_myyzarray.GetAt(b)->dianhao))
{
qidstr=dxname;
break;
}
else
{ zzd p_zzd=ljb.m_xian.GetAt(index)->pzzdian;
while(p_zzd)
{ CString zzname=p_zzd->dianhao;
if(!strcmp(zzname,m_myyzarray.GetAt(b)->dianhao))
{ qidstr=zzname;
break;
}
else
p_zzd=p_zzd->myzzdian;
}
}
}
}
if(qidstr.IsEmpty()==false)
{
//qsd p_qsd=new qisuandian;
//p_qsd->cpoint=qicstr;
//p_qsd->zpoint=qidstr;
//qsdarray.Add(p_qsd);
break;
}
}
if(qicstr.IsEmpty())
MessageBox("已知数据不够,或者本程序不能处理这样的导线网");
if(qidstr.IsEmpty())
MessageBox("本软件暂不能处理此导线网");
// MessageBox(qicstr);
//MessageBox(qidstr);
int m_index1=ljb.Findczd(qicstr);
int m_index2=ljb.Findczd(qidstr);
qicdatax=ljb.m_xian.GetAt(m_index1)->x;
qicdatay=ljb.m_xian.GetAt(m_index1)->y;
try
{
CString select(_T("Select * From["));
select+="已知点坐标高程";
select+=_T("]");
m_recordset->Open(dbOpenDynaset,select);
if(!m_recordset->CanUpdate())
return;
COleVariant var1,var2,var3;
while(!m_recordset->IsEOF())
{
var1=m_recordset->GetFieldValue(0);
CString str1=CCrack::strVARIANT(var1);
if(!strcmp(str1,qidstr))
{ var2=m_recordset->GetFieldValue(1);
CString str2=CCrack::strVARIANT(var2);
var3=m_recordset->GetFieldValue(2);
CString str3=CCrack::strVARIANT(var3);
qiddatax=atof(str2);
qiddatay=atof(str3);
break;
}
m_recordset->MoveNext();
}
}
catch(CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
m_recordset->Close();
double qishifwj=atan2(qiddatay-qicdatay,qiddatax-qicdatax);
//CString qistr;
// qistr.Format("%f",qishifwj);
//MessageBox(qistr);
CArray<jd,jd> jdarray;
// 把节点写进数组
for(int c=0;c<ljb.m_xian.GetUpperBound();c++)
{
czd pzd=ljb.m_xian.GetAt(c);
if(pzd->du>=2)
{ jd pjd=new jiedian;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -