Blender V5.0
GEO_uv_pack.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include "BLI_heap.h"
8#include "BLI_memarena.h"
9#include "BLI_span.hh"
10#include "BLI_vector.hh"
11
12#include "DNA_space_types.h"
13
17
18struct UnwrapOptions;
19
28
43
52
67
68namespace blender::geometry {
69
117
118class UVPhi;
120 public:
121 PackIsland();
122
124 float aspect_y;
126 bool pinned;
130 float angle;
133
134 void add_triangle(float2 uv0, float2 uv1, float2 uv2);
135 void add_polygon(Span<float2> uvs, MemArena *arena, Heap *heap);
136
137 void build_transformation(float scale, double angle, float r_matrix[2][2]) const;
138 void build_inverse_transformation(float scale, double angle, float r_matrix[2][2]) const;
139
140 float2 get_diagonal_support(float scale, float rotation, float margin) const;
141 float2 get_diagonal_support_d4(float scale, float rotation, float margin) const;
142
148
149 void place_(float scale, UVPhi phi);
150 void finalize_geometry_(const UVPackIsland_Params &params, MemArena *arena, Heap *heap);
157 bool can_rotate_(const UVPackIsland_Params &params) const;
158 bool can_scale_(const UVPackIsland_Params &params) const;
159 bool can_translate_(const UVPackIsland_Params &params) const;
160
162
163 private:
164 void calculate_pivot_(); /* Calculate `pivot_` and `half_diagonal_` based on added triangles. */
165 void calculate_pre_rotation_(const UVPackIsland_Params &params);
166
167 friend class Occupancy;
168 friend class OverlapMerger;
169};
170
172
174void mul_v2_m2_add_v2v2(float r[2], const float mat[2][2], const float a[2], const float b[2]);
175
176} // namespace blender::geometry
A min-heap / priority queue ADT.
eUVPackIsland_MarginMethod
@ ED_UVPACK_MARGIN_FRACTION
@ ED_UVPACK_MARGIN_SCALED
@ ED_UVPACK_MARGIN_ADD
eUVPackIsland_ShapeMethod
@ ED_UVPACK_SHAPE_AABB
@ ED_UVPACK_SHAPE_CONCAVE
@ ED_UVPACK_SHAPE_CONVEX
eUVPackIsland_PinMethod
@ ED_UVPACK_PIN_NONE
@ ED_UVPACK_PIN_LOCK_ROTATION_SCALE
@ ED_UVPACK_PIN_LOCK_SCALE
@ ED_UVPACK_PIN_LOCK_ROTATION
@ ED_UVPACK_PIN_IGNORE
@ ED_UVPACK_PIN_LOCK_ALL
eUVPackIsland_RotationMethod
@ ED_UVPACK_ROTATION_ANY
@ ED_UVPACK_ROTATION_AXIS_ALIGNED_X
@ ED_UVPACK_ROTATION_AXIS_ALIGNED
@ ED_UVPACK_ROTATION_CARDINAL
@ ED_UVPACK_ROTATION_NONE
@ ED_UVPACK_ROTATION_AXIS_ALIGNED_Y
float2 get_diagonal_support_d4(float scale, float rotation, float margin) const
void place_(float scale, UVPhi phi)
Definition uv_pack.cc:388
bool can_scale_(const UVPackIsland_Params &params) const
Definition uv_pack.cc:2409
void finalize_geometry_(const UVPackIsland_Params &params, MemArena *arena, Heap *heap)
Definition uv_pack.cc:314
bool can_rotate_before_pack_(const UVPackIsland_Params &params) const
Definition uv_pack.cc:2395
void add_polygon(Span< float2 > uvs, MemArena *arena, Heap *heap)
Definition uv_pack.cc:155
void build_transformation(float scale, double angle, float r_matrix[2][2]) const
Definition uv_pack.cc:2332
void build_inverse_transformation(float scale, double angle, float r_matrix[2][2]) const
Definition uv_pack.cc:2350
bool can_rotate_(const UVPackIsland_Params &params) const
Definition uv_pack.cc:2404
Vector< float2 > triangle_vertices_
bool can_translate_(const UVPackIsland_Params &params) const
Definition uv_pack.cc:2427
void add_triangle(float2 uv0, float2 uv1, float2 uv2)
Definition uv_pack.cc:140
float2 get_diagonal_support(float scale, float rotation, float margin) const
Definition uv_pack.cc:1264
eUVPackIsland_RotationMethod rotate_method
eUVPackIsland_MarginMethod margin_method
eUVPackIsland_ShapeMethod shape_method
void setUDIMOffsetFromSpaceImage(const SpaceImage *sima)
eUVPackIsland_PinMethod pin_method
void setFromUnwrapOptions(const UnwrapOptions &options)
CCL_NAMESPACE_BEGIN struct Options options
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void mul_v2_m2_add_v2v2(float r[2], const float mat[2][2], const float a[2], const float b[2])
Definition uv_pack.cc:46
float pack_islands(Span< PackIsland * > islands, const UVPackIsland_Params &params)
VecBase< float, 2 > float2