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

📄 dxf_curvehandle.cpp

📁 演示vc与专业控制器的连接
💻 CPP
字号:
#include "StdAfx.h"
#include "math.h"

    float x,y,r,angle1,angle2,angle;
	float factor;
	unsigned int sign;
	double pi=3.1415926/180;
	double *spX;
	double *spY;
	int sptNum;
	CString spstrFlag="start";
	double spdbFlag=0;
	int spintFlag=0;
	int spintFlag_1;

int VG_Init(unsigned int* Data,int spCtrl=0,double *splineX=NULL,double *splineY=NULL)
{
	if(Data[0]==0x00060002)
	{
		sign=Data[1];
	    x=*((float *)(&Data[2]));
        y=*((float *)(&Data[3]));
	    angle1=*((float *)(&Data[4]));
	    angle2=*((float *)(&Data[5]));
	    r=*((float *)(&Data[6]));
		angle=angle1;
		return 0;
	}
	if(Data[0]==0x00090001)
	{
		sign=Data[1];
		sptNum=spCtrl;
		spintFlag_1=spCtrl-1;
		spX=new double [sptNum];
		spY=new double [sptNum];
		for(int i=0;i<=sptNum-1;i++)
		{
			spX[i]=splineX[i];
			spY[i]=splineY[i];
		}
		return 0;
	}

	else return 1;	
}

int VG_SetPrecision(int SectionNum)
{	
	factor=(float)(fabs(angle1-angle2)/SectionNum);
	return 0;
}

int VG_CurveHandle(float * Datas)
{
	float x0,y0;
	if(sign==0x00000003)//逆
	{
		if(angle1<angle2)
		{
			if(angle<=angle2)
			{
				x0=(float)(x+r*cos(angle*pi));
			    y0=(float)(y+r*sin(angle*pi));
			    Datas[0]=x0;
			    Datas[1]=y0;
			    angle+=factor;
				if(angle<angle2)
				return 1;
				else return 0;				
			}
			else return 0;
		}
		if(angle1>angle2)
		{
			if(-(360-angle)<=angle2)
			{
				x0=(float)(x+r*cos(-(360-angle)*pi));
			    y0=(float)(y+r*sin(-(360-angle)*pi));
			    Datas[0]=x0;
			    Datas[1]=y0;
				angle+=factor;
				if(-(360-angle)<angle2)
				return 1;
				else return 0;
			}
			else return 0;
		}
		else return -1;
	}
	if(sign==0x00000001)//顺
	{
		if(angle1<angle2)
		{
			if(angle>=-(360-angle2))
			{
				x0=(float)(x+r*cos(angle*pi));
			    y0=(float)(y+r*sin(angle*pi));
			    Datas[0]=x0;
			    Datas[1]=y0;
			    angle-=factor;
				if(angle>-(360-angle2))
				return 1;
				else return 0;
			}
			else return 0;
		}
		if(angle1>angle2)
		{
			if(angle>=angle2)
			{
				x0=(float)(x+r*cos(angle*pi));
			    y0=(float)(y+r*sin(angle*pi));
			    Datas[0]=x0;
			    Datas[1]=y0;
			    angle-=factor;
				if(angle>angle2)
				return 1;
				else return 0;
			}
			else return 0;
		}
		else return -1;
	}
	
	else return -1;
}

double GetSPline(double K,double point1,double point2,double point3,double point4)
{
	double items;
    double x0,x1,x2,x3;
	x0=(-K*K*K+3*K*K-3*K+1)*point1/6;
	x1=(3*K*K*K-6*K*K+4)*point2/6;
	x2=(-3*K*K*K+3*K*K+3*K+1)*point3/6;
	x3=K*K*K*point4/6;
	items=x0+x1+x2+x3;

	return items;
}

