image_framework_ymj/include/open3d/visualization/gui/UIImage.h

92 lines
2.9 KiB
C
Raw Permalink Normal View History

2024-12-06 16:25:16 +08:00
// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2023 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include "open3d/visualization/gui/Widget.h"
#include "open3d/visualization/rendering/RendererHandle.h"
namespace open3d {
namespace t {
namespace geometry {
class Image;
}
}
namespace geometry {
class Image;
} // namespace geometry
namespace visualization {
namespace rendering {
class Renderer;
}
namespace gui {
class UIImage {
public:
explicit UIImage(const char* image_path);
explicit UIImage(std::shared_ptr<geometry::Image> image);
explicit UIImage(std::shared_ptr<t::geometry::Image> image);
/// Uses an existing texture, using texture coordinates
/// (u0, v0) to (u1, v1). Does not deallocate texture on destruction.
/// This is useful for using an icon atlas to reduce draw calls.
explicit UIImage(visualization::rendering::TextureHandle texture_id,
float u0 = 0.0f,
float v0 = 0.0f,
float u1 = 1.0f,
float v1 = 1.0f);
~UIImage();
/// Updates the contents of the texture. If the image is a different
/// size from the original, a new texture will be created.
void UpdateImage(std::shared_ptr<geometry::Image> image);
/// Updates the contents of the texture. If the image is a different
/// size from the original, a new texture will be created.
void UpdateImage(std::shared_ptr<t::geometry::Image> image);
enum class Scaling {
NONE, /// No scaling, fixed size
ANY, /// Scales to any size and aspect ratio
ASPECT /// Scales to any size, but fixed aspect ratio (default)
};
void SetScaling(Scaling scaling);
Scaling GetScaling() const;
Size CalcPreferredSize(const LayoutContext& context,
const Widget::Constraints& constraints) const;
struct DrawParams {
// Default values are to make GCC happy and contented,
// pos and size don't have reasonable defaults.
float pos_x = 0.0f;
float pos_y = 0.0f;
float width = 0.0f;
float height = 0.0f;
float u0 = 0.0f;
float v0 = 0.0f;
float u1 = 1.0f;
float v1 = 1.0f;
visualization::rendering::TextureHandle texture;
bool image_size_changed = false;
};
DrawParams CalcDrawParams(visualization::rendering::Renderer& renderer,
const Rect& frame) const;
private:
struct Impl;
std::unique_ptr<Impl> impl_;
};
} // namespace gui
} // namespace visualization
} // namespace open3d