Appleseed: Mova Frame :: write () e Frame :: archive () para separar classes

Criado em 17 out. 2011  ·  10Comentários  ·  Fonte: appleseedhq/appleseed

Por exemplo renderer::FrameWriter e renderer::FrameArchiver .

Refactoring Good First Issue

Todos 10 comentários

Vou trabalhar neste

Por que você precisa fazer isso? Qual seria a intenção dessas duas aulas? Eu só estou curioso.

André: excelente!

Dorian: É apenas uma refatoração. O código de escrita da imagem adiciona muita confusão à implementação da entidade renderer::Frame .

Ok, obrigado! :)

alguém começou a trabalhar nisso? posso tentar?

Bem, parece que André já está nisso. André, ainda está trabalhando nisso?

Sim, desculpe, estive ocupado durante o fim de semana, mas irei fazê-lo!

Você poderia fornecer uma classe shell para isso? Estou tendo problemas para entender algumas partes do código e não consigo encontrar documentação sobre ele. O que isso faz:

namespace
{
    const UniqueID g_class_uid = new_guid();
}

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

Se eu entendesse corretamente, moveria esta função:

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());
}

em uma classe FrameWriter . Só não tenho certeza de como começar a escrever a aula, se ela for parecida com isto:

//
// 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

Obrigado, eu só preciso de um pontapé inicial para começar a programar.

Sim, é basicamente isso. Você precisará criar dois novos pares de arquivos ( framewriter.{h,cpp} e framearchiver.{h,cpp} ), ou talvez apenas um par ( framewriter.{h,cpp} ) se achar que isso é suficiente, adicione-os a o arquivo CMakeLists.txt e mova o código para esses novos arquivos.

Agora:

namespace
{
    const UniqueID g_class_uid = new_guid();
}

Isso cria um novo ID local exclusivo para este arquivo. Este ID será usado para identificar exclusivamente a classe de entidade "Frame". O ID de classe correspondente à classe "Frame" pode ser acessado por meio do seguinte método estático:

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

Sua classe FrameWriter não é uma classe de entidade, apenas uma classe simples, então você não precisa de nada disso.

Este problema está disponível novamente.

Esta página foi útil?
0 / 5 - 0 avaliações