Appleseed: Pindahkan Frame::write() dan Frame::archive() untuk memisahkan kelas

Dibuat pada 17 Okt 2011  ·  10Komentar  ·  Sumber: appleseedhq/appleseed

Misalnya renderer::FrameWriter dan renderer::FrameArchiver .

Refactoring Good First Issue

Semua 10 komentar

Saya akan mengerjakan yang ini

Mengapa Anda perlu melakukan itu? Apa maksud dari dua kelas ini? Saya hanya penasaran.

Andre: luar biasa!

Dorian: Ini hanya refactoring. Kode penulisan gambar menambahkan banyak kekacauan pada implementasi entitas renderer::Frame .

Ok terima kasih! :)

apakah ada yang mulai mengerjakan ini? bisakah saya mencobanya?

Sepertinya André sudah ada di sana. Andre, masih mengerjakan ini?

Ya, maaf saya sibuk selama akhir pekan, tetapi saya akan melakukannya!

Bisakah Anda memberikan kelas shell untuk ini? Saya mengalami kesulitan memahami beberapa bagian kode dan saya tidak dapat menemukan dokumentasi tentangnya. Apa yang dilakukan ini:

namespace
{
    const UniqueID g_class_uid = new_guid();
}

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

Jika saya mendapatkan ini dengan benar, saya akan memindahkan fungsi ini:

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

ke dalam kelas FrameWriter . Saya hanya tidak yakin bagaimana cara mulai menulis kelas, jika terlihat seperti ini:

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

Terima kasih, saya hanya perlu beberapa permulaan untuk memulai pemrograman.

Ya, itu pada dasarnya. Anda harus membuat dua pasang file baru ( framewriter.{h,cpp} dan framearchiver.{h,cpp} ), atau mungkin hanya satu pasang ( framewriter.{h,cpp} ) jika menurut Anda ini cukup, tambahkan ke file CMakeLists.txt, dan pindahkan kode ke file baru ini.

Sekarang:

namespace
{
    const UniqueID g_class_uid = new_guid();
}

Ini membuat ID unik baru lokal untuk file ini. ID ini akan digunakan untuk mengidentifikasi kelas entitas "Frame" secara unik. ID kelas yang sesuai dengan kelas "Frame" dapat diakses melalui metode statis berikut:

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

Kelas FrameWriter bukan kelas entitas, hanya kelas biasa sehingga Anda tidak memerlukan semua ini.

Masalah ini tersedia lagi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat