// compare two vertices, and return TRUE if both are almost identical (they can be shared) bool RAS_TexVert::closeTo(const RAS_TexVert* other) { return ( /* m_flag == other->m_flag && */ /* at the moment the face only stores the smooth/flat setting so dont bother comparing it */ m_rgba == other->m_rgba && MT_fuzzyEqual(MT_Vector3(m_normal), MT_Vector3(other->m_normal)) && MT_fuzzyEqual(MT_Vector3(m_tangent), MT_Vector3(other->m_tangent)) && MT_fuzzyEqual(MT_Vector2(m_uv1), MT_Vector2(other->m_uv1)) && MT_fuzzyEqual(MT_Vector2(m_uv2), MT_Vector2(other->m_uv2)) /* && MT_fuzzyEqual(MT_Vector3(m_localxyz), MT_Vector3(other->m_localxyz))*/) ; /* dont bother comparing m_localxyz since we know there from the same vert */ }
// compare two vertices, and return TRUE if both are almost identical (they can be shared) bool RAS_TexVert::closeTo(const RAS_TexVert* other) { bool uv_match = true; for (int i=0; i<MAX_UNIT; i++) uv_match = uv_match && MT_fuzzyEqual(MT_Vector2(m_uvs[i]), MT_Vector2(other->m_uvs[i])); return ( /* m_flag == other->m_flag && */ /* at the moment the face only stores the smooth/flat setting so don't bother comparing it */ m_rgba == other->m_rgba && MT_fuzzyEqual(MT_Vector3(m_normal), MT_Vector3(other->m_normal)) && MT_fuzzyEqual(MT_Vector3(m_tangent), MT_Vector3(other->m_tangent)) && uv_match /* && MT_fuzzyEqual(MT_Vector3(m_localxyz), MT_Vector3(other->m_localxyz))*/); /* don't bother comparing m_localxyz since we know there from the same vert */ }
void RAS_IDisplayArray::UpdateFrom(RAS_IDisplayArray *other, int flag) { if (flag & TANGENT_MODIFIED) { for (unsigned int i = 0, size = other->GetVertexCount(); i < size; ++i) { GetVertex(i)->SetTangent(MT_Vector4(other->GetVertex(i)->getTangent())); } } if (flag & UVS_MODIFIED) { const unsigned short uvSize = min_ii(GetVertexUvSize(), other->GetVertexUvSize()); for (unsigned int i = 0, size = other->GetVertexCount(); i < size; ++i) { for (unsigned int uv = 0; uv < uvSize; ++uv) { GetVertex(i)->SetUV(uv, MT_Vector2(other->GetVertex(i)->getUV(uv))); } } } if (flag & POSITION_MODIFIED) { for (unsigned int i = 0, size = other->GetVertexCount(); i < size; ++i) { GetVertex(i)->SetXYZ(MT_Vector3(other->GetVertex(i)->getXYZ())); } } if (flag & NORMAL_MODIFIED) { for (unsigned int i = 0, size = other->GetVertexCount(); i < size; ++i) { GetVertex(i)->SetNormal(MT_Vector3(other->GetVertex(i)->getNormal())); } } if (flag & COLORS_MODIFIED) { const unsigned short colorSize = min_ii(GetVertexColorSize(), other->GetVertexColorSize()); for (unsigned int i = 0, size = other->GetVertexCount(); i < size; ++i) { for (unsigned int color = 0; color < colorSize; ++color) { GetVertex(i)->SetRGBA(color, other->GetVertex(i)->getRawRGBA(color)); } } } }
PyObject *KX_VertexProxy::PyGetUV2() { return PyObjectFrom(MT_Vector2(m_vertex->getUV(1))); }