Blender V4.3
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_math_matrix.hh"
9#include "BLI_memarena.h"
10#include "BLI_span.hh"
11#include "BLI_vector.hh"
12
13#include "DNA_space_types.h"
14#include "DNA_vec_types.h"
15
20struct UnwrapOptions;
21
30
45
54
69
70namespace blender::geometry {
71
119
120class UVPhi;
122 public:
123 PackIsland();
124
126 float aspect_y;
128 bool pinned;
132 float angle;
135
136 void add_triangle(float2 uv0, float2 uv1, float2 uv2);
137 void add_polygon(Span<float2> uvs, MemArena *arena, Heap *heap);
138
139 void build_transformation(float scale, double rotation, float r_matrix[2][2]) const;
140 void build_inverse_transformation(float scale, double rotation, float r_matrix[2][2]) const;
141
142 float2 get_diagonal_support(float scale, float rotation, float margin) const;
143 float2 get_diagonal_support_d4(float scale, float rotation, float margin) const;
144
150
151 void place_(float scale, UVPhi phi);
152 void finalize_geometry_(const UVPackIsland_Params &params, MemArena *arena, Heap *heap);
159 bool can_rotate_(const UVPackIsland_Params &params) const;
160 bool can_scale_(const UVPackIsland_Params &params) const;
161 bool can_translate_(const UVPackIsland_Params &params) const;
162
164
165 private:
166 void calculate_pivot_(); /* Calculate `pivot_` and `half_diagonal_` based on added triangles. */
167 void calculate_pre_rotation_(const UVPackIsland_Params &params);
168
169 friend class Occupancy;
170 friend class OverlapMerger;
171};
172
174
176void mul_v2_m2_add_v2v2(float r[2], const float mat[2][2], const float a[2], const float b[2]);
177
178} // 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:401
bool can_scale_(const UVPackIsland_Params &params) const
Definition uv_pack.cc:2428
void finalize_geometry_(const UVPackIsland_Params &params, MemArena *arena, Heap *heap)
Definition uv_pack.cc:324
bool can_rotate_before_pack_(const UVPackIsland_Params &params) const
Definition uv_pack.cc:2414
void add_polygon(Span< float2 > uvs, MemArena *arena, Heap *heap)
Definition uv_pack.cc:164
void build_inverse_transformation(float scale, double rotation, float r_matrix[2][2]) const
Definition uv_pack.cc:2369
bool can_rotate_(const UVPackIsland_Params &params) const
Definition uv_pack.cc:2423
Vector< float2 > triangle_vertices_
bool can_translate_(const UVPackIsland_Params &params) const
Definition uv_pack.cc:2446
void build_transformation(float scale, double rotation, float r_matrix[2][2]) const
Definition uv_pack.cc:2351
void add_triangle(float2 uv0, float2 uv1, float2 uv2)
Definition uv_pack.cc:149
float2 get_diagonal_support(float scale, float rotation, float margin) const
Definition uv_pack.cc:1280
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)
local_group_size(16, 16) .push_constant(Type b
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:55
float pack_islands(Span< PackIsland * > islands, const UVPackIsland_Params &params)