Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
RENDERVIEW.CPP
Package: openglsystem.rar [view]
Upload User: nthssl
Upload Date: 2022-04-05
Package Size: 25357k
Code Size: 7k
Category:
OpenCV
Development Platform:
Visual C++
- // RenderView.cpp : implementation file
- //
- #include "stdafx.h"
- #include "3DEditor.h"
- #include "DlgRayTrace.h"
- #include "RenderView.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // RenderView dialog
- int renderviewmode=0;
- extern CRITICAL_SECTION cs_rv;
- extern RenderView *renderview;
- RenderView::RenderView(CWnd* pParent /*=NULL*/)
- : CDialog(RenderView::IDD, pParent)
- {
- //{{AFX_DATA_INIT(RenderView)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- }
- void RenderView::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(RenderView)
- // NOTE: the ClassWizard will add DDX and DDV calls here
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(RenderView, CDialog)
- //{{AFX_MSG_MAP(RenderView)
- ON_WM_CLOSE()
- ON_WM_PAINT()
- ON_WM_SIZE()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // RenderView message handlers
- void RenderView::Close()
- {
- OnClose();
- }
- void RenderView::OnClose()
- {
- // TODO: Add your message handler code here and/or call default
- EnterCriticalSection(&cs_rv);
- renderview=0;
- if (buf)
- {
- ((DlgRayTrace *)rd)->buf=buf;
- ((DlgRayTrace *)rd)->bufsx=bufsx;
- ((DlgRayTrace *)rd)->bufsy=bufsy;
- buf=0;
- }
- GetWindowRect(&winpos3);
- ((DlgRayTrace *)rd)->GetDlgItem(IDC_PREVIEW)->EnableWindow(1);
- RenderView **d=&((DlgRayTrace *)rd)->rv;
- delete ((DlgRayTrace *)rd)->rv;
- *d=0;
- LeaveCriticalSection(&cs_rv);
- CDialog::OnClose();
- }
- BOOL RenderView::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // TODO: Add extra initialization here
- winpos3.left=-1;
- winpos3.top=-1;
- CMenu *menu=GetMenu();
- menu->CheckMenuRadioItem( ID_MODE1, ID_MODE2, ID_MODE1+renderviewmode, MF_BYCOMMAND);
- if (winpos3.left!=-1)
- SetWindowPos(0,winpos3.left,winpos3.top,0,0,SWP_NOSIZE|SWP_NOZORDER);
- SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), FALSE);
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
- }
- void RenderView::DrawPicture(CDC *dc,picture *p,int ssx,int ssy)
- {
- struct tagBITMAPINFO bmi;
- bmi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
- bmi.bmiHeader.biCompression=BI_RGB;
- bmi.bmiHeader.biXPelsPerMeter=6000;
- bmi.bmiHeader.biYPelsPerMeter=6000;
- bmi.bmiHeader.biClrUsed=0;
- bmi.bmiHeader.biClrImportant=0;
- bmi.bmiHeader.biSizeImage=0;
- bmi.bmiHeader.biWidth=p?ssx:bufsx;
- bmi.bmiHeader.biHeight=p?ssy:bufsy;
- bmi.bmiHeader.biPlanes=1;
- bmi.bmiHeader.biBitCount=24;
- if (p)
- {
- int tx=ssx*3,x,y,yp,xx;
- byteRGB *rgb;
- if (tx%4) tx+=(4-tx%4);
- if (buf)
- delete buf;
- buf=new unsigned char[tx*ssy];
- for( y=0;y<ssy;y++ )
- {
- yp=(ssy-y-1)*tx;
- rgb=(byteRGB *)p->buf[y*(p->sy-1)/(ssy-1)];
- for( x=0;x<ssx;x++ )
- {
- xx=x*(p->sx-1)/(ssx-1);
- buf[yp++]=rgb[xx].b;
- buf[yp++]=rgb[xx].g;
- buf[yp++]=rgb[xx].r;
- }
- }
- bufsx=ssx;
- bufsy=ssy;
- }
- if (buf)
- if (renderviewmode)
- {
- RECT rect;
- GetClientRect(&rect);
- StretchDIBits(dc->m_hDC,0,0,rect.right,rect.bottom,0,0,bufsx,bufsy,buf,&bmi,DIB_RGB_COLORS,SRCCOPY);
- }
- else SetDIBitsToDevice(dc->m_hDC, 0,0, bufsx,bufsy, 0,0, 0,bufsy, buf, &bmi, DIB_RGB_COLORS);
- }
- void RenderView::DrawPicture(picture *p,int ssx,int ssy)
- {
- CDC *dc=GetDC();
- DrawPicture(dc,p,ssx,ssy);
- ReleaseDC(dc);
- }
- void RenderView::OnPaint()
- {
- CPaintDC dc(this); // device context for painting
- // TODO: Add your message handler code here
- DrawPicture(&dc,0,0,0);
- // Do not call CDialog::OnPaint() for painting messages
- }
- BOOL RenderView::OnCommand(WPARAM wParam, LPARAM lParam)
- {
- // TODO: Add your specialized code here and/or call the base class
- switch(wParam)
- {
- case ID_ASPECT:
- if (buf)
- {
- CRect rect, rectw;
- GetClientRect(&rect);
- GetWindowRect(&rectw);
- int newsx=rect.bottom*bufsx/bufsy;
- SetWindowPos(0, 0, 0, rectw.right-rectw.left-rect.right+newsx, rectw.bottom-rectw.top, SWP_NOMOVE | SWP_NOZORDER);
- }
- break;
- case ID_MODE1:
- {
- CMenu *menu=GetMenu();
- renderviewmode=0;
- menu->CheckMenuRadioItem( ID_MODE1, ID_MODE2, ID_MODE1+renderviewmode, MF_BYCOMMAND);
- Invalidate(1);
- menu->EnableMenuItem( ID_ASPECT, MF_GRAYED);
- }
- break;
- case ID_MODE2:
- {
- CMenu *menu=GetMenu();
- renderviewmode=1;
- menu->CheckMenuRadioItem( ID_MODE1, ID_MODE2, ID_MODE1+renderviewmode, MF_BYCOMMAND);
- Invalidate(0);
- menu->EnableMenuItem( ID_ASPECT, MF_ENABLED);
- }
- break;
- case ID_SAVEIMG:
- if (buf)
- {
- CString s;
- s.LoadString(IDS_FD_TGA);
- CFileDialog fd(FALSE,"tga",0,OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,s);
- if(fd.DoModal()==IDOK)
- if (SaveTGA((char *)(LPCSTR)fd.GetPathName())==0)
- AfxMessageBox(IDS_ERRORSAVING,MB_OK|MB_ICONEXCLAMATION);
- }
- break;
- case ID_COPY:
- Copy();
- break;
- }
- return CDialog::OnCommand(wParam, lParam);
- }
- int RenderView::SaveTGA(char *name)
- {
- if (buf==0)
- return 0;
- FILE *fp=fopen(name,"wb");
- if (fp==0)
- return 0;
- unsigned char TGA_INI[18];
- memset(&TGA_INI[0],0,18);
- TGA_INI[12]=(unsigned char)(bufsx%256);
- TGA_INI[13]=(unsigned char)(bufsx/256);
- TGA_INI[14]=(unsigned char)(bufsy%256);
- TGA_INI[15]=(unsigned char)(bufsy/256);
- TGA_INI[2]=2;
- TGA_INI[16]=0x18;
- fwrite((char *)&TGA_INI[0],18,1,fp);
- int y,tx=3*bufsx;
- if (tx%4) tx+=(4-tx%4);
- for( y=0;y<bufsy;y++ )
- fwrite(&buf[tx*y],bufsx,3,fp);
- fclose(fp);
- return 1;
- }
- void RenderView::Copy()
- {
- if (buf==0)
- return;
- if ( !OpenClipboard() )
- return;
- if ( !EmptyClipboard() )
- {
- CloseClipboard();
- return;
- }
- HGLOBAL hData;
- BITMAPINFOHEADER *bi;
- int tx=bufsx*3;
- if (tx%4) tx+=(4-tx%4);
- hData=GlobalAlloc(GMEM_MOVEABLE,tx*bufsy+sizeof(BITMAPINFOHEADER));
- unsigned char *b=(unsigned char *)GlobalLock(hData);
- bi=(BITMAPINFOHEADER *)b;
- bi->biSize=sizeof(BITMAPINFOHEADER);
- bi->biWidth=bufsx;
- bi->biHeight=bufsy;
- bi->biPlanes=1;
- bi->biBitCount=24;
- bi->biCompression=BI_RGB;
- bi->biSizeImage=0;
- bi->biXPelsPerMeter=0;
- bi->biYPelsPerMeter=0;
- bi->biClrUsed=0;
- bi->biClrImportant=0;
- memcpy(&b[sizeof(BITMAPINFOHEADER)],buf,tx*bufsy);
- GlobalUnlock(hData);
- SetClipboardData( CF_DIB, hData );
- CloseClipboard();
- }
- void RenderView::OnSize(UINT nType, int cx, int cy)
- {
- CDialog::OnSize(nType, cx, cy);
- // TODO: Add your message handler code here
- DrawPicture(0,0,0);
- }