I want to move a polygon along its normal (normal move).

So I calculate the cross vector of the polygon using two sides as vector.

However, when I compare my result with the result of the Xpresso' polygon node - polygon normal' it is different. But the point normal from the Point node is the same as the cross vector I calculate.

Strange?

Is the point normal different then the polygon normal?

Also when I start moving the polygon, my calculation seems to go wrong.

I expect that my calculation of the cross vector is wrong.

I get all the polygon points, normalize them and use them to calculate the vectors.

This might be wrong, because I do not include the starting point?

Note: There is only one polygon in my polygon object.

I do not want to use the cinema 4d 'move normal' command.

```
import c4d
from c4d import utils
import random
#
# move polygon along its normal
#
def main() :
polyobject = doc.SearchObject("MyObject")
polys = polyobject.GetAllPolygons()
p1 = polyobject.GetPoint(polys[0].a)
p2 = polyobject.GetPoint(polys[0].b)
p3 = polyobject.GetPoint(polys[0].c)
p4 = polyobject.GetPoint(polys[0].d)
print p1,p2,p3,p4
np1 = p1.GetNormalized()
np2 = p2.GetNormalized()
np3 = p3.GetNormalized()
np4 = p4.GetNormalized()
p1p2 = (np2-np1)
p1p3 = (np3-np1)
pcross = p1p2.Cross(p1p3)
pcross = pcross.GetNormalized()
print "cross: ", pcross
```

]]>I want to move a polygon along its normal (normal move).

So I calculate the cross vector of the polygon using two sides as vector.

However, when I compare my result with the result of the Xpresso' polygon node - polygon normal' it is different. But the point normal from the Point node is the same as the cross vector I calculate.

Strange?

Is the point normal different then the polygon normal?

Also when I start moving the polygon, my calculation seems to go wrong.

I expect that my calculation of the cross vector is wrong.

I get all the polygon points, normalize them and use them to calculate the vectors.

This might be wrong, because I do not include the starting point?

Note: There is only one polygon in my polygon object.

I do not want to use the cinema 4d 'move normal' command.

```
import c4d
from c4d import utils
import random
#
# move polygon along its normal
#
def main() :
polyobject = doc.SearchObject("MyObject")
polys = polyobject.GetAllPolygons()
p1 = polyobject.GetPoint(polys[0].a)
p2 = polyobject.GetPoint(polys[0].b)
p3 = polyobject.GetPoint(polys[0].c)
p4 = polyobject.GetPoint(polys[0].d)
print p1,p2,p3,p4
np1 = p1.GetNormalized()
np2 = p2.GetNormalized()
np3 = p3.GetNormalized()
np4 = p4.GetNormalized()
p1p2 = (np2-np1)
p1p3 = (np3-np1)
pcross = p1p2.Cross(p1p3)
pcross = pcross.GetNormalized()
print "cross: ", pcross
```

]]>cpoly = polygonObject.GetPolygon(id)

nrm = ((cpoly.a - cpoly.b) % (cpoly.a - cpoly.d)).GetNormalized()

For a cube, I get Vector(0, 0, -1) which is correct. Btw, a bit shorter:

```
def main() :
p = op.GetPolygon(0)
points = op.GetAllPoints()
p1, p2, p4 = points[p.a], points[p.b], points[p.d]
print (p2 - p1).Cross(p4 - p1).GetNormalized()
main()
```

Note that you need to take the forth point into account instead of the third, which might

be the cause why you get "wrong values".

lol, i forgot to access the vectors, cpolys just contains the ids , doh, i am a it dizzy, just

follow nikklas :)

I just checked the polygon-node in XPresso and it gives the same result.

~~@Ferdinand: You also computed the inversed normal. :) It's (B - A) cross (D - A) to compute~~

~~the correct normal.~~

Ehrm wait, I thought that it would be.. but it isn't? Just checked.. Gonna think about that

Originally posted by xxxxxxxxFor a cube, I get Vector(0, 0, -1) which is correct. Btw, a bit shorter:

`def main() : p = op.GetPolygon(0) points = op.GetAllPoints() p1, p2, p4 = points[p.a], points[p.b], points[p.d] print (p2 - p1).Cross(p4 - p1).GetNormalized() main()`

Note that you need to take the forth point into account instead of the third, which might

be the cause why you get "wrong values".

Brilliant again, thanks.

Indeed using p4, I do not get 'wrong values'.

Here the code to get the polygon moving along the normal.

Just add it to all the points of the polygon and do an update.

Note: the calculated cross is now the same as the Xpresso one and Xpresso point normal is the same as the polygon normal.

```
import c4d
from c4d import utils
import random
#
# move polygon along its normal
#
def main() :
frame = doc.GetTime().GetFrame(doc.GetFps())
if (frame >= 5) :
polyobject = doc.SearchObject("MyObject")
p = polyobject.GetPolygon(0) #get polygon
points = polyobject.GetAllPoints() #get all points
p1, p2, p3, p4 = points[p.a], points[p.b], points[p.c], points[p.d]
pcross = (p2 - p1).Cross(p4 - p1).GetNormalized()
print pcross
p1 = p1 + pcross
p2 = p2 + pcross
p3 = p3 + pcross
p4 = p4 + pcross
#print p1,p2,p3,p4
p1 = polyobject.SetPoint(p.a,p1)
p2 = polyobject.SetPoint(p.b,p2)
p3 = polyobject.SetPoint(p.c,p3)
p4 = polyobject.SetPoint(p.d,p4)
polyobject.Message (c4d.MSG_UPDATE)
c4d.EventAdd()
```

]]>