📄 unit1.cpp
字号:
ChanShu->Select0=csd[0]; // 扫描间隔
ChanShu->Select2=csd[3]; // 扫描速率
ChanShu->Select3=csd[4]; // 扫描方式
if(ChanShu->Select3!=3) //不是时间扫描
{
ChanShu->ewns=wns;
ChanShu->ewne=wne;
}
else
{
ChanShu->twns=wns;
ChanShu->twne=wne;
}
ChanShu->csd5[csd[4]]=csd[5];
ChanShu->csd2=csd[2]; // 工作光源
ChanShu->csd8=csd[8]; // 换灯波长
ChanShu->csd9=csd[9]; // 光谱带宽
ChanShu->csd10=csd[10]; // 负压
ChanShu->csd11=csd[11]; // 增益
}
//---------------------------------------------------------------------------
float TForm1::toa(float t)
{ // 由透过率求吸光度
float a;
if(t<=0.01)
return(4.0);
else
a=2-log10(t);
return(a);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MuSmoothClick(TObject *Sender)
{ // 光谱平滑运算
int i,n1,n2;
float tm[8];
if(ptc.m2==0)
{
Application->MessageBox("没有光谱数据!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
if(ptc.m2==8)
{
Application->MessageBox("光谱数据不能进行平滑处理!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
{
n1=0;
n2=(ptc.wne-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
tm[1]=tc[n1];
tm[2]=tc[n1];
tm[3]=tc[n1];
for(i=n1;i<=n2;i++)
{
tm[4]=tc[i];
if(i>(n2-3))
{
tm[5]=tc[n2];
tm[6]=tc[n2];
tm[7]=tc[n2];
}
else
{
tm[5]=tc[i+1];
tm[6]=tc[i+2];
tm[7]=tc[i+3];
}
tm[4]=(-2*(tm[7]+tm[1])+3*(tm[6]+tm[2])+6*(tm[5]+tm[3])+7*tm[4])/21;
tm[1]=tm[2];
tm[2]=tm[3];
tm[3]=tm[4];
tc[i]=tm[4];
}
ptc.m2=2;
}
DrawBK();
DrawQX();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MuDiv1Click(TObject *Sender)
{ // 光谱一次微分
int i,n1,n2;
float tm[8];
if(ptc.m2==0)
{
Application->MessageBox("没有光谱数据!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
if(ptc.m2==8||(ptc.m2>=3&&ptc.m2<=6))
{
Application->MessageBox("光谱数据不能进行一次微分处理!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
{
n1=0;
n2=(ptc.wne-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
for(i=n1;i<=n2;i++)
{
if(i==n1)
tm[0]=tc[n1];
else
tm[0]=tm[1];
tm[1]=tc[i];
if(i==n2)
tm[2]=tc[n2];
else
tm[2]=tc[i+1];
if(i==n1)
{ /*tc[i]=(td[i+1]-td[i])/1.0;*/
tc[i]=(tm[2]-tm[1])/1.0;
}
else
if(i==n2)
{ /*tc[i]=(td[i]-td[i-1])/1.0;*/
tc[i]=(tm[1]-tm[0])/1.0;
}
else
{ /*tc[i]=(td[i+1]-td[i-1])/1.0;*/
tc[i]=(tm[2]-tm[0])/1.0;
}
}
switch(ptc.m1)
{
case 1:tnh=100.0;
tnl=-100.0;
break;
case 2:tnh=4.0;
tnl=-4.0;
break;
case 3:tnh=100.0;
tnl=-100.0;
break;
}
ptc.m2=3;
}
DrawBK();
DrawQX();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MuDiv2Click(TObject *Sender)
{ // 光谱二次微分
int i,n1,n2;
int j,l;
float tm[8];
if(ptc.m2==0)
{
Application->MessageBox("没有光谱数据!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
if(ptc.m2==8||(ptc.m2>=4&&ptc.m2<=6))
{
Application->MessageBox("光谱数据不能进行二次微分处理!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
{
if(ptc.m2==3)
l=1;
else
l=2;
for(j=0;j<l;j++)
{
n1=0;
n2=(ptc.wne-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
for(i=n1;i<=n2;i++)
{
if(i==n1)
tm[0]=tc[n1];
else
tm[0]=tm[1];
tm[1]=tc[i];
if(i==n2)
tm[2]=tc[n2];
else
tm[2]=tc[i+1];
if(i==n1)
tc[i]=(tm[2]-tm[1])/1.0;
else
if(i==n2)
tc[i]=(tm[1]-tm[0])/1.0;
else
tc[i]=(tm[2]-tm[0])/1.0;
}
}
switch(ptc.m1)
{
case 1: tnh=100.0;
tnl=-100.0;
break;
case 2: tnh=4.0;
tnl=-4.0;
break;
case 3: tnh=100.0;
tnl=-100.0;
}
ptc.m2=4;
}
DrawBK();
DrawQX();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MuDiv3Click(TObject *Sender)
{ // 光谱三次微分
int i,n1,n2;
int j,l;
float tm[8];
if(ptc.m2==0)
{
Application->MessageBox("没有光谱数据!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
if(ptc.m2==8||(ptc.m2>=5&&ptc.m2<=6))
{
Application->MessageBox("光谱数据不能进行三次微分处理!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
{
if(ptc.m2==4)
l=1;
else if(ptc.m2==3)
l=2;
else
l=3;
for(j=0;j<l;j++)
{
n1=0;
n2=(ptc.wns-ptc.wne)*(float)wnd0/(float)itl[ptc.interval];
for(i=n1;i<=n2;i++)
{
if(i==n1)
tm[0]=tc[n1];
else
tm[0]=tm[1];
tm[1]=tc[i];
if(i==n2)
tm[2]=tc[n2];
else
tm[2]=tc[i+1];
if(i==n1)
tc[i]=(tm[2]-tm[1])/1.0;
else if(i==n2)
tc[i]=(tm[1]-tm[0])/1.0;
else
tc[i]=(tm[2]-tm[0])/1.0;
}
}
switch(ptc.m1)
{
case 1: tnh=100.0;
tnl=-100.0;
break;
case 2: tnh=4.0;
tnl=-4.0;
break;
case 3: tnh=100.0;
tnl=-100.0;
}
ptc.m2=5;
}
DrawBK();
DrawQX();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MuDiv4Click(TObject *Sender)
{ // 光谱四次微分
int i,n1,n2;
int j,l;
float tm[8];
if(ptc.m2==0)
{
Application->MessageBox("没有光谱数据!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
if(ptc.m2==8||ptc.m2==6)
{
Application->MessageBox("光谱数据不能进行四次微分处理!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
else
{ /*ptd.m2=0;*/
if(ptc.m2==5)
l=1;
else
if(ptc.m2==4)
l=2;
else
if(ptc.m2==3)
l=3;
else
l=4;
for(j=0;j<l;j++)
{
n1=0;
n2=(ptc.wne-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
for(i=n1;i<=n2;i++)
{
if(i==n1)
tm[0]=tc[n1];
else
tm[0]=tm[1];
tm[1]=tc[i];
if(i==n2)
tm[2]=tc[n2];
else
tm[2]=tc[i+1];
if(i==n1)
tc[i]=(tm[2]-tm[1])/1.0;
else if(i==n2)
tc[i]=(tm[1]-tm[0])/1.0;
else
tc[i]=(tm[2]-tm[0])/1.0;
}
}
switch(ptc.m1)
{
case 1: tnh=100.0;
tnl=-100.0;
break;
case 2: tnh=4.0;
tnl=-4.0;
break;
case 3: tnh=100.0;
tnl=-100.0;
break;
}
ptc.m2=6;
}
DrawBK();
DrawQX();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
About->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MuAddConstClick(TObject *Sender)
{ // 与常数相加
int i;
float kc=0;
if(ptc.m2!=0)
{
InputConst->ShowModal();
kc=InputConst->Value;
for(i=0;i<28500;i++)
tc[i]=tc[i]+kc;
DrawBK();
DrawQX();
}
else
Application->MessageBox("没有光谱数据!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MuSubConstClick(TObject *Sender)
{ // 与常数相减
int i;
float kc=0;
if(ptc.m2!=0)
{
InputConst->ShowModal();
kc=InputConst->Value;
for(i=0;i<28500;i++)
tc[i]=tc[i]-kc;
DrawBK();
DrawQX();
}
else
Application->MessageBox("没有光谱数据!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MuMulConstClick(TObject *Sender)
{ // 与常数相乘
int i;
float kc=0;
if(ptc.m2!=0)
{
InputConst->ShowModal();
kc=InputConst->Value;
for(i=0;i<28500;i++)
tc[i]=tc[i]*kc;
DrawBK();
DrawQX();
}
else
Application->MessageBox("没有光谱数据!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MuDivConstClick(TObject *Sender)
{ // 与常数相除
int i;
float kc=0;
if(ptc.m2!=0)
{
InputConst->ShowModal();
kc=InputConst->Value;
if(kc!=0)
for(i=0;i<28500;i++)
tc[i]=tc[i]/kc;
else Application->MessageBox("除数不能为零!", "输入错误",
MB_OK|MB_ICONWARNING);
DrawBK();
DrawQX();
}
else
Application->MessageBox("没有光谱数据!", "数据处理错误",
MB_OK|MB_ICONWARNING);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BoChangJianSuoClick(TObject *Sender)
{// 波长检索按钮
InputBoChang->ShowModal(); // 显示输入波长窗口
if(InputBoChang->ifOk==true)
{
DisableMenuItems();
fBoChangValue=InputBoChang->BoChang; // fBoChangValue 输入的波长值
if(Thread1!=NULL)
DeleteThread1();
CreatThread1();
Thread1->SetFun((ExecFun) To_BoChangJianSuo);
bStop=false; // 按下Stop 按纽
Scan->Enabled=false;
Search->Enabled=false;
//Stop->Enabled=true;
Thread1->Resume();
}
StatusBar1->Panels->Items[0]->Text="请选择操作...";
Form1->StatusBar1->Repaint();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void To_BoChangJianSuo(void)
{ // 波长检索事件
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -