89 bool do_add_own_transform =
false;
94 do_add_own_transform =
true;
97 if (do_add_own_transform) {
114 float(*coords)[3], (*co)[3];
116 int i, numVerts, numPolys, numLoops;
120 int num_projectors = 0;
134 if (num_projectors == 0) {
149 for (i = 0; i < num_projectors; i++) {
151 float offsetmat[4][4];
176 params.viewplane.xmin *= scax;
177 params.viewplane.xmax *= scax;
178 params.viewplane.ymin *= scay;
179 params.viewplane.ymax *= scay;
191 offsetmat[3][0] = offsetmat[3][1] = offsetmat[3][2] = 0.5;
193 mul_m4_m4m4(projectors[i].projmat, offsetmat, tmpmat);
196 projectors[i].
normal[0] = 0;
197 projectors[i].
normal[1] = 0;
198 projectors[i].
normal[2] = 1;
212 for (i = 0, co = coords; i < numVerts; i++, co++) {
217 if (num_projectors == 1 && projectors[0].uci ==
NULL) {
218 for (i = 0, co = coords; i < numVerts; i++, co++) {
227 for (i = 0, mp = mpoly; i < numPolys; i++, mp++) {
228 if (num_projectors == 1) {
229 if (projectors[0].uci) {
233 uint vidx = mloop[lidx].
v;
242 uint vidx = mloop[lidx].
v;
256 mp, mloop + mp->
loopstart, (
const float(*)[3])coords, face_no);
262 best_projector = &projectors[0];
264 for (j = 1; j < num_projectors; j++) {
266 if (tmp_dot > best_dot) {
268 best_projector = &projectors[j];
272 if (best_projector->
uci) {
276 uint vidx = mloop[lidx].
v;
284 uint vidx = mloop[lidx].
v;
295 for (j = 0; j < num_projectors; j++) {
296 if (projectors[j].uci) {
335 bool has_camera =
false;
355 uiItemR(layout,
ptr,
"projector_count", 0,
IFACE_(
"Projectors"), ICON_NONE);
357 uiItemR(layout, &projector_ptr,
"object", 0,
NULL, ICON_NONE);
371 "UVProjectModifierData",
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, const int type, const char *name, const 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, const 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 CD_MASK_TESSLOOPNORMAL
#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)
StructRNA RNA_UVProjectModifier
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 CustomData pdata ldata
struct DepsNodeHandle * node
struct Object * projectors[10]