📄 gmcadview.cpp
字号:
// GMCADView.cpp : implementation of the CGMCADView class
//
#include "stdafx.h"
#include "GMCAD.h"
#include "math.h"
//#include "stdlib.h"
#include "GMCADDoc.h"
#include "GMCADView.h"
//#include "ChengmuTranDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGMCADView
enum {PINGXING_DESIGN=1,CHUMU_DESIGN,CHONGTOU_DESIGN,XGT_TEST,VIEW_VOLUME};
const double pi= 3.1415926;
CObList xgtList;
int IsXGTTest=0;
static int XGTTesting=0;
double hk=0.0;
double chzh=0.0;
double chzv=0.0,cmzv=0.0,ctzv=0.0,volhk=0.0,volmt=0.0,volcr=0.0;
int chn,cmn,ctn;
IMPLEMENT_DYNCREATE(CGMCADView, CFormView)
BEGIN_MESSAGE_MAP(CGMCADView, CFormView)
//{{AFX_MSG_MAP(CGMCADView)
ON_BN_CLICKED(IDC_X, OnX)
ON_BN_CLICKED(IDC_H1, OnH1)
ON_BN_CLICKED(IDC_HLINE, OnHLine)
ON_BN_CLICKED(IDC_RECT, OnRect)
ON_BN_CLICKED(IDC_PD, OnPd)
ON_COMMAND(ID_DESIGN_CHONGTOU, OnDesignChongtou)
ON_UPDATE_COMMAND_UI(ID_DESIGN_CHONGTOU, OnUpdateDesignChongtou)
ON_COMMAND(ID_DESIGN_CHUMU, OnDesignChumu)
ON_UPDATE_COMMAND_UI(ID_DESIGN_CHUMU, OnUpdateDesignChumu)
ON_COMMAND(ID_DESIGN_PINGXING, OnDesignPingxing)
ON_UPDATE_COMMAND_UI(ID_DESIGN_PINGXING, OnUpdateDesignPingxing)
ON_EN_CHANGE(IDC_DD, OnChangeDd)
ON_EN_CHANGE(IDC_HH, OnChangeHh)
ON_EN_CHANGE(IDC_RP, OnChangeRp)
ON_EN_CHANGE(IDC_RR, OnChangeRr)
ON_BN_CLICKED(IDC_PARAINPUTOK, OnParainputok)
ON_BN_CLICKED(IDC_BUTTONEND, OnButtonEnd)
ON_BN_CLICKED(IDC_H2, OnH2)
ON_BN_CLICKED(IDC_HH0, OnHh0)
ON_BN_CLICKED(IDC_HX, OnHx)
ON_BN_CLICKED(IDC_XH, OnXh)
ON_EN_CHANGE(IDC_RP2, OnChangeRp2)
ON_EN_CHANGE(IDC_RR2, OnChangeRr2)
ON_EN_CHANGE(IDC_HH1, OnChangeHh1)
ON_EN_CHANGE(IDC_HH2, OnChangeHh2)
ON_COMMAND(ID_DESIGN_XGTTEST, OnDesignXgttest)
ON_UPDATE_COMMAND_UI(ID_DESIGN_XGTTEST, OnUpdateDesignXgttest)
ON_COMMAND(ID_VIEW_VOLUME, OnViewVolume)
ON_UPDATE_COMMAND_UI(ID_VIEW_VOLUME, OnUpdateViewVolume)
ON_EN_CHANGE(IDC_EDIT_VOL, OnChangeEditVol)
ON_EN_CHANGE(IDC_EDIT_AREA, OnChangeEditArea)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGMCADView construction/destruction
CGMCADView::CGMCADView()
: CFormView(CGMCADView::IDD)
{
//{{AFX_DATA_INIT(CGMCADView)
m_XianXing = -1;
m_DD = 0.0f;
m_HH = 0.0f;
m_RP = _T("");
m_RR = 0.0f;
m_HH1 = 0.0f;
m_HH2 = 0.0f;
m_RP2 = _T("");
m_RR2 = 0.0f;
m_text11 = _T("");
m_text12 = _T("");
m_text13 = _T("");
m_text14 = _T("");
m_text15 = _T("");
m_text16 = _T("");
m_text21 = _T("");
m_text22 = _T("");
m_text23 = _T("");
m_text24 = _T("");
m_text25 = _T("");
m_text26 = _T("");
m_text31 = _T("");
m_text32 = _T("");
m_text33 = _T("");
m_text34 = _T("");
m_text35 = _T("");
m_text36 = _T("");
m_text17 = _T("");
m_text27 = _T("");
m_text37 = _T("");
m_XXVol = 0.0;
m_XXArea = 0.0;
//}}AFX_DATA_INIT
// TODO: add construction code here
IsDesigning=0;
IsHadPK=0;
HLineNumber=0;
H1Number=0;
pxOK=0;
cmOK=0;
ctOK=0;
}
CGMCADView::~CGMCADView()
{
}
void CGMCADView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGMCADView)
DDX_Control(pDX, IDC_STATIC_RHUNIT, m_RHUnitStatic);
DDX_Control(pDX, IDC_STATIC_ZVUNIT, m_ZVUnitStatic);
DDX_Control(pDX, IDC_STATIC_ZAUNIT, m_ZAUnitStatic);
DDX_Control(pDX, IDC_STATIC_DISP, m_dispStatic);
DDX_Control(pDX, IDC_STATIC_XXVUNIT, m_XXVUnitStatic);
DDX_Control(pDX, IDC_STATIC_XXV, m_XXVStatic);
DDX_Control(pDX, IDC_STATIC_XXAUNIT, m_XXAUnitStatic);
DDX_Control(pDX, IDC_STATIC_XXA, m_XXAStatic);
DDX_Control(pDX, IDC_BUTTONEND, m_OKButton);
DDX_Control(pDX, IDC_STATIC_RR2, m_RR2Static);
DDX_Control(pDX, IDC_STATIC_HH2, m_HH2Static);
DDX_Control(pDX, IDC_STATIC_HH1, m_HH1Static);
DDX_Control(pDX, IDC_RR2, m_RR2Edit);
DDX_Control(pDX, IDC_RP2, m_RP2Edit);
DDX_Control(pDX, IDC_HH2, m_HH2Edit);
DDX_Control(pDX, IDC_HH1, m_HH1Edit);
DDX_Control(pDX, IDC_STATIC_ZV, m_ZVStatic);
DDX_Control(pDX, IDC_STATIC_ZH, m_ZHStatic);
DDX_Control(pDX, IDC_STATIC_ZA, m_ZAStatic);
DDX_Control(pDX, IDC_EDIT_ZV, m_ZVEdit);
DDX_Control(pDX, IDC_EDIT_ZA, m_ZAEdit);
DDX_Control(pDX, IDC_EDIT_VOL, m_VolEdit);
DDX_Control(pDX, IDC_EDIT_AREA, m_AreaEdit);
DDX_Control(pDX, IDC_EDIT_REMAINZG, m_RemainZGEdit);
DDX_Control(pDX, IDC_STATIC_RR, m_RRStatic);
DDX_Control(pDX, IDC_STATIC_HH, m_HHStatic);
DDX_Control(pDX, IDC_STATIC_DD, m_DDStatic);
DDX_Control(pDX, IDC_RR, m_RREdit);
DDX_Control(pDX, IDC_RP, m_RPEdit);
DDX_Control(pDX, IDC_HH, m_HHEdit);
DDX_Control(pDX, IDC_DD, m_DDEdit);
DDX_Control(pDX, IDC_STATIC_TIP, m_TipStatic);
DDX_Radio(pDX, IDC_X, m_XianXing);
DDX_Text(pDX, IDC_DD, m_DD);
DDX_Text(pDX, IDC_HH, m_HH);
DDX_Text(pDX, IDC_RP, m_RP);
DDX_Text(pDX, IDC_RR, m_RR);
DDX_Text(pDX, IDC_HH1, m_HH1);
DDX_Text(pDX, IDC_HH2, m_HH2);
DDX_Text(pDX, IDC_RP2, m_RP2);
DDX_Text(pDX, IDC_RR2, m_RR2);
DDX_Text(pDX, IDC_TEXT11, m_text11);
DDX_Text(pDX, IDC_TEXT12, m_text12);
DDX_Text(pDX, IDC_TEXT13, m_text13);
DDX_Text(pDX, IDC_TEXT14, m_text14);
DDX_Text(pDX, IDC_TEXT15, m_text15);
DDX_Text(pDX, IDC_TEXT16, m_text16);
DDX_Text(pDX, IDC_TEXT21, m_text21);
DDX_Text(pDX, IDC_TEXT22, m_text22);
DDX_Text(pDX, IDC_TEXT23, m_text23);
DDX_Text(pDX, IDC_TEXT24, m_text24);
DDX_Text(pDX, IDC_TEXT25, m_text25);
DDX_Text(pDX, IDC_TEXT26, m_text26);
DDX_Text(pDX, IDC_TEXT31, m_text31);
DDX_Text(pDX, IDC_TEXT32, m_text32);
DDX_Text(pDX, IDC_TEXT33, m_text33);
DDX_Text(pDX, IDC_TEXT34, m_text34);
DDX_Text(pDX, IDC_TEXT35, m_text35);
DDX_Text(pDX, IDC_TEXT36, m_text36);
DDX_Text(pDX, IDC_TEXT17, m_text17);
DDX_Text(pDX, IDC_TEXT27, m_text27);
DDX_Text(pDX, IDC_TEXT37, m_text37);
DDX_Text(pDX, IDC_EDIT_VOL, m_XXVol);
DDX_Text(pDX, IDC_EDIT_AREA, m_XXArea);
//}}AFX_DATA_MAP
}
BOOL CGMCADView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CGMCADView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
GetDlgItem(IDC_DRAW_AREA)->GetWindowRect(&m_DrawArea);
ScreenToClient(&m_DrawArea);
GetDlgItem(IDC_PARASHOW_AREA)->GetWindowRect(&m_ParaShowArea);
ScreenToClient(&m_ParaShowArea);
m_Axisx=(m_DrawArea.left+m_DrawArea.right)/2;
m_CenterY=(m_DrawArea.top+m_DrawArea.bottom)/2;
CGMCADDoc* pDoc = GetDocument();
pDoc->m_Axisx=m_Axisx;
pDoc->m_CenterY=m_CenterY;
m_XianXing=0;
if(!IsXGTTest)
m_TipStatic.SetWindowText("请选择“设计”菜单下的某一项来开始设计,或选择“转换”菜单下的某一项来进行转换。");
}
/////////////////////////////////////////////////////////////////////////////
// CGMCADView diagnostics
#ifdef _DEBUG
void CGMCADView::AssertValid() const
{
CFormView::AssertValid();
}
void CGMCADView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CGMCADDoc* CGMCADView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGMCADDoc)));
return (CGMCADDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CGMCADView message handlers
void CGMCADView::OnDraw(CDC* pDC)
{
CGMCADDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: Add your specialized code here and/or call the base class
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(50,-50);
pDC->SetViewportExt(50,50);
// 画中心线
CPen NewPen,*pOldPen;
NewPen.CreatePen(PS_DASHDOT,1,RGB(255,0,0));
pOldPen=pDC->SelectObject(&NewPen);
POINT p1,p2;
p1.x=m_Axisx;
p2.x=m_Axisx;
p1.y=m_DrawArea.top+10;
p2.y=m_DrawArea.bottom-10;
pDC->DPtoLP(&p1);
pDC->DPtoLP(&p2);
pDC->MoveTo(p1);
pDC->LineTo(p2);
pDC->SelectObject(pOldPen);
if(XGTTesting)
{
POSITION pos;
for(pos=xgtList.GetHeadPosition();pos!=NULL;)
((CRevSurf *)xgtList.GetNext(pos))->Drawing(pDC);
}
else
{
int index;
index=pDoc->GetRevSurfNumber();
for(int i=0;i<index;i++)
pDoc->GetRevSurf(i)->Drawing(pDC);
}
if(!XGTTesting)
{
CString str;
if(IsDesigning==0)
{
m_ZHStatic.SetWindowText("设计总高度:");
m_ZVStatic.SetWindowText("设计总体积:");
m_ZAStatic.SetWindowText("设计总面积:");
str.Format("%12.2f",pDoc->m_TotalH);
m_RemainZGEdit.SetWindowText(str);
str.Format("%12.2f",pDoc->m_TotalVolue);
m_ZVEdit.SetWindowText(str);
str.Format("%12.2f",pDoc->m_TotalArea);
m_ZAEdit.SetWindowText(str);
}
else
{
m_ZHStatic.SetWindowText("剩余总高度:");
m_ZVStatic.SetWindowText("已有总体积:");
m_ZAStatic.SetWindowText("已有总面积:");
str.Format("%12.2f",pDoc->m_RH);
m_RemainZGEdit.SetWindowText(str);
str.Format("%12.2f",pDoc->m_TotalVolue);
m_ZVEdit.SetWindowText(str);
str.Format("%12.2f",pDoc->m_TotalArea);
m_ZAEdit.SetWindowText(str);
}
}
}
void CGMCADView::OnX()
{
// TODO: Add your control notification handler code here
m_XianXing=XIANXING_X;
m_TipStatic.SetWindowText("请输入高度、直径。");
m_DDStatic.EnableWindow(TRUE);
m_HHEdit.EnableWindow(TRUE);
m_DDEdit.EnableWindow(TRUE);
m_HHStatic.SetWindowText("高度H:");
m_DDStatic.SetWindowText("直径D:");
m_RREdit.EnableWindow(FALSE);
m_RRStatic.EnableWindow(FALSE);
m_RPEdit.EnableWindow(FALSE);
m_RR2Edit.EnableWindow(FALSE);
m_RR2Static.EnableWindow(FALSE);
m_RP2Edit.EnableWindow(FALSE);
m_HH1Edit.EnableWindow(FALSE);
m_HH1Static.EnableWindow(FALSE);
m_HH2Edit.EnableWindow(FALSE);
m_HH2Static.EnableWindow(FALSE);
CClientDC dc(this);
dc.SetTextColor(RGB(0,255,0));
CBrush NewBrush,*pOldBrush;
NewBrush.CreateSolidBrush(RGB(0,0,0));
pOldBrush=dc.SelectObject(&NewBrush);
dc.Rectangle(&m_ParaShowArea);
dc.SelectObject(pOldBrush);
dc.SetBkMode(TRANSPARENT);
CPen RedPen,GreenPen,*pOldPen,*temppen;
RedPen.CreatePen(PS_SOLID,1,RGB(255,0,0));
pOldPen=dc.SelectObject(&RedPen);
dc.MoveTo(140,60);
dc.LineTo(60,130);
GreenPen.CreatePen(PS_SOLID,1,RGB(0,255,0));
temppen=dc.SelectObject(&GreenPen);
dc.MoveTo(60,132);
dc.LineTo(210,132);
dc.MoveTo(60,132);
dc.LineTo(60,162);
dc.MoveTo(142,60);
dc.LineTo(210,60);
dc.MoveTo(182,60);
dc.LineTo(182,82);
dc.MoveTo(182,99);
dc.LineTo(182,130);
dc.MoveTo(182,60); // H的两个箭头
dc.LineTo(178,65);
dc.MoveTo(182,60);
dc.LineTo(186,65);
dc.MoveTo(182,130);
dc.LineTo(178,125);
dc.MoveTo(182,130);
dc.LineTo(186,125);
dc.MoveTo(63,150);
dc.LineTo(100,150);
dc.MoveTo(61,150);
dc.LineTo(66,146);
dc.MoveTo(61,150);
dc.LineTo(66,154);
dc.TextOut(178,85,"H");
dc.TextOut(102,142,"D");
dc.SelectObject(pOldPen);
}
void CGMCADView::OnH1()
{
// TODO: Add your control notification handler code here
m_XianXing=XIANXING_H1;
m_HHEdit.EnableWindow(TRUE);
m_DDEdit.EnableWindow(TRUE);
m_RREdit.EnableWindow(TRUE);
m_RPEdit.EnableWindow(TRUE);
m_HHStatic.EnableWindow(TRUE);
m_DDStatic.EnableWindow(TRUE);
m_RRStatic.EnableWindow(TRUE);
m_RR2Edit.EnableWindow(FALSE);
m_RP2Edit.EnableWindow(FALSE);
m_HH1Edit.EnableWindow(FALSE);
m_HH2Edit.EnableWindow(FALSE);
m_RR2Static.EnableWindow(FALSE);
m_HH1Static.EnableWindow(FALSE);
m_HH2Static.EnableWindow(FALSE);
CGMCADDoc* pDoc = GetDocument();
if((pDoc->CurrentDesign==CHONGTOU_DESIGN) && (H1Number==0))
{
m_TipStatic.SetWindowText("请输入总高、直径D、半径R。");
m_HHStatic.SetWindowText("总高:");
// m_DDStatic.SetWindowText("高度H:");
m_DDStatic.EnableWindow(FALSE);
m_DDEdit.EnableWindow(FALSE);
m_RRStatic.SetWindowText("直径D:");
m_RR2Edit.EnableWindow(TRUE);
m_RR2Static.EnableWindow(TRUE);
m_RR2Static.SetWindowText("半径R:");
m_RPEdit.EnableWindow(FALSE);
}
else
{
m_TipStatic.SetWindowText("请输入高度H、直径D、半径R及其弧特性。");
m_HHStatic.SetWindowText("高度H:");
m_DDStatic.SetWindowText("直径D:");
m_RRStatic.SetWindowText("半径R:");
}
CClientDC dc(this);
dc.SetTextColor(RGB(0,255,0));
CBrush NewBrush,*pOldBrush;
NewBrush.CreateSolidBrush(RGB(0,0,0));
pOldBrush=dc.SelectObject(&NewBrush);
dc.Rectangle(&m_ParaShowArea);
dc.SelectObject(pOldBrush);
dc.SetBkMode(TRANSPARENT);
CPen RedPen,GreenPen,*pOldPen,*temppen;
RedPen.CreatePen(PS_SOLID,1,RGB(255,0,0));
pOldPen=dc.SelectObject(&RedPen);
dc.Arc(58,58,252,252,138,60,60,130);
GreenPen.CreatePen(PS_SOLID,1,RGB(0,255,0));
temppen=dc.SelectObject(&GreenPen);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -