📄 newunit.pas
字号:
unit NewUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons,math, ADODB, DB, Grids, DBGrids, StrUtils;
type
TNew_Form = class(TForm)
Class_Select: TComboBox;
New_ADD: TBitBtn;
My_Image: TImage;
Left_Wall: TImage;
ZHIXIAN: TGroupBox;
WAITUH: TGroupBox;
NEIAOH: TGroupBox;
Label5: TLabel;
Label6: TLabel;
L_SX: TEdit;
L_SY: TEdit;
Label7: TLabel;
Label8: TLabel;
L_L: TEdit;
L_D: TEdit;
L_Memo: TMemo;
Label9: TLabel;
W_SX: TEdit;
Label14: TLabel;
W_SY: TEdit;
Label15: TLabel;
W_L: TEdit;
Label16: TLabel;
W_H: TEdit;
Label17: TLabel;
W_D: TEdit;
Label10: TLabel;
N_D: TEdit;
N_H: TEdit;
Label11: TLabel;
N_L: TEdit;
Label12: TLabel;
N_SY: TEdit;
Label13: TLabel;
Label18: TLabel;
N_SX: TEdit;
Memo1: TMemo;
Memo2: TMemo;
Label1: TLabel;
N_DS: TComboBox;
W_DS: TComboBox;
Label2: TLabel;
L_DS: TComboBox;
Label3: TLabel;
LineWidth: TComboBox;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
Button1: TButton;
XC: TComboBox;
Label4: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
OrderName: TEdit;
Right_Wall: TImage;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label22: TLabel;
Label23: TLabel;
MY_BF_HD: TEdit;
MY_BF_FXKD: TEdit;
Lablel28: TLabel;
MY_BL_FXKD: TEdit;
MY_ZFHD: TEdit;
Label24: TLabel;
Label25: TLabel;
JZ_YTGD: TEdit;
procedure New_ADDClick(Sender: TObject);
procedure Class_SelectChange(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure S_REDContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
procedure S_BLKContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
procedure S_BLUContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
procedure LineWidthChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure XCChange(Sender: TObject);
private
{ Private declarations }
public
procedure My_Rec(PX1:integer;PY1:integer;Q:real;L:real;H:real;UD:integer);
Function XZZ(JD:Real;MM:integer;NW:string;GB:string;XC:String):double ;
{ Public declarations }
end;
var
New_Form: TNew_Form;
Now_Class:String;
Now_Num:integer ;
D_Total:Double ;
BF_HD:integer ; //边封厚度
BF_FXKD:integer ; //边封缝隙宽度
BL_FXKD:integer ;
ZFHD:Integer;//06型材中缝厚度
GDDX_05:Integer;//05大小轨道区分
implementation
uses DataM, CXUnit;
{$R *.dfm}
Function TNew_Form.XZZ(JD:Real;MM:integer;NW:string;GB:string;XC:String):double ;
Var SQLString:String;
Var XZ_Total_REC,T_XZ_Num:integer ;
Var P_XiuZ_Z,P_D,N_XiuZ_Z,N_D:Double ;
begin
{SQLString := 'select * from XiuZTbl where XC='''+XC+''' and NW='''+NW+''' and BLH='+IntToStr(MM)+' and GB='''+GB+''' order by XiuZ_D' ;
DM.XiuZQuery.Close ;
DM.XiuZQuery.SQL.Clear ;
DM.XiuZQuery.SQL.Add(SQLString) ;
DM.XiuZQuery.Open ;
XZ_Total_REC := DM.XiuZQuery.RecordCount ;
XZZ := 0.00 ;
if XZ_Total_REC > 0 then
begin
DM.XiuZQuery.First ;
T_XZ_Num := 1 ;
while T_XZ_Num < XZ_Total_REC do
begin
P_D := DM.XiuZQuery.FieldByName('XiuZ_D').AsFloat ;
P_XiuZ_Z := DM.XiuZQuery.FieldByName('XiuZ_Z').AsFloat ;
DM.XiuZQuery.Next ;
N_D := DM.XiuZQuery.FieldByName('XiuZ_D').AsFloat ;
N_XiuZ_Z := DM.XiuZQuery.FieldByName('XiuZ_Z').AsFloat ;
if (JD>=P_D) and (JD<N_D) then
begin
XZZ :=P_XiuZ_Z-((P_XiuZ_Z-N_XiuZ_Z)/(N_D-P_D))*(JD-P_D) ;//x=x1-(x1-x2)/(y2-y1)*(y-y1);
//XZZ:=Abs(XZZ) ;
end
else
begin
end ;
T_XZ_Num := T_XZ_Num + 1 ;
end ;
end ;
//XZZ := 0.00 ;//DM.XiuZQuery.FieldByName('XiuZ_Z').AsFloat ;
DM.XiuZQuery.Close ; //}
end ;
procedure TNew_Form.New_ADDClick(Sender: TObject);
var PX1,PY1,X1,X2,X3,X4,Y1,Y2,Y3,Y4,DS:integer;
Var SR,J,L,H,D,YTGD:Real;
Var Q,SCJD,SJD,SNJD:Double ;
Var SQLInsert,GHD,M_XC:String;
begin
{if Now_Num = 1 then
begin
DM.Temp_Query.Close ;
DM.Temp_Query.SQL.Clear ;
DM.Temp_Query.SQL.Add('delete * from TempTbl') ;
DM.Temp_Query.ExecSQL ;
DM.Temp_Query.Close ;
DM.Temp_Query.SQL.Clear ;
DM.Temp_Query.SQL.Add('select * from TempTbl') ;
DM.Temp_Query.ExecSQL ;
D_Total:= 0.00 ;
end ;
GHD := LineWidth.Text ;
M_XC := XC.Text ;/// leftStr(XC.Text,2)
YTGD := StrToFloat(JZ_YTGD.Text) ;
if Now_Class='L' then
begin
X1:=StrToInt(L_SX.Text) ;
Y1:=StrToInt(L_SY.Text) ;
L:=StrToFloat(L_L.Text) ;
D:=StrToFloat(L_D.Text) ;
DS:=StrToInt(L_DS.Text) ;
D_Total:=D_Total+D ;
Q:=D_Total*Pi/180 ;
X2:=X1+Round(L*Cos(Q)/10) ;
Y2:=Y1-Round(L*Sin(Q)/10) ;
//Draw
My_Image.Canvas.MoveTo(X1,Y1);
My_Image.Canvas.LineTo(X2,Y2);
//Draw end
//写数据库
SQLInsert:='insert into TempTbl(SN,ClassType,SX,SY,SL,SD,SDD,DS,GHD,XC,YTGD) values ('+IntToStr(Now_Num)+',''L'','+IntToStr(X1)+','+IntToStr(Y1)+','+FloatToStr(L)+','+FloatToStr(D)+','+FloatToStr(D_Total)+','+IntToStr(DS)+','+GHD+','''+M_XC+''','+FloatToStr(YTGD)+')' ;
//wr data end
//回写起点X,Y
L_SX.Text :=IntToStr(X2) ;
W_SX.Text :=IntToStr(X2) ;
N_SX.Text :=IntToStr(X2) ;
L_SY.Text :=IntToStr(Y2) ;
W_SY.Text :=IntToStr(Y2) ;
N_SY.Text :=IntToStr(Y2) ;
//
end
else if Now_Class='W' then
begin
X1:=StrToInt(W_SX.Text) ;
Y1:=StrToInt(W_SY.Text) ;
L:=StrToFloat(W_L.Text) ;
D:=StrToFloat(W_D.Text) ;
H:=StrToFloat(W_H.Text) ;
DS:=StrToInt(W_DS.Text) ;
D_Total:=D_Total+D ; //SDD
Q:=D_Total*Pi/180 ;
SR := (L*L+4*H*H)/(8*H) ;
if H > (L*L+4*H*H)/(8*H) then //弦对应的圆心角
begin
SJD := 180-ArcSin((4*L*H)/(L*L+4*H*H))*180/Pi ;
SNJD := 2*SJD/DS ;//两段之间的夹角(线内部)
end
else
begin //仂弧
SJD := ArcSin((4*L*H)/(L*L+4*H*H))*180/Pi ;
SNJD := 180-2*SJD/DS ;//两段之间的夹角(线内部)
end ;
SCJD := SJD*(DS-1)/DS ; //第一段与弦之间的夹角
X2:=X1+Round(L*Cos(Q)/10) ;
Y2:=Y1-Round(L*Sin(Q)/10) ;
My_Rec(X1,Y1,Q,Round(L/10),Round(H/10),0) ; //1为内
//写数据库
SQLInsert:='insert into TempTbl(SN,ClassType,SX,SY,SL,SH,SD,SDD,DS,SCJD,SJD,SNJD,GHD,SR,XC,YTGD) values ('+IntToStr(Now_Num)+',''W'','+IntToStr(X1)+','+IntToStr(Y1)+','+FloatToStr(L)+','+FloatToStr(H)+','+FloatToStr(D)+','+FloatToStr(D_Total)+','+IntToStr(DS)+','+FloatToStr(SCJD)+','+FloatToStr(SJD)+','+FloatToStr(SNJD)+','+GHD+','+FloatToStr(SR)+','''+M_XC+''','+FloatToStr(YTGD)+')' ;
//wr data end
//回写起点X,Y
L_SX.Text :=IntToStr(X2) ;
W_SX.Text :=IntToStr(X2) ;
N_SX.Text :=IntToStr(X2) ;
L_SY.Text :=IntToStr(Y2) ;
W_SY.Text :=IntToStr(Y2) ;
N_SY.Text :=IntToStr(Y2) ;
//
end
else if Now_Class='N' then
begin
X1:=StrToInt(N_SX.Text) ;
Y1:=StrToInt(N_SY.Text) ;
L:=StrToFloat(N_L.Text) ;
D:=StrToFloat(N_D.Text) ;
H:=StrToFloat(N_H.Text) ;
DS:=StrToInt(N_DS.Text) ;
D_Total:=D_Total+D ; //SDD
Q:=D_Total*Pi/180 ;
SR := (L*L+4*H*H)/(8*H) ;
if H > (L*L+4*H*H)/(8*H) then //弦对应的圆心角
begin
SJD := 180-ArcSin((4*L*H)/(L*L+4*H*H))*180/Pi ;
SNJD := 2*SJD/DS ;//两段之间的夹角(线内部)
end
else
begin //仂弧
SJD := ArcSin((4*L*H)/(L*L+4*H*H))*180/Pi ;
SNJD := 180.00-2*SJD/DS ;//两段之间的夹角(线内部)
end ;
SCJD := - SJD*(DS-1)/DS ; //第一段与弦之间的夹角
X2:=X1+Round(L*Cos(Q)/10) ;
Y2:=Y1-Round(L*Sin(Q)/10) ;
My_Rec(X1,Y1,Q,Round(L/10),Round(H/10),1) ; //1为内
//写数据库
SQLInsert:='insert into TempTbl(SN,ClassType,SX,SY,SL,SH,SD,SDD,DS,SCJD,SJD,SNJD,GHD,SR,XC,YTGD) values ('+IntToStr(Now_Num)+',''N'','+IntToStr(X1)+','+IntToStr(Y1)+','+FloatToStr(L)+','+FloatToStr(H)+','+FloatToStr(D)+','+FloatToStr(D_Total)+','+IntToStr(DS)+','+FloatToStr(SCJD)+','+FloatToStr(SJD)+','+FloatToStr(SNJD)+','+GHD+','+FloatToStr(SR)+','''+M_XC+''','+FloatToStr(YTGD)+')' ;
//wr data end
//回写起点X,Y
L_SX.Text :=IntToStr(X2) ;
W_SX.Text :=IntToStr(X2) ;
N_SX.Text :=IntToStr(X2) ;
L_SY.Text :=IntToStr(Y2) ;
W_SY.Text :=IntToStr(Y2) ;
N_SY.Text :=IntToStr(Y2) ;
//
end ;
DM.Temp_Query.Close ;
DM.Temp_Query.SQL.Clear ;
DM.Temp_Query.SQL.Add(SQLInsert) ;
DM.Temp_Query.ExecSQL ;
Now_Num := Now_Num+1 ;
//My_Image.Canvas.Rectangle(0,300,400,302);
//矩形框,(起X,起Y,终X,终Y)
//My_Image.Canvas.Arc(X1,Y1,X2,Y2,X3,Y3,X4,Y4);
//圆弧,(圆弧所在的矩形框X1,Y1,X2,Y2,
//圆弧以圆心为轴,弧形的起点X,Y,逆时针的弧形终点X,Y)
//My_Image.Canvas.chord(X1,Y1,X2,Y2,X3,Y3,X4,Y4); //带弦的弧
BitBtn2.Click ;
Button4.Visible := True ; //}
end;
procedure TNew_Form.My_Rec(PX1:integer;PY1:integer;Q:real;L:real;H:real;UD:integer);
//PX1,PY1弧形的起点,Q弧弦与0之间的角度(单位是弧度),L弦长,H弦高,UD 0上突/1下凸
Var My_Array:Array[0..7] of Integer;
Var R,J:Real;
Var UL:integer;
begin
R:=(L*L+4*H*H)/(8*H);
if H>R then
begin
UL:=1 ; //确定为忧弧
J:=ArcSin(L/(2*R));
end
else
begin
UL:=0 ;//确定为仂弧
J:=ArcCos(L/(2*R));
end ;
if UD=0 then //外凸
begin
if UL=0 then
begin //仂弧、外凸
My_Array[0]:=Round(PX1+R*(Cos(J-Q)-1));
My_Array[1]:=Round(PY1+R*(Sin(J-Q)-1));
My_Array[2]:=Round(PX1+R*(Cos(J-Q)+1));
My_Array[3]:=Round(PY1+R*(Sin(J-Q)+1));
My_Array[4]:=Round(PX1+L*Cos(Q)) ;
My_Array[5]:=Round(PY1-L*Sin(Q)) ;
My_Array[6]:=PX1 ;
My_Array[7]:=PY1 ;
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]:=Round(PX1+L*Cos(Q)) ;
My_Array[5]:=Round(PY1-L*Sin(Q)) ;
My_Array[6]:=PX1 ;
My_Array[7]:=PY1 ;
end ;
end
else
begin //内凸
if UL=0 then // 仂弧、内凸
begin
My_Array[0]:=Round(PX1+R*(Cos(J+Q)-1));
My_Array[1]:=Round(PY1-R*(Sin(J+Q)-1));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -