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

📄 drawinfor.pas

📁 基于高速铁路周边电动势计算的关键
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit DrawInfor;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Excel97, Excel2000,variants,OleServer, Buttons, StdCtrls, Spin, Activex,
  ExcelXP, ComCtrls, ExtCtrls,TeEngine,Comobj;
type
  TDrawInforForm = class(TForm)
    Panel1: TPanel;
    lvTestPointList: TListView;
    PageControl1: TPageControl;
    TabSheet2: TTabSheet;
    pnl1: TPanel;
    btn1: TBitBtn;
    btn2: TBitBtn;
    btn3: TBitBtn;
    BitBtn1: TBitBtn;
    ProgressBar1: TProgressBar;
    ComboBox1: TComboBox;
    BitBtn2: TBitBtn;
    Label1: TLabel;
    OpenDialog1: TOpenDialog;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    UpDown1: TUpDown;
    UpDown2: TUpDown;
    Label2: TLabel;
    Label3: TLabel;
    BitBtn4: TBitBtn;
    Label4: TLabel;
    Edit4: TEdit;
    procedure btn3Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ComboBox1Change(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DrawInforForm: TDrawInforForm;
  Excel     : Variant;   //声明Excel变量
implementation

uses ShowDrawUnit, WaitPas_Unit, Wait, Progress, OutToExcelUnit,
  GlobalVarDefs;

{$R *.dfm}

procedure TDrawInforForm.btn3Click(Sender: TObject);
begin
 Close;
end;

procedure TDrawInforForm.btn2Click(Sender: TObject);
begin
  lvTestPointList.Items.Clear;
end;

procedure TDrawInforForm.btn1Click(Sender: TObject);
var
 i,j,k,L,M  :Integer;
 strX,strY:single;
 LineX,LineY:single;
 strRedX     :Single;
 ChartNum    :Integer;//第几段供电臂;
 AddZero     :Boolean;//是否在开始绘第二段供电臂的磁感应电动势图;如果绘第一点得加零点

 li:array of Single;
 oi:array of Single;
 n :Integer        ;


begin
  k:=0;
  L:=-1;
  ChartNum:= 1;     //默认为第一段供电臂
  AddZero := False; //初始值不绘第二段供电臂的磁感应电动势图
  for i:=0 to ShowDrawForm.Chart1.SeriesCount-1 do
      ShowDrawForm.Chart1.Series[i].Clear;
      ShowDrawForm.Chart1.Refresh;

  for i:=0 to ShowDrawForm.Chart2.SeriesCount-1 do
      ShowDrawForm.Chart2.Series[i].Clear;
      ShowDrawForm.Chart2.Refresh;

  for i:=0 to ShowDrawForm.cht1.SeriesCount-1 do
      ShowDrawForm.cht1.Series[i].Clear;
      ShowDrawForm.cht1.Refresh;
  for i:=0 to ShowDrawForm.cht2.SeriesCount-1 do
      ShowDrawForm.cht2.Series[i].Clear;
      ShowDrawForm.cht2.Refresh;
      
//==供电臂内的平均大地导电率
  SetLength(li,rDDLInfo.Num);
  SetLength(oi,rDDLInfo.Num);

   if rPara.rat=50 then
      for i:=0 to rBDSInfo.Num-1 do
      begin
        n:=0;
        for j:=0 to rDDLInfo.Num-1 do
          begin
             if (rDDLInfo.AreaPoint[j]>rBDSInfo.beginPoint[i]) and (rDDLInfo.AreaPoint[j]<rBDSInfo.EndPoint[i])then
               begin
                  oi[n]:=rDDLInfo.DDL_Forty[j];
                  if n = 0 then
                     li[n]:=0
                    else
                     li[n]:=rDDLInfo.AreaPoint[j]-li[n-1];
                     n:=n+1;
                 end;
           end;

           rBDSInfo.AveDDL[i]:= Get_oj_Data(li,oi,n-1); // 供电臂的平均大地导电率
        end
        else
        for i:=0 to rBDSInfo.Num-1 do
      begin
        n:=0;
        for j:=0 to rDDLInfo.Num-1 do
          begin
             if (rDDLInfo.AreaPoint[j]>rBDSInfo.beginPoint[i]) and (rDDLInfo.AreaPoint[j]<rBDSInfo.EndPoint[i])then
               begin
                  oi[n]:=rDDLInfo.DDL_Eighty[j];
                  if n=0 then
                     li[n]:=rDDLInfo.AreaPoint[j]
                    else
                     li[n]:=rDDLInfo.AreaPoint[j]-li[n-1];
                     n:=n+1;
                 end;
           end;
                rBDSInfo.AveDDL[i]:=Get_oj_Data(li,oi,n-1);
        end;


//==导电率计算结束

//===绘画第一幅位置图
 if lvTestPointList.Items.Count = 0 then
    Exit;
 with ShowDrawForm do begin

  for i:=0 to rDDSInfo.Num-1 do
   begin
        strX := rDDSInfo.PointX[i];
        strY := rDDSInfo.PointY[i];

        Series1.AddXY(strX, strY, '', clTeeColor );
   end;
    

  //绘制铁轨
  Series2.AddXY(rBDSInfo.beginPoint[0], 0, '', clTeeColor );
  Series2.AddXY(rBDSInfo.EndPoint[rBDSInfo.Num-1], 0, '', clTeeColor );

   //===绘制导电率测点
     for i:=0 to rDDLInfo.Num-1 do
         Series3.AddXY(rDDLInfo.AreaPoint[i], 0, '', clTeeColor );
   //===绘制牵引变电所

         Series4.AddXY(rBDSInfo.beginPoint[0], 0, '', clTeeColor );
     for i:=0 to rBDSInfo.Num-1 do
          Series4.AddXY(rBDSInfo.EndPoint[i]  , 0, '', clTeeColor );

     SpinEdit1.MaxValue :=rDDSInfo.Num;
     SpinEdit1.Value    :=rDDSInfo.Num;


  end;

 

 //===开始绘制第二幅图
 
    rNew_Infor.Num:= rBDSInfo.Num+rDDSInfo.Num-2; //测点加上变电所的后的分段

    SetLength(rNew_Infor.StratX ,rNew_Infor.Num);
    SetLength(rNew_Infor.StratY ,rNew_Infor.Num);
    SetLength(rNew_Infor.EndX   ,rNew_Infor.Num);
    SetLength(rNew_Infor.EndY   ,rNew_Infor.Num);
    SetLength(rNew_Infor.Lengthl,rNew_Infor.Num);
    SetLength(rNew_Infor.AveDDL ,rNew_Infor.Num);
    SetLength(rNew_Infor.Id     ,rNew_Infor.Num);
    SetLength(rNew_Infor.GDB_Is ,rNew_Infor.Num);
    SetLength(rNew_Infor.DDS_E  ,rNew_Infor.Num);



 if rBDSInfo.Num = 1 then //供电臂的段数为1
    begin
       for i:=0 to rDDSInfo.Num-2 do
           begin
              rNew_Infor.StratX[i]   := rDDSInfo.PointX[i]                     ;
              rNew_Infor.StratY[i]   := rDDSInfo.PointY[i]                     ;
              rNew_Infor.EndX[i]     := rDDSInfo.PointX[i+1]                   ;
              rNew_Infor.EndY[i]     := rDDSInfo.PointY[i+1]                   ;
              rNew_Infor.Lengthl[i]  := rDDSInfo.PointX[i+1]-rDDSInfo.PointX[i];
              rNew_Infor.AveDDL[i]   := rBDSInfo.AveDDL[0]                     ;
              rNew_Infor.Id[i]       := rBDSInfo.GDB_I[0]                      ;
              rNew_Infor.GDB_Is[i]   := rBDSInfo.GDB_Is[0]                     ;
             end;
      end
      else   //供电臂段数大于1
        for i:=0 to rBDSInfo.Num-1 do
           begin
               L:=L+1;
            for j:=L to  rDDSInfo.Num-2 do
               begin
                  if (rBDSInfo.EndPoint[i]>rDDSInfo.PointX[j]) and  (rBDSInfo.EndPoint[i]<rDDSInfo.PointX[j+1])then
                     begin
                       if k >= rNew_Infor.Num then
                          break;

                          rNew_Infor.StratX[k]   := rDDSInfo.PointX[j]                     ;
                          rNew_Infor.StratY[k]   := rDDSInfo.PointY[j]                     ;
                          rNew_Infor.EndX[k]     := rBDSInfo.EndPoint[i]                   ;
                          rNew_Infor.EndY[k]     := Get_PointY(rDDSInfo.PointX[j],rDDSInfo.PointY[j],rDDSInfo.PointX[j+1],rDDSInfo.PointY[j+1],rBDSInfo.EndPoint[i]) ;
                          rNew_Infor.Lengthl[k]  := rBDSInfo.EndPoint[i]-rDDSInfo.PointX[j];//变电所的x值-前点的x值
                          rNew_Infor.AveDDL[k]   := rBDSInfo.AveDDL[i]                     ; //本段供电臂的值
                          rNew_Infor.Id[k]       := rBDSInfo.GDB_I[i]                      ; //本段供电臂的值
                          rNew_Infor.GDB_Is[k]   := rBDSInfo.GDB_Is[i]                     ; //本段供电臂的值

                          rNew_Infor.StratX[k+1]   := rNew_Infor.EndX[k]                       ;
                          rNew_Infor.StratY[k+1]   := rNew_Infor.EndY[k]                       ;
                          rNew_Infor.EndX[k+1]     := rDDSInfo.PointX[j+1]                     ;
                          rNew_Infor.EndY[k+1]     := rDDSInfo.PointX[j+1]                     ;
                          rNew_Infor.Lengthl[k+1]  := rDDSInfo.PointX[j+1]-rBDSInfo.EndPoint[i];//后点的x值-变电所的x值
                          rNew_Infor.AveDDL[k+1]   := rBDSInfo.AveDDL[i+1]                       ;
                          rNew_Infor.Id[k+1]       := rBDSInfo.GDB_I[i+1]                        ;
                          rNew_Infor.GDB_Is[k+1]   := rBDSInfo.GDB_Is[i+1]                       ;
                          k:=k+2;
                          Break;
                      end
                        else
                         begin
                           if k>=rNew_Infor.Num then
                              break;

                            rNew_Infor.StratX[k]   := rDDSInfo.PointX[j]                     ;
                            rNew_Infor.StratY[k]   := rDDSInfo.PointY[j]                     ;
                            rNew_Infor.EndX[k]     := rDDSInfo.PointX[j+1]                   ;
                            rNew_Infor.EndY[k]     := rDDSInfo.PointY[j+1]                   ;
                            rNew_Infor.Lengthl[k]  := rDDSInfo.PointX[j+1]-rDDSInfo.PointX[j];//前后两点之间x差值
                            rNew_Infor.AveDDL[k]   := rBDSInfo.AveDDL[i]                     ;//下一段段供电臂的值
                            rNew_Infor.Id[k]       := rBDSInfo.GDB_I[i]                      ;//下一段段供电臂的值
                            rNew_Infor.GDB_Is[k]   := rBDSInfo.GDB_Is[i]                     ;//下一段段供电臂的值
                            k:=k+1;
                            L:=L+1;
                           end;

              end;

            end;


//           for i:=0 to rNew_Infor.Num do
           i:=0;
           while(i<=rNew_Infor.Num)  do
               begin

            if i=0 then
              begin
                 strX := rNew_Infor.StratX[0];
                 strY := 0.0;
                end;

            if i > 0 then begin

                  for M:=0 to rBDSInfo.Num-1 do
                      begin
                         if rNew_Infor.StratX[i-1]=rBDSInfo.EndPoint[M] then
                            begin
                              strX := rNew_Infor.StratX[i-1];
                              strY := 0;
                              rNew_Infor.DDS_E[i-1]:=strY;//磁感应电动势
                              ChartNum:=ChartNum+1;//供电臂段数加1
                                   ShowDrawForm.LineSeries1.AddXY(strX, strY, '', clTeeColor );
                                   ShowDrawForm.Series5.AddXY(strX, strY, '', clTeeColor );
                              if ChartNum = 2 then
                                 begin
                                   ShowDrawForm.LineSeries3.AddXY(strX, strY, '', clTeeColor );
                                   ShowDrawForm.PointSeries1.AddXY(strX, strY, '', clTeeColor );
                                  end;

                            end;
                        end;



                  if rNew_Infor.StratY[i-1]= rNew_Infor.EndY[i-1] then //平行时
                     rE_Infor.E_M:=Get_M1_Data(rE_Infor.E_w,rNew_Infor.AveDDL[i-1],rNew_Infor.StratY[i-1]/1000);

⌨️ 快捷键说明

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