📄 newunit.pas
字号:
My_Array[2]:=Round(PX1+R*(Cos(J+Q)+1));
My_Array[3]:=Round(PY1-R*(Sin(J+Q)+1));
My_Array[4]:=PX1 ;
My_Array[5]:=PY1 ;
My_Array[6]:=Round(PX1+L*Cos(Q)) ;
My_Array[7]:=Round(PY1-L*Sin(Q)) ;
end
else
begin // 忧弧、内凸
My_Array[0]:=Round(PX1-R*(1-Sin(J+Q)));
My_Array[1]:=Round(PY1-R*(1-Cos(J+Q)));
My_Array[2]:=Round(PX1+R*(1+Sin(J+Q)));
My_Array[3]:=Round(PY1+R*(1+Cos(J+Q)));
My_Array[4]:=PX1 ;
My_Array[5]:=PY1 ;
My_Array[6]:=Round(PX1+L*Cos(Q)) ;
My_Array[7]:=Round(PY1-L*Sin(Q)) ;
end ;
end ;
My_Image.Canvas.Arc(My_Array[0],My_Array[1],My_Array[2],My_Array[3],My_Array[4],My_Array[5],My_Array[6],My_Array[7]);
end ;
procedure TNew_Form.Class_SelectChange(Sender: TObject);
Var LineStyle:String ;
begin
WAITUH.Visible := False ;
NEIAOH.Visible := False ;
ZHIXIAN.Visible := False ;
LineStyle := Class_Select.Text ;
if LineStyle='直线' then
begin
//
ZHIXIAN.Visible := True ;
Now_Class:='L';
end
else if LineStyle='外凸弧' then
begin
//
WAITUH.Visible := True ;
Now_Class:='W';
end
else
begin //内凹弧
//
NEIAOH.Visible := True ;
Now_Class:='N';
end ;
end;
procedure TNew_Form.FormShow(Sender: TObject);
begin
Now_Num :=1 ;
My_Image.Canvas.pen.width := 2 ;
BF_HD:=45 ; //边封厚度
BF_FXKD:=3 ; //边封缝隙宽度
BL_FXKD:=2 ; //玻璃缝隙宽度
ZFHD:=45 ;//中缝厚度
GDDX_05:= 125 ; //型材高度默认-125
end;
procedure TNew_Form.S_REDContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
My_Image.Canvas.Pen.Color := clRed ;
end;
procedure TNew_Form.S_BLKContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
My_Image.Canvas.Pen.Color := clBlack ;
end;
procedure TNew_Form.S_BLUContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
My_Image.Canvas.Pen.Color := clBlue ;
end;
procedure TNew_Form.LineWidthChange(Sender: TObject);
begin
My_Image.Canvas.pen.width := Round((StrToInt(LineWidth.Text)/3)) ;
end;
procedure TNew_Form.FormCreate(Sender: TObject);
begin
//DM.Temp_Query.Close ;
end;
procedure TNew_Form.BitBtn1Click(Sender: TObject);
Var N_ClassType,P_ClassType,OrderNum,ClassType,OrderSQLInsert,BLJ_CJ,N_CJ,P_CJ,L_CJ,R_CJ:String ;
Var N_SD,N_SDD,N_SCJD,N_SJD,N_SNJD,N_T_SNJD,N_NJXZZ_G,N_NJXZZ_B,N_CJD :double ;
Var P_SD,P_SDD,P_SCJD,P_SJD,P_SNJD,P_T_SNJD,P_NJXZZ_G,P_NJXZZ_B,P_CJD :double ;
Var T_Record,Total_JS,DS,GHD:Integer ;
Var SL,SH,SD,SDD,SCJD,SJD,SNJD,SR:Double ;
Var GDZC,BLZK,BLKD,BLJKD,GDKD,BLJ_CJLD,BLJ_CJRD,JD,JDD,T_XZJD,TL_XZJD,TR_XZJD:Double ;
Var Sub_Num,SN,ZFHD:integer ;//中缝厚度
Var NJXZZ_B,NJXZZ_G,YTGD,BLGD :real ;
Var MY_XC_NOW,Class_XC :String ;
begin
{Class_XC :=XC.Text ; // leftStr(XC.Text,2)
YTGD:=StrToFloat(JZ_YTGD.Text );
if XC.Text ='03' then BLGD := YTGD ; //04
if XC.Text ='04' then BLGD := YTGD-110 ; //04
if LeftStr(XC.Text,2) ='05' then BLGD := YTGD-GDDX_05 ; //05 ?两种如何区分?:以大小轨道进行区分,大轨道减145 小轨道减去125。
if XC.Text ='06' then BLGD := YTGD-55 ; //06
if XC.Text ='06' then
begin
BF_HD:=StrToInt(MY_BF_HD.Text) ; //边封厚度
BF_FXKD:=StrToInt(MY_BF_FXKD.Text) ; //伸出轨道长度
BL_FXKD:=StrToInt(MY_BL_FXKD.Text) ; //重叠部分宽度
ZFHD:=StrToInt(MY_ZFHD.Text) ;//中缝厚度
end
else
begin
BF_HD:=StrToInt(MY_BF_HD.Text) ; //边封厚度
BF_FXKD:=StrToInt(MY_BF_FXKD.Text) ; // 边锋缝隙
BL_FXKD:=StrToInt(MY_BL_FXKD.Text) ; //玻璃缝隙
end;
OrderNum := OrderName.Text+'-'+FormatDateTime('YYYYMMDDHHMMSS',now()) ; //订单号
ClassType := '0' ; //线形//线类型
DM.Temp_Query.Close ;
DM.Temp_Query.SQL.Clear ;
DM.Temp_Query.SQL.Add('select * from TempTbl order by SN') ;
DM.Temp_Query.Open ;
Total_JS := DM.Temp_Query.RecordCount ;//总节数=记录数
IF Total_JS > 0 THEN
BEGIN
T_Record := 0 ;
DM.Temp_Query.First ;
while T_Record<Total_JS do
begin
ClassType := DM.Temp_Query.FieldByName('ClassType').AsString ;
SN := DM.Temp_Query.FieldByName('SN').AsInteger ;
SL := DM.Temp_Query.FieldByName('SL').AsFloat ;
SH := DM.Temp_Query.FieldByName('SH').AsFloat ;
SD := DM.Temp_Query.FieldByName('SD').AsFloat ; //相对于前一段的度数
SDD := DM.Temp_Query.FieldByName('SDD').AsFloat ;
DS := DM.Temp_Query.FieldByName('DS').AsInteger ;
SCJD := DM.Temp_Query.FieldByName('SCJD').AsFloat ; //第一段与弦之间的夹角
SJD := DM.Temp_Query.FieldByName('SJD').AsFloat ; //对应圆心的角度a
SNJD := DM.Temp_Query.FieldByName('SNJD').AsFloat ; //两段之间的夹角(内角)弧的两段
GHD := DM.Temp_Query.FieldByName('GHD').AsInteger ;
SR := DM.Temp_Query.FieldByName('SR').AsFloat ;
MY_XC_NOW := LeftStr(DM.Temp_Query.FieldByName('XC').AsString,2) ;
if T_Record < Total_JS-1 then //非最后一段
begin
DM.Temp_Query.Next;
N_ClassType := DM.Temp_Query.FieldByName('ClassType').AsString ;
N_SD := DM.Temp_Query.FieldByName('SD').AsFloat ;
N_SDD := DM.Temp_Query.FieldByName('SDD').AsFloat ;
N_SCJD := DM.Temp_Query.FieldByName('SCJD').AsFloat ;
N_SJD := DM.Temp_Query.FieldByName('SJD').AsFloat ;
N_SNJD := DM.Temp_Query.FieldByName('SNJD').AsFloat ;
DM.Temp_Query.Prior ;
if ClassType = 'W' then //当前是W
begin
if N_ClassType ='W' then N_T_SNJD := 180+SCJD+N_SCJD+N_SD;//下一段是
if N_ClassType ='N' then N_T_SNJD := 180+SCJD+N_SCJD+N_SD; //下一段是N
if N_ClassType ='L' then N_T_SNJD := 180+SCJD+N_SD; //下一段是L
end ;
if ClassType = 'N' then //当前是N
begin //当前是N
if N_ClassType ='W' then N_T_SNJD := 180+SCJD+N_SCJD+N_SD;//下一段是
if N_ClassType ='N' then N_T_SNJD := 180+SCJD+N_SCJD+N_SD; //下一段是N
if N_ClassType ='L' then N_T_SNJD := 180+SCJD+N_SD; //下一段是L
end ;
if ClassType = 'L' then //当前是L
begin
if N_ClassType = 'W' then N_T_SNJD := 180+N_SCJD+N_SD;//下一段是
if N_ClassType = 'N' then N_T_SNJD := 180+N_SCJD+N_SD; //下一段是N
if N_ClassType = 'L' then N_T_SNJD := 180+N_SD; //下一段是L
end ;
if N_T_SNJD >180 then
begin
N_CJ := 'W' ; N_CJD := 90-(360-N_T_SNJD)/2;
N_NJXZZ_G := XZZ((360-N_T_SNJD),GHD,'W','G',MY_XC_NOW) ; N_NJXZZ_B := XZZ((360-N_T_SNJD),GHD,'W','B',MY_XC_NOW) ;
end ;
if N_T_SNJD <180 then
begin
N_CJ := 'N' ; N_CJD := 90-N_T_SNJD/2;
N_NJXZZ_G := XZZ((N_T_SNJD),GHD,'N','G',MY_XC_NOW) ; N_NJXZZ_B := XZZ((N_T_SNJD),GHD,'N','B',MY_XC_NOW) ;
end ;
if N_T_SNJD =180 then
begin
N_CJ := 'L' ; N_CJD := 0.00 ;
N_NJXZZ_G := 0.00 ; N_NJXZZ_B := 0.00 ;
end ;
end ;
if T_Record > 0 then //非首段情况
begin
DM.Temp_Query.Prior ;
P_ClassType := DM.Temp_Query.FieldByName('ClassType').AsString ;
P_SD := DM.Temp_Query.FieldByName('SD').AsFloat ;
P_SDD := DM.Temp_Query.FieldByName('SDD').AsFloat ;
P_SCJD := DM.Temp_Query.FieldByName('SCJD').AsFloat ;
P_SJD := DM.Temp_Query.FieldByName('SJD').AsFloat ;
P_SNJD := DM.Temp_Query.FieldByName('SNJD').AsFloat ;
DM.Temp_Query.Next ;
if ClassType = 'W' then //当前是W
begin
if P_ClassType ='W' then P_T_SNJD := 180+SCJD+P_SCJD+SD;//前一段是
if P_ClassType ='N' then P_T_SNJD := 180+SCJD+P_SCJD+SD; //前一段是N
if P_ClassType ='L' then P_T_SNJD := 180+SCJD+SD; //前一段是L
end ;
if ClassType = 'N' then //当前是N
begin //当前是N
if P_ClassType ='W' then P_T_SNJD := 180+SCJD-P_SCJD+SD;//前一段是
if P_ClassType ='N' then P_T_SNJD := 180+SCJD+P_SCJD+SD; //前一段是N
if P_ClassType ='L' then P_T_SNJD := 180+SCJD+SD; //前一段是L
end ;
if ClassType = 'L' then //当前是L
begin
if P_ClassType = 'W' then P_T_SNJD := 180+P_SCJD+SD;//前一段是
if P_ClassType = 'N' then P_T_SNJD := 180+P_SCJD+SD; //前一段是N
if P_ClassType = 'L' then P_T_SNJD := 180+SD; //前一段是L
end ;
if P_T_SNJD >180 then
begin
P_CJ := 'W' ; P_CJD := 90-(360-P_T_SNJD)/2;
P_NJXZZ_G := XZZ((360-P_T_SNJD),GHD,'W','G',MY_XC_NOW) ; P_NJXZZ_B := XZZ((360-P_T_SNJD),GHD,'W','B',MY_XC_NOW) ;
end ;
if P_T_SNJD <180 then
begin
P_CJ := 'N' ; P_CJD := 90-(P_T_SNJD)/2;
P_NJXZZ_G := XZZ((P_T_SNJD),GHD,'N','G',MY_XC_NOW) ; P_NJXZZ_B := XZZ((P_T_SNJD),GHD,'N','B',MY_XC_NOW) ;
end ;
if P_T_SNJD =180 then
begin
P_CJ := 'L' ; P_CJD := 0.00 ;
P_NJXZZ_G := 0.00 ; P_NJXZZ_B := 0.00 ;
end ;
end ;
Sub_Num := 1 ;//小段编号
IF ClassType='W' THEN // 外凸 ???????????WWWWWWWW??????????????????????//
BEGIN
NJXZZ_G := XZZ(SNJD,GHD,'N','G',MY_XC_NOW) ; //轨道内角修正值
NJXZZ_B := XZZ(SNJD,GHD,'N','B',MY_XC_NOW) ; //玻璃内角修正值
BLJ_CJ := 'N' ; //内切角
if Total_JS=1 then //只有一段
begin
GDZC := DS*2*SR*Sin((SJD/DS)*Pi/180)-2*BF_HD ;//轨道总长=玻璃片数×2×Rsin∠2 轨道总长=轨道区总长-2×边封厚度
BLZK := GDZC-DS*BL_FXKD-2*BF_FXKD+(DS-1)*2*NJXZZ_G ;//b=玻璃总宽
BLKD := BLZK/DS ;//玻璃宽度
//wr db
while Sub_Num<DS+1 do
begin
if Sub_Num=1 then //第一子端
begin
BLJKD := BLKD+BL_FXKD-NJXZZ_B ; //单片玻璃宽度+玻璃缝隙宽度+内角玻璃夹修正值
GDKD := BLKD+BF_FXKD+BL_FXKD-NJXZZ_G ;//单片玻璃宽度+边封缝隙宽度+玻璃缝隙宽度+内角轨道修
BLJ_CJLD := 0.00 ;
BLJ_CJRD := SJD/DS ;
L_CJ := 'L';
R_CJ := 'N';
JD := SCJD ;
JDD := SDD+SCJD ;
end ;
if Sub_num=DS then //最后一段
begin
BLJKD := BLKD+BL_FXKD-NJXZZ_B ;
GDKD := BLKD+BF_FXKD+BL_FXKD-NJXZZ_G ;//单片玻璃宽度+边封缝隙宽度+玻璃缝隙宽度+内角轨道修正值
BLJ_CJLD := SJD/DS ;
BLJ_CJRD := 0.00 ;
L_CJ := 'N';
R_CJ := 'L';
JD := -(180-SNJD);
JDD := SDD - (180-SNJD)*(Sub_Num-1) ;
end ;
if (Sub_Num<>1) and (Sub_Num<>DS) then //中间2 到 n-1 段
begin
BLJKD := BLKD+BL_FXKD-2*NJXZZ_B ;
GDKD := BLKD+BL_FXKD-2*NJXZZ_G ; //单片玻璃宽度+玻璃缝隙宽度+2×内角轨道修正值
BLJ_CJLD := SJD/DS ;
BLJ_CJRD := SJD/DS ;
L_CJ := 'N';
R_CJ := 'N';
JD := -(180-SNJD) ;
JDD := SDD-(180-SNJD)*(Sub_Num-1) ;
end ;
OrderSQLInsert := 'Insert into OrderTbl(OrderNum,ClassType,NUM,GDZC,BLZK,Sub_Num,BLKD,GDKD,BLJKD,BLJ_CJ,BLJ_CJLD,BLJ_CJRD,L_CJ,R_CJ,JD,JDD,GHD,XC,YTGD,BLGD,SR) values('''+OrderNum+''','''+ClassType+''','+IntToStr(SN)+','+FloatToStr(GDZC)+','+FloatToStr(BLZK)+','+IntToStr(Sub_Num)+','+FloatToStr(BLKD)+','+FloatToStr(GDKD)+','+FloatToStr(BLJKD)+','''+BLJ_CJ+''','+FloatToStr(BLJ_CJLD)+','+FloatToStr(BLJ_CJRD)+','''+L_CJ+''','''+R_CJ+''','+FloatToStr(JD)+','+FloatToStr(JDD)+','+FloatToStr(GHD)+','''+Class_XC+''','+FloatToStr(YTGD)+','+FloatToStr(BLGD)+','+FloatToStr(SR)+')' ;
DM.Order_Query.Close ;DM.Order_Query.SQL.Clear ;DM.Order_Query.SQL.Add(OrderSQLInsert) ;DM.Order_Query.ExecSQL ;
Sub_Num := Sub_Num + 1 ;
end ;
end ;
if (T_Record=0) and (Total_JS>1) then //多于一段,第一段的情况
begin
GDZC := DS*2*SR*Sin((SJD/DS)*Pi/180) - BF_HD ;//轨道总长=玻璃片数×2×Rsin∠2 轨道总长=轨道区总长-封厚度
BLZK := GDZC-DS*BL_FXKD-BF_FXKD+(DS-1)*2*NJXZZ_G+N_NJXZZ_G ;//b=玻璃总宽
BLKD := BLZK/DS ;//玻璃宽度
//wr db
while Sub_Num<DS+1 do
begin
if Sub_Num=1 then
begin
BLJKD := BLKD+BL_FXKD-NJXZZ_B ; //单片玻璃宽度+玻璃缝隙宽度+内角玻璃夹修正值
GDKD := BLKD+BL_FXKD+BF_FXKD-NJXZZ_G ;//单片玻璃宽度+边封缝隙宽度+玻璃缝隙宽度+内角轨道修
BLJ_CJLD := 0.00 ;
BLJ_CJRD := SJD/DS ;
L_CJ := 'L';
R_CJ := 'N';
JD := SCJD ;
JDD := SDD + SCJD ;
end ;
if Sub_num=DS then
begin
BLJKD := BLKD+BL_FXKD-NJXZZ_B-N_NJXZZ_B ;
GDKD := BLKD+BL_FXKD-NJXZZ_G-N_NJXZZ_G ; //单片玻璃宽度+边封缝隙宽度+玻璃缝隙宽度+内角轨道修正值
BLJ_CJLD := SJD/DS ;
BLJ_CJRD := N_CJD ; //切割角
L_CJ := 'N';
R_CJ := N_CJ ;//变化与下一段相关
JD := -(180-SNJD);
JDD := SDD-(180-SNJD)*(Sub_Num-1) ;
end ;
if (Sub_Num<>1) and (Sub_Num<>DS) then
begin
BLJKD := BLKD+BL_FXKD-2*NJXZZ_B ;
GDKD := BLKD+BL_FXKD-2*NJXZZ_G ; //单片玻璃宽度+玻璃缝隙宽度+2×内角轨道修正值
BLJ_CJLD := SJD/DS ;
BLJ_CJRD := SJD/DS ;
L_CJ := 'N';
R_CJ := 'N' ;
JD := -(180-SNJD);
JDD := SDD-(180-SNJD)*(Sub_Num-1) ;
end ;
OrderSQLInsert := 'Insert into OrderTbl(OrderNum,ClassType,NUM,GDZC,BLZK,Sub_Num,BLKD,GDKD,BLJKD,BLJ_CJ,BLJ_CJLD,BLJ_CJRD,L_CJ,R_CJ,JD,JDD,GHD,XC,YTGD,BLGD,SR) values('''+OrderNum+''','''+ClassType+''','+IntToStr(SN)+','+FloatToStr(GDZC)+','+FloatToStr(BLZK)+','+IntToStr(Sub_Num)+','+FloatToStr(BLKD)+','+FloatToStr(GDKD)+','+FloatToStr(BLJKD)+','''+BLJ_CJ+''','+FloatToStr(BLJ_CJLD)+','+FloatToStr(BLJ_CJRD)+','''+L_CJ+''','''+R_CJ+''','+FloatToStr(JD)+','+FloatToStr(JDD)+','+FloatToStr(GHD)+','''+Class_XC+''','+FloatToStr(YTGD)+','+FloatToStr(BLGD)+','+FloatToStr(SR)+')' ;
DM.Order_Query.Close ;DM.Order_Query.SQL.Clear ;DM.Order_Query.SQL.Add(OrderSQLInsert) ;DM.Order_Query.ExecSQL ;
Sub_Num := Sub_Num + 1 ;
end ;
end ;
if (T_Record=Total_JS-1) and (Total_JS>1) then //多于一段,最后一段的情况
begin
GDZC := DS*2*SR*Sin((SJD/DS)*Pi/180) - BF_HD ;//轨道总长=玻璃片数×2×Rsin∠2 轨道总长=轨道区总长-封厚度
BLZK := GDZC-DS*BL_FXKD-BF_FXKD+(DS-1)*2*NJXZZ_G+P_NJXZZ_G ;//b=玻璃总宽
BLKD := BLZK/DS ;//玻璃宽度
//wr db
while Sub_Num<DS+1 do
begin
if Sub_Num=1 then
begin
BLJKD := BLKD+BL_FXKD-NJXZZ_B-P_NJXZZ_B ;
GDKD := BLKD+BL_FXKD-NJXZZ_G-P_NJXZZ_G ; //单片玻璃宽度+边封缝隙宽度+玻璃缝隙宽度+内角轨道修正值
BLJ_CJLD := P_CJD ;
BLJ_CJRD := SJD/DS ; //切割角
L_CJ := P_CJ;//变化与下一段相关
R_CJ := 'N' ;
JD := SD+P_SCJD+SCJD ; //
JDD := SDD+SCJD ; //
end ;
if Sub_num=DS then
begin
BLJKD := BLKD+BL_FXKD-NJXZZ_B ; //单片玻璃宽度+玻璃缝隙宽度+内角玻璃夹修正值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -