Support more object types scene-scale (on creation)
- lamp - camera - font - empty & effector Also fix inconsistency with apply transform (modified shape-keys for meshes but not curve/lattice)
This commit is contained in:
@@ -84,6 +84,8 @@ void BKE_curve_texspace_get(struct Curve *cu, float r_loc[3], float r_rot[3], fl
|
||||
bool BKE_curve_minmax(struct Curve *cu, bool use_radius, float min[3], float max[3]);
|
||||
bool BKE_curve_center_median(struct Curve *cu, float cent[3]);
|
||||
bool BKE_curve_center_bounds(struct Curve *cu, float cent[3]);
|
||||
void BKE_curve_transform_ex(struct Curve *cu, float mat[4][4], bool do_keys, const float unit_scale);
|
||||
void BKE_curve_transform(struct Curve *cu, float mat[4][4], bool do_keys);
|
||||
void BKE_curve_translate(struct Curve *cu, float offset[3], const bool do_keys);
|
||||
void BKE_curve_material_index_remove(struct Curve *cu, int index);
|
||||
void BKE_curve_material_index_clear(struct Curve *cu);
|
||||
|
||||
@@ -84,6 +84,7 @@ void BKE_lattice_minmax(struct Lattice *lt, float min[3], float max[3]);
|
||||
void BKE_lattice_center_median(struct Lattice *lt, float cent[3]);
|
||||
void BKE_lattice_center_bounds(struct Lattice *lt, float cent[3]);
|
||||
void BKE_lattice_translate(struct Lattice *lt, float offset[3], bool do_keys);
|
||||
void BKE_lattice_transform(struct Lattice *lt, float mat[4][4], bool do_keys);
|
||||
|
||||
int BKE_lattice_index_from_uvw(struct Lattice *lt, const int u, const int v, const int w);
|
||||
void BKE_lattice_index_to_uvw(struct Lattice *lt, const int index, int *r_u, int *r_v, int *r_w);
|
||||
|
||||
@@ -63,6 +63,7 @@ bool BKE_mball_minmax_ex(struct MetaBall *mb, float min[3], float max[3],
|
||||
float obmat[4][4], const short flag);
|
||||
bool BKE_mball_center_median(struct MetaBall *mb, float r_cent[3]);
|
||||
bool BKE_mball_center_bounds(struct MetaBall *mb, float r_cent[3]);
|
||||
void BKE_mball_transform(struct MetaBall *mb, float mat[4][4]);
|
||||
void BKE_mball_translate(struct MetaBall *mb, const float offset[3]);
|
||||
|
||||
struct MetaElem *BKE_mball_element_add(struct MetaBall *mb, const int type);
|
||||
|
||||
@@ -133,6 +133,7 @@ struct Mesh *BKE_mesh_new_from_object(struct Main *bmain, struct Scene *sce, str
|
||||
/* vertex level transformations & checks (no derived mesh) */
|
||||
|
||||
bool BKE_mesh_minmax(struct Mesh *me, float r_min[3], float r_max[3]);
|
||||
void BKE_mesh_transform(struct Mesh *me, float mat[4][4], bool do_keys);
|
||||
void BKE_mesh_translate(struct Mesh *me, const float offset[3], const bool do_keys);
|
||||
|
||||
void BKE_mesh_ensure_navmesh(struct Mesh *me);
|
||||
|
||||
@@ -103,6 +103,8 @@ void BKE_object_make_local(struct Object *ob);
|
||||
bool BKE_object_is_libdata(struct Object *ob);
|
||||
bool BKE_object_obdata_is_libdata(struct Object *ob);
|
||||
|
||||
void BKE_object_obdata_size_init(struct Object *ob, const float scale);
|
||||
|
||||
void BKE_object_scale_to_mat3(struct Object *ob, float mat[3][3]);
|
||||
void BKE_object_rot_to_mat3(struct Object *ob, float mat[3][3], bool use_drot);
|
||||
void BKE_object_mat3_to_rot(struct Object *ob, float mat[3][3], bool use_compat);
|
||||
|
||||
@@ -4282,7 +4282,50 @@ bool BKE_curve_center_bounds(Curve *cu, float cent[3])
|
||||
return false;
|
||||
}
|
||||
|
||||
void BKE_curve_translate(Curve *cu, float offset[3], const bool do_keys)
|
||||
|
||||
void BKE_curve_transform_ex(Curve *cu, float mat[4][4], bool do_keys, float unit_scale)
|
||||
{
|
||||
Nurb *nu;
|
||||
BPoint *bp;
|
||||
BezTriple *bezt;
|
||||
int i;
|
||||
|
||||
for (nu = cu->nurb.first; nu; nu = nu->next) {
|
||||
if (nu->type == CU_BEZIER) {
|
||||
i = nu->pntsu;
|
||||
for (bezt = nu->bezt; i--; bezt++) {
|
||||
mul_m4_v3(mat, bezt->vec[0]);
|
||||
mul_m4_v3(mat, bezt->vec[1]);
|
||||
mul_m4_v3(mat, bezt->vec[2]);
|
||||
bezt->radius *= unit_scale;
|
||||
}
|
||||
BKE_nurb_handles_calc(nu);
|
||||
}
|
||||
else {
|
||||
i = nu->pntsu * nu->pntsv;
|
||||
for (bp = nu->bp; i--; bp++)
|
||||
mul_m4_v3(mat, bp->vec);
|
||||
}
|
||||
}
|
||||
|
||||
if (do_keys && cu->key) {
|
||||
KeyBlock *kb;
|
||||
for (kb = cu->key->block.first; kb; kb = kb->next) {
|
||||
float *fp = kb->data;
|
||||
for (i = kb->totelem; i--; fp += 3) {
|
||||
mul_m4_v3(mat, fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_curve_transform(Curve *cu, float mat[4][4], bool do_keys)
|
||||
{
|
||||
float unit_scale = mat4_to_scale(mat);
|
||||
BKE_curve_transform_ex(cu, mat, do_keys, unit_scale);
|
||||
}
|
||||
|
||||
void BKE_curve_translate(Curve *cu, float offset[3], bool do_keys)
|
||||
{
|
||||
ListBase *nurb_lb = BKE_curve_nurbs_get(cu);
|
||||
Nurb *nu;
|
||||
|
||||
@@ -1166,6 +1166,28 @@ void BKE_lattice_center_bounds(Lattice *lt, float cent[3])
|
||||
mid_v3_v3v3(cent, min, max);
|
||||
}
|
||||
|
||||
void BKE_lattice_transform(Lattice *lt, float mat[4][4], bool do_keys)
|
||||
{
|
||||
BPoint *bp = lt->def;
|
||||
int i = lt->pntsu * lt->pntsv * lt->pntsw;
|
||||
|
||||
while (i--) {
|
||||
mul_m4_v3(mat, bp->vec);
|
||||
bp++;
|
||||
}
|
||||
|
||||
if (do_keys && lt->key) {
|
||||
KeyBlock *kb;
|
||||
|
||||
for (kb = lt->key->block.first; kb; kb = kb->next) {
|
||||
float *fp = kb->data;
|
||||
for (i = kb->totelem; i--; fp += 3) {
|
||||
mul_m4_v3(mat, fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_lattice_translate(Lattice *lt, float offset[3], bool do_keys)
|
||||
{
|
||||
int i, numVerts;
|
||||
|
||||
@@ -2442,6 +2442,30 @@ bool BKE_mball_center_bounds(MetaBall *mb, float r_cent[3])
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BKE_mball_transform(MetaBall *mb, float mat[4][4])
|
||||
{
|
||||
MetaElem *me;
|
||||
float quat[4];
|
||||
const float scale = mat4_to_scale(mat);
|
||||
const float scale_sqrt = sqrtf(scale);
|
||||
|
||||
mat4_to_quat(quat, mat);
|
||||
|
||||
for (me = mb->elems.first; me; me = me->next) {
|
||||
mul_m4_v3(mat, &me->x);
|
||||
mul_qt_qtqt(me->quat, quat, me->quat);
|
||||
me->rad *= scale;
|
||||
/* hrmf, probably elems shouldn't be
|
||||
* treating scale differently - campbell */
|
||||
if (!MB_TYPE_SIZE_SQUARED(me->type)) {
|
||||
mul_v3_fl(&me->expx, scale);
|
||||
}
|
||||
else {
|
||||
mul_v3_fl(&me->expx, scale_sqrt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_mball_translate(MetaBall *mb, const float offset[3])
|
||||
{
|
||||
MetaElem *ml;
|
||||
|
||||
@@ -1869,6 +1869,27 @@ bool BKE_mesh_minmax(Mesh *me, float r_min[3], float r_max[3])
|
||||
return (me->totvert != 0);
|
||||
}
|
||||
|
||||
void BKE_mesh_transform(Mesh *me, float mat[4][4], bool do_keys)
|
||||
{
|
||||
int i;
|
||||
MVert *mvert = me->mvert;
|
||||
|
||||
for (i = 0; i < me->totvert; i++, mvert++)
|
||||
mul_m4_v3(mat, mvert->co);
|
||||
|
||||
if (do_keys && me->key) {
|
||||
KeyBlock *kb;
|
||||
for (kb = me->key->block.first; kb; kb = kb->next) {
|
||||
float *fp = kb->data;
|
||||
for (i = kb->totelem; i--; fp += 3) {
|
||||
mul_m4_v3(mat, fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* don't update normals, caller can do this explicitly */
|
||||
}
|
||||
|
||||
void BKE_mesh_translate(Mesh *me, const float offset[3], const bool do_keys)
|
||||
{
|
||||
int i = me->totvert;
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "DNA_constraint_types.h"
|
||||
#include "DNA_group_types.h"
|
||||
#include "DNA_key_types.h"
|
||||
#include "DNA_lamp_types.h"
|
||||
#include "DNA_lattice_types.h"
|
||||
#include "DNA_material_types.h"
|
||||
#include "DNA_meta_types.h"
|
||||
@@ -1792,6 +1793,55 @@ void BKE_object_make_proxy(Object *ob, Object *target, Object *gob)
|
||||
ob->dt = target->dt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use with newly created objects to set their size
|
||||
* (used to apply scene-scale).
|
||||
*/
|
||||
void BKE_object_obdata_size_init(struct Object *ob, const float size)
|
||||
{
|
||||
/* apply radius as a scale to types that support it */
|
||||
switch (ob->type) {
|
||||
case OB_EMPTY:
|
||||
{
|
||||
ob->empty_drawsize *= size;
|
||||
break;
|
||||
}
|
||||
case OB_FONT:
|
||||
{
|
||||
Curve *cu = ob->data;
|
||||
cu->fsize *= size;
|
||||
break;
|
||||
}
|
||||
case OB_CAMERA:
|
||||
{
|
||||
Camera *cam = ob->data;
|
||||
cam->drawsize *= size;
|
||||
break;
|
||||
}
|
||||
case OB_LAMP:
|
||||
{
|
||||
Lamp *lamp = ob->data;
|
||||
lamp->dist *= size;
|
||||
lamp->area_size *= size;
|
||||
lamp->area_sizey *= size;
|
||||
lamp->area_sizez *= size;
|
||||
break;
|
||||
}
|
||||
/* Only lattice (not mesh, curve, mball...),
|
||||
* because its got data when newly added */
|
||||
case OB_LATTICE:
|
||||
{
|
||||
struct Lattice *lt = ob->data;
|
||||
float mat[4][4];
|
||||
|
||||
unit_m4(mat);
|
||||
scale_m4_fl(mat, size);
|
||||
|
||||
BKE_lattice_transform(lt, (float (*)[4])mat, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* *************** CALC ****************** */
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ EditBone *ED_armature_edit_bone_add(bArmature *arm, const char *name)
|
||||
return bone;
|
||||
}
|
||||
|
||||
void add_primitive_bone(Object *obedit_arm, bool view_aligned)
|
||||
EditBone *ED_armature_edit_bone_add_primitive(Object *obedit_arm, float length, bool view_aligned)
|
||||
{
|
||||
bArmature *arm = obedit_arm->data;
|
||||
EditBone *bone;
|
||||
@@ -99,10 +99,9 @@ void add_primitive_bone(Object *obedit_arm, bool view_aligned)
|
||||
zero_v3(bone->head);
|
||||
zero_v3(bone->tail);
|
||||
|
||||
if (view_aligned)
|
||||
bone->tail[1] = 1.0f;
|
||||
else
|
||||
bone->tail[2] = 1.0f;
|
||||
bone->tail[view_aligned ? 1 : 2] = length;
|
||||
|
||||
return bone;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1476,37 +1476,6 @@ void ED_curve_select_swap(EditNurb *editnurb, bool hide_handles)
|
||||
}
|
||||
}
|
||||
|
||||
/******************** transform operator **********************/
|
||||
|
||||
void ED_curve_transform(Curve *cu, float mat[4][4])
|
||||
{
|
||||
Nurb *nu;
|
||||
BPoint *bp;
|
||||
BezTriple *bezt;
|
||||
int a;
|
||||
|
||||
float scale = mat4_to_scale(mat);
|
||||
|
||||
for (nu = cu->nurb.first; nu; nu = nu->next) {
|
||||
if (nu->type == CU_BEZIER) {
|
||||
a = nu->pntsu;
|
||||
for (bezt = nu->bezt; a--; bezt++) {
|
||||
mul_m4_v3(mat, bezt->vec[0]);
|
||||
mul_m4_v3(mat, bezt->vec[1]);
|
||||
mul_m4_v3(mat, bezt->vec[2]);
|
||||
bezt->radius *= scale;
|
||||
}
|
||||
BKE_nurb_handles_calc(nu);
|
||||
}
|
||||
else {
|
||||
a = nu->pntsu * nu->pntsv;
|
||||
for (bp = nu->bp; a--; bp++)
|
||||
mul_m4_v3(mat, bp->vec);
|
||||
}
|
||||
}
|
||||
DAG_id_tag_update(&cu->id, 0);
|
||||
}
|
||||
|
||||
/******************** separate operator ***********************/
|
||||
|
||||
static int separate_exec(bContext *C, wmOperator *op)
|
||||
|
||||
@@ -133,8 +133,8 @@ EditBone *ED_armature_bone_get_mirrored(const struct ListBase *edbo, EditBone *e
|
||||
void ED_armature_sync_selection(struct ListBase *edbo);
|
||||
void ED_armature_validate_active(struct bArmature *arm);
|
||||
|
||||
void add_primitive_bone(struct Object *obedit_arm, bool view_aligned);
|
||||
struct EditBone *ED_armature_edit_bone_add(struct bArmature *arm, const char *name);
|
||||
EditBone *ED_armature_edit_bone_add_primitive(struct Object *obedit_arm, float length, bool view_aligned);
|
||||
EditBone *ED_armature_edit_bone_add(struct bArmature *arm, const char *name);
|
||||
void ED_armature_edit_bone_remove(struct bArmature *arm, EditBone *exBone);
|
||||
|
||||
bool ED_armature_ebone_is_child_recursive(EditBone *ebone_parent, EditBone *ebone_child);
|
||||
|
||||
@@ -51,7 +51,6 @@ void ED_operatormacros_curve(void);
|
||||
void ED_keymap_curve(struct wmKeyConfig *keyconf);
|
||||
|
||||
/* editcurve.c */
|
||||
void ED_curve_transform(struct Curve *cu, float mat[4][4]);
|
||||
void ED_curve_deselect_all(struct EditNurb *editnurb);
|
||||
void ED_curve_select_all(struct EditNurb *editnurb);
|
||||
void ED_curve_select_swap(struct EditNurb *editnurb, bool hide_handles);
|
||||
|
||||
@@ -37,6 +37,5 @@ struct Lattice;
|
||||
void free_editLatt(struct Object *ob);
|
||||
void make_editLatt(struct Object *obedit);
|
||||
void load_editLatt(struct Object *obedit);
|
||||
void ED_lattice_transform(struct Lattice *lt, float mat[4][4]);
|
||||
|
||||
#endif /* __ED_LATTICE_H__ */
|
||||
|
||||
@@ -50,6 +50,4 @@ void load_editMball(struct Object *obedit);
|
||||
|
||||
void undo_push_mball(struct bContext *C, const char *name);
|
||||
|
||||
void ED_mball_transform(struct MetaBall *mb, float mat[4][4]);
|
||||
|
||||
#endif /* __ED_MBALL_H__ */
|
||||
|
||||
@@ -264,7 +264,6 @@ void ED_mesh_faces_remove(struct Mesh *mesh, struct ReportList *reports, int cou
|
||||
void ED_mesh_edges_remove(struct Mesh *mesh, struct ReportList *reports, int count);
|
||||
void ED_mesh_vertices_remove(struct Mesh *mesh, struct ReportList *reports, int count);
|
||||
|
||||
void ED_mesh_transform(struct Mesh *me, float mat[4][4]);
|
||||
void ED_mesh_calc_tessface(struct Mesh *mesh);
|
||||
void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface);
|
||||
|
||||
|
||||
@@ -150,8 +150,9 @@ bool ED_object_add_generic_get_opts(struct bContext *C, struct wmOperator *op, c
|
||||
float loc[3], float rot[3],
|
||||
bool *enter_editmode, unsigned int *layer, bool *is_view_aligned);
|
||||
|
||||
struct Object *ED_object_add_type(struct bContext *C, int type, const float loc[3], const float rot[3],
|
||||
bool enter_editmode, unsigned int layer);
|
||||
struct Object *ED_object_add_type(
|
||||
struct bContext *C, int type, const float loc[3], const float rot[3],
|
||||
bool enter_editmode, unsigned int layer) ATTR_RETURNS_NONNULL;
|
||||
|
||||
void ED_object_single_users(struct Main *bmain, struct Scene *scene, bool full, bool copy_groups);
|
||||
void ED_object_single_user(struct Main *bmain, struct Scene *scene, struct Object *ob);
|
||||
|
||||
@@ -880,17 +880,6 @@ static void mesh_add_verts(Mesh *mesh, int len)
|
||||
mesh->totvert = totvert;
|
||||
}
|
||||
|
||||
void ED_mesh_transform(Mesh *me, float mat[4][4])
|
||||
{
|
||||
int i;
|
||||
MVert *mvert = me->mvert;
|
||||
|
||||
for (i = 0; i < me->totvert; i++, mvert++)
|
||||
mul_m4_v3(mat, mvert->co);
|
||||
|
||||
/* don't update normals, caller can do this explicitly */
|
||||
}
|
||||
|
||||
static void mesh_add_edges(Mesh *mesh, int len)
|
||||
{
|
||||
CustomData edata;
|
||||
|
||||
@@ -743,28 +743,3 @@ void undo_push_mball(bContext *C, const char *name)
|
||||
{
|
||||
undo_editmode_push(C, name, get_data, free_undoMball, undoMball_to_editMball, editMball_to_undoMball, NULL);
|
||||
}
|
||||
|
||||
void ED_mball_transform(MetaBall *mb, float mat[4][4])
|
||||
{
|
||||
MetaElem *me;
|
||||
float quat[4];
|
||||
const float scale = mat4_to_scale(mat);
|
||||
const float scale_sqrt = sqrtf(scale);
|
||||
|
||||
mat4_to_quat(quat, mat);
|
||||
|
||||
for (me = mb->elems.first; me; me = me->next) {
|
||||
mul_m4_v3(mat, &me->x);
|
||||
mul_qt_qtqt(me->quat, quat, me->quat);
|
||||
me->rad *= scale;
|
||||
/* hrmf, probably elems shouldn't be
|
||||
* treating scale differently - campbell */
|
||||
if (!MB_TYPE_SIZE_SQUARED(me->type)) {
|
||||
mul_v3_fl(&me->expx, scale);
|
||||
}
|
||||
else {
|
||||
mul_v3_fl(&me->expx, scale_sqrt);
|
||||
}
|
||||
}
|
||||
DAG_id_tag_update(&mb->id, 0);
|
||||
}
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
|
||||
#include "ED_armature.h"
|
||||
#include "ED_curve.h"
|
||||
#include "ED_lattice.h"
|
||||
#include "ED_mball.h"
|
||||
#include "ED_mesh.h"
|
||||
#include "ED_node.h"
|
||||
@@ -447,14 +448,17 @@ Object *ED_object_add_type(bContext *C, int type, const float loc[3], const floa
|
||||
/* for object add operator */
|
||||
static int object_add_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *ob;
|
||||
bool enter_editmode;
|
||||
unsigned int layer;
|
||||
float loc[3], rot[3];
|
||||
|
||||
WM_operator_view3d_unit_defaults(C, op);
|
||||
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), loc, rot, enter_editmode, layer);
|
||||
ob = ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), loc, rot, enter_editmode, layer);
|
||||
BKE_object_obdata_size_init(ob, RNA_float_get(op->ptr, "radius"));
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -473,6 +477,8 @@ void OBJECT_OT_add(wmOperatorType *ot)
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
ED_object_add_unit_props(ot);
|
||||
RNA_def_enum(ot->srna, "type", object_type_items, 0, "Type", "");
|
||||
|
||||
ED_object_add_generic_props(ot, true);
|
||||
@@ -489,32 +495,31 @@ static int effector_add_exec(bContext *C, wmOperator *op)
|
||||
unsigned int layer;
|
||||
float loc[3], rot[3];
|
||||
float mat[4][4];
|
||||
float dia;
|
||||
|
||||
WM_operator_view3d_unit_defaults(C, op);
|
||||
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
type = RNA_enum_get(op->ptr, "type");
|
||||
dia = RNA_float_get(op->ptr, "radius");
|
||||
|
||||
if (type == PFIELD_GUIDE) {
|
||||
Curve *cu;
|
||||
ob = ED_object_add_type(C, OB_CURVE, loc, rot, false, layer);
|
||||
if (!ob)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
rename_id(&ob->id, CTX_DATA_(BLF_I18NCONTEXT_ID_OBJECT, "CurveGuide"));
|
||||
cu = ob->data;
|
||||
cu->flag |= CU_PATH | CU_3D;
|
||||
ED_object_editmode_enter(C, 0);
|
||||
ED_object_new_primitive_matrix(C, ob, loc, rot, mat, false);
|
||||
BLI_addtail(&cu->editnurb->nurbs, add_nurbs_primitive(C, ob, mat, CU_NURBS | CU_PRIM_PATH, 1));
|
||||
BLI_addtail(&cu->editnurb->nurbs, add_nurbs_primitive(C, ob, mat, CU_NURBS | CU_PRIM_PATH, dia));
|
||||
if (!enter_editmode)
|
||||
ED_object_editmode_exit(C, EM_FREEDATA);
|
||||
}
|
||||
else {
|
||||
ob = ED_object_add_type(C, OB_EMPTY, loc, rot, false, layer);
|
||||
if (!ob)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
BKE_object_obdata_size_init(ob, dia);
|
||||
rename_id(&ob->id, CTX_DATA_(BLF_I18NCONTEXT_ID_OBJECT, "Field"));
|
||||
if (ELEM(type, PFIELD_WIND, PFIELD_VORTEX))
|
||||
ob->empty_drawtype = OB_SINGLE_ARROW;
|
||||
@@ -541,8 +546,10 @@ void OBJECT_OT_effector_add(wmOperatorType *ot)
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
ot->prop = RNA_def_enum(ot->srna, "type", field_type_items, 0, "Type", "");
|
||||
|
||||
ED_object_add_unit_props(ot);
|
||||
ED_object_add_generic_props(ot, true);
|
||||
}
|
||||
|
||||
@@ -673,6 +680,7 @@ static int object_add_text_exec(bContext *C, wmOperator *op)
|
||||
unsigned int layer;
|
||||
float loc[3], rot[3];
|
||||
|
||||
WM_operator_view3d_unit_defaults(C, op);
|
||||
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
@@ -680,6 +688,7 @@ static int object_add_text_exec(bContext *C, wmOperator *op)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
obedit = ED_object_add_type(C, OB_FONT, loc, rot, enter_editmode, layer);
|
||||
BKE_object_obdata_size_init(obedit, RNA_float_get(op->ptr, "radius"));
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit);
|
||||
|
||||
@@ -699,6 +708,9 @@ void OBJECT_OT_text_add(wmOperatorType *ot)
|
||||
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
ED_object_add_unit_props(ot);
|
||||
ED_object_add_generic_props(ot, true);
|
||||
}
|
||||
|
||||
@@ -711,9 +723,10 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
|
||||
bool newob = false;
|
||||
bool enter_editmode;
|
||||
unsigned int layer;
|
||||
float loc[3], rot[3];
|
||||
float loc[3], rot[3], dia;
|
||||
bool view_aligned = rv3d && (U.flag & USER_ADD_VIEWALIGNED);
|
||||
|
||||
WM_operator_view3d_unit_defaults(C, op);
|
||||
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
@@ -731,7 +744,8 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
add_primitive_bone(obedit, view_aligned);
|
||||
dia = RNA_float_get(op->ptr, "radius");
|
||||
ED_armature_edit_bone_add_primitive(obedit, dia, view_aligned);
|
||||
|
||||
/* userdef */
|
||||
if (newob && !enter_editmode)
|
||||
@@ -755,6 +769,9 @@ void OBJECT_OT_armature_add(wmOperatorType *ot)
|
||||
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
ED_object_add_unit_props(ot);
|
||||
ED_object_add_generic_props(ot, true);
|
||||
}
|
||||
|
||||
@@ -767,12 +784,14 @@ static int object_empty_add_exec(bContext *C, wmOperator *op)
|
||||
unsigned int layer;
|
||||
float loc[3], rot[3];
|
||||
|
||||
WM_operator_view3d_unit_defaults(C, op);
|
||||
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, &layer, NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
ob = ED_object_add_type(C, OB_EMPTY, loc, rot, false, layer);
|
||||
|
||||
BKE_object_empty_draw_type_set(ob, type);
|
||||
BKE_object_obdata_size_init(ob, RNA_float_get(op->ptr, "radius"));
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -795,6 +814,7 @@ void OBJECT_OT_empty_add(wmOperatorType *ot)
|
||||
/* properties */
|
||||
ot->prop = RNA_def_enum(ot->srna, "type", object_empty_drawtype_items, 0, "Type", "");
|
||||
|
||||
ED_object_add_unit_props(ot);
|
||||
ED_object_add_generic_props(ot, false);
|
||||
}
|
||||
|
||||
@@ -904,12 +924,14 @@ static int object_lamp_add_exec(bContext *C, wmOperator *op)
|
||||
unsigned int layer;
|
||||
float loc[3], rot[3];
|
||||
|
||||
WM_operator_view3d_unit_defaults(C, op);
|
||||
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, &layer, NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
ob = ED_object_add_type(C, OB_LAMP, loc, rot, false, layer);
|
||||
la = (Lamp *)ob->data;
|
||||
BKE_object_obdata_size_init(ob, RNA_float_get(op->ptr, "radius"));
|
||||
|
||||
la = (Lamp *)ob->data;
|
||||
la->type = type;
|
||||
rename_id(&ob->id, get_lamp_defname(type));
|
||||
rename_id(&la->id, get_lamp_defname(type));
|
||||
@@ -941,6 +963,7 @@ void OBJECT_OT_lamp_add(wmOperatorType *ot)
|
||||
ot->prop = RNA_def_enum(ot->srna, "type", lamp_type_items, 0, "Type", "");
|
||||
RNA_def_property_translation_context(ot->prop, BLF_I18NCONTEXT_ID_LAMP);
|
||||
|
||||
ED_object_add_unit_props(ot);
|
||||
ED_object_add_generic_props(ot, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -174,21 +174,6 @@ void load_editLatt(Object *obedit)
|
||||
}
|
||||
}
|
||||
|
||||
/*************************** Transform Operator ************************/
|
||||
|
||||
void ED_lattice_transform(Lattice *lt, float mat[4][4])
|
||||
{
|
||||
BPoint *bp = lt->def;
|
||||
int a = lt->pntsu * lt->pntsv * lt->pntsw;
|
||||
|
||||
while (a--) {
|
||||
mul_m4_v3(mat, bp->vec);
|
||||
bp++;
|
||||
}
|
||||
|
||||
DAG_id_tag_update(<->id, 0);
|
||||
}
|
||||
|
||||
static void bpoint_select_set(BPoint *bp, bool select)
|
||||
{
|
||||
if (select) {
|
||||
|
||||
@@ -29,15 +29,11 @@
|
||||
* \ingroup edobj
|
||||
*/
|
||||
|
||||
|
||||
#include "DNA_object_types.h"
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_object.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
#include "ED_object.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
@@ -45,6 +41,9 @@
|
||||
#include "RNA_define.h"
|
||||
#include "RNA_enum_types.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
#include "ED_object.h"
|
||||
|
||||
#include "object_intern.h"
|
||||
|
||||
static int object_lod_add_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
@@ -472,27 +472,12 @@ static int apply_objects_internal(bContext *C, ReportList *reports, bool apply_l
|
||||
/* apply to object data */
|
||||
if (ob->type == OB_MESH) {
|
||||
Mesh *me = ob->data;
|
||||
MVert *mvert;
|
||||
int a;
|
||||
|
||||
if (apply_scale)
|
||||
multiresModifier_scale_disp(scene, ob);
|
||||
|
||||
/* adjust data */
|
||||
mvert = me->mvert;
|
||||
for (a = 0; a < me->totvert; a++, mvert++)
|
||||
mul_m4_v3(mat, mvert->co);
|
||||
|
||||
if (me->key) {
|
||||
KeyBlock *kb;
|
||||
|
||||
for (kb = me->key->block.first; kb; kb = kb->next) {
|
||||
float *fp = kb->data;
|
||||
|
||||
for (a = 0; a < kb->totelem; a++, fp += 3)
|
||||
mul_m4_v3(mat, fp);
|
||||
}
|
||||
}
|
||||
BKE_mesh_transform(me, mat, true);
|
||||
|
||||
/* update normals */
|
||||
BKE_mesh_calc_normals(me);
|
||||
@@ -502,45 +487,17 @@ static int apply_objects_internal(bContext *C, ReportList *reports, bool apply_l
|
||||
}
|
||||
else if (ob->type == OB_LATTICE) {
|
||||
Lattice *lt = ob->data;
|
||||
BPoint *bp = lt->def;
|
||||
int a = lt->pntsu * lt->pntsv * lt->pntsw;
|
||||
|
||||
while (a--) {
|
||||
mul_m4_v3(mat, bp->vec);
|
||||
bp++;
|
||||
}
|
||||
|
||||
BKE_lattice_transform(lt, mat, true);
|
||||
}
|
||||
else if (ob->type == OB_MBALL) {
|
||||
MetaBall *mb = ob->data;
|
||||
ED_mball_transform(mb, mat);
|
||||
BKE_mball_transform(mb, mat);
|
||||
}
|
||||
else if (ELEM(ob->type, OB_CURVE, OB_SURF)) {
|
||||
Curve *cu = ob->data;
|
||||
|
||||
Nurb *nu;
|
||||
BPoint *bp;
|
||||
BezTriple *bezt;
|
||||
int a;
|
||||
|
||||
scale = mat3_to_scale(rsmat);
|
||||
|
||||
for (nu = cu->nurb.first; nu; nu = nu->next) {
|
||||
if (nu->type == CU_BEZIER) {
|
||||
a = nu->pntsu;
|
||||
for (bezt = nu->bezt; a--; bezt++) {
|
||||
mul_m4_v3(mat, bezt->vec[0]);
|
||||
mul_m4_v3(mat, bezt->vec[1]);
|
||||
mul_m4_v3(mat, bezt->vec[2]);
|
||||
bezt->radius *= scale;
|
||||
}
|
||||
BKE_nurb_handles_calc(nu);
|
||||
}
|
||||
else {
|
||||
a = nu->pntsu * nu->pntsv;
|
||||
for (bp = nu->bp; a--; bp++)
|
||||
mul_m4_v3(mat, bp->vec);
|
||||
}
|
||||
}
|
||||
BKE_curve_transform_ex(cu, mat, true, scale);
|
||||
}
|
||||
else if (ob->type == OB_CAMERA) {
|
||||
MovieClip *clip = BKE_object_movieclip_get(scene, ob, false);
|
||||
|
||||
@@ -38,14 +38,16 @@
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "ED_curve.h"
|
||||
#include "BKE_curve.h"
|
||||
|
||||
#include "rna_internal.h" /* own include */
|
||||
|
||||
#ifdef RNA_RUNTIME
|
||||
static void rna_Curve_transform(Curve *cu, float *mat)
|
||||
static void rna_Curve_transform(Curve *cu, float *mat, int shape_keys)
|
||||
{
|
||||
ED_curve_transform(cu, (float (*)[4])mat);
|
||||
BKE_curve_transform(cu, (float (*)[4])mat, shape_keys);
|
||||
|
||||
DAG_id_tag_update(&cu->id, 0);
|
||||
}
|
||||
#else
|
||||
|
||||
@@ -58,6 +60,7 @@ void RNA_api_curve(StructRNA *srna)
|
||||
RNA_def_function_ui_description(func, "Transform curve by a matrix");
|
||||
parm = RNA_def_float_matrix(func, "matrix", 4, 4, NULL, 0.0f, 0.0f, "", "Matrix", 0.0f, 0.0f);
|
||||
RNA_def_property_flag(parm, PROP_REQUIRED);
|
||||
RNA_def_boolean(func, "shape_keys", 0, "", "Transform Shape Keys");
|
||||
|
||||
func = RNA_def_function(srna, "validate_material_indices", "BKE_curve_material_index_validate");
|
||||
RNA_def_function_ui_description(func, "Validate material indices of splines or letters, return True when the curve "
|
||||
|
||||
@@ -38,14 +38,14 @@
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "ED_lattice.h"
|
||||
|
||||
#include "rna_internal.h" /* own include */
|
||||
|
||||
#ifdef RNA_RUNTIME
|
||||
static void rna_Lattice_transform(Lattice *lt, float *mat)
|
||||
static void rna_Lattice_transform(Lattice *lt, float *mat, int shape_keys)
|
||||
{
|
||||
ED_lattice_transform(lt, (float (*)[4])mat);
|
||||
BKE_lattice_transform(lt, (float (*)[4])mat, shape_keys);
|
||||
|
||||
DAG_id_tag_update(<->id, 0);
|
||||
}
|
||||
#else
|
||||
|
||||
@@ -58,6 +58,7 @@ void RNA_api_lattice(StructRNA *srna)
|
||||
RNA_def_function_ui_description(func, "Transform lattice by a matrix");
|
||||
parm = RNA_def_float_matrix(func, "matrix", 4, 4, NULL, 0.0f, 0.0f, "", "Matrix", 0.0f, 0.0f);
|
||||
RNA_def_property_flag(parm, PROP_REQUIRED);
|
||||
RNA_def_boolean(func, "shape_keys", 0, "", "Transform Shape Keys");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -139,9 +139,11 @@ static void rna_Mesh_calc_smooth_groups(Mesh *mesh, int use_bitflags, int *r_pol
|
||||
r_group_total, use_bitflags);
|
||||
}
|
||||
|
||||
static void rna_Mesh_transform(Mesh *mesh, float *mat)
|
||||
static void rna_Mesh_transform(Mesh *mesh, float *mat, int shape_keys)
|
||||
{
|
||||
ED_mesh_transform(mesh, (float (*)[4])mat);
|
||||
BKE_mesh_transform(mesh, (float (*)[4])mat, shape_keys);
|
||||
|
||||
DAG_id_tag_update(&mesh->id, 0);
|
||||
}
|
||||
|
||||
#else
|
||||
@@ -155,6 +157,7 @@ void RNA_api_mesh(StructRNA *srna)
|
||||
RNA_def_function_ui_description(func, "Transform mesh vertices by a matrix");
|
||||
parm = RNA_def_float_matrix(func, "matrix", 4, 4, NULL, 0.0f, 0.0f, "", "Matrix", 0.0f, 0.0f);
|
||||
RNA_def_property_flag(parm, PROP_REQUIRED);
|
||||
RNA_def_boolean(func, "shape_keys", 0, "", "Transform Shape Keys");
|
||||
|
||||
func = RNA_def_function(srna, "calc_normals", "BKE_mesh_calc_normals");
|
||||
RNA_def_function_ui_description(func, "Calculate vertex normals");
|
||||
|
||||
@@ -38,14 +38,16 @@
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "ED_mball.h"
|
||||
#include "BKE_mball.h"
|
||||
|
||||
#include "rna_internal.h" /* own include */
|
||||
|
||||
#ifdef RNA_RUNTIME
|
||||
static void rna_Meta_transform(struct MetaBall *mb, float *mat)
|
||||
{
|
||||
ED_mball_transform(mb, (float (*)[4])mat);
|
||||
BKE_mball_transform(mb, (float (*)[4])mat);
|
||||
|
||||
DAG_id_tag_update(&mb->id, 0);
|
||||
}
|
||||
#else
|
||||
|
||||
|
||||
@@ -387,7 +387,6 @@ void ED_area_tag_redraw(struct ScrArea *sa) RET_NONE
|
||||
void ED_area_tag_refresh(struct ScrArea *sa) RET_NONE
|
||||
void ED_area_newspace(struct bContext *C, struct ScrArea *sa, int type) RET_NONE
|
||||
void ED_region_tag_redraw(struct ARegion *ar) RET_NONE
|
||||
void ED_curve_transform(struct Curve *cv, float mat[4][4]) RET_NONE
|
||||
void WM_event_add_fileselect(struct bContext *C, struct wmOperator *op) RET_NONE
|
||||
void WM_cursor_wait(bool val) RET_NONE
|
||||
void ED_node_texture_default(const struct bContext *C, struct Tex *tex) RET_NONE
|
||||
@@ -439,7 +438,6 @@ void uiLayoutSetScaleX(struct uiLayout *layout, float scale) RET_NONE
|
||||
void uiLayoutSetScaleY(struct uiLayout *layout, float scale) RET_NONE
|
||||
void uiTemplateIconView(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname) RET_NONE
|
||||
void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Base *base) RET_NONE
|
||||
void ED_mesh_transform(struct Mesh *me, float mat[4][4]) RET_NONE
|
||||
void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface) RET_NONE
|
||||
void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count) RET_NONE
|
||||
void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count) RET_NONE
|
||||
@@ -475,8 +473,6 @@ bool ED_texture_context_check_lamp(const struct bContext *C) RET_ZERO
|
||||
bool ED_texture_context_check_particles(const struct bContext *C) RET_ZERO
|
||||
bool ED_texture_context_check_others(const struct bContext *C) RET_ZERO
|
||||
|
||||
void ED_mball_transform(struct MetaBall *mb, float mat[4][4]) RET_NONE
|
||||
|
||||
bool snapObjectsRayEx(struct Scene *scene, struct Base *base_act, struct View3D *v3d, struct ARegion *ar, struct Object *obedit, short snap_mode,
|
||||
struct Object **r_ob, float r_obmat[4][4],
|
||||
const float ray_start[3], const float ray_normal[3], float *r_ray_dist,
|
||||
@@ -484,7 +480,6 @@ bool snapObjectsRayEx(struct Scene *scene, struct Base *base_act, struct View3D
|
||||
|
||||
void make_editLatt(struct Object *obedit) RET_NONE
|
||||
void load_editLatt(struct Object *obedit) RET_NONE
|
||||
void ED_lattice_transform(struct Lattice *lt, float mat[4][4]) RET_NONE
|
||||
|
||||
void load_editNurb(struct Object *obedit) RET_NONE
|
||||
void make_editNurb(struct Object *obedit) RET_NONE
|
||||
|
||||
Reference in New Issue
Block a user