// Inclusion du fichier d'entête #include "actions/tufr_actionsteptutorial04.h" // Inclure ensuite les éventuelles classes de définitions nécessaires à votre étape // Inclusion pour la gestion des rendus en cours d'étape #include "documentinterface.h" #include "painterinterface.h" // Pour afficher des messages à la console #include // Pour inclure certaines fonctions mathématiques #include // Constructeur du conteneur TUFR_ActionStepTutorial04::TUFR_ActionStepTutorial04_dataContainer::TUFR_ActionStepTutorial04_dataContainer() { _limitBuffer = 0.0; } // Constructeur : appel du constructeur de la classe mère // et initialisation des paramètres (valeurs par défaut) TUFR_ActionStepTutorial04::TUFR_ActionStepTutorial04(TUFR_ActionStepTutorial04_dataContainer *dataContainer) : CT_AbstractActionForGraphicsView() { _dataContainer = dataContainer; } // Destructeur TUFR_ActionStepTutorial04::~TUFR_ActionStepTutorial04() { } // Méthodes caractéristiques de l'actions QString TUFR_ActionStepTutorial04::uniqueName() const { return QString(tr("TUFR_ActionStepTutorial04")); } QString TUFR_ActionStepTutorial04::title() const { return QString(tr("Action RefPoint(Barycentre) Buffer")); } QString TUFR_ActionStepTutorial04::description() const { return QString(tr("Definir la limite du buffer d'un RefPoint(Barycentre)")); } QIcon TUFR_ActionStepTutorial04::icon() const { return QIcon(); // Pas d'icone ici, mais on pourrait utiliser le chemin d'une ressource Qt } QString TUFR_ActionStepTutorial04::type() const { return CT_AbstractAction::TYPE_INFORMATION; } // Initialisation lors de la création void TUFR_ActionStepTutorial04::init() { // On utilise la méchote de la classe mère CT_AbstractActionForGraphicsView::init(); if(nOptions() == 0) { // Create the 'option' widget if it was not already created TUFR_ActionStepTutorial04Options *option = new TUFR_ActionStepTutorial04Options(this); // Add the options to the graphics view graphicsView()->addActionOptions(option); // Put the default value of the options in the action bar option->setLimitBuffer(_dataContainer->_limitBuffer); // Connect the manual modifications with the values and the scene connect(option, SIGNAL(parametersChanged()), this, SLOT(update())); // Register the option to the superclass, so the hideOptions and showOptions is managed automatically registerOption(option); // On ajoute les éléments graphiques à notre nouvelle scène for (int i = 0 ; i < _dataContainer->_sceneList->size() ; i++) { document()->addItemDrawable(*(_dataContainer->_sceneList->at(i))); } // On met à jour la scène document()->redrawGraphics(); //On adapte le champ de vue de la caméra en fonction de notre scène de points dynamic_cast(document()->views().first())->camera()->fitCameraToVisibleItems(); } } // Lorsqu'on agit avec le rendu, il faut parfois le mettre à jour, via ce slot void TUFR_ActionStepTutorial04::update() { // On récupère le contenu des options TUFR_ActionStepTutorial04Options *option = static_cast(optionAt(0)); // On met à jour le(s) paramètre(s) _dataContainer->_limitBuffer = option->getLimitBuffer(); // On refait le rendu de la scene après avoir changé les paramètres, au cas où ils auraient une influence sur elle. setDrawing3DChanged(); document()->redrawGraphics(); } // Méthodes pour l'intéraction bool TUFR_ActionStepTutorial04::mousePressEvent(QMouseEvent *e) { Q_UNUSED(e); return false; } bool TUFR_ActionStepTutorial04::mouseMoveEvent(QMouseEvent *e) { Q_UNUSED(e); return false; } bool TUFR_ActionStepTutorial04::mouseReleaseEvent(QMouseEvent *e) { Q_UNUSED(e); return false; } bool TUFR_ActionStepTutorial04::wheelEvent(QWheelEvent *e) { // On récupère le contenu des options TUFR_ActionStepTutorial04Options *option = static_cast(optionAt(0)); // On permet de modifier la valeur du paramètre avec la molette if (e->modifiers() & Qt::ControlModifier) { if (e->angleDelta().y() > 0) { option->setLimitBuffer(option->getLimitBuffer() + 1.0); } else if (e->angleDelta().y() < 0) { option->setLimitBuffer(option->getLimitBuffer() - 1.0); } // Une fois le paramètre modifié, on met à jour la scène complète. update(); // L'évènement s'est bien passé quelque chose à été fait : on retourne "vrai". return true; } return false; } bool TUFR_ActionStepTutorial04::keyPressEvent(QKeyEvent *e) { Q_UNUSED(e); return false; } bool TUFR_ActionStepTutorial04::keyReleaseEvent(QKeyEvent *e) { Q_UNUSED(e); return false; } void TUFR_ActionStepTutorial04::draw(GraphicsViewInterface &view, PainterInterface &painter) { Q_UNUSED(view); Q_UNUSED(painter); } void TUFR_ActionStepTutorial04::drawOverlay(GraphicsViewInterface &view, QPainter &painter) { Q_UNUSED(view); Q_UNUSED(painter); } // Méthode de copie de l'action CT_AbstractAction* TUFR_ActionStepTutorial04::createInstance() const { return new TUFR_ActionStepTutorial04(_dataContainer); }