📄 swmainform.cpp
字号:
#include "SWMainForm.h"
//region int SmartWinMain(sw::Application& app)
int SmartWinMain(sw::Application& app)
{
SWMainForm* mainForm=new SWMainForm;
mainForm->initAndCreate();
return app.run();
}
void SWMainForm::main_createMenu(void)
{
mainMenu = createMenu();
WidgetMenuPtr file = mainMenu->appendPopup( _T( "&File" ) );
file->appendItem( 1, _T( "&New PLC File" ), & SWMainForm::menuEventHandler );
file->appendItem( 2, _T( "&Open PLC File" ), & SWMainForm::menuEventHandler );
file->appendItem( 3, _T( "&Save PLC File" ), & SWMainForm::menuEventHandler );
//file->appendItem( 5, _T( "&Load Quake 3 map" ), & SWMainForm::menuEventHandler );
// file->appendItem( 6, _T( "&Add PLC File" ), & SWMainForm::menuEventHandler );
file->appendSeparatorItem();
file->appendItem( 4, _T( "&Exit" ), & SWMainForm::menuEventHandler );
mainMenu->attach( this );
}
void SWMainForm::main_createToolbar(void)
{
WidgetToolbar::Seed toolbar_seed;
toolbar_seed.style |= TBSTYLE_FLAT;
toolbar = createToolbar(toolbar_seed);
toolbar->setButtonSize( 30, 25 );
//toolbar_1 = createToolbar(toolbar_seed);
//toolbar_1->setButtonSize( 32, 25 );
ImageListPtr imageList( new ImageList( 23, 20, ILC_COLOR24 ) );
imageList->addMultiple( SmartWin::Bitmap("bitmap1.bmp") );
toolbar->setNormalImageList( imageList );
toolbar->addButton( 0, 0, _T( "New" ), _T( "New IRRscene File" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 1, 1, _T( "Open" ), _T( "Open IRRscene File" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 2, 2, _T( "Save" ), _T( "Save IRRscene File" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 3, 3, _T( "Dele" ), _T( "Delete model..." ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 4, 4, _T( "Copy" ), _T( "Testing model..." ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 5, 5, _T( "Past" ), _T( "Paste model..." ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 6, 6, _T( "Hide" ), _T( "Hide/Unhide" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 7, 7, _T( "Wire" ), _T( "Show Wire/Hide wire" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 8, 8, _T( "Mode" ), _T( "OpenMode" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 9, 9, _T( "View" ), _T( "View Change" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 10, 10, _T( "Full" ), _T( "Full Perspective View" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 11, 11, _T( "Play" ), _T( "Play" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 12, 12, _T( "Text" ), _T( "Texture" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 13, 13, _T( "MoveC" ), _T( "Move Camera" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 14, 14, _T( "MoveM" ), _T( "Move model" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 15, 15, _T( "Rota" ), _T( "Rotate model" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 16, 16, _T( "Scal" ), _T( "Scale model" ), false, & SWMainForm::toolbarClicked );
toolbar->addButton( 17, 17, _T( "Cube" ), _T( "Add Cube" ), false, & SWMainForm::toolbarClicked );
toolbar->refresh();
}
void SWMainForm::menuEventHandler( WidgetMenuPtr menu, unsigned int item )
{
UpdateCanvas c( this );
switch(item)
{
case 2:
OnLoadFile();
break;
case 3:
OnSaveFile();
break;
}
}
void SWMainForm::toolbarClicked( WidgetToolbarPtr toolbar, unsigned btn )
{
UpdateCanvas c( this );
switch(btn)
{
case 0:
break;
case 1:
OnLoadFile();
break;
case 2:
OnSaveFile();
break;
}
}
void SWMainForm::OnLoadFile()
{
WidgetLoadFile L_dlg;
SmartUtil::tstring filePath;
std::fstream sfs;
int len;
char* buf;
SmartUtil::tstring file_data;
L_dlg = createLoadFile();
L_dlg.addFilter( _T( "PLC Files(*.plc)" ), _T( "*.plc" ) );
L_dlg.addFilter( _T( "All Files" ), _T( "*.*" ) );
L_dlg.activeFilter( 0 );
filePath = L_dlg.showDialog();
if(!filePath.empty())
{
std::fstream sfs(filePath.c_str());
if(!sfs)return;
sfs.seekg (0, ios::end);
len = sfs.tellg();
sfs.seekg (0, ios::beg);
buf = new char[len];
sfs.read(buf, len);
file_data=string(buf);
delete []buf;
sfs.close();
//m_edit1->setText(file_data);
}
}
void SWMainForm::OnSaveFile()
{
WidgetSaveFile S_dlg;
SmartUtil::tstring filePath;
std::fstream sfs;
int len;
char* buf;
SmartUtil::tstring file_data;
S_dlg = createSaveFile();
S_dlg.addFilter( _T( "PLC Files(*.plc)" ), _T( "*.plc" ) );
S_dlg.addFilter( _T( "All Files" ), _T( "*.*" ) );
S_dlg.activeFilter( 0 );
filePath = S_dlg.showDialog();
if(!filePath.empty())
{
if(filePath.find(".plc")==-1&&filePath.find(".PLC")==-1)filePath+=".plc";
sfs.open(filePath.c_str(), ios_base::out);
if(!sfs)return;
//file_data=m_edit1->getText();
sfs.write(file_data.c_str(), file_data.size());
sfs.close();
}
}
//endregion
void SWMainForm::paint(Canvas & c)
{
//img1.Show(hDC,340,95,451,263);
RECT pDstRect={40,100,40+420,280};
img1.DrawToHDC(hDC,&pDstRect);
UpdateCanvas uc( this );
SmartWin::Rectangle rect(r.l, r.t, r.w+5, r.h+5 );
uc.rectangle( rect );
for(int i=1;i<samplenum;i++)
{
uc.line(r.x+i-1,r.y-output[i-1]*200,r.x+i,r.y-output[i]*200);
uc.line(r.x+i-1+1,r.y-output[i-1]*200+1,r.x+i+1,r.y-output[i]*200+1);
uc.line(r.x+i-1,r.y-output[i-1]*200+1,r.x+i,r.y-output[i]*200+1);
}
for(int i=0;i<13;i++)
{
uc.extTextOut(boost::lexical_cast<std::string>(i*20),r.x-25,r.y-i*20-5);
}
}
void SWMainForm::OnButton1(WidgetButtonPtr widgetparam)
{
if(widgetparam->getText()=="启动")
{
b_PID_isrun=true;
widgetparam->setText("停止");
}
else
{
b_PID_isrun=false;
widgetparam->setText("启动");
}
if(b_PID_isrun)
{
i_PID_out_point=0;
PID_Init();
int PID_delay=100;
Command com ( _T( "Run" ) );
createTimer( & SWMainForm::timer_PID_Run, PID_delay, com );
}
}
void SWMainForm::PID_Init()
{
kp=boost::lexical_cast<double>(m_edit2->getText());
ki=boost::lexical_cast<double>(m_edit3->getText());
kd=boost::lexical_cast<double>(m_edit4->getText());
num2=boost::lexical_cast<double>(m_edit5->getText());
num3=boost::lexical_cast<double>(m_edit6->getText());
num4=boost::lexical_cast<double>(m_edit7->getText());
den2=boost::lexical_cast<double>(m_edit8->getText());
den3=boost::lexical_cast<double>(m_edit9->getText());
den4=boost::lexical_cast<double>(m_edit10->getText());
//double set=boost::lexical_cast<double>(m_edit1->getText());
//input=set/200;
double set=boost::lexical_cast<double>(slider1->getPosition());
input=(256-set)/200;
samplenum=0;
for(int i=0;i<PID_out_buf_MAX;i++)output[i]=0.0;
ts=boost::lexical_cast<double>(m_edit11->getText());
u1=0.0;
u2=0.0;
u3=0.0;
uk=0.0;
y11=0.0;
y2=0.0;
y3=0.0;
yk=0.0;
x1=0.0;
x2=0.0;
x3=0.0;
error=0.0;
error1=0.0;
}
void SWMainForm::timer_PID_Run( const CommandPtr & cmd )
{
if(samplenum<PID_out_buf_MAX-10)
{
samplenum++;
}
else
{
samplenum=0;
// PID_Init();
// b_PID_isrun=false;
//button1->setText("启动");
}
pidproc();
PID_Draw();
if(b_PID_isrun)
{
int PID_delay=100;
Command com ( _T( "Run" ) );
createTimer( & SWMainForm::timer_PID_Run, PID_delay, com );
}
}
void SWMainForm::PID_Draw()
{
UpdateCanvas uc( this );
if(samplenum<2)
{
SmartWin::Rectangle rect(r.l, r.t, r.w+5, r.h+5 );
uc.rectangle( rect );
}
else
{
uc.line(r.x+samplenum-1,r.y-output[samplenum-1]*200,r.x+samplenum,r.y-output[samplenum]*200);
uc.line(r.x+samplenum-1+1,r.y-output[samplenum-1]*200+1,r.x+samplenum+1,r.y-output[samplenum]*200+1);
uc.line(r.x+samplenum-1,r.y-output[samplenum-1]*200+1,r.x+samplenum,r.y-output[samplenum]*200+1);
}
}
void SWMainForm::pidproc()
{
uk=kp*x1+kd*x2+ki*x3;
if(uk>=10)uk=10;
if(uk<-10)uk=-10;
yk=-(den2*y11)-(den3*y2)-(den4*y3)+(num2*u1)+(num3*u2)+(num4*u3);
error=input-yk;
u3=u2;
u2=u1;
u1=uk;
y3=y2;
y2=y11;
y11=yk;
x1=error;
x2=(error-error1)/ts;
x3=x3+error*ts;
error1=error;
output[samplenum]=yk;
}
void SWMainForm::OnButton2(WidgetButtonPtr widgetparam)
{
double set=boost::lexical_cast<double>(m_edit1->getText());
input=set/200;
slider1->setPosition(256-set);
}
void SWMainForm::OnSlider1(WidgetSliderPtr widgetparam)
{
double set=boost::lexical_cast<double>(slider1->getPosition());
m_edit1->setText(boost::lexical_cast<std::string>(256-set));
input=(256-set)/200;
}
void SWMainForm::OnButton3(WidgetButtonPtr widgetparam)
{
m_edit2->setText(_T("0.5"));
m_edit3->setText(_T("0.001"));
m_edit4->setText(_T("0.001"));
m_edit5->setText(_T("0.0097"));
m_edit6->setText(_T("0.0344"));
m_edit7->setText(_T("0.0078"));
m_edit8->setText(_T("-2.4386"));
m_edit9->setText(_T("2.0848"));
m_edit10->setText(_T("-0.6461"));
m_edit11->setText(_T("0.005"));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -