diff options
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r-- | source/blender/editors/space_view3d/SConscript | 2 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 6 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/space_view3d.c | 21 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 46 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_edit.c | 5 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_header.c | 5 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_intern.h | 3 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_ops.c | 1 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_snap.c | 198 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 2 |
10 files changed, 63 insertions, 226 deletions
diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript index ba521a5fb1a..1d8e01f2b1b 100644 --- a/source/blender/editors/space_view3d/SConscript +++ b/source/blender/editors/space_view3d/SConscript @@ -13,5 +13,7 @@ incs += ' #source/kernel/gen_system' if env['WITH_BF_GAMEENGINE']: defs.append('GAMEBLENDER=1') +if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): + incs += ' ' + env['BF_PTHREADS_INC'] env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), defines = defs, libtype=['core'], priority=[40] ) diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index c5cbb080b4c..b877266aeaf 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -625,14 +625,14 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa } if(tot) { +#if 0 bglMats mats; /* ZBuffer depth vars */ double ux, uy, uz; float depth; if(v3d->zbuf) bgl_get_mats(&mats); - - +#endif if(rv3d->rflag & RV3D_CLIPPING) for(a=0; a<6; a++) glDisable(GL_CLIP_PLANE0+a); @@ -1885,7 +1885,7 @@ static int draw_dm_creases__setDrawOptions(void *userData, int index) EditEdge *eed = EM_get_edge_for_index(index); if (eed->h==0 && eed->crease!=0.0) { - UI_ThemeColorBlend(TH_WIRE, TH_EDGE_SELECT, eed->crease); + UI_ThemeColorBlend(TH_WIRE, TH_EDGE_CREASE, eed->crease); return 1; } else { return 0; diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 869d0c45f2f..bda7dfcabf1 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -770,6 +770,25 @@ static void view3d_tools_area_draw(const bContext *C, ARegion *ar) ED_region_panels(C, ar, 1, CTX_data_mode_string(C), -1); } +static void view3d_props_area_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch(wmn->category) { + case NC_WM: + if(wmn->data == ND_HISTORY) + ED_region_tag_redraw(ar); + break; + case NC_SCENE: + if(wmn->data == ND_MODE) + ED_region_tag_redraw(ar); + break; + case NC_SPACE: + if(wmn->data == ND_SPACE_VIEW3D) + ED_region_tag_redraw(ar); + break; + } +} + static int view3d_context(const bContext *C, const char *member, bContextDataResult *result) { View3D *v3d= CTX_wm_view3d(C); @@ -952,7 +971,7 @@ void ED_spacetype_view3d(void) art->prefsizex= 0; art->prefsizey= 120; art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES; - art->listener= view3d_buttons_area_listener; + art->listener= view3d_props_area_listener; art->init= view3d_tools_area_init; art->draw= view3d_tools_area_draw; BLI_addhead(&st->regiontypes, art); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index c75e068648f..47ff5c5d556 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -292,7 +292,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_u while(i--) { scalar= bUnit_GetScaler(usys, i); - dx_scalar = dx * scalar * unit->scale_length; + dx_scalar = dx * scalar / unit->scale_length; if (dx_scalar < (GRID_MIN_PX*2)) continue; @@ -855,14 +855,16 @@ static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2 } } -void calc_viewborder(Scene *scene, ARegion *ar, View3D *v3d, rctf *viewborder_r) +void calc_viewborder(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r) { - RegionView3D *rv3d= ar->regiondata; float zoomfac, size[2]; float dx= 0.0f, dy= 0.0f; view3d_get_viewborder_size(scene, ar, size); + if (rv3d == NULL) + rv3d = ar->regiondata; + /* magic zoom calculation, no idea what * it signifies, if you find out, tell me! -zr */ @@ -971,13 +973,14 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) float x3, y3, x4, y4; rctf viewborder; Camera *ca= NULL; + RegionView3D *rv3d= (RegionView3D *)ar->regiondata; if(v3d->camera==NULL) return; if(v3d->camera->type==OB_CAMERA) ca = v3d->camera->data; - calc_viewborder(scene, ar, v3d, &viewborder); + calc_viewborder(scene, ar, rv3d, v3d, &viewborder); x1= viewborder.xmin; y1= viewborder.ymin; x2= viewborder.xmax; @@ -1306,7 +1309,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d) if(rv3d->persp==RV3D_CAMOB) { rctf vb; - calc_viewborder(scene, ar, v3d, &vb); + calc_viewborder(scene, ar, rv3d, v3d, &vb); x1= vb.xmin; y1= vb.ymin; @@ -1797,6 +1800,8 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) Scene *sce; Base *base; Object *ob; + ARegion ar; + RegionView3D rv3d; shadows.first= shadows.last= NULL; @@ -1835,7 +1840,20 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) v3d->flag2 &= ~V3D_SOLID_TEX; GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat); -// XXX drawview3d_render(v3d, viewmat, winsize, winsize, winmat, 1); + + memset(&ar, 0, sizeof(ar)); + memset(&rv3d, 0, sizeof(rv3d)); + + ar.regiondata= &rv3d; + ar.regiontype= RGN_TYPE_WINDOW; + rv3d.persp= RV3D_CAMOB; + copy_m4_m4(rv3d.winmat, winmat); + copy_m4_m4(rv3d.viewmat, viewmat); + invert_m4_m4(rv3d.viewinv, rv3d.viewmat); + mul_m4_m4m4(rv3d.persmat, rv3d.viewmat, rv3d.winmat); + invert_m4_m4(rv3d.persinv, rv3d.viewinv); + + ED_view3d_draw_offscreen(scene, v3d, &ar, winsize, winsize, viewmat, winmat); GPU_lamp_shadow_buffer_unbind(shadow->lamp); v3d->drawtype= drawtype; @@ -1953,9 +1971,7 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, glClearColor(scene->world->horr, scene->world->horg, scene->world->horb, 0.0); } else { - float col[3]; - UI_GetThemeColor3fv(TH_BACK, col); - glClearColor(col[0], col[1], col[2], 0.0); + UI_ThemeClearColor(TH_BACK); } glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); @@ -2145,15 +2161,15 @@ static void draw_viewport_fps(Scene *scene, ARegion *ar) fps = fps / tot; } #endif - + /* is this more then half a frame behind? */ if (fps+0.5 < FPS) { UI_ThemeColor(TH_REDALERT); - sprintf(printable, "fps: %.2f", (float)fps); + BLI_snprintf(printable, sizeof(printable), "fps: %.2f", (float)fps); } else { UI_ThemeColor(TH_TEXT_HI); - sprintf(printable, "fps: %i", (int)(fps+0.5)); + BLI_snprintf(printable, sizeof(printable), "fps: %i", (int)(fps+0.5)); } BLF_draw_default(22, ar->winy-17, 0.0f, printable); @@ -2167,7 +2183,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) Scene *sce; Base *base; Object *ob; - float col[3]; int retopo= 0, sculptparticle= 0; Object *obact = OBACT; char *grid_unit= NULL; @@ -2186,8 +2201,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) } /* clear background */ - UI_GetThemeColor3fv(TH_BACK, col); - glClearColor(col[0], col[1], col[2], 0.0); + UI_ThemeClearColor(TH_BACK); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); /* setup view matrices */ @@ -2366,7 +2380,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) } if (grid_unit) { /* draw below the viewport name */ UI_ThemeColor(TH_TEXT_HI); - BLF_draw_default(10, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, grid_unit); + BLF_draw_default(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, grid_unit); } ob= OBACT; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 996acd61c06..4e41314ef20 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1482,6 +1482,7 @@ static int render_border_exec(bContext *C, wmOperator *op) { View3D *v3d = CTX_wm_view3d(C); ARegion *ar= CTX_wm_region(C); + RegionView3D *rv3d= ED_view3d_context_rv3d(C); Scene *scene= CTX_data_scene(C); rcti rect; @@ -1494,7 +1495,7 @@ static int render_border_exec(bContext *C, wmOperator *op) rect.ymax= RNA_int_get(op->ptr, "ymax"); /* calculate range */ - calc_viewborder(scene, ar, v3d, &vb); + calc_viewborder(scene, ar, rv3d, v3d, &vb); scene->r.border.xmin= ((float)rect.xmin-vb.xmin)/(vb.xmax-vb.xmin); scene->r.border.ymin= ((float)rect.ymin-vb.ymin)/(vb.ymax-vb.ymin); @@ -1527,7 +1528,7 @@ static int render_border_exec(bContext *C, wmOperator *op) static int view3d_render_border_invoke(bContext *C, wmOperator *op, wmEvent *event) { - RegionView3D *rv3d= CTX_wm_region_view3d(C); + RegionView3D *rv3d= ED_view3d_context_rv3d(C); /* if not in camera view do not exec the operator*/ if (rv3d->persp == RV3D_CAMOB) return WM_border_select_invoke(C, op, event); diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index e76546c6080..535b5695182 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -367,8 +367,9 @@ static void do_view3d_header_buttons(bContext *C, void *arg, int event) case B_SEL_FACE: if(em) { if( shift==0 || em->selectmode==0){ - if( ((ts->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_VERTEX) || ((ts->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_EDGE)){ - if(ctrl) EM_convertsel(em, (ts->selectmode ^ SCE_SELECT_FACE),SCE_SELECT_FACE); + if( ((em->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_VERTEX) || ((em->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_EDGE)){ + if(ctrl) + EM_convertsel(em, (em->selectmode ^ SCE_SELECT_FACE),SCE_SELECT_FACE); } em->selectmode = SCE_SELECT_FACE; } diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index e6ba2fa904f..53bc5b7c5d5 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -125,7 +125,7 @@ void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d); void view3d_clr_clipping(void); void view3d_set_clipping(RegionView3D *rv3d); void add_view3d_after(View3D *v3d, Base *base, int type, int flag); -void calc_viewborder(Scene *scene, struct ARegion *ar, View3D *v3d, rctf *viewborder_r); +void calc_viewborder(Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r); void circf(float x, float y, float rad); void circ(float x, float y, float rad); @@ -175,7 +175,6 @@ int minmax_verts(Object *obedit, float *min, float *max); void VIEW3D_OT_snap_selected_to_grid(struct wmOperatorType *ot); void VIEW3D_OT_snap_selected_to_cursor(struct wmOperatorType *ot); -void VIEW3D_OT_snap_selected_to_center(struct wmOperatorType *ot); void VIEW3D_OT_snap_cursor_to_grid(struct wmOperatorType *ot); void VIEW3D_OT_snap_cursor_to_center(struct wmOperatorType *ot); void VIEW3D_OT_snap_cursor_to_selected(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index d2fda2f2f76..da4395e2309 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -93,7 +93,6 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_snap_selected_to_grid); WM_operatortype_append(VIEW3D_OT_snap_selected_to_cursor); - WM_operatortype_append(VIEW3D_OT_snap_selected_to_center); WM_operatortype_append(VIEW3D_OT_snap_cursor_to_grid); WM_operatortype_append(VIEW3D_OT_snap_cursor_to_center); WM_operatortype_append(VIEW3D_OT_snap_cursor_to_selected); diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 48658b57297..424ffcc6ef8 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -872,204 +872,6 @@ void VIEW3D_OT_snap_cursor_to_active(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } -/* ************************************** */ - -static int snap_selected_to_center(bContext *C, wmOperator *op) -{ - extern float originmat[3][3]; /* XXX object.c */ - Object *obedit= CTX_data_edit_object(C); - Scene *scene= CTX_data_scene(C); - View3D *v3d= CTX_wm_view3d(C); - TransVert *tv; - float snaploc[3], imat[3][3], bmat[3][3], vec[3], min[3], max[3], centroid[3]; - int count, a; - - /*calculate the snaplocation (centerpoint) */ - count= 0; - INIT_MINMAX(min, max); - centroid[0]= centroid[1]= centroid[2]= 0.0f; - snaploc[0]= snaploc[1]= snaploc[2]= 0.0f; - - if(obedit) { - tottrans= 0; - - if ELEM6(obedit->type, OB_ARMATURE, OB_LATTICE, OB_MESH, OB_SURF, OB_CURVE, OB_MBALL) - make_trans_verts(obedit, bmat[0], bmat[1], 0); - if(tottrans==0) return OPERATOR_CANCELLED; - - copy_m3_m4(bmat, obedit->obmat); - invert_m3_m3(imat, bmat); - - tv= transvmain; - for(a=0; a<tottrans; a++, tv++) { - VECCOPY(vec, tv->loc); - mul_m3_v3(bmat, vec); - add_v3_v3v3(vec, vec, obedit->obmat[3]); - add_v3_v3v3(centroid, centroid, vec); - DO_MINMAX(vec, min, max); - } - - if(v3d->around==V3D_CENTROID) { - mul_v3_fl(centroid, 1.0/(float)tottrans); - VECCOPY(snaploc, centroid); - } - else { - snaploc[0]= (min[0]+max[0])/2; - snaploc[1]= (min[1]+max[1])/2; - snaploc[2]= (min[2]+max[2])/2; - } - - MEM_freeN(transvmain); - transvmain= NULL; - } - else { - - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { - if(ob->mode & OB_MODE_POSE) { - bPoseChannel *pchan; - bArmature *arm= ob->data; - - for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { - if(pchan->bone->flag & BONE_SELECTED) { - if(pchan->bone->layer & arm->layer) { - VECCOPY(vec, pchan->pose_mat[3]); - add_v3_v3v3(centroid, centroid, vec); - DO_MINMAX(vec, min, max); - count++; - } - } - } - } - else { - /* not armature bones (i.e. objects) */ - VECCOPY(vec, ob->obmat[3]); - add_v3_v3v3(centroid, centroid, vec); - DO_MINMAX(vec, min, max); - count++; - } - } - CTX_DATA_END; - - if(count) { - if(v3d->around==V3D_CENTROID) { - mul_v3_fl(centroid, 1.0/(float)count); - VECCOPY(snaploc, centroid); - } - else { - snaploc[0]= (min[0]+max[0])/2; - snaploc[1]= (min[1]+max[1])/2; - snaploc[2]= (min[2]+max[2])/2; - } - } - } - - /* Snap the selection to the snaplocation (duh!) */ - if(obedit) { - tottrans= 0; - - if ELEM6(obedit->type, OB_ARMATURE, OB_LATTICE, OB_MESH, OB_SURF, OB_CURVE, OB_MBALL) - make_trans_verts(obedit, bmat[0], bmat[1], 0); - if(tottrans==0) return OPERATOR_CANCELLED; - - copy_m3_m4(bmat, obedit->obmat); - invert_m3_m3(imat, bmat); - - tv= transvmain; - for(a=0; a<tottrans; a++, tv++) { - vec[0]= snaploc[0]-obedit->obmat[3][0]; - vec[1]= snaploc[1]-obedit->obmat[3][1]; - vec[2]= snaploc[2]-obedit->obmat[3][2]; - - mul_m3_v3(imat, vec); - VECCOPY(tv->loc, vec); - } - - special_transvert_update(scene, obedit); - - MEM_freeN(transvmain); - transvmain= NULL; - - } - else { - - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { - if(ob->mode & OB_MODE_POSE) { - bPoseChannel *pchan; - bArmature *arm= ob->data; - - for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { - if(pchan->bone->flag & BONE_SELECTED) { - if(pchan->bone->layer & arm->layer) { - if((pchan->bone->flag & BONE_CONNECTED)==0) { - /* get location of cursor in bone-space */ - armature_loc_pose_to_bone(pchan, snaploc, vec); - - /* calculate new position */ - VECCOPY(pchan->loc, vec); - } - /* if the bone has a parent and is connected to the parent, - * don't do anything - will break chain unless we do auto-ik. - */ - } - } - } - - /* auto-keyframing */ - ob->pose->flag |= POSE_DO_UNLOCK; -// XXX autokeyframe_pose_cb_func(ob, TFM_TRANSLATION, 0); - DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - } - else { - ob->recalc |= OB_RECALC_OB; - - vec[0]= -ob->obmat[3][0] + snaploc[0]; - vec[1]= -ob->obmat[3][1] + snaploc[1]; - vec[2]= -ob->obmat[3][2] + snaploc[2]; - - if(ob->parent) { - where_is_object(scene, ob); - - invert_m3_m3(imat, originmat); - mul_m3_v3(imat, vec); - ob->loc[0]+= vec[0]; - ob->loc[1]+= vec[1]; - ob->loc[2]+= vec[2]; - } - else { - ob->loc[0]+= vec[0]; - ob->loc[1]+= vec[1]; - ob->loc[2]+= vec[2]; - } - /* auto-keyframing */ -// XXX autokeyframe_ob_cb_func(ob, TFM_TRANSLATION); - } - } - CTX_DATA_END; - } - - DAG_ids_flush_update(0); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); - - return OPERATOR_FINISHED; -} - -void VIEW3D_OT_snap_selected_to_center(wmOperatorType *ot) -{ - - /* identifiers */ - ot->name= "Snap Selection to Center"; - ot->description= "Snap selected items to selections geometric center"; - ot->idname= "VIEW3D_OT_snap_selected_to_center"; - - /* api callbacks */ - ot->exec= snap_selected_to_center; - ot->poll= ED_operator_view3d_active; - - /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; -} - - /* **************************************************** */ /*New Code - Snap Cursor to Center -*/ static int snap_curs_to_center(bContext *C, wmOperator *op) diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 543af197370..78e6d5f5439 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1820,7 +1820,7 @@ static int game_engine_exec(bContext *C, wmOperator *op) if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS && startscene->gm.stereoflag != STEREO_DOME) { /* Letterbox */ rctf cam_framef; - calc_viewborder(startscene, ar, CTX_wm_view3d(C), &cam_framef); + calc_viewborder(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef); cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin; cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin; cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin; |