# [Bf-committers] Re: A little Editface Question

Martin Poirier theeth at yahoo.com
Thu Jun 9 15:23:47 CEST 2005

```
--- Ton Roosendaal <ton at blender.org> wrote:

> Hi,
>
> I would sugest a new method. The set_wuv() is a
> horrible construction
> at the moment. Afaik, Johnny already solved copying
> pinning flags, seam
> flags, smooth flags, and so on.
>
> What is needed now is a parametric solution for
> finding new UVs and
> vertexcolors based on an existing face and a 3d
> coordinate that lies
> within the plane of that face. That's basically just
> an interpolation
> function.

I have such code in python, but the generic concept is
very easily portable.

> Code below was copied from render module, I didn't
> compile it! But it
> has the ingredients :)
>
>
> /* input efa and co (vector */
> /* output in TFace: uv (2 values) and vcol (4 char
> values) */
> void set_uv_vcol(EditFace *efa, float *co, float
> *uv, char *col)
> {
>
> 	/* define best projection of face XY, XZ or YZ */
> 		xn= fabs(efa->n[0]);
> 		yn= fabs(efa->n[1]);
> 		zn= fabs(efa->n[2]);
> 		if(zn>=xn && zn>=yn) {i= 0; j= 1;}
> 		else if(yn>=xn && yn>=zn) {i= 0; j= 2;}
> 		else {i= 1; j= 2;}
>
> 	/* calculate u and v */
> 		v1= efa->v1;
> 		v2= efa->v2;
>   		v3= efa->v3;
>
> 		t00= v3->co[i]-v1->co[i]; t01=
> v3->co[j]-v1->co[j];
> 		t10= v3->co[i]-v2->co[i]; t11=
> v3->co[j]-v2->co[j];
>
> 		detsh= 1.0/(t00*t11-t10*t01);	/* potential danger
> */
> 		t00*= detsh; t01*=detsh;
> 		t10*=detsh; t11*=detsh;
>
> 		u= (co[i]-v3->co[i])*t11-(co[j]-v3->co[j])*t10;
> 		v= (co[j]-v3->co[j])*t00-(co[i]-v3->co[i])*t01;
>
> 	/* btw; u and v range from -1 to 0 */
>
> 	/* interpolate */
> 		l= 1.0+u+v;
>
> 		/* pseudocode!!! */
> 		/* just fill in colors or UV texture values here
> */
>
> 		new = l*vertex3_val - u*vertex1_val -
> v*vertex2_val;
>
> }
>
> OK... this now doesn't work yet, since we need to
> get it working for
>
> That's a simple case as well;
>
> 	/* in other triangle */
> 	if(efa->v4 && l < 0.0) {
> 		/* do it all over, but now with vertex 2 replaced
> with 4 */
>
> 	}
>
>
> So, would this work?

The method I have doesn't approximate with a
projection and is very precise, but probably a bit
slower (has to inverse a matrix).

Martin

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
```