Appleseed: Mueva Frame :: write () y Frame :: archive () a clases separadas

Creado en 17 oct. 2011  ·  10Comentarios  ·  Fuente: appleseedhq/appleseed

Por ejemplo renderer::FrameWriter y renderer::FrameArchiver .

Refactoring Good First Issue

Todos 10 comentarios

Trabajaré en este

¿Por qué necesitarías hacer eso? ¿Cuál sería la intención de estas dos clases? Tengo curiosidad.

André: ¡excelente!

Dorian: Es solo una refactorización. El código de escritura de imágenes agrega mucho desorden a la implementación de la entidad renderer::Frame .

¡OK gracias! :)

¿Alguien empezó a trabajar en esto? ¿Puedo darle una oportunidad?

Bueno, parece que André ya está en eso. André, ¿sigues trabajando en esto?

Sí, lo siento, he estado ocupado durante el fin de semana, ¡pero lo haré!

¿Podría proporcionar una clase de shell para esto? Tengo problemas para comprender algunas partes del código y no puedo encontrar documentación al respecto. ¿Qué hace esto?

namespace
{
    const UniqueID g_class_uid = new_guid();
}

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

Si obtengo esto correctamente, movería esta función:

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

en una clase FrameWriter . Simplemente no estoy seguro de cómo comenzar a escribir la clase, debería verse algo como esto:

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

Gracias, solo necesito un impulso para comenzar a programar.

Sí, básicamente es eso. Deberá crear dos nuevos pares de archivos ( framewriter.{h,cpp} y framearchiver.{h,cpp} ), o tal vez solo un par ( framewriter.{h,cpp} ) si cree que esto es suficiente, agréguelos a el archivo CMakeLists.txt y mueva el código a estos nuevos archivos.

Ahora:

namespace
{
    const UniqueID g_class_uid = new_guid();
}

Esto crea una nueva ID única local para este archivo. Este ID se utilizará para identificar de forma única la clase de entidad "Frame". Se puede acceder al ID de clase correspondiente a la clase "Frame" mediante el siguiente método estático:

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

Su clase FrameWriter no es una clase de entidad, solo una clase simple, por lo que no necesita nada de esto.

Este problema está disponible nuevamente.

¿Fue útil esta página
0 / 5 - 0 calificaciones