diff options
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r-- | source/blender/editors/space_view3d/drawarmature.c | 24 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawmesh.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 88 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 14 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_edit.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_header.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_intern.h | 4 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_select.c | 12 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 169 |
9 files changed, 160 insertions, 157 deletions
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index b1b1f504920..0931b6f04ff 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1872,7 +1872,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt) if (v3d->zbuf) glDisable(GL_DEPTH_TEST); - for (eBone=G.edbo.first, index=0; eBone; eBone=eBone->next, index++) { + for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) { if (eBone->layer & arm->layer) { if ((eBone->flag & (BONE_HIDDEN_A|BONE_NO_DEFORM))==0) { if (eBone->flag & (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL)) @@ -1889,7 +1889,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt) /* if solid we draw it first */ if ((dt > OB_WIRE) && (arm->drawtype!=ARM_LINE)) { index= 0; - for (eBone=G.edbo.first, index=0; eBone; eBone=eBone->next, index++) { + for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) { if (eBone->layer & arm->layer) { if ((eBone->flag & BONE_HIDDEN_A)==0) { glPushMatrix(); @@ -1926,7 +1926,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt) else if (arm->flag & ARM_EDITMODE) index= 0; /* do selection codes */ - for (eBone=G.edbo.first; eBone; eBone=eBone->next) { + for (eBone=arm->edbo->first; eBone; eBone=eBone->next) { if (eBone->layer & arm->layer) { if ((eBone->flag & BONE_HIDDEN_A)==0) { @@ -1983,7 +1983,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt) if (v3d->zbuf) glDisable(GL_DEPTH_TEST); - for (eBone=G.edbo.first, index=0; eBone; eBone=eBone->next, index++) { + for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) { if(eBone->layer & arm->layer) { if ((eBone->flag & BONE_HIDDEN_A)==0) { @@ -2295,8 +2295,8 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, Base *base) colfac = (end-CFRA)/range; UI_ThemeColorShadeAlpha(TH_WIRE, 0, -128-(int)(120.0f*sqrt(colfac))); - do_all_pose_actions(ob); - where_is_pose(ob); + do_all_pose_actions(scene, ob); + where_is_pose(scene, ob); draw_pose_channels(scene, v3d, base, OB_WIRE); } glDisable(GL_BLEND); @@ -2372,8 +2372,8 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, Base *base) CFRA= (int)ak->cfra; - do_all_pose_actions(ob); - where_is_pose(ob); + do_all_pose_actions(scene, ob); + where_is_pose(scene, ob); draw_pose_channels(scene, v3d, base, OB_WIRE); } glDisable(GL_BLEND); @@ -2454,8 +2454,8 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, Base *base) else CFRA= (int)floor(actframe+ctime); if (CFRA!=cfrao) { - do_all_pose_actions(ob); - where_is_pose(ob); + do_all_pose_actions(scene, ob); + where_is_pose(scene, ob); draw_pose_channels(scene, v3d, base, OB_WIRE); } } @@ -2470,8 +2470,8 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, Base *base) else CFRA= (int)floor(actframe-ctime); if (CFRA != cfrao) { - do_all_pose_actions(ob); - where_is_pose(ob); + do_all_pose_actions(scene, ob); + where_is_pose(scene, ob); draw_pose_channels(scene, v3d, base, OB_WIRE); } } diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index ad62329f8fc..1fa7a4d96e1 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -477,7 +477,7 @@ void draw_mesh_text(Scene *scene, Object *ob, int glsl) if(FACESEL_PAINT_TEST) return; - ddm = mesh_get_derived_deform(ob, CD_MASK_BAREMESH); + ddm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH); for(a=0, mf=mface; a<totface; a++, tface++, mf++) { int mode= tface->mode; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 963eaf15c48..a58100e2b00 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -120,7 +120,7 @@ extern ListBase editNurb; /* editmball.c */ extern ListBase editelems; -static void draw_bounding_volume(Object *ob); +static void draw_bounding_volume(Scene *scene, Object *ob); static void drawcube_size(float size); static void drawcircle_size(float size); @@ -1123,7 +1123,7 @@ static void drawlattice__point(Lattice *lt, DispList *dl, int u, int v, int w, i } /* lattice color is hardcoded, now also shows weightgroup values in edit mode */ -static void drawlattice(View3D *v3d, Object *ob) +static void drawlattice(Scene *scene, View3D *v3d, Object *ob) { Lattice *lt= ob->data; DispList *dl; @@ -1132,7 +1132,7 @@ static void drawlattice(View3D *v3d, Object *ob) /* now we default make displist, this will modifiers work for non animated case */ if(ob->disp.first==NULL) - lattice_calc_modifiers(ob); + lattice_calc_modifiers(scene, ob); dl= find_displist(&ob->disp, DL_VERTS); if(lt->editlatt) { @@ -1207,7 +1207,7 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co void mesh_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, EditVert *eve, int x, int y, int index), void *userData, int clipVerts) { struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; ViewContext vc; int clipVerts; float pmat[4][4], vmat[4][4]; } data; - DerivedMesh *dm = editmesh_get_derived_cage(vc->obedit, vc->em, CD_MASK_BAREMESH); + DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH); data.vc= *vc; data.func = func; @@ -1251,7 +1251,7 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0 void mesh_foreachScreenEdge(ViewContext *vc, void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, int clipVerts) { struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index); void *userData; ViewContext vc; int clipVerts; float pmat[4][4], vmat[4][4]; } data; - DerivedMesh *dm = editmesh_get_derived_cage(vc->obedit, vc->em, CD_MASK_BAREMESH); + DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH); data.vc= *vc; data.func = func; @@ -1283,7 +1283,7 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *ce void mesh_foreachScreenFace(ViewContext *vc, void (*func)(void *userData, EditFace *efa, int x, int y, int index), void *userData) { struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ViewContext vc; float pmat[4][4], vmat[4][4]; } data; - DerivedMesh *dm = editmesh_get_derived_cage(vc->obedit, vc->em, CD_MASK_BAREMESH); + DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH); data.vc= *vc; data.func = func; @@ -2151,7 +2151,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f int draw_wire = 0; int totvert, totedge, totface; DispList *dl; - DerivedMesh *dm= mesh_get_derived_final(ob, get_viewedit_datamask()); + DerivedMesh *dm= mesh_get_derived_final(scene, ob, get_viewedit_datamask()); if(!dm) return; @@ -2172,7 +2172,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f if (ob==OBACT && FACESEL_PAINT_TEST) draw_wire = 0; if(dt==OB_BOUNDBOX) { - draw_bounding_volume(ob); + draw_bounding_volume(scene, ob); } else if(hasHaloMat || (totface==0 && totedge==0)) { glPointSize(1.5); @@ -2276,9 +2276,9 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f /* release and reload derivedmesh because it might be freed in shadeDispList due to a different datamask */ dm->release(dm); - shadeDispList(base); + shadeDispList(scene, base); dl = find_displist(&ob->disp, DL_VERTCOL); - dm= mesh_get_derived_final(ob, get_viewedit_datamask()); + dm= mesh_get_derived_final(scene, ob, get_viewedit_datamask()); } if ((v3d->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !draw_wire) { @@ -2370,7 +2370,7 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, Base *base, int dt, int f if (obedit!=ob) finalDM = cageDM = editmesh_get_derived_base(ob, em); else - cageDM = editmesh_get_derived_cage_and_final(ob, em, &finalDM, + cageDM = editmesh_get_derived_cage_and_final(scene, ob, em, &finalDM, get_viewedit_datamask()); if(dt>OB_WIRE) { @@ -2714,7 +2714,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt) drawDispListsolid(lb, ob, 1); } else if(dt == OB_SHADED) { - if(ob->disp.first==0) shadeDispList(base); + if(ob->disp.first==0) shadeDispList(scene, base); drawDispListshaded(lb, ob); } else { @@ -2752,7 +2752,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt) drawDispListsolid(lb, ob, 1); } else if(dt==OB_SHADED) { - if(ob->disp.first==NULL) shadeDispList(base); + if(ob->disp.first==NULL) shadeDispList(scene, base); drawDispListshaded(lb, ob); } else { @@ -2770,7 +2770,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt) if( is_basis_mball(ob)) { lb= &ob->disp; - if(lb->first==NULL) makeDispListMBall(ob); + if(lb->first==NULL) makeDispListMBall(scene, ob); if(lb->first==NULL) return 1; if(solid) { @@ -2781,7 +2781,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt) } else if(dt == OB_SHADED) { dl= lb->first; - if(dl && dl->col1==0) shadeDispList(base); + if(dl && dl->col1==0) shadeDispList(scene, base); drawDispListshaded(lb, ob); } else { @@ -2824,7 +2824,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part Object *bb_ob=0; float vel[3], vec[3], vec2[3], imat[4][4], onevec[3]={0.0f,0.0f,0.0f}, bb_center[3]; float timestep, pixsize=1.0, pa_size, pa_time, r_tilt; - float cfra=bsystem_time(ob,(float)CFRA,0.0); + float cfra= bsystem_time(scene, ob,(float)CFRA,0.0); float *vdata=0, *vedata=0, *cdata=0, *ndata=0, *vd=0, *ved=0, *cd=0, *nd=0, xvec[3], yvec[3], zvec[3]; float ma_r=0.0f, ma_g=0.0f, ma_b=0.0f; int a, k, k_max=0, totpart, totpoint=0, draw_as, path_nbr=0; @@ -2846,7 +2846,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part if(pars==0) return; // XXX what logic is this? - if(!scene->obedit && psys_in_edit_mode(psys) + if(!scene->obedit && psys_in_edit_mode(scene, psys) && psys->flag & PSYS_HAIR_DONE && part->draw_as==PART_DRAW_PATH) return; @@ -2913,7 +2913,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part draw_as=part->draw_as; if(part->flag&PART_GLOB_TIME) - cfra=bsystem_time(0,(float)CFRA,0.0); + cfra=bsystem_time(scene, 0, (float)CFRA, 0.0f); if(psys->pathcache){ path_possible=1; @@ -3027,7 +3027,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part cd=cdata; nd=ndata; - psys->lattice=psys_get_lattice(ob,psys); + psys->lattice= psys_get_lattice(scene, ob, psys); } if(draw_as){ @@ -3113,7 +3113,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part for(k=0; k<=path_nbr; k++){ if(draw_keys){ state.time=(float)k/(float)path_nbr; - psys_get_particle_on_path(ob,psys,a,&state,1); + psys_get_particle_on_path(scene, ob, psys, a, &state,1); } else if(path_nbr){ if(k<=k_max){ @@ -3126,7 +3126,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part } else{ state.time=cfra; - if(psys_get_particle_state(ob,psys,a,&state,0)==0){ + if(psys_get_particle_state(scene, ob, psys, a, &state,0)==0){ next_pa=1; break; } @@ -3504,14 +3504,14 @@ static void draw_particle_edit(Scene *scene, View3D *v3d, Object *ob, ParticleSy /* create path and child path cache if it doesn't exist already */ if(psys->pathcache==0){ // XXX PE_hide_keys_time(psys,CFRA); - psys_cache_paths(ob,psys,CFRA,0); + psys_cache_paths(scene, ob, psys, CFRA,0); } if(psys->pathcache==0) return; if(pset->flag & PE_SHOW_CHILD && psys->part->draw_as == PART_DRAW_PATH) { if(psys->childcache==0) - psys_cache_child_paths(ob, psys, CFRA, 0); + psys_cache_child_paths(scene, ob, psys, CFRA, 0); } else if(!(pset->flag & PE_SHOW_CHILD) && psys->childcache) free_child_path_cache(psys); @@ -4484,7 +4484,7 @@ static void draw_bb_quadric(BoundBox *bb, short type) gluDeleteQuadric(qobj); } -static void draw_bounding_volume(Object *ob) +static void draw_bounding_volume(Scene *scene, Object *ob) { BoundBox *bb=0; @@ -4497,7 +4497,7 @@ static void draw_bounding_volume(Object *ob) else if(ob->type==OB_MBALL) { bb= ob->bb; if(bb==0) { - makeDispListMBall(ob); + makeDispListMBall(scene, ob); bb= ob->bb; } } @@ -4761,7 +4761,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) base->flag= 0; - where_is_object_time(ob, (scene->r.cfra)); + where_is_object_time(scene, ob, (scene->r.cfra)); draw_object(scene, ar, v3d, base, 0); } ce= ce->next; @@ -4775,7 +4775,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) base->flag= SELECT; - where_is_object_time(ob, (scene->r.cfra)); + where_is_object_time(scene, ob, (scene->r.cfra)); draw_object(scene, ar, v3d, base, 0); } ce= ce->next; @@ -4791,7 +4791,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) (scene->r.cfra)= cfraont; memcpy(&ob->loc, temp, 7*3*sizeof(float)); - where_is_object(ob); + where_is_object(scene, ob); v3d->drawtype= drawtype; BLI_freelistN(&elems); @@ -4802,7 +4802,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } /* patch? children objects with a timeoffs change the parents. How to solve! */ - /* if( ((int)ob->ctime) != F_(scene->r.cfra)) where_is_object(ob); */ + /* if( ((int)ob->ctime) != F_(scene->r.cfra)) where_is_object(scene, ob); */ wmMultMatrix(ob->obmat); @@ -4912,7 +4912,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) break; case OB_FONT: cu= ob->data; - if (cu->disp.first==NULL) makeDispListCurveTypes(ob, 0); + if (cu->disp.first==NULL) makeDispListCurveTypes(scene, ob, 0); if(cu->editstr) { tekentextcurs(); @@ -4996,7 +4996,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } } else if(dt==OB_BOUNDBOX) - draw_bounding_volume(ob); + draw_bounding_volume(scene, ob); else if(boundbox_clip(v3d, ob->obmat, cu->bb)) empty_object= drawDispList(scene, v3d, base, dt); @@ -5005,13 +5005,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) case OB_SURF: cu= ob->data; /* still needed for curves hidden in other layers. depgraph doesnt handle that yet */ - if (cu->disp.first==NULL) makeDispListCurveTypes(ob, 0); + if (cu->disp.first==NULL) makeDispListCurveTypes(scene, ob, 0); if(cu->editnurb) { drawnurb(scene, v3d, base, cu->editnurb->first, dt); } else if(dt==OB_BOUNDBOX) - draw_bounding_volume(ob); + draw_bounding_volume(scene, ob); else if(boundbox_clip(v3d, ob->obmat, cu->bb)) { empty_object= drawDispList(scene, v3d, base, dt); @@ -5026,7 +5026,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if(mb->editelems) drawmball(scene, v3d, base, dt); else if(dt==OB_BOUNDBOX) - draw_bounding_volume(ob); + draw_bounding_volume(scene, ob); else empty_object= drawmball(scene, v3d, base, dt); break; @@ -5042,7 +5042,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) drawcamera(scene, v3d, ob, flag); break; case OB_LATTICE: - drawlattice(v3d, ob); + drawlattice(scene, v3d, ob); break; case OB_ARMATURE: if(dt>OB_WIRE) GPU_enable_material(0, NULL); // we use default material @@ -5069,7 +5069,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if(G.f & G_PARTICLEEDIT && ob==OBACT) { psys= NULL; // XXX PE_get_current(ob); - if(psys && !scene->obedit && psys_in_edit_mode(psys)) + if(psys && !scene->obedit && psys_in_edit_mode(scene, psys)) draw_particle_edit(scene, v3d, ob, psys, dt); } glDepthMask(GL_TRUE); @@ -5094,7 +5094,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if(dtx & OB_AXIS) { drawaxes(1.0f, flag, OB_ARROWS); } - if(dtx & OB_BOUNDBOX) draw_bounding_volume(ob); + if(dtx & OB_BOUNDBOX) draw_bounding_volume(scene, ob); if(dtx & OB_TEXSPACE) drawtexspace(ob); if(dtx & OB_DRAWNAME) { /* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */ @@ -5188,7 +5188,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) make_axis_color(col, col2, 'z'); glColor3ubv((GLubyte *)col2); - cob= constraints_make_evalob(ob, NULL, CONSTRAINT_OBTYPE_OBJECT); + cob= constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT); for (curcon = list->first; curcon; curcon=curcon->next) { bConstraintTypeInfo *cti= constraint_get_typeinfo(curcon); @@ -5201,7 +5201,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) for (ct= targets.first; ct; ct= ct->next) { /* calculate target's matrix */ if (cti->get_target_matrix) - cti->get_target_matrix(curcon, cob, ct, bsystem_time(ob, (float)(scene->r.cfra), give_timeoffset(ob))); + cti->get_target_matrix(curcon, cob, ct, bsystem_time(scene, ob, (float)(scene->r.cfra), give_timeoffset(ob))); else Mat4One(ct->matrix); @@ -5361,9 +5361,9 @@ static int bbs_mesh_solid__setDrawOpts(void *userData, int index, int *drawSmoot } /* TODO remove this - since face select mode now only works with painting */ -static void bbs_mesh_solid(Object *ob) +static void bbs_mesh_solid(Scene *scene, Object *ob) { - DerivedMesh *dm = mesh_get_derived_final(ob, get_viewedit_datamask()); + DerivedMesh *dm = mesh_get_derived_final(scene, ob, get_viewedit_datamask()); Mesh *me = (Mesh*)ob->data; glColor3ub(0, 0, 0); @@ -5386,7 +5386,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob) Mesh *me= ob->data; EditMesh *em= me->edit_mesh; if(em) { - DerivedMesh *dm = editmesh_get_derived_cage(ob, em, CD_MASK_BAREMESH); + DerivedMesh *dm = editmesh_get_derived_cage(scene, ob, em, CD_MASK_BAREMESH); EM_init_index_arrays(em, 1, 1, 1); @@ -5408,7 +5408,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob) EM_free_index_arrays(); } - else bbs_mesh_solid(ob); + else bbs_mesh_solid(scene, ob); } break; case OB_CURVE: @@ -5433,7 +5433,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, Object *ob, int if(me->edit_mesh) edm= editmesh_get_derived_base(ob, me->edit_mesh); else - dm = mesh_get_derived_final(ob, CD_MASK_BAREMESH); + dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH); if(dt<=OB_WIRE) { if(dm) diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 90840533d55..655bd164758 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -797,7 +797,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d) } /* colour depends on whether there is a keyframe */ - if (id_frame_has_keyframe((ID *)ob, frame_to_float(CFRA), v3d->keyflags)) + if (id_frame_has_keyframe((ID *)ob, frame_to_float(scene, CFRA), v3d->keyflags)) UI_ThemeColor(TH_VERTEX_SELECT); else UI_ThemeColor(TH_TEXT_HI); @@ -1099,7 +1099,7 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d) G.f |= G_BACKBUFSEL; - base= (G.scene->basact); + base= (scene->basact); if(base && (base->lay & v3d->lay)) { draw_object_backbufsel(scene, v3d, base->object); } @@ -1629,7 +1629,7 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *)) v3d->flag &= ~V3D_SELECT_OUTLINE; setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */ - setviewmatrixview3d(v3d); /* note: calls where_is_object for camera... */ + setviewmatrixview3d(scene, v3d); /* note: calls where_is_object for camera... */ Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat); Mat4Invert(v3d->persinv, v3d->persmat); @@ -1805,12 +1805,12 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d) /* sets first, we allow per definition current scene to have dependencies on sets */ if(scene->set) { for(SETLOOPER(scene->set, base)) - object_handle_update(base->object); // bke_object.h + object_handle_update(scene, base->object); // bke_object.h } v3d->lay_used = 0; for(base= scene->base.first; base; base= base->next) { - object_handle_update(base->object); // bke_object.h + object_handle_update(scene, base->object); // bke_object.h v3d->lay_used |= base->lay; } @@ -1819,7 +1819,7 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d) gpu_update_lamps_shadows(scene, v3d); setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */ - setviewmatrixview3d(v3d); /* note: calls where_is_object for camera... */ + setviewmatrixview3d(scene, v3d); /* note: calls where_is_object for camera... */ Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat); Mat4Invert(v3d->persinv, v3d->persmat); @@ -1875,7 +1875,7 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d) if(v3d->persp==2) { if(scene->world) { if(scene->world->mode & WO_STARS) { - RE_make_stars(NULL, star_stuff_init_func, star_stuff_vertex_func, + RE_make_stars(NULL, scene, star_stuff_init_func, star_stuff_vertex_func, star_stuff_term_func); } } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index a5ea2a83b77..c5ca9f86450 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -817,7 +817,7 @@ static int viewcenter_exec(bContext *C, wmOperator *op) /* like a localview with if(TESTBASE(v3d, base)) { minmax_object(base->object, min, max); /* account for duplis */ - minmax_object_duplis(base->object, min, max); + minmax_object_duplis(scene, base->object, min, max); ok= 1; } diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 3de551a516a..c2aea73b2f3 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -224,7 +224,7 @@ void do_layer_buttons(bContext *C, short event) ED_area_tag_redraw(sa); if(sa->spacetype==SPACE_OOPS) allqueue(REDRAWVIEW3D, 1); /* 1==also do headwin */ - if(v3d->drawtype == OB_SHADED) reshadeall_displist(); + if(v3d->drawtype == OB_SHADED) reshadeall_displist(scene); allqueue(REDRAWNLA, 0); } diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 79c99721a2b..06ccbc1406d 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -128,8 +128,6 @@ void view3d_get_object_project_mat(View3D *v3d, struct Object *ob, float pmat[4] void view3d_project_float(ARegion *ar, float *vec, float *adr, float mat[4][4]); int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize); -void view_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, float *lens); -void obmat_to_viewmat(View3D *v3d, Object *ob, short smooth); short view3d_opengl_select(struct ViewContext *vc, unsigned int *buffer, unsigned int bufsize, rcti *input); void initlocalview(Scene *scene, ARegion *ar, View3D *v3d); @@ -141,7 +139,7 @@ void centerview(ARegion *ar, View3D *v3d); void smooth_view(struct bContext *C, Object *, Object *, float *ofs, float *quat, float *dist, float *lens); void setwinmatrixview3d(View3D *v3d, int winx, int winy, rctf *rect); /* rect: for picking */ -void setviewmatrixview3d(View3D *v3d); +void setviewmatrixview3d(Scene *scene, View3D *v3d); #endif /* ED_VIEW3D_INTERN_H */ diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 8fa54c7c7ad..35b9df6c889 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -560,13 +560,14 @@ static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short mo static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short select) { + bArmature *arm= vc->obedit->data; EditBone *ebone; float vec[3]; short sco1[2], sco2[2], didpoint; /* set editdata in vc */ - for (ebone=G.edbo.first; ebone; ebone=ebone->next) { + for (ebone= arm->edbo->first; ebone; ebone=ebone->next) { VECCOPY(vec, ebone->head); Mat4MulVecfl(vc->obedit->obmat, vec); @@ -1352,10 +1353,11 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) } } else if(obedit->type==OB_ARMATURE) { + bArmature *arm= obedit->data; EditBone *ebone; /* clear flag we use to detect point was affected */ - for(ebone= G.edbo.first; ebone; ebone= ebone->next) + for(ebone= arm->edbo->first; ebone; ebone= ebone->next) ebone->flag &= ~BONE_DONE; hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); @@ -1364,7 +1366,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) for (a=0; a<hits; a++){ index = buffer[(4*a)+3]; if (index!=-1) { - ebone = BLI_findlink(&G.edbo, index & ~(BONESEL_ANY)); + ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY)); if (index & BONESEL_TIP) { ebone->flag |= BONE_DONE; if (val==LEFTMOUSE) ebone->flag |= BONE_TIPSEL; @@ -1380,7 +1382,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) } /* now we have to flush tag from parents... */ - for(ebone= G.edbo.first; ebone; ebone= ebone->next) { + for(ebone= arm->edbo->first; ebone; ebone= ebone->next) { if(ebone->parent && (ebone->flag & BONE_CONNECTED)) { if(ebone->parent->flag & BONE_DONE) ebone->flag |= BONE_DONE; @@ -1391,7 +1393,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) for (a=0; a<hits; a++){ index = buffer[(4*a)+3]; if (index!=-1) { - ebone = BLI_findlink(&G.edbo, index & ~(BONESEL_ANY)); + ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY)); if (index & BONESEL_BONE) { if(!(ebone->flag & BONE_DONE)) { if (val==LEFTMOUSE) diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 1986203f839..48379e0913a 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -111,6 +111,82 @@ float *give_cursor(Scene *scene, View3D *v3d) else return scene->cursor; } + +/* Gets the lens and clipping values from a camera of lamp type object */ +static void object_lens_clip_settings(Object *ob, float *lens, float *clipsta, float *clipend) +{ + if (!ob) return; + + if(ob->type==OB_LAMP ) { + Lamp *la = ob->data; + if (lens) { + float x1, fac; + fac= cos( M_PI*la->spotsize/360.0); + x1= saacos(fac); + *lens= 16.0*fac/sin(x1); + } + if (clipsta) *clipsta= la->clipsta; + if (clipend) *clipend= la->clipend; + } + else if(ob->type==OB_CAMERA) { + Camera *cam= ob->data; + if (lens) *lens= cam->lens; + if (clipsta) *clipsta= cam->clipsta; + if (clipend) *clipend= cam->clipend; + } + else { + if (lens) *lens= 35.0f; + } +} + + +/* Gets the view trasnformation from a camera +* currently dosnt take camzoom into account +* +* The dist is not modified for this function, if NULL its assimed zero +* */ +/* Scene can be NULL */ +static void view_settings_from_ob(Scene *scene, Object *ob, float *ofs, float *quat, float *dist, float *lens) +{ + float bmat[4][4]; + float imat[4][4]; + float tmat[3][3]; + + if (!ob) return; + + /* Offset */ + if (ofs) { + /* this should not be needed, nly for camera to prevent lag */ + if(scene) where_is_object(scene, ob); + VECCOPY(ofs, ob->obmat[3]); + VecMulf(ofs, -1.0f); /*flip the vector*/ + } + + /* Quat */ + if (quat) { + Mat4CpyMat4(bmat, ob->obmat); + Mat4Ortho(bmat); + Mat4Invert(imat, bmat); + Mat3CpyMat4(tmat, imat); + Mat3ToQuat(tmat, quat); + } + + if (dist) { + float vec[3]; + Mat3CpyMat4(tmat, ob->obmat); + + vec[0]= vec[1] = 0.0; + vec[2]= -(*dist); + Mat3MulVecfl(tmat, vec); + VecSubf(ofs, ofs, vec); + } + + /* Lens */ + if (lens) + object_lens_clip_settings(ob, lens, NULL, NULL); +} + + /* ****************** smooth view operator ****************** */ struct SmoothViewStore { @@ -128,6 +204,7 @@ struct SmoothViewStore { /* the arguments are the desired situation */ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, float *quat, float *dist, float *lens) { + Scene *scene= CTX_data_scene(C); View3D *v3d= (View3D *)CTX_wm_space_data(C); struct SmoothViewStore sms; @@ -145,7 +222,7 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo if(lens) sms.new_lens= *lens; if (camera) { - view_settings_from_ob(camera, sms.new_ofs, sms.new_quat, &sms.new_dist, &sms.new_lens); + view_settings_from_ob(scene, camera, sms.new_ofs, sms.new_quat, &sms.new_dist, &sms.new_lens); sms.to_camera= 1; /* restore view3d values in end */ } @@ -192,7 +269,7 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo /* original values */ if (oldcamera) { sms.orig_dist= v3d->dist; // below function does weird stuff with it... - view_settings_from_ob(oldcamera, sms.orig_ofs, sms.orig_quat, &sms.orig_dist, &sms.orig_lens); + view_settings_from_ob(scene, oldcamera, sms.orig_ofs, sms.orig_quat, &sms.orig_dist, &sms.orig_lens); } else { VECCOPY(sms.orig_ofs, v3d->ofs); @@ -798,81 +875,7 @@ void setwinmatrixview3d(View3D *v3d, int winx, int winy, rctf *rect) /* rect: f } - -/* Gets the lens and clipping values from a camera of lamp type object */ -static void object_lens_clip_settings(Object *ob, float *lens, float *clipsta, float *clipend) -{ - if (!ob) return; - - if(ob->type==OB_LAMP ) { - Lamp *la = ob->data; - if (lens) { - float x1, fac; - fac= cos( M_PI*la->spotsize/360.0); - x1= saacos(fac); - *lens= 16.0*fac/sin(x1); - } - if (clipsta) *clipsta= la->clipsta; - if (clipend) *clipend= la->clipend; - } - else if(ob->type==OB_CAMERA) { - Camera *cam= ob->data; - if (lens) *lens= cam->lens; - if (clipsta) *clipsta= cam->clipsta; - if (clipend) *clipend= cam->clipend; - } - else { - if (lens) *lens= 35.0f; - } -} - - -/* Gets the view trasnformation from a camera -* currently dosnt take camzoom into account -* -* The dist is not modified for this function, if NULL its assimed zero -* */ -void view_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, float *lens) -{ - float bmat[4][4]; - float imat[4][4]; - float tmat[3][3]; - - if (!ob) return; - - /* Offset */ - if (ofs) { - where_is_object(ob); - VECCOPY(ofs, ob->obmat[3]); - VecMulf(ofs, -1.0f); /*flip the vector*/ - } - - /* Quat */ - if (quat) { - Mat4CpyMat4(bmat, ob->obmat); - Mat4Ortho(bmat); - Mat4Invert(imat, bmat); - Mat3CpyMat4(tmat, imat); - Mat3ToQuat(tmat, quat); - } - - if (dist) { - float vec[3]; - Mat3CpyMat4(tmat, ob->obmat); - - vec[0]= vec[1] = 0.0; - vec[2]= -(*dist); - Mat3MulVecfl(tmat, vec); - VecSubf(ofs, ofs, vec); - } - - /* Lens */ - if (lens) - object_lens_clip_settings(ob, lens, NULL, NULL); -} - - -void obmat_to_viewmat(View3D *v3d, Object *ob, short smooth) +static void obmat_to_viewmat(Scene *scene, View3D *v3d, Object *ob, short smooth) { float bmat[4][4]; float tmat[3][3]; @@ -901,7 +904,7 @@ void obmat_to_viewmat(View3D *v3d, Object *ob, short smooth) v3d->persp=V3D_PERSP; v3d->dist= 0.0; - view_settings_from_ob(v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens); + view_settings_from_ob(scene, v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens); smooth_view(NULL, NULL, NULL, orig_ofs, new_quat, &orig_dist, &orig_lens); // XXX v3d->persp=V3D_CAMOB; /* just to be polite, not needed */ @@ -916,12 +919,12 @@ void obmat_to_viewmat(View3D *v3d, Object *ob, short smooth) } /* dont set windows active in in here, is used by renderwin too */ -void setviewmatrixview3d(View3D *v3d) +void setviewmatrixview3d(Scene *scene, View3D *v3d) { if(v3d->persp==V3D_CAMOB) { /* obs/camera */ if(v3d->camera) { - where_is_object(v3d->camera); - obmat_to_viewmat(v3d, v3d->camera, 0); + where_is_object(scene, v3d->camera); + obmat_to_viewmat(scene, v3d, v3d->camera, 0); } else { QuatToMat4(v3d->viewquat, v3d->viewmat); @@ -1276,7 +1279,7 @@ void endlocalview(Scene *scene, ScrArea *sa) } } -void view3d_align_axis_to_vector(View3D *v3d, int axisidx, float vec[3]) +void view3d_align_axis_to_vector(Scene *scene, View3D *v3d, int axisidx, float vec[3]) { float alignaxis[3] = {0.0, 0.0, 0.0}; float norm[3], axis[3], angle, new_quat[4]; @@ -1302,7 +1305,7 @@ void view3d_align_axis_to_vector(View3D *v3d, int axisidx, float vec[3]) VECCOPY(orig_ofs, v3d->ofs); v3d->persp= V3D_PERSP; v3d->dist= 0.0; - view_settings_from_ob(v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens); + view_settings_from_ob(scene, v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens); smooth_view(NULL, NULL, NULL, orig_ofs, new_quat, &orig_dist, &orig_lens); // XXX } else { if (v3d->persp==V3D_CAMOB) v3d->persp= V3D_PERSP; /* switch out of camera mode */ |