- moved navmesh conversion code to ED_Editors project (ED_navmesh_conversion.h and navmesh_conversion.cpp files)

- added new custom data layer CD_Recast
This commit is contained in:
Nick Samarin
2010-07-30 13:02:32 +00:00
parent 870e0e37e5
commit dbc8d4274f
12 changed files with 566 additions and 43 deletions

View File

@@ -27,9 +27,10 @@
*/
#include <math.h>
#include "Recast.h"
#include "NavMeshConversion.h"
extern "C"{
#include "ED_navmesh_conversion.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "BLI_math.h"
@@ -66,7 +67,7 @@ static void drawNavMeshColored(DerivedMesh *dm)
int a, glmode;
MVert *mvert = (MVert *)CustomData_get_layer(&dm->vertData, CD_MVERT);
MFace *mface = (MFace *)CustomData_get_layer(&dm->faceData, CD_MFACE);
int* polygonIdx = (int*)CustomData_get_layer(&dm->faceData, CD_PROP_INT);
int* polygonIdx = (int*)CustomData_get_layer(&dm->faceData, CD_RECAST);
if (!polygonIdx)
return;
const float BLACK_COLOR[3] = {0.f, 0.f, 0.f};
@@ -86,7 +87,7 @@ static void drawNavMeshColored(DerivedMesh *dm)
glBegin(glmode = GL_QUADS);
for(a = 0; a < dm->numFaceData; a++, mface++) {
int new_glmode = mface->v4?GL_QUADS:GL_TRIANGLES;
int polygonIdx = *(int*)CustomData_get(&dm->faceData, a, CD_PROP_INT);
int polygonIdx = *(int*)CustomData_get(&dm->faceData, a, CD_RECAST);
if (polygonIdx<=0)
memcpy(col, BLACK_COLOR, 3*sizeof(float));
else
@@ -128,10 +129,10 @@ static DerivedMesh *createNavMeshForVisualization(NavMeshModifierData *mmd,Deriv
int maxFaces = dm->getNumFaces(dm);
result = CDDM_copy(dm);
int *recastData = (int*)CustomData_get_layer(&dm->faceData, CD_PROP_INT);
CustomData_add_layer_named(&result->faceData, CD_PROP_INT, CD_DUPLICATE,
int *recastData = (int*)CustomData_get_layer(&dm->faceData, CD_RECAST);
CustomData_add_layer_named(&result->faceData, CD_RECAST, CD_DUPLICATE,
recastData, maxFaces, "recastData");
recastData = (int*)CustomData_get_layer(&result->faceData, CD_PROP_INT);
recastData = (int*)CustomData_get_layer(&result->faceData, CD_RECAST);
result->drawFacesTex = navDM_drawFacesTex;
result->drawFacesSolid = navDM_drawFacesSolid;
@@ -206,7 +207,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
{
DerivedMesh *result = NULL;
NavMeshModifierData *nmmd = (NavMeshModifierData*) md;
bool hasRecastData = CustomData_has_layer(&derivedData->faceData, CD_PROP_INT)>0;
bool hasRecastData = CustomData_has_layer(&derivedData->faceData, CD_RECAST)>0;
if (ob->body_type!=OB_BODY_TYPE_NAVMESH || !hasRecastData )
{
//convert to nav mesh object:
@@ -218,8 +219,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
if (!hasRecastData)
{
int numFaces = derivedData->getNumFaces(derivedData);
CustomData_add_layer_named(&derivedData->faceData, CD_PROP_INT, CD_CALLOC, NULL, numFaces, "recastData");
int* recastData = (int*)CustomData_get_layer(&derivedData->faceData, CD_PROP_INT);
CustomData_add_layer_named(&derivedData->faceData, CD_RECAST, CD_CALLOC, NULL, numFaces, "recastData");
int* recastData = (int*)CustomData_get_layer(&derivedData->faceData, CD_RECAST);
for (int i=0; i<numFaces; i++)
{
recastData[i] = i+1;
@@ -228,8 +229,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
Mesh* obmesh = (Mesh *)ob->data;
if (obmesh)
{
CustomData_add_layer_named(&obmesh->fdata, CD_PROP_INT, CD_CALLOC, NULL, numFaces, "recastData");
int* recastData = (int*)CustomData_get_layer(&obmesh->fdata, CD_PROP_INT);
CustomData_add_layer_named(&obmesh->fdata, CD_RECAST, CD_CALLOC, NULL, numFaces, "recastData");
int* recastData = (int*)CustomData_get_layer(&obmesh->fdata, CD_RECAST);
for (int i=0; i<numFaces; i++)
{
recastData[i] = i+1;