diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-03-25 12:20:19 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-03-25 12:20:19 +0400 |
commit | 3b711a6ed009b35bb69cd0ca878eeb8d55fa0e77 (patch) | |
tree | b3fdb366cb49bdea5b57dfa6ba4a82635c68d0ee /source/blender/editors/mesh/mesh_navmesh.c | |
parent | a2ebfc82dbe954acc432ae017ac62a30a11b6a16 (diff) | |
parent | e99a23fc6b33b5097eab44aac19c2a089ddebce6 (diff) |
Merged changes in the trunk up to revision 45133.
Conflicts resolved:
source/blender/blenloader/intern/readfile.c
source/blender/blenloader/intern/writefile.c
source/blender/bmesh/intern/bmesh_construct.c
source/blender/bmesh/intern/bmesh_mesh_conv.c
source/blender/bmesh/intern/bmesh_mesh_conv.h
source/blender/editors/interface/interface_templates.c
source/blender/editors/interface/resources.c
source/blender/editors/mesh/bmesh_select.c
source/blender/editors/mesh/bmesh_tools.c
source/blender/editors/space_view3d/drawobject.c
source/blender/render/intern/source/shadeoutput.c
Diffstat (limited to 'source/blender/editors/mesh/mesh_navmesh.c')
-rw-r--r-- | source/blender/editors/mesh/mesh_navmesh.c | 210 |
1 files changed, 105 insertions, 105 deletions
diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index 38d632ffaee..02ef1540cc1 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -37,6 +37,11 @@ #include "DNA_modifier_types.h" #include "DNA_ID.h" +#include "BLI_listbase.h" +#include "BLI_utildefines.h" +#include "BLI_math_vector.h" +#include "BLI_linklist.h" + #include "BKE_library.h" #include "BKE_depsgraph.h" #include "BKE_context.h" @@ -49,11 +54,6 @@ #include "BKE_report.h" #include "BKE_tessmesh.h" -#include "BLI_listbase.h" -#include "BLI_utildefines.h" -#include "BLI_math_vector.h" -#include "BLI_linklist.h" - #include "ED_object.h" #include "ED_mesh.h" #include "ED_screen.h" @@ -66,26 +66,26 @@ #include "mesh_intern.h" #include "recast-capi.h" -static void createVertsTrisData(bContext *C, LinkNode* obs, int *nverts_r, float **verts_r, int *ntris_r, int **tris_r) +static void createVertsTrisData(bContext *C, LinkNode *obs, int *nverts_r, float **verts_r, int *ntris_r, int **tris_r) { MVert *mvert; - int nfaces= 0, *tri, i, curnverts, basenverts, curnfaces; + int nfaces = 0, *tri, i, curnverts, basenverts, curnfaces; MFace *mface; float co[3], wco[3]; Object *ob; LinkNode *oblink, *dmlink; DerivedMesh *dm; - Scene* scene= CTX_data_scene(C); - LinkNode* dms= NULL; + Scene *scene = CTX_data_scene(C); + LinkNode *dms = NULL; int nverts, ntris, *tris; float *verts; - nverts= 0; - ntris= 0; + nverts = 0; + ntris = 0; /* calculate number of verts and tris */ - for(oblink= obs; oblink; oblink= oblink->next) { + for (oblink = obs; oblink; oblink= oblink->next) { ob= (Object*) oblink->link; dm= mesh_create_derived_no_virtual(scene, ob, NULL, CD_MASK_MESH); BLI_linklist_append(&dms, (void*)dm); @@ -96,9 +96,9 @@ static void createVertsTrisData(bContext *C, LinkNode* obs, int *nverts_r, float /* resolve quad faces */ mface= dm->getTessFaceArray(dm); - for(i= 0; i<nfaces; i++) { - MFace* mf= &mface[i]; - if(mf->v4) + for (i= 0; i<nfaces; i++) { + MFace *mf= &mface[i]; + if (mf->v4) ntris+=1; } } @@ -109,7 +109,7 @@ static void createVertsTrisData(bContext *C, LinkNode* obs, int *nverts_r, float basenverts= 0; tri= tris; - for(oblink= obs, dmlink= dms; oblink && dmlink; + for (oblink= obs, dmlink= dms; oblink && dmlink; oblink= oblink->next, dmlink= dmlink->next) { ob= (Object*) oblink->link; dm= (DerivedMesh*) dmlink->link; @@ -118,7 +118,7 @@ static void createVertsTrisData(bContext *C, LinkNode* obs, int *nverts_r, float mvert= dm->getVertArray(dm); /* copy verts */ - for(i= 0; i<curnverts; i++) { + for (i= 0; i<curnverts; i++) { MVert *v= &mvert[i]; copy_v3_v3(co, v->co); @@ -133,15 +133,15 @@ static void createVertsTrisData(bContext *C, LinkNode* obs, int *nverts_r, float curnfaces= dm->getNumTessFaces(dm); mface= dm->getTessFaceArray(dm); - for(i= 0; i<curnfaces; i++) { - MFace* mf= &mface[i]; + for (i= 0; i<curnfaces; i++) { + MFace *mf= &mface[i]; tri[0]= basenverts + mf->v1; tri[1]= basenverts + mf->v3; tri[2]= basenverts + mf->v2; tri += 3; - if(mf->v4) { + if (mf->v4) { tri[0]= basenverts + mf->v1; tri[1]= basenverts + mf->v4; tri[2]= basenverts + mf->v3; @@ -153,7 +153,7 @@ static void createVertsTrisData(bContext *C, LinkNode* obs, int *nverts_r, float } /* release derived mesh */ - for(dmlink= dms; dmlink; dmlink= dmlink->next) { + for (dmlink= dms; dmlink; dmlink= dmlink->next) { dm= (DerivedMesh*) dmlink->link; dm->release(dm); } @@ -172,7 +172,7 @@ static int buildNavMesh(const RecastData *recastParams, int nverts, float *verts float bmin[3], bmax[3]; struct recast_heightfield *solid; unsigned char *triflags; - struct recast_compactHeightfield* chf; + struct recast_compactHeightfield *chf; struct recast_contourSet *cset; int width, height, walkableHeight, walkableClimb, walkableRadius; int minRegionArea, mergeRegionArea, maxEdgeLen; @@ -198,7 +198,7 @@ static int buildNavMesh(const RecastData *recastParams, int nverts, float *verts /* Allocate voxel heightfield where we rasterize our input data to */ solid= recast_newHeightfield(); - if(!recast_createHeightfield(solid, width, height, bmin, bmax, recastParams->cellsize, recastParams->cellheight)) { + if (!recast_createHeightfield(solid, width, height, bmin, bmax, recastParams->cellsize, recastParams->cellheight)) { recast_destroyHeightfield(solid); return 0; @@ -220,7 +220,7 @@ static int buildNavMesh(const RecastData *recastParams, int nverts, float *verts /* ** Step 4: Partition walkable surface to simple regions ** */ chf= recast_newCompactHeightfield(); - if(!recast_buildCompactHeightfield(walkableHeight, walkableClimb, solid, chf)) { + if (!recast_buildCompactHeightfield(walkableHeight, walkableClimb, solid, chf)) { recast_destroyHeightfield(solid); recast_destroyCompactHeightfield(chf); @@ -237,14 +237,14 @@ static int buildNavMesh(const RecastData *recastParams, int nverts, float *verts } /* Prepare for region partitioning, by calculating distance field along the walkable surface */ - if(!recast_buildDistanceField(chf)) { + if (!recast_buildDistanceField(chf)) { recast_destroyCompactHeightfield(chf); return 0; } /* Partition the walkable surface into simple regions without holes */ - if(!recast_buildRegions(chf, 0, minRegionArea, mergeRegionArea)) { + if (!recast_buildRegions(chf, 0, minRegionArea, mergeRegionArea)) { recast_destroyCompactHeightfield(chf); return 0; @@ -254,7 +254,7 @@ static int buildNavMesh(const RecastData *recastParams, int nverts, float *verts /* Create contours */ cset= recast_newContourSet(); - if(!recast_buildContours(chf, recastParams->edgemaxerror, maxEdgeLen, cset)) { + if (!recast_buildContours(chf, recastParams->edgemaxerror, maxEdgeLen, cset)) { recast_destroyCompactHeightfield(chf); recast_destroyContourSet(cset); @@ -263,7 +263,7 @@ static int buildNavMesh(const RecastData *recastParams, int nverts, float *verts /* ** Step 6: Build polygons mesh from contours ** */ *pmesh= recast_newPolyMesh(); - if(!recast_buildPolyMesh(cset, recastParams->vertsperpoly, *pmesh)) { + if (!recast_buildPolyMesh(cset, recastParams->vertsperpoly, *pmesh)) { recast_destroyCompactHeightfield(chf); recast_destroyContourSet(cset); recast_destroyPolyMesh(*pmesh); @@ -275,7 +275,7 @@ static int buildNavMesh(const RecastData *recastParams, int nverts, float *verts /* ** Step 7: Create detail mesh which allows to access approximate height on each polygon ** */ *dmesh= recast_newPolyMeshDetail(); - if(!recast_buildPolyMeshDetail(*pmesh, chf, detailSampleDist, detailSampleMaxError, *dmesh)) { + if (!recast_buildPolyMeshDetail(*pmesh, chf, detailSampleDist, detailSampleMaxError, *dmesh)) { recast_destroyCompactHeightfield(chf); recast_destroyContourSet(cset); recast_destroyPolyMesh(*pmesh); @@ -290,15 +290,15 @@ static int buildNavMesh(const RecastData *recastParams, int nverts, float *verts return 1; } -static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, struct recast_polyMeshDetail *dmesh, Base* base) +static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh, struct recast_polyMeshDetail *dmesh, Base *base) { float co[3], rot[3]; BMEditMesh *em; int i,j, k; - unsigned short* v; + unsigned short *v; int face[3]; Scene *scene= CTX_data_scene(C); - Object* obedit; + Object *obedit; int createob= base==NULL; int nverts, nmeshes, nvp; unsigned short *verts, *polys; @@ -309,7 +309,7 @@ static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, zero_v3(co); zero_v3(rot); - if(createob) { + if (createob) { /* create new object */ obedit= ED_object_add_type(C, OB_MESH, co, rot, FALSE, 1); } @@ -323,7 +323,7 @@ static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, ED_object_enter_editmode(C, EM_DO_UNDO|EM_IGNORE_LAYER); em = BMEdit_FromObject(obedit); - if(!createob) { + if (!createob) { /* clear */ EDBM_ClearMesh(em); } @@ -333,7 +333,7 @@ static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, recast_polyMeshGetBoundbox(pmesh, bmin, NULL); recast_polyMeshGetCell(pmesh, &cs, &ch); - for(i= 0; i<nverts; i++) { + for (i= 0; i<nverts; i++) { v= &verts[3*i]; co[0]= bmin[0] + v[0]*cs; co[1]= bmin[1] + v[1]*ch; @@ -351,22 +351,22 @@ static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, dverts= recast_polyMeshDetailGetVerts(dmesh, NULL); tris= recast_polyMeshDetailGetTris(dmesh, NULL); - for(i= 0; i<nmeshes; i++) { + for (i= 0; i<nmeshes; i++) { int uniquevbase= em->bm->totvert; unsigned int vbase= meshes[4*i+0]; unsigned short ndv= meshes[4*i+1]; unsigned short tribase= meshes[4*i+2]; unsigned short trinum= meshes[4*i+3]; - const unsigned short* p= &polys[i*nvp*2]; + const unsigned short *p= &polys[i*nvp*2]; int nv= 0; - for(j= 0; j < nvp; ++j) { - if(p[j]==0xffff) break; + for (j= 0; j < nvp; ++j) { + if (p[j]==0xffff) break; nv++; } /* create unique verts */ - for(j= nv; j<ndv; j++) { + for (j= nv; j<ndv; j++) { copy_v3_v3(co, &dverts[3*(vbase + j)]); SWAP(float, co[1], co[2]); BM_vert_create(em->bm, co, NULL); @@ -375,13 +375,13 @@ static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, EDBM_init_index_arrays(em, 1, 0, 0); /* create faces */ - for(j= 0; j<trinum; j++) { - unsigned char* tri= &tris[4*(tribase+j)]; - BMFace* newFace; - int* polygonIdx; + for (j= 0; j<trinum; j++) { + unsigned char *tri= &tris[4*(tribase+j)]; + BMFace *newFace; + int *polygonIdx; - for(k= 0; k<3; k++) { - if(tri[k]<nv) + for (k= 0; k<3; k++) { + if (tri[k]<nv) face[k] = p[tri[k]]; /* shared vertex */ else face[k] = uniquevbase+tri[k]-nv; /* unique vertex */ @@ -410,7 +410,7 @@ static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, ED_object_exit_editmode(C, EM_FREEDATA); WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit); - if(createob) { + if (createob) { obedit->gameflag&= ~OB_COLLISION; obedit->gameflag|= OB_NAVMESH; obedit->body_type= OB_BODY_TYPE_NAVMESH; @@ -422,11 +422,11 @@ static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, return obedit; } -static int create_navmesh_exec(bContext *C, wmOperator *op) +static int navmesh_create_exec(bContext *C, wmOperator *op) { - Scene* scene= CTX_data_scene(C); - LinkNode* obs= NULL; - Base* navmeshBase= NULL; + Scene *scene= CTX_data_scene(C); + LinkNode *obs= NULL; + Base *navmeshBase= NULL; CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { if (base->object->type == OB_MESH) { @@ -470,15 +470,15 @@ static int create_navmesh_exec(bContext *C, wmOperator *op) void MESH_OT_navmesh_make(wmOperatorType *ot) { /* identifiers */ - ot->name= "Create navigation mesh"; - ot->description= "Create navigation mesh for selected objects"; - ot->idname= "MESH_OT_navmesh_make"; + ot->name = "Create navigation mesh"; + ot->description = "Create navigation mesh for selected objects"; + ot->idname = "MESH_OT_navmesh_make"; /* api callbacks */ - ot->exec= create_navmesh_exec; + ot->exec = navmesh_create_exec; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } static int navmesh_face_copy_exec(bContext *C, wmOperator *op) @@ -489,19 +489,19 @@ static int navmesh_face_copy_exec(bContext *C, wmOperator *op) /* do work here */ BMFace *efa_act= BM_active_face_get(em->bm, FALSE); - if(efa_act) { - if(CustomData_has_layer(&em->bm->pdata, CD_RECAST)) { + if (efa_act) { + if (CustomData_has_layer(&em->bm->pdata, CD_RECAST)) { BMFace *efa; BMIter iter; int targetPolyIdx= *(int*)CustomData_bmesh_get(&em->bm->pdata, efa_act->head.data, CD_RECAST); targetPolyIdx= targetPolyIdx>=0? targetPolyIdx : -targetPolyIdx; - if(targetPolyIdx > 0) { + if (targetPolyIdx > 0) { /* set target poly idx to other selected faces */ BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - if(BM_elem_flag_test(efa, BM_ELEM_SELECT) && efa != efa_act) { - int* recastDataBlock= (int*)CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_RECAST); - *recastDataBlock= targetPolyIdx; + if (BM_elem_flag_test(efa, BM_ELEM_SELECT) && efa != efa_act) { + int *recastDataBlock = (int*)CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_RECAST); + *recastDataBlock = targetPolyIdx; } } } @@ -520,16 +520,16 @@ static int navmesh_face_copy_exec(bContext *C, wmOperator *op) void MESH_OT_navmesh_face_copy(struct wmOperatorType *ot) { /* identifiers */ - ot->name= "NavMesh Copy Face Index"; - ot->description= "Copy the index from the active face"; - ot->idname= "MESH_OT_navmesh_face_copy"; + ot->name = "NavMesh Copy Face Index"; + ot->description = "Copy the index from the active face"; + ot->idname = "MESH_OT_navmesh_face_copy"; /* api callbacks */ - ot->poll= ED_operator_editmesh; - ot->exec= navmesh_face_copy_exec; + ot->poll = ED_operator_editmesh; + ot->exec = navmesh_face_copy_exec; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } static int compare(const void * a, const void * b) @@ -537,18 +537,18 @@ static int compare(const void * a, const void * b) return ( *(int*)a - *(int*)b ); } -static int findFreeNavPolyIndex(BMEditMesh* em) +static int findFreeNavPolyIndex(BMEditMesh *em) { /* construct vector of indices */ - int numfaces= em->bm->totface; - int* indices= MEM_callocN(sizeof(int)*numfaces, "findFreeNavPolyIndex(indices)"); - BMFace* ef; + int numfaces = em->bm->totface; + int *indices = MEM_callocN(sizeof(int)*numfaces, "findFreeNavPolyIndex(indices)"); + BMFace *ef; BMIter iter; - int i, idx= em->bm->totface-1, freeIdx= 1; + int i, idx = em->bm->totface-1, freeIdx = 1; /*XXX this originally went last to first, but that isn't possible anymore*/ BM_ITER(ef, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - int polyIdx= *(int*)CustomData_bmesh_get(&em->bm->pdata, ef->head.data, CD_RECAST); + int polyIdx = *(int*)CustomData_bmesh_get(&em->bm->pdata, ef->head.data, CD_RECAST); indices[idx]= polyIdx; idx--; } @@ -556,11 +556,11 @@ static int findFreeNavPolyIndex(BMEditMesh* em) qsort(indices, numfaces, sizeof(int), compare); /* search first free index */ - freeIdx= 1; - for(i= 0; i<numfaces; i++) { - if(indices[i]==freeIdx) + freeIdx = 1; + for (i = 0; i<numfaces; i++) { + if (indices[i]==freeIdx) freeIdx++; - else if(indices[i]>freeIdx) + else if (indices[i]>freeIdx) break; } @@ -576,17 +576,17 @@ static int navmesh_face_add_exec(bContext *C, wmOperator *UNUSED(op)) BMFace *ef; BMIter iter; - if(CustomData_has_layer(&em->bm->pdata, CD_RECAST)) { - int targetPolyIdx= findFreeNavPolyIndex(em); + if (CustomData_has_layer(&em->bm->pdata, CD_RECAST)) { + int targetPolyIdx = findFreeNavPolyIndex(em); - if(targetPolyIdx>0) { + if (targetPolyIdx>0) { /* set target poly idx to selected faces */ /*XXX this originally went last to first, but that isn't possible anymore*/ BM_ITER(ef, &iter, em->bm, BM_FACES_OF_MESH, NULL) { - if(BM_elem_flag_test(ef, BM_ELEM_SELECT)) { - int *recastDataBlock= (int*)CustomData_bmesh_get(&em->bm->pdata, ef->head.data, CD_RECAST); - *recastDataBlock= targetPolyIdx; + if (BM_elem_flag_test(ef, BM_ELEM_SELECT)) { + int *recastDataBlock = (int*)CustomData_bmesh_get(&em->bm->pdata, ef->head.data, CD_RECAST); + *recastDataBlock = targetPolyIdx; } } } @@ -601,23 +601,23 @@ static int navmesh_face_add_exec(bContext *C, wmOperator *UNUSED(op)) void MESH_OT_navmesh_face_add(struct wmOperatorType *ot) { /* identifiers */ - ot->name= "NavMesh New Face Index"; - ot->description= "Add a new index and assign it to selected faces"; - ot->idname= "MESH_OT_navmesh_face_add"; + ot->name = "NavMesh New Face Index"; + ot->description = "Add a new index and assign it to selected faces"; + ot->idname = "MESH_OT_navmesh_face_add"; /* api callbacks */ - ot->poll= ED_operator_editmesh; - ot->exec= navmesh_face_add_exec; + ot->poll = ED_operator_editmesh; + ot->exec = navmesh_face_add_exec; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } static int navmesh_obmode_data_poll(bContext *C) { Object *ob = ED_object_active_context(C); if (ob && (ob->mode == OB_MODE_OBJECT) && (ob->type == OB_MESH)) { - Mesh *me= ob->data; + Mesh *me = ob->data; return CustomData_has_layer(&me->pdata, CD_RECAST); } return FALSE; @@ -635,7 +635,7 @@ static int navmesh_obmode_poll(bContext *C) static int navmesh_reset_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = ED_object_active_context(C); - Mesh *me= ob->data; + Mesh *me = ob->data; CustomData_free_layers(&me->pdata, CD_RECAST, me->totpoly); @@ -650,22 +650,22 @@ static int navmesh_reset_exec(bContext *C, wmOperator *UNUSED(op)) void MESH_OT_navmesh_reset(struct wmOperatorType *ot) { /* identifiers */ - ot->name= "NavMesh Reset Index Values"; - ot->description= "Assign a new index to every face"; - ot->idname= "MESH_OT_navmesh_reset"; + ot->name = "NavMesh Reset Index Values"; + ot->description = "Assign a new index to every face"; + ot->idname = "MESH_OT_navmesh_reset"; /* api callbacks */ - ot->poll= navmesh_obmode_poll; - ot->exec= navmesh_reset_exec; + ot->poll = navmesh_obmode_poll; + ot->exec = navmesh_reset_exec; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } static int navmesh_clear_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = ED_object_active_context(C); - Mesh *me= ob->data; + Mesh *me = ob->data; CustomData_free_layers(&me->pdata, CD_RECAST, me->totpoly); @@ -678,14 +678,14 @@ static int navmesh_clear_exec(bContext *C, wmOperator *UNUSED(op)) void MESH_OT_navmesh_clear(struct wmOperatorType *ot) { /* identifiers */ - ot->name= "NavMesh Clear Data"; - ot->description= "Remove navmesh data from this mesh"; - ot->idname= "MESH_OT_navmesh_clear"; + ot->name = "NavMesh Clear Data"; + ot->description = "Remove navmesh data from this mesh"; + ot->idname = "MESH_OT_navmesh_clear"; /* api callbacks */ - ot->poll= navmesh_obmode_data_poll; - ot->exec= navmesh_clear_exec; + ot->poll = navmesh_obmode_data_poll; + ot->exec = navmesh_clear_exec; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } |