35 #include "RNA_prototypes.h"
74 bool do_add_own_transform =
false;
79 do_add_own_transform =
true;
82 if (do_add_own_transform) {
99 float(*coords)[3], (*co)[3];
101 int i, verts_num, polys_num, loops_num;
105 int projectors_num = 0;
119 if (projectors_num == 0) {
134 for (i = 0; i < projectors_num; i++) {
136 float offsetmat[4][4];
161 params.viewplane.xmin *= scax;
162 params.viewplane.xmax *= scax;
163 params.viewplane.ymin *= scay;
164 params.viewplane.ymax *= scay;
176 offsetmat[3][0] = offsetmat[3][1] = offsetmat[3][2] = 0.5;
178 mul_m4_m4m4(projectors[i].projmat, offsetmat, tmpmat);
181 projectors[i].
normal[0] = 0;
182 projectors[i].
normal[1] = 0;
183 projectors[i].
normal[2] = 1;
197 for (i = 0, co = coords; i < verts_num; i++, co++) {
202 if (projectors_num == 1 && projectors[0].uci ==
NULL) {
203 for (i = 0, co = coords; i < verts_num; i++, co++) {
212 for (i = 0, mp = mpoly; i < polys_num; i++, mp++) {
213 if (projectors_num == 1) {
214 if (projectors[0].uci) {
218 uint vidx = mloop[lidx].
v;
227 uint vidx = mloop[lidx].
v;
241 mp, mloop + mp->
loopstart, (
const float(*)[3])coords, face_no);
247 best_projector = &projectors[0];
249 for (j = 1; j < projectors_num; j++) {
251 if (tmp_dot > best_dot) {
253 best_projector = &projectors[j];
257 if (best_projector->
uci) {
261 uint vidx = mloop[lidx].
v;
269 uint vidx = mloop[lidx].
v;
280 for (j = 0; j < projectors_num; j++) {
281 if (projectors[j].uci) {
317 bool has_camera =
false;
337 uiItemR(layout,
ptr,
"projector_count", 0,
IFACE_(
"Projectors"), ICON_NONE);
339 uiItemR(layout, &projector_ptr,
"object", 0,
NULL, ICON_NONE);
353 "UVProjectModifierData",
355 &RNA_UVProjectModifier,
typedef float(TangentPoint)[2]
Camera data-block and utility functions.
void BKE_camera_params_init(CameraParams *params)
void BKE_camera_params_from_object(CameraParams *params, const struct Object *cam_ob)
void BKE_camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float aspx, float aspy)
void BKE_camera_params_compute_matrix(CameraParams *params)
bool CustomData_has_layer(const struct CustomData *data, int type)
void * CustomData_duplicate_referenced_layer_named(struct CustomData *data, int type, const char *name, int totelem)
void * CustomData_add_layer_named(struct CustomData *data, int type, eCDAllocType alloctype, void *layer, int totelem, const char *name)
void CustomData_validate_layer_name(const struct CustomData *data, int type, const char *name, char *outname)
General operations, lookup, etc. for materials.
float(* BKE_mesh_vert_coords_alloc(const struct Mesh *mesh, int *r_vert_len))[3]
void BKE_mesh_calc_poly_normal_coords(const struct MPoly *mpoly, const struct MLoop *loopstart, const float(*vertex_coords)[3], float r_no[3])
void(* IDWalkFunc)(void *userData, struct Object *ob, struct ID **idpoin, int cb_flag)
@ eModifierTypeFlag_SupportsMapping
@ eModifierTypeFlag_EnableInEditmode
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_copydata_generic(const struct ModifierData *md, struct ModifierData *md_dst, int flag)
@ eModifierTypeType_NonGeometrical
void mul_project_m4_v3(const float M[4][4], float vec[3])
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void mul_mat3_m4_fl(float R[4][4], float f)
void unit_m4(float m[4][4])
void mul_mat3_m4_v3(const float M[4][4], float r[3])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
void mul_v2_project_m4_v3(float r[2], const float M[4][4], const float vec[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
void BLI_uvproject_from_camera(float target[2], float source[3], struct ProjCameraInfo *uci)
struct ProjCameraInfo * BLI_uvproject_camera_info(struct Object *ob, float rotmat[4][4], float winx, float winy)
void BLI_uvproject_camera_info_scale(struct ProjCameraInfo *uci, float scale_x, float scale_y)
void DEG_add_object_relation(struct DepsNodeHandle *node_handle, struct Object *object, eDepsObjectComponentType component, const char *description)
void DEG_add_modifier_to_transform_relation(struct DepsNodeHandle *node_handle, const char *description)
#define MAX_CUSTOMDATA_LAYER_NAME
#define DNA_struct_default_get(struct_name)
struct UVProjectModifierData UVProjectModifierData
@ eModifierType_UVProject
#define MOD_UVPROJECT_MAXPROJECTORS
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
static Mesh * modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
static Mesh * uvprojectModifier_do(UVProjectModifierData *umd, const ModifierEvalContext *UNUSED(ctx), Object *ob, Mesh *mesh)
static void requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md), CustomData_MeshMasks *r_cddata_masks)
ModifierTypeInfo modifierType_UVProject
static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *userData)
static void panel_draw(const bContext *UNUSED(C), Panel *panel)
struct Projector Projector
static void initData(ModifierData *md)
static void panelRegister(ARegionType *region_type)
#define RNA_BEGIN(sptr, itemptr, propname)
void uiLayoutSetActive(uiLayout *layout, bool active)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
void uiItemPointerR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, struct PointerRNA *searchptr, const char *searchpropname, const char *name, int icon)
IconTextureDrawCall normal
void(* MEM_freeN)(void *vmemh)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
int RNA_enum_get(PointerRNA *ptr, const char *name)
struct DepsNodeHandle * node
struct Object * projectors[10]