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

📄 unit1.cpp

📁 光学仪器的控制系统 用于教学和科研的仪器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  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 + -