EgtExecutor :
- aggiunta funzione exe/lua GetImageEx (per fare bitmap di vista progetto in contesti senza Scene).
This commit is contained in:
+111
-19
@@ -16,11 +16,14 @@
|
||||
#include "EXE.h"
|
||||
#include "EXE_Macro.h"
|
||||
#include "DllGraphics.h"
|
||||
#include "DllMain.h"
|
||||
#include "resource.h"
|
||||
#include "/EgtDev/Include/EGkSurfBezier.h"
|
||||
#include "/EgtDev/Include/EXeExecutor.h"
|
||||
#include "/EgtDev/Include/EXeConst.h"
|
||||
#include "/EgtDev/Include/EgtStringConverter.h"
|
||||
#include "/EgtDev/Include/EgtPointerOwner.h"
|
||||
#include <Windowsx.h>
|
||||
|
||||
using namespace std ;
|
||||
|
||||
@@ -211,6 +214,31 @@ ExeSetGridColor( Color colMin, Color colMaj)
|
||||
return pScene->SetGridColor( colMin, colMaj) ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeSetCameraType( bool bOrthoOrPersp, bool bRedraw)
|
||||
{
|
||||
IEGrScene* pScene = GetCurrScene() ;
|
||||
VERIFY_SCENE( pScene, false)
|
||||
pScene->SetCameraType( bOrthoOrPersp) ;
|
||||
if ( bRedraw)
|
||||
pScene->RedrawWindow() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeSetZoomType( int nMode, bool bRedraw)
|
||||
{
|
||||
IEGrScene* pScene = GetCurrScene() ;
|
||||
VERIFY_SCENE( pScene, false)
|
||||
if ( ! pScene->SetZoomType( nMode))
|
||||
return false ;
|
||||
if ( bRedraw)
|
||||
pScene->RedrawWindow() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeResize( int nW, int nH)
|
||||
@@ -958,27 +986,91 @@ ExeGetImage( int nShowMode, Color colBackTop, Color colBackBottom,
|
||||
return pScene->GetImage( nShowMode, colBackTop, colBackBottom, nWidth, nHeight, sFile) ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeSetCameraType( bool bOrthoOrPersp, bool bRedraw)
|
||||
{
|
||||
IEGrScene* pScene = GetCurrScene() ;
|
||||
VERIFY_SCENE( pScene, false)
|
||||
pScene->SetCameraType( bOrthoOrPersp) ;
|
||||
if ( bRedraw)
|
||||
pScene->RedrawWindow() ;
|
||||
return true ;
|
||||
//-------------------------------------------------------------------------------
|
||||
static int s_nContext = 0 ;
|
||||
static int s_nDriver = 3 ;
|
||||
static bool s_b2Buff = true ;
|
||||
static int s_nColorBits = 32 ;
|
||||
static int s_nDepthBits = 24 ;
|
||||
static int s_nShowMode = SM_SHADING ;
|
||||
static Color s_colBackTop = WHITE ;
|
||||
static Color s_colBackBottom = WHITE ;
|
||||
static int s_nCameraDir = CT_TOP ;
|
||||
static int s_nWidth = 1024 ;
|
||||
static int s_nHeight = 1024 ;
|
||||
static string s_sImageFile ;
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
BOOL
|
||||
CALLBACK SceneBoxProc( HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch ( message) {
|
||||
case WM_INITDIALOG :
|
||||
{
|
||||
// imposto dimensione box e picture
|
||||
const int WIN_MAX_DIM = 1024 ;
|
||||
int nWinW = ( s_nWidth >= s_nHeight ? WIN_MAX_DIM : ( WIN_MAX_DIM * s_nWidth) / s_nHeight) ;
|
||||
int nWinH = ( s_nHeight >= s_nWidth ? WIN_MAX_DIM : ( WIN_MAX_DIM * s_nHeight) / s_nWidth) ;
|
||||
HWND hPic = GetDlgItem( hwndDlg, IDC_PICTURE1) ;
|
||||
SetWindowPos( hwndDlg, HWND_TOP, 0, 0, nWinW, nWinH, SWP_NOMOVE | SWP_NOREPOSITION) ;
|
||||
SetWindowPos( hPic, HWND_TOP, 0, 0, nWinW, nWinH, SWP_NOMOVE | SWP_NOREPOSITION) ;
|
||||
// imposto scena
|
||||
int nContext = GetIndCurrGseContext() ;
|
||||
GseContext* pGseCtx = GetGseContext( nContext) ;
|
||||
if ( pGseCtx != nullptr && pGseCtx->m_pScene == nullptr) {
|
||||
ExeInitScene( hPic, s_nDriver, s_b2Buff, s_nColorBits, s_nDepthBits) ;
|
||||
if ( pGseCtx->m_pGeomDB != nullptr && pGseCtx->m_pScene != nullptr) {
|
||||
s_nContext = nContext ;
|
||||
pGseCtx->m_pScene->SetCamera( s_nCameraDir) ;
|
||||
pGseCtx->m_pScene->ZoomAll() ;
|
||||
pGseCtx->m_pScene->GetImage( s_nShowMode, s_colBackTop, s_colBackBottom, s_nWidth, s_nHeight, s_sImageFile) ;
|
||||
MyResetGroupObjGraphics( pGseCtx->m_pGeomDB, GDB_ID_ROOT) ;
|
||||
EndDialog( hwndDlg, wParam) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
s_nContext = 0 ;
|
||||
}
|
||||
break ;
|
||||
}
|
||||
return FALSE ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//-------------------------------------------------------------------------------
|
||||
bool
|
||||
ExeSetZoomType( int nMode, bool bRedraw)
|
||||
ExeGetImageEx( int nDriver, bool b2Buff, int nColorBits, int nDepthBits,
|
||||
int nShowMode, Color colBackTop, Color colBackBottom,
|
||||
int nCameraDir, int nWidth, int nHeight, const string& sFile)
|
||||
{
|
||||
IEGrScene* pScene = GetCurrScene() ;
|
||||
VERIFY_SCENE( pScene, false)
|
||||
if ( ! pScene->SetZoomType( nMode))
|
||||
return false ;
|
||||
if ( bRedraw)
|
||||
pScene->RedrawWindow() ;
|
||||
return true ;
|
||||
// Se il contesto corrente possiede già una scena
|
||||
if ( GetCurrScene() != nullptr) {
|
||||
return ExeGetImage( nShowMode, colBackTop, colBackBottom, nWidth, nHeight, sFile) ;
|
||||
}
|
||||
// altrimenti ne creo una temporanea
|
||||
else {
|
||||
// salvo i parametri
|
||||
s_nDriver = nDriver ;
|
||||
s_b2Buff = b2Buff ;
|
||||
s_nColorBits = nColorBits ;
|
||||
s_nDepthBits = nDepthBits ;
|
||||
s_nShowMode = nShowMode ;
|
||||
s_colBackTop = colBackTop ;
|
||||
s_colBackBottom = colBackBottom ;
|
||||
s_nCameraDir = nCameraDir ;
|
||||
s_nWidth = nWidth ;
|
||||
s_nHeight = nHeight ;
|
||||
s_sImageFile = sFile ;
|
||||
// lancio dialogo
|
||||
HWND hTopWnd = ExeGetMainWindowHandle() ;
|
||||
DialogBox( GetModuleIstance(), MAKEINTRESOURCE( IDD_LUASCENE), hTopWnd, (DLGPROC)SceneBoxProc) ;
|
||||
bool bOk = ( s_nContext != 0) ;
|
||||
// elimino la scena dal contesto
|
||||
GseContext* pGseCtx = GetGseContext( s_nContext) ;
|
||||
if ( pGseCtx != nullptr) {
|
||||
delete pGseCtx->m_pScene ;
|
||||
pGseCtx->m_pScene = nullptr ;
|
||||
}
|
||||
s_nContext = 0 ;
|
||||
return bOk ;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user