📄 gmcadview.cpp
字号:
alfa2=acos((o1b+m_RR2*m_RR2-(m_RR+m_RR2)*(m_RR+m_RR2))/(2*sqrt(o1b)*m_RR2));
alfa=alfa1-alfa2;
x02=EndX+m_RR2*cos(alfa);
y02=EndY+m_RR2*sin(alfa);
if(x01==x02)
beita=pi/2;
else
{
beita=atan((y02-y01)/(x02 - x01));
if(beita<0)
beita=beita+pi;
}
xc=x02+m_RR2*cos(beita);
yc=y02+m_RR2*sin(beita);
}
else // 已知h1: symb1='-', symb2='-'
{
if(EndX==x01)
alfa1=pi/2;
else
{
alfa1=atan((EndY-y01)/(EndX-x01));
if(alfa1<0)
alfa1=pi+alfa1;
}
alfa2=acos((o1b+m_RR2*m_RR2-(m_RR-m_RR2)*(m_RR-m_RR2))/(2*sqrt(o1b)*m_RR2));
if(m_RR>m_RR2)
alfa=alfa1-alfa2;
else
alfa=alfa1+alfa2;
x02=EndX+m_RR2*cos(alfa);
y02=EndY+m_RR2*sin(alfa);
if(x01==x02)
beita=pi/2;
else
beita=atan((y02-y01)/(x02-x01));
xc=x02-m_RR2*cos(beita);
yc=y02-m_RR2*sin(beita);
}
}
}
else // 已知h2,未知h1
{
y02=EndY-m_HH2;
wc=sqrt(m_RR2*m_RR2-m_HH2*m_HH2);
if(symb2=='+')
x02=EndX+wc;
else
x02=EndX-wc;
o2a=(BeginY-y02)*(BeginY-y02)+(BeginX-x02)*(BeginX-x02);
o2aa=sqrt(o2a);
if(symb2=='+')
{
if(symb1=='+') // 已知h2: symb2='+', symb1='+'
{
if(BeginX==x02)
alfa1=pi/2;
else
{
alfa1=atan((BeginY-y02)/(BeginX-x02));
if(alfa1<0)
alfa1=0-alfa1;
else
alfa1=pi-alfa1;
}
alfa2=acos((o2a+m_RR*m_RR-(m_RR-m_RR2)*(m_RR-m_RR2))/(2*sqrt(o2a)*m_RR));
if(m_RR>m_RR2)
alfa=alfa1-alfa2;
else
alfa=alfa1+alfa2;
x01=BeginX+m_RR*cos(alfa);
y01=BeginY-m_RR*sin(alfa);
beita=atan((y02-y01)/(x02-x01));
xc=x02-m_RR2*cos(beita);
yc=y02-m_RR2*sin(beita);
}
else // 已知h2: symb2='+', symb1='-'
{
if(BeginX==x02)
alfa1=pi/2;
else
{
alfa1=atan((BeginY-y02)/(BeginX-x02));
if(alfa1<0)
alfa1=pi+alfa1;
}
alfa2=acos((o2a-m_RR*m_RR+(m_RR+m_RR2)*(m_RR+m_RR2))/(2*sqrt(o2a)*(m_RR+m_RR2)));
alfa=alfa1+alfa2;
x01=x02+(m_RR+m_RR2)*cos(alfa);
y01=y02+(m_RR+m_RR2)*sin(alfa);
xc=x02+m_RR2*cos(alfa);
yc=y02+m_RR2*sin(alfa);
}
}
else // symb2='-'
{
if(symb1=='+') // 已知h2: symb2='-', symb1='+'
{
if(BeginX==x02)
alfa1=pi/2;
else
{
alfa1=atan((BeginY-y02)/(BeginX-x02));
if(alfa1<0)
alfa1=alfa1+pi;
}
alfa2=acos((o2a-m_RR*m_RR+(m_RR+m_RR2)*(m_RR+m_RR2))/(2*sqrt(o2a)*(m_RR+m_RR2)));
alfa=alfa1-alfa2;
x01=x02+(m_RR+m_RR2)*cos(alfa);
y01=y02+(m_RR+m_RR2)*sin(alfa);
xc=x02+m_RR2*cos(alfa);
yc=y02+m_RR2*sin(alfa);
}
else // 已知h2: symb2='-', symb1='-'
{
if(BeginX==x02)
alfa1=pi/2;
else
{
alfa1=atan((BeginY-y02)/(BeginX-x02));
if(alfa1<0)
alfa1=0-alfa1;
else
alfa1=pi-alfa1;
}
alfa2=acos((o2a+m_RR*m_RR-(m_RR-m_RR2)*(m_RR-m_RR2))/(2*sqrt(o2a)*m_RR));
if(m_RR>m_RR2)
alfa=alfa1+alfa2;
else
alfa=alfa1-alfa2;
x01=BeginX+m_RR*cos(alfa);
y01=BeginY-m_RR*sin(alfa);
beita=atan((y02-y01)/(x02-x01));
xc=x02-m_RR2*cos(beita);
yc=y02-m_RR2*sin(beita);
}
}
}
// 第一弧线部分
SymmetryArc(&dc,Axisx,x01,y01,m_RR,BeginX,BeginY,xc,yc,symb1);
double temph,tempd;
temph=fabs(BeginY-yc);
tempd=fabs(Axisx-xc)*2;
double Vol1=Vol_HuTai(Axisx,temph,m_RR,x01,y01,yc,symb1);
double Area1=Area_HuTai(Axisx,temph,m_RR,x01,y01,yc,symb1);
pRevSurf=new CHuTai(BeginX,BeginY,xc,yc,Axisx,x01,y01,m_RR,
symb1,temph,pDoc->PreDD,Vol1,Area1);
pDoc->AddRevSurf(pRevSurf);
pDoc->PreDD=tempd;
// 第二弧线部分
SymmetryArc(&dc,Axisx,x02,y02,m_RR2,xc,yc,EndX,EndY,symb2);
double Vol2=Vol_HuTai(Axisx,m_HH-temph,m_RR2,x02,y02,EndY,symb2);
double Area2=Area_HuTai(Axisx,m_HH-temph,m_RR2,x02,y02,EndY,symb2);
pRevSurf=new CHuTai(xc,yc,EndX,EndY,Axisx,x02,y02,
m_RR2,symb2,m_HH-temph,pDoc->PreDD,Vol2,Area2);
pDoc->AddRevSurf(pRevSurf);
pDoc->PreDD=m_DD;
Vol=Vol1+Vol2;
Area=Area1+Area2;
break;
}
case XIANXING_PD:
{
pDoc->m_RH=pDoc->m_RH-m_HH;
double x01,y01,x02,y02,hpd,a1,b1,a2,b2,c1,c2;
double r1,alfa,x02d,xc,yc;
x01=Axisx; //x01为第二弧的弧心横坐标
hpd=BeginY-m_HH;
y01=hpd+m_HH-m_RR; //y01为第二弧的弧心横坐标
a1=2*(BeginY-y01-m_RR);
b1=2*(BeginX-x01);
c1=y01*y01-BeginY*BeginY+x01*x01-BeginX*BeginX-m_RR*m_RR+2*m_RR*hpd;
a2=(a1/b1)*(a1/b1);
b2=-2*BeginY+2*(-a1/b1)*(-c1/b1)-2*(-a1/b1)*BeginX+2*hpd;
c2=BeginY*BeginY+((-c1/b1)-BeginX)*((-c1/b1)-BeginX)-hpd*hpd;
if(a2==0.0)
y02=-c2/b2;
else
y02=(-b2-sqrt(b2*b2-4*a2*c2))/(2*a2);
x02=(-a1/b1)*y02-c1/b1;
r1=y02-hpd; //r1为第一弧的半径
alfa=pi+atan((y01-y02)/(x01-x02));
xc=x01+m_RR*cos(alfa);
yc=y01+m_RR*sin(alfa);
double RectLx1,Recty1,RectLx2,Recty2;
double RectRx1,RectRx2,bRx,eRx;
RectLx1=x02-r1;
Recty1=y02+r1;
RectLx2=x02+r1;
Recty2=y02-r1;
dc.Arc(RectLx1,Recty1,RectLx2,Recty2,BeginX,BeginY,xc,yc);
x02d=2*Axisx-x02;
RectRx1=x02d-r1;
RectRx2=x02d+r1;
bRx=2*Axisx-BeginX;
eRx=2*Axisx-xc;
dc.Arc(RectRx1,Recty1,RectRx2,Recty2,eRx,yc,bRx,BeginY);
SymmetryArc(&dc,Axisx,x01,y01,m_RR,Axisx,BeginY,xc,yc,'+');
double h2,h3;
h2=yc-hpd;
h3=m_HH-h2;
double vold11=Vol_HuTai(Axisx,m_HH,r1,x02,y02,hpd,'+');
double vold12=Vol_HuTai(Axisx,h2,r1,x02,y02,hpd,'-');
double aread11=Area_HuTai(Axisx,m_HH,r1,x02,y02,hpd,'+');
double aread12=Area_HuTai(Axisx,h2,r1,x02,y02,hpd,'-');
double vold2=pi*h3*h3*(m_RR-h3/3.0);
double aread2=2*pi*m_RR*h3;
Vol=vold11-vold12-vold2;
Area=aread11+aread12+aread2;
pRevSurf=new CPingDi(Axisx,BeginX,BeginY,xc,yc,
x01,y01,r1,x02,y02,m_RR,m_HH,pDoc->PreDD,Vol,Area);
pDoc->AddRevSurf(pRevSurf);
pDoc->PreDD=0.0;
break;
}
case XIANXING_HLINE:
{
if((pDoc->CurrentDesign==CHUMU_DESIGN) && (HLineNumber==0))
{
pDoc->m_TotalH=m_HH; // m_HH为总高
pDoc->m_RH=m_HH;
FirstY=CenterY+m_HH/2.0;
BeginX=Axisx-m_DD/2.0;
BeginY=FirstY;
EndX=Axisx+m_DD/2.0;
EndY=BeginY;
}
else
{
EndX=Axisx+pDoc->PreDD/2.0;
EndY=BeginY;
}
dc.MoveTo(BeginX,BeginY);
dc.LineTo(EndX,EndY);
Vol=0;
Area=0;
pRevSurf=new CHLine(BeginX,BeginY,EndX,EndY,0,pDoc->PreDD,Vol,Area);
pDoc->AddRevSurf(pRevSurf);
HLineNumber++;
EndX=BeginX;
pDoc->PreDD=m_DD;
break;
}
case XIANXING_RECT:
{
pDoc->m_TotalH=m_HH; // m_HH为总高
pDoc->m_RH=m_HH-m_DD;
FirstY=CenterY+m_HH/2.0;
BeginX=Axisx-m_RR/2.0; // m_RR为口径
BeginY=FirstY;
EndX=Axisx+m_RR/2.0;
EndY=BeginY-m_DD; // m_DD为口高
dc.MoveTo(BeginX,BeginY);
dc.LineTo(EndX,BeginY);
dc.LineTo(EndX,EndY);
dc.LineTo(BeginX,EndY);
dc.LineTo(BeginX,BeginY);
Vol=pi*m_DD*m_RR*m_RR/4;
Area=pi*m_DD*m_RR;
pRevSurf=new CCuboid(BeginX,BeginY,EndX,EndY,m_DD,pDoc->PreDD,Vol,Area);
pDoc->AddRevSurf(pRevSurf);
EndX=Axisx-m_RR2/2.0;
pDoc->PreDD=m_RR2;
break;
}
}//switch
BeginX=EndX;
BeginY=EndY;
pDoc->m_StartX=BeginX;
pDoc->m_StartY=BeginY;
pDoc->m_TotalVolue=pDoc->m_TotalVolue+Vol;
pDoc->m_TotalArea=pDoc->m_TotalArea+Area;
CString str;
str.Format("%12.2f",Vol);
m_VolEdit.SetWindowText(str);
str.Format("%12.2f",Area);
m_AreaEdit.SetWindowText(str);
m_ZHStatic.SetWindowText("剩余总高度:");
m_ZVStatic.SetWindowText("已有总体积:");
m_ZAStatic.SetWindowText("已有总面积:");
str.Format("%12.2f",pDoc->m_RH);
m_RemainZGEdit.SetWindowText(str);
str.Format("%12.2f",pDoc->m_TotalVolue);
m_ZVEdit.SetWindowText(str);
str.Format("%12.2f",pDoc->m_TotalArea);
m_ZAEdit.SetWindowText(str);
ClearAll();
if(!(int)pDoc->m_RH)
{
if((pDoc->CurrentDesign==CHUMU_DESIGN) && (HLineNumber>0))
{
m_TipStatic.SetWindowText("用横线封底,之后按右下角“结束设计”按钮。");
}
else
{
m_TipStatic.SetWindowText("剩余高度已为0,请按右下角“结束设计”按钮。");
}
}
}
else
{
m_TipStatic.SetWindowText("请先选择“设计”菜单下的某一个菜单项");
}
}
void CGMCADView::OnButtonEnd()
{
// TODO: Add your control notification handler code here
CGMCADDoc* pDoc = GetDocument();
if(XGTTesting)
{
IsXGTTest=0;
XGTTesting=0;
m_TipStatic.SetWindowText("请选择“设计”菜单下的某一项来开始设计,或选择“转换”菜单下的某一项来进行转换。");
m_OKButton.SetWindowText("结束设计");
m_XXVStatic.SetWindowText("本线型体积:");
m_XXAStatic.SetWindowText("本线型面积:");
m_XXVUnitStatic.SetWindowText("立方毫米");
m_XXAUnitStatic.SetWindowText("平方毫米");
m_dispStatic.ShowWindow(SW_HIDE);
m_RHUnitStatic.SetWindowText("毫米");
m_ZVUnitStatic.SetWindowText("立方毫米");
m_ZAUnitStatic.SetWindowText("平方毫米");
}
if(pDoc->CurrentDesign==PINGXING_DESIGN || pDoc->CurrentDesign==CHUMU_DESIGN
|| pDoc->CurrentDesign==CHONGTOU_DESIGN)
{
IsDesigning=0;
HLineNumber=0;
pDoc->m_DesignFinish=1;
}
if(pDoc->CurrentDesign==VIEW_VOLUME && pDoc->m_TotalVolue>0.0)
{
int k;
double mkrl,bh,i;
double zbmj=pDoc->m_TotalArea;
double ztj=pDoc->m_TotalVolue;
double kg=m_XXVol;
ztj=ztj/1000.0;
k=1;
i=kg-15+(k-1)*5;
mkrl=ztj-i*1.025/2.5;
bh=(i/2.5)/zbmj*1000;
m_text11.Format("%6.2f",i);
m_text21.Format("%6.2f",mkrl);
m_text31.Format("%6.2f",bh);
k=2;
i=kg-15+(k-1)*5;
mkrl=ztj-i*1.025/2.5;
bh=(i/2.5)/zbmj*1000;
m_text12.Format("%6.2f",i);
m_text22.Format("%6.2f",mkrl);
m_text32.Format("%6.2f",bh);
k=3;
i=kg-15+(k-1)*5;
mkrl=ztj-i*1.025/2.5;
bh=(i/2.5)/zbmj*1000;
m_text13.Format("%6.2f",i);
m_text23.Format("%6.2f",mkrl);
m_text33.Format("%6.2f",bh);
k=4;
i=kg-15+(k-1)*5;
mkrl=ztj-i*1.025/2.5;
bh=(i/2.5)/zbmj*1000;
m_text14.Format("%6.2f",i);
m_text24.Format("%6.2f",mkrl);
m_text34.Format("%6.2f",bh);
k=5;
i=kg-15+(k-1)*5;
mkrl=ztj-i*1.025/2.5;
bh=(i/2.5)/zbmj*1000;
m_text15.Format("%6.2f",i);
m_text25.Format("%6.2f",mkrl);
m_text35.Format("%6.2f",bh);
k=6;
i=kg-15+(k-1)*5;
mkrl=ztj-i*1.025/2.5;
bh=(i/2.5)/zbmj*1000;
m_text16.Format("%6.2f",i);
m_text26.Format("%6.2f",mkrl);
m_text36.Format("%6.2f",bh);
k=7;
i=kg-15+(k-1)*5;
mkrl=ztj-i*1.025/2.5;
bh=(i/2.5)/zbmj*1000;
m_text17.Format("%6.2f",i);
m_text27.Format("%6.2f",mkrl);
m_text37.Format("%6.2f",bh);
UpdateData(FALSE);
}
if(IsXGTTest)
{
CClientDC dc(this);
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(50,-50);
dc.SetViewportExt(50,50);
POINT temp;
temp.x=m_Axisx;
temp.y=m_CenterY;
dc.DPtoLP(&temp);
double cmzh=0.0,ctzh=0.0;
double ccy=2*temp.y;
// double Axisx=temp.x;
int index;
CRevSurf *p1,*p2;
inde
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -