[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49413] branches/soc-2011-tomato: svn merge ^/trunk/blender -r49410:49412

Campbell Barton ideasman42 at gmail.com
Tue Jul 31 15:44:51 CEST 2012


Revision: 49413
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49413
Author:   campbellbarton
Date:     2012-07-31 13:44:51 +0000 (Tue, 31 Jul 2012)
Log Message:
-----------
svn merge ^/trunk/blender -r49410:49412

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49410

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_cdderivedmesh.h
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_mesh.h
    branches/soc-2011-tomato/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/soc-2011-tomato/source/blender/blenkernel/intern/displist.c
    branches/soc-2011-tomato/source/blender/blenkernel/intern/mesh.c
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_object_api.c

Property Changed:
----------------
    branches/soc-2011-tomato/
    branches/soc-2011-tomato/source/blender/editors/interface/interface.c
    branches/soc-2011-tomato/source/blender/editors/space_outliner/


Property changes on: branches/soc-2011-tomato
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/vgroup_modifiers:38694-39989
/trunk/blender:36831-49410
   + /branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/vgroup_modifiers:38694-39989
/trunk/blender:36831-49412

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_cdderivedmesh.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_cdderivedmesh.h	2012-07-31 13:43:26 UTC (rev 49412)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_cdderivedmesh.h	2012-07-31 13:44:51 UTC (rev 49413)
@@ -61,12 +61,14 @@
 /* merge verts  */
 DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap);
 
+DerivedMesh *CDDM_from_curve_orco(struct Scene *scene, struct Object *ob);
+
 /* creates a CDDerivedMesh from the given curve object */
 struct DerivedMesh *CDDM_from_curve(struct Object *ob);
 
 /* creates a CDDerivedMesh from the given curve object and specified dispbase */
 /* useful for OrcoDM creation for curves with constructive modifiers */
-DerivedMesh *CDDM_from_curve_displist(struct Object *ob, struct ListBase *dispbase);
+DerivedMesh *CDDM_from_curve_displist(struct Object *ob, struct ListBase *dispbase, int **orco_index_ptr);
 
 /* Copies the given DerivedMesh with verts, faces & edges stored as
  * custom element data.

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_mesh.h	2012-07-31 13:43:26 UTC (rev 49412)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_mesh.h	2012-07-31 13:44:51 UTC (rev 49413)
@@ -143,9 +143,13 @@
                              int *totloop, int *totpoly);
 int BKE_mesh_nurbs_displist_to_mdata(struct Object *ob, struct ListBase *dispbase, struct MVert **allvert, int *_totvert,
                                      struct MEdge **alledge, int *_totedge, struct MLoop **allloop, struct MPoly **allpoly,
-                                     int *_totloop, int *_totpoly);
+                                     int *_totloop, int *_totpoly, int **orco_index_ptr);
+void BKE_mesh_nurbs_to_mdata_orco(struct MPoly *mpoly, int totpoly,
+                                  struct MLoop *mloops, struct MLoopUV *mloopuvs,
+                                  float (*orco)[3], int (*orco_index)[4]);
 void BKE_mesh_from_nurbs(struct Object *ob);
-void BKE_mesh_from_nurbs_displist(struct Object *ob, struct ListBase *dispbase);
+void BKE_mesh_from_nurbs_displist(struct Object *ob, struct ListBase *dispbase,
+                                  int **orco_index_ptr);
 void BKE_mesh_from_curve(struct Scene *scene, struct Object *ob);
 void free_dverts(struct MDeformVert *dvert, int totvert);
 void copy_dverts(struct MDeformVert *dst, struct MDeformVert *src, int totvert); /* __NLA */

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/cdderivedmesh.c	2012-07-31 13:43:26 UTC (rev 49412)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/cdderivedmesh.c	2012-07-31 13:44:51 UTC (rev 49413)
@@ -52,6 +52,7 @@
 #include "BKE_paint.h"
 #include "BKE_utildefines.h"
 #include "BKE_tessmesh.h"
+#include "BKE_curve.h"
 
 #include "DNA_mesh_types.h"
 #include "DNA_meshdata_types.h"
@@ -1709,11 +1710,51 @@
 
 DerivedMesh *CDDM_from_curve(Object *ob)
 {
-	return CDDM_from_curve_displist(ob, &ob->disp);
+	return CDDM_from_curve_displist(ob, &ob->disp, NULL);
 }
 
-DerivedMesh *CDDM_from_curve_displist(Object *ob, ListBase *dispbase)
+DerivedMesh *CDDM_from_curve_orco(struct Scene *scene, Object *ob)
 {
+	int *orco_index_ptr = NULL;
+	int (*orco_index)[4] = NULL;
+	float (*orco)[3] = NULL;
+	DerivedMesh *dm = CDDM_from_curve_displist(ob, &ob->disp, &orco_index_ptr);
+
+	if (orco_index_ptr) {
+		orco = (float (*)[3])BKE_curve_make_orco(scene, ob);
+	}
+
+	if (orco && orco_index_ptr) {
+		const char *uvname = "Orco";
+
+		int totpoly = dm->getNumPolys(dm);
+
+		MPoly *mpolys = dm->getPolyArray(dm);
+		MLoop *mloops = dm->getLoopArray(dm);
+
+		MLoopUV *mloopuvs;
+
+		CustomData_add_layer_named(&dm->polyData, CD_MTEXPOLY, CD_DEFAULT, NULL, dm->numPolyData, uvname);
+		mloopuvs = CustomData_add_layer_named(&dm->loopData, CD_MLOOPUV,  CD_DEFAULT, NULL, dm->numLoopData, uvname);
+
+		BKE_mesh_nurbs_to_mdata_orco(mpolys, totpoly,
+		                             mloops, mloopuvs,
+		                             orco, orco_index);
+	}
+
+	if (orco_index) {
+		MEM_freeN(orco_index);
+	}
+	if (orco) {
+		MEM_freeN(orco);
+	}
+
+	return dm;
+}
+
+DerivedMesh *CDDM_from_curve_displist(Object *ob, ListBase *dispbase, int **orco_index_ptr)
+{
+	const short do_orco_as_uv= 1;
 	DerivedMesh *dm;
 	CDDerivedMesh *cddm;
 	MVert *allvert;
@@ -1723,7 +1764,7 @@
 	int totvert, totedge, totloop, totpoly;
 
 	if (BKE_mesh_nurbs_displist_to_mdata(ob, dispbase, &allvert, &totvert, &alledge,
-	                                     &totedge, &allloop, &allpoly, &totloop, &totpoly) != 0)
+	                                     &totedge, &allloop, &allpoly, &totloop, &totpoly, orco_index_ptr) != 0)
 	{
 		/* Error initializing mdata. This often happens when curve is empty */
 		return CDDM_new(0, 0, 0, 0, 0);
@@ -1746,6 +1787,10 @@
 
 	CDDM_calc_edges(dm);
 
+	if (do_orco_as_uv ) {
+		BKE_curve_make_orco(NULL, ob);
+	}
+
 	return dm;
 }
 

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/displist.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/displist.c	2012-07-31 13:43:26 UTC (rev 49412)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/displist.c	2012-07-31 13:44:51 UTC (rev 49413)
@@ -948,7 +948,7 @@
 					curve_to_filledpoly(cu, nurb, dispbase);
 				}
 
-				dm = CDDM_from_curve_displist(ob, dispbase);
+				dm = CDDM_from_curve_displist(ob, dispbase, NULL);
 
 				CDDM_calc_normals_mapping(dm);
 			}
@@ -1038,7 +1038,7 @@
 
 	/* OrcoDM should be created from underformed disp lists */
 	BKE_displist_make_curveTypes_forOrco(scene, ob, &disp);
-	dm = CDDM_from_curve_displist(ob, &disp);
+	dm = CDDM_from_curve_displist(ob, &disp, NULL);
 
 	BKE_displist_free(&disp);
 

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/mesh.c	2012-07-31 13:43:26 UTC (rev 49412)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/mesh.c	2012-07-31 13:44:51 UTC (rev 49413)
@@ -394,6 +394,7 @@
 	
 	if (me == NULL) return;
 	
+	if (me->mat)
 	for (a = 0; a < me->totcol; a++) {
 		if (me->mat[a]) me->mat[a]->id.us--;
 		me->mat[a] = NULL;
@@ -1234,19 +1235,21 @@
 	                                        allvert, totvert,
 	                                        alledge, totedge,
 	                                        allloop, allpoly,
-	                                        totloop, totpoly);
+	                                        totloop, totpoly, NULL);
 }
 
 /* BMESH: this doesn't calculate all edges from polygons,
  * only free standing edges are calculated */
 
 /* Initialize mverts, medges and, faces for converting nurbs to mesh and derived mesh */
-/* use specified dispbase  */
+/* use specified dispbase */
+/* TODO: orco values for non DL_SURF types */
 int BKE_mesh_nurbs_displist_to_mdata(Object *ob, ListBase *dispbase,
                                      MVert **allvert, int *_totvert,
                                      MEdge **alledge, int *_totedge,
                                      MLoop **allloop, MPoly **allpoly,
-                                     int *_totloop, int *_totpoly)
+                                     int *_totloop, int *_totpoly,
+                                     int **orco_index_ptr)
 {
 	DispList *dl;
 	Curve *cu;
@@ -1258,6 +1261,7 @@
 	int a, b, ofs, vertcount, startvert, totvert = 0, totedge = 0, totloop = 0, totvlak = 0;
 	int p1, p2, p3, p4, *index;
 	int conv_polys = 0;
+	int (*orco_index)[4] = NULL;
 
 	cu = ob->data;
 
@@ -1308,6 +1312,11 @@
 	/* verts and faces */
 	vertcount = 0;
 
+	if (orco_index_ptr) {
+		*orco_index_ptr = MEM_callocN(sizeof(int) * totvlak * 4, "nurbs_init orco");
+		orco_index = (int (*)[4]) *orco_index_ptr;
+	}
+
 	dl = dispbase->first;
 	while (dl) {
 		int smooth = dl->rt & CU_SMOOTH ? 1 : 0;
@@ -1385,8 +1394,6 @@
 				mloop += 3;
 				index += 3;
 			}
-
-
 		}
 		else if (dl->type == DL_SURF) {
 			startvert = vertcount;
@@ -1431,6 +1438,15 @@
 					mpoly->totloop = 4;
 					mpoly->mat_nr = dl->col;
 
+					if (orco_index) {
+						const int poly_index = mpoly - *allpoly;
+						const int p_orco_base = startvert + ((dl->nr + 1) * a) + b;
+						orco_index[poly_index][0] = p_orco_base + 1;
+						orco_index[poly_index][1] = p_orco_base + dl->nr + 2;
+						orco_index[poly_index][2] = p_orco_base + dl->nr + 1;
+						orco_index[poly_index][3] = p_orco_base;
+					}
+
 					if (smooth) mpoly->flag |= ME_SMOOTH;
 					mpoly++;
 					mloop += 4;
@@ -1461,8 +1477,34 @@
 	return 0;
 }
 
+
+MINLINE void copy_uv_orco_v2_v2(float r[2], const float a[2])
+{
+	r[0] = 0.5f + a[0] * 0.5f;
+	r[1] = 0.5f + a[1] * 0.5f;
+}
+
+/**
+ * orco is normally from #BKE_curve_make_orco
+ */
+void BKE_mesh_nurbs_to_mdata_orco(MPoly *mpoly, int totpoly,
+                                  MLoop *mloops, MLoopUV *mloopuvs,
+                                  float (*orco)[3], int (*orco_index)[4])
+{
+	MPoly *mp;
+
+	int i, j;
+	for (i = 0, mp = mpoly; i < totpoly; i++, mp++) {
+		MLoop *ml = mloops + mp->loopstart;
+		MLoopUV *mluv = mloopuvs + mp->loopstart;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list