📄 myeditview.cpp
字号:
}
}
// 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 + -