[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12452] branches/pynodes: * merge trunk r12434:12451

Nathan Letwory jesterking at letwory.net
Thu Nov 1 15:15:54 CET 2007


Revision: 12452
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12452
Author:   jesterking
Date:     2007-11-01 15:15:54 +0100 (Thu, 01 Nov 2007)

Log Message:
-----------
* merge trunk r12434:12451

Modified Paths:
--------------
    branches/pynodes/intern/iksolver/intern/IK_QJacobianSolver.cpp
    branches/pynodes/intern/iksolver/intern/IK_QJacobianSolver.h
    branches/pynodes/intern/iksolver/intern/IK_QSegment.cpp
    branches/pynodes/intern/iksolver/intern/IK_QSegment.h
    branches/pynodes/intern/iksolver/intern/IK_QTask.h
    branches/pynodes/intern/iksolver/intern/IK_Solver.cpp
    branches/pynodes/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/pynodes/source/blender/blenkernel/BKE_texture.h
    branches/pynodes/source/blender/blenkernel/intern/DerivedMesh.c
    branches/pynodes/source/blender/blenkernel/intern/armature.c
    branches/pynodes/source/blender/blenkernel/intern/constraint.c
    branches/pynodes/source/blender/blenkernel/intern/object.c
    branches/pynodes/source/blender/blenkernel/intern/texture.c
    branches/pynodes/source/blender/include/BSE_trans_types.h
    branches/pynodes/source/blender/include/blendef.h
    branches/pynodes/source/blender/include/transform.h
    branches/pynodes/source/blender/makesdna/DNA_armature_types.h
    branches/pynodes/source/blender/makesdna/DNA_texture_types.h
    branches/pynodes/source/blender/makesdna/DNA_userdef_types.h
    branches/pynodes/source/blender/src/buttons_editing.c
    branches/pynodes/source/blender/src/buttons_object.c
    branches/pynodes/source/blender/src/editarmature.c
    branches/pynodes/source/blender/src/editcurve.c
    branches/pynodes/source/blender/src/editipo.c
    branches/pynodes/source/blender/src/editmesh_add.c
    branches/pynodes/source/blender/src/ghostwinlay.c
    branches/pynodes/source/blender/src/space.c
    branches/pynodes/source/blender/src/transform_conversions.c
    branches/pynodes/source/blender/src/transform_generics.c
    branches/pynodes/source/blender/src/usiblender.c

Modified: branches/pynodes/intern/iksolver/intern/IK_QJacobianSolver.cpp
===================================================================
--- branches/pynodes/intern/iksolver/intern/IK_QJacobianSolver.cpp	2007-11-01 12:55:47 UTC (rev 12451)
+++ branches/pynodes/intern/iksolver/intern/IK_QJacobianSolver.cpp	2007-11-01 14:15:54 UTC (rev 12452)
@@ -42,6 +42,36 @@
 	m_rootmatrix.setIdentity();
 }
 
+MT_Scalar IK_QJacobianSolver::ComputeScale()
+{
+	std::vector<IK_QSegment*>::iterator seg;
+	float length = 0.0f;
+
+	for (seg = m_segments.begin(); seg != m_segments.end(); seg++)
+		length += (*seg)->MaxExtension();
+	
+	if(length == 0.0f)
+		return 1.0f;
+	else
+		return 1.0f/length;
+}
+
+void IK_QJacobianSolver::Scale(float scale, std::list<IK_QTask*>& tasks)
+{
+	std::list<IK_QTask*>::iterator task;
+	std::vector<IK_QSegment*>::iterator seg;
+
+	for (task = tasks.begin(); task != tasks.end(); task++)
+		(*task)->Scale(scale);
+
+	for (seg = m_segments.begin(); seg != m_segments.end(); seg++)
+		(*seg)->Scale(scale);
+	
+	m_rootmatrix.getOrigin() *= scale;
+	m_goal *= scale;
+	m_polegoal *= scale;
+}
+
 void IK_QJacobianSolver::AddSegmentList(IK_QSegment *seg)
 {
 	m_segments.push_back(seg);
@@ -293,9 +323,12 @@
 	const int max_iterations
 )
 {
+	float scale = ComputeScale();
 	bool solved = false;
 	//double dt = analyze_time();
 
+	Scale(scale, tasks);
+
 	ConstrainPoleVector(root, tasks);
 
 	root->UpdateTransform(m_rootmatrix);
@@ -346,15 +379,14 @@
 		if (norm < 1e-3) {
 			solved = true;
 			break;
-			//analyze_add_run(iterations, analyze_time()-dt);
-
-			return true;
 		}
 	}
 
 	if(m_poleconstraint)
 		root->PrependBasis(m_rootmatrix.getBasis());
 
+	Scale(1.0f/scale, tasks);
+
 	//analyze_add_run(max_iterations, analyze_time()-dt);
 
 	return solved;

Modified: branches/pynodes/intern/iksolver/intern/IK_QJacobianSolver.h
===================================================================
--- branches/pynodes/intern/iksolver/intern/IK_QJacobianSolver.h	2007-11-01 12:55:47 UTC (rev 12451)
+++ branches/pynodes/intern/iksolver/intern/IK_QJacobianSolver.h	2007-11-01 14:15:54 UTC (rev 12452)
@@ -75,6 +75,9 @@
 	bool UpdateAngles(MT_Scalar& norm);
 	void ConstrainPoleVector(IK_QSegment *root, std::list<IK_QTask*>& tasks);
 
+	MT_Scalar ComputeScale();
+	void Scale(float scale, std::list<IK_QTask*>& tasks);
+
 private:
 
 	IK_QJacobian m_jacobian;

Modified: branches/pynodes/intern/iksolver/intern/IK_QSegment.cpp
===================================================================
--- branches/pynodes/intern/iksolver/intern/IK_QSegment.cpp	2007-11-01 12:55:47 UTC (rev 12451)
+++ branches/pynodes/intern/iksolver/intern/IK_QSegment.cpp	2007-11-01 14:15:54 UTC (rev 12452)
@@ -343,6 +343,16 @@
 	m_basis = m_rest_basis.inverse() * mat * m_rest_basis * m_basis;
 }
 
+void IK_QSegment::Scale(float scale)
+{
+	m_start *= scale;
+	m_translation *= scale;
+	m_orig_translation *= scale;
+	m_global_start *= scale;
+	m_global_transform.getOrigin() *= scale;
+	m_max_extension *= scale;
+}
+
 // IK_QSphericalSegment
 
 IK_QSphericalSegment::IK_QSphericalSegment()
@@ -1026,3 +1036,17 @@
 	m_limit[axis]= true;
 }
 
+void IK_QTranslateSegment::Scale(float scale)
+{
+	int i;
+
+	IK_QSegment::Scale(scale);
+
+	for (i = 0; i < 3; i++) {
+		m_min[0] *= scale;
+		m_max[1] *= scale;
+	}
+
+	m_new_translation *= scale;
+}
+

Modified: branches/pynodes/intern/iksolver/intern/IK_QSegment.h
===================================================================
--- branches/pynodes/intern/iksolver/intern/IK_QSegment.h	2007-11-01 12:55:47 UTC (rev 12451)
+++ branches/pynodes/intern/iksolver/intern/IK_QSegment.h	2007-11-01 14:15:54 UTC (rev 12452)
@@ -169,6 +169,9 @@
 	void PrependBasis(const MT_Matrix3x3& mat);
 	void Reset();
 
+	// scale
+	virtual void Scale(float scale);
+
 protected:
 
 	// num_DoF: number of degrees of freedom
@@ -335,6 +338,8 @@
 	void SetWeight(int axis, MT_Scalar weight);
 	void SetLimit(int axis, MT_Scalar lmin, MT_Scalar lmax);
 
+	void Scale(float scale);
+
 private:
 	int m_axis[3];
 	bool m_axis_enabled[3], m_limit[3];

Modified: branches/pynodes/intern/iksolver/intern/IK_QTask.h
===================================================================
--- branches/pynodes/intern/iksolver/intern/IK_QTask.h	2007-11-01 12:55:47 UTC (rev 12451)
+++ branches/pynodes/intern/iksolver/intern/IK_QTask.h	2007-11-01 14:15:54 UTC (rev 12452)
@@ -77,6 +77,8 @@
 
 	virtual bool PositionTask() const { return false; }
 
+	virtual void Scale(float scale) {}
+
 protected:
 	int m_id;
 	int m_size;
@@ -100,6 +102,7 @@
 	MT_Scalar Distance() const;
 
 	bool PositionTask() const { return true; }
+	void Scale(float scale) { m_goal *= scale; m_clamp_length *= scale; }
 
 private:
 	MT_Vector3 m_goal;
@@ -137,6 +140,8 @@
 
 	MT_Scalar Distance() const;
 
+	void Scale(float scale) { m_goal_center *= scale; m_distance *= scale; }
+
 private:
 	MT_Scalar ComputeTotalMass(const IK_QSegment *segment);
 	MT_Vector3 ComputeCenter(const IK_QSegment *segment);

Modified: branches/pynodes/intern/iksolver/intern/IK_Solver.cpp
===================================================================
--- branches/pynodes/intern/iksolver/intern/IK_Solver.cpp	2007-11-01 12:55:47 UTC (rev 12451)
+++ branches/pynodes/intern/iksolver/intern/IK_Solver.cpp	2007-11-01 14:15:54 UTC (rev 12452)
@@ -41,7 +41,7 @@
 
 class IK_QSolver {
 public:
-	IK_QSolver() {};
+	IK_QSolver() : root(NULL) {};
 
 	IK_QJacobianSolver solver;
 	IK_QSegment *root;
@@ -197,13 +197,12 @@
 	if (stiffness < 0.0)
 		return;
 	
-	if (stiffness > 0.99)
-		stiffness = 0.99;
+	if (stiffness > 0.999)
+		stiffness = 0.999;
 
 	IK_QSegment *qseg = (IK_QSegment*)seg;
 	MT_Scalar weight = 1.0-stiffness;
 
-
 	if (axis >= IK_TRANS_X) {
 		if(!qseg->Translational())
 			if(qseg->Composite() && qseg->Composite()->Translational())

Modified: branches/pynodes/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/pynodes/source/blender/blenkernel/BKE_DerivedMesh.h	2007-11-01 12:55:47 UTC (rev 12451)
+++ branches/pynodes/source/blender/blenkernel/BKE_DerivedMesh.h	2007-11-01 14:15:54 UTC (rev 12452)
@@ -57,6 +57,7 @@
 struct EditMesh;
 struct ModifierData;
 struct MCol;
+struct ColorBand;
 
 /* number of sub-elements each mesh element has (for interpolation) */
 #define SUB_ELEMS_VERT 0
@@ -395,6 +396,9 @@
 
 void DM_swap_face_data(struct DerivedMesh *dm, int index, int *corner_indices);
 
+/* Temporary? A function to give a colorband to derivedmesh for vertexcolor ranges */
+void vDM_ColorBand_store(struct ColorBand *coba);
+
 /* Simple function to get me->totvert amount of vertices/normals,
    correctly deformed and subsurfered. Needed especially when vertexgroups are involved.
    In use now by vertex/weigt paint and particles */

Modified: branches/pynodes/source/blender/blenkernel/BKE_texture.h
===================================================================
--- branches/pynodes/source/blender/blenkernel/BKE_texture.h	2007-11-01 12:55:47 UTC (rev 12451)
+++ branches/pynodes/source/blender/blenkernel/BKE_texture.h	2007-11-01 14:15:54 UTC (rev 12452)
@@ -52,8 +52,11 @@
 void open_plugin_tex(struct PluginTex *pit);
 struct PluginTex *add_plugin_tex(char *str);
 void free_plugin_tex(struct PluginTex *pit);
+
+void init_colorband(struct ColorBand *coba, int rangetype);
 struct ColorBand *add_colorband(int rangetype);
 int do_colorband(struct ColorBand *coba, float in, float out[4]);
+
 void default_tex(struct Tex *tex);
 struct Tex *add_texture(char *name);
 void default_mtex(struct MTex *mtex);

Modified: branches/pynodes/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/pynodes/source/blender/blenkernel/intern/DerivedMesh.c	2007-11-01 12:55:47 UTC (rev 12451)
+++ branches/pynodes/source/blender/blenkernel/intern/DerivedMesh.c	2007-11-01 14:15:54 UTC (rev 12452)
@@ -51,6 +51,7 @@
 #include "DNA_object_force.h"
 #include "DNA_object_fluidsim.h" // N_T
 #include "DNA_scene_types.h" // N_T
+#include "DNA_texture_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
@@ -61,20 +62,21 @@
 #include "BLI_editVert.h"
 #include "BLI_linklist.h"
 
-#include "BKE_utildefines.h"
 #include "BKE_cdderivedmesh.h"
 #include "BKE_customdata.h"
 #include "BKE_DerivedMesh.h"
+#include "BKE_deform.h"
 #include "BKE_displist.h"
 #include "BKE_effect.h"
 #include "BKE_global.h"
+#include "BKE_key.h"
 #include "BKE_material.h"
+#include "BKE_modifier.h"
 #include "BKE_mesh.h"
 #include "BKE_object.h"
 #include "BKE_subsurf.h"
-#include "BKE_deform.h"
-#include "BKE_modifier.h"
-#include "BKE_key.h"
+#include "BKE_texture.h"
+#include "BKE_utildefines.h"
 
 #ifdef WITH_VERSE
 #include "BKE_verse.h"
@@ -2268,10 +2270,10 @@
 		*fb= 0.0f;
 	}
 }
-static void calc_weightpaint_vert_color(Object *ob, int vert, unsigned char *col)
+static void calc_weightpaint_vert_color(Object *ob, ColorBand *coba, int vert, unsigned char *col)
 {
 	Mesh *me = ob->data;
-	float fr, fg, fb, input = 0.0f;
+	float colf[4], input = 0.0f;
 	int i;
 
 	if (me->dvert) {
@@ -2282,29 +2284,41 @@
 
 	CLAMP(input, 0.0f, 1.0f);
 	
-	weight_to_rgb(input, &fr, &fg, &fb);
+	if(coba)
+		do_colorband(coba, input, colf);
+	else
+		weight_to_rgb(input, colf, colf+1, colf+2);
 	
-	col[3] = (unsigned char)(fr * 255.0f);
-	col[2] = (unsigned char)(fg * 255.0f);
-	col[1] = (unsigned char)(fb * 255.0f);
+	col[3] = (unsigned char)(colf[0] * 255.0f);
+	col[2] = (unsigned char)(colf[1] * 255.0f);
+	col[1] = (unsigned char)(colf[2] * 255.0f);
 	col[0] = 255;
 }
+
+static ColorBand *stored_cb= NULL;
+
+void vDM_ColorBand_store(ColorBand *coba)
+{
+	stored_cb= coba;
+}
+
 static unsigned char *calc_weightpaint_colors(Object *ob) 
 {
 	Mesh *me = ob->data;
 	MFace *mf = me->mface;
+	ColorBand *coba= stored_cb;	/* warning, not a local var */
 	unsigned char *wtcol;
 	int i;
 	
 	wtcol = MEM_callocN (sizeof (unsigned char) * me->totface*4*4, "weightmap");
 	
 	memset(wtcol, 0x55, sizeof (unsigned char) * me->totface*4*4);
-	for (i=0; i<me->totface; i++, mf++){
-		calc_weightpaint_vert_color(ob, mf->v1, &wtcol[(i*4 + 0)*4]); 
-		calc_weightpaint_vert_color(ob, mf->v2, &wtcol[(i*4 + 1)*4]); 
-		calc_weightpaint_vert_color(ob, mf->v3, &wtcol[(i*4 + 2)*4]); 
+	for (i=0; i<me->totface; i++, mf++) {
+		calc_weightpaint_vert_color(ob, coba, mf->v1, &wtcol[(i*4 + 0)*4]); 
+		calc_weightpaint_vert_color(ob, coba, mf->v2, &wtcol[(i*4 + 1)*4]); 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list