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

📄 newunit.pas

📁 帮朋友编写的幼儿教育的管理平台
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    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 + -