[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18090] branches/nurbs/blender: Fix for a bug introduced with new drawmode stuff.

Emmanuel Stone emmanuel.stone at gmail.com
Sat Dec 27 00:29:38 CET 2008


Revision: 18090
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18090
Author:   eman
Date:     2008-12-27 00:29:38 +0100 (Sat, 27 Dec 2008)

Log Message:
-----------
Fix for a bug introduced with new drawmode stuff.
A fix from Laurynas or a bug where clamped/unclamped curves were not respected after extrusion.
Temporary fix for Isoline drawing glitches (does not respect occlude geometry yet)
TODO: Ctrl-F (skinning) needs to be fixed

Modified Paths:
--------------
    branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp
    branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.h
    branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp
    branches/nurbs/blender/source/blender/src/drawobject.c

Modified: branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp	2008-12-26 20:50:06 UTC (rev 18089)
+++ branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.cpp	2008-12-26 23:29:38 UTC (rev 18090)
@@ -281,11 +281,19 @@
   return(UV) ? *_OrderUV[1] : *_OrderUV[0];
 } //eof Object_NURBS::Order()
 
+void Object_NURBS::setEndType(bool UV, short t) {
+	if (NURBS_KV_Periodic == t)
+		Cyclic (UV, 1);
+	else if (NURBS_KV_Open == t)
+		*(_FlagUV [UV]) = 2;//: 0);
+	KnotType(UV, t);
+}
 
+
 void Object_NURBS::KnotType(bool UV, short t) {
-  *_KnotTypeUV[UV]= t;
-	if(t != NURBS_KV_Custom)
-		_RecalculateKnotVector= 1;
+    *_KnotTypeUV[UV] = t;
+    if(t != NURBS_KV_Custom)
+        _RecalculateKnotVector = 1;
 } //eof Object_NURBS::KnotType()
 
 

Modified: branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.h
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.h	2008-12-26 20:50:06 UTC (rev 18089)
+++ branches/nurbs/blender/intern/nurbana/intern/Object_NURBS.h	2008-12-26 23:29:38 UTC (rev 18090)
@@ -46,7 +46,9 @@
     void		SetIsoDensity(int V);
 
     void		Order(bool UV, short v);
-    int			Order(int UV);    
+    int			Order(int UV);
+    
+    void        setEndType(bool UV, short t);
 
     void		KnotType(bool UV, short t);
     short		KnotType(bool UV);

Modified: branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp
===================================================================
--- branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp	2008-12-26 20:50:06 UTC (rev 18089)
+++ branches/nurbs/blender/intern/nurbana/intern/Object_Primitives.cpp	2008-12-26 23:29:38 UTC (rev 18090)
@@ -15,7 +15,7 @@
 	Object_NURBS &no = *ptr;
 	no.Order(0, 4);
 	no.Order(1, 4);
-	no.KnotType(0, NURBS_KV_Open);
+    no.setEndType(0, NURBS_KV_Open);
 	
 	no.SetLengthRef(lengthU, lengthV);
 	no.Length(0, lengthU);
@@ -46,8 +46,8 @@
     	ctlPts++;
     }
     
-    NURBS_Generate::KnotVector(ptr);
-    no.RecalculateKnotVector(1);
+    NURBS_Generate::KnotVector(ptr, 0);
+    no.RecalculateKnotVector(0);
 }
 
 
@@ -57,8 +57,8 @@
     Object_NURBS &no = *ptr;
 	no.Order(0, 4);
 	no.Order(1, 4);
-	no.KnotType(0, NURBS_KV_Open);
-	no.KnotType(1, NURBS_KV_Open);
+    no.setEndType(0, NURBS_KV_Open);
+    no.setEndType(1, NURBS_KV_Open);
 	
 	no.SetLengthRef(lengthU, lengthV);
 	no.Length(0, lengthU);
@@ -99,9 +99,9 @@
 	const int lengthV = 1;
 	const nbReal radius = 1;
 	Object_NURBS &no = *ptr;
-	no.KnotType(0, NURBS_KV_Periodic);
+    no.setEndType(0, NURBS_KV_Periodic);
 	no.Order(0, 4);
-	no.Cyclic(0, 1);
+//	no.Cyclic(0, 1);
 
 	no.SetLengthRef(lengthU, lengthV);
 
@@ -129,11 +129,11 @@
     const int lengthV = 2;
     const nbReal radius = 1;
     Object_NURBS &no = *ptr;
-    no.KnotType(0, NURBS_KV_Periodic);
-    no.KnotType(1, NURBS_KV_Open);
+    no.setEndType(0, NURBS_KV_Periodic);
+    no.setEndType(1, NURBS_KV_Open);
     no.Order(0, 4);
     no.Order(1, 2);
-    no.Cyclic(0, 1);
+//    no.Cyclic(0, 1);
 
     no.SetLengthRef(lengthU, lengthV);
 
@@ -168,10 +168,10 @@
 	Object_NURBS &no = *ptr;
 	no.Order(0, 4);
 	no.Order(1, 4);
-	no.Cyclic(0, 1);
-	no.Cyclic(1, 1);
-    no.KnotType(0, NURBS_KV_Periodic);
-    no.KnotType(1, NURBS_KV_Periodic);
+//	no.Cyclic(0, 1);
+//	no.Cyclic(1, 1);
+    no.setEndType(0, NURBS_KV_Periodic);
+    no.setEndType(1, NURBS_KV_Periodic);
 	no.SetLengthRef(lengthU, lengthV);
     no.Length(0, lengthU);
     no.Length(1, lengthV);
@@ -206,9 +206,9 @@
     const int lengthV = 5;
     const nbReal radius = 1;
     Object_NURBS &no = *ptr;
-    no.Cyclic(0, 1);
-    no.KnotType(0, NURBS_KV_Periodic);
-    no.KnotType(1, NURBS_KV_Open);
+//    no.Cyclic(0, 1);
+    no.setEndType(0, NURBS_KV_Periodic);
+    no.setEndType(1, NURBS_KV_Open);
     no.Order(0, 4);
     no.Order(1, 3);
     no.SetLengthRef(lengthU, lengthV);

Modified: branches/nurbs/blender/source/blender/src/drawobject.c
===================================================================
--- branches/nurbs/blender/source/blender/src/drawobject.c	2008-12-26 20:50:06 UTC (rev 18089)
+++ branches/nurbs/blender/source/blender/src/drawobject.c	2008-12-26 23:29:38 UTC (rev 18090)
@@ -3828,7 +3828,7 @@
 	float vec[3];
 	float imat[4][4];
 	View3D *v3d= G.vd;
-GLUquadricObj *qobj = gluNewQuadric(); 
+	GLUquadricObj *qobj = gluNewQuadric(); 
 
 	if(nu->hide) return;
 
@@ -3842,9 +3842,9 @@
 	size= BIF_GetThemeValuef(TH_VERTEX_SIZE);
 	glPointSize(size);
 
-	bglBegin(GL_POINTS);
 
 	if((nu->type & 7)==1) {
+		bglBegin(GL_POINTS);
 
 		bezt= nu->bezt;
 		a= nu->pntsu;
@@ -3861,20 +3861,23 @@
 
 			bezt++;
 		}
+		bglEnd();
 	}
 	else {
 		bp= nu->bp;
 		a= nu->pntsu*nu->pntsv;
 		while(a--) {
 			if(bp->hide==0) {
+		bglBegin(GL_POINTS);
 				if((bp->f1 & SELECT)==sel) bglVertex3fv(bp->vec);
+		bglEnd();
 			}
 
 			Mat4CpyMat4(imat,G.vd->viewinv);// ob->obmat);//G.vd->viewinv);
 		
 			Normalize(imat[0]);
 			Normalize(imat[1]);
-			Mat4MulVecfl(imat,ob->rot);
+			//Mat4MulVecfl(imat,ob->rot);
 			pixsize= v3d->persmat[0][3]*ob->obmat[3][0]+ v3d->persmat[1][3]*ob->obmat[3][1]+ v3d->persmat[2][3]*ob->obmat[3][2]+ v3d->persmat[3][3];
 			pixsize*= v3d->pixsize;
 			dotSize= pixsize*(size);//*0.4f);
@@ -3889,21 +3892,27 @@
 				// Old style CP vertex draw
 				if(0)
 				{
+					glPushMatrix();
 					bglBegin(GL_POINTS);
 					bglVertex3fv(bp->vec);
 					bglEnd();
+					glPopMatrix();
 				}
 				else
 				{
 					// Not sure why it doesn't work without this - eman
-					glBegin(GL_POLYGON);
-					glEnd();
+				//	glBegin(GL_POLYGON);
+				//	glEnd();
 
+					glPushMatrix();
 					// Disable writing to the depth mask, this allows nested spheres to draw correctly, but also be occluded by geometry
 					glDepthMask(GL_FALSE);
-					glPushMatrix();
 
+					glPointSize(3);
 					bglPolygonOffset(1.0);
+				//	bglBegin(GL_POINTS);
+				//	bglVertex3fv(bp->vec);
+				//	bglEnd();
 					glTranslatef(vec[0], vec[1], vec[2]);
 					dotSize *= 1.5;
 					glScalef(dotSize, dotSize, dotSize);
@@ -3921,10 +3930,10 @@
 					gluSphere(qobj, 0.7, 8, 5);
 
 					bglPolygonOffset(0.0);
-					glPopMatrix();
 					
 					// Re-enable depth masking
 					glDepthMask(GL_TRUE);
+					glPopMatrix();
 				}
 				bp++;
 
@@ -3932,7 +3941,6 @@
 		}
 	}
 
-	bglEnd();
 	glPointSize(1.0);
 	gluDeleteQuadric(qobj); 
 }
@@ -4071,6 +4079,9 @@
 
 
 	DispList *dl;
+	if(G.vd->zbuf) glDisable(GL_DEPTH_TEST);
+glDepthMask(GL_FALSE);
+   
 	nu= nurb;
 	while(nu) {
 		if(nu->hide==0) {
@@ -4128,6 +4139,8 @@
 		nu= nu->next;
 	}
 	
+	glDepthMask(GL_FALSE);
+	glEnable(GL_DEPTH_TEST);
 }
 
 static void drawnurb(Base *base, Nurb *nurb, int dt)





More information about the Bf-blender-cvs mailing list