Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Classes principales  ·  Annotées  ·  Classes groupées  ·  Modules  ·  Fonctions  · 

meshobject.cpp Example File

qt3d/teaservice/meshobject.cpp
 /****************************************************************************
 **
 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
 ** Contact: http://www.qt-project.org/
 **
 ** This file is part of the Qt3D module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** GNU Lesser General Public License Usage
 ** This file may be used under the terms of the GNU Lesser General Public
 ** License version 2.1 as published by the Free Software Foundation and
 ** appearing in the file LICENSE.LGPL included in the packaging of this
 ** file. Please review the following information to ensure the GNU Lesser
 ** General Public License version 2.1 requirements will be met:
 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 **
 ** In addition, as a special exception, Nokia gives you certain additional
 ** rights. These rights are described in the Nokia Qt LGPL Exception
 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
 **
 ** GNU General Public License Usage
 ** Alternatively, this file may be used under the terms of the GNU General
 ** Public License version 3.0 as published by the Free Software Foundation
 ** and appearing in the file LICENSE.GPL included in the packaging of this
 ** file. Please review the following information to ensure the GNU General
 ** Public License version 3.0 requirements will be met:
 ** http://www.gnu.org/copyleft/gpl.html.
 **
 ** Other Usage
 ** Alternatively, this file may be used in accordance with the terms and
 ** conditions contained in a signed written agreement between you and Nokia.
 **
 **
 **
 **
 **
 **
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/

 #include "meshobject.h"
 #include "qglview.h"

 MeshObject::MeshObject(QGLSceneNode *meshObject, QObject *parent)
     : QObject(parent)
 {
     m_mesh = 0;
     m_meshObject = meshObject;
     m_scale = 1.0f;
     m_rotationAngle = 0.0f;
     m_effect = 0;
     m_objectId = -1;
     m_hovering = false;
     m_material = 0;
     m_hoverMaterial = 0;
 }

 MeshObject::MeshObject(QGLAbstractScene *scene, QObject *parent)
     : QObject(parent)
 {
     scene->setParent(this);
     m_mesh = 0;
     m_meshObject = scene->mainNode();
     m_scale = 1.0f;
     m_rotationAngle = 0.0f;
     m_effect = 0;
     m_objectId = -1;
     m_hovering = false;
     m_material = 0;
     m_hoverMaterial = 0;
 }

 MeshObject::~MeshObject()
 {
     delete m_mesh;
 }

 void MeshObject::initialize(QGLView *view, QGLPainter *painter)
 {
     Q_UNUSED(painter);
     if (m_objectId != -1)
         view->registerObject(m_objectId, this);
 }

 void MeshObject::draw(QGLPainter *painter)
 {
     // Position the model at its designated position, scale, and orientation.
     painter->modelViewMatrix().push();
     painter->modelViewMatrix().translate(m_position);
     if (m_scale != 1.0f)
         painter->modelViewMatrix().scale(m_scale);
     if (m_rotationAngle != 0.0f)
         painter->modelViewMatrix().rotate(m_rotationAngle, m_rotationVector);

     // Apply the material and effect to the painter.
     QGLMaterial *material;
     if (m_hovering)
         material = m_hoverMaterial;
     else
         material = m_material;
     painter->setColor(material->diffuseColor());
     painter->setFaceMaterial(QGL::AllFaces, material);
     if (m_effect)
         painter->setUserEffect(m_effect);
     else
         painter->setStandardEffect(QGL::LitMaterial);

     // Mark the object for object picking purposes.
     int prevObjectId = painter->objectPickId();
     if (m_objectId != -1)
         painter->setObjectPickId(m_objectId);

     // Draw the geometry mesh.
     if (m_meshObject)
         m_meshObject->draw(painter);
     else
         m_mesh->draw(painter);

     // Turn off the user effect, if present.
     if (m_effect)
         painter->setStandardEffect(QGL::LitMaterial);

     // Revert to the previous object identifier.
     painter->setObjectPickId(prevObjectId);

     // Restore the modelview matrix.
     painter->modelViewMatrix().pop();
 }

 bool MeshObject::event(QEvent *e)
 {
     // Convert the raw event into a signal representing the user's action.
     if (e->type() == QEvent::MouseButtonPress) {
         QMouseEvent *me = (QMouseEvent *)e;
         if (me->button() == Qt::LeftButton)
             emit pressed();
     } else if (e->type() == QEvent::MouseButtonRelease) {
         QMouseEvent *me = (QMouseEvent *)e;
         if (me->button() == Qt::LeftButton) {
             emit released();
             if (me->x() >= 0)   // Positive: inside object, Negative: outside.
                 emit clicked();
         }
     } else if (e->type() == QEvent::MouseButtonDblClick) {
         emit doubleClicked();
     } else if (e->type() == QEvent::Enter) {
         m_hovering = true;
         emit hoverChanged();
     } else if (e->type() == QEvent::Leave) {
         m_hovering = false;
         emit hoverChanged();
     }
     return QObject::event(e);
 }
Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 5.0-snapshot
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web