⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcjtextview.cpp

📁 一个滚齿机 程序生成软件。里面无密码。 本程序是本人在改一般滚齿机为数控机而写的一个程序生成软件。
💻 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 + -