2004-05-30 02:46:58 +02:00
|
|
|
#include "MaxInc.h"
|
|
|
|
#include "VNormal.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void VNormal::add(CVector3D& n,unsigned int s)
|
|
|
|
{
|
|
|
|
if (!(s&smooth) && init) {
|
|
|
|
if (next) {
|
|
|
|
next->add(n,s);
|
|
|
|
} else {
|
|
|
|
next=new VNormal(n,s);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
_normal+=n;
|
|
|
|
smooth|=s;
|
|
|
|
init=true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
VNormal* VNormal::get(unsigned int s)
|
|
|
|
{
|
|
|
|
if (smooth&s || !next) {
|
|
|
|
return this;
|
|
|
|
} else {
|
|
|
|
return next->get(s);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void VNormal::get(unsigned int s,CVector3D& normal)
|
|
|
|
{
|
|
|
|
if (smooth&s || !next) {
|
|
|
|
normal=_normal;
|
|
|
|
} else {
|
|
|
|
next->get(s,normal);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void VNormal::normalize()
|
|
|
|
{
|
|
|
|
VNormal *ptr = next, *prev = this;
|
|
|
|
while (ptr) {
|
|
|
|
if (ptr->smooth&smooth) {
|
|
|
|
_normal += ptr->_normal;
|
|
|
|
prev->next = ptr->next;
|
|
|
|
delete ptr;
|
|
|
|
ptr = prev->next;
|
|
|
|
} else {
|
|
|
|
prev = ptr;
|
|
|
|
ptr = ptr->next;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_normal.Normalize();
|
|
|
|
if (next) next->normalize();
|
|
|
|
}
|