Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/mesh/mesh_navmesh.c
| Show First 20 Lines • Show All 332 Lines • ▼ Show 20 Lines | |||||
| static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh, struct recast_polyMeshDetail *dmesh, | static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh, struct recast_polyMeshDetail *dmesh, | ||||
| Base *base, unsigned int lay) | Base *base, unsigned int lay) | ||||
| { | { | ||||
| float co[3], rot[3]; | float co[3], rot[3]; | ||||
| BMEditMesh *em; | BMEditMesh *em; | ||||
| int i, j, k; | int i, j, k; | ||||
| unsigned short *v; | unsigned short *v; | ||||
| int face[3]; | int face[3]; | ||||
| SceneLayer *scene_layer = CTX_data_scene_layer(C); | ViewLayer *view_layer = CTX_data_view_layer(C); | ||||
| Object *obedit; | Object *obedit; | ||||
| int createob = base == NULL; | int createob = base == NULL; | ||||
| int nverts, nmeshes, nvp; | int nverts, nmeshes, nvp; | ||||
| unsigned short *verts, *polys; | unsigned short *verts, *polys; | ||||
| unsigned int *meshes; | unsigned int *meshes; | ||||
| float bmin[3], cs, ch, *dverts; | float bmin[3], cs, ch, *dverts; | ||||
| unsigned char *tris; | unsigned char *tris; | ||||
| zero_v3(co); | zero_v3(co); | ||||
| zero_v3(rot); | zero_v3(rot); | ||||
| if (createob) { | if (createob) { | ||||
| /* create new object */ | /* create new object */ | ||||
| obedit = ED_object_add_type(C, OB_MESH, "Navmesh", co, rot, false, lay); | obedit = ED_object_add_type(C, OB_MESH, "Navmesh", co, rot, false, lay); | ||||
| } | } | ||||
| else { | else { | ||||
| obedit = base->object; | obedit = base->object; | ||||
| BKE_scene_layer_base_deselect_all(scene_layer); | BKE_view_layer_base_deselect_all(view_layer); | ||||
| BKE_scene_layer_base_select(scene_layer, base); | BKE_view_layer_base_select(view_layer, base); | ||||
| copy_v3_v3(obedit->loc, co); | copy_v3_v3(obedit->loc, co); | ||||
| copy_v3_v3(obedit->rot, rot); | copy_v3_v3(obedit->rot, rot); | ||||
| } | } | ||||
| ED_object_editmode_enter(C, EM_DO_UNDO | EM_IGNORE_LAYER); | ED_object_editmode_enter(C, EM_DO_UNDO | EM_IGNORE_LAYER); | ||||
| em = BKE_editmesh_from_object(obedit); | em = BKE_editmesh_from_object(obedit); | ||||
| if (!createob) { | if (!createob) { | ||||
| ▲ Show 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh, struct recast_polyMeshDetail *dmesh, | ||||
| BKE_mesh_ensure_navmesh(obedit->data); | BKE_mesh_ensure_navmesh(obedit->data); | ||||
| return obedit; | return obedit; | ||||
| } | } | ||||
| static int navmesh_create_exec(bContext *C, wmOperator *op) | static int navmesh_create_exec(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| SceneLayer *scene_layer = CTX_data_scene_layer(C); | ViewLayer *view_layer = CTX_data_view_layer(C); | ||||
| LinkNode *obs = NULL; | LinkNode *obs = NULL; | ||||
| Base *navmeshBase = NULL; | Base *navmeshBase = NULL; | ||||
| CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) | CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) | ||||
| { | { | ||||
| if (base->object->type == OB_MESH) { | if (base->object->type == OB_MESH) { | ||||
| if (base->object->body_type == OB_BODY_TYPE_NAVMESH) { | if (base->object->body_type == OB_BODY_TYPE_NAVMESH) { | ||||
| if (!navmeshBase || base == scene_layer->basact) { | if (!navmeshBase || base == view_layer->basact) { | ||||
| navmeshBase = base; | navmeshBase = base; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| BLI_linklist_prepend(&obs, base->object); | BLI_linklist_prepend(&obs, base->object); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 252 Lines • Show Last 20 Lines | |||||