int VG_SpLineHandle(float * Datas)
{
	if(sign==0x00000000)
	{
		if(spstrFlag=="start")
		{
			Datas[0]=(float)spX[0];
			Datas[1]=(float)spY[0];
			spstrFlag="doing";
			return 1;
		}
		if(spstrFlag=="doing")
		{
            Datas[0]=(float)GetSPline(spdbFlag,spX[0],spX[0],spX[0],spX[1]);
            Datas[1]=(float)GetSPline(spdbFlag,spY[0],spY[0],spY[0],spY[1]);
            spdbFlag+=0.001;
			if(spdbFlag>1)
			{
				spstrFlag="doing_2";
				spdbFlag=0;
			}
			return 1;
		}
		if(spstrFlag=="doing_2")
		{
			if(sptNum>2)
			{
				Datas[0]=(float)GetSPline(spdbFlag,spX[0],spX[0],spX[1],spX[2]);
				Datas[1]=(float)GetSPline(spdbFlag,spY[0],spY[0],spY[1],spY[2]);
				spdbFlag+=0.001;
				if(spdbFlag>1)
				{
				    spstrFlag="doing_3";
				    spdbFlag=0;
				}
				return 1;
			}
			else
			{
				spstrFlag="end_1";
				spdbFlag=0;
				return 1;
			}			
		}
		if(spstrFlag=="doing_3")
		{
			if(sptNum>3)
			{
				Datas[0]=(float)GetSPline(spdbFlag,spX[spintFlag],spX[spintFlag+1],spX[spintFlag+2],spX[spintFlag+3]);
				Datas[1]=(float)GetSPline(spdbFlag,spY[spintFlag],spY[spintFlag+1],spY[spintFlag+2],spY[spintFlag+3]);
				spdbFlag+=0.001;
				if(spdbFlag>1)
				{
					spintFlag++;
					spdbFlag=0;
				}
				if(spintFlag+3>sptNum-1)
				{
					spstrFlag="end";
					spdbFlag=0;
					spintFlag=0;
				}
				return 1;
			}
		}
		if(spstrFlag=="end")
		{
			if(sptNum>2)
			{
				Datas[0]=(float)GetSPline(spdbFlag,spX[sptNum-3],spX[sptNum-2],spX[sptNum-1],spX[sptNum-1]);
				Datas[1]=(float)GetSPline(spdbFlag,spY[sptNum-3],spY[sptNum-2],spY[sptNum-1],spY[sptNum-1]);
				spdbFlag+=0.001;
				if(spdbFlag>1)
				{
					spstrFlag="end_1";
				    spdbFlag=0;
				}
				return 1;
			}
			else
			{
				spstrFlag="end_1";
				spdbFlag=0;
				return 1;
			}
		}
		if(spstrFlag=="end_1")
		{
			Datas[0]=(float)GetSPline(spdbFlag,spX[sptNum-2],spX[sptNum-1],spX[sptNum-1],spX[sptNum-1]);
            Datas[1]=(float)GetSPline(spdbFlag,spY[sptNum-2],spY[sptNum-1],spY[sptNum-1],spY[sptNum-1]);
            spdbFlag+=0.001;
			if(spdbFlag>1)
			{
				spstrFlag="stop";
				spdbFlag=0;
			}
			return 1;
		}
		if(spstrFlag=="stop")
		{
			Datas[0]=(float)spX[sptNum-1];
			Datas[1]=(float)spY[sptNum-1];
			spstrFlag="start";
			return 0;
		}
		else return 0;
	}
	/////////////////////////////////////////////////////////////////////////////
    if(sign==0x00000001)
	{
		if(spstrFlag=="start")
		{
			Datas[0]=(float)spX[sptNum-1];
			Datas[1]=(float)spY[sptNum-1];
			spstrFlag="doing";
			return 1;
		}
		if(spstrFlag=="doing")
		{
            Datas[0]=(float)GetSPline(spdbFlag,spX[sptNum-1],spX[sptNum-1],spX[sptNum-1],spX[sptNum-2]);
            Datas[1]=(float)GetSPline(spdbFlag,spY[sptNum-1],spY[sptNum-1],spY[sptNum-1],spY[sptNum-2]);
            spdbFlag+=0.001;
			if(spdbFlag>1)
			{
				spstrFlag="doing_2";
				spdbFlag=0;
			}
			return 1;
		}
		if(spstrFlag=="doing_2")
		{
			if(sptNum>2)
			{
				Datas[0]=(float)GetSPline(spdbFlag,spX[sptNum-1],spX[sptNum-1],spX[sptNum-2],spX[sptNum-3]);
				Datas[1]=(float)GetSPline(spdbFlag,spY[sptNum-1],spY[sptNum-1],spY[sptNum-2],spY[sptNum-3]);
				spdbFlag+=0.001;
				if(spdbFlag>1)
				{
				    spstrFlag="doing_3";
				    spdbFlag=0;
				}
				return 1;
			}
			else
			{
				spstrFlag="end_1";
				spdbFlag=0;
				return 1;
			}			
		}
		if(spstrFlag=="doing_3")
		{
			if(sptNum>3)
			{
				Datas[0]=(float)GetSPline(spdbFlag,spX[spintFlag_1],spX[spintFlag_1-1],spX[spintFlag_1-2],spX[spintFlag_1-3]);
				Datas[1]=(float)GetSPline(spdbFlag,spY[spintFlag_1],spY[spintFlag_1-1],spY[spintFlag_1-2],spY[spintFlag_1-3]);
				spdbFlag+=0.001;
				if(spdbFlag>1)
				{
					spintFlag_1--;
					spdbFlag=0;
				}
				if(spintFlag_1-3<0)
				{
					spstrFlag="end";
					spdbFlag=0;
					spintFlag_1=sptNum-1;
				}
				return 1;
			}
		}
		if(spstrFlag=="end")
		{
			if(sptNum>2)
			{
				Datas[0]=(float)GetSPline(spdbFlag,spX[2],spX[1],spX[0],spX[0]);
				Datas[1]=(float)GetSPline(spdbFlag,spY[2],spY[1],spY[0],spY[0]);
				spdbFlag+=0.001;
				if(spdbFlag>1)
				{
					spstrFlag="end_1";
				    spdbFlag=0;
				}
				return 1;
			}
			else
			{
				spstrFlag="end_1";
				spdbFlag=0;
				return 1;
			}
		}
		if(spstrFlag=="end_1")
		{
			Datas[0]=(float)GetSPline(spdbFlag,spX[1],spX[0],spX[0],spX[0]);
            Datas[1]=(float)GetSPline(spdbFlag,spY[1],spY[0],spY[0],spY[0]);
            spdbFlag+=0.001;
			if(spdbFlag>1)
			{
				spstrFlag="stop";
				spdbFlag=0;
			}
			return 1;
		}
		if(spstrFlag=="stop")
		{
			Datas[0]=(float)spX[0];
			Datas[1]=(float)spY[0];
			spstrFlag="start";
			return 0;
		}

		else return 0;
	}
	/////////////////////////////////////////////////////////////////////////////
 	else return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -