[Bf-blender-cvs] [31e8634dacd] temp-fracture-modifier-2.8: Merge remote-tracking branch 'origin/blender2.8' into fracture_modifier-2.8

Martin Felke noreply at git.blender.org
Mon Dec 10 17:29:24 CET 2018


Commit: 31e8634dacdbf05e83fa72907e592bd3e7951cf2
Author: Martin Felke
Date:   Mon Dec 10 17:28:25 2018 +0100
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rB31e8634dacdbf05e83fa72907e592bd3e7951cf2

Merge remote-tracking branch 'origin/blender2.8' into fracture_modifier-2.8

# Conflicts:
#	source/blender/modifiers/intern/MOD_boolean.c

===================================================================



===================================================================

diff --cc release/scripts/addons
index be2df524910,f89d1c9581c..0c24f02293d
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit be2df5249105015aaafb06def0d1279c559c56ff
 -Subproject commit f89d1c9581c03160485a7b4b09fa5d538331fdeb
++Subproject commit 0c24f02293da33e50cf79f125545a3089b75754f
diff --cc release/scripts/addons_contrib
index 41d528d76b9,41d528d76b9..5f6f675fc19
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@@ -1,1 -1,1 +1,1 @@@
--Subproject commit 41d528d76b99e689e09915f5dcd589480579ef3a
++Subproject commit 5f6f675fc196949ac9210dc5094bed6ab65300a7
diff --cc source/blender/blenkernel/intern/boolean.c
index 3e70de314f4,840cee6f630..f9f4de563fa
--- a/source/blender/blenkernel/intern/boolean.c
+++ b/source/blender/blenkernel/intern/boolean.c
@@@ -36,241 -64,323 +36,242 @@@
  #include "bmesh.h"
  #include "bmesh_tools.h"
  #include "tools/bmesh_intersect.h"
 +#include "BKE_cdderivedmesh.h"
  
  #ifdef DEBUG_TIME
 -#  include "PIL_time.h"
 -#  include "PIL_time_utildefines.h"
 +#include "PIL_time.h"
 +#include "PIL_time_utildefines.h"
  #endif
  
 -static void initData(ModifierData *md)
 -{
 -	BooleanModifierData *bmd = (BooleanModifierData *)md;
 -
 -	bmd->double_threshold = 1e-6f;
 -}
 +#include "DNA_material_types.h"
 +#include "DNA_mesh_types.h"
 +#include "DNA_meshdata_types.h"
 +#include "DNA_object_types.h"
 +#include "DNA_modifier_types.h"
 +#include "BLI_utildefines.h"
  
 -static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams))
 -{
 -	BooleanModifierData *bmd = (BooleanModifierData *) md;
 +#include "BKE_boolean.h"
 +#include "BKE_mesh.h"
 +#include "BKE_library.h"
  
 -	return !bmd->object;
 -}
 +/* has no meaning for faces, do this so we can tell which face is which */
 +#define BM_FACE_TAG BM_ELEM_DRAW
  
 -static void foreachObjectLink(
 -        ModifierData *md, Object *ob,
 -        ObjectWalkFunc walk, void *userData)
 +/**
 + * Compare selected/unselected.
 + */
 +static int bm_face_isect_pair(BMFace *f, void *UNUSED(user_data))
  {
 -	BooleanModifierData *bmd = (BooleanModifierData *) md;
 -
 -	walk(userData, ob, &bmd->object, IDWALK_CB_NOP);
 +	return BM_elem_flag_test(f, BM_FACE_TAG) ? 1 : 0;
  }
  
 -static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
 -{
 -	BooleanModifierData *bmd = (BooleanModifierData *)md;
 -	if (bmd->object != NULL) {
 -		DEG_add_object_relation(ctx->node, bmd->object, DEG_OB_COMP_TRANSFORM, "Boolean Modifier");
 -		DEG_add_object_relation(ctx->node, bmd->object, DEG_OB_COMP_GEOMETRY, "Boolean Modifier");
 -	}
 -	/* We need own transformation as well. */
 -	DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Boolean Modifier");
 -}
  
  static Mesh *get_quick_mesh(
--        Object *ob_self,  Mesh *mesh_self,
--        Object *ob_other, Mesh *mesh_other,
--        int operation)
++		Object *ob_self,  Mesh *mesh_self,
++		Object *ob_other, Mesh *mesh_other,
++		int operation)
  {
-     Mesh *result = NULL;
- 
-     if (mesh_self->totpoly == 0 || mesh_other->totpoly == 0) {
-         switch (operation) {
-             case eBooleanModifierOp_Intersect:
-                 result = BKE_mesh_new_nomain(0, 0, 0, 0, 0);
-                 break;
- 
-             case eBooleanModifierOp_Union:
-                 if (mesh_self->totpoly != 0) {
-                     result = mesh_self;
-                 }
-                 else {
-                     BKE_id_copy_ex(NULL, &mesh_other->id, (ID **)&result,
-                                    LIB_ID_CREATE_NO_MAIN |
-                                    LIB_ID_CREATE_NO_USER_REFCOUNT |
-                                    LIB_ID_CREATE_NO_DEG_TAG |
-                                    LIB_ID_COPY_NO_PREVIEW,
-                                    false);
- 
-                     float imat[4][4];
-                     float omat[4][4];
- 
-                     invert_m4_m4(imat, ob_self->obmat);
-                     mul_m4_m4m4(omat, imat, ob_other->obmat);
- 
-                     const int mverts_len = result->totvert;
-                     MVert *mv = result->mvert;
- 
-                     for (int i = 0; i < mverts_len; i++, mv++) {
-                         mul_m4_v3(omat, mv->co);
-                     }
- 
-                     result->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
-                 }
- 
-                 break;
- 
-             case eBooleanModifierOp_Difference:
-                 result = mesh_self;
-                 break;
-         }
-     }
- 
-     return result;
+ 	Mesh *result = NULL;
+ 
+ 	if (mesh_self->totpoly == 0 || mesh_other->totpoly == 0) {
+ 		switch (operation) {
+ 			case eBooleanModifierOp_Intersect:
+ 				result = BKE_mesh_new_nomain(0, 0, 0, 0, 0);
+ 				break;
+ 
+ 			case eBooleanModifierOp_Union:
+ 				if (mesh_self->totpoly != 0) {
+ 					result = mesh_self;
+ 				}
+ 				else {
+ 					BKE_id_copy_ex(NULL, &mesh_other->id, (ID **)&result,
 -					               LIB_ID_CREATE_NO_MAIN |
 -					               LIB_ID_CREATE_NO_USER_REFCOUNT |
 -					               LIB_ID_CREATE_NO_DEG_TAG |
 -					               LIB_ID_COPY_NO_PREVIEW,
 -					               false);
++								   LIB_ID_CREATE_NO_MAIN |
++								   LIB_ID_CREATE_NO_USER_REFCOUNT |
++								   LIB_ID_CREATE_NO_DEG_TAG |
++								   LIB_ID_COPY_NO_PREVIEW,
++								   false);
+ 
+ 					float imat[4][4];
+ 					float omat[4][4];
+ 
+ 					invert_m4_m4(imat, ob_self->obmat);
+ 					mul_m4_m4m4(omat, imat, ob_other->obmat);
+ 
+ 					const int mverts_len = result->totvert;
+ 					MVert *mv = result->mvert;
+ 
+ 					for (int i = 0; i < mverts_len; i++, mv++) {
+ 						mul_m4_v3(omat, mv->co);
+ 					}
+ 
+ 					result->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
+ 				}
+ 
+ 				break;
+ 
+ 			case eBooleanModifierOp_Difference:
+ 				result = mesh_self;
+ 				break;
+ 		}
+ 	}
+ 
+ 	return result;
  }
  
 -
 -/* has no meaning for faces, do this so we can tell which face is which */
 -#define BM_FACE_TAG BM_ELEM_DRAW
 -
 -/**
 - * Compare selected/unselected.
 - */
 -static int bm_face_isect_pair(BMFace *f, void *UNUSED(user_data))
 -{
 -	return BM_elem_flag_test(f, BM_FACE_TAG) ? 1 : 0;
 -}
 -
 -static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
 +Mesh *BKE_boolean_operation(Mesh *mesh, struct Object *ob,
-                                  Mesh *mesh_other, struct Object *ob_other, int op_type,
-                                  float double_threshold, struct BooleanModifierData *bmd)
++								 Mesh *mesh_other, struct Object *ob_other, int op_type,
++								 float double_threshold, struct BooleanModifierData *bmd)
  {
-     Mesh *result = mesh;
 -	BooleanModifierData *bmd = (BooleanModifierData *) md;
+ 	Mesh *result = mesh;
  
-     if (mesh_other) {
-         Object *object = ob;
-         Object *other = ob_other;
 -	Mesh *mesh_other;
 -	bool mesh_other_free;
 -
 -	if (bmd->object == NULL) {
 -		return result;
 -	}
 -
 -	Object *other = DEG_get_evaluated_object(ctx->depsgraph, bmd->object);
 -	mesh_other = BKE_modifier_get_evaluated_mesh_from_evaluated_object(other, &mesh_other_free);
+ 	if (mesh_other) {
 -		Object *object = ctx->object;
++		Object *object = ob;
++		Object *other = ob_other;
  
-         /* when one of objects is empty (has got no faces) we could speed up
-          * calculation a bit returning one of objects' derived meshes (or empty one)
-          * Returning mesh is depended on modifiers operation (sergey) */
-         result = get_quick_mesh(object, mesh, other, mesh_other, op_type);
+ 		/* when one of objects is empty (has got no faces) we could speed up
+ 		 * calculation a bit returning one of objects' derived meshes (or empty one)
+ 		 * Returning mesh is depended on modifiers operation (sergey) */
 -		result = get_quick_mesh(object, mesh, other, mesh_other, bmd->operation);
++		result = get_quick_mesh(object, mesh, other, mesh_other, op_type);
  
-         if (result == NULL) {
-             const bool is_flip = (is_negative_m4(object->obmat) != is_negative_m4(other->obmat));
+ 		if (result == NULL) {
+ 			const bool is_flip = (is_negative_m4(object->obmat) != is_negative_m4(other->obmat));
  
-             BMesh *bm;
-             const BMAllocTemplate allocsize = BMALLOC_TEMPLATE_FROM_ME(mesh, mesh_other);
+ 			BMesh *bm;
+ 			const BMAllocTemplate allocsize = BMALLOC_TEMPLATE_FROM_ME(mesh, mesh_other);
  
  #ifdef DEBUG_TIME
-             TIMEIT_START(boolean_bmesh);
+ 			TIMEIT_START(boolean_bmesh);
  #endif
-             bm = BM_mesh_create(
-                      &allocsize,
-                      &((struct BMeshCreateParams){.use_toolflags = false,}));
- 
-             BM_mesh_bm_from_me(bm, mesh_other, &((struct BMeshFromMeshParams){.calc_face_normal = true,}));
- 
-             if (UNLIKELY(is_flip)) {
-                 const int cd_loop_mdisp_offset = CustomData_get_offset(&bm->ldata, CD_MDISPS);
-                 BMIter iter;
-                 BMFace *efa;
-                 BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
-                     BM_face_normal_flip_ex(bm, efa, cd_loop_mdisp_offset, true);
-                 }
-             }
- 
-             BM_mesh_bm_from_me(bm, mesh, &((struct BMeshFromMeshParams){.calc_face_normal = true,}));
- 
-             /* main bmesh intersection setup */
-             {
-                 /* create tessface & intersect */
-                 const int looptris_tot = poly_to_tri_count(bm->totface, bm->totloop);
-                 int tottri;
-                 BMLoop *(*looptris)[3];
- 
-                 looptris = MEM_malloc_arrayN(looptris_tot, sizeof(*looptris), __func__);
- 
-                 BM_mesh_calc_tessellation_beauty(bm, looptris, &tottri);
- 
-                 /* postpone this until after tessellating
-                  * so we can use the original normals before the vertex are moved */
-                 {
-                     BMIter iter;
-                     int i;
-                     const int i_verts_end = mesh_other->totvert;
-                     const int i_faces_end = mesh_other->totpoly;
- 
-                     float imat[4][4];
-  

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list