[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15780] branches/apricot/source: svn merge -r15774:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/ blender

Campbell Barton ideasman42 at gmail.com
Sat Jul 26 17:38:08 CEST 2008


Revision: 15780
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15780
Author:   campbellbarton
Date:     2008-07-26 17:38:05 +0200 (Sat, 26 Jul 2008)

Log Message:
-----------
svn merge -r15774:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/blender

Modified Paths:
--------------
    branches/apricot/source/blender/blenkernel/bad_level_call_stubs/stubs.c
    branches/apricot/source/blender/src/drawgpencil.c
    branches/apricot/source/blender/src/gpencil.c
    branches/apricot/source/blender/src/sequence.c
    branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    branches/apricot/source/gameengine/GameLogic/SCA_LogicManager.cpp
    branches/apricot/source/gameengine/GameLogic/SCA_LogicManager.h
    branches/apricot/source/gameengine/Ketsji/KX_Scene.cpp

Modified: branches/apricot/source/blender/blenkernel/bad_level_call_stubs/stubs.c
===================================================================
--- branches/apricot/source/blender/blenkernel/bad_level_call_stubs/stubs.c	2008-07-26 12:54:03 UTC (rev 15779)
+++ branches/apricot/source/blender/blenkernel/bad_level_call_stubs/stubs.c	2008-07-26 15:38:05 UTC (rev 15780)
@@ -350,7 +350,6 @@
 
 /* editseq.c */
 Sequence *get_forground_frame_seq(int frame){return 0;};
-void set_last_seq(Sequence *seq){};
 void clear_last_seq(Sequence *seq){};
     
 

Modified: branches/apricot/source/blender/src/drawgpencil.c
===================================================================
--- branches/apricot/source/blender/src/drawgpencil.c	2008-07-26 12:54:03 UTC (rev 15779)
+++ branches/apricot/source/blender/src/drawgpencil.c	2008-07-26 15:38:05 UTC (rev 15780)
@@ -228,6 +228,10 @@
 			/* stroke thickness */
 			uiDefButS(block, NUMSLI, B_REDR, "Thickness:",	*xco, *yco-75, 150, 20, &gpl->thickness, 1, 10, 0, 0, "Thickness of strokes (in pixels)");
 			
+			/* debugging options */
+			if (G.f & G_DEBUG) {
+				uiDefButBitI(block, TOG, GP_LAYER_DRAWDEBUG, B_REDR, "Show Points", *xco, *yco-95, 150, 20, &gpl->flag, 0, 0, 0, 0, "Show points which form the strokes");
+			}
 			
 			/* onion-skinning */
 			uiBlockBeginAlign(block);
@@ -243,8 +247,6 @@
 				but= uiDefBut(block, BUT, B_REDR, "Del Last Stroke", *xco+160, *yco-95, 140, 20, NULL, 0, 0, 0, 0, "Erases the last stroke from the active frame (Hotkey = Alt-XKEY/DEL)");
 				uiButSetFunc(but, gp_ui_delstroke_cb, gpd, gpl);
 			uiBlockEndAlign(block);
-			
-			//uiDefButBitI(block, TOG, GP_LAYER_DRAWDEBUG, B_REDR, "Show Points", *xco+160, *yco-75, 130, 20, &gpl->flag, 0, 0, 0, 0, "Show points which form the strokes");
 		}
 	}
 	
@@ -425,32 +427,8 @@
 	glColor4f(color[0], color[1], color[2], color[3]);
 	
 	for (gps= gpf->strokes.first; gps; gps= gps->next) {	
-		/* handle 'eraser' strokes differently */
-		if (gps->flag & GP_STROKE_ERASER) {
-			// FIXME: this method is a failed experiment
-#if 0
-			/* draw stroke twice, first time with 'white' to set a mask to invert
-			 * contents of framebuffer, then second-time the same again but to restore
-			 * the contents
-			 */
-			glEnable(GL_COLOR_LOGIC_OP); 
-			glLogicOp(GL_XOR);
-			
-			glColor4f(1, 1, 1, 1); /* white */
-			
-			gp_draw_stroke(gps->points, gps->totpoints, lthick, dflag, gps->flag, 0, winx, winy);
-			gp_draw_stroke(gps->points, gps->totpoints, lthick, dflag, gps->flag, 0, winx, winy);
-			
-			glDisable(GL_COLOR_LOGIC_OP);
-			
-			/* reset color for drawing next stroke */
-			glColor4f(color[0], color[1], color[2], color[3]);
-#endif
-		}
-		else {
-			/* just draw the stroke once */
-			gp_draw_stroke(gps->points, gps->totpoints, lthick, dflag, gps->flag, debug, winx, winy);
-		}
+		/* just draw the stroke once */
+		gp_draw_stroke(gps->points, gps->totpoints, lthick, dflag, gps->flag, debug, winx, winy);
 	}
 }
 

Modified: branches/apricot/source/blender/src/gpencil.c
===================================================================
--- branches/apricot/source/blender/src/gpencil.c	2008-07-26 12:54:03 UTC (rev 15779)
+++ branches/apricot/source/blender/src/gpencil.c	2008-07-26 15:38:05 UTC (rev 15780)
@@ -662,8 +662,14 @@
 /* ---------- 'Globals' and Defines ----------------- */
 
 /* maximum sizes of gp-session buffer */
-#define GP_STROKE_BUFFER_MAX	5000	
+#define GP_STROKE_BUFFER_MAX	5000
 
+	/* 'Hardcoded' sensitivity thresholds... */
+/* minimum number of pixels mouse should move before new point created */
+#define MIN_MMOVE_PX		3	
+/* minimum length of new segment before new point can be added */
+#define MIN_MDIST_PX		20
+
 /* ------ */
 
 /* Temporary 'Stroke' Operation data */
@@ -877,8 +883,27 @@
 	}
 }
 
+/* check if the current mouse position is suitable for adding a new point */
+static short gp_stroke_filtermval (tGPsdata *p, short mval[2], short pmval[2])
+{
+	short dx= abs(mval[0] - pmval[0]);
+	short dy= abs(mval[1] - pmval[1]);
+	
+	/* check if mouse moved at least certain distance on both axes (best case) */
+	if ((dx > MIN_MMOVE_PX) && (dy > MIN_MMOVE_PX))
+		return 1;
+	
+	/* check if the distance since the last point is significant enough */
+	else if (sqrt(dx*dx + dy*dy) > MIN_MDIST_PX)
+		return 1;
+	
+	/* mouse 'didn't move' */
+	else
+		return 0;
+}
+
 /* add current stroke-point to buffer (returns whether point was successfully added) */
-static short gp_stroke_addpoint (tGPsdata *p, short mval[], float pressure)
+static short gp_stroke_addpoint (tGPsdata *p, short mval[2], float pressure)
 {
 	bGPdata *gpd= p->gpd;
 	bGPDspoint *pt;
@@ -913,6 +938,9 @@
 	bGPdata *gpd= p->gpd;
 	int i=0, cmx=gpd->sbuffer_size;
 	
+	// fixme: currently disabled as it damages too much sometimes
+	return;
+	
 	/* don't try if less than 2 points in buffer */
 	if ((cmx <= 2) || (gpd->sbuffer == NULL))
 		return;
@@ -1033,11 +1061,17 @@
 /* finish off a stroke (clears buffer, but doesn't finish the paint operation) */
 static void gp_paint_strokeend (tGPsdata *p)
 {
-	/* sanitize stroke-points in buffer */
+	/* sanitize stroke-points in buffer (remove jitter) */
 	gp_stroke_smooth(p);
 	
-	/* transfer stroke to frame */
-	gp_stroke_newfrombuffer(p);
+	/* check if doing eraser or not */
+	if (p->gpd->sbuffer_sflag & GP_STROKE_ERASER) {
+		/* get rid of relevant sections of strokes */
+	}
+	else {
+		/* transfer stroke to frame */
+		gp_stroke_newfrombuffer(p);
+	}
 	
 	/* clean up buffer now */
 	gp_session_validatebuffer(p);
@@ -1110,7 +1144,7 @@
 		pressure = get_pressure();
 		
 		/* only add current point to buffer if mouse moved (otherwise wait until it does) */
-		if ((mval[0] != prevmval[0]) || (mval[1] != prevmval[1])) {
+		if (gp_stroke_filtermval(&p, mval, prevmval)) {
 			/* try to add point */
 			ok= gp_stroke_addpoint(&p, mval, pressure);
 			

Modified: branches/apricot/source/blender/src/sequence.c
===================================================================
--- branches/apricot/source/blender/src/sequence.c	2008-07-26 12:54:03 UTC (rev 15779)
+++ branches/apricot/source/blender/src/sequence.c	2008-07-26 15:38:05 UTC (rev 15780)
@@ -1473,8 +1473,8 @@
 		dy = sy;
 
 		if (seq->flag & SEQ_USE_TRANSFORM) {
-			dx = seqrectx;
-			dy = seqrecty;
+			dx = G.scene->r.xsch;
+			dy = G.scene->r.ysch;
 		}
 
 		if (c.top + c.bottom >= se->ibuf->y ||

Modified: branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2008-07-26 12:54:03 UTC (rev 15779)
+++ branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2008-07-26 15:38:05 UTC (rev 15780)
@@ -1958,8 +1958,8 @@
 			// needed for python scripting
 			logicmgr->RegisterGameObjectName(gameobj->GetName(),gameobj);
 
-			// needed for dynamic object morphing
-			logicmgr->RegisterGameObj(gameobj, blenderobject);
+			// needed for group duplication
+			logicmgr->RegisterGameObj(blenderobject, gameobj);
 			for (int i = 0; i < gameobj->GetMeshCount(); i++)
 				logicmgr->RegisterGameMeshName(gameobj->GetMesh(i)->GetName(), blenderobject);
 	
@@ -1981,8 +1981,6 @@
 				gameobj->NodeUpdateGS(0,true);
 				gameobj->Bucketize();
 		
-				if (gameobj->IsDupliGroup())
-					grouplist.insert(blenderobject->dup_group);
 			}
 			else
 			{
@@ -1990,6 +1988,8 @@
 				//at the end of this function if it is not a root object
 				inactivelist->Add(gameobj->AddRef());
 			}
+			if (gameobj->IsDupliGroup())
+				grouplist.insert(blenderobject->dup_group);
 			if (converter->addInitFromFrame){
 				gameobj->NodeSetLocalPosition(posPrev);
 				gameobj->NodeSetLocalOrientation(angor);
@@ -2040,7 +2040,7 @@
 														blenderscene);
 										
 						// this code is copied from above except that
-						// object from groups are never is active layer
+						// object from groups are never in active layer
 						bool isInActiveLayer = false;
 						bool addobj=true;
 						
@@ -2138,8 +2138,8 @@
 							// needed for python scripting
 							logicmgr->RegisterGameObjectName(gameobj->GetName(),gameobj);
 
-							// needed for dynamic object morphing
-							logicmgr->RegisterGameObj(gameobj, blenderobject);
+							// needed for group duplication
+							logicmgr->RegisterGameObj(blenderobject, gameobj);
 							for (int i = 0; i < gameobj->GetMeshCount(); i++)
 								logicmgr->RegisterGameMeshName(gameobj->GetMesh(i)->GetName(), blenderobject);
 					

Modified: branches/apricot/source/gameengine/GameLogic/SCA_LogicManager.cpp
===================================================================
--- branches/apricot/source/gameengine/GameLogic/SCA_LogicManager.cpp	2008-07-26 12:54:03 UTC (rev 15779)
+++ branches/apricot/source/gameengine/GameLogic/SCA_LogicManager.cpp	2008-07-26 15:38:05 UTC (rev 15780)
@@ -127,13 +127,18 @@
 
 
 
-void SCA_LogicManager::RegisterGameObj(CValue* gameobj, void* blendobj) 
+void SCA_LogicManager::RegisterGameObj(void* blendobj, CValue* gameobj) 
 {
-	m_map_gameobj_to_blendobj.insert(CHashedPtr(gameobj), blendobj);
+	m_map_blendobj_to_gameobj.insert(CHashedPtr(blendobj), gameobj);
 }
 
+void SCA_LogicManager::UnregisterGameObj(void* blendobj, CValue* gameobj) 
+{
+	void **obp = m_map_blendobj_to_gameobj[CHashedPtr(blendobj)];
+	if (obp && (CValue*)(*obp) == gameobj)
+		m_map_blendobj_to_gameobj.remove(CHashedPtr(blendobj));
+}
 
-
 CValue* SCA_LogicManager::GetGameObjectByName(const STR_String& gameobjname)
 {
 	STR_HashedString mn = "OB"+gameobjname;
@@ -146,10 +151,10 @@
 }
 
 
-void* SCA_LogicManager::FindBlendObjByGameObj(CValue* gameobject) 
+CValue* SCA_LogicManager::FindGameObjByBlendObj(void* blendobj) 
 {
-	void **obp= m_map_gameobj_to_blendobj[CHashedPtr(gameobject)];
-	return obp?*obp:NULL;
+	void **obp= m_map_blendobj_to_gameobj[CHashedPtr(blendobj)];
+	return obp?(CValue*)(*obp):NULL;
 }
 
 

Modified: branches/apricot/source/gameengine/GameLogic/SCA_LogicManager.h
===================================================================
--- branches/apricot/source/gameengine/GameLogic/SCA_LogicManager.h	2008-07-26 12:54:03 UTC (rev 15779)
+++ branches/apricot/source/gameengine/GameLogic/SCA_LogicManager.h	2008-07-26 15:38:05 UTC (rev 15780)
@@ -109,7 +109,7 @@
 	GEN_Map<STR_HashedString,void*>		m_mapStringToActions;
 
 	GEN_Map<STR_HashedString,void*>		m_map_gamemeshname_to_blendobj;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list