main.cpp 范例文件
					 
					
						volumetric/main.cpp
					 
					
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Data Visualization module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/ 
#include "volumetric.h" 
#include <QtWidgets/QApplication> 
#include <QtWidgets/QWidget> 
#include <QtWidgets/QHBoxLayout> 
#include <QtWidgets/QVBoxLayout> 
#include <QtWidgets/QRadioButton> 
#include <QtWidgets/QSlider> 
#include <QtWidgets/QCheckBox> 
#include <QtWidgets/QLabel> 
#include <QtWidgets/QGroupBox> 
#include <QtWidgets/QMessageBox> 
#include <QtGui/QScreen> 
int  main(int  argc,  char  * * argv)
{
    QApplication ,  argv);
    Q3DScatter * graph =  new  Q3DScatter QWidget * container =  QWidget :: createWindowContainer(graph);
    if  (! graph- > hasContext()) {
        QMessageBox . setText("Couldn't initialize the OpenGL context." );
        msgBox. exec();
        return  - 1 ;
    }
    QSize =  graph- > screen()- > size();
    container- > setMinimumSize(QSize . width() /  3 ,  screenSize. height() /  3 ));
    container- > setMaximumSize(screenSize);
    container- > setSizePolicy(QSizePolicy :: Expanding,  QSizePolicy :: Expanding);
    container- > setFocusPolicy(Qt :: StrongFocus);
    QWidget * widget =  new  QWidget QHBoxLayout * hLayout =  new  QHBoxLayout QVBoxLayout * vLayout =  new  QVBoxLayout QVBoxLayout * vLayout2 =  new  QVBoxLayout - > addWidget(container,  1 );
    hLayout- > addLayout(vLayout);
    hLayout- > addLayout(vLayout2);
    widget- > setWindowTitle(QStringLiteral "Volumetric object example - 3D terrain" ));
    QCheckBox * sliceXCheckBox =  new  QCheckBox - > setText(QStringLiteral "Slice volume on X axis" ));
    sliceXCheckBox- > setChecked(false );
    QCheckBox * sliceYCheckBox =  new  QCheckBox - > setText(QStringLiteral "Slice volume on Y axis" ));
    sliceYCheckBox- > setChecked(false );
    QCheckBox * sliceZCheckBox =  new  QCheckBox - > setText(QStringLiteral "Slice volume on Z axis" ));
    sliceZCheckBox- > setChecked(false );
    QSlider * sliceXSlider =  new  QSlider Qt :: Horizontal,  widget);
    sliceXSlider- > setMinimum(0 );
    sliceXSlider- > setMaximum(1024 );
    sliceXSlider- > setValue(512 );
    sliceXSlider- > setEnabled(true );
    QSlider * sliceYSlider =  new  QSlider Qt :: Horizontal,  widget);
    sliceYSlider- > setMinimum(0 );
    sliceYSlider- > setMaximum(1024 );
    sliceYSlider- > setValue(512 );
    sliceYSlider- > setEnabled(true );
    QSlider * sliceZSlider =  new  QSlider Qt :: Horizontal,  widget);
    sliceZSlider- > setMinimum(0 );
    sliceZSlider- > setMaximum(1024 );
    sliceZSlider- > setValue(512 );
    sliceZSlider- > setEnabled(true );
    QCheckBox * fpsCheckBox =  new  QCheckBox - > setText(QStringLiteral "Show FPS" ));
    fpsCheckBox- > setChecked(false );
    QLabel * fpsLabel =  new  QLabel QStringLiteral "" ),  widget);
    QGroupBox * textureDetailGroupBox =  new  QGroupBox QStringLiteral "Texture detail" ));
    QRadioButton * lowDetailRB =  new  QRadioButton - > setText(QStringLiteral "Low (128x64x128)" ));
    lowDetailRB- > setChecked(true );
    QRadioButton * mediumDetailRB =  new  QRadioButton - > setText(QStringLiteral "Generating..." ));
    mediumDetailRB- > setChecked(false );
    mediumDetailRB- > setEnabled(false );
    QRadioButton * highDetailRB =  new  QRadioButton - > setText(QStringLiteral "Generating..." ));
    highDetailRB- > setChecked(false );
    highDetailRB- > setEnabled(false );
    QVBoxLayout * textureDetailVBox =  new  QVBoxLayout - > addWidget(lowDetailRB);
    textureDetailVBox- > addWidget(mediumDetailRB);
    textureDetailVBox- > addWidget(highDetailRB);
    textureDetailGroupBox- > setLayout(textureDetailVBox);
    QGroupBox * areaGroupBox =  new  QGroupBox QStringLiteral "Show area" ));
    QRadioButton * areaAllRB =  new  QRadioButton - > setText(QStringLiteral "Whole region" ));
    areaAllRB- > setChecked(true );
    QRadioButton * areaMineRB =  new  QRadioButton - > setText(QStringLiteral "The mine" ));
    areaMineRB- > setChecked(false );
    QRadioButton * areaMountainRB =  new  QRadioButton - > setText(QStringLiteral "The mountain" ));
    areaMountainRB- > setChecked(false );
    QVBoxLayout * areaVBox =  new  QVBoxLayout - > addWidget(areaAllRB);
    areaVBox- > addWidget(areaMineRB);
    areaVBox- > addWidget(areaMountainRB);
    areaGroupBox- > setLayout(areaVBox);
    QCheckBox * colorTableCheckBox =  new  QCheckBox - > setText(QStringLiteral "Alternate color table" ));
    colorTableCheckBox- > setChecked(false );
    QLabel * sliceImageXLabel =  new  QLabel QLabel * sliceImageYLabel =  new  QLabel QLabel * sliceImageZLabel =  new  QLabel - > setMinimumSize(QSize 200 ,  100 ));
    sliceImageYLabel- > setMinimumSize(QSize 200 ,  200 ));
    sliceImageZLabel- > setMinimumSize(QSize 200 ,  100 ));
    sliceImageXLabel- > setMaximumSize(QSize 200 ,  100 ));
    sliceImageYLabel- > setMaximumSize(QSize 200 ,  200 ));
    sliceImageZLabel- > setMaximumSize(QSize 200 ,  100 ));
    sliceImageXLabel- > setFrameShape(QFrame :: Box);
    sliceImageYLabel- > setFrameShape(QFrame :: Box);
    sliceImageZLabel- > setFrameShape(QFrame :: Box);
    sliceImageXLabel- > setScaledContents(true );
    sliceImageYLabel- > setScaledContents(true );
    sliceImageZLabel- > setScaledContents(true );
    QSlider * alphaMultiplierSlider =  new  QSlider Qt :: Horizontal,  widget);
    alphaMultiplierSlider- > setMinimum(0 );
    alphaMultiplierSlider- > setMaximum(139 );
    alphaMultiplierSlider- > setValue(100 );
    alphaMultiplierSlider- > setEnabled(true );
    QLabel * alphaMultiplierLabel =  new  QLabel QStringLiteral "Alpha multiplier: 1.0" ));
    QCheckBox * preserveOpacityCheckBox =  new  QCheckBox - > setText(QStringLiteral "Preserve opacity" ));
    preserveOpacityCheckBox- > setChecked(true );
    QCheckBox * transparentGroundCheckBox =  new  QCheckBox - > setText(QStringLiteral "Transparent ground" ));
    transparentGroundCheckBox- > setChecked(false );
    QCheckBox * useHighDefShaderCheckBox =  new  QCheckBox - > setText(QStringLiteral "Use HD shader" ));
    useHighDefShaderCheckBox- > setChecked(true );
    QLabel * performanceNoteLabel = 
            new  QLabel QStringLiteral "Note: A high end graphics card is\nrecommended with the HD shader\nwhen the volume contains a lot of\ntransparent areas." ));
    performanceNoteLabel- > setFrameShape(QFrame :: Box);
    QCheckBox * drawSliceFramesCheckBox =  new  QCheckBox - > setText(QStringLiteral "Draw slice frames" ));
    drawSliceFramesCheckBox- > setChecked(false );
    vLayout- > addWidget(sliceXCheckBox);
    vLayout- > addWidget(sliceXSlider);
    vLayout- > addWidget(sliceImageXLabel);
    vLayout- > addWidget(sliceYCheckBox);
    vLayout- > addWidget(sliceYSlider);
    vLayout- > addWidget(sliceImageYLabel);
    vLayout- > addWidget(sliceZCheckBox);
    vLayout- > addWidget(sliceZSlider);
    vLayout- > addWidget(sliceImageZLabel);
    vLayout- > addWidget(drawSliceFramesCheckBox,  1 ,  Qt :: AlignTop);
    vLayout2- > addWidget(fpsCheckBox);
    vLayout2- > addWidget(fpsLabel);
    vLayout2- > addWidget(textureDetailGroupBox);
    vLayout2- > addWidget(areaGroupBox);
    vLayout2- > addWidget(colorTableCheckBox);
    vLayout2- > addWidget(alphaMultiplierLabel);
    vLayout2- > addWidget(alphaMultiplierSlider);
    vLayout2- > addWidget(preserveOpacityCheckBox);
    vLayout2- > addWidget(transparentGroundCheckBox);
    vLayout2- > addWidget(useHighDefShaderCheckBox);
    vLayout2- > addWidget(performanceNoteLabel,  1 ,  Qt :: AlignTop);
    VolumetricModifier * modifier =  new  VolumetricModifier(graph);
    modifier- > setFpsLabel(fpsLabel);
    modifier- > setMediumDetailRB(mediumDetailRB);
    modifier- > setHighDetailRB(highDetailRB);
    modifier- > setSliceSliders(sliceXSlider,  sliceYSlider,  sliceZSlider);
    modifier- > setSliceLabels(sliceImageXLabel,  sliceImageYLabel,  sliceImageZLabel);
    modifier- > setAlphaMultiplierLabel(alphaMultiplierLabel);
    modifier- > setTransparentGround(transparentGroundCheckBox- > isChecked());
    QObject :: connect(fpsCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & VolumetricModifier:: setFpsMeasurement);
    QObject :: connect(sliceXCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & VolumetricModifier:: sliceX);
    QObject :: connect(sliceYCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & VolumetricModifier:: sliceY);
    QObject :: connect(sliceZCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & VolumetricModifier:: sliceZ);
    QObject :: connect(sliceXSlider,  & QSlider :: valueChanged,  modifier, 
                     & VolumetricModifier:: adjustSliceX);
    QObject :: connect(sliceYSlider,  & QSlider :: valueChanged,  modifier, 
                     & VolumetricModifier:: adjustSliceY);
    QObject :: connect(sliceZSlider,  & QSlider :: valueChanged,  modifier, 
                     & VolumetricModifier:: adjustSliceZ);
    QObject :: connect(lowDetailRB,  & QRadioButton :: toggled,  modifier, 
                     & VolumetricModifier:: toggleLowDetail);
    QObject :: connect(mediumDetailRB,  & QRadioButton :: toggled,  modifier, 
                     & VolumetricModifier:: toggleMediumDetail);
    QObject :: connect(highDetailRB,  & QRadioButton :: toggled,  modifier, 
                     & VolumetricModifier:: toggleHighDetail);
    QObject :: connect(colorTableCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & VolumetricModifier:: changeColorTable);
    QObject :: connect(preserveOpacityCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & VolumetricModifier:: setPreserveOpacity);
    QObject :: connect(transparentGroundCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & VolumetricModifier:: setTransparentGround);
    QObject :: connect(useHighDefShaderCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & VolumetricModifier:: setUseHighDefShader);
    QObject :: connect(alphaMultiplierSlider,  & QSlider :: valueChanged,  modifier, 
                     & VolumetricModifier:: adjustAlphaMultiplier);
    QObject :: connect(areaAllRB,  & QRadioButton :: toggled,  modifier, 
                     & VolumetricModifier:: toggleAreaAll);
    QObject :: connect(areaMineRB,  & QRadioButton :: toggled,  modifier, 
                     & VolumetricModifier:: toggleAreaMine);
    QObject :: connect(areaMountainRB,  & QRadioButton :: toggled,  modifier, 
                     & VolumetricModifier:: toggleAreaMountain);
    QObject :: connect(drawSliceFramesCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & VolumetricModifier:: setDrawSliceFrames);
    widget- > show();
    return  app. exec();
}