Skip to content
Snippets Groups Projects
Select Git revision
  • b29d12113fa6eee283590c05f28100882627dc8e
  • main default protected
  • leveleditor
  • david-author
  • clang-tidy-cleanup
  • architecture-refactoring
  • cleanUpMenus
  • doxygen-cleanup
  • project-structure-refactoring
  • interpolation
  • buildingFeatures
  • win_end_screen
  • helpMenu
  • leveleditor-placement
  • text-rendering
  • updated_unit_contextmenu
  • level-from-commandline
  • unit_contextmenu
  • player
  • engine-scaling
  • clang-tidy
21 results

Level.cpp

Blame
  • demo_plugin.cpp 18.02 KiB
    #include <pli_vis/ui/plugins/demo_plugin.hpp>
    
    #include <boost/lexical_cast.hpp>
    #include <json/json.hpp>
    #include <QTextDocument>
    
    #include <pli_vis/ui/utility/line_edit.hpp>
    #include <pli_vis/ui/utility/text_browser_sink.hpp>
    #include <pli_vis/ui/application.hpp>
    
    namespace pli
    {
    demo_plugin::demo_plugin        (QWidget* parent) : plugin(parent), buttons_{button_1, button_2, button_3, button_4, button_5, button_6, button_7, button_8, button_9, button_10}
    {
      if (!std::ifstream(presets_filepath_).good())
        create_default();
      
      for (auto& button : buttons_)
      {
        connect(button, &QPushButton::clicked, [&]
        {
          bool save  = QApplication::keyboardModifiers() & Qt::ControlModifier;
          auto index = boost::lexical_cast<std::size_t>(button->text().toStdString());
          save ? save_preset(index - 1) : load_preset(index - 1);
          logger_->info("{} preset {}.", save ? "Saved" : "Loaded", index);
        });
      }
    }
    
    void demo_plugin::start         ()
    {
      set_sink(std::make_shared<text_browser_sink>(owner_->console));
    }
    
    void demo_plugin::create_default() const
    {
      nlohmann::json json;
      json["presets"] = nlohmann::json::array({
        nlohmann::json::object(), 
        nlohmann::json::object(), 
        nlohmann::json::object(), 
        nlohmann::json::object(), 
        nlohmann::json::object(), 
        nlohmann::json::object(), 
        nlohmann::json::object(), 
        nlohmann::json::object(), 
        nlohmann::json::object(), 
        nlohmann::json::object()});
    
      std::ofstream file(presets_filepath_);
      file << std::setw(4) << json << std::endl;
    }
    void demo_plugin::load_preset   (std::size_t index) const
    {
      std::ifstream  file(presets_filepath_);
      nlohmann::json json;
      file >> json;
    
      auto  data_plugin                    = owner_->get_plugin<pli::data_plugin>              ();
      auto  interactor_plugin              = owner_->get_plugin<pli::interactor_plugin>        ();
      auto  color_plugin                   = owner_->get_plugin<pli::color_plugin>             ();
      auto  scalar_plugin                  = owner_->get_plugin<pli::scalar_plugin>            ();
      auto  fom_plugin                     = owner_->get_plugin<pli::fom_plugin>               ();
      auto  polar_plot_plugin              = owner_->get_plugin<pli::polar_plot_plugin>        ();
      auto  odf_plugin                     = owner_->get_plugin<pli::odf_plugin>               ();
      auto  local_tractography_plugin      = owner_->get_plugin<pli::local_tractography_plugin>();
    
      auto& preset                         = json["presets"][index];
      auto& data_plugin_data               = preset["data_plugin"              ];
      auto& interactor_plugin_data         = preset["interactor_plugin"        ];
      auto& color_plugin_data              = preset["color_plugin"             ];
      auto& scalar_plugin_data             = preset["scalar_plugin"            ];
      auto& fom_plugin_data                = preset["fom_plugin"               ];
      auto& polar_plot_plugin_data         = preset["polar_plot_plugin"        ];
      auto& odf_plugin_data                = preset["odf_plugin"               ];
      auto& local_tractography_plugin_data = preset["local_tractography_plugin"];
      auto& demo_plugin_data               = preset["demo_plugin"              ];
    
      data_plugin->unserialize(
        data_plugin_data["dataset"],
        { 
          data_plugin_data["offset"][0].get<std::size_t>(), 
          data_plugin_data["offset"][1].get<std::size_t>(), 
          data_plugin_data["offset"][2].get<std::size_t>() 
        },
        { 
          data_plugin_data["size"]  [0].get<std::size_t>(), 
          data_plugin_data["size"]  [1].get<std::size_t>(), 
          data_plugin_data["size"]  [2].get<std::size_t>() 
        },
        { 
          data_plugin_data["stride"][0].get<std::size_t>(), 
          data_plugin_data["stride"][1].get<std::size_t>(), 
          data_plugin_data["stride"][2].get<std::size_t>() 
        });
    
      owner_->viewer->camera()->set_translation   (
      {
        interactor_plugin_data["translation"][0].get<float>(),
        interactor_plugin_data["translation"][1].get<float>(),
        interactor_plugin_data["translation"][2].get<float>()
      });
      owner_->viewer->camera()->set_rotation_euler(
      {
        interactor_plugin_data["rotation"]   [0].get<float>(),
        interactor_plugin_data["rotation"]   [1].get<float>(),
        interactor_plugin_data["rotation"]   [2].get<float>()
      });
    
      color_plugin->set_mode    (color_plugin_data["mode"    ].get<int>  ());
      color_plugin->set_k       (color_plugin_data["k"       ].get<float>());
      color_plugin->set_inverted(color_plugin_data["invert_p"].get<bool> ());
      
      scalar_plugin->checkbox_enabled->setChecked(scalar_plugin_data["enabled"].get<bool>());
      scalar_plugin_data["mode"].get<bool>() ? scalar_plugin->checkbox_retardation->setChecked(true) : scalar_plugin->checkbox_transmittance->setChecked(true);
    
      fom_plugin->checkbox_enabled->setChecked(fom_plugin_data["enabled"].get<bool>());
      fom_plugin->line_edit_fiber_scale->setText(QString::fromStdString(std::to_string(fom_plugin_data["scale"].get<float>())));
                           
      polar_plot_plugin->checkbox_enabled            ->setChecked(polar_plot_plugin_data["enabled"  ].get<bool>());
      polar_plot_plugin->checkbox_symmetric          ->setChecked(polar_plot_plugin_data["symmetric"].get<bool>());
      polar_plot_plugin->line_edit_superpixel_size   ->setText   (QString::fromStdString(std::to_string(polar_plot_plugin_data["superpixel_size"   ].get<std::size_t>())));
      polar_plot_plugin->line_edit_angular_partitions->setText   (QString::fromStdString(std::to_string(polar_plot_plugin_data["angular_partitions"].get<std::size_t>())));
      if (polar_plot_plugin->checkbox_enabled->isChecked())
        polar_plot_plugin->button_calculate->click();
    
      odf_plugin->checkbox_enabled           ->setChecked(odf_plugin_data["enabled"  ].get<bool>());
      odf_plugin->checkbox_even_only         ->setChecked(odf_plugin_data["symmetric"].get<bool>());
      odf_plugin->line_edit_vector_block_x   ->setText   (QString::fromStdString(std::to_string(odf_plugin_data["supervoxel_extent"  ][0].get<std::size_t>())));
      odf_plugin->line_edit_vector_block_y   ->setText   (QString::fromStdString(std::to_string(odf_plugin_data["supervoxel_extent"  ][1].get<std::size_t>())));
      odf_plugin->line_edit_vector_block_z   ->setText   (QString::fromStdString(std::to_string(odf_plugin_data["supervoxel_extent"  ][2].get<std::size_t>())));
      odf_plugin->line_edit_histogram_theta  ->setText   (QString::fromStdString(std::to_string(odf_plugin_data["histogram_bins"     ][0].get<std::size_t>())));
      odf_plugin->line_edit_histogram_phi    ->setText   (QString::fromStdString(std::to_string(odf_plugin_data["histogram_bins"     ][1].get<std::size_t>())));
      odf_plugin->line_edit_maximum_sh_degree->setText   (QString::fromStdString(std::to_string(odf_plugin_data["maximum_sh_degree"  ]   .get<std::size_t>())));
      odf_plugin->line_edit_sampling_theta   ->setText   (QString::fromStdString(std::to_string(odf_plugin_data["sampling_partitions"][0].get<std::size_t>())));
      odf_plugin->line_edit_sampling_phi     ->setText   (QString::fromStdString(std::to_string(odf_plugin_data["sampling_partitions"][1].get<std::size_t>())));
      odf_plugin->checkbox_hierarchical      ->setChecked(odf_plugin_data["hierarchical"  ]   .get<bool>());
      odf_plugin->checkbox_depth_0           ->setChecked(odf_plugin_data["visible_layers"][0].get<bool>());
      odf_plugin->checkbox_depth_1           ->setChecked(odf_plugin_data["visible_layers"][1].get<bool>());
      odf_plugin->checkbox_depth_2           ->setChecked(odf_plugin_data["visible_layers"][2].get<bool>());
      odf_plugin->checkbox_depth_3           ->setChecked(odf_plugin_data["visible_layers"][3].get<bool>());
      odf_plugin->checkbox_depth_4           ->setChecked(odf_plugin_data["visible_layers"][4].get<bool>());
      odf_plugin->checkbox_depth_5           ->setChecked(odf_plugin_data["visible_layers"][5].get<bool>());
      odf_plugin->checkbox_depth_6           ->setChecked(odf_plugin_data["visible_layers"][6].get<bool>());
      odf_plugin->checkbox_depth_7           ->setChecked(odf_plugin_data["visible_layers"][7].get<bool>());
      odf_plugin->checkbox_depth_8           ->setChecked(odf_plugin_data["visible_layers"][8].get<bool>());
      odf_plugin->checkbox_depth_9           ->setChecked(odf_plugin_data["visible_layers"][9].get<bool>());
      if (odf_plugin->checkbox_enabled->isChecked())
        odf_plugin->button_calculate->click();
    
      local_tractography_plugin->checkbox_enabled           ->setChecked(local_tractography_plugin_data["enabled"].get<bool>());
      local_tractography_plugin->line_edit_offset_x         ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["offset"][0]        .get<std::size_t>())));
      local_tractography_plugin->line_edit_offset_y         ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["offset"][1]        .get<std::size_t>())));
      local_tractography_plugin->line_edit_offset_z         ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["offset"][2]        .get<std::size_t>())));
      local_tractography_plugin->line_edit_size_x           ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["size"  ][0]        .get<std::size_t>())));
      local_tractography_plugin->line_edit_size_y           ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["size"  ][1]        .get<std::size_t>())));
      local_tractography_plugin->line_edit_size_z           ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["size"  ][2]        .get<std::size_t>())));
      local_tractography_plugin->line_edit_stride_x         ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["stride"][0]        .get<std::size_t>())));
      local_tractography_plugin->line_edit_stride_y         ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["stride"][1]        .get<std::size_t>())));
      local_tractography_plugin->line_edit_stride_z         ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["stride"][2]        .get<std::size_t>())));
      local_tractography_plugin->line_edit_integration_step ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["integration_step"] .get<float>      ())));
      local_tractography_plugin->line_edit_iterations       ->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["iterations"]       .get<std::size_t>())));
      local_tractography_plugin->line_edit_streamline_radius->setText(QString::fromStdString(std::to_string(local_tractography_plugin_data["streamline_radius"].get<float>      ())));
      local_tractography_plugin->line_edit_remote_address   ->setText(QString::fromStdString(local_tractography_plugin_data["remote_address"].get<std::string>()));
      local_tractography_plugin->line_edit_dataset_folder   ->setText(QString::fromStdString(local_tractography_plugin_data["remote_folder" ].get<std::string>()));
      if(local_tractography_plugin->checkbox_enabled->isChecked())
        local_tractography_plugin->button_remote_trace->click();
      local_tractography_plugin->updateGeometry();
    
      text_content->document()->setPlainText(QString::fromStdString(std::to_string(demo_plugin_data["description"].get<float>())));
    }
    void demo_plugin::save_preset   (std::size_t index) const
    {
      std::ifstream  file(presets_filepath_);
      nlohmann::json json;
      file >> json;
      
      auto  data_plugin                    = owner_->get_plugin<pli::data_plugin>              ();
      auto  interactor_plugin              = owner_->get_plugin<pli::interactor_plugin>        ();
      auto  color_plugin                   = owner_->get_plugin<pli::color_plugin>             ();
      auto  scalar_plugin                  = owner_->get_plugin<pli::scalar_plugin>            ();
      auto  fom_plugin                     = owner_->get_plugin<pli::fom_plugin>               ();
      auto  polar_plot_plugin              = owner_->get_plugin<pli::polar_plot_plugin>        ();
      auto  odf_plugin                     = owner_->get_plugin<pli::odf_plugin>               ();
      auto  local_tractography_plugin      = owner_->get_plugin<pli::local_tractography_plugin>();
      
      auto& preset                         = json["presets"][index];
      preset["data_plugin"              ]  = nlohmann::json::object();
      preset["interactor_plugin"        ]  = nlohmann::json::object();
      preset["color_plugin"             ]  = nlohmann::json::object();
      preset["scalar_plugin"            ]  = nlohmann::json::object();
      preset["fom_plugin"               ]  = nlohmann::json::object();
      preset["polar_plot_plugin"        ]  = nlohmann::json::object();
      preset["odf_plugin"               ]  = nlohmann::json::object();
      preset["local_tractography_plugin"]  = nlohmann::json::object();
      preset["demo_plugin"              ]  = nlohmann::json::object();
      auto& data_plugin_data               = preset["data_plugin"              ];
      auto& interactor_plugin_data         = preset["interactor_plugin"        ];
      auto& color_plugin_data              = preset["color_plugin"             ];
      auto& scalar_plugin_data             = preset["scalar_plugin"            ];
      auto& fom_plugin_data                = preset["fom_plugin"               ];
      auto& polar_plot_plugin_data         = preset["polar_plot_plugin"        ];
      auto& odf_plugin_data                = preset["odf_plugin"               ];
      auto& local_tractography_plugin_data = preset["local_tractography_plugin"];
      auto& demo_plugin_data               = preset["demo_plugin"              ];
    
      data_plugin_data      ["dataset"            ] = data_plugin->filepath        ();
      data_plugin_data      ["offset"             ] = data_plugin->selection_offset();
      data_plugin_data      ["size"               ] = data_plugin->selection_bounds();
      data_plugin_data      ["stride"             ] = data_plugin->selection_stride();
      
      auto translation = owner_->viewer->camera()->translation   ();
      auto rotation    = owner_->viewer->camera()->rotation_euler();
      interactor_plugin_data["translation"        ] = {translation.x, translation.y, translation.z};
      interactor_plugin_data["rotation"           ] = {rotation   .x, rotation   .y, rotation   .z};
                                                  
      color_plugin_data     ["mode"               ] = std::uint32_t(color_plugin->mode());
      color_plugin_data     ["k"                  ] = color_plugin->k       ();
      color_plugin_data     ["invert_p"           ] = color_plugin->inverted();
                                                  
      scalar_plugin_data    ["enabled"            ] = scalar_plugin->checkbox_enabled    ->isChecked();
      scalar_plugin_data    ["mode"               ] = scalar_plugin->checkbox_retardation->isChecked(); // 0 - transmittance, 1 - retardation
                                                  
      fom_plugin_data       ["enabled"            ] = fom_plugin->checkbox_enabled->isChecked();
      fom_plugin_data       ["scale"              ] = line_edit::get_text<float>(fom_plugin->line_edit_fiber_scale);
                                                  
      polar_plot_plugin_data["enabled"            ] = polar_plot_plugin->checkbox_enabled  ->isChecked();
      polar_plot_plugin_data["symmetric"          ] = polar_plot_plugin->checkbox_symmetric->isChecked();
      polar_plot_plugin_data["superpixel_size"    ] = line_edit::get_text<std::size_t>(polar_plot_plugin->line_edit_superpixel_size);
      polar_plot_plugin_data["angular_partitions" ] = line_edit::get_text<std::size_t>(polar_plot_plugin->line_edit_angular_partitions);
                                                  
      odf_plugin_data       ["enabled"            ] = odf_plugin->checkbox_enabled  ->isChecked();
      odf_plugin_data       ["symmetric"          ] = odf_plugin->checkbox_even_only->isChecked();
      odf_plugin_data       ["supervoxel_extent"  ] = {
        line_edit::get_text<std::size_t>(odf_plugin->line_edit_vector_block_x), 
        line_edit::get_text<std::size_t>(odf_plugin->line_edit_vector_block_y), 
        line_edit::get_text<std::size_t>(odf_plugin->line_edit_vector_block_z)};
      odf_plugin_data       ["histogram_bins"     ] = {
        line_edit::get_text<std::size_t>(odf_plugin->line_edit_histogram_theta),
        line_edit::get_text<std::size_t>(odf_plugin->line_edit_histogram_phi  )};
      odf_plugin_data       ["maximum_sh_degree"  ] = 
        line_edit::get_text<std::size_t>(odf_plugin->line_edit_maximum_sh_degree);
      odf_plugin_data       ["sampling_partitions"] = {
        line_edit::get_text<std::size_t>(odf_plugin->line_edit_sampling_theta),
        line_edit::get_text<std::size_t>(odf_plugin->line_edit_sampling_phi  )};
      odf_plugin_data       ["hierarchical"       ] = odf_plugin->checkbox_hierarchical->isChecked();
      odf_plugin_data       ["visible_layers"     ] = {
        odf_plugin->checkbox_depth_0->isChecked(),
        odf_plugin->checkbox_depth_1->isChecked(),
        odf_plugin->checkbox_depth_2->isChecked(),
        odf_plugin->checkbox_depth_3->isChecked(),
        odf_plugin->checkbox_depth_4->isChecked(),
        odf_plugin->checkbox_depth_5->isChecked(),
        odf_plugin->checkbox_depth_6->isChecked(),
        odf_plugin->checkbox_depth_7->isChecked(),
        odf_plugin->checkbox_depth_8->isChecked(),
        odf_plugin->checkbox_depth_9->isChecked()};
    
      local_tractography_plugin_data["enabled"          ] = local_tractography_plugin->checkbox_enabled->isChecked();
      local_tractography_plugin_data["offset"           ] = local_tractography_plugin->seed_offset      ();
      local_tractography_plugin_data["size"             ] = local_tractography_plugin->seed_size        ();
      local_tractography_plugin_data["stride"           ] = local_tractography_plugin->seed_stride      ();
      local_tractography_plugin_data["integration_step" ] = local_tractography_plugin->step             ();
      local_tractography_plugin_data["iterations"       ] = local_tractography_plugin->iterations       ();
      local_tractography_plugin_data["streamline_radius"] = local_tractography_plugin->streamline_radius();
      local_tractography_plugin_data["remote_address"   ] = line_edit::get_text<std::string>(local_tractography_plugin->line_edit_remote_address);
      local_tractography_plugin_data["remote_folder"    ] = line_edit::get_text<std::string>(local_tractography_plugin->line_edit_dataset_folder);
    
      demo_plugin_data["description"] = text_content->document()->toPlainText().toStdString();
    
      std::ofstream mutable_file(presets_filepath_);
      mutable_file << std::setw(4) << json << std::endl;
    }
    }