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

📄 myeditview.cpp

📁 地理信息系统(GIS)相关.实现按照方向加产状的功能.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
}
	 }
	// TODO: Add your command handler code here
	
	
}

void CMyEditView::HJ1(D_DOT k)
{
xyz[0].x=k.x;
xyz[0].y=k.y;
xyz[1].x=k.x;
xyz[1].y=k.y+15;
LIN_INFO inf;
	memset(&inf,0,sizeof(LIN_INFO));
inf.ltp=1;	//线型号
inf.lclr=6;	//线颜色
inf.lw=2;	//线宽
inf.xscale=1;		//X系数
inf.yscale=1;
ai=GetEditArea(LIN);
_AppendLin(ai,xyz,2,&inf);	



	PNT_INFO   inf1;
	D_DOT      xy;
	char       dat[64];      	
xy.x=k.x-3;
xy.y=k.y+17;
/*CString str;
str.Format(_T("%d%d"),"导线号",k1); */
char string[25];

itoa(k2, string, 10);

char string2[25];
char string3[25]="层号:";
//这一大段是处理字符串
strcpy(string2,string3);


strcat(string2,string);
lstrcpy(dat,string2);
memset(&inf1,0,sizeof(PNT_INFO));
inf1.type=PNT_NOTE;
inf1.info.ch.height=2;
inf1.info.ch.width=2;
inf1.iclr=6;
inf1.info.text.ifnt=1;
inf1.info.text.chnt=1;
short ai1;
ai1=GetEditArea(PNT);
_AppendPnt(ai1,&xy,dat,lstrlen(dat),&inf1);

_RestoreWindow();
}

float CMyEditView::fcjianju()
{
		Chfcjianju dlg1;
		float jianju2;
	if( dlg1.DoModal() == IDOK )

		 jianju2=dlg1.m_hfcjianju;

	return jianju2;
}

void CMyEditView::OnCaijian() 
{
short ai3;
ai3=GetEditArea(LIN);
AREA_HINST  inst=_GetAreaInstance(ai3);


short tst1;tst1=_OpenLinArea(inst);
short tst2;tst2=_OpenLinArea(inst);
short tst3;tst3=_OpenLinArea(inst);
	_LoadFile(tst1);
	_LoadFile(tst2);
//	_ClipLin(tst1,tst2,tst3,OVLY_OUTCLIP);

double radiu=1;short opfun=4;
_LinClip(tst1,tst2,ai3,radiu,opfun);


  _RestoreWindow();
}

void CMyEditView::OnBianli() 
{
	/*short ai;
ai=GetEditArea(LIN);
long i,i1,linN;
long len;
LIN_INFO linf;
D_DOT *lxy;
   _GetLinNum(ai,&i,&linN); 
_GetLin(ai,i1,&lxy,&len,&linf);
linN=2;
SetTimer(500,50,NULL);
_AppendFlashLin(ai,&linN,1);
 */


short ai;
ai=GetEditArea(LIN);
AREA_HINST  inst=_GetAreaInstance(ai);
double jiaodu,jiaodu1,jiaodu2,changdu,buchang,xj;
//jiaodu为实际作线时用的弧度制量,jiaodu1为初始角度,jiaodu2为终止角度,changdu
//为间隔,即花纹密度,buchang为实际作线的角度增量,xj为线顶端在x方向上的步长增量


D_DOT  *lxy;
long   i,i2,linN,len;
LIN_INFO linf;
													/*memset(&linf,0,sizeof(LIN_INFO));
														linf.ltp=1;	//线型号
														linf.lclr=2;	//线颜色
														linf.lw=2;
														linf.xscale=1;		//X系数
	                       								linf.yscale=1;	//线宽*/

 _GetLinNum(ai,&i,&linN); 									
for (i1=1;i1<=i;i1++)
{
double houdu=10;
short tst1;tst1=_OpenLinArea(inst);
short tst2;tst2=_OpenLinArea(inst);
short tst3;tst3=_OpenLinArea(inst);
					i2=i1+1;
					Ctest tst;
SetTimer(500,50,NULL);
_AppendFlashLin(ai,&i1,1);
											if( tst.DoModal() == IDOK)	//调用对话框,等待输入各项参数
											{jiaodu1=tst.m_jiaodu;
											jiaodu2=tst.m_jiaodu2;
											changdu=tst.m_changdu;
											tst.m_cenghao=i1;
											houdu=tst.m_houdu;
											}
											else 
												break;
   _RestoreWindow();
   if (jiaodu1>=90)
   {jiaodu=abs(jiaodu1-180)*3.14/180;}
   else 
   {jiaodu=jiaodu1*3.14/180;}
				_GetLin(ai,i1,&lxy,&len,&linf);
				long      len2=2*len;
					D_DOT  *lxy1=new D_DOT[len2+1];
					for(int hx=0;hx<len;hx++)
					{

						lxy1[hx].x=lxy[hx].x;
						lxy1[hx].y=lxy[hx].y;
					}
					
																		//{lxy1[hx].x=lxy[(len2)+1-hx].x;
							int  hxx=len;										//	lxy1[hx].y=lxy[(len2)+1-hx].y-20;}
					for(;hxx<len2;hxx++)
					{int dl=len2-hxx-1;
						lxy1[hxx].x=lxy[dl].x;
						lxy1[hxx].y=lxy[dl].y-houdu;
					}

				lxy1[len2]=lxy[0];



					LIN_INFO inf;
				memset(&inf,0,sizeof(LIN_INFO));
				inf.ltp=1;	//线型号
				inf.lclr=2;	//线颜色
				inf.lw=2;
				inf.xscale=1;		//X系数
				inf.yscale=1;	//线宽

	_AppendLin(tst1,lxy1,len2+1,&inf);


				D_DOT xy[2];
			//	xy[0].y=max1(lxy,len);
                //xy[1].y=min1(lxy,len);
				 xy[1].y=0;
//xj=changdu/sin(jiaodu);//xj为线顶端在水平方向上的增量,changdu为线间隔,即花纹密度
//buchang=3.14*xj*(jiaodu2-jiaodu1)/(180*(lxy[len-1].x-lxy[0].x));//buchang为角度步长
int duanshu=_CalculateLength(lxy,len)/changdu;
buchang=3.14*(jiaodu2-jiaodu1)/(duanshu*180);
//double r1=(xy[0].y-xy[1].y)/tan(jiaodu);//r1为线倾斜后两头X的差值
//for(int i=1;xy[0].x<lxy[len-1].x;i++)
//{
				//double r=(xy[0].y-xy[1].y)/tan(jiaodu+buchang*i);//r为线倾斜后两头X的差值
//xy[0].x=lxy[0].x+(i*xj);
//xy[0].y=max1(lxy,len);

	memset(&inf,0,sizeof(LIN_INFO));
inf.ltp=1;	//线型号
inf.lclr=1;	//线颜色
inf.lw=1;
inf.xscale=1;		//X系数
inf.yscale=1;

										//以下为主循环
										int i=0;
										double M=0.000000;
										D_DOT j=lxy[0];
										double L=0;
										int k1=0;
										double next=0.0000;
								
									

															   for (;i<len-1;i++)
											 {
										int al=1;
										if (lxy[i].y<lxy[i+1].y) al=1;
										else al=(-1);
										double o1=1;
										o1=al*atan(fabs(lxy[i].y-lxy[i+1].y)/fabs(lxy[i].x-lxy[i+1].x));

										next=_SegmentLength(&j,&lxy[i+1]);
										M=M+next;



										if (M>=changdu)
										{
										while (M>=changdu)
												{
											L=changdu+next-M;
											j=MOVEJ(j,L,o1);


											xy[0].x=j.x;
											xy[0].y=j.y;
											xy[1].x=xy[0].x-j.y/tan((jiaodu1*3.14/180)+buchang*k1);
_AppendLin(tst2,xy,2,&inf);

											k1++;
											next=_SegmentLength(&j,&lxy[i+1]);
												M=next;
											if (next<changdu&&(i+2)<len)
											{i--;M=0;}

												}
										}
										else 
										{
										j=lxy[i+1];
										}
											 }




	//这一段是补三角区域空白,原本计划废除该功能
if (jiaodu1>90)
{for (int u=0;u<10;u++)
{xy[0].x=lxy[0].x;
xy[0].y=lxy[0].y-u*changdu;
xy[1].x=xy[0].x+lxy[0].y*tan(180-jiaodu1);//?
xy[1].y=-u*changdu;
_AppendLin(tst2,xy,2,&inf);
}
}
if (jiaodu2<90)
{for (int u=0;u<10;u++)
{xy[0].x=lxy[len-1].x;
xy[0].y=lxy[len-1].y-u*changdu;
xy[1].x=xy[0].x-lxy[len-1].y/tan(jiaodu2);//?
xy[1].y=-u*changdu;
_AppendLin(tst2,xy,2,&inf);
}
}
//xy[1].x=xy[0].x-(xy[0].y-xy[1].y)/abs(tan(jiaodu+buchang*i));




											 //_AppendLin(tst2,xy,2,&inf);
											 //_AppendLin(tst2,xy,2,&inf);

double radiu=1;short opfun=4;
_LinClip(tst1,tst2,tst3,radiu,opfun);
_CopyAllLin(tst3,ai);
//_ClipLin(tst1,tst2,ai,4);
//_AppendArea(tst3);
  _StopFlash(-1);
  _RestoreWindow();
				_SetChangeFlag(tst1,0);
				_CloseArea(tst1);
				_SetChangeFlag(tst2,0);
				_CloseArea(tst2);
				_SetChangeFlag(tst3,0);
				_CloseArea(tst3);
				delete lxy1;
				
}

   _RestoreWindow();//复位
_SetOriginalDispFlag(1);//还原显示
}



double CMyEditView::max1(D_DOT *W,long len)
{
	double max=0;
	for(int i=0;i<len;i++)
	{
		if(max<W[i].y)
			max=W[i].y;
	}
	return max;
}

double CMyEditView::min1(D_DOT *W,long len)
{
	double min=0;
	for(int i=0;i<len;i++)
	{
		if (W[i].y=0)
			continue;
		if(min>W[i].y)
			min=W[i].y;
	}
	return min;
}



void CMyEditView::OnAt() 
{
		// 产状标注倾角
short ai;
ai=GetEditArea(PNT);
AREA_HINST  inst=_GetAreaInstance(ai);

	long       i,pntN;
	short      len;
	PNT_INFO   inf;
	D_DOT      xy;
	char       *dat;      	
_GetPntNum(ai,&i,&pntN);	//取点数



for(i=1;i<pntN;i++)
{
if(_GetPnt(ai,i,&xy,&dat,&len,&inf)<=0)
	   	continue;
    
							//取属性值
								char *ptAtt=NULL;
								CATT_STRU	*ptStru=NULL;
							char *att;
							CATT_STRU *stru=NULL;
								char    fldBuf[128];
								char    fldBuf1[128];
							   _GetAtt(ai,PNT,i,&ptStru,&ptAtt);		//取第一条记录
							   _GetFieldOnNumb(ptAtt,ptStru,4,fldBuf,128,NULL);    //根据字段序号取值
 _GetFieldOnNumb(ptAtt,ptStru,5,fldBuf1,128,NULL); 
					
			
				//加点
							   int ww;
	PNT_INFO   inf1;
	D_DOT      xy1;
	char       dat1[64];   
   	ww=strtod(&fldBuf[0],0);
xy1.x=xy.x+2*sin(ww*3.14/180);
xy1.y=xy.y+2*cos(ww*3.14/180);

memset(&inf1,0,sizeof(PNT_INFO));
inf1.type=PNT_NOTE;
inf1.info.ch.height=1;
inf1.info.ch.width=1;
inf1.iclr=6;

_AppendPnt(ai,&xy1,&fldBuf1[0],lstrlen(&fldBuf1[0]),&inf1);
}
}

⌨️ 快捷键说明

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