📄 gcjtextview.cpp
字号:
// GCJTextView.cpp : implementation of the CGCJTextView class
//
#include "stdafx.h"
#include "GCJText.h"
#include "Dlgfd.h"
#include "GCJTextDoc.h"
#include "GCJTextView.h"
#include "GuncijiJC.h"
#include "Lenth.h"
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGCJTextView
IMPLEMENT_DYNCREATE(CGCJTextView, CScrollView)
BEGIN_MESSAGE_MAP(CGCJTextView, CScrollView)
//{{AFX_MSG_MAP(CGCJTextView)
ON_COMMAND(ID_JCGAODUSJ, OnJcgaodusj)
ON_COMMAND(ID_MODE_SPEED, OnModeSpeed)
ON_COMMAND(ID_DEMO, OnDemo)
ON_COMMAND(ID_LENG_FEN, OnLengFen)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGCJTextView construction/destruction
CGCJTextView::CGCJTextView()
{
// TODO: add construction code here
m_gdzj1 = 0.0f;
m_ggsd1 = 0.0f;
m_gxl1 = 0.0f;
m_gjhd1 = 0.0f;
m_tjgd1 = 0.0f;
m_xzjd1 = 0.0f;
m_kggd1 = 0.0f;
m_fFuweiJL=0.0f;
m_fFuweiSJ=0.0f;
m_str="";
m_i=0;demo=0;
memset(fsave1,-1,100000);
memset(fsave2,-1,100000);
memset(fsave3,-1,1000000);
memset(fsave4,-1,1000000);
m_saveold=0.0f;
m_Waiqier=0.0f;m_imode=0;
m_r=0.0f;page=1;
m_c=0.0f;m_bsize=0;
m_string1="";m_fjdu=0.01;
}
CGCJTextView::~CGCJTextView()
{
}
BOOL CGCJTextView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CGCJTextView drawing
void CGCJTextView::OnDraw(CDC* pDC)
{
CGCJTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int i=0;bool s1,s2;
int j=0;int k;
TEXTMETRIC tm;double yy;
pDC->GetTextMetrics(&tm);
s1=0;s2=0;
while((fsave1[i]!=-1)&&(fsave2[i]!=-1))i++;k=i;
while((fsave3[j]!=-1)&&(fsave4[j]!=-1))j++;
if(m_bsize)
{
if(i<j)i=j;
pDoc->SetSizeDoc(CSize(450*(i/38+4),1800*(i/227+1)));
OnInitialUpdate();
page=((i+2)*tm.tmHeight)/1100+1;
m_bsize=0;
}
i=0;
j=0;double xx,zs;
int x=30;
int y=0;
pDC->TextOut(30,60,m_str);
if(demo==0)
{
while((fsave1[i]!=-1)&&(fsave2[i]!=-1))
{
// m_string1.Format("当工件移动精度为0.01mm时,滚刀的移动距离为: %4.2f 毫米 ,时间为 %4.2f 秒",fsave1[i],fsave2[i]);
if(m_imode==2)
{
m_string1.Format("N%4d G04 F%4.2f",(i*2+1)*10,fsave2[i]);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);y++;
if(i<(k-1))m_string1.Format("N%4d G01 x-%4.3f",(i*2+2)*10,m_xzjd1);
else m_string1.Format("N%4d G01 x-%4.3f",(i*2+2)*10,m_flast);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);
i++;y++;
if((i%38)==0){x+=450;y=0;}
}
else
{
if(m_imode==1)
{
m_string1.Format("N%4d G04 F%4.2f",(i*2+1)*10,(fsave1[i]*60)/fsave2[i]-(fsave1[i]*60));
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);y++;
m_string1.Format("N%4d G01 x%4.2f",(i*2+2)*10,fsave1[i]);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);
i++;y++;
if((i%38)==0){x+=450;y=0;}
}
else
{
m_string1.Format("N%4d G04 F%4.2f",(i*2+1)*10,fsave2[i]);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);y++;
m_string1.Format("N%4d G01 x%4.2f",(i*2+2)*10,fsave1[i]);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);
i++;y++;
if((i%38)==0){x+=450;y=0;}
}
}
s1=1;
}
if(s1)
{
i--;
for(int t=i;t>=0;t--)
{
if(m_imode==2)
{
m_string1.Format("N%4d G04 F%4.2f",(i*2+1)*10,fsave2[t]);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);y++;
if(t<(k-1))m_string1.Format("N%4d G01 x%4.3f",(i*2+2)*10,m_xzjd1);
else m_string1.Format("N%4d G01 x%4.3f",(i*2+2)*10,m_flast);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);
i++;y++;if((i%38)==0){x+=450;y=0;}
}
else
{
if(m_imode==1)
{
m_string1.Format("N%4d G04 F%4.2f",(i*2+1)*10,(fsave1[t]*60)/fsave2[t]-(fsave1[t]*60));
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);y++;
m_string1.Format("N%4d G01 x-%4.2f",(i*2+2)*10,fsave1[t]);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);
i++;y++;
if((i%38)==0){x+=450;y=0;}
}
else
{
m_string1.Format("N%4d G04 F%4.2f",(i*2+1)*10,fsave2[t]);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);y++;
m_string1.Format("N%4d G01 x-%4.2f",(i*2+2)*10,fsave1[t]);
pDC->TextOut(x,tm.tmHeight*(y+5),m_string1);
i++;y++;
if((i%38)==0){x+=450;y=0;}
}
}
}
}
}
else
{
i=0;j=0;yy=200;xx=250;savep.x=450;savep.y=200;
while((fsave1[i]!=-1)&&(fsave2[i]!=-1))i++;
while((fsave3[j]!=-1)&&(fsave4[j]!=-1))j++;
if(i>0)
{
if(m_imode==2)
{
i=0;
while((fsave1[i]!=-1)&&(fsave2[i]!=-1))i++;
for(j=0;j<i;j++)
{
xx-=m_xzjd1*10;
yy+=(m_ggsd1*fsave2[j]*10);
pDC->Ellipse(xx-(m_gdzj1/2), yy-(m_gdzj1/2), xx+(m_gdzj1/2), yy+(m_gdzj1/2) );
pDC->MoveTo(savep);
pDC->LineTo(savep.x,yy);
pDC->LineTo(xx,yy);
savep.x=xx+200;
savep.y=yy;
}
for(j=i-1;j>=0;j--)
{
xx+=m_xzjd1*10;
yy+=(m_ggsd1*fsave2[j]*10);
pDC->Ellipse(xx-(m_gdzj1/2), yy-(m_gdzj1/2), xx+(m_gdzj1/2), yy+(m_gdzj1/2) );
pDC->MoveTo(savep);
pDC->LineTo(savep.x,yy);
pDC->LineTo(xx,yy);
savep.x=xx+200;
savep.y=yy;
}
}
else
{
if(m_imode==1)
{
i=0;j=0;yy=200;xx=250;
while((fsave1[i]!=-1)&&(fsave2[i]!=-1))i++;
for(j=0;j<i;j++)
{
xx-=fsave1[j]*10;
yy+=((fsave1[j]*m_ggsd1*600)/fsave2[j]);
pDC->Ellipse(xx-(m_gdzj1/2), yy-(m_gdzj1/2), xx+(m_gdzj1/2), yy+(m_gdzj1/2) );
pDC->MoveTo(savep);
pDC->LineTo(savep.x,yy);
pDC->LineTo(xx,yy);
savep.x=xx+200;
savep.y=yy;
}
for(j=i-1;j>=0;j--)
{
xx+=fsave1[j]*10;
yy+=((fsave1[j]*m_ggsd1*600)/fsave2[j]);
pDC->Ellipse(xx-(m_gdzj1/2), yy-(m_gdzj1/2), xx+(m_gdzj1/2), yy+(m_gdzj1/2) );
pDC->MoveTo(savep);
pDC->LineTo(savep.x,yy);
pDC->LineTo(xx,yy);
savep.x=xx+200;
savep.y=yy;
}
}
else
{
i=0;j=0;yy=200;xx=250;
while((fsave1[i]!=-1)&&(fsave2[i]!=-1))i++;
for(j=0;j<i;j++)
{
xx-=fsave1[j]*10;
yy+=m_ggsd1*fsave2[j]*10;
pDC->Ellipse(xx-(m_gdzj1/2), yy-(m_gdzj1/2), xx+(m_gdzj1/2), yy+(m_gdzj1/2) );
pDC->MoveTo(savep);
pDC->LineTo(savep.x,yy);
pDC->LineTo(xx,yy);
savep.x=xx+200;
savep.y=yy;
}
for(j=i-1;j>=0;j--)
{
xx+=fsave1[j]*10;
yy+=m_ggsd1*fsave2[j]*10;
pDC->Ellipse(xx-(m_gdzj1/2), yy-(m_gdzj1/2), xx+(m_gdzj1/2), yy+(m_gdzj1/2) );
pDC->MoveTo(savep);
pDC->LineTo(savep.x,yy);
pDC->LineTo(xx,yy);
savep.x=xx+200;
savep.y=yy;
}
}
}
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CGCJTextView printing
BOOL CGCJTextView::OnPreparePrinting(CPrintInfo* pInfo)
{
pInfo->SetMaxPage(page);
BOOL bRet=DoPreparePrinting(pInfo);
return bRet;
// return DoPreparePrinting(pInfo);
}
void CGCJTextView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CGCJTextView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CGCJTextView diagnostics
#ifdef _DEBUG
void CGCJTextView::AssertValid() const
{
CView::AssertValid();
}
void CGCJTextView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CGCJTextDoc* CGCJTextView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGCJTextDoc)));
return (CGCJTextDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CGCJTextView message handlers
void CGCJTextView::OnJcgaodusj()
{
// TODO: Add your command handler code here
CGuncijiJC m_gcjjc;
double m_float=0;
double m_saveold1=0;
if(IDOK==m_gcjjc.DoModal())
{
memset(fsave1,-1,100000);
memset(fsave2,-1,100000);
memset(fsave3,-1,1000000);
memset(fsave4,-1,1000000);
m_bsize=1;
m_imode=2;demo=0;
UpdateData();
m_gdzj1=m_gcjjc.m_gdzj;
m_ggsd1=m_gcjjc.m_ggsd;
m_gxl1=m_gcjjc.m_gxl;
m_gjhd1=m_gcjjc.m_gjhd;
m_tjgd1=m_gcjjc.m_tjgd;
m_kggd1=m_gcjjc.m_kggd;
m_xzjd1=m_gcjjc.m_fjdu;
m_r=((m_gjhd1/2)*(m_gjhd1/2)+m_gxl1*m_gxl1)/(2*m_gxl1);//工件半径
m_fFuweiJL=m_kggd1-(m_tjgd1+m_gjhd1);
m_fFuweiSJ=m_fFuweiJL/m_ggsd1;
//m_str.Format("滚刀碰到开关,到与工件相切的过程中,移动距离为: %4.2f 毫米 所需时间为: %4.2f 秒",m_fFuweiJL,m_fFuweiSJ);
m_saveold=m_gjhd1/2;//滚刀圆心到工件垂直距离
m_saveold1=m_saveold;
m_Waiqier=(m_r-m_gxl1)*(m_r+m_gdzj1/2)/m_r;//滚刀圆心到工件垂直距离的水平交叉点到工件圆心的距离
m_c=(m_r+m_gdzj1/2)/m_r*m_gxl1;//离心量;
m_str.Format("N5 G04 F%4.2f // 鼓型量%4.2f 切点%4.2f 异动量%4.2f 工件厚%4.2f 滚刀直径%4.2f 胎具高度%4.2f 开关高度%4.2f 工件直径%4.2f %4.2f",m_fFuweiSJ,m_gxl1,m_saveold,m_c,m_gjhd1,m_gdzj1,m_tjgd1,m_kggd1,m_r*2);
m_i=int(m_c/m_xzjd1);
for(int i1=0;i1<m_i;i1++)
{
if(i1<(m_i-1))
{
fsave1[i1]=m_saveold-sqrt((m_r+m_gdzj1/2)*(m_r+m_gdzj1/2)-(m_Waiqier+(i1+1)*m_xzjd1)*(m_Waiqier+(i1+1)*m_xzjd1));
m_float+=m_xzjd1;
}
else fsave1[i1]=m_saveold;
fsave2[i1]=fsave1[i1]/m_ggsd1;
fsave2[i1]=float(int(fsave2[i1]*100))/100;
m_saveold-=(fsave2[i1]*m_ggsd1);
}
m_flast=m_c-m_float;
}
Invalidate();
}
void CGCJTextView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
SetScrollSizes(MM_TEXT,GetDocument()->GetDocSize());
}
void CGCJTextView::OnModeSpeed()
{
CDlgfd m_gcjjc;
double m_zongjiaodu=0;
double m_xiaojiaodu=0;
double m_float=0;//保存被丢弃的小数之和。
double m_time=0;
float m_saveold1=0;
float m_Waiqier,m_Waiqier1;
if(IDOK==m_gcjjc.DoModal())
{
memset(fsave1,-1,100000);
memset(fsave2,-1,100000);
memset(fsave3,-1,1000000);
memset(fsave4,-1,1000000);
m_gdzj1=m_gcjjc.m_gdzj;
m_imode=1;demo=0;
int m_fdsl1=m_gcjjc.m_count;
m_gxl1=m_gcjjc.m_gxl;
m_ggsd1=m_gcjjc.m_ggsd;
m_gjhd1=m_gcjjc.m_gjhd;
m_tjgd1=m_gcjjc.m_tjgd;
m_kggd1=m_gcjjc.m_kggd;
m_r=(m_gjhd1/2*m_gjhd1/2+m_gxl1*m_gxl1)/(2*m_gxl1);//工件半径
m_fFuweiJL=m_kggd1-(m_tjgd1+m_gjhd1);
m_fFuweiSJ=m_fFuweiJL/m_ggsd1;
m_saveold=m_gjhd1/2;//滚刀圆心到工件垂直距离
m_saveold1=m_saveold;
m_str.Format("N5 G04 F%4.2f // 鼓型量%4.2f 切点%4.2f 工件厚%4.2f 滚刀直径%4.2f 胎具高度%4.2f 开关高度%4.2f 分段数量%d",m_fFuweiSJ,m_gxl1,m_saveold,m_gjhd1,m_gdzj1,m_tjgd1,m_kggd1,m_fdsl1);
m_Waiqier=(m_r-m_gxl1)*(m_r+m_gdzj1/2)/m_r;//滚刀圆心到工件垂直距离的水平交叉点到工件圆心的距离
m_Waiqier1=m_Waiqier;
m_zongjiaodu=atan2(m_saveold,m_Waiqier);//总弧度的一半。
m_i=m_fdsl1/2;//分段的一般取整;
m_xiaojiaodu=m_zongjiaodu/m_i;
for(int i=0;i<m_i;i++)
{
m_time=(sin(m_zongjiaodu-i*m_xiaojiaodu)*(m_r+m_gdzj1/2)-sin(m_zongjiaodu-(i+1)*m_xiaojiaodu)*(m_r+m_gdzj1/2))/m_ggsd1;
fsave1[i]=(cos(m_zongjiaodu-(i+1)*m_xiaojiaodu)*(m_r+m_gdzj1/2)-cos(m_zongjiaodu-i*m_xiaojiaodu)*(m_r+m_gdzj1/2));
fsave2[i]=(fsave1[i]/m_time)*60;
}
}
Invalidate();
}
void CGCJTextView::OnDemo()
{
demo=!demo;
Invalidate();
}
void CGCJTextView::OnLengFen()
{
CLenth m_gcjjc;
double m_zongjiaodu=0;
double m_xiaojiaodu=0;
double m_float=0;//保存被丢弃的小数之和。
double m_time=0;
float m_saveold1=0;
float m_Waiqier,m_Waiqier1;
if(IDOK==m_gcjjc.DoModal())
{
memset(fsave1,-1,100000);
memset(fsave2,-1,100000);
memset(fsave3,-1,1000000);
memset(fsave4,-1,1000000);
m_gdzj1=m_gcjjc.m_gdzj;
m_imode=3;demo=0;
int m_fdsl1=m_gcjjc.m_count;
m_gxl1=m_gcjjc.m_gxl;
m_ggsd1=m_gcjjc.m_ggsd;
m_gjhd1=m_gcjjc.m_gjhd;
m_tjgd1=m_gcjjc.m_tjgd;
m_kggd1=m_gcjjc.m_kggd;
m_r=(m_gjhd1/2*m_gjhd1/2+m_gxl1*m_gxl1)/(2*m_gxl1);//工件半径
m_fFuweiJL=m_kggd1-(m_tjgd1+m_gjhd1);
m_fFuweiSJ=m_fFuweiJL/m_ggsd1;
m_saveold=m_gjhd1/2;//滚刀圆心到工件垂直距离
m_saveold1=m_saveold;
// m_str.Format("N5 G04 F%4.2f // 鼓型量%4.2f 切点%4.2f 异动量%4.2f 工件厚%4.2f 滚刀直径%4.2f 胎具高度%4.2f 开关高度%4.2f 分段数量%d",m_fFuweiSJ,m_gxl1,m_saveold,m_gjhd1,m_gdzj1,m_tjgd1,m_kggd1,m_fdsl1);
m_Waiqier=(m_r-m_gxl1)*(m_r+m_gdzj1/2)/m_r;//滚刀圆心到工件垂直距离的水平交叉点到工件圆心的距离
m_Waiqier1=m_Waiqier;
m_str.Format("N5 G04 F%4.2f // 鼓型量%4.2f 切点%4.2f 异动量%4.2f 工件厚%4.2f 滚刀直径%4.2f 胎具高度%4.2f 开关高度%4.2f 分段数量%d",m_fFuweiSJ,m_gxl1,m_saveold,(m_r+m_gdzj1/2)-m_Waiqier1,m_gjhd1,m_gdzj1,m_tjgd1,m_kggd1,m_fdsl1);
m_zongjiaodu=atan2(m_saveold,m_Waiqier);//总弧度的一半。
m_i=m_fdsl1/2;//分段的一般取整;
// m_xiaojiaodu=m_zongjiaodu/m_i;
for(int i=0;i<=m_i;i++)
{
//m_time=(sin(m_zongjiaodu-i*m_xiaojiaodu)*(m_r+m_gdzj1/2)-sin(m_zongjiaodu-(i+1)*m_xiaojiaodu)*(m_r+m_gdzj1/2))/m_ggsd1;
m_time=double((m_saveold)/m_ggsd1)/m_i;
//fsave1[i]=(cos(m_zongjiaodu-(i+1)*m_xiaojiaodu)*(m_r+m_gdzj1/2)-cos(m_zongjiaodu-i*m_xiaojiaodu)*(m_r+m_gdzj1/2));
fsave1[i]=sqrt((m_r+m_gdzj1/2)*(m_r+m_gdzj1/2)-(m_saveold-m_saveold*(i+1)/m_i)*(m_saveold-m_saveold*(i+1)/m_i))-m_Waiqier1;
m_Waiqier1+=fsave1[i];
fsave2[i]=m_time;
}
}
Invalidate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -