📄 drawinfor.pas
字号:
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 + -