Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/mesh/mesh_navmesh.c
| Show First 20 Lines • Show All 333 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]; | ||||
| WorkSpace *workspace = CTX_wm_workspace(C); | |||||
| eObjectMode initial_workspace_mode = workspace->preferred_mode; | |||||
| ViewLayer *view_layer = CTX_data_view_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_view_layer_base_deselect_all(view_layer); | BKE_view_layer_base_deselect_all(view_layer); | ||||
| BKE_view_layer_base_select(view_layer, base); | BKE_view_layer_base_select(view_layer, base, CTX_wm_workspace(C)); | ||||
| 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 75 Lines • ▼ Show 20 Lines | static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh, struct recast_polyMeshDetail *dmesh, | ||||
| recast_destroyPolyMesh(pmesh); | recast_destroyPolyMesh(pmesh); | ||||
| recast_destroyPolyMeshDetail(dmesh); | recast_destroyPolyMeshDetail(dmesh); | ||||
| DEG_id_tag_update((ID *)obedit->data, OB_RECALC_DATA); | DEG_id_tag_update((ID *)obedit->data, OB_RECALC_DATA); | ||||
| WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data); | WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data); | ||||
| ED_object_editmode_exit(C, EM_FREEDATA); | ED_object_editmode_exit(C, EM_FREEDATA); | ||||
| /* restore workspace mode */ | |||||
| workspace->preferred_mode = initial_workspace_mode; | |||||
| WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); | WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); | ||||
| if (createob) { | if (createob) { | ||||
| obedit->gameflag &= ~OB_COLLISION; | obedit->gameflag &= ~OB_COLLISION; | ||||
| obedit->gameflag |= OB_NAVMESH; | obedit->gameflag |= OB_NAVMESH; | ||||
| obedit->body_type = OB_BODY_TYPE_NAVMESH; | obedit->body_type = OB_BODY_TYPE_NAVMESH; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 277 Lines • Show Last 20 Lines | |||||