Appleseed: Déplacez Frame::write() et Frame::archive() vers des classes séparées

Créé le 17 oct. 2011  ·  10Commentaires  ·  Source: appleseedhq/appleseed

Par exemple renderer::FrameWriter et renderer::FrameArchiver .

Refactoring Good First Issue

Tous les 10 commentaires

je vais travailler sur celui-ci

Pourquoi auriez-vous besoin de faire ça ? Quelle serait l'intention de ces deux classes? Je suis juste curieux.

André : excellent !

Dorian : C'est juste une refactorisation. Le code d'écriture d'image ajoute beaucoup d'encombrement à l'implémentation de l'entité renderer::Frame .

OK merci! :)

est-ce que quelqu'un a commencé à travailler dessus ? puis-je tenter le coup ?

Eh bien, il semble qu'André y soit déjà. André, tu travailles toujours dessus ?

Oui, désolé j'ai été occupé pendant le week-end mais je vais le faire !

Pourriez-vous fournir une classe shell pour cela? J'ai du mal à comprendre certaines parties du code et je ne trouve pas de documentation à ce sujet. Qu'est-ce que cela fait :

namespace
{
    const UniqueID g_class_uid = new_guid();
}

UniqueID Frame::get_class_uid()
{
    return g_class_uid;
}

Si j'obtiens cela correctement, je déplacerais cette fonction:

bool Frame::archive(
    const char*         directory,
    char**              output_path) const
{
    assert(directory);

    // Construct the name of the image file.
    const string filename =
        "autosave." + get_time_stamp_string() + ".exr";

    // Construct the path to the image file.
    const string file_path = (filesystem::path(directory) / filename).string();

    // Return the path to the image file.
    if (output_path)
        *output_path = duplicate_string(file_path.c_str());

    Image transformed_image(*impl->m_image);
    transform_to_output_color_space(transformed_image);

    return
        write_image(
            file_path.c_str(),
            transformed_image,
            ImageAttributes::create_default_attributes());
}

dans une classe FrameWriter . Je ne sais pas comment commencer à écrire la classe, devrait-elle ressembler à ceci :

//
// This source file is part of appleseed.
// Visit http://appleseedhq.net/ for additional information and resources.

//includes

//using namespaces

namespace renderer
{

FrameArchiver::archive(...)
{
//code from Frame::archive
}

}   // namespace renderer

Merci, j'ai juste besoin d'un coup de pouce pour commencer à programmer.

Oui, c'est en gros ça. Vous devrez créer deux nouvelles paires de fichiers ( framewriter.{h,cpp} et framearchiver.{h,cpp} ), ou peut-être juste une paire ( framewriter.{h,cpp} ) si vous pensez que cela est suffisant, ajoutez-les à le fichier CMakeLists.txt et déplacez le code vers ces nouveaux fichiers.

Maintenant:

namespace
{
    const UniqueID g_class_uid = new_guid();
}

Cela crée un nouvel ID unique local pour ce fichier. Cet ID sera utilisé pour identifier de manière unique la classe d'entité "Frame". L'ID de classe correspondant à la classe "Frame" est accessible via la méthode statique suivante :

UniqueID Frame::get_class_uid()
{
    return g_class_uid;
}

Votre classe FrameWriter n'est pas une classe d'entité, juste une classe simple, vous n'avez donc pas besoin de tout cela.

Ce numéro est à nouveau disponible.

Cette page vous a été utile?
0 / 5 - 0 notes