forked from bartvdbraak/blender
2.5
View3D has been split now in a local part (RegionView3D) and a per-area part (old View3D). Currently local is: - view transform - camera zoom/offset - gpencil (todo) - custom clipping planes Rest is in Area still, like active camera, draw type, layers, localview, custom centers, around-settings, transform widget, gridlines, and so on (mostly stuff as available in header). To see it work; also added new feature for region split, press SHIFT+ALT+CTRL+S for four-split. The idea is to make a preset 4-split, configured to stick to top/right/front views for three views. Another cool idea to explore is to then box-clip all drawing based on these 3 views. Note about the code: - currently view3d still stores some depricated settings, to convert from older files. Not all settings are copied over though, like custom clip planes or the 'lock view to object'. - since some view3d ops are now on area level, the operators for it should keep track of that. Bugfix in transform: quat initialize in operator-invoke missed one zero. Als brought back GE to compile for missing Ipos and channels.
This commit is contained in:
parent
9b049d89a1
commit
bc63213844
@ -45,6 +45,8 @@ struct ReportList;
|
||||
struct Scene;
|
||||
struct ScrArea;
|
||||
struct SpaceLink;
|
||||
struct View3D;
|
||||
struct RegionView3D;
|
||||
struct StructRNA;
|
||||
struct ToolSettings;
|
||||
struct Image;
|
||||
@ -96,6 +98,7 @@ struct bScreen *CTX_wm_screen(const bContext *C);
|
||||
struct ScrArea *CTX_wm_area(const bContext *C);
|
||||
struct SpaceLink *CTX_wm_space_data(const bContext *C);
|
||||
struct View3D *CTX_wm_view3d(const bContext *C);
|
||||
struct RegionView3D *CTX_wm_region_view3d(const bContext *C);
|
||||
struct ARegion *CTX_wm_region(const bContext *C);
|
||||
void *CTX_wm_region_data(const bContext *C);
|
||||
struct uiBlock *CTX_wm_ui_block(const bContext *C);
|
||||
|
@ -105,6 +105,10 @@ typedef struct ARegionType {
|
||||
|
||||
void (*free)(struct ARegion *);
|
||||
|
||||
/* split region, copy data optionally */
|
||||
void *(*duplicate)(void *);
|
||||
|
||||
|
||||
/* register operator types on startup */
|
||||
void (*operatortypes)(void);
|
||||
/* add own items to keymap */
|
||||
@ -127,6 +131,7 @@ typedef struct ARegionType {
|
||||
|
||||
/* spacetypes */
|
||||
struct SpaceType *BKE_spacetype_from_id(int spaceid);
|
||||
struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
|
||||
const struct ListBase *BKE_spacetypes_list(void);
|
||||
void BKE_spacetype_register(struct SpaceType *st);
|
||||
void BKE_spacetypes_free(void); /* only for quitting blender */
|
||||
@ -136,8 +141,8 @@ void BKE_spacedata_freelist(ListBase *lb);
|
||||
void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
|
||||
|
||||
/* area/regions */
|
||||
struct ARegion *BKE_area_region_copy(struct ARegion *ar);
|
||||
void BKE_area_region_free(struct ARegion *ar);
|
||||
struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
|
||||
void BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
|
||||
|
||||
void BKE_screen_area_free(struct ScrArea *sa);
|
||||
|
||||
|
@ -171,6 +171,13 @@ View3D *CTX_wm_view3d(const bContext *C)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RegionView3D *CTX_wm_region_view3d(const bContext *C)
|
||||
{
|
||||
if(C->wm.area && C->wm.area->spacetype==SPACE_VIEW3D)
|
||||
if(C->wm.region)
|
||||
return C->wm.region->regiondata;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ARegion *CTX_wm_region(const bContext *C)
|
||||
{
|
||||
|
@ -546,11 +546,11 @@ void unlink_object(Scene *scene, Object *ob)
|
||||
|
||||
if(v3d->camera==ob) {
|
||||
v3d->camera= NULL;
|
||||
if(v3d->persp==V3D_CAMOB) v3d->persp= V3D_PERSP;
|
||||
// XXX if(v3d->persp==V3D_CAMOB) v3d->persp= V3D_PERSP;
|
||||
}
|
||||
if(v3d->localvd && v3d->localvd->camera==ob ) {
|
||||
v3d->localvd->camera= NULL;
|
||||
if(v3d->localvd->persp==V3D_CAMOB) v3d->localvd->persp= V3D_PERSP;
|
||||
// XXX if(v3d->localvd->persp==V3D_CAMOB) v3d->localvd->persp= V3D_PERSP;
|
||||
}
|
||||
}
|
||||
else if(sl->spacetype==SPACE_OOPS) {
|
||||
|
@ -82,6 +82,19 @@ SpaceType *BKE_spacetype_from_id(int spaceid)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ARegionType *BKE_regiontype_from_id(SpaceType *st, int regionid)
|
||||
{
|
||||
ARegionType *art;
|
||||
|
||||
for(art= st->regiontypes.first; art; art= art->next)
|
||||
if(art->regionid==regionid)
|
||||
return art;
|
||||
|
||||
printf("Error, region type missing in %s\n", st->name);
|
||||
return st->regiontypes.first;
|
||||
}
|
||||
|
||||
|
||||
const ListBase *BKE_spacetypes_list()
|
||||
{
|
||||
return &spacetypes;
|
||||
@ -113,9 +126,9 @@ void BKE_spacedata_freelist(ListBase *lb)
|
||||
SpaceType *st= BKE_spacetype_from_id(sl->spacetype);
|
||||
|
||||
/* free regions for pushed spaces */
|
||||
for(ar=sl->regionbase.first; ar; ar=ar->next) {
|
||||
BKE_area_region_free(ar);
|
||||
}
|
||||
for(ar=sl->regionbase.first; ar; ar=ar->next)
|
||||
BKE_area_region_free(st, ar);
|
||||
|
||||
BLI_freelistN(&sl->regionbase);
|
||||
|
||||
if(st && st->free)
|
||||
@ -125,19 +138,26 @@ void BKE_spacedata_freelist(ListBase *lb)
|
||||
BLI_freelistN(lb);
|
||||
}
|
||||
|
||||
ARegion *BKE_area_region_copy(ARegion *ar)
|
||||
ARegion *BKE_area_region_copy(SpaceType *st, ARegion *ar)
|
||||
{
|
||||
ARegion *newar= MEM_dupallocN(ar);
|
||||
Panel *pa, *newpa, *patab;
|
||||
|
||||
newar->prev= newar->next= NULL;
|
||||
newar->handlers.first= newar->handlers.last= NULL;
|
||||
newar->uiblocks.first= newar->uiblocks.last= NULL;
|
||||
newar->swinid= 0;
|
||||
|
||||
/* XXX regiondata callback */
|
||||
if(ar->regiondata)
|
||||
newar->regiondata= MEM_dupallocN(ar->regiondata);
|
||||
/* use optional regiondata callback */
|
||||
if(ar->regiondata) {
|
||||
ARegionType *art= BKE_regiontype_from_id(st, ar->regiontype);
|
||||
|
||||
if(art && art->duplicate)
|
||||
newar->regiondata= art->duplicate(ar->regiondata);
|
||||
else
|
||||
newar->regiondata= MEM_dupallocN(ar->regiondata);
|
||||
}
|
||||
|
||||
newar->panels.first= newar->panels.last= NULL;
|
||||
BLI_duplicatelist(&newar->panels, &ar->panels);
|
||||
|
||||
@ -160,7 +180,7 @@ ARegion *BKE_area_region_copy(ARegion *ar)
|
||||
|
||||
|
||||
/* from lb2 to lb1, lb1 is supposed to be free'd */
|
||||
static void region_copylist(ListBase *lb1, ListBase *lb2)
|
||||
static void region_copylist(SpaceType *st, ListBase *lb1, ListBase *lb2)
|
||||
{
|
||||
ARegion *ar;
|
||||
|
||||
@ -168,7 +188,7 @@ static void region_copylist(ListBase *lb1, ListBase *lb2)
|
||||
lb1->first= lb1->last= NULL;
|
||||
|
||||
for(ar= lb2->first; ar; ar= ar->next) {
|
||||
ARegion *arnew= BKE_area_region_copy(ar);
|
||||
ARegion *arnew= BKE_area_region_copy(st, ar);
|
||||
BLI_addtail(lb1, arnew);
|
||||
}
|
||||
}
|
||||
@ -189,18 +209,21 @@ void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2)
|
||||
|
||||
BLI_addtail(lb1, slnew);
|
||||
|
||||
region_copylist(&slnew->regionbase, &sl->regionbase);
|
||||
region_copylist(st, &slnew->regionbase, &sl->regionbase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* not region itself */
|
||||
void BKE_area_region_free(ARegion *ar)
|
||||
void BKE_area_region_free(SpaceType *st, ARegion *ar)
|
||||
{
|
||||
if(st) {
|
||||
ARegionType *art= BKE_regiontype_from_id(st, ar->regiontype);
|
||||
|
||||
if(art && art->free)
|
||||
art->free(ar);
|
||||
}
|
||||
if(ar) {
|
||||
if(ar->type && ar->type->free)
|
||||
ar->type->free(ar);
|
||||
|
||||
BLI_freelistN(&ar->panels);
|
||||
}
|
||||
}
|
||||
@ -208,16 +231,16 @@ void BKE_area_region_free(ARegion *ar)
|
||||
/* not area itself */
|
||||
void BKE_screen_area_free(ScrArea *sa)
|
||||
{
|
||||
ARegion *ar, *arn;
|
||||
SpaceType *st= BKE_spacetype_from_id(sa->spacetype);
|
||||
ARegion *ar;
|
||||
|
||||
for(ar=sa->regionbase.first; ar; ar=arn) {
|
||||
arn= ar->next;
|
||||
BKE_area_region_free(ar);
|
||||
}
|
||||
for(ar=sa->regionbase.first; ar; ar=ar->next)
|
||||
BKE_area_region_free(st, ar);
|
||||
|
||||
BLI_freelistN(&sa->regionbase);
|
||||
|
||||
BKE_spacedata_freelist(&sa->spacedata);
|
||||
|
||||
BLI_freelistN(&sa->regionbase);
|
||||
BLI_freelistN(&sa->actionzones);
|
||||
|
||||
#ifndef DISABLE_PYTHON
|
||||
@ -229,12 +252,11 @@ void BKE_screen_area_free(ScrArea *sa)
|
||||
void free_screen(bScreen *sc)
|
||||
{
|
||||
ScrArea *sa, *san;
|
||||
ARegion *ar, *arn;
|
||||
ARegion *ar;
|
||||
|
||||
for(ar=sc->regionbase.first; ar; ar=arn) {
|
||||
arn= ar->next;
|
||||
BKE_area_region_free(ar);
|
||||
}
|
||||
for(ar=sc->regionbase.first; ar; ar=ar->next)
|
||||
BKE_area_region_free(NULL, ar);
|
||||
|
||||
BLI_freelistN(&sc->regionbase);
|
||||
|
||||
for(sa= sc->areabase.first; sa; sa= san) {
|
||||
|
@ -4101,8 +4101,6 @@ static void lib_link_screen(FileData *fd, Main *main)
|
||||
if(v3d->localvd) {
|
||||
v3d->localvd->camera= newlibadr(fd, sc->id.lib, v3d->localvd->camera);
|
||||
}
|
||||
v3d->depths= NULL;
|
||||
v3d->ri= NULL;
|
||||
}
|
||||
else if(sl->spacetype==SPACE_IPO) {
|
||||
SpaceIpo *sipo= (SpaceIpo *)sl;
|
||||
@ -4409,7 +4407,7 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
|
||||
}
|
||||
}
|
||||
|
||||
static void direct_link_region(FileData *fd, ARegion *ar)
|
||||
static void direct_link_region(FileData *fd, ARegion *ar, int spacetype)
|
||||
{
|
||||
Panel *pa;
|
||||
|
||||
@ -4421,15 +4419,51 @@ static void direct_link_region(FileData *fd, ARegion *ar)
|
||||
pa->sortcounter= 0;
|
||||
pa->activedata= NULL;
|
||||
}
|
||||
|
||||
|
||||
ar->regiondata= newdataadr(fd, ar->regiondata);
|
||||
if(ar->regiondata) {
|
||||
if(spacetype==SPACE_VIEW3D) {
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
|
||||
rv3d->localvd= newdataadr(fd, rv3d->localvd);
|
||||
rv3d->clipbb= newdataadr(fd, rv3d->clipbb);
|
||||
|
||||
rv3d->depths= NULL;
|
||||
rv3d->retopo_view_data= NULL;
|
||||
rv3d->ri= NULL;
|
||||
rv3d->sms= NULL;
|
||||
rv3d->smooth_timer= NULL;
|
||||
}
|
||||
}
|
||||
|
||||
ar->handlers.first= ar->handlers.last= NULL;
|
||||
ar->uiblocks.first= ar->uiblocks.last= NULL;
|
||||
ar->headerstr= NULL;
|
||||
ar->regiondata= NULL;
|
||||
ar->swinid= 0;
|
||||
ar->type= NULL;
|
||||
}
|
||||
|
||||
/* for the saved 2.50 files without regiondata */
|
||||
/* and as patch for 2.48 and older */
|
||||
static void view3d_split_250(View3D *v3d, ListBase *regions)
|
||||
{
|
||||
ARegion *ar;
|
||||
|
||||
for(ar= regions->first; ar; ar= ar->next) {
|
||||
if(ar->regiontype==RGN_TYPE_WINDOW && ar->regiondata==NULL) {
|
||||
RegionView3D *rv3d;
|
||||
|
||||
rv3d= ar->regiondata= MEM_callocN(sizeof(RegionView3D), "region v3d");
|
||||
rv3d->persp= v3d->persp;
|
||||
rv3d->view= v3d->view;
|
||||
rv3d->dist= v3d->dist;
|
||||
VECCOPY(rv3d->ofs, v3d->ofs);
|
||||
QUATCOPY(rv3d->viewquat, v3d->viewquat);
|
||||
Mat4One(rv3d->twmat);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void direct_link_screen(FileData *fd, bScreen *sc)
|
||||
{
|
||||
ScrArea *sa;
|
||||
@ -4482,6 +4516,9 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
|
||||
sa->handlers.first= sa->handlers.last= NULL;
|
||||
sa->type= NULL; /* spacetype callbacks */
|
||||
|
||||
for(ar= sa->regionbase.first; ar; ar= ar->next)
|
||||
direct_link_region(fd, ar, sa->spacetype);
|
||||
|
||||
/* accident can happen when read/save new file with older version */
|
||||
/* 2.50: we now always add spacedata for info */
|
||||
if(sa->spacedata.first==NULL) {
|
||||
@ -4489,12 +4526,15 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
|
||||
sa->spacetype= SPACE_INFO;
|
||||
BLI_addtail(&sa->spacedata, sinfo);
|
||||
}
|
||||
/* add local view3d too */
|
||||
else if(sa->spacetype==SPACE_VIEW3D)
|
||||
view3d_split_250(sa->spacedata.first, &sa->regionbase);
|
||||
|
||||
for (sl= sa->spacedata.first; sl; sl= sl->next) {
|
||||
link_list(fd, &(sl->regionbase));
|
||||
|
||||
for(ar= sl->regionbase.first; ar; ar= ar->next)
|
||||
direct_link_region(fd, ar);
|
||||
direct_link_region(fd, ar, sl->spacetype);
|
||||
|
||||
if (sl->spacetype==SPACE_VIEW3D) {
|
||||
View3D *v3d= (View3D*) sl;
|
||||
@ -4507,11 +4547,9 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
|
||||
}
|
||||
v3d->localvd= newdataadr(fd, v3d->localvd);
|
||||
v3d->afterdraw.first= v3d->afterdraw.last= NULL;
|
||||
v3d->clipbb= newdataadr(fd, v3d->clipbb);
|
||||
v3d->retopo_view_data= NULL;
|
||||
v3d->properties_storage= NULL;
|
||||
v3d->sms= NULL;
|
||||
v3d->smooth_timer= NULL;
|
||||
|
||||
view3d_split_250(v3d, &sl->regionbase);
|
||||
}
|
||||
else if (sl->spacetype==SPACE_OOPS) {
|
||||
SpaceOops *soops= (SpaceOops*) sl;
|
||||
@ -4561,9 +4599,6 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
|
||||
}
|
||||
}
|
||||
|
||||
for(ar= sa->regionbase.first; ar; ar= ar->next)
|
||||
direct_link_region(fd, ar);
|
||||
|
||||
sa->actionzones.first= sa->actionzones.last= NULL;
|
||||
|
||||
sa->v1= newdataadr(fd, sa->v1);
|
||||
@ -5412,7 +5447,12 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb)
|
||||
|
||||
if(sl) {
|
||||
/* if active spacetype has view2d data, copy that over to main region */
|
||||
/* and we split view3d */
|
||||
switch(sl->spacetype) {
|
||||
case SPACE_VIEW3D:
|
||||
view3d_split_250((View3D *)sl, lb);
|
||||
break;
|
||||
|
||||
case SPACE_OOPS:
|
||||
{
|
||||
SpaceOops *soops= (SpaceOops *)sl;
|
||||
@ -8679,7 +8719,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
|
||||
if(ma->nodetree && strlen(ma->nodetree->id.name)==0)
|
||||
strcpy(ma->nodetree->id.name, "NTShader Nodetree");
|
||||
}
|
||||
|
||||
/* and composit trees */
|
||||
for(sce= main->scene.first; sce; sce= sce->id.next) {
|
||||
if(sce->nodetree && strlen(sce->nodetree->id.name)==0)
|
||||
|
@ -1692,6 +1692,32 @@ static void write_windowmanagers(WriteData *wd, ListBase *lb)
|
||||
}
|
||||
}
|
||||
|
||||
static void write_region(WriteData *wd, ARegion *ar, int spacetype)
|
||||
{
|
||||
writestruct(wd, DATA, "ARegion", 1, ar);
|
||||
|
||||
if(ar->regiondata) {
|
||||
switch(spacetype) {
|
||||
case SPACE_VIEW3D:
|
||||
if(ar->regiontype==RGN_TYPE_WINDOW) {
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
writestruct(wd, DATA, "RegionView3D", 1, rv3d);
|
||||
|
||||
if(rv3d->localvd)
|
||||
writestruct(wd, DATA, "RegionView3D", 1, rv3d->localvd);
|
||||
if(rv3d->clipbb)
|
||||
writestruct(wd, DATA, "BoundBox", 1, rv3d->clipbb);
|
||||
|
||||
}
|
||||
else
|
||||
printf("regiondata write missing!\n");
|
||||
break;
|
||||
default:
|
||||
printf("regiondata write missing!\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void write_screens(WriteData *wd, ListBase *scrbase)
|
||||
{
|
||||
bScreen *sc;
|
||||
@ -1723,7 +1749,7 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
|
||||
writestruct(wd, DATA, "ScrArea", 1, sa);
|
||||
|
||||
for(ar= sa->regionbase.first; ar; ar= ar->next) {
|
||||
writestruct(wd, DATA, "ARegion", 1, ar);
|
||||
write_region(wd, ar, sa->spacetype);
|
||||
|
||||
for(pa= ar->panels.first; pa; pa= pa->next)
|
||||
writestruct(wd, DATA, "Panel", 1, pa);
|
||||
@ -1735,14 +1761,13 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
|
||||
sl= sa->spacedata.first;
|
||||
while(sl) {
|
||||
for(ar= sl->regionbase.first; ar; ar= ar->next)
|
||||
writestruct(wd, DATA, "ARegion", 1, ar);
|
||||
write_region(wd, ar, sl->spacetype);
|
||||
|
||||
if(sl->spacetype==SPACE_VIEW3D) {
|
||||
View3D *v3d= (View3D *) sl;
|
||||
writestruct(wd, DATA, "View3D", 1, v3d);
|
||||
if(v3d->bgpic) writestruct(wd, DATA, "BGpic", 1, v3d->bgpic);
|
||||
if(v3d->localvd) writestruct(wd, DATA, "View3D", 1, v3d->localvd);
|
||||
if(v3d->clipbb) writestruct(wd, DATA, "BoundBox", 1, v3d->clipbb);
|
||||
if(v3d->gpd) write_gpencil(wd, v3d->gpd);
|
||||
}
|
||||
else if(sl->spacetype==SPACE_IPO) {
|
||||
|
@ -2023,7 +2023,7 @@ static EditBone *add_editbone(Object *obedit, char *name)
|
||||
return bone;
|
||||
}
|
||||
|
||||
static void add_primitive_bone(Scene *scene, View3D *v3d, short newob)
|
||||
static void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d, short newob)
|
||||
{
|
||||
Object *obedit= scene->obedit; // XXX get from context
|
||||
float obmat[3][3], curs[3], viewmat[3][3], totmat[3][3], imat[3][3];
|
||||
@ -2035,7 +2035,8 @@ static void add_primitive_bone(Scene *scene, View3D *v3d, short newob)
|
||||
Mat4Invert(obedit->imat, obedit->obmat);
|
||||
Mat4MulVecfl(obedit->imat, curs);
|
||||
|
||||
if ( !(newob) || (U.flag & USER_ADD_VIEWALIGNED) ) Mat3CpyMat4(obmat, v3d->viewmat);
|
||||
if ( !(newob) || (U.flag & USER_ADD_VIEWALIGNED) )
|
||||
Mat3CpyMat4(obmat, rv3d->viewmat);
|
||||
else Mat3One(obmat);
|
||||
|
||||
Mat3CpyMat4(viewmat, obedit->obmat);
|
||||
@ -2058,6 +2059,7 @@ static void add_primitive_bone(Scene *scene, View3D *v3d, short newob)
|
||||
|
||||
void add_primitiveArmature(Scene *scene, View3D *v3d, int type)
|
||||
{
|
||||
RegionView3D *rv3d= NULL; // XXX get from context
|
||||
Object *obedit= scene->obedit; // XXX get from context
|
||||
short newob=0;
|
||||
|
||||
@ -2071,7 +2073,7 @@ void add_primitiveArmature(Scene *scene, View3D *v3d, int type)
|
||||
/* If we're not the "obedit", make a new object and enter editmode */
|
||||
if (obedit==NULL) {
|
||||
add_object(scene, OB_ARMATURE);
|
||||
ED_object_base_init_from_view(scene, v3d, BASACT);
|
||||
ED_object_base_init_from_view(NULL, BASACT); // XXX NULL is C
|
||||
obedit= BASACT->object;
|
||||
|
||||
where_is_object(scene, obedit);
|
||||
@ -2082,7 +2084,7 @@ void add_primitiveArmature(Scene *scene, View3D *v3d, int type)
|
||||
}
|
||||
|
||||
/* no primitive support yet */
|
||||
add_primitive_bone(scene, v3d, newob);
|
||||
add_primitive_bone(scene, v3d, rv3d, newob);
|
||||
|
||||
countall(); // flushes selection!
|
||||
|
||||
@ -4815,7 +4817,7 @@ void generateSkeletonFromReebGraph(Scene *scene, ReebGraph *rg)
|
||||
}
|
||||
|
||||
dst = add_object(scene, OB_ARMATURE);
|
||||
ED_object_base_init_from_view(scene, NULL, scene->basact);
|
||||
ED_object_base_init_from_view(NULL, scene->basact); // XXX NULL is C
|
||||
obedit= scene->basact->object;
|
||||
|
||||
/* Copy orientation from source */
|
||||
|
@ -2827,6 +2827,7 @@ void mouse_nurb(bContext *C, short mval[2], int extend)
|
||||
static void spin_nurb(Scene *scene, Object *obedit, float *dvec, short mode)
|
||||
{
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
RegionView3D *rv3d= NULL; // XXX
|
||||
View3D *v3d= NULL; // XXX
|
||||
Nurb *nu;
|
||||
float *curs, si,phi,n[3],q[4],cmat[3][3],tmat[3][3],imat[3][3];
|
||||
@ -2837,7 +2838,7 @@ static void spin_nurb(Scene *scene, Object *obedit, float *dvec, short mode)
|
||||
if(v3d==0 || obedit==0 || obedit->type!=OB_SURF) return;
|
||||
if( (v3d->lay & obedit->lay)==0 ) return;
|
||||
|
||||
if (mode != 2) Mat3CpyMat4(persmat, v3d->viewmat);
|
||||
if (mode != 2) Mat3CpyMat4(persmat, rv3d->viewmat);
|
||||
else Mat3One(persmat);
|
||||
Mat3Inv(persinv, persmat);
|
||||
|
||||
@ -2854,9 +2855,9 @@ static void spin_nurb(Scene *scene, Object *obedit, float *dvec, short mode)
|
||||
n[0]=n[1]= 0.0;
|
||||
n[2]= 1.0;
|
||||
} else {
|
||||
n[0]= v3d->viewinv[2][0];
|
||||
n[1]= v3d->viewinv[2][1];
|
||||
n[2]= v3d->viewinv[2][2];
|
||||
n[0]= rv3d->viewinv[2][0];
|
||||
n[1]= rv3d->viewinv[2][1];
|
||||
n[2]= rv3d->viewinv[2][2];
|
||||
Normalize(n);
|
||||
}
|
||||
|
||||
@ -4062,6 +4063,7 @@ Nurb *addNurbprim(Scene *scene, int type, int stype, int newname)
|
||||
Object *obedit= scene->obedit; // XXX
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
View3D *v3d= NULL; // XXX
|
||||
RegionView3D *rv3d= NULL; // XXX
|
||||
static int xzproj= 0;
|
||||
Nurb *nu = NULL;
|
||||
BezTriple *bezt;
|
||||
@ -4084,7 +4086,8 @@ Nurb *addNurbprim(Scene *scene, int type, int stype, int newname)
|
||||
cent[2]-= obedit->obmat[3][2];
|
||||
|
||||
if (v3d) {
|
||||
if ( !(newname) || U.flag & USER_ADD_VIEWALIGNED) Mat3CpyMat4(imat, v3d->viewmat);
|
||||
if ( !(newname) || U.flag & USER_ADD_VIEWALIGNED)
|
||||
Mat3CpyMat4(imat, rv3d->viewmat);
|
||||
else Mat3One(imat);
|
||||
Mat3MulVecfl(imat, cent);
|
||||
Mat3MulMat3(cmat, imat, mat);
|
||||
@ -4515,7 +4518,7 @@ void add_primitiveCurve(Scene *scene, int stype)
|
||||
/* if no obedit: new object and enter editmode */
|
||||
if(obedit==NULL) {
|
||||
// XXX add_object_draw(OB_CURVE);
|
||||
ED_object_base_init_from_view(scene, v3d, BASACT);
|
||||
ED_object_base_init_from_view(NULL, BASACT); // NULL is C
|
||||
obedit= BASACT->object;
|
||||
|
||||
where_is_object(scene, obedit);
|
||||
@ -4558,7 +4561,6 @@ void add_primitiveNurb(Scene *scene, int type)
|
||||
{
|
||||
Object *obedit= scene->obedit; // XXX
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
View3D *v3d= NULL; // XXX
|
||||
Nurb *nu;
|
||||
int newname= 0;
|
||||
|
||||
@ -4569,7 +4571,7 @@ void add_primitiveNurb(Scene *scene, int type)
|
||||
/* if no obedit: new object and enter editmode */
|
||||
if(obedit==0) {
|
||||
// XXX add_object_draw(OB_SURF);
|
||||
ED_object_base_init_from_view(scene, v3d, BASACT);
|
||||
ED_object_base_init_from_view(NULL, BASACT); // NULL is C
|
||||
obedit= BASACT->object;
|
||||
|
||||
where_is_object(scene, obedit);
|
||||
|
@ -763,7 +763,6 @@ void gpencil_delete_menu (void)
|
||||
static void gp_strokepoint_convertcoords (bGPDstroke *gps, bGPDspoint *pt, float p3d[3])
|
||||
{
|
||||
ARegion *ar= NULL; // XXX
|
||||
View3D *v3d= NULL; // XXX
|
||||
|
||||
if (gps->flag & GP_STROKE_3DSPACE) {
|
||||
/* directly use 3d-coordinates */
|
||||
@ -790,8 +789,8 @@ static void gp_strokepoint_convertcoords (bGPDstroke *gps, bGPDspoint *pt, float
|
||||
/* convert screen coordinate to 3d coordinates
|
||||
* - method taken from editview.c - mouse_cursor()
|
||||
*/
|
||||
project_short_noclip(ar, v3d, fp, mval);
|
||||
window_to_3d(ar, v3d, dvec, mval[0]-mx, mval[1]-my);
|
||||
project_short_noclip(ar, fp, mval);
|
||||
window_to_3d(ar, dvec, mval[0]-mx, mval[1]-my);
|
||||
VecSubf(p3d, fp, dvec);
|
||||
}
|
||||
}
|
||||
@ -1037,6 +1036,7 @@ void gpencil_convert_operation (short mode)
|
||||
{
|
||||
Scene *scene= NULL; // XXX
|
||||
View3D *v3d= NULL; // XXX
|
||||
RegionView3D *rv3d= NULL; // XXX
|
||||
bGPdata *gpd;
|
||||
float *fp= give_cursor(scene, v3d);
|
||||
|
||||
@ -1045,7 +1045,7 @@ void gpencil_convert_operation (short mode)
|
||||
if (gpd == NULL) return;
|
||||
|
||||
/* initialise 3d-cursor correction globals */
|
||||
initgrabz(v3d, fp[0], fp[1], fp[2]);
|
||||
initgrabz(rv3d, fp[0], fp[1], fp[2]);
|
||||
|
||||
/* handle selection modes */
|
||||
switch (mode) {
|
||||
@ -1195,7 +1195,6 @@ static short gp_stroke_filtermval (tGPsdata *p, short mval[2], short pmval[2])
|
||||
/* convert screen-coordinates to buffer-coordinates */
|
||||
static void gp_stroke_convertcoords (tGPsdata *p, short mval[], float out[])
|
||||
{
|
||||
View3D *v3d= NULL; // XXX
|
||||
bGPdata *gpd= p->gpd;
|
||||
|
||||
/* in 3d-space - pt->x/y/z are 3 side-by-side floats */
|
||||
@ -1215,8 +1214,8 @@ static void gp_stroke_convertcoords (tGPsdata *p, short mval[], float out[])
|
||||
*/
|
||||
|
||||
/* method taken from editview.c - mouse_cursor() */
|
||||
project_short_noclip(p->ar, v3d, fp, mval);
|
||||
window_to_3d(p->ar, v3d, dvec, mval[0]-mx, mval[1]-my);
|
||||
project_short_noclip(p->ar, fp, mval);
|
||||
window_to_3d(p->ar, dvec, mval[0]-mx, mval[1]-my);
|
||||
VecSubf(out, fp, dvec);
|
||||
}
|
||||
|
||||
@ -1549,7 +1548,6 @@ static short gp_stroke_eraser_strokeinside (short mval[], short mvalo[], short r
|
||||
static void gp_stroke_eraser_dostroke (tGPsdata *p, short mval[], short mvalo[], short rad, rcti *rect, bGPDframe *gpf, bGPDstroke *gps)
|
||||
{
|
||||
bGPDspoint *pt1, *pt2;
|
||||
View3D *v3d= NULL;
|
||||
int x0=0, y0=0, x1=0, y1=0;
|
||||
short xyval[2];
|
||||
int i;
|
||||
@ -1563,7 +1561,7 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, short mval[], short mvalo[],
|
||||
else if (gps->totpoints == 1) {
|
||||
/* get coordinates */
|
||||
if (gps->flag & GP_STROKE_3DSPACE) {
|
||||
project_short(p->ar, v3d, &gps->points->x, xyval);
|
||||
project_short(p->ar, &gps->points->x, xyval);
|
||||
x0= xyval[0];
|
||||
y0= xyval[1];
|
||||
}
|
||||
@ -1609,11 +1607,11 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, short mval[], short mvalo[],
|
||||
|
||||
/* get coordinates */
|
||||
if (gps->flag & GP_STROKE_3DSPACE) {
|
||||
project_short(p->ar, v3d, &pt1->x, xyval);
|
||||
project_short(p->ar, &pt1->x, xyval);
|
||||
x0= xyval[0];
|
||||
y0= xyval[1];
|
||||
|
||||
project_short(p->ar, v3d, &pt2->x, xyval);
|
||||
project_short(p->ar, &pt2->x, xyval);
|
||||
x1= xyval[0];
|
||||
y1= xyval[1];
|
||||
}
|
||||
@ -1881,8 +1879,10 @@ static void gp_paint_initstroke (tGPsdata *p, short paintmode)
|
||||
case SPACE_VIEW3D:
|
||||
{
|
||||
View3D *v3d= (View3D *)p->sa->spacedata.first;
|
||||
RegionView3D *rv3d= NULL; // XXX
|
||||
float *fp= give_cursor(p->scene, v3d);
|
||||
initgrabz(v3d, fp[0], fp[1], fp[2]);
|
||||
|
||||
initgrabz(rv3d, fp[0], fp[1], fp[2]);
|
||||
|
||||
p->gpd->sbuffer_sflag |= GP_STROKE_3DSPACE;
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ void ED_object_apply_obmat(struct Object *ob);
|
||||
void ED_object_exit_editmode(struct bContext *C, int flag);
|
||||
void ED_object_enter_editmode(struct bContext *C, int flag);
|
||||
|
||||
void ED_object_base_init_from_view(struct Scene *scene, struct View3D *v3d, struct Base *base);
|
||||
void ED_object_base_init_from_view(struct bContext *C, struct Base *base);
|
||||
|
||||
/* cleanup */
|
||||
int object_data_is_libdata(struct Object *ob);
|
||||
|
@ -53,7 +53,6 @@ void ED_region_tag_redraw(struct ARegion *ar);
|
||||
/* spaces */
|
||||
void ED_spacetypes_init(void);
|
||||
void ED_spacetypes_keymap(struct wmWindowManager *wm);
|
||||
struct ARegionType *ED_regiontype_from_id(struct SpaceType *st, int regionid);
|
||||
int ED_area_header_standardbuttons(const struct bContext *C, struct uiBlock *block, int yco);
|
||||
void ED_area_overdraw(struct bContext *C);
|
||||
void ED_area_overdraw_flush(struct bContext *C);
|
||||
|
@ -31,6 +31,7 @@
|
||||
/* ********* exports for space_view3d/ module ********** */
|
||||
struct ARegion;
|
||||
struct View3D;
|
||||
struct RegionView3D;
|
||||
struct ViewContext;
|
||||
struct BPoint;
|
||||
struct Nurb;
|
||||
@ -49,6 +50,7 @@ typedef struct ViewContext {
|
||||
Object *obedit;
|
||||
struct ARegion *ar;
|
||||
struct View3D *v3d;
|
||||
struct RegionView3D *rv3d;
|
||||
struct EditMesh *em;
|
||||
short mval[2];
|
||||
} ViewContext;
|
||||
@ -56,8 +58,8 @@ typedef struct ViewContext {
|
||||
|
||||
float *give_cursor(struct Scene *scene, struct View3D *v3d);
|
||||
|
||||
void initgrabz(struct View3D *v3d, float x, float y, float z);
|
||||
void window_to_3d(struct ARegion *ar, struct View3D *v3d, float *vec, short mx, short my);
|
||||
void initgrabz(struct RegionView3D *rv3d, float x, float y, float z);
|
||||
void window_to_3d(struct ARegion *ar, float *vec, short mx, short my);
|
||||
|
||||
/* Depth buffer */
|
||||
float read_cached_depth(struct ViewContext *vc, int x, int y);
|
||||
@ -65,14 +67,14 @@ void request_depth_update(struct ViewContext *vc);
|
||||
|
||||
/* Projection */
|
||||
|
||||
void project_short(struct ARegion *ar, struct View3D *v3d, float *vec, short *adr);
|
||||
void project_short_noclip(struct ARegion *ar, struct View3D *v3d, float *vec, short *adr);
|
||||
void project_short(struct ARegion *ar, float *vec, short *adr);
|
||||
void project_short_noclip(struct ARegion *ar, float *vec, short *adr);
|
||||
|
||||
void project_int(struct ARegion *ar, struct View3D *v3d, float *vec, int *adr);
|
||||
void project_int_noclip(struct ARegion *ar, struct View3D *v3d, float *vec, int *adr);
|
||||
void project_int(struct ARegion *ar, float *vec, int *adr);
|
||||
void project_int_noclip(struct ARegion *ar, float *vec, int *adr);
|
||||
|
||||
void project_float(struct ARegion *ar, struct View3D *v3d, float *vec, float *adr);
|
||||
void project_float_noclip(struct ARegion *ar, struct View3D *v3d, float *vec, float *adr);
|
||||
void project_float(struct ARegion *ar, float *vec, float *adr);
|
||||
void project_float_noclip(struct ARegion *ar, float *vec, float *adr);
|
||||
|
||||
void viewline(struct ARegion *ar, struct View3D *v3d, short mval[2], float ray_start[3], float ray_end[3]);
|
||||
void viewray(struct ARegion *ar, struct View3D *v3d, short mval[2], float ray_start[3], float ray_normal[3]);
|
||||
@ -84,8 +86,8 @@ void mesh_foreachScreenFace(struct ViewContext *vc, void (*func)(void *userData,
|
||||
void nurbs_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct Nurb *nu, struct BPoint *bp, struct BezTriple *bezt, int beztindex, int x, int y), void *userData);
|
||||
void lattice_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct BPoint *bp, int x, int y), void *userData);
|
||||
|
||||
int view3d_test_clipping(struct View3D *v3d, float *vec);
|
||||
void view3d_align_axis_to_vector(struct Scene *scene, struct View3D *v3d, int axisidx, float vec[3]);
|
||||
int view3d_test_clipping(struct RegionView3D *rv3d, float *vec);
|
||||
void view3d_align_axis_to_vector(struct View3D *v3d, struct RegionView3D *rv3d, int axisidx, float vec[3]);
|
||||
|
||||
void drawcircball(int mode, float *cent, float rad, float tmat[][4]);
|
||||
|
||||
|
@ -238,7 +238,7 @@ ARegion *ui_add_temporary_region(bScreen *sc)
|
||||
void ui_remove_temporary_region(bContext *C, bScreen *sc, ARegion *ar)
|
||||
{
|
||||
ED_region_exit(C, ar);
|
||||
BKE_area_region_free(ar);
|
||||
BKE_area_region_free(NULL, ar); /* NULL: no spacetype */
|
||||
BLI_freelinkN(&sc->regionbase, ar);
|
||||
}
|
||||
|
||||
|
@ -177,14 +177,14 @@ static void uv_calc_center_vector(Scene *scene, View3D *v3d, float *result, Obje
|
||||
}
|
||||
}
|
||||
|
||||
static void uv_calc_map_matrix(float result[][4], View3D *v3d, Object *ob, float upangledeg, float sideangledeg, float radius)
|
||||
static void uv_calc_map_matrix(float result[][4], RegionView3D *rv3d, Object *ob, float upangledeg, float sideangledeg, float radius)
|
||||
{
|
||||
float rotup[4][4], rotside[4][4], viewmatrix[4][4], rotobj[4][4];
|
||||
float sideangle= 0.0, upangle= 0.0;
|
||||
int k;
|
||||
|
||||
/* get rotation of the current view matrix */
|
||||
Mat4CpyMat4(viewmatrix,v3d->viewmat);
|
||||
Mat4CpyMat4(viewmatrix, rv3d->viewmat);
|
||||
/* but shifting */
|
||||
for( k= 0; k< 4; k++) viewmatrix[3][k] =0.0;
|
||||
|
||||
@ -219,6 +219,7 @@ static void uv_calc_map_matrix(float result[][4], View3D *v3d, Object *ob, float
|
||||
|
||||
static void uv_calc_shift_project(ARegion *ar, View3D *v3d, float *target, float *shift, float rotmat[][4], int projectionmode, float *source, float *min, float *max)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float pv[3];
|
||||
|
||||
VecSubf(pv, source, shift);
|
||||
@ -257,7 +258,7 @@ static void uv_calc_shift_project(ARegion *ar, View3D *v3d, float *target, float
|
||||
Mat4MulVec4fl(rotmat, pv4);
|
||||
|
||||
/* almost project_short */
|
||||
Mat4MulVec4fl(v3d->persmat, pv4);
|
||||
Mat4MulVec4fl(rv3d->persmat, pv4);
|
||||
if (fabs(pv4[3]) > 0.00001) { /* avoid division by zero */
|
||||
target[0] = dx/2.0 + (dx/2.0)*pv4[0]/pv4[3];
|
||||
target[1] = dy/2.0 + (dy/2.0)*pv4[1]/pv4[3];
|
||||
@ -368,6 +369,7 @@ static void default_uv(float uv[][2], float size)
|
||||
|
||||
static void calculate_uv_map(Scene *scene, ARegion *ar, View3D *v3d, EditMesh *em, unsigned short mapmode)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
MTFace *tface;
|
||||
Object *ob;
|
||||
EditFace *efa;
|
||||
@ -412,7 +414,7 @@ static void calculate_uv_map(Scene *scene, ARegion *ar, View3D *v3d, EditMesh *e
|
||||
max[0]= max[1]= -10000000.0;
|
||||
|
||||
cent[0] = cent[1] = cent[2] = 0.0;
|
||||
uv_calc_map_matrix(rotatematrix, v3d, ob, upangledeg, sideangledeg, 1.0f);
|
||||
uv_calc_map_matrix(rotatematrix, rv3d, ob, upangledeg, sideangledeg, 1.0f);
|
||||
|
||||
for (efa= em->faces.first; efa; efa= efa->next) {
|
||||
if (efa->f & SELECT) {
|
||||
@ -475,7 +477,7 @@ static void calculate_uv_map(Scene *scene, ARegion *ar, View3D *v3d, EditMesh *e
|
||||
if (scene->toolsettings->uvcalc_mapdir== 2)
|
||||
Mat4One(rotatematrix);
|
||||
else
|
||||
uv_calc_map_matrix(rotatematrix, v3d, ob, upangledeg,sideangledeg,radius);
|
||||
uv_calc_map_matrix(rotatematrix, rv3d, ob, upangledeg,sideangledeg,radius);
|
||||
for (efa= em->faces.first; efa; efa= efa->next) {
|
||||
if (efa->f & SELECT) {
|
||||
tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
|
||||
|
@ -1396,17 +1396,14 @@ static float new_primitive_matrix(bContext *C, float primmat[][4])
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ScrArea *sa = CTX_wm_area(C);
|
||||
View3D *v3d = NULL;
|
||||
View3D *v3d =CTX_wm_view3d(C);
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
float *curs, mat[3][3], vmat[3][3], cmat[3][3], imat[3][3];
|
||||
|
||||
Mat4One(primmat);
|
||||
|
||||
if(sa->spacetype==SPACE_VIEW3D)
|
||||
v3d= sa->spacedata.first;
|
||||
|
||||
if(v3d)
|
||||
Mat3CpyMat4(vmat, v3d->viewmat);
|
||||
if(ar)
|
||||
Mat3CpyMat4(vmat, ((RegionView3D *)ar->regiondata)->viewmat);
|
||||
else
|
||||
Mat3One(vmat);
|
||||
|
||||
|
@ -467,7 +467,7 @@ static void findnearestedge__doClosest(void *userData, EditEdge *eed, int x0, in
|
||||
|
||||
if(eed->f & SELECT) distance+=5;
|
||||
if(distance < data->dist) {
|
||||
if(data->vc.v3d->flag & V3D_CLIPPING) {
|
||||
if(data->vc.rv3d->rflag & RV3D_CLIPPING) {
|
||||
float labda= labda_PdistVL2Dfl(data->mval, v1, v2);
|
||||
float vec[3];
|
||||
|
||||
@ -476,7 +476,7 @@ static void findnearestedge__doClosest(void *userData, EditEdge *eed, int x0, in
|
||||
vec[2]= eed->v1->co[2] + labda*(eed->v2->co[2] - eed->v1->co[2]);
|
||||
Mat4MulVecfl(data->vc.obedit->obmat, vec);
|
||||
|
||||
if(view3d_test_clipping(data->vc.v3d, vec)==0) {
|
||||
if(view3d_test_clipping(data->vc.rv3d, vec)==0) {
|
||||
data->dist = distance;
|
||||
data->closest = eed;
|
||||
}
|
||||
@ -4089,7 +4089,7 @@ static int mface_is_selected(MFace *mf)
|
||||
* which would use same as vertices method), then added
|
||||
* to interface! Hoera! - zr
|
||||
*/
|
||||
void faceselect_align_view_to_selected(View3D *v3d, Mesh *me, int axis)
|
||||
void faceselect_align_view_to_selected(View3D *v3d, RegionView3D *rv3d, Mesh *me, int axis)
|
||||
{
|
||||
float norm[3];
|
||||
int i, totselected = 0;
|
||||
@ -4122,7 +4122,7 @@ void faceselect_align_view_to_selected(View3D *v3d, Mesh *me, int axis)
|
||||
if (totselected == 0)
|
||||
error("No faces selected.");
|
||||
else
|
||||
view3d_align_axis_to_vector(NULL, v3d, axis, norm);
|
||||
view3d_align_axis_to_vector(v3d, rv3d, axis, norm);
|
||||
}
|
||||
|
||||
/* helper for below, to survive non-uniform scaled objects */
|
||||
@ -4146,7 +4146,7 @@ static void face_getnormal_obspace(Object *obedit, EditFace *efa, float *fno)
|
||||
}
|
||||
|
||||
|
||||
void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d, int axis)
|
||||
void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d, RegionView3D *rv3d, int axis)
|
||||
{
|
||||
int nselverts= EM_nvertices_selected(em);
|
||||
float norm[3]={0.0, 0.0, 0.0}; /* used for storing the mesh normal */
|
||||
@ -4167,7 +4167,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d,
|
||||
}
|
||||
}
|
||||
|
||||
view3d_align_axis_to_vector(NULL, v3d, axis, norm);
|
||||
view3d_align_axis_to_vector(v3d, rv3d, axis, norm);
|
||||
}
|
||||
else if (nselverts>2) {
|
||||
float cent[3];
|
||||
@ -4192,7 +4192,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d,
|
||||
}
|
||||
|
||||
Mat4Mul3Vecfl(obedit->obmat, norm);
|
||||
view3d_align_axis_to_vector(NULL, v3d, axis, norm);
|
||||
view3d_align_axis_to_vector(v3d, rv3d, axis, norm);
|
||||
}
|
||||
else if (nselverts==2) { /* Align view to edge (or 2 verts) */
|
||||
EditVert *eve, *leve= NULL;
|
||||
@ -4209,7 +4209,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d,
|
||||
}
|
||||
}
|
||||
Mat4Mul3Vecfl(obedit->obmat, norm);
|
||||
view3d_align_axis_to_vector(NULL, v3d, axis, norm);
|
||||
view3d_align_axis_to_vector(v3d, rv3d, axis, norm);
|
||||
}
|
||||
else if (nselverts==1) { /* Align view to vert normal */
|
||||
EditVert *eve;
|
||||
@ -4223,7 +4223,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d,
|
||||
}
|
||||
}
|
||||
Mat4Mul3Vecfl(obedit->obmat, norm);
|
||||
view3d_align_axis_to_vector(NULL, v3d, axis, norm);
|
||||
view3d_align_axis_to_vector(v3d, rv3d, axis, norm);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -688,15 +688,15 @@ void split_mesh(EditMesh *em)
|
||||
|
||||
}
|
||||
|
||||
void extrude_repeat_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float offs)
|
||||
void extrude_repeat_mesh(RegionView3D *rv3d, Object *obedit, EditMesh *em, int steps, float offs)
|
||||
{
|
||||
float dvec[3], tmat[3][3], bmat[3][3], nor[3]= {0.0, 0.0, 0.0};
|
||||
short a;
|
||||
|
||||
/* dvec */
|
||||
dvec[0]= v3d->persinv[2][0];
|
||||
dvec[1]= v3d->persinv[2][1];
|
||||
dvec[2]= v3d->persinv[2][2];
|
||||
dvec[0]= rv3d->persinv[2][0];
|
||||
dvec[1]= rv3d->persinv[2][1];
|
||||
dvec[2]= rv3d->persinv[2][2];
|
||||
Normalize(dvec);
|
||||
dvec[0]*= offs;
|
||||
dvec[1]*= offs;
|
||||
@ -723,6 +723,7 @@ void extrude_repeat_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, f
|
||||
|
||||
void spin_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float degr, float *dvec, int mode)
|
||||
{
|
||||
RegionView3D *rv3d= NULL; // XXX from context
|
||||
EditVert *eve,*nextve;
|
||||
float nor[3]= {0.0, 0.0, 0.0};
|
||||
float *curs, si,n[3],q[4],cmat[3][3],imat[3][3], tmat[3][3];
|
||||
@ -734,7 +735,7 @@ void spin_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float degr,
|
||||
Mat3CpyMat4(bmat, obedit->obmat);
|
||||
Mat3Inv(imat,bmat);
|
||||
|
||||
curs= give_cursor(NULL, v3d);
|
||||
curs= give_cursor(NULL, v3d); // XXX
|
||||
VECCOPY(cent, curs);
|
||||
cent[0]-= obedit->obmat[3][0];
|
||||
cent[1]-= obedit->obmat[3][1];
|
||||
@ -746,13 +747,13 @@ void spin_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float degr,
|
||||
// if(scene->toolsettings->editbutflag & B_CLOCKWISE) phi= -phi;
|
||||
|
||||
if(dvec) {
|
||||
n[0]= v3d->viewinv[1][0];
|
||||
n[1]= v3d->viewinv[1][1];
|
||||
n[2]= v3d->viewinv[1][2];
|
||||
n[0]= rv3d->viewinv[1][0];
|
||||
n[1]= rv3d->viewinv[1][1];
|
||||
n[2]= rv3d->viewinv[1][2];
|
||||
} else {
|
||||
n[0]= v3d->viewinv[2][0];
|
||||
n[1]= v3d->viewinv[2][1];
|
||||
n[2]= v3d->viewinv[2][2];
|
||||
n[0]= rv3d->viewinv[2][0];
|
||||
n[1]= rv3d->viewinv[2][1];
|
||||
n[2]= rv3d->viewinv[2][2];
|
||||
}
|
||||
Normalize(n);
|
||||
|
||||
|
@ -437,6 +437,7 @@ static int float_sort(const void *v1, const void *v2)
|
||||
|
||||
void sort_faces(Scene *scene, View3D *v3d)
|
||||
{
|
||||
RegionView3D *rv3d= NULL; // get from context
|
||||
Object *ob= OBACT;
|
||||
Mesh *me;
|
||||
CustomDataLayer *layer;
|
||||
@ -490,7 +491,7 @@ void sort_faces(Scene *scene, View3D *v3d)
|
||||
float cur[3];
|
||||
|
||||
if (event == 1)
|
||||
Mat4MulMat4(mat, OBACT->obmat, v3d->viewmat); /* apply the view matrix to the object matrix */
|
||||
Mat4MulMat4(mat, OBACT->obmat, rv3d->viewmat); /* apply the view matrix to the object matrix */
|
||||
else if (event == 2) { /* sort from cursor */
|
||||
if( v3d && v3d->localview ) {
|
||||
VECCOPY(cur, v3d->cursor);
|
||||
|
@ -222,8 +222,10 @@ int object_data_is_libdata(Object *ob)
|
||||
|
||||
|
||||
/* exported */
|
||||
void ED_object_base_init_from_view(Scene *scene, View3D *v3d, Base *base)
|
||||
void ED_object_base_init_from_view(bContext *C, Base *base)
|
||||
{
|
||||
View3D *v3d= CTX_wm_view3d(C);
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *ob= base->object;
|
||||
|
||||
if (scene==NULL)
|
||||
@ -244,10 +246,14 @@ void ED_object_base_init_from_view(Scene *scene, View3D *v3d, Base *base)
|
||||
}
|
||||
|
||||
if (U.flag & USER_ADD_VIEWALIGNED) {
|
||||
v3d->viewquat[0]= -v3d->viewquat[0];
|
||||
|
||||
QuatToEul(v3d->viewquat, ob->rot);
|
||||
v3d->viewquat[0]= -v3d->viewquat[0];
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
if(ar) {
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
|
||||
rv3d->viewquat[0]= -rv3d->viewquat[0];
|
||||
QuatToEul(rv3d->viewquat, ob->rot);
|
||||
rv3d->viewquat[0]= -rv3d->viewquat[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -293,7 +299,7 @@ static int object_add_exec(bContext *C, wmOperator *op)
|
||||
ED_base_object_activate(C, BASACT);
|
||||
|
||||
/* more editor stuff */
|
||||
ED_object_base_init_from_view(scene, CTX_wm_view3d(C), BASACT);
|
||||
ED_object_base_init_from_view(C, BASACT);
|
||||
|
||||
DAG_scene_sort(scene);
|
||||
|
||||
|
@ -298,7 +298,7 @@ static int rct_fits(rcti *rect, char dir, int size)
|
||||
}
|
||||
}
|
||||
|
||||
static void region_rect_recursive(ARegion *ar, rcti *remainder)
|
||||
static void region_rect_recursive(ARegion *ar, rcti *remainder, int quad)
|
||||
{
|
||||
int prefsizex, prefsizey;
|
||||
|
||||
@ -307,7 +307,8 @@ static void region_rect_recursive(ARegion *ar, rcti *remainder)
|
||||
|
||||
/* clear state flags first */
|
||||
ar->flag &= ~RGN_FLAG_TOO_SMALL;
|
||||
if(ar->next==NULL)
|
||||
/* user errors */
|
||||
if(ar->next==NULL && ar->alignment!=RGN_ALIGN_QSPLIT)
|
||||
ar->alignment= RGN_ALIGN_NONE;
|
||||
|
||||
prefsizex= ar->type->minsizex;
|
||||
@ -372,7 +373,7 @@ static void region_rect_recursive(ARegion *ar, rcti *remainder)
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
else if(ar->alignment==RGN_ALIGN_VSPLIT || ar->alignment==RGN_ALIGN_HSPLIT) {
|
||||
/* percentage subdiv*/
|
||||
ar->winrct= *remainder;
|
||||
|
||||
@ -395,11 +396,55 @@ static void region_rect_recursive(ARegion *ar, rcti *remainder)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(ar->alignment==RGN_ALIGN_QSPLIT) {
|
||||
ar->winrct= *remainder;
|
||||
|
||||
/* test if there's still 4 regions left */
|
||||
if(quad==0) {
|
||||
ARegion *artest= ar->next;
|
||||
int count= 1;
|
||||
|
||||
while(artest) {
|
||||
artest->alignment= RGN_ALIGN_QSPLIT;
|
||||
artest= artest->next;
|
||||
count++;
|
||||
}
|
||||
|
||||
if(count!=4) {
|
||||
/* let's stop adding regions */
|
||||
BLI_init_rcti(remainder, 0, 0, 0, 0);
|
||||
printf("region quadsplit failed\n");
|
||||
}
|
||||
else quad= 1;
|
||||
}
|
||||
if(quad) {
|
||||
if(quad==1) { /* left bottom */
|
||||
ar->winrct.xmax = (remainder->xmin + remainder->xmax)/2;
|
||||
ar->winrct.ymax = (remainder->ymin + remainder->ymax)/2;
|
||||
}
|
||||
else if(quad==2) { /* left top */
|
||||
ar->winrct.xmax = (remainder->xmin + remainder->xmax)/2;
|
||||
ar->winrct.ymin = 1 + (remainder->ymin + remainder->ymax)/2;
|
||||
}
|
||||
else if(quad==3) { /* right bottom */
|
||||
ar->winrct.xmin = 1 + (remainder->xmin + remainder->xmax)/2;
|
||||
ar->winrct.ymax = (remainder->ymin + remainder->ymax)/2;
|
||||
}
|
||||
else { /* right top */
|
||||
ar->winrct.xmin = 1 + (remainder->xmin + remainder->xmax)/2;
|
||||
ar->winrct.ymin = 1 + (remainder->ymin + remainder->ymax)/2;
|
||||
BLI_init_rcti(remainder, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
quad++;
|
||||
}
|
||||
}
|
||||
|
||||
/* for speedup */
|
||||
ar->winx= ar->winrct.xmax - ar->winrct.xmin + 1;
|
||||
ar->winy= ar->winrct.ymax - ar->winrct.ymin + 1;
|
||||
|
||||
region_rect_recursive(ar->next, remainder);
|
||||
region_rect_recursive(ar->next, remainder, quad);
|
||||
}
|
||||
|
||||
static void area_calc_totrct(ScrArea *sa, int sizex, int sizey)
|
||||
@ -508,14 +553,14 @@ void ED_area_initialize(wmWindowManager *wm, wmWindow *win, ScrArea *sa)
|
||||
}
|
||||
|
||||
for(ar= sa->regionbase.first; ar; ar= ar->next)
|
||||
ar->type= ED_regiontype_from_id(sa->type, ar->regiontype);
|
||||
ar->type= BKE_regiontype_from_id(sa->type, ar->regiontype);
|
||||
|
||||
/* area sizes */
|
||||
area_calc_totrct(sa, win->sizex, win->sizey);
|
||||
|
||||
/* region rect sizes */
|
||||
rect= sa->totrct;
|
||||
region_rect_recursive(sa->regionbase.first, &rect);
|
||||
region_rect_recursive(sa->regionbase.first, &rect, 0);
|
||||
|
||||
/* default area handlers */
|
||||
ed_default_handlers(wm, &sa->handlers, sa->type->keymapflag);
|
||||
@ -569,11 +614,13 @@ void area_copy_data(ScrArea *sa1, ScrArea *sa2, int swap_space)
|
||||
BKE_spacedata_copylist(&sa1->spacedata, &sa2->spacedata);
|
||||
}
|
||||
|
||||
/* regions... XXX */
|
||||
/* regions */
|
||||
for(ar= sa1->regionbase.first; ar; ar= ar->next)
|
||||
BKE_area_region_free(sa1->type, ar);
|
||||
BLI_freelistN(&sa1->regionbase);
|
||||
|
||||
for(ar= sa2->regionbase.first; ar; ar= ar->next) {
|
||||
ARegion *newar= BKE_area_region_copy(ar);
|
||||
ARegion *newar= BKE_area_region_copy(sa2->type, ar);
|
||||
BLI_addtail(&sa1->regionbase, newar);
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "BKE_customdata.h"
|
||||
#include "BKE_library.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_report.h"
|
||||
#include "BKE_screen.h"
|
||||
#include "BKE_utildefines.h"
|
||||
|
||||
@ -1402,21 +1403,28 @@ void SCREEN_OT_repeat_history(wmOperatorType *ot)
|
||||
/* insert a region in the area region list */
|
||||
static int region_split_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
ARegion *newar= BKE_area_region_copy(ar);
|
||||
int dir= RNA_enum_get(op->ptr, "direction");
|
||||
|
||||
BLI_insertlinkafter(&sa->regionbase, CTX_wm_region(C), newar);
|
||||
if(ar->regiontype==RGN_TYPE_HEADER)
|
||||
BKE_report(op->reports, RPT_ERROR, "Cannot split header");
|
||||
else if(ar->alignment==RGN_ALIGN_QSPLIT)
|
||||
BKE_report(op->reports, RPT_ERROR, "Cannot split further");
|
||||
else {
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
ARegion *newar= BKE_area_region_copy(sa->type, ar);
|
||||
int dir= RNA_enum_get(op->ptr, "type");
|
||||
|
||||
newar->alignment= ar->alignment;
|
||||
|
||||
if(dir=='h')
|
||||
ar->alignment= RGN_ALIGN_HSPLIT;
|
||||
else
|
||||
ar->alignment= RGN_ALIGN_VSPLIT;
|
||||
|
||||
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
|
||||
BLI_insertlinkafter(&sa->regionbase, ar, newar);
|
||||
|
||||
newar->alignment= ar->alignment;
|
||||
|
||||
if(dir=='h')
|
||||
ar->alignment= RGN_ALIGN_HSPLIT;
|
||||
else
|
||||
ar->alignment= RGN_ALIGN_VSPLIT;
|
||||
|
||||
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@ -1428,13 +1436,60 @@ void SCREEN_OT_region_split(wmOperatorType *ot)
|
||||
ot->idname= "SCREEN_OT_region_split";
|
||||
|
||||
/* api callbacks */
|
||||
ot->invoke= WM_operator_confirm;
|
||||
ot->invoke= WM_menu_invoke;
|
||||
ot->exec= region_split_exec;
|
||||
ot->poll= ED_operator_areaactive;
|
||||
|
||||
RNA_def_enum(ot->srna, "direction", prop_direction_items, 'h', "Direction", "");
|
||||
RNA_def_enum(ot->srna, "type", prop_direction_items, 'h', "Direction", "");
|
||||
}
|
||||
|
||||
/* ************** region four-split operator ***************************** */
|
||||
|
||||
/* insert a region in the area region list */
|
||||
static int region_foursplit_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
|
||||
/* some rules... */
|
||||
if(ar->regiontype!=RGN_TYPE_WINDOW)
|
||||
BKE_report(op->reports, RPT_ERROR, "Only window region can be 4-splitted");
|
||||
else if(ar->next)
|
||||
BKE_report(op->reports, RPT_ERROR, "Only last region can be 4-splitted");
|
||||
else if(ar->alignment==RGN_ALIGN_QSPLIT)
|
||||
BKE_report(op->reports, RPT_ERROR, "Cannot split further");
|
||||
else {
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
ARegion *newar;
|
||||
int count;
|
||||
|
||||
ar->alignment= RGN_ALIGN_QSPLIT;
|
||||
|
||||
for(count=0; count<3; count++) {
|
||||
newar= BKE_area_region_copy(sa->type, ar);
|
||||
BLI_addtail(&sa->regionbase, newar);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
|
||||
}
|
||||
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void SCREEN_OT_region_foursplit(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Split Region in 4 Parts";
|
||||
ot->idname= "SCREEN_OT_region_foursplit";
|
||||
|
||||
/* api callbacks */
|
||||
ot->invoke= WM_operator_confirm;
|
||||
ot->exec= region_foursplit_exec;
|
||||
ot->poll= ED_operator_areaactive;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ************** region flip operator ***************************** */
|
||||
|
||||
/* flip a region alignment */
|
||||
@ -1583,6 +1638,7 @@ void ED_operatortypes_screen(void)
|
||||
WM_operatortype_append(SCREEN_OT_area_join);
|
||||
WM_operatortype_append(SCREEN_OT_area_rip);
|
||||
WM_operatortype_append(SCREEN_OT_region_split);
|
||||
WM_operatortype_append(SCREEN_OT_region_foursplit);
|
||||
WM_operatortype_append(SCREEN_OT_region_flip);
|
||||
WM_operatortype_append(SCREEN_OT_screen_set);
|
||||
WM_operatortype_append(SCREEN_OT_screen_full_area);
|
||||
@ -1616,8 +1672,8 @@ void ED_keymap_screen(wmWindowManager *wm)
|
||||
WM_keymap_add_item(keymap, "SCREEN_OT_screen_full_area", SPACEKEY, KM_PRESS, KM_CTRL, 0);
|
||||
|
||||
/* tests */
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "SCREEN_OT_region_split", SKEY, KM_PRESS, KM_CTRL|KM_ALT, 0)->ptr, "direction", 'h');
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "SCREEN_OT_region_split", SKEY, KM_PRESS, KM_CTRL|KM_ALT|KM_SHIFT, 0)->ptr, "direction", 'v');
|
||||
WM_keymap_add_item(keymap, "SCREEN_OT_region_split", SKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
|
||||
WM_keymap_add_item(keymap, "SCREEN_OT_region_foursplit", SKEY, KM_PRESS, KM_CTRL|KM_ALT|KM_SHIFT, 0);
|
||||
|
||||
/*frame offsets*/
|
||||
WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", TIMER0, KM_ANY, KM_ANY, 0);
|
||||
|
@ -1552,11 +1552,11 @@ static void sculpt_load_mats(bglMats *mats, ViewContext *vc)
|
||||
float cpy[4][4];
|
||||
int i, j;
|
||||
|
||||
Mat4MulMat4(cpy, vc->v3d->viewmat, vc->obact->obmat);
|
||||
Mat4MulMat4(cpy, vc->rv3d->viewmat, vc->obact->obmat);
|
||||
|
||||
for(i = 0; i < 4; ++i) {
|
||||
for(j = 0; j < 4; ++j) {
|
||||
mats->projection[i*4+j] = vc->v3d->winmat[i][j];
|
||||
mats->projection[i*4+j] = vc->rv3d->winmat[i][j];
|
||||
mats->modelview[i*4+j] = cpy[i][j];
|
||||
}
|
||||
}
|
||||
|
@ -47,19 +47,6 @@
|
||||
#include "ED_space_api.h"
|
||||
#include "ED_uvedit.h"
|
||||
|
||||
ARegionType *ED_regiontype_from_id(SpaceType *st, int regionid)
|
||||
{
|
||||
ARegionType *art;
|
||||
|
||||
for(art= st->regiontypes.first; art; art= art->next)
|
||||
if(art->regionid==regionid)
|
||||
return art;
|
||||
|
||||
printf("Error, region type missing in %s\n", st->name);
|
||||
return st->regiontypes.first;
|
||||
}
|
||||
|
||||
|
||||
/* only call once on startup, storage is global in BKE kernel listbase */
|
||||
void ED_spacetypes_init(void)
|
||||
{
|
||||
|
@ -1268,7 +1268,7 @@ static void draw_bone(int dt, int armflag, int boneflag, int constflag, unsigned
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_custom_bone(Scene *scene, View3D *v3d, Object *ob, int dt, int armflag, int boneflag, unsigned int id, float length)
|
||||
static void draw_custom_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int dt, int armflag, int boneflag, unsigned int id, float length)
|
||||
{
|
||||
if(ob==NULL) return;
|
||||
|
||||
@ -1283,7 +1283,7 @@ static void draw_custom_bone(Scene *scene, View3D *v3d, Object *ob, int dt, int
|
||||
glLoadName((GLuint) id|BONESEL_BONE);
|
||||
}
|
||||
|
||||
draw_object_instance(scene, v3d, ob, dt, armflag & ARM_POSEMODE);
|
||||
draw_object_instance(scene, v3d, rv3d, ob, dt, armflag & ARM_POSEMODE);
|
||||
}
|
||||
|
||||
|
||||
@ -1513,7 +1513,7 @@ static void draw_pose_dofs(Object *ob)
|
||||
}
|
||||
|
||||
/* assumes object is Armature with pose */
|
||||
static void draw_pose_channels(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
static void draw_pose_channels(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
bArmature *arm= ob->data;
|
||||
@ -1590,7 +1590,7 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
if (pchan->bone->flag & BONE_DRAWWIRE)
|
||||
draw_wire= 1;
|
||||
else
|
||||
draw_custom_bone(scene, v3d, pchan->custom, OB_SOLID, arm->flag, flag, index, bone->length);
|
||||
draw_custom_bone(scene, v3d, rv3d, pchan->custom, OB_SOLID, arm->flag, flag, index, bone->length);
|
||||
}
|
||||
else if (arm->drawtype==ARM_LINE)
|
||||
; /* nothing in solid */
|
||||
@ -1656,7 +1656,7 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
if ((bone->parent) && (bone->parent->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG)))
|
||||
flag &= ~BONE_CONNECTED;
|
||||
|
||||
draw_custom_bone(scene, v3d, pchan->custom, OB_WIRE, arm->flag, flag, index, bone->length);
|
||||
draw_custom_bone(scene, v3d, rv3d, pchan->custom, OB_WIRE, arm->flag, flag, index, bone->length);
|
||||
|
||||
glPopMatrix();
|
||||
}
|
||||
@ -1684,7 +1684,7 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
}
|
||||
/* if solid && posemode, we draw again with polygonoffset */
|
||||
else if ((dt > OB_WIRE) && (arm->flag & ARM_POSEMODE)) {
|
||||
bglPolygonOffset(v3d->dist, 1.0);
|
||||
bglPolygonOffset(rv3d->dist, 1.0);
|
||||
}
|
||||
else {
|
||||
/* and we use selection indices if not done yet */
|
||||
@ -1772,7 +1772,7 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
}
|
||||
/* restore things */
|
||||
if ((arm->drawtype!=ARM_LINE)&& (dt>OB_WIRE) && (arm->flag & ARM_POSEMODE))
|
||||
bglPolygonOffset(v3d->dist, 0.0);
|
||||
bglPolygonOffset(rv3d->dist, 0.0);
|
||||
}
|
||||
|
||||
/* restore */
|
||||
@ -1849,7 +1849,7 @@ static void set_matrix_editbone(EditBone *eBone)
|
||||
|
||||
}
|
||||
|
||||
static void draw_ebones(View3D *v3d, Object *ob, int dt)
|
||||
static void draw_ebones(View3D *v3d, RegionView3D *rv3d, Object *ob, int dt)
|
||||
{
|
||||
EditBone *eBone;
|
||||
bArmature *arm= ob->data;
|
||||
@ -1920,7 +1920,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt)
|
||||
index= 0;
|
||||
}
|
||||
else if (dt > OB_WIRE)
|
||||
bglPolygonOffset(v3d->dist, 1.0);
|
||||
bglPolygonOffset(rv3d->dist, 1.0);
|
||||
else if (arm->flag & ARM_EDITMODE)
|
||||
index= 0; /* do selection codes */
|
||||
|
||||
@ -1971,7 +1971,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt)
|
||||
|
||||
/* restore */
|
||||
if (arm->drawtype==ARM_LINE);
|
||||
else if (dt>OB_WIRE) bglPolygonOffset(v3d->dist, 0.0);
|
||||
else if (dt>OB_WIRE) bglPolygonOffset(rv3d->dist, 0.0);
|
||||
|
||||
/* finally names and axes */
|
||||
if (arm->flag & (ARM_DRAWNAMES|ARM_DRAWAXES)) {
|
||||
@ -2020,7 +2020,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt)
|
||||
/* draw bone paths
|
||||
* - in view space
|
||||
*/
|
||||
static void draw_pose_paths(Scene *scene, View3D *v3d, Object *ob)
|
||||
static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob)
|
||||
{
|
||||
bArmature *arm= ob->data;
|
||||
bPoseChannel *pchan;
|
||||
@ -2035,7 +2035,7 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, Object *ob)
|
||||
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
|
||||
|
||||
glPushMatrix();
|
||||
glLoadMatrixf(v3d->viewmat);
|
||||
glLoadMatrixf(rv3d->viewmat);
|
||||
|
||||
/* version patch here - cannot access frame info from file reading */
|
||||
if (arm->pathsize == 0) arm->pathsize= 1;
|
||||
@ -2257,7 +2257,7 @@ static void ghost_poses_tag_unselected(Object *ob, short unset)
|
||||
/* draw ghosts that occur within a frame range
|
||||
* note: object should be in posemode
|
||||
*/
|
||||
static void draw_ghost_poses_range(Scene *scene, View3D *v3d, Base *base)
|
||||
static void draw_ghost_poses_range(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
bArmature *arm= ob->data;
|
||||
@ -2298,7 +2298,7 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, Base *base)
|
||||
|
||||
//do_all_pose_actions(scene, ob); // XXX old animation system
|
||||
where_is_pose(scene, ob);
|
||||
draw_pose_channels(scene, v3d, base, OB_WIRE);
|
||||
draw_pose_channels(scene, v3d, rv3d, base, OB_WIRE);
|
||||
}
|
||||
glDisable(GL_BLEND);
|
||||
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
|
||||
@ -2318,7 +2318,7 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, Base *base)
|
||||
/* draw ghosts on keyframes in action within range
|
||||
* - object should be in posemode
|
||||
*/
|
||||
static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, Base *base)
|
||||
static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
bAction *act= ob->action; // XXX old animsys stuff... watch it!
|
||||
@ -2374,7 +2374,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, Base *base)
|
||||
|
||||
//do_all_pose_actions(scene, ob); // XXX old animation system
|
||||
where_is_pose(scene, ob);
|
||||
draw_pose_channels(scene, v3d, base, OB_WIRE);
|
||||
draw_pose_channels(scene, v3d, rv3d, base, OB_WIRE);
|
||||
}
|
||||
glDisable(GL_BLEND);
|
||||
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
|
||||
@ -2394,7 +2394,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, Base *base)
|
||||
/* draw ghosts around current frame
|
||||
* - object is supposed to be armature in posemode
|
||||
*/
|
||||
static void draw_ghost_poses(Scene *scene, View3D *v3d, Base *base)
|
||||
static void draw_ghost_poses(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
bArmature *arm= ob->data;
|
||||
@ -2456,7 +2456,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, Base *base)
|
||||
if (CFRA!=cfrao) {
|
||||
//do_all_pose_actions(scene, ob); // xxx old animation system crap
|
||||
where_is_pose(scene, ob);
|
||||
draw_pose_channels(scene, v3d, base, OB_WIRE);
|
||||
draw_pose_channels(scene, v3d, rv3d, base, OB_WIRE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2472,7 +2472,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, Base *base)
|
||||
if (CFRA != cfrao) {
|
||||
//do_all_pose_actions(scene, ob); // XXX old animation system crap...
|
||||
where_is_pose(scene, ob);
|
||||
draw_pose_channels(scene, v3d, base, OB_WIRE);
|
||||
draw_pose_channels(scene, v3d, rv3d, base, OB_WIRE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2493,7 +2493,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, Base *base)
|
||||
/* ********************************** Armature Drawing - Main ************************* */
|
||||
|
||||
/* called from drawobject.c, return 1 if nothing was drawn */
|
||||
int draw_armature(Scene *scene, View3D *v3d, Base *base, int dt, int flag)
|
||||
int draw_armature(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
bArmature *arm= ob->data;
|
||||
@ -2517,7 +2517,7 @@ int draw_armature(Scene *scene, View3D *v3d, Base *base, int dt, int flag)
|
||||
/* editmode? */
|
||||
if(arm->edbo) {
|
||||
arm->flag |= ARM_EDITMODE;
|
||||
draw_ebones(v3d, ob, dt);
|
||||
draw_ebones(v3d, rv3d, ob, dt);
|
||||
arm->flag &= ~ARM_EDITMODE;
|
||||
}
|
||||
else{
|
||||
@ -2531,14 +2531,14 @@ int draw_armature(Scene *scene, View3D *v3d, Base *base, int dt, int flag)
|
||||
}
|
||||
else if(ob->flag & OB_POSEMODE) {
|
||||
if (arm->ghosttype == ARM_GHOST_RANGE) {
|
||||
draw_ghost_poses_range(scene, v3d, base);
|
||||
draw_ghost_poses_range(scene, v3d, rv3d, base);
|
||||
}
|
||||
else if (arm->ghosttype == ARM_GHOST_KEYS) {
|
||||
draw_ghost_poses_keys(scene, v3d, base);
|
||||
draw_ghost_poses_keys(scene, v3d, rv3d, base);
|
||||
}
|
||||
else if (arm->ghosttype == ARM_GHOST_CUR) {
|
||||
if (arm->ghostep)
|
||||
draw_ghost_poses(scene, v3d, base);
|
||||
draw_ghost_poses(scene, v3d, rv3d, base);
|
||||
}
|
||||
if ((flag & DRAW_SCENESET)==0) {
|
||||
if(ob==OBACT)
|
||||
@ -2547,11 +2547,11 @@ int draw_armature(Scene *scene, View3D *v3d, Base *base, int dt, int flag)
|
||||
if(OBACT && ob==modifiers_isDeformedByArmature(OBACT))
|
||||
arm->flag |= ARM_POSEMODE;
|
||||
}
|
||||
draw_pose_paths(scene, v3d, ob);
|
||||
draw_pose_paths(scene, v3d, rv3d, ob);
|
||||
}
|
||||
}
|
||||
}
|
||||
draw_pose_channels(scene, v3d, base, dt);
|
||||
draw_pose_channels(scene, v3d, rv3d, base, dt);
|
||||
arm->flag &= ~ARM_POSEMODE;
|
||||
|
||||
if(ob->flag & OB_POSEMODE)
|
||||
|
@ -150,6 +150,7 @@ static int draw_tfaces3D__setHiddenOpts(void *userData, int index)
|
||||
return (flags & eEdge_Select);
|
||||
}
|
||||
}
|
||||
|
||||
static int draw_tfaces3D__setSeamOpts(void *userData, int index)
|
||||
{
|
||||
struct { Mesh *me; EdgeHash *eh; } *data = userData;
|
||||
@ -166,6 +167,7 @@ static int draw_tfaces3D__setSeamOpts(void *userData, int index)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int draw_tfaces3D__setSelectOpts(void *userData, int index)
|
||||
{
|
||||
struct { Mesh *me; EdgeHash *eh; } *data = userData;
|
||||
@ -174,6 +176,7 @@ static int draw_tfaces3D__setSelectOpts(void *userData, int index)
|
||||
|
||||
return flags & eEdge_Select;
|
||||
}
|
||||
|
||||
static int draw_tfaces3D__setActiveOpts(void *userData, int index)
|
||||
{
|
||||
struct { Mesh *me; EdgeHash *eh; } *data = userData;
|
||||
@ -186,6 +189,7 @@ static int draw_tfaces3D__setActiveOpts(void *userData, int index)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int draw_tfaces3D__drawFaceOpts(void *userData, int index)
|
||||
{
|
||||
Mesh *me = (Mesh*)userData;
|
||||
@ -196,7 +200,8 @@ static int draw_tfaces3D__drawFaceOpts(void *userData, int index)
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
static void draw_tfaces3D(View3D *v3d, Object *ob, Mesh *me, DerivedMesh *dm)
|
||||
|
||||
static void draw_tfaces3D(RegionView3D *rv3d, Object *ob, Mesh *me, DerivedMesh *dm)
|
||||
{
|
||||
struct { Mesh *me; EdgeHash *eh; } data;
|
||||
|
||||
@ -205,7 +210,7 @@ static void draw_tfaces3D(View3D *v3d, Object *ob, Mesh *me, DerivedMesh *dm)
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDisable(GL_LIGHTING);
|
||||
bglPolygonOffset(v3d->dist, 1.0);
|
||||
bglPolygonOffset(rv3d->dist, 1.0);
|
||||
|
||||
/* Draw (Hidden) Edges */
|
||||
UI_ThemeColor(TH_EDGE_FACESEL);
|
||||
@ -232,7 +237,7 @@ static void draw_tfaces3D(View3D *v3d, Object *ob, Mesh *me, DerivedMesh *dm)
|
||||
glDisable(GL_BLEND);
|
||||
}
|
||||
|
||||
bglPolygonOffset(v3d->dist, 1.0);
|
||||
bglPolygonOffset(rv3d->dist, 1.0);
|
||||
|
||||
/* Draw Stippled Outline for selected faces */
|
||||
glColor3ub(255, 255, 255);
|
||||
@ -242,7 +247,7 @@ static void draw_tfaces3D(View3D *v3d, Object *ob, Mesh *me, DerivedMesh *dm)
|
||||
|
||||
dm->drawMappedEdges(dm, draw_tfaces3D__setActiveOpts, &data);
|
||||
|
||||
bglPolygonOffset(v3d->dist, 0.0); // resets correctly now, even after calling accumulated offsets
|
||||
bglPolygonOffset(rv3d->dist, 0.0); // resets correctly now, even after calling accumulated offsets
|
||||
|
||||
BLI_edgehash_free(data.eh, NULL);
|
||||
}
|
||||
@ -335,7 +340,7 @@ struct TextureDrawState {
|
||||
unsigned char obcol[4];
|
||||
} Gtexdraw = {NULL, 0, 0, {0, 0, 0, 0}};
|
||||
|
||||
static void draw_textured_begin(Scene *scene, View3D *v3d, Object *ob)
|
||||
static void draw_textured_begin(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob)
|
||||
{
|
||||
unsigned char obcol[4];
|
||||
int istex, solidtex= 0;
|
||||
@ -348,7 +353,7 @@ static void draw_textured_begin(Scene *scene, View3D *v3d, Object *ob)
|
||||
}
|
||||
else
|
||||
/* draw with lights in the scene otherwise */
|
||||
Gtexdraw.islit= GPU_scene_object_lights(scene, ob, v3d->lay, v3d->viewmat);
|
||||
Gtexdraw.islit= GPU_scene_object_lights(scene, ob, v3d->lay, rv3d->viewmat);
|
||||
|
||||
obcol[0]= CLAMPIS(ob->col[0]*255, 0, 255);
|
||||
obcol[1]= CLAMPIS(ob->col[1]*255, 0, 255);
|
||||
@ -540,7 +545,7 @@ void draw_mesh_text(Scene *scene, Object *ob, int glsl)
|
||||
ddm->release(ddm);
|
||||
}
|
||||
|
||||
void draw_mesh_textured(Scene *scene, View3D *v3d, Object *ob, DerivedMesh *dm, int faceselect)
|
||||
void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, DerivedMesh *dm, int faceselect)
|
||||
{
|
||||
Mesh *me= ob->data;
|
||||
|
||||
@ -549,7 +554,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, Object *ob, DerivedMesh *dm,
|
||||
else glFrontFace(GL_CCW);
|
||||
|
||||
/* draw the textured mesh */
|
||||
draw_textured_begin(scene, v3d, ob);
|
||||
draw_textured_begin(scene, v3d, rv3d, ob);
|
||||
|
||||
if(me->edit_mesh) {
|
||||
dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, me->edit_mesh);
|
||||
@ -570,7 +575,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, Object *ob, DerivedMesh *dm,
|
||||
|
||||
/* draw edges and selected faces over textured mesh */
|
||||
if(!me->edit_mesh && faceselect)
|
||||
draw_tfaces3D(v3d, ob, me, dm);
|
||||
draw_tfaces3D(rv3d, ob, me, dm);
|
||||
|
||||
/* reset from negative scale correction */
|
||||
glFrontFace(GL_CCW);
|
||||
|
@ -111,6 +111,18 @@
|
||||
#include "view3d_intern.h" // own include
|
||||
|
||||
|
||||
/* this condition has been made more complex since editmode can draw textures */
|
||||
#define CHECK_OB_DRAWTEXTURE(vd, dt) \
|
||||
((vd->drawtype==OB_TEXTURE && dt>OB_SOLID) || \
|
||||
(vd->drawtype==OB_SOLID && vd->flag2 & V3D_SOLID_TEX))
|
||||
|
||||
#define CHECK_OB_DRAWFACEDOT(sce, vd, dt) \
|
||||
( (sce->selectmode & SCE_SELECT_FACE) && \
|
||||
(vd->drawtype<=OB_SOLID) && \
|
||||
(((vd->drawtype==OB_SOLID) && (dt>=OB_SOLID) && (vd->flag2 & V3D_SOLID_TEX) && (vd->flag & V3D_ZBUF_SELECT)) == 0) \
|
||||
)
|
||||
|
||||
|
||||
/* pretty stupid */
|
||||
/* editmball.c */
|
||||
extern ListBase editelems;
|
||||
@ -386,12 +398,12 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4])
|
||||
}
|
||||
|
||||
/* circle for object centers, special_color is for library or ob users */
|
||||
static void drawcentercircle(View3D *v3d, float *vec, int selstate, int special_color)
|
||||
static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *vec, int selstate, int special_color)
|
||||
{
|
||||
float size;
|
||||
|
||||
size= v3d->persmat[0][3]*vec[0]+ v3d->persmat[1][3]*vec[1]+ v3d->persmat[2][3]*vec[2]+ v3d->persmat[3][3];
|
||||
size*= v3d->pixsize*((float)U.obcenter_dia*0.5f);
|
||||
size= rv3d->persmat[0][3]*vec[0]+ rv3d->persmat[1][3]*vec[1]+ rv3d->persmat[2][3]*vec[2]+ rv3d->persmat[3][3];
|
||||
size*= rv3d->pixsize*((float)U.obcenter_dia*0.5f);
|
||||
|
||||
/* using gldepthfunc guarantees that it does write z values, but not checks for it, so centers remain visible independt order of drawing */
|
||||
if(v3d->zbuf) glDepthFunc(GL_ALWAYS);
|
||||
@ -407,10 +419,10 @@ static void drawcentercircle(View3D *v3d, float *vec, int selstate, int special_
|
||||
else if (selstate == SELECT) UI_ThemeColorShadeAlpha(TH_SELECT, 0, -80);
|
||||
else if (selstate == DESELECT) UI_ThemeColorShadeAlpha(TH_TRANSFORM, 0, -80);
|
||||
}
|
||||
drawcircball(GL_POLYGON, vec, size, v3d->viewinv);
|
||||
drawcircball(GL_POLYGON, vec, size, rv3d->viewinv);
|
||||
|
||||
UI_ThemeColorShadeAlpha(TH_WIRE, 0, -30);
|
||||
drawcircball(GL_LINE_LOOP, vec, size, v3d->viewinv);
|
||||
drawcircball(GL_LINE_LOOP, vec, size, rv3d->viewinv);
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
if(v3d->zbuf) glDepthFunc(GL_LEQUAL);
|
||||
@ -645,7 +657,7 @@ static void spotvolume(float *lvec, float *vvec, float inp)
|
||||
return;
|
||||
}
|
||||
|
||||
static void drawlamp(Scene *scene, View3D *v3d, Object *ob)
|
||||
static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob)
|
||||
{
|
||||
Lamp *la;
|
||||
float vec[3], lvec[3], vvec[3], circrad, x,y,z;
|
||||
@ -660,15 +672,15 @@ static void drawlamp(Scene *scene, View3D *v3d, Object *ob)
|
||||
|
||||
/* we first draw only the screen aligned & fixed scale stuff */
|
||||
glPushMatrix();
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
|
||||
/* lets calculate the scale: */
|
||||
pixsize= v3d->persmat[0][3]*ob->obmat[3][0]+ v3d->persmat[1][3]*ob->obmat[3][1]+ v3d->persmat[2][3]*ob->obmat[3][2]+ v3d->persmat[3][3];
|
||||
pixsize*= v3d->pixsize;
|
||||
pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3];
|
||||
pixsize*= rv3d->pixsize;
|
||||
lampsize= pixsize*((float)U.obcenter_dia*0.5f);
|
||||
|
||||
/* and view aligned matrix: */
|
||||
Mat4CpyMat4(imat, v3d->viewinv);
|
||||
Mat4CpyMat4(imat, rv3d->viewinv);
|
||||
Normalize(imat[0]);
|
||||
Normalize(imat[1]);
|
||||
|
||||
@ -753,9 +765,9 @@ static void drawlamp(Scene *scene, View3D *v3d, Object *ob)
|
||||
if ((la->type==LA_SPOT) || (la->type==LA_YF_PHOTON)) {
|
||||
lvec[0]=lvec[1]= 0.0;
|
||||
lvec[2] = 1.0;
|
||||
x = v3d->persmat[0][2];
|
||||
y = v3d->persmat[1][2];
|
||||
z = v3d->persmat[2][2];
|
||||
x = rv3d->persmat[0][2];
|
||||
y = rv3d->persmat[1][2];
|
||||
z = rv3d->persmat[2][2];
|
||||
vvec[0]= x*ob->obmat[0][0] + y*ob->obmat[0][1] + z*ob->obmat[0][2];
|
||||
vvec[1]= x*ob->obmat[1][0] + y*ob->obmat[1][1] + z*ob->obmat[1][2];
|
||||
vvec[2]= x*ob->obmat[2][0] + y*ob->obmat[2][1] + z*ob->obmat[2][2];
|
||||
@ -871,7 +883,7 @@ static void drawlamp(Scene *scene, View3D *v3d, Object *ob)
|
||||
}
|
||||
|
||||
/* and back to viewspace */
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
VECCOPY(vec, ob->obmat[3]);
|
||||
|
||||
setlinestyle(0);
|
||||
@ -937,7 +949,7 @@ static void draw_focus_cross(float dist, float size)
|
||||
}
|
||||
|
||||
/* flag similar to draw_object() */
|
||||
static void drawcamera(Scene *scene, View3D *v3d, Object *ob, int flag)
|
||||
static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int flag)
|
||||
{
|
||||
/* a standing up pyramid with (0,0,0) as top */
|
||||
Camera *cam;
|
||||
@ -953,14 +965,14 @@ static void drawcamera(Scene *scene, View3D *v3d, Object *ob, int flag)
|
||||
glDisable(GL_LIGHTING);
|
||||
glDisable(GL_CULL_FACE);
|
||||
|
||||
if(v3d->persp>=2 && cam->type==CAM_ORTHO && ob==v3d->camera) {
|
||||
if(rv3d->persp>=2 && cam->type==CAM_ORTHO && ob==v3d->camera) {
|
||||
facx= 0.5*cam->ortho_scale*1.28;
|
||||
facy= 0.5*cam->ortho_scale*1.024;
|
||||
depth= -cam->clipsta-0.1;
|
||||
}
|
||||
else {
|
||||
fac= cam->drawsize;
|
||||
if(v3d->persp>=2 && ob==v3d->camera) fac= cam->clipsta+0.1; /* that way it's always visible */
|
||||
if(rv3d->persp>=2 && ob==v3d->camera) fac= cam->clipsta+0.1; /* that way it's always visible */
|
||||
|
||||
depth= - fac*cam->lens/16.0;
|
||||
facx= fac*1.28;
|
||||
@ -981,7 +993,7 @@ static void drawcamera(Scene *scene, View3D *v3d, Object *ob, int flag)
|
||||
glEnd();
|
||||
|
||||
|
||||
if(v3d->persp>=2 && ob==v3d->camera) return;
|
||||
if(rv3d->persp>=2 && ob==v3d->camera) return;
|
||||
|
||||
glBegin(GL_LINE_STRIP);
|
||||
glVertex3fv(vec[2]);
|
||||
@ -1022,13 +1034,13 @@ static void drawcamera(Scene *scene, View3D *v3d, Object *ob, int flag)
|
||||
|
||||
if(flag==0) {
|
||||
if(cam->flag & (CAM_SHOWLIMITS+CAM_SHOWMIST)) {
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
Mat4CpyMat4(vec, ob->obmat);
|
||||
Mat4Ortho(vec);
|
||||
wmMultMatrix(vec);
|
||||
|
||||
MTC_Mat4SwapMat4(v3d->persmat, tmat);
|
||||
wmGetSingleMatrix(v3d->persmat);
|
||||
MTC_Mat4SwapMat4(rv3d->persmat, tmat);
|
||||
wmGetSingleMatrix(rv3d->persmat);
|
||||
|
||||
if(cam->flag & CAM_SHOWLIMITS) {
|
||||
draw_limit_line(cam->clipsta, cam->clipend, 0x77FFFF);
|
||||
@ -1040,7 +1052,7 @@ static void drawcamera(Scene *scene, View3D *v3d, Object *ob, int flag)
|
||||
if(cam->flag & CAM_SHOWMIST)
|
||||
if(wrld) draw_limit_line(wrld->miststa, wrld->miststa+wrld->mistdist, 0xFFFFFF);
|
||||
|
||||
MTC_Mat4SwapMat4(v3d->persmat, tmat);
|
||||
MTC_Mat4SwapMat4(rv3d->persmat, tmat);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1087,11 +1099,11 @@ void lattice_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BPo
|
||||
int i, N = lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
|
||||
short s[2];
|
||||
|
||||
view3d_get_object_project_mat(vc->v3d, vc->obedit, pmat, vmat);
|
||||
view3d_get_object_project_mat(vc->rv3d, vc->obedit, pmat, vmat);
|
||||
|
||||
for (i=0; i<N; i++, bp++, co+=3) {
|
||||
if (bp->hide==0) {
|
||||
view3d_project_short_clip(vc->ar, vc->v3d, dl?co:bp->vec, s, pmat, vmat);
|
||||
view3d_project_short_clip(vc->ar, dl?co:bp->vec, s, pmat, vmat);
|
||||
func(userData, bp, s[0], s[1]);
|
||||
}
|
||||
}
|
||||
@ -1192,7 +1204,7 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co
|
||||
|
||||
if (eve->h==0) {
|
||||
if (data->clipVerts) {
|
||||
view3d_project_short_clip(data->vc.ar, data->vc.v3d, co, s, data->pmat, data->vmat);
|
||||
view3d_project_short_clip(data->vc.ar, co, s, data->pmat, data->vmat);
|
||||
} else {
|
||||
view3d_project_short_noclip(data->vc.ar, co, s, data->pmat);
|
||||
}
|
||||
@ -1211,7 +1223,7 @@ void mesh_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, EditVe
|
||||
data.userData = userData;
|
||||
data.clipVerts = clipVerts;
|
||||
|
||||
view3d_get_object_project_mat(vc->v3d, vc->obedit, data.pmat, data.vmat);
|
||||
view3d_get_object_project_mat(vc->rv3d, vc->obedit, data.pmat, data.vmat);
|
||||
|
||||
EM_init_index_arrays(vc->em, 1, 0, 0);
|
||||
dm->foreachMappedVert(dm, mesh_foreachScreenVert__mapFunc, &data);
|
||||
@ -1228,8 +1240,8 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0
|
||||
|
||||
if (eed->h==0) {
|
||||
if (data->clipVerts==1) {
|
||||
view3d_project_short_clip(data->vc.ar, data->vc.v3d, v0co, s[0], data->pmat, data->vmat);
|
||||
view3d_project_short_clip(data->vc.ar, data->vc.v3d, v1co, s[1], data->pmat, data->vmat);
|
||||
view3d_project_short_clip(data->vc.ar, v0co, s[0], data->pmat, data->vmat);
|
||||
view3d_project_short_clip(data->vc.ar, v1co, s[1], data->pmat, data->vmat);
|
||||
} else {
|
||||
view3d_project_short_noclip(data->vc.ar, v0co, s[0], data->pmat);
|
||||
view3d_project_short_noclip(data->vc.ar, v1co, s[1], data->pmat);
|
||||
@ -1255,7 +1267,7 @@ void mesh_foreachScreenEdge(ViewContext *vc, void (*func)(void *userData, EditEd
|
||||
data.userData = userData;
|
||||
data.clipVerts = clipVerts;
|
||||
|
||||
view3d_get_object_project_mat(vc->v3d, vc->obedit, data.pmat, data.vmat);
|
||||
view3d_get_object_project_mat(vc->rv3d, vc->obedit, data.pmat, data.vmat);
|
||||
|
||||
EM_init_index_arrays(vc->em, 0, 1, 0);
|
||||
dm->foreachMappedEdge(dm, mesh_foreachScreenEdge__mapFunc, &data);
|
||||
@ -1271,7 +1283,7 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *ce
|
||||
short s[2];
|
||||
|
||||
if (efa && efa->h==0 && efa->fgonf!=EM_FGON) {
|
||||
view3d_project_short_clip(data->vc.ar, data->vc.v3d, cent, s, data->pmat, data->vmat);
|
||||
view3d_project_short_clip(data->vc.ar, cent, s, data->pmat, data->vmat);
|
||||
|
||||
data->func(data->userData, efa, s[0], s[1], index);
|
||||
}
|
||||
@ -1286,7 +1298,7 @@ void mesh_foreachScreenFace(ViewContext *vc, void (*func)(void *userData, EditFa
|
||||
data.func = func;
|
||||
data.userData = userData;
|
||||
|
||||
view3d_get_object_project_mat(vc->v3d, vc->obedit, data.pmat, data.vmat);
|
||||
view3d_get_object_project_mat(vc->rv3d, vc->obedit, data.pmat, data.vmat);
|
||||
|
||||
EM_init_index_arrays(vc->em, 0, 0, 1);
|
||||
dm->foreachMappedFaceCenter(dm, mesh_foreachScreenFace__mapFunc, &data);
|
||||
@ -1303,7 +1315,7 @@ void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb
|
||||
Nurb *nu;
|
||||
int i;
|
||||
|
||||
view3d_get_object_project_mat(vc->v3d, vc->obedit, pmat, vmat);
|
||||
view3d_get_object_project_mat(vc->rv3d, vc->obedit, pmat, vmat);
|
||||
|
||||
for (nu= cu->editnurb->first; nu; nu=nu->next) {
|
||||
if((nu->type & 7)==CU_BEZIER) {
|
||||
@ -1312,17 +1324,17 @@ void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb
|
||||
|
||||
if(bezt->hide==0) {
|
||||
if (G.f & G_HIDDENHANDLES) {
|
||||
view3d_project_short_clip(vc->ar, vc->v3d, bezt->vec[1], s, pmat, vmat);
|
||||
view3d_project_short_clip(vc->ar, bezt->vec[1], s, pmat, vmat);
|
||||
if (s[0] != IS_CLIPPED)
|
||||
func(userData, nu, NULL, bezt, 1, s[0], s[1]);
|
||||
} else {
|
||||
view3d_project_short_clip(vc->ar, vc->v3d, bezt->vec[0], s, pmat, vmat);
|
||||
view3d_project_short_clip(vc->ar, bezt->vec[0], s, pmat, vmat);
|
||||
if (s[0] != IS_CLIPPED)
|
||||
func(userData, nu, NULL, bezt, 0, s[0], s[1]);
|
||||
view3d_project_short_clip(vc->ar, vc->v3d, bezt->vec[1], s, pmat, vmat);
|
||||
view3d_project_short_clip(vc->ar, bezt->vec[1], s, pmat, vmat);
|
||||
if (s[0] != IS_CLIPPED)
|
||||
func(userData, nu, NULL, bezt, 1, s[0], s[1]);
|
||||
view3d_project_short_clip(vc->ar, vc->v3d, bezt->vec[2], s, pmat, vmat);
|
||||
view3d_project_short_clip(vc->ar, bezt->vec[2], s, pmat, vmat);
|
||||
if (s[0] != IS_CLIPPED)
|
||||
func(userData, nu, NULL, bezt, 2, s[0], s[1]);
|
||||
}
|
||||
@ -1334,7 +1346,7 @@ void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb
|
||||
BPoint *bp = &nu->bp[i];
|
||||
|
||||
if(bp->hide==0) {
|
||||
view3d_project_short_clip(vc->ar, vc->v3d, bp->vec, s, pmat, vmat);
|
||||
view3d_project_short_clip(vc->ar, bp->vec, s, pmat, vmat);
|
||||
func(userData, nu, bp, NULL, -1, s[0], s[1]);
|
||||
}
|
||||
}
|
||||
@ -1759,7 +1771,7 @@ static void draw_em_fancy_edges(Scene *scene, View3D *v3d, DerivedMesh *cageDM,
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_em_measure_stats(View3D *v3d, Object *ob, EditMesh *em)
|
||||
static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, EditMesh *em)
|
||||
{
|
||||
EditEdge *eed;
|
||||
EditFace *efa;
|
||||
@ -1788,7 +1800,7 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, EditMesh *em)
|
||||
if(v3d->zbuf && (v3d->flag & V3D_ZBUF_SELECT)==0)
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
if(v3d->zbuf) bglPolygonOffset(v3d->dist, 5.0);
|
||||
if(v3d->zbuf) bglPolygonOffset(rv3d->dist, 5.0);
|
||||
|
||||
if(G.f & G_DRAW_EDGELEN) {
|
||||
UI_GetThemeColor3fv(TH_TEXT, col);
|
||||
@ -1923,7 +1935,7 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, EditMesh *em)
|
||||
|
||||
if(v3d->zbuf) {
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
bglPolygonOffset(v3d->dist, 0.0);
|
||||
bglPolygonOffset(rv3d->dist, 0.0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1946,7 +1958,7 @@ static int draw_em_fancy__setGLSLFaceOpts(void *userData, int index)
|
||||
return (efa->h==0);
|
||||
}
|
||||
|
||||
static void draw_em_fancy(Scene *scene, View3D *v3d, Object *ob, EditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, int dt)
|
||||
static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, EditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, int dt)
|
||||
{
|
||||
Mesh *me = ob->data;
|
||||
EditFace *efa_act = EM_get_actFace(em, 0); /* annoying but active faces is stored differently */
|
||||
@ -1979,7 +1991,7 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, Object *ob, EditMesh *em, D
|
||||
glFrontFace(GL_CCW);
|
||||
}
|
||||
else {
|
||||
draw_mesh_textured(scene, v3d, ob, finalDM, 0);
|
||||
draw_mesh_textured(scene, v3d, rv3d, ob, finalDM, 0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -1998,7 +2010,7 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, Object *ob, EditMesh *em, D
|
||||
// write to show selected edge wires better
|
||||
UI_ThemeColor(TH_WIRE);
|
||||
|
||||
bglPolygonOffset(v3d->dist, 1.0);
|
||||
bglPolygonOffset(rv3d->dist, 1.0);
|
||||
glDepthMask(0);
|
||||
}
|
||||
else {
|
||||
@ -2096,12 +2108,12 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, Object *ob, EditMesh *em, D
|
||||
}
|
||||
|
||||
if(G.f & (G_DRAW_EDGELEN|G_DRAW_FACEAREA|G_DRAW_EDGEANG))
|
||||
draw_em_measure_stats(v3d, ob, em);
|
||||
draw_em_measure_stats(v3d, rv3d, ob, em);
|
||||
}
|
||||
|
||||
if(dt>OB_WIRE) {
|
||||
glDepthMask(1);
|
||||
bglPolygonOffset(v3d->dist, 0.0);
|
||||
bglPolygonOffset(rv3d->dist, 0.0);
|
||||
GPU_disable_material();
|
||||
}
|
||||
|
||||
@ -2140,7 +2152,7 @@ static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmoot
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int flag)
|
||||
static void draw_mesh_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
Mesh *me = ob->data;
|
||||
@ -2200,7 +2212,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f
|
||||
glFrontFace(GL_CCW);
|
||||
}
|
||||
else {
|
||||
draw_mesh_textured(scene, v3d, ob, dm, faceselect);
|
||||
draw_mesh_textured(scene, v3d, rv3d, ob, dm, faceselect);
|
||||
}
|
||||
|
||||
if(!faceselect) {
|
||||
@ -2333,7 +2345,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f
|
||||
* otherwise this wire is to overlay solid mode faces so do some depth buffer tricks.
|
||||
*/
|
||||
if (dt!=OB_WIRE && draw_wire==2) {
|
||||
bglPolygonOffset(v3d->dist, 1.0);
|
||||
bglPolygonOffset(rv3d->dist, 1.0);
|
||||
glDepthMask(0); // disable write in zbuffer, selected edge wires show better
|
||||
}
|
||||
|
||||
@ -2341,7 +2353,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f
|
||||
|
||||
if (dt!=OB_WIRE && draw_wire==2) {
|
||||
glDepthMask(1);
|
||||
bglPolygonOffset(v3d->dist, 0.0);
|
||||
bglPolygonOffset(rv3d->dist, 0.0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2349,7 +2361,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f
|
||||
}
|
||||
|
||||
/* returns 1 if nothing was drawn, for detecting to draw an object center */
|
||||
static int draw_mesh_object(Scene *scene, View3D *v3d, Base *base, int dt, int flag)
|
||||
static int draw_mesh_object(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
Object *obedit= scene->obedit; // XXX hrumf, see below
|
||||
@ -2374,10 +2386,10 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, Base *base, int dt, int f
|
||||
if(dt>OB_WIRE) {
|
||||
// no transp in editmode, the fancy draw over goes bad then
|
||||
glsl = draw_glsl_material(scene, ob, v3d, dt);
|
||||
GPU_set_object_materials(v3d, scene, ob, glsl, NULL);
|
||||
GPU_set_object_materials(v3d, rv3d, scene, ob, glsl, NULL);
|
||||
}
|
||||
|
||||
draw_em_fancy(scene, v3d, ob, em, cageDM, finalDM, dt);
|
||||
draw_em_fancy(scene, v3d, rv3d, ob, em, cageDM, finalDM, dt);
|
||||
|
||||
if (obedit!=ob && finalDM)
|
||||
finalDM->release(finalDM);
|
||||
@ -2388,16 +2400,16 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, Base *base, int dt, int f
|
||||
// }
|
||||
else {
|
||||
/* don't create boundbox here with mesh_get_bb(), the derived system will make it, puts deformed bb's OK */
|
||||
if(me->totface<=4 || boundbox_clip(v3d, ob->obmat, (ob->bb)? ob->bb: me->bb)) {
|
||||
if(me->totface<=4 || boundbox_clip(rv3d, ob->obmat, (ob->bb)? ob->bb: me->bb)) {
|
||||
glsl = draw_glsl_material(scene, ob, v3d, dt);
|
||||
check_alpha = check_material_alpha(base, me, glsl);
|
||||
|
||||
if(dt==OB_SOLID || glsl) {
|
||||
GPU_set_object_materials(v3d, scene, ob, glsl,
|
||||
GPU_set_object_materials(v3d, rv3d, scene, ob, glsl,
|
||||
(check_alpha)? &do_alpha_pass: NULL);
|
||||
}
|
||||
|
||||
draw_mesh_fancy(scene, v3d, base, dt, flag);
|
||||
draw_mesh_fancy(scene, v3d, rv3d, base, dt, flag);
|
||||
|
||||
if(me->totvert==0) retval= 1;
|
||||
}
|
||||
@ -2677,7 +2689,7 @@ static void drawDispListshaded(ListBase *lb, Object *ob)
|
||||
}
|
||||
|
||||
/* returns 1 when nothing was drawn */
|
||||
static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
ListBase *lb=0;
|
||||
@ -2708,7 +2720,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
}
|
||||
else {
|
||||
if(draw_glsl_material(scene, ob, v3d, dt)) {
|
||||
GPU_set_object_materials(v3d, scene, ob, 1, NULL);
|
||||
GPU_set_object_materials(v3d, rv3d, scene, ob, 1, NULL);
|
||||
drawDispListsolid(lb, ob, 1);
|
||||
}
|
||||
else if(dt == OB_SHADED) {
|
||||
@ -2716,7 +2728,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
drawDispListshaded(lb, ob);
|
||||
}
|
||||
else {
|
||||
GPU_set_object_materials(v3d, scene, ob, 0, NULL);
|
||||
GPU_set_object_materials(v3d, rv3d, scene, ob, 0, NULL);
|
||||
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
|
||||
drawDispListsolid(lb, ob, 0);
|
||||
}
|
||||
@ -2746,7 +2758,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
if(dl->nors==NULL) addnormalsDispList(ob, lb);
|
||||
|
||||
if(draw_glsl_material(scene, ob, v3d, dt)) {
|
||||
GPU_set_object_materials(v3d, scene, ob, 1, NULL);
|
||||
GPU_set_object_materials(v3d, rv3d, scene, ob, 1, NULL);
|
||||
drawDispListsolid(lb, ob, 1);
|
||||
}
|
||||
else if(dt==OB_SHADED) {
|
||||
@ -2754,7 +2766,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
drawDispListshaded(lb, ob);
|
||||
}
|
||||
else {
|
||||
GPU_set_object_materials(v3d, scene, ob, 0, NULL);
|
||||
GPU_set_object_materials(v3d, rv3d, scene, ob, 0, NULL);
|
||||
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
|
||||
|
||||
drawDispListsolid(lb, ob, 0);
|
||||
@ -2774,7 +2786,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
if(solid) {
|
||||
|
||||
if(draw_glsl_material(scene, ob, v3d, dt)) {
|
||||
GPU_set_object_materials(v3d, scene, ob, 1, NULL);
|
||||
GPU_set_object_materials(v3d, rv3d, scene, ob, 1, NULL);
|
||||
drawDispListsolid(lb, ob, 1);
|
||||
}
|
||||
else if(dt == OB_SHADED) {
|
||||
@ -2783,7 +2795,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
drawDispListshaded(lb, ob);
|
||||
}
|
||||
else {
|
||||
GPU_set_object_materials(v3d, scene, ob, 0, NULL);
|
||||
GPU_set_object_materials(v3d, rv3d, scene, ob, 0, NULL);
|
||||
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
|
||||
|
||||
drawDispListsolid(lb, ob, 0);
|
||||
@ -2810,7 +2822,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
/* 5. start filling the arrays */
|
||||
/* 6. draw the arrays */
|
||||
/* 7. clean up */
|
||||
static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, ParticleSystem *psys, int dt)
|
||||
static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, ParticleSystem *psys, int dt)
|
||||
{
|
||||
Object *ob=base->object;
|
||||
ParticleSystemModifierData *psmd;
|
||||
@ -2899,7 +2911,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
|
||||
|
||||
timestep= psys_get_timestep(part);
|
||||
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
|
||||
if( (base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP) ) {
|
||||
float mat[4][4];
|
||||
@ -2935,15 +2947,15 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
|
||||
break;
|
||||
case PART_DRAW_CIRC:
|
||||
/* calculate view aligned matrix: */
|
||||
Mat4CpyMat4(imat, v3d->viewinv);
|
||||
Mat4CpyMat4(imat, rv3d->viewinv);
|
||||
Normalize(imat[0]);
|
||||
Normalize(imat[1]);
|
||||
/* no break! */
|
||||
case PART_DRAW_CROSS:
|
||||
case PART_DRAW_AXIS:
|
||||
/* lets calculate the scale: */
|
||||
pixsize= v3d->persmat[0][3]*ob->obmat[3][0]+ v3d->persmat[1][3]*ob->obmat[3][1]+ v3d->persmat[2][3]*ob->obmat[3][2]+ v3d->persmat[3][3];
|
||||
pixsize*= v3d->pixsize;
|
||||
pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3];
|
||||
pixsize*= rv3d->pixsize;
|
||||
if(part->draw_size==0.0)
|
||||
pixsize*=2.0;
|
||||
else
|
||||
@ -2984,7 +2996,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
|
||||
break;
|
||||
}
|
||||
if(part->draw & PART_DRAW_SIZE && part->draw_as!=PART_DRAW_CIRC){
|
||||
Mat4CpyMat4(imat, v3d->viewinv);
|
||||
Mat4CpyMat4(imat, rv3d->viewinv);
|
||||
Normalize(imat[0]);
|
||||
Normalize(imat[1]);
|
||||
}
|
||||
@ -3486,11 +3498,11 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
|
||||
psys->lattice= NULL;
|
||||
}
|
||||
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
wmMultMatrix(ob->obmat); // bring back local matrix for dtx
|
||||
}
|
||||
|
||||
static void draw_particle_edit(Scene *scene, View3D *v3d, Object *ob, ParticleSystem *psys, int dt)
|
||||
static void draw_particle_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, ParticleSystem *psys, int dt)
|
||||
{
|
||||
ParticleEdit *edit = psys->edit;
|
||||
ParticleData *pa;
|
||||
@ -3522,7 +3534,7 @@ static void draw_particle_edit(Scene *scene, View3D *v3d, Object *ob, ParticleSy
|
||||
if((v3d->flag & V3D_ZBUF_SELECT)==0)
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
|
||||
/* get selection theme colors */
|
||||
UI_GetThemeColor3ubv(TH_VERTEX_SELECT, sel);
|
||||
@ -3878,7 +3890,7 @@ static void draw_editnurb(Object *ob, Nurb *nurb, int sel)
|
||||
}
|
||||
}
|
||||
|
||||
static void drawnurb(Scene *scene, View3D *v3d, Base *base, Nurb *nurb, int dt)
|
||||
static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, Nurb *nurb, int dt)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
Curve *cu = ob->data;
|
||||
@ -3889,7 +3901,7 @@ static void drawnurb(Scene *scene, View3D *v3d, Base *base, Nurb *nurb, int dt)
|
||||
|
||||
/* DispList */
|
||||
UI_ThemeColor(TH_WIRE);
|
||||
drawDispList(scene, v3d, base, dt);
|
||||
drawDispList(scene, v3d, rv3d, base, dt);
|
||||
|
||||
if(v3d->zbuf) glDisable(GL_DEPTH_TEST);
|
||||
|
||||
@ -4171,7 +4183,7 @@ static void drawcone(float *vec, float radius, float height, float tmat[][4])
|
||||
glEnd();
|
||||
}
|
||||
/* return 1 if nothing was drawn */
|
||||
static int drawmball(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
static int drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
MetaBall *mb;
|
||||
@ -4183,12 +4195,12 @@ static int drawmball(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
|
||||
if(mb->editelems) {
|
||||
UI_ThemeColor(TH_WIRE);
|
||||
if((G.f & G_PICKSEL)==0 ) drawDispList(scene, v3d, base, dt);
|
||||
if((G.f & G_PICKSEL)==0 ) drawDispList(scene, v3d, rv3d, base, dt);
|
||||
ml= mb->editelems->first;
|
||||
}
|
||||
else {
|
||||
if((base->flag & OB_FROMDUPLI)==0)
|
||||
drawDispList(scene, v3d, base, dt);
|
||||
drawDispList(scene, v3d, rv3d, base, dt);
|
||||
ml= mb->elems.first;
|
||||
}
|
||||
|
||||
@ -4553,7 +4565,7 @@ static void drawtexspace(Object *ob)
|
||||
}
|
||||
|
||||
/* draws wire outline */
|
||||
static void drawSolidSelect(Scene *scene, View3D *v3d, Base *base)
|
||||
static void drawSolidSelect(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
|
||||
@ -4562,7 +4574,7 @@ static void drawSolidSelect(Scene *scene, View3D *v3d, Base *base)
|
||||
|
||||
if(ELEM3(ob->type, OB_FONT,OB_CURVE, OB_SURF)) {
|
||||
Curve *cu = ob->data;
|
||||
if (displist_has_faces(&cu->disp) && boundbox_clip(v3d, ob->obmat, cu->bb)) {
|
||||
if (displist_has_faces(&cu->disp) && boundbox_clip(rv3d, ob->obmat, cu->bb)) {
|
||||
draw_index_wire= 0;
|
||||
drawDispListwire(&cu->disp);
|
||||
draw_index_wire= 1;
|
||||
@ -4573,14 +4585,14 @@ static void drawSolidSelect(Scene *scene, View3D *v3d, Base *base)
|
||||
}
|
||||
else if(ob->type==OB_ARMATURE) {
|
||||
if(!(ob->flag & OB_POSEMODE))
|
||||
draw_armature(scene, v3d, base, OB_WIRE, 0);
|
||||
draw_armature(scene, v3d, rv3d, base, OB_WIRE, 0);
|
||||
}
|
||||
|
||||
glLineWidth(1.0);
|
||||
glDepthMask(1);
|
||||
}
|
||||
|
||||
static void drawWireExtra(Scene *scene, View3D *v3d, Object *ob)
|
||||
static void drawWireExtra(Scene *scene, RegionView3D *rv3d, Object *ob)
|
||||
{
|
||||
// XXX scene->obedit warning
|
||||
if(ob!=scene->obedit && (ob->flag & SELECT)) {
|
||||
@ -4605,12 +4617,12 @@ static void drawWireExtra(Scene *scene, View3D *v3d, Object *ob)
|
||||
}
|
||||
}
|
||||
|
||||
bglPolygonOffset(v3d->dist, 1.0);
|
||||
bglPolygonOffset(rv3d->dist, 1.0);
|
||||
glDepthMask(0); // disable write in zbuffer, selected edge wires show better
|
||||
|
||||
if (ELEM3(ob->type, OB_FONT, OB_CURVE, OB_SURF)) {
|
||||
Curve *cu = ob->data;
|
||||
if (boundbox_clip(v3d, ob->obmat, cu->bb)) {
|
||||
if (boundbox_clip(rv3d, ob->obmat, cu->bb)) {
|
||||
if (ob->type==OB_CURVE)
|
||||
draw_index_wire= 0;
|
||||
drawDispListwire(&cu->disp);
|
||||
@ -4622,7 +4634,7 @@ static void drawWireExtra(Scene *scene, View3D *v3d, Object *ob)
|
||||
}
|
||||
|
||||
glDepthMask(1);
|
||||
bglPolygonOffset(v3d->dist, 0.0);
|
||||
bglPolygonOffset(rv3d->dist, 0.0);
|
||||
}
|
||||
|
||||
/* should be called in view space */
|
||||
@ -4701,6 +4713,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
static int warning_recursive= 0;
|
||||
Object *ob;
|
||||
Curve *cu;
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
//float cfraont;
|
||||
float vec1[3], vec2[3];
|
||||
unsigned int col=0;
|
||||
@ -4814,7 +4827,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
|
||||
/* which wire color */
|
||||
if((flag & DRAW_CONSTCOLOR) == 0) {
|
||||
project_short(ar, v3d, ob->obmat[3], &base->sx);
|
||||
project_short(ar, ob->obmat[3], &base->sx);
|
||||
|
||||
if((G.moving & G_TRANSFORM_OBJ) && (base->flag & (SELECT+BA_WAS_SEL))) UI_ThemeColor(TH_TRANSFORM);
|
||||
else {
|
||||
@ -4903,7 +4916,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
if((v3d->flag & V3D_SELECT_OUTLINE) && ob->type!=OB_MESH) {
|
||||
if(dt>OB_WIRE && dt<OB_TEXTURE && ob!=scene->obedit && (flag && DRAW_SCENESET)==0) {
|
||||
if (!(ob->dtx&OB_DRAWWIRE) && (ob->flag&SELECT) && !(flag&DRAW_PICKING)) {
|
||||
drawSolidSelect(scene, v3d, base);
|
||||
drawSolidSelect(scene, v3d, rv3d, base);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4911,7 +4924,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
switch( ob->type) {
|
||||
case OB_MESH:
|
||||
if (!(base->flag&OB_RADIO)) {
|
||||
empty_object= draw_mesh_object(scene, v3d, base, dt, flag);
|
||||
empty_object= draw_mesh_object(scene, v3d, rv3d, base, dt, flag);
|
||||
if(flag!=DRAW_CONSTCOLOR) dtx &= ~OB_DRAWWIRE; // mesh draws wire itself
|
||||
}
|
||||
|
||||
@ -4925,10 +4938,10 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
if (cu->flag & CU_FAST) {
|
||||
cpack(0xFFFFFF);
|
||||
set_inverted_drawing(1);
|
||||
drawDispList(scene, v3d, base, OB_WIRE);
|
||||
drawDispList(scene, v3d, rv3d, base, OB_WIRE);
|
||||
set_inverted_drawing(0);
|
||||
} else {
|
||||
drawDispList(scene, v3d, base, dt);
|
||||
drawDispList(scene, v3d, rv3d, base, dt);
|
||||
}
|
||||
|
||||
if (cu->linewidth != 0.0) {
|
||||
@ -5003,8 +5016,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
}
|
||||
else if(dt==OB_BOUNDBOX)
|
||||
draw_bounding_volume(scene, ob);
|
||||
else if(boundbox_clip(v3d, ob->obmat, cu->bb))
|
||||
empty_object= drawDispList(scene, v3d, base, dt);
|
||||
else if(boundbox_clip(rv3d, ob->obmat, cu->bb))
|
||||
empty_object= drawDispList(scene, v3d, rv3d, base, dt);
|
||||
|
||||
break;
|
||||
case OB_CURVE:
|
||||
@ -5014,12 +5027,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
if (cu->disp.first==NULL) makeDispListCurveTypes(scene, ob, 0);
|
||||
|
||||
if(cu->editnurb) {
|
||||
drawnurb(scene, v3d, base, cu->editnurb->first, dt);
|
||||
drawnurb(scene, v3d, rv3d, base, cu->editnurb->first, dt);
|
||||
}
|
||||
else if(dt==OB_BOUNDBOX)
|
||||
draw_bounding_volume(scene, ob);
|
||||
else if(boundbox_clip(v3d, ob->obmat, cu->bb)) {
|
||||
empty_object= drawDispList(scene, v3d, base, dt);
|
||||
else if(boundbox_clip(rv3d, ob->obmat, cu->bb)) {
|
||||
empty_object= drawDispList(scene, v3d, rv3d, base, dt);
|
||||
|
||||
if(cu->path)
|
||||
curve_draw_speed(scene, ob);
|
||||
@ -5030,29 +5043,29 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
MetaBall *mb= ob->data;
|
||||
|
||||
if(mb->editelems)
|
||||
drawmball(scene, v3d, base, dt);
|
||||
drawmball(scene, v3d, rv3d, base, dt);
|
||||
else if(dt==OB_BOUNDBOX)
|
||||
draw_bounding_volume(scene, ob);
|
||||
else
|
||||
empty_object= drawmball(scene, v3d, base, dt);
|
||||
empty_object= drawmball(scene, v3d, rv3d, base, dt);
|
||||
break;
|
||||
}
|
||||
case OB_EMPTY:
|
||||
drawaxes(ob->empty_drawsize, flag, ob->empty_drawtype);
|
||||
break;
|
||||
case OB_LAMP:
|
||||
drawlamp(scene, v3d, ob);
|
||||
drawlamp(scene, v3d, rv3d, ob);
|
||||
if(dtx || (base->flag & SELECT)) wmMultMatrix(ob->obmat);
|
||||
break;
|
||||
case OB_CAMERA:
|
||||
drawcamera(scene, v3d, ob, flag);
|
||||
drawcamera(scene, v3d, rv3d, ob, flag);
|
||||
break;
|
||||
case OB_LATTICE:
|
||||
drawlattice(scene, v3d, ob);
|
||||
break;
|
||||
case OB_ARMATURE:
|
||||
if(dt>OB_WIRE) GPU_enable_material(0, NULL); // we use default material
|
||||
empty_object= draw_armature(scene, v3d, base, dt, flag);
|
||||
empty_object= draw_armature(scene, v3d, rv3d, base, dt, flag);
|
||||
if(dt>OB_WIRE) GPU_disable_material();
|
||||
break;
|
||||
default:
|
||||
@ -5071,12 +5084,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
glDepthMask(GL_FALSE);
|
||||
|
||||
for(psys=ob->particlesystem.first; psys; psys=psys->next)
|
||||
draw_new_particle_system(scene, v3d, base, psys, dt);
|
||||
draw_new_particle_system(scene, v3d, rv3d, base, psys, dt);
|
||||
|
||||
if(G.f & G_PARTICLEEDIT && ob==OBACT) {
|
||||
psys= NULL; // XXX PE_get_current(ob);
|
||||
if(psys && !scene->obedit && psys_in_edit_mode(scene, psys))
|
||||
draw_particle_edit(scene, v3d, ob, psys, dt);
|
||||
draw_particle_edit(scene, v3d, rv3d, ob, psys, dt);
|
||||
}
|
||||
glDepthMask(GL_TRUE);
|
||||
if(col) cpack(col);
|
||||
@ -5115,7 +5128,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
}
|
||||
}
|
||||
/*if(dtx & OB_DRAWIMAGE) drawDispListwire(&ob->disp);*/
|
||||
if((dtx & OB_DRAWWIRE) && dt>=OB_SOLID) drawWireExtra(scene, v3d, ob);
|
||||
if((dtx & OB_DRAWWIRE) && dt>=OB_SOLID) drawWireExtra(scene, rv3d, ob);
|
||||
}
|
||||
|
||||
if(dt<OB_SHADED) {
|
||||
@ -5133,7 +5146,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
}
|
||||
}
|
||||
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
|
||||
if(zbufoff) glDisable(GL_DEPTH_TEST);
|
||||
|
||||
@ -5161,7 +5174,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
}
|
||||
else if((flag & DRAW_CONSTCOLOR)==0) {
|
||||
/* we don't draw centers for duplicators and sets */
|
||||
drawcentercircle(v3d, ob->obmat[3], do_draw_center, ob->id.lib || ob->id.us>1);
|
||||
drawcentercircle(v3d, rv3d, ob->obmat[3], do_draw_center, ob->id.lib || ob->id.us>1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5231,41 +5244,6 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
free_old_images();
|
||||
}
|
||||
|
||||
void draw_object_ext(ARegion *ar, View3D *v3d, Scene *scene, Base *base)
|
||||
{
|
||||
|
||||
if(v3d==NULL || base==NULL) return;
|
||||
|
||||
if(v3d->drawtype > OB_WIRE) {
|
||||
v3d->zbuf= 1;
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
G.f |= G_DRAW_EXT;
|
||||
|
||||
glDrawBuffer(GL_FRONT);
|
||||
// XXX persp(PERSP_VIEW);
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
view3d_set_clipping(v3d);
|
||||
|
||||
draw_object(scene, ar, v3d, base, 0);
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
view3d_clr_clipping();
|
||||
|
||||
G.f &= ~G_DRAW_EXT;
|
||||
|
||||
bglFlush(); /* reveil frontbuffer drawing */
|
||||
glDrawBuffer(GL_BACK);
|
||||
|
||||
if(v3d->zbuf) {
|
||||
v3d->zbuf= 0;
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
}
|
||||
// XXX ar->win_swap= WIN_FRONT_OK;
|
||||
}
|
||||
|
||||
/* ***************** BACKBUF SEL (BBS) ********* */
|
||||
|
||||
static void bbs_mesh_verts__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s)
|
||||
@ -5372,7 +5350,7 @@ static void bbs_mesh_solid(Scene *scene, View3D *v3d, Object *ob)
|
||||
dm->release(dm);
|
||||
}
|
||||
|
||||
void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
|
||||
void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob)
|
||||
{
|
||||
|
||||
wmMultMatrix(ob->obmat);
|
||||
@ -5396,7 +5374,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
|
||||
else
|
||||
em_solidoffs= 1;
|
||||
|
||||
bglPolygonOffset(v3d->dist, 1.0);
|
||||
bglPolygonOffset(rv3d->dist, 1.0);
|
||||
|
||||
// we draw edges always, for loop (select) tools
|
||||
bbs_mesh_wire(dm, em_solidoffs);
|
||||
@ -5409,7 +5387,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
|
||||
}
|
||||
else em_vertoffs= em_wireoffs;
|
||||
|
||||
bglPolygonOffset(v3d->dist, 0.0);
|
||||
bglPolygonOffset(rv3d->dist, 0.0);
|
||||
|
||||
dm->release(dm);
|
||||
|
||||
@ -5423,7 +5401,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
|
||||
break;
|
||||
}
|
||||
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
}
|
||||
|
||||
|
||||
@ -5431,7 +5409,8 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
|
||||
/* assumes all matrices/etc set OK */
|
||||
|
||||
/* helper function for drawing object instances - meshes */
|
||||
static void draw_object_mesh_instance(Scene *scene, View3D *v3d, Object *ob, int dt, int outline)
|
||||
static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d,
|
||||
Object *ob, int dt, int outline)
|
||||
{
|
||||
Mesh *me= ob->data;
|
||||
DerivedMesh *dm=NULL, *edm=NULL;
|
||||
@ -5454,7 +5433,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, Object *ob, int
|
||||
|
||||
if(dm) {
|
||||
glsl = draw_glsl_material(scene, ob, v3d, dt);
|
||||
GPU_set_object_materials(v3d, scene, ob, glsl, NULL);
|
||||
GPU_set_object_materials(v3d, rv3d, scene, ob, glsl, NULL);
|
||||
}
|
||||
else {
|
||||
glEnable(GL_COLOR_MATERIAL);
|
||||
@ -5480,14 +5459,14 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, Object *ob, int
|
||||
if(dm) dm->release(dm);
|
||||
}
|
||||
|
||||
void draw_object_instance(Scene *scene, View3D *v3d, Object *ob, int dt, int outline)
|
||||
void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int dt, int outline)
|
||||
{
|
||||
if (ob == NULL)
|
||||
return;
|
||||
|
||||
switch (ob->type) {
|
||||
case OB_MESH:
|
||||
draw_object_mesh_instance(scene, v3d, ob, dt, outline);
|
||||
draw_object_mesh_instance(scene, v3d, rv3d, ob, dt, outline);
|
||||
break;
|
||||
case OB_EMPTY:
|
||||
drawaxes(ob->empty_drawsize, 0, ob->empty_drawtype);
|
||||
|
@ -66,53 +66,54 @@ static SpaceLink *view3d_new(const bContext *C)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
ARegion *ar;
|
||||
View3D *vd;
|
||||
View3D *v3d;
|
||||
RegionView3D *rv3d;
|
||||
|
||||
vd= MEM_callocN(sizeof(View3D), "initview3d");
|
||||
vd->spacetype= SPACE_VIEW3D;
|
||||
vd->blockscale= 0.7f;
|
||||
vd->lay= vd->layact= 1;
|
||||
v3d= MEM_callocN(sizeof(View3D), "initview3d");
|
||||
v3d->spacetype= SPACE_VIEW3D;
|
||||
v3d->blockscale= 0.7f;
|
||||
v3d->lay= v3d->layact= 1;
|
||||
if(scene) {
|
||||
vd->lay= vd->layact= scene->lay;
|
||||
vd->camera= scene->camera;
|
||||
v3d->lay= v3d->layact= scene->lay;
|
||||
v3d->camera= scene->camera;
|
||||
}
|
||||
vd->scenelock= 1;
|
||||
vd->grid= 1.0f;
|
||||
vd->gridlines= 16;
|
||||
vd->gridsubdiv = 10;
|
||||
vd->drawtype= OB_WIRE;
|
||||
v3d->scenelock= 1;
|
||||
v3d->grid= 1.0f;
|
||||
v3d->gridlines= 16;
|
||||
v3d->gridsubdiv = 10;
|
||||
v3d->drawtype= OB_WIRE;
|
||||
|
||||
vd->gridflag |= V3D_SHOW_X;
|
||||
vd->gridflag |= V3D_SHOW_Y;
|
||||
vd->gridflag |= V3D_SHOW_FLOOR;
|
||||
vd->gridflag &= ~V3D_SHOW_Z;
|
||||
v3d->gridflag |= V3D_SHOW_X;
|
||||
v3d->gridflag |= V3D_SHOW_Y;
|
||||
v3d->gridflag |= V3D_SHOW_FLOOR;
|
||||
v3d->gridflag &= ~V3D_SHOW_Z;
|
||||
|
||||
vd->depths= NULL;
|
||||
|
||||
/* XXX move view data to region? */
|
||||
vd->viewquat[0]= 1.0f;
|
||||
vd->viewquat[1]= vd->viewquat[2]= vd->viewquat[3]= 0.0f;
|
||||
vd->persp= 1;
|
||||
vd->view= 7;
|
||||
vd->dist= 10.0;
|
||||
vd->lens= 35.0f;
|
||||
vd->near= 0.01f;
|
||||
vd->far= 500.0f;
|
||||
v3d->lens= 35.0f;
|
||||
v3d->near= 0.01f;
|
||||
v3d->far= 500.0f;
|
||||
|
||||
/* header */
|
||||
ar= MEM_callocN(sizeof(ARegion), "header for view3d");
|
||||
|
||||
BLI_addtail(&vd->regionbase, ar);
|
||||
BLI_addtail(&v3d->regionbase, ar);
|
||||
ar->regiontype= RGN_TYPE_HEADER;
|
||||
ar->alignment= RGN_ALIGN_BOTTOM;
|
||||
|
||||
/* main area */
|
||||
ar= MEM_callocN(sizeof(ARegion), "main area for view3d");
|
||||
|
||||
BLI_addtail(&vd->regionbase, ar);
|
||||
BLI_addtail(&v3d->regionbase, ar);
|
||||
ar->regiontype= RGN_TYPE_WINDOW;
|
||||
|
||||
return (SpaceLink *)vd;
|
||||
ar->regiondata= MEM_callocN(sizeof(RegionView3D), "region view3d");
|
||||
rv3d= ar->regiondata;
|
||||
rv3d->viewquat[0]= 1.0f;
|
||||
rv3d->persp= 1;
|
||||
rv3d->view= 7;
|
||||
rv3d->dist= 10.0;
|
||||
Mat4One(rv3d->twmat);
|
||||
|
||||
return (SpaceLink *)v3d;
|
||||
}
|
||||
|
||||
/* not spacelink itself */
|
||||
@ -126,19 +127,8 @@ static void view3d_free(SpaceLink *sl)
|
||||
}
|
||||
|
||||
if(vd->localvd) MEM_freeN(vd->localvd);
|
||||
if(vd->clipbb) MEM_freeN(vd->clipbb);
|
||||
if(vd->depths) {
|
||||
if(vd->depths->depths) MEM_freeN(vd->depths->depths);
|
||||
MEM_freeN(vd->depths);
|
||||
vd->depths= NULL;
|
||||
}
|
||||
|
||||
// XXX retopo_free_view_data(vd);
|
||||
|
||||
if(vd->properties_storage) MEM_freeN(vd->properties_storage);
|
||||
if(vd->ri) {
|
||||
// XXX BIF_view3d_previewrender_free(vd);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -157,8 +147,6 @@ static SpaceLink *view3d_duplicate(SpaceLink *sl)
|
||||
/* clear or remove stuff from old */
|
||||
|
||||
// XXX BIF_view3d_previewrender_free(v3do);
|
||||
v3do->depths= NULL;
|
||||
v3do->retopo_view_data= NULL;
|
||||
|
||||
if(v3do->localvd) {
|
||||
// XXX restore_localviewdata(v3do);
|
||||
@ -174,8 +162,6 @@ static SpaceLink *view3d_duplicate(SpaceLink *sl)
|
||||
v3dn->bgpic= MEM_dupallocN(v3dn->bgpic);
|
||||
if(v3dn->bgpic->ima) v3dn->bgpic->ima->id.us++;
|
||||
}
|
||||
v3dn->clipbb= MEM_dupallocN(v3dn->clipbb);
|
||||
v3dn->ri= NULL;
|
||||
v3dn->properties_storage= NULL;
|
||||
|
||||
return (SpaceLink *)v3dn;
|
||||
@ -200,6 +186,54 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar)
|
||||
|
||||
}
|
||||
|
||||
/* type callback, not region itself */
|
||||
static void view3d_main_area_free(ARegion *ar)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
|
||||
if(rv3d) {
|
||||
if(rv3d->localvd) MEM_freeN(rv3d->localvd);
|
||||
if(rv3d->clipbb) MEM_freeN(rv3d->clipbb);
|
||||
|
||||
// XXX retopo_free_view_data(rv3d);
|
||||
if(rv3d->ri) {
|
||||
// XXX BIF_view3d_previewrender_free(rv3d);
|
||||
}
|
||||
|
||||
if(rv3d->depths) {
|
||||
if(rv3d->depths->depths) MEM_freeN(rv3d->depths->depths);
|
||||
MEM_freeN(rv3d->depths);
|
||||
}
|
||||
MEM_freeN(rv3d);
|
||||
ar->regiondata= NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* copy regiondata */
|
||||
static void *view3d_main_area_duplicate(void *poin)
|
||||
{
|
||||
if(poin) {
|
||||
RegionView3D *rv3d= poin, *new;
|
||||
|
||||
new= MEM_dupallocN(rv3d);
|
||||
if(rv3d->localvd)
|
||||
new->localvd= MEM_dupallocN(rv3d->localvd);
|
||||
if(rv3d->clipbb)
|
||||
new->clipbb= MEM_dupallocN(rv3d->clipbb);
|
||||
|
||||
new->depths= NULL;
|
||||
new->retopo_view_data= NULL;
|
||||
new->ri= NULL;
|
||||
new->gpd= NULL;
|
||||
new->sms= NULL;
|
||||
new->smooth_timer= NULL;
|
||||
|
||||
return new;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static void view3d_modal_keymaps(wmWindowManager *wm, ARegion *ar, int stype)
|
||||
{
|
||||
ListBase *keymap;
|
||||
@ -422,6 +456,8 @@ void ED_spacetype_view3d(void)
|
||||
art->regionid = RGN_TYPE_WINDOW;
|
||||
art->draw= view3d_main_area_draw;
|
||||
art->init= view3d_main_area_init;
|
||||
art->free= view3d_main_area_free;
|
||||
art->duplicate= view3d_main_area_duplicate;
|
||||
art->listener= view3d_main_area_listener;
|
||||
art->cursor= view3d_main_area_cursor;
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
@ -145,9 +145,9 @@ void circ(float x, float y, float rad)
|
||||
|
||||
/* ********* custom clipping *********** */
|
||||
|
||||
static void view3d_draw_clipping(View3D *v3d)
|
||||
static void view3d_draw_clipping(RegionView3D *rv3d)
|
||||
{
|
||||
BoundBox *bb= v3d->clipbb;
|
||||
BoundBox *bb= rv3d->clipbb;
|
||||
|
||||
UI_ThemeColorShade(TH_BACK, -8);
|
||||
|
||||
@ -163,13 +163,13 @@ static void view3d_draw_clipping(View3D *v3d)
|
||||
glEnd();
|
||||
}
|
||||
|
||||
void view3d_set_clipping(View3D *v3d)
|
||||
void view3d_set_clipping(RegionView3D *rv3d)
|
||||
{
|
||||
double plane[4];
|
||||
int a;
|
||||
|
||||
for(a=0; a<4; a++) {
|
||||
QUATCOPY(plane, v3d->clip[a]);
|
||||
QUATCOPY(plane, rv3d->clip[a]);
|
||||
glClipPlane(GL_CLIP_PLANE0+a, plane);
|
||||
glEnable(GL_CLIP_PLANE0+a);
|
||||
}
|
||||
@ -184,17 +184,17 @@ void view3d_clr_clipping(void)
|
||||
}
|
||||
}
|
||||
|
||||
int view3d_test_clipping(View3D *v3d, float *vec)
|
||||
int view3d_test_clipping(RegionView3D *rv3d, float *vec)
|
||||
{
|
||||
/* vec in world coordinates, returns 1 if clipped */
|
||||
float view[3];
|
||||
|
||||
VECCOPY(view, vec);
|
||||
|
||||
if(0.0f < v3d->clip[0][3] + INPR(view, v3d->clip[0]))
|
||||
if(0.0f < v3d->clip[1][3] + INPR(view, v3d->clip[1]))
|
||||
if(0.0f < v3d->clip[2][3] + INPR(view, v3d->clip[2]))
|
||||
if(0.0f < v3d->clip[3][3] + INPR(view, v3d->clip[3]))
|
||||
if(0.0f < rv3d->clip[0][3] + INPR(view, rv3d->clip[0]))
|
||||
if(0.0f < rv3d->clip[1][3] + INPR(view, rv3d->clip[1]))
|
||||
if(0.0f < rv3d->clip[2][3] + INPR(view, rv3d->clip[2]))
|
||||
if(0.0f < rv3d->clip[3][3] + INPR(view, rv3d->clip[3]))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
@ -252,6 +252,7 @@ void make_axis_color(char *col, char *col2, char axis)
|
||||
static void drawgrid(ARegion *ar, View3D *v3d)
|
||||
{
|
||||
/* extern short bgpicmode; */
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float wx, wy, x, y, fw, fx, fy, dx;
|
||||
float vec4[4];
|
||||
char col[3], col2[3];
|
||||
@ -259,7 +260,7 @@ static void drawgrid(ARegion *ar, View3D *v3d)
|
||||
|
||||
vec4[0]=vec4[1]=vec4[2]=0.0;
|
||||
vec4[3]= 1.0;
|
||||
Mat4MulVec4fl(v3d->persmat, vec4);
|
||||
Mat4MulVec4fl(rv3d->persmat, vec4);
|
||||
fx= vec4[0];
|
||||
fy= vec4[1];
|
||||
fw= vec4[3];
|
||||
@ -273,7 +274,7 @@ static void drawgrid(ARegion *ar, View3D *v3d)
|
||||
vec4[0]=vec4[1]=v3d->grid;
|
||||
vec4[2]= 0.0;
|
||||
vec4[3]= 1.0;
|
||||
Mat4MulVec4fl(v3d->persmat, vec4);
|
||||
Mat4MulVec4fl(rv3d->persmat, vec4);
|
||||
fx= vec4[0];
|
||||
fy= vec4[1];
|
||||
fw= vec4[3];
|
||||
@ -359,13 +360,13 @@ static void drawgrid(ARegion *ar, View3D *v3d)
|
||||
setlinestyle(0);
|
||||
|
||||
/* center cross */
|
||||
if(v3d->view==3) make_axis_color(col, col2, 'y');
|
||||
if(rv3d->view==3) make_axis_color(col, col2, 'y');
|
||||
else make_axis_color(col, col2, 'x');
|
||||
glColor3ubv((GLubyte *)col2);
|
||||
|
||||
fdrawline(0.0, y, (float)ar->winx, y);
|
||||
|
||||
if(v3d->view==7) make_axis_color(col, col2, 'y');
|
||||
if(rv3d->view==7) make_axis_color(col, col2, 'y');
|
||||
else make_axis_color(col, col2, 'z');
|
||||
glColor3ubv((GLubyte *)col2);
|
||||
|
||||
@ -506,7 +507,7 @@ static void drawcursor(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
/* we dont want the clipping for cursor */
|
||||
flag= v3d->flag;
|
||||
v3d->flag= 0;
|
||||
project_short(ar, v3d, give_cursor(scene, v3d), co);
|
||||
project_short(ar, give_cursor(scene, v3d), co);
|
||||
v3d->flag= flag;
|
||||
|
||||
mx = co[0];
|
||||
@ -530,7 +531,7 @@ static void drawcursor(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
}
|
||||
|
||||
/* Draw a live substitute of the view icon, which is always shown */
|
||||
static void draw_view_axis(View3D *v3d)
|
||||
static void draw_view_axis(RegionView3D *rv3d)
|
||||
{
|
||||
const float k = U.rvisize; /* axis size */
|
||||
const float toll = 0.5; /* used to see when view is quasi-orthogonal */
|
||||
@ -558,7 +559,7 @@ static void draw_view_axis(View3D *v3d)
|
||||
/* X */
|
||||
vec[0] = vec[3] = 1;
|
||||
vec[1] = vec[2] = 0;
|
||||
QuatMulVecf(v3d->viewquat, vec);
|
||||
QuatMulVecf(rv3d->viewquat, vec);
|
||||
|
||||
make_axis_color((char *)gridcol, (char *)col, 'x');
|
||||
rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v);
|
||||
@ -579,7 +580,7 @@ static void draw_view_axis(View3D *v3d)
|
||||
/* Y */
|
||||
vec[1] = vec[3] = 1;
|
||||
vec[0] = vec[2] = 0;
|
||||
QuatMulVecf(v3d->viewquat, vec);
|
||||
QuatMulVecf(rv3d->viewquat, vec);
|
||||
|
||||
make_axis_color((char *)gridcol, (char *)col, 'y');
|
||||
rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v);
|
||||
@ -600,7 +601,7 @@ static void draw_view_axis(View3D *v3d)
|
||||
/* Z */
|
||||
vec[2] = vec[3] = 1;
|
||||
vec[1] = vec[0] = 0;
|
||||
QuatMulVecf(v3d->viewquat, vec);
|
||||
QuatMulVecf(rv3d->viewquat, vec);
|
||||
|
||||
make_axis_color((char *)gridcol, (char *)col, 'z');
|
||||
rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v);
|
||||
@ -623,13 +624,13 @@ static void draw_view_axis(View3D *v3d)
|
||||
}
|
||||
|
||||
|
||||
static void draw_view_icon(View3D *v3d)
|
||||
static void draw_view_icon(RegionView3D *rv3d)
|
||||
{
|
||||
BIFIconID icon;
|
||||
|
||||
if(v3d->view==7) icon= ICON_AXIS_TOP;
|
||||
else if(v3d->view==1) icon= ICON_AXIS_FRONT;
|
||||
else if(v3d->view==3) icon= ICON_AXIS_SIDE;
|
||||
if(rv3d->view==7) icon= ICON_AXIS_TOP;
|
||||
else if(rv3d->view==1) icon= ICON_AXIS_FRONT;
|
||||
else if(rv3d->view==3) icon= ICON_AXIS_SIDE;
|
||||
else return ;
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
@ -640,31 +641,31 @@ static void draw_view_icon(View3D *v3d)
|
||||
glDisable(GL_BLEND);
|
||||
}
|
||||
|
||||
char *view3d_get_name(View3D *v3d)
|
||||
static char *view3d_get_name(View3D *v3d, RegionView3D *rv3d)
|
||||
{
|
||||
char *name = NULL;
|
||||
|
||||
switch (v3d->view) {
|
||||
switch (rv3d->view) {
|
||||
case 1:
|
||||
if (v3d->persp == V3D_ORTHO)
|
||||
name = (v3d->flag2 & V3D_OPP_DIRECTION_NAME) ? "Back Ortho" : "Front Ortho";
|
||||
if (rv3d->persp == V3D_ORTHO)
|
||||
name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Back Ortho" : "Front Ortho";
|
||||
else
|
||||
name = (v3d->flag2 & V3D_OPP_DIRECTION_NAME) ? "Back Persp" : "Front Persp";
|
||||
name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Back Persp" : "Front Persp";
|
||||
break;
|
||||
case 3:
|
||||
if (v3d->persp == V3D_ORTHO)
|
||||
name = (v3d->flag2 & V3D_OPP_DIRECTION_NAME) ? "Left Ortho" : "Right Ortho";
|
||||
if (rv3d->persp == V3D_ORTHO)
|
||||
name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Left Ortho" : "Right Ortho";
|
||||
else
|
||||
name = (v3d->flag2 & V3D_OPP_DIRECTION_NAME) ? "Left Persp" : "Right Persp";
|
||||
name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Left Persp" : "Right Persp";
|
||||
break;
|
||||
case 7:
|
||||
if (v3d->persp == V3D_ORTHO)
|
||||
name = (v3d->flag2 & V3D_OPP_DIRECTION_NAME) ? "Bottom Ortho" : "Top Ortho";
|
||||
if (rv3d->persp == V3D_ORTHO)
|
||||
name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Bottom Ortho" : "Top Ortho";
|
||||
else
|
||||
name = (v3d->flag2 & V3D_OPP_DIRECTION_NAME) ? "Bottom Persp" : "Top Persp";
|
||||
name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Bottom Persp" : "Top Persp";
|
||||
break;
|
||||
default:
|
||||
if (v3d->persp==V3D_CAMOB) {
|
||||
if (rv3d->persp==V3D_CAMOB) {
|
||||
if ((v3d->camera) && (v3d->camera->type == OB_CAMERA)) {
|
||||
Camera *cam;
|
||||
cam = v3d->camera->data;
|
||||
@ -673,7 +674,7 @@ char *view3d_get_name(View3D *v3d)
|
||||
name = "Object as Camera";
|
||||
}
|
||||
} else {
|
||||
name = (v3d->persp == V3D_ORTHO) ? "User Ortho" : "User Persp";
|
||||
name = (rv3d->persp == V3D_ORTHO) ? "User Ortho" : "User Persp";
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -683,7 +684,8 @@ char *view3d_get_name(View3D *v3d)
|
||||
|
||||
static void draw_viewport_name(ARegion *ar, View3D *v3d)
|
||||
{
|
||||
char *name = view3d_get_name(v3d);
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
char *name = view3d_get_name(v3d, rv3d);
|
||||
char *printable = NULL;
|
||||
|
||||
if (v3d->localview) {
|
||||
@ -841,6 +843,7 @@ 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)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float zoomfac, size[2];
|
||||
float dx= 0.0f, dy= 0.0f;
|
||||
|
||||
@ -854,7 +857,7 @@ void calc_viewborder(Scene *scene, ARegion *ar, View3D *v3d, rctf *viewborder_r)
|
||||
* with multiple keypad presses (ton)
|
||||
*/
|
||||
|
||||
zoomfac= (M_SQRT2 + v3d->camzoom/50.0);
|
||||
zoomfac= (M_SQRT2 + rv3d->camzoom/50.0);
|
||||
zoomfac= (zoomfac*zoomfac)*0.25;
|
||||
|
||||
size[0]= size[0]*zoomfac;
|
||||
@ -866,8 +869,8 @@ void calc_viewborder(Scene *scene, ARegion *ar, View3D *v3d, rctf *viewborder_r)
|
||||
viewborder_r->xmax= viewborder_r->xmin + size[0];
|
||||
viewborder_r->ymax= viewborder_r->ymin + size[1];
|
||||
|
||||
dx= ar->winx*v3d->camdx*zoomfac*2.0f;
|
||||
dy= ar->winy*v3d->camdy*zoomfac*2.0f;
|
||||
dx= ar->winx*rv3d->camdx*zoomfac*2.0f;
|
||||
dy= ar->winy*rv3d->camdy*zoomfac*2.0f;
|
||||
|
||||
/* apply offset */
|
||||
viewborder_r->xmin-= dx;
|
||||
@ -888,15 +891,16 @@ void calc_viewborder(Scene *scene, ARegion *ar, View3D *v3d, rctf *viewborder_r)
|
||||
}
|
||||
}
|
||||
|
||||
void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float size[2];
|
||||
int im_width= (scene->r.size*scene->r.xsch)/100;
|
||||
|
||||
view3d_get_viewborder_size(scene, ar, size);
|
||||
|
||||
v3d->camzoom= (sqrt(4.0*im_width/size[0]) - M_SQRT2)*50.0;
|
||||
v3d->camzoom= CLAMPIS(v3d->camzoom, -30, 300);
|
||||
rv3d->camzoom= (sqrt(4.0*im_width/size[0]) - M_SQRT2)*50.0;
|
||||
rv3d->camzoom= CLAMPIS(rv3d->camzoom, -30, 300);
|
||||
}
|
||||
|
||||
|
||||
@ -1047,6 +1051,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
|
||||
void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
struct Base *base;
|
||||
|
||||
/*for 2.43 release, don't use glext and just define the constant.
|
||||
@ -1099,14 +1104,14 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
view3d_set_clipping(v3d);
|
||||
if(rv3d->rflag & RV3D_CLIPPING)
|
||||
view3d_set_clipping(rv3d);
|
||||
|
||||
G.f |= G_BACKBUFSEL;
|
||||
|
||||
base= (scene->basact);
|
||||
if(base && (base->lay & v3d->lay)) {
|
||||
draw_object_backbufsel(scene, v3d, base->object);
|
||||
draw_object_backbufsel(scene, v3d, rv3d, base->object);
|
||||
}
|
||||
|
||||
v3d->flag &= ~V3D_NEEDBACKBUFDRAW;
|
||||
@ -1116,7 +1121,7 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glEnable(GL_DITHER);
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
if(rv3d->rflag & RV3D_CLIPPING)
|
||||
view3d_clr_clipping();
|
||||
|
||||
#ifdef GL_MULTISAMPLE_ARB
|
||||
@ -1279,6 +1284,7 @@ exit:
|
||||
|
||||
static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
BGpic *bgpic;
|
||||
Image *ima;
|
||||
ImBuf *ibuf= NULL;
|
||||
@ -1299,7 +1305,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
if(ibuf->rect==NULL)
|
||||
IMB_rect_from_float(ibuf);
|
||||
|
||||
if(v3d->persp==2) {
|
||||
if(rv3d->persp==2) {
|
||||
rctf vb;
|
||||
|
||||
calc_viewborder(scene, ar, v3d, &vb);
|
||||
@ -1313,15 +1319,15 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
float sco[2];
|
||||
|
||||
/* calc window coord */
|
||||
initgrabz(v3d, 0.0, 0.0, 0.0);
|
||||
window_to_3d(ar, v3d, vec, 1, 0);
|
||||
initgrabz(rv3d, 0.0, 0.0, 0.0);
|
||||
window_to_3d(ar, vec, 1, 0);
|
||||
fac= MAX3( fabs(vec[0]), fabs(vec[1]), fabs(vec[1]) );
|
||||
fac= 1.0/fac;
|
||||
|
||||
asp= ( (float)ibuf->y)/(float)ibuf->x;
|
||||
|
||||
vec[0] = vec[1] = vec[2] = 0.0;
|
||||
view3d_project_float(ar, vec, sco, v3d->persmat);
|
||||
view3d_project_float(ar, vec, sco, rv3d->persmat);
|
||||
cx = sco[0];
|
||||
cy = sco[1];
|
||||
|
||||
@ -1463,6 +1469,7 @@ static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
*/
|
||||
static void draw_dupli_objects_color(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int color)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
ListBase *lb;
|
||||
DupliObject *dob;
|
||||
Base tbase;
|
||||
@ -1523,9 +1530,9 @@ static void draw_dupli_objects_color(Scene *scene, ARegion *ar, View3D *v3d, Bas
|
||||
}
|
||||
if(use_displist) {
|
||||
wmMultMatrix(dob->mat);
|
||||
if(boundbox_clip(v3d, dob->mat, bb))
|
||||
if(boundbox_clip(rv3d, dob->mat, bb))
|
||||
glCallList(displist);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
}
|
||||
else {
|
||||
Mat4CpyMat4(dob->ob->obmat, dob->mat);
|
||||
@ -1562,10 +1569,12 @@ static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *bas
|
||||
|
||||
void view3d_update_depths(ARegion *ar, View3D *v3d)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
|
||||
/* Create storage for, and, if necessary, copy depth buffer */
|
||||
if(!v3d->depths) v3d->depths= MEM_callocN(sizeof(ViewDepths),"ViewDepths");
|
||||
if(v3d->depths) {
|
||||
ViewDepths *d= v3d->depths;
|
||||
if(!rv3d->depths) rv3d->depths= MEM_callocN(sizeof(ViewDepths),"ViewDepths");
|
||||
if(rv3d->depths) {
|
||||
ViewDepths *d= rv3d->depths;
|
||||
if(d->w != ar->winx ||
|
||||
d->h != ar->winy ||
|
||||
!d->depths) {
|
||||
@ -1621,6 +1630,7 @@ static void draw_sculpt_depths(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
|
||||
void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *))
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
Base *base;
|
||||
Scene *sce;
|
||||
short zbuf, flag;
|
||||
@ -1635,20 +1645,20 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *))
|
||||
U.glalphaclip = 0.5; /* not that nice but means we wont zoom into billboards */
|
||||
v3d->flag &= ~V3D_SELECT_OUTLINE;
|
||||
|
||||
setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */
|
||||
setviewmatrixview3d(scene, v3d); /* note: calls where_is_object for camera... */
|
||||
setwinmatrixview3d(ar, v3d, NULL); /* 0= no pick rect */
|
||||
setviewmatrixview3d(scene, v3d, rv3d); /* note: calls where_is_object for camera... */
|
||||
|
||||
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
|
||||
Mat4Invert(v3d->persinv, v3d->persmat);
|
||||
Mat4Invert(v3d->viewinv, v3d->viewmat);
|
||||
Mat4MulMat4(rv3d->persmat, rv3d->viewmat, rv3d->winmat);
|
||||
Mat4Invert(rv3d->persinv, rv3d->persmat);
|
||||
Mat4Invert(rv3d->viewinv, rv3d->viewmat);
|
||||
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
// persp(PERSP_STORE); // store correct view for persp(PERSP_VIEW) calls
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING) {
|
||||
view3d_set_clipping(v3d);
|
||||
if(rv3d->rflag & RV3D_CLIPPING) {
|
||||
view3d_set_clipping(rv3d);
|
||||
}
|
||||
|
||||
v3d->zbuf= TRUE;
|
||||
@ -1842,8 +1852,8 @@ static CustomDataMask get_viewedit_datamask(bScreen *screen)
|
||||
void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
View3D *v3d= sa->spacedata.first; /* XXX get from region */
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C);
|
||||
Scene *sce;
|
||||
Base *base;
|
||||
Object *ob;
|
||||
@ -1871,27 +1881,27 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
if(draw_glsl_material(scene, NULL, v3d, v3d->drawtype))
|
||||
gpu_update_lamps_shadows(scene, v3d);
|
||||
|
||||
setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */
|
||||
setviewmatrixview3d(scene, v3d); /* note: calls where_is_object for camera... */
|
||||
setwinmatrixview3d(ar, v3d, NULL); /* 0= no pick rect */
|
||||
setviewmatrixview3d(scene, v3d, rv3d); /* note: calls where_is_object for camera... */
|
||||
|
||||
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
|
||||
Mat4Invert(v3d->persinv, v3d->persmat);
|
||||
Mat4Invert(v3d->viewinv, v3d->viewmat);
|
||||
Mat4MulMat4(rv3d->persmat, rv3d->viewmat, rv3d->winmat);
|
||||
Mat4Invert(rv3d->persinv, rv3d->persmat);
|
||||
Mat4Invert(rv3d->viewinv, rv3d->viewmat);
|
||||
|
||||
/* calculate pixelsize factor once, is used for lamps and obcenters */
|
||||
{
|
||||
float len1, len2, vec[3];
|
||||
|
||||
VECCOPY(vec, v3d->persinv[0]);
|
||||
VECCOPY(vec, rv3d->persinv[0]);
|
||||
len1= Normalize(vec);
|
||||
VECCOPY(vec, v3d->persinv[1]);
|
||||
VECCOPY(vec, rv3d->persinv[1]);
|
||||
len2= Normalize(vec);
|
||||
|
||||
v3d->pixsize= 2.0f*(len1>len2?len1:len2);
|
||||
rv3d->pixsize= 2.0f*(len1>len2?len1:len2);
|
||||
|
||||
/* correct for window size */
|
||||
if(ar->winx > ar->winy) v3d->pixsize/= (float)ar->winx;
|
||||
else v3d->pixsize/= (float)ar->winy;
|
||||
if(ar->winx > ar->winy) rv3d->pixsize/= (float)ar->winx;
|
||||
else rv3d->pixsize/= (float)ar->winy;
|
||||
}
|
||||
|
||||
if(v3d->drawtype > OB_WIRE) {
|
||||
@ -1909,10 +1919,10 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
|
||||
}
|
||||
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
view3d_draw_clipping(v3d);
|
||||
if(rv3d->rflag & RV3D_CLIPPING)
|
||||
view3d_draw_clipping(rv3d);
|
||||
|
||||
/* set zbuffer after we draw clipping region */
|
||||
if(v3d->drawtype > OB_WIRE) {
|
||||
@ -1923,9 +1933,9 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
// needs to be done always, gridview is adjusted in drawgrid() now
|
||||
v3d->gridview= v3d->grid;
|
||||
|
||||
if(v3d->view==0 || v3d->persp!=0) {
|
||||
if(rv3d->view==0 || rv3d->persp!=0) {
|
||||
drawfloor(scene, v3d);
|
||||
if(v3d->persp==2) {
|
||||
if(rv3d->persp==2) {
|
||||
if(scene->world) {
|
||||
if(scene->world->mode & WO_STARS) {
|
||||
RE_make_stars(NULL, scene, star_stuff_init_func, star_stuff_vertex_func,
|
||||
@ -1940,17 +1950,17 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
drawgrid(ar, v3d);
|
||||
/* XXX make function? replaces persp(1) */
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
wmLoadMatrix(v3d->winmat);
|
||||
wmLoadMatrix(rv3d->winmat);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
|
||||
if(v3d->flag & V3D_DISPBGPIC) {
|
||||
draw_bgpic(scene, ar, v3d);
|
||||
}
|
||||
}
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
view3d_set_clipping(v3d);
|
||||
if(rv3d->rflag & RV3D_CLIPPING)
|
||||
view3d_set_clipping(rv3d);
|
||||
|
||||
/* draw set first */
|
||||
if(scene->set) {
|
||||
@ -2020,7 +2030,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
view3d_update_depths(ar, v3d);
|
||||
}
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
if(rv3d->rflag & RV3D_CLIPPING)
|
||||
view3d_clr_clipping();
|
||||
|
||||
// BIF_draw_manipulator(ar);
|
||||
@ -2043,8 +2053,8 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
|
||||
/* Draw particle edit brush XXX (removed) */
|
||||
|
||||
if(v3d->persp>1) drawviewborder(scene, ar, v3d);
|
||||
if(v3d->flag2 & V3D_FLYMODE) drawviewborder_flymode(ar);
|
||||
if(rv3d->persp>1) drawviewborder(scene, ar, v3d);
|
||||
if(rv3d->rflag & RV3D_FLYMODE) drawviewborder_flymode(ar);
|
||||
|
||||
/* draw grease-pencil stuff */
|
||||
// if (v3d->flag2 & V3D_DISPGP)
|
||||
@ -2053,9 +2063,9 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
drawcursor(scene, ar, v3d);
|
||||
|
||||
if(U.uiflag & USER_SHOW_ROTVIEWICON)
|
||||
draw_view_axis(v3d);
|
||||
draw_view_axis(rv3d);
|
||||
else
|
||||
draw_view_icon(v3d);
|
||||
draw_view_icon(rv3d);
|
||||
|
||||
/* XXX removed viewport fps */
|
||||
if(U.uiflag & USER_SHOW_VIEWPORTNAME) {
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -118,9 +118,6 @@ static void allqueue(int x, int y) {}
|
||||
static void persptoetsen(int x) {}
|
||||
static void fly(void) {}
|
||||
static void editmesh_align_view_to_selected(void *x, int y) {}
|
||||
static void play_anim(int x) {}
|
||||
static void add_blockhandler(void *x, int y, int z) {}
|
||||
static void toggle_blockhandler(void *x, int y, int z) {}
|
||||
static void countall(void) {}
|
||||
extern void borderselect();
|
||||
static int retopo_mesh_paint_check() {return 0;}
|
||||
@ -188,13 +185,14 @@ static void do_view3d_buttons(bContext *C, void *arg, int event);
|
||||
#define B_LAY 201
|
||||
|
||||
|
||||
/* temp hack to get the region window */
|
||||
static ARegion *ed_regionwin(ScrArea *sa)
|
||||
static RegionView3D *wm_region_view3d(const bContext *C)
|
||||
{
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
ARegion *ar;
|
||||
/* XXX handle foursplit? */
|
||||
for(ar= sa->regionbase.first; ar; ar= ar->next)
|
||||
if(ar->regiontype==RGN_TYPE_WINDOW)
|
||||
return ar;
|
||||
return ar->regiondata;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -252,7 +250,6 @@ void do_layer_buttons(bContext *C, short event)
|
||||
static void do_view3d_view_camerasmenu(bContext *C, void *arg, int event)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
View3D *v3d= (View3D*)CTX_wm_space_data(C);
|
||||
Base *base;
|
||||
int i=1;
|
||||
|
||||
@ -260,31 +257,16 @@ static void do_view3d_view_camerasmenu(bContext *C, void *arg, int event)
|
||||
/* Set Active Object as Active Camera */
|
||||
/* XXX ugly hack alert */
|
||||
// G.qual |= LR_CTRLKEY;
|
||||
persptoetsen(PAD0);
|
||||
// persptoetsen(PAD0);
|
||||
// G.qual &= ~LR_CTRLKEY;
|
||||
} else {
|
||||
/* store settings of current view before allowing overwriting with camera view */
|
||||
/* this is a copy of the code in toets.c */
|
||||
if(v3d->persp != V3D_CAMOB) {
|
||||
QUATCOPY(v3d->lviewquat, v3d->viewquat);
|
||||
v3d->lview= v3d->view;
|
||||
v3d->lpersp= v3d->persp;
|
||||
}
|
||||
|
||||
for( base = FIRSTBASE; base; base = base->next ) {
|
||||
if (base->object->type == OB_CAMERA) {
|
||||
i++;
|
||||
|
||||
if (event==i) {
|
||||
|
||||
if (v3d->camera == base->object && v3d->persp==V3D_CAMOB)
|
||||
return;
|
||||
|
||||
/* XXX handle smooth view */
|
||||
v3d->camera= base->object;
|
||||
handle_view3d_lock();
|
||||
v3d->persp= V3D_CAMOB;
|
||||
v3d->view= 0;
|
||||
/* XXX use api call! */
|
||||
|
||||
break;
|
||||
}
|
||||
@ -514,40 +496,25 @@ static uiBlock *view3d_view_spacehandlers(bContext *C, uiMenuBlockHandle *handle
|
||||
|
||||
static void do_view3d_viewmenu(bContext *C, void *arg, int event)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
View3D *v3d= sa->spacedata.first;
|
||||
|
||||
switch(event) {
|
||||
case 0: /* User */
|
||||
v3d->viewbut = 0;
|
||||
v3d->persp = V3D_PERSP;
|
||||
break;
|
||||
case 1: /* Camera */
|
||||
persptoetsen(PAD0);
|
||||
break;
|
||||
case 2: /* Top */
|
||||
persptoetsen(PAD7);
|
||||
break;
|
||||
case 3: /* Front */
|
||||
persptoetsen(PAD1);
|
||||
break;
|
||||
case 4: /* Side */
|
||||
persptoetsen(PAD3);
|
||||
break;
|
||||
case 5: /* Perspective */
|
||||
v3d->persp=V3D_PERSP;
|
||||
break;
|
||||
case 6: /* Orthographic */
|
||||
v3d->persp=V3D_ORTHO;
|
||||
break;
|
||||
case 7: /* Local View */
|
||||
v3d->localview= 1;
|
||||
initlocalview(scene, ed_regionwin(sa), v3d);
|
||||
break;
|
||||
case 8: /* Global View */
|
||||
v3d->localview= 0;
|
||||
endlocalview(scene, sa);
|
||||
break;
|
||||
case 9: /* View All (Home) */
|
||||
WM_operator_name_call(C, "VIEW3D_OT_viewhome", WM_OP_EXEC_REGION_WIN, NULL);
|
||||
@ -556,28 +523,27 @@ static void do_view3d_viewmenu(bContext *C, void *arg, int event)
|
||||
WM_operator_name_call(C, "VIEW3D_OT_viewcenter", WM_OP_EXEC_REGION_WIN, NULL);
|
||||
break;
|
||||
case 13: /* Play Back Animation */
|
||||
play_anim(0);
|
||||
break;
|
||||
case 15: /* Background Image... */
|
||||
add_blockhandler(sa, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
|
||||
// add_blockhandler(sa, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
|
||||
break;
|
||||
case 16: /* View Panel */
|
||||
add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
|
||||
// add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
|
||||
break;
|
||||
case 17: /* Set Clipping Border */
|
||||
WM_operator_name_call(C, "VIEW3D_OT_clipping", WM_OP_INVOKE_REGION_WIN, NULL);
|
||||
break;
|
||||
case 18: /* render preview */
|
||||
toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
|
||||
// toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
|
||||
break;
|
||||
case 19: /* zoom within border */
|
||||
// view3d_border_zoom();
|
||||
break;
|
||||
case 20: /* Transform Space Panel */
|
||||
add_blockhandler(sa, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
|
||||
// add_blockhandler(sa, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
|
||||
break;
|
||||
case 21: /* Grease Pencil */
|
||||
add_blockhandler(sa, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
|
||||
// add_blockhandler(sa, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
|
||||
break;
|
||||
case 22: /* View all layers */
|
||||
do_layer_buttons(C, -2);
|
||||
@ -590,6 +556,7 @@ static uiBlock *view3d_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *ar
|
||||
{
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
View3D *v3d= sa->spacedata.first;
|
||||
RegionView3D *rv3d= wm_region_view3d(C);
|
||||
uiBlock *block;
|
||||
short yco= 0, menuwidth=120;
|
||||
|
||||
@ -604,24 +571,24 @@ static uiBlock *view3d_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *ar
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
if ((v3d->viewbut == 0) && !(v3d->persp == V3D_CAMOB)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
|
||||
if ((rv3d->viewbut == 0) && !(rv3d->persp == V3D_CAMOB)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
|
||||
else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
|
||||
if (v3d->persp == V3D_CAMOB) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
|
||||
if (rv3d->persp == V3D_CAMOB) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
|
||||
else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
|
||||
if (v3d->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
|
||||
if (rv3d->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
|
||||
else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
|
||||
if (v3d->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
|
||||
if (rv3d->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
|
||||
else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
|
||||
if (v3d->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
|
||||
if (rv3d->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
|
||||
else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
|
||||
|
||||
uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
if(v3d->persp==V3D_PERSP) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
|
||||
if(rv3d->persp==V3D_PERSP) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
|
||||
else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
|
||||
if(v3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
|
||||
if(rv3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
|
||||
else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
@ -643,11 +610,11 @@ static uiBlock *view3d_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *ar
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
if(rv3d->rflag & RV3D_CLIPPING)
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
|
||||
else
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
|
||||
if (v3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Within Border...|Shift B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 19, "");
|
||||
if (rv3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Within Border...|Shift B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 19, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
|
||||
if(!sa->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
|
||||
@ -675,9 +642,9 @@ static uiBlock *view3d_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *ar
|
||||
return block;
|
||||
}
|
||||
|
||||
#if 0
|
||||
void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
|
||||
{
|
||||
#if 0
|
||||
|
||||
extern void selectall_type(short obtype);
|
||||
|
||||
@ -717,7 +684,6 @@ void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
|
||||
break;
|
||||
}
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
static uiBlock *view3d_select_object_typemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
|
||||
@ -750,6 +716,7 @@ static uiBlock *view3d_select_object_typemenu(bContext *C, uiMenuBlockHandle *ha
|
||||
return block;
|
||||
}
|
||||
|
||||
|
||||
void do_view3d_select_object_layermenu(bContext *C, void *arg, int event)
|
||||
{
|
||||
// XXX extern void selectall_layer(unsigned int layernum);
|
||||
@ -821,7 +788,6 @@ static uiBlock *view3d_select_object_layermenu(bContext *C, uiMenuBlockHandle *h
|
||||
|
||||
void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
|
||||
{
|
||||
#if 0
|
||||
switch(event) {
|
||||
case 1: /* Object Ipo */
|
||||
case 2: /* ObData */
|
||||
@ -832,7 +798,6 @@ void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
|
||||
}
|
||||
countall();
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
static uiBlock *view3d_select_object_linkedmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
|
||||
@ -855,7 +820,7 @@ static uiBlock *view3d_select_object_linkedmenu(bContext *C, uiMenuBlockHandle *
|
||||
|
||||
void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
|
||||
{
|
||||
#if 0
|
||||
|
||||
switch(event) {
|
||||
case 1: /* Children */
|
||||
case 2: /* Immediate Children */
|
||||
@ -872,7 +837,7 @@ void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
|
||||
break;
|
||||
}
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
static uiBlock *view3d_select_object_groupedmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
|
||||
@ -900,10 +865,12 @@ static uiBlock *view3d_select_object_groupedmenu(bContext *C, uiMenuBlockHandle
|
||||
return block;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static uiBlock *view3d_select_objectmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
|
||||
{
|
||||
uiBlock *block;
|
||||
short yco= 0, menuwidth=120;
|
||||
// short yco= 0, menuwidth=120;
|
||||
|
||||
block= uiBeginBlock(C, handle->region, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV);
|
||||
|
||||
@ -4852,7 +4819,6 @@ uiBlock *view3d_sculpt_inputmenu(bContext *C, uiMenuBlockHandle *handle, void *a
|
||||
|
||||
uiBlock *view3d_sculptmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
View3D *v3d= sa->spacedata.first;
|
||||
uiBlock *block;
|
||||
@ -5357,19 +5323,9 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
|
||||
|
||||
case B_VIEWBUT:
|
||||
|
||||
if(v3d->viewbut==1) persptoetsen(PAD7);
|
||||
else if(v3d->viewbut==2) persptoetsen(PAD1);
|
||||
else if(v3d->viewbut==3) persptoetsen(PAD3);
|
||||
break;
|
||||
|
||||
case B_PERSP:
|
||||
|
||||
if(v3d->persp==V3D_CAMOB) persptoetsen(PAD0);
|
||||
else {
|
||||
if (v3d->persp==V3D_ORTHO) v3d->persp = V3D_PERSP;
|
||||
else if (v3d->persp==V3D_PERSP) v3d->persp = V3D_ORTHO;
|
||||
persptoetsen(PAD5);
|
||||
}
|
||||
|
||||
break;
|
||||
case B_VIEWRENDER:
|
||||
@ -5585,20 +5541,21 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
|
||||
}
|
||||
}
|
||||
|
||||
static void view3d_header_pulldowns(const bContext *C, uiBlock *block, View3D *v3d, Object *ob, int *xcoord, int yco)
|
||||
static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *ob, int *xcoord, int yco)
|
||||
{
|
||||
Object *obedit = CTX_data_edit_object(C);
|
||||
RegionView3D *rv3d= wm_region_view3d(C);
|
||||
short xmax, xco= *xcoord;
|
||||
|
||||
|
||||
/* pull down menus */
|
||||
uiBlockSetEmboss(block, UI_EMBOSSP);
|
||||
|
||||
/* compensate for local mode when setting up the viewing menu/iconrow values */
|
||||
if(v3d->view==7) v3d->viewbut= 1;
|
||||
else if(v3d->view==1) v3d->viewbut= 2;
|
||||
else if(v3d->view==3) v3d->viewbut= 3;
|
||||
else v3d->viewbut= 0;
|
||||
|
||||
if(rv3d->view==7) rv3d->viewbut= 1;
|
||||
else if(rv3d->view==1) rv3d->viewbut= 2;
|
||||
else if(rv3d->view==3) rv3d->viewbut= 3;
|
||||
else rv3d->viewbut= 0;
|
||||
|
||||
/* the 'xmax - 3' rather than xmax is to prevent some weird flickering where the highlighted
|
||||
* menu is drawn wider than it should be. The ypos of -2 is to make it properly fill the
|
||||
@ -5746,7 +5703,7 @@ void view3d_header_buttons(const bContext *C, ARegion *ar)
|
||||
xco= ED_area_header_standardbuttons(C, block, yco);
|
||||
|
||||
if((sa->flag & HEADER_NO_PULLDOWN)==0)
|
||||
view3d_header_pulldowns(C, block, v3d, ob, &xco, yco);
|
||||
view3d_header_pulldowns(C, block, ob, &xco, yco);
|
||||
|
||||
/* other buttons: */
|
||||
uiBlockSetEmboss(block, UI_EMBOSS);
|
||||
|
@ -87,21 +87,21 @@ void VIEW3D_OT_drawtype(struct wmOperatorType *ot);
|
||||
/* drawobject.c */
|
||||
void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, int flag);
|
||||
int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt);
|
||||
void draw_object_instance(Scene *scene, View3D *v3d, Object *ob, int dt, int outline);
|
||||
void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob);
|
||||
void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int dt, int outline);
|
||||
void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob);
|
||||
void drawaxes(float size, int flag, char drawtype);
|
||||
|
||||
/* drawarmature.c */
|
||||
int draw_armature(Scene *scene, View3D *v3d, Base *base, int dt, int flag);
|
||||
int draw_armature(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag);
|
||||
|
||||
/* drawmesh.c */
|
||||
void draw_mesh_textured(Scene *scene, View3D *v3d, Object *ob, struct DerivedMesh *dm, int faceselect);
|
||||
void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, struct DerivedMesh *dm, int faceselect);
|
||||
|
||||
/* view3d_draw.c */
|
||||
void view3d_main_area_draw(const struct bContext *C, struct ARegion *ar);
|
||||
void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (* func)(void *));
|
||||
void view3d_clr_clipping(void);
|
||||
void view3d_set_clipping(View3D *v3d);
|
||||
void view3d_set_clipping(RegionView3D *rv3d);
|
||||
void add_view3d_after(View3D *v3d, Base *base, int type, int flag);
|
||||
void make_axis_color(char *col, char *col2, char axis);
|
||||
void calc_viewborder(Scene *scene, struct ARegion *ar, View3D *v3d, rctf *viewborder_r);
|
||||
@ -127,14 +127,14 @@ void VIEW3D_OT_wpaint(struct wmOperatorType *ot);
|
||||
void VIEW3D_OT_smoothview(struct wmOperatorType *ot);
|
||||
void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot);
|
||||
|
||||
int boundbox_clip(View3D *v3d, float obmat[][4], struct BoundBox *bb);
|
||||
int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb);
|
||||
|
||||
void view3d_project_short_clip(struct ARegion *ar, View3D *v3d, float *vec, short *adr, float projmat[4][4], float wmat[4][4]);
|
||||
void view3d_project_short_clip(struct ARegion *ar, float *vec, short *adr, float projmat[4][4], float wmat[4][4]);
|
||||
void view3d_project_short_noclip(struct ARegion *ar, float *vec, short *adr, float mat[4][4]);
|
||||
void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]);
|
||||
void view3d_get_object_project_mat(View3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]);
|
||||
void view3d_get_object_project_mat(RegionView3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]);
|
||||
|
||||
int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize);
|
||||
int get_view3d_viewplane(View3D *v3d, RegionView3D *rv3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize);
|
||||
|
||||
void initlocalview(Scene *scene, struct ARegion *ar, View3D *v3d);
|
||||
void restore_localviewdata(View3D *vd);
|
||||
@ -144,8 +144,8 @@ void centerview(struct 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(Scene *scene, View3D *v3d);
|
||||
void setwinmatrixview3d(ARegion *ar, View3D *v3d, rctf *rect); /* rect: for picking */
|
||||
void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d);
|
||||
|
||||
#endif /* ED_VIEW3D_INTERN_H */
|
||||
|
||||
|
@ -80,6 +80,7 @@
|
||||
#include "ED_object.h"
|
||||
#include "ED_screen.h"
|
||||
#include "ED_types.h"
|
||||
#include "ED_util.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
@ -96,6 +97,7 @@ void view3d_set_viewcontext(bContext *C, ViewContext *vc)
|
||||
vc->ar= CTX_wm_region(C);
|
||||
vc->scene= CTX_data_scene(C);
|
||||
vc->v3d= CTX_wm_view3d(C);
|
||||
vc->rv3d= vc->ar->regiondata;
|
||||
vc->obact= CTX_data_active_object(C);
|
||||
vc->obedit= CTX_data_edit_object(C);
|
||||
}
|
||||
@ -310,10 +312,10 @@ static void do_lasso_select_pose(ViewContext *vc, short mcords[][2], short moves
|
||||
for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
|
||||
VECCOPY(vec, pchan->pose_head);
|
||||
Mat4MulVecfl(ob->obmat, vec);
|
||||
project_short(vc->ar, vc->v3d, vec, sco1);
|
||||
project_short(vc->ar, vec, sco1);
|
||||
VECCOPY(vec, pchan->pose_tail);
|
||||
Mat4MulVecfl(ob->obmat, vec);
|
||||
project_short(vc->ar, vc->v3d, vec, sco2);
|
||||
project_short(vc->ar, vec, sco2);
|
||||
|
||||
if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) {
|
||||
if(select) pchan->bone->flag |= BONE_SELECTED;
|
||||
@ -329,7 +331,7 @@ static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short mo
|
||||
|
||||
for(base= vc->scene->base.first; base; base= base->next) {
|
||||
if(base->lay & vc->v3d->lay) {
|
||||
project_short(vc->ar, vc->v3d, base->object->obmat[3], &base->sx);
|
||||
project_short(vc->ar, base->object->obmat[3], &base->sx);
|
||||
if(lasso_inside(mcords, moves, base->sx, base->sy)) {
|
||||
|
||||
if(select) ED_base_object_select(base, BA_SELECT);
|
||||
@ -572,10 +574,10 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m
|
||||
|
||||
VECCOPY(vec, ebone->head);
|
||||
Mat4MulVecfl(vc->obedit->obmat, vec);
|
||||
project_short(vc->ar, vc->v3d, vec, sco1);
|
||||
project_short(vc->ar, vec, sco1);
|
||||
VECCOPY(vec, ebone->tail);
|
||||
Mat4MulVecfl(vc->obedit->obmat, vec);
|
||||
project_short(vc->ar, vc->v3d, vec, sco2);
|
||||
project_short(vc->ar, vec, sco2);
|
||||
|
||||
didpoint= 0;
|
||||
if(lasso_inside(mcords, moves, sco1[0], sco1[1])) {
|
||||
@ -819,7 +821,7 @@ static Base *mouse_select_menu(ViewContext *vc, unsigned int *buffer, int hits,
|
||||
else {
|
||||
int temp, dist=15;
|
||||
|
||||
project_short(vc->ar, vc->v3d, base->object->obmat[3], &base->sx);
|
||||
project_short(vc->ar, base->object->obmat[3], &base->sx);
|
||||
|
||||
temp= abs(base->sx -mval[0]) + abs(base->sy -mval[1]);
|
||||
if(temp<dist ) baseList[baseCount] = base;
|
||||
@ -937,7 +939,7 @@ static void mouse_select(bContext *C, short *mval, short extend, short obcenter)
|
||||
base= startbase;
|
||||
while(base) {
|
||||
if (BASE_SELECTABLE(v3d, base)) {
|
||||
project_short(ar, v3d, base->object->obmat[3], &base->sx);
|
||||
project_short(ar, base->object->obmat[3], &base->sx);
|
||||
|
||||
temp= abs(base->sx -mval[0]) + abs(base->sy -mval[1]);
|
||||
if(base==BASACT) temp+=10;
|
||||
@ -1758,7 +1760,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
|
||||
|
||||
for(base= FIRSTBASE; base; base= base->next) {
|
||||
if(base->lay & v3d->lay) {
|
||||
project_short(ar, v3d, base->object->obmat[3], &base->sx);
|
||||
project_short(ar, base->object->obmat[3], &base->sx);
|
||||
if(base->sx!=IS_CLIPPED) {
|
||||
int dx= base->sx-x;
|
||||
int dy= base->sy-y;
|
||||
|
@ -94,14 +94,13 @@ void view3d_operator_needs_opengl(const bContext *C)
|
||||
if(ar->regiontype!=RGN_TYPE_WINDOW)
|
||||
printf("view3d_operator_needs_opengl error, wrong region\n");
|
||||
else {
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
View3D *v3d= sa->spacedata.first;
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
|
||||
wmSubWindowSet(CTX_wm_window(C), ar->swinid);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
wmLoadMatrix(v3d->winmat);
|
||||
wmLoadMatrix(rv3d->winmat);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
}
|
||||
}
|
||||
|
||||
@ -145,8 +144,7 @@ static void object_lens_clip_settings(Object *ob, float *lens, float *clipsta, f
|
||||
*
|
||||
* 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)
|
||||
static void view_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, float *lens)
|
||||
{
|
||||
float bmat[4][4];
|
||||
float imat[4][4];
|
||||
@ -156,8 +154,6 @@ static void view_settings_from_ob(Scene *scene, Object *ob, float *ofs, float *q
|
||||
|
||||
/* 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*/
|
||||
}
|
||||
@ -204,14 +200,14 @@ 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);
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C);
|
||||
struct SmoothViewStore sms;
|
||||
|
||||
/* initialize sms */
|
||||
VECCOPY(sms.new_ofs, v3d->ofs);
|
||||
QUATCOPY(sms.new_quat, v3d->viewquat);
|
||||
sms.new_dist= v3d->dist;
|
||||
VECCOPY(sms.new_ofs, rv3d->ofs);
|
||||
QUATCOPY(sms.new_quat, rv3d->viewquat);
|
||||
sms.new_dist= rv3d->dist;
|
||||
sms.new_lens= v3d->lens;
|
||||
sms.to_camera= 0;
|
||||
|
||||
@ -222,27 +218,27 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
|
||||
if(lens) sms.new_lens= *lens;
|
||||
|
||||
if (camera) {
|
||||
view_settings_from_ob(scene, camera, sms.new_ofs, sms.new_quat, &sms.new_dist, &sms.new_lens);
|
||||
view_settings_from_ob(camera, sms.new_ofs, sms.new_quat, &sms.new_dist, &sms.new_lens);
|
||||
sms.to_camera= 1; /* restore view3d values in end */
|
||||
}
|
||||
|
||||
if (C && U.smooth_viewtx) {
|
||||
int changed = 0; /* zero means no difference */
|
||||
|
||||
if (sms.new_dist != v3d->dist)
|
||||
if (sms.new_dist != rv3d->dist)
|
||||
changed = 1;
|
||||
if (sms.new_lens != v3d->lens)
|
||||
changed = 1;
|
||||
|
||||
if ((sms.new_ofs[0]!=v3d->ofs[0]) ||
|
||||
(sms.new_ofs[1]!=v3d->ofs[1]) ||
|
||||
(sms.new_ofs[2]!=v3d->ofs[2]) )
|
||||
if ((sms.new_ofs[0]!=rv3d->ofs[0]) ||
|
||||
(sms.new_ofs[1]!=rv3d->ofs[1]) ||
|
||||
(sms.new_ofs[2]!=rv3d->ofs[2]) )
|
||||
changed = 1;
|
||||
|
||||
if ((sms.new_quat[0]!=v3d->viewquat[0]) ||
|
||||
(sms.new_quat[1]!=v3d->viewquat[1]) ||
|
||||
(sms.new_quat[2]!=v3d->viewquat[2]) ||
|
||||
(sms.new_quat[3]!=v3d->viewquat[3]) )
|
||||
if ((sms.new_quat[0]!=rv3d->viewquat[0]) ||
|
||||
(sms.new_quat[1]!=rv3d->viewquat[1]) ||
|
||||
(sms.new_quat[2]!=rv3d->viewquat[2]) ||
|
||||
(sms.new_quat[3]!=rv3d->viewquat[3]) )
|
||||
changed = 1;
|
||||
|
||||
/* The new view is different from the old one
|
||||
@ -268,30 +264,30 @@ 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(scene, oldcamera, sms.orig_ofs, sms.orig_quat, &sms.orig_dist, &sms.orig_lens);
|
||||
sms.orig_dist= rv3d->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);
|
||||
}
|
||||
else {
|
||||
VECCOPY(sms.orig_ofs, v3d->ofs);
|
||||
QUATCOPY(sms.orig_quat, v3d->viewquat);
|
||||
sms.orig_dist= v3d->dist;
|
||||
VECCOPY(sms.orig_ofs, rv3d->ofs);
|
||||
QUATCOPY(sms.orig_quat, rv3d->viewquat);
|
||||
sms.orig_dist= rv3d->dist;
|
||||
sms.orig_lens= v3d->lens;
|
||||
}
|
||||
/* grid draw as floor */
|
||||
sms.orig_view= v3d->view;
|
||||
v3d->view= 0;
|
||||
sms.orig_view= rv3d->view;
|
||||
rv3d->view= 0;
|
||||
|
||||
/* ensure it shows correct */
|
||||
if(sms.to_camera) v3d->persp= V3D_PERSP;
|
||||
if(sms.to_camera) rv3d->persp= V3D_PERSP;
|
||||
|
||||
/* keep track of running timer! */
|
||||
if(v3d->sms==NULL)
|
||||
v3d->sms= MEM_mallocN(sizeof(struct SmoothViewStore), "smoothview v3d");
|
||||
*v3d->sms= sms;
|
||||
if(v3d->smooth_timer)
|
||||
WM_event_remove_window_timer(CTX_wm_window(C), v3d->smooth_timer);
|
||||
if(rv3d->sms==NULL)
|
||||
rv3d->sms= MEM_mallocN(sizeof(struct SmoothViewStore), "smoothview v3d");
|
||||
*rv3d->sms= sms;
|
||||
if(rv3d->smooth_timer)
|
||||
WM_event_remove_window_timer(CTX_wm_window(C), rv3d->smooth_timer);
|
||||
/* TIMER1 is hardcoded in keymap */
|
||||
v3d->smooth_timer= WM_event_add_window_timer(CTX_wm_window(C), TIMER1, 1.0/30.0); /* max 30 frs/sec */
|
||||
rv3d->smooth_timer= WM_event_add_window_timer(CTX_wm_window(C), TIMER1, 1.0/30.0); /* max 30 frs/sec */
|
||||
|
||||
return;
|
||||
}
|
||||
@ -299,9 +295,9 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
|
||||
|
||||
/* if we get here nothing happens */
|
||||
if(sms.to_camera==0) {
|
||||
VECCOPY(v3d->ofs, sms.new_ofs);
|
||||
QUATCOPY(v3d->viewquat, sms.new_quat);
|
||||
v3d->dist = sms.new_dist;
|
||||
VECCOPY(rv3d->ofs, sms.new_ofs);
|
||||
QUATCOPY(rv3d->viewquat, sms.new_quat);
|
||||
rv3d->dist = sms.new_dist;
|
||||
v3d->lens = sms.new_lens;
|
||||
}
|
||||
ED_region_tag_redraw(CTX_wm_region(C));
|
||||
@ -310,40 +306,41 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
|
||||
/* only meant for timer usage */
|
||||
static int view3d_smoothview_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
View3D *v3d= (View3D *)CTX_wm_space_data(C);
|
||||
struct SmoothViewStore *sms= v3d->sms;
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C);
|
||||
struct SmoothViewStore *sms= rv3d->sms;
|
||||
double step, step_inv;
|
||||
|
||||
/* escape if not our timer */
|
||||
if(v3d->smooth_timer==NULL || v3d->smooth_timer!=event->customdata)
|
||||
if(rv3d->smooth_timer==NULL || rv3d->smooth_timer!=event->customdata)
|
||||
return OPERATOR_PASS_THROUGH;
|
||||
|
||||
step = (v3d->smooth_timer->duration)/sms->time_allowed;
|
||||
step = (rv3d->smooth_timer->duration)/sms->time_allowed;
|
||||
|
||||
/* end timer */
|
||||
if(step >= 1.0f) {
|
||||
|
||||
/* if we went to camera, store the original */
|
||||
if(sms->to_camera) {
|
||||
v3d->persp= V3D_CAMOB;
|
||||
VECCOPY(v3d->ofs, sms->orig_ofs);
|
||||
QUATCOPY(v3d->viewquat, sms->orig_quat);
|
||||
v3d->dist = sms->orig_dist;
|
||||
rv3d->persp= V3D_CAMOB;
|
||||
VECCOPY(rv3d->ofs, sms->orig_ofs);
|
||||
QUATCOPY(rv3d->viewquat, sms->orig_quat);
|
||||
rv3d->dist = sms->orig_dist;
|
||||
v3d->lens = sms->orig_lens;
|
||||
}
|
||||
else {
|
||||
VECCOPY(v3d->ofs, sms->new_ofs);
|
||||
QUATCOPY(v3d->viewquat, sms->new_quat);
|
||||
v3d->dist = sms->new_dist;
|
||||
VECCOPY(rv3d->ofs, sms->new_ofs);
|
||||
QUATCOPY(rv3d->viewquat, sms->new_quat);
|
||||
rv3d->dist = sms->new_dist;
|
||||
v3d->lens = sms->new_lens;
|
||||
}
|
||||
v3d->view= sms->orig_view;
|
||||
rv3d->view= sms->orig_view;
|
||||
|
||||
MEM_freeN(v3d->sms);
|
||||
v3d->sms= NULL;
|
||||
MEM_freeN(rv3d->sms);
|
||||
rv3d->sms= NULL;
|
||||
|
||||
WM_event_remove_window_timer(CTX_wm_window(C), v3d->smooth_timer);
|
||||
v3d->smooth_timer= NULL;
|
||||
WM_event_remove_window_timer(CTX_wm_window(C), rv3d->smooth_timer);
|
||||
rv3d->smooth_timer= NULL;
|
||||
}
|
||||
else {
|
||||
int i;
|
||||
@ -355,11 +352,11 @@ static int view3d_smoothview_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
step_inv = 1.0-step;
|
||||
|
||||
for (i=0; i<3; i++)
|
||||
v3d->ofs[i] = sms->new_ofs[i]*step + sms->orig_ofs[i]*step_inv;
|
||||
rv3d->ofs[i] = sms->new_ofs[i]*step + sms->orig_ofs[i]*step_inv;
|
||||
|
||||
QuatInterpol(v3d->viewquat, sms->orig_quat, sms->new_quat, step);
|
||||
QuatInterpol(rv3d->viewquat, sms->orig_quat, sms->new_quat, step);
|
||||
|
||||
v3d->dist = sms->new_dist*step + sms->orig_dist*step_inv;
|
||||
rv3d->dist = sms->new_dist*step + sms->orig_dist*step_inv;
|
||||
v3d->lens = sms->new_lens*step + sms->orig_lens*step_inv;
|
||||
}
|
||||
|
||||
@ -380,27 +377,25 @@ void VIEW3D_OT_smoothview(wmOperatorType *ot)
|
||||
|
||||
ot->poll= ED_operator_view3d_active;
|
||||
}
|
||||
|
||||
static int view3d_setcameratoview_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
View3D *v3d= sa->spacedata.first;
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C);
|
||||
Object *ob;
|
||||
float dvec[3];
|
||||
|
||||
ob= v3d->camera;
|
||||
dvec[0]= v3d->dist*v3d->viewinv[2][0];
|
||||
dvec[1]= v3d->dist*v3d->viewinv[2][1];
|
||||
dvec[2]= v3d->dist*v3d->viewinv[2][2];
|
||||
dvec[0]= rv3d->dist*rv3d->viewinv[2][0];
|
||||
dvec[1]= rv3d->dist*rv3d->viewinv[2][1];
|
||||
dvec[2]= rv3d->dist*rv3d->viewinv[2][2];
|
||||
|
||||
VECCOPY(ob->loc, dvec);
|
||||
VecSubf(ob->loc, ob->loc, v3d->ofs);
|
||||
v3d->viewquat[0]= -v3d->viewquat[0];
|
||||
/* */
|
||||
/*if (ob->transflag & OB_QUAT) {
|
||||
QUATCOPY(ob->quat, v3d->viewquat);
|
||||
} else {*/
|
||||
QuatToEul(v3d->viewquat, ob->rot);
|
||||
/*}*/
|
||||
v3d->viewquat[0]= -v3d->viewquat[0];
|
||||
rv3d->viewquat[0]= -rv3d->viewquat[0];
|
||||
|
||||
QuatToEul(rv3d->viewquat, ob->rot);
|
||||
rv3d->viewquat[0]= -rv3d->viewquat[0];
|
||||
|
||||
ob->recalc= OB_RECALC_OB;
|
||||
|
||||
@ -409,6 +404,7 @@ static int view3d_setcameratoview_exec(bContext *C, wmOperator *op)
|
||||
return OPERATOR_FINISHED;
|
||||
|
||||
}
|
||||
|
||||
void VIEW3D_OT_setcameratoview(wmOperatorType *ot)
|
||||
{
|
||||
|
||||
@ -426,23 +422,24 @@ void VIEW3D_OT_setcameratoview(wmOperatorType *ot)
|
||||
/* create intersection coordinates in view Z direction at mouse coordinates */
|
||||
void viewline(ARegion *ar, View3D *v3d, short mval[2], float ray_start[3], float ray_end[3])
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float vec[4];
|
||||
|
||||
if(v3d->persp != V3D_ORTHO){
|
||||
if(rv3d->persp != V3D_ORTHO){
|
||||
vec[0]= 2.0f * mval[0] / ar->winx - 1;
|
||||
vec[1]= 2.0f * mval[1] / ar->winy - 1;
|
||||
vec[2]= -1.0f;
|
||||
vec[3]= 1.0f;
|
||||
|
||||
Mat4MulVec4fl(v3d->persinv, vec);
|
||||
Mat4MulVec4fl(rv3d->persinv, vec);
|
||||
VecMulf(vec, 1.0f / vec[3]);
|
||||
|
||||
VECCOPY(ray_start, v3d->viewinv[3]);
|
||||
VECCOPY(ray_start, rv3d->viewinv[3]);
|
||||
VECSUB(vec, vec, ray_start);
|
||||
Normalize(vec);
|
||||
|
||||
VECADDFAC(ray_start, v3d->viewinv[3], vec, v3d->near);
|
||||
VECADDFAC(ray_end, v3d->viewinv[3], vec, v3d->far);
|
||||
VECADDFAC(ray_start, rv3d->viewinv[3], vec, v3d->near);
|
||||
VECADDFAC(ray_end, rv3d->viewinv[3], vec, v3d->far);
|
||||
}
|
||||
else {
|
||||
vec[0] = 2.0f * mval[0] / ar->winx - 1;
|
||||
@ -450,10 +447,10 @@ void viewline(ARegion *ar, View3D *v3d, short mval[2], float ray_start[3], float
|
||||
vec[2] = 0.0f;
|
||||
vec[3] = 1.0f;
|
||||
|
||||
Mat4MulVec4fl(v3d->persinv, vec);
|
||||
Mat4MulVec4fl(rv3d->persinv, vec);
|
||||
|
||||
VECADDFAC(ray_start, vec, v3d->viewinv[2], 1000.0f);
|
||||
VECADDFAC(ray_end, vec, v3d->viewinv[2], -1000.0f);
|
||||
VECADDFAC(ray_start, vec, rv3d->viewinv[2], 1000.0f);
|
||||
VECADDFAC(ray_end, vec, rv3d->viewinv[2], -1000.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -468,38 +465,40 @@ void viewray(ARegion *ar, View3D *v3d, short mval[2], float ray_start[3], float
|
||||
}
|
||||
|
||||
|
||||
void initgrabz(View3D *v3d, float x, float y, float z)
|
||||
void initgrabz(RegionView3D *rv3d, float x, float y, float z)
|
||||
{
|
||||
if(v3d==NULL) return;
|
||||
v3d->zfac= v3d->persmat[0][3]*x+ v3d->persmat[1][3]*y+ v3d->persmat[2][3]*z+ v3d->persmat[3][3];
|
||||
if(rv3d==NULL) return;
|
||||
rv3d->zfac= rv3d->persmat[0][3]*x+ rv3d->persmat[1][3]*y+ rv3d->persmat[2][3]*z+ rv3d->persmat[3][3];
|
||||
|
||||
/* if x,y,z is exactly the viewport offset, zfac is 0 and we don't want that
|
||||
* (accounting for near zero values)
|
||||
* */
|
||||
if (v3d->zfac < 1.e-6f && v3d->zfac > -1.e-6f) v3d->zfac = 1.0f;
|
||||
if (rv3d->zfac < 1.e-6f && rv3d->zfac > -1.e-6f) rv3d->zfac = 1.0f;
|
||||
|
||||
/* Negative zfac means x, y, z was behind the camera (in perspective).
|
||||
* This gives flipped directions, so revert back to ok default case.
|
||||
*/
|
||||
if (v3d->zfac < 0.0f) v3d->zfac = 1.0f;
|
||||
if (rv3d->zfac < 0.0f) rv3d->zfac = 1.0f;
|
||||
}
|
||||
|
||||
void window_to_3d(ARegion *ar, View3D *v3d, float *vec, short mx, short my)
|
||||
void window_to_3d(ARegion *ar, float *vec, short mx, short my)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
|
||||
/* always call initgrabz */
|
||||
float dx, dy;
|
||||
|
||||
dx= 2.0f*mx*v3d->zfac/ar->winx;
|
||||
dy= 2.0f*my*v3d->zfac/ar->winy;
|
||||
dx= 2.0f*mx*rv3d->zfac/ar->winx;
|
||||
dy= 2.0f*my*rv3d->zfac/ar->winy;
|
||||
|
||||
vec[0]= (v3d->persinv[0][0]*dx + v3d->persinv[1][0]*dy);
|
||||
vec[1]= (v3d->persinv[0][1]*dx + v3d->persinv[1][1]*dy);
|
||||
vec[2]= (v3d->persinv[0][2]*dx + v3d->persinv[1][2]*dy);
|
||||
vec[0]= (rv3d->persinv[0][0]*dx + rv3d->persinv[1][0]*dy);
|
||||
vec[1]= (rv3d->persinv[0][1]*dx + rv3d->persinv[1][1]*dy);
|
||||
vec[2]= (rv3d->persinv[0][2]*dx + rv3d->persinv[1][2]*dy);
|
||||
}
|
||||
|
||||
float read_cached_depth(ViewContext *vc, int x, int y)
|
||||
{
|
||||
ViewDepths *vd = vc->v3d->depths;
|
||||
ViewDepths *vd = vc->rv3d->depths;
|
||||
|
||||
y -= vc->ar->winrct.ymin;
|
||||
|
||||
@ -511,29 +510,30 @@ float read_cached_depth(ViewContext *vc, int x, int y)
|
||||
|
||||
void request_depth_update(ViewContext *vc)
|
||||
{
|
||||
if(vc->v3d->depths)
|
||||
vc->v3d->depths->damaged= 1;
|
||||
if(vc->rv3d->depths)
|
||||
vc->rv3d->depths->damaged= 1;
|
||||
}
|
||||
|
||||
void view3d_get_object_project_mat(View3D *v3d, Object *ob, float pmat[4][4], float vmat[4][4])
|
||||
void view3d_get_object_project_mat(RegionView3D *rv3d, Object *ob, float pmat[4][4], float vmat[4][4])
|
||||
{
|
||||
Mat4MulMat4(vmat, ob->obmat, v3d->viewmat);
|
||||
Mat4MulMat4(pmat, vmat, v3d->winmat);
|
||||
Mat4MulMat4(vmat, ob->obmat, rv3d->viewmat);
|
||||
Mat4MulMat4(pmat, vmat, rv3d->winmat);
|
||||
Mat4CpyMat4(vmat, ob->obmat);
|
||||
}
|
||||
|
||||
/* projectmat brings it to window coords, wmat to rotated world space */
|
||||
void view3d_project_short_clip(ARegion *ar, View3D *v3d, float *vec, short *adr, float projmat[4][4], float wmat[4][4])
|
||||
void view3d_project_short_clip(ARegion *ar, float *vec, short *adr, float projmat[4][4], float wmat[4][4])
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float fx, fy, vec4[4];
|
||||
|
||||
adr[0]= IS_CLIPPED;
|
||||
|
||||
/* clipplanes in eye space */
|
||||
if(v3d->flag & V3D_CLIPPING) {
|
||||
if(rv3d->rflag & RV3D_CLIPPING) {
|
||||
VECCOPY(vec4, vec);
|
||||
Mat4MulVecfl(wmat, vec4);
|
||||
if(view3d_test_clipping(v3d, vec4))
|
||||
if(view3d_test_clipping(rv3d, vec4))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -602,7 +602,7 @@ void view3d_project_float(ARegion *ar, float *vec, float *adr, float mat[4][4])
|
||||
}
|
||||
}
|
||||
|
||||
int boundbox_clip(View3D *v3d, float obmat[][4], BoundBox *bb)
|
||||
int boundbox_clip(RegionView3D *rv3d, float obmat[][4], BoundBox *bb)
|
||||
{
|
||||
/* return 1: draw */
|
||||
|
||||
@ -613,7 +613,7 @@ int boundbox_clip(View3D *v3d, float obmat[][4], BoundBox *bb)
|
||||
if(bb==NULL) return 1;
|
||||
if(bb->flag & OB_BB_DISABLED) return 1;
|
||||
|
||||
Mat4MulMat4(mat, obmat, v3d->persmat);
|
||||
Mat4MulMat4(mat, obmat, rv3d->persmat);
|
||||
|
||||
for(a=0; a<8; a++) {
|
||||
VECCOPY(vec, bb->vec[a]);
|
||||
@ -637,20 +637,21 @@ int boundbox_clip(View3D *v3d, float obmat[][4], BoundBox *bb)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void project_short(ARegion *ar, View3D *v3d, float *vec, short *adr) /* clips */
|
||||
void project_short(ARegion *ar, float *vec, short *adr) /* clips */
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float fx, fy, vec4[4];
|
||||
|
||||
adr[0]= IS_CLIPPED;
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING) {
|
||||
if(view3d_test_clipping(v3d, vec))
|
||||
if(rv3d->rflag & RV3D_CLIPPING) {
|
||||
if(view3d_test_clipping(rv3d, vec))
|
||||
return;
|
||||
}
|
||||
|
||||
VECCOPY(vec4, vec);
|
||||
vec4[3]= 1.0;
|
||||
Mat4MulVec4fl(v3d->persmat, vec4);
|
||||
Mat4MulVec4fl(rv3d->persmat, vec4);
|
||||
|
||||
if( vec4[3]>BL_NEAR_CLIP ) { /* 0.001 is the NEAR clipping cutoff for picking */
|
||||
fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
|
||||
@ -667,15 +668,16 @@ void project_short(ARegion *ar, View3D *v3d, float *vec, short *adr) /* clips */
|
||||
}
|
||||
}
|
||||
|
||||
void project_int(ARegion *ar, View3D *v3d, float *vec, int *adr)
|
||||
void project_int(ARegion *ar, float *vec, int *adr)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float fx, fy, vec4[4];
|
||||
|
||||
adr[0]= (int)2140000000.0f;
|
||||
VECCOPY(vec4, vec);
|
||||
vec4[3]= 1.0;
|
||||
|
||||
Mat4MulVec4fl(v3d->persmat, vec4);
|
||||
Mat4MulVec4fl(rv3d->persmat, vec4);
|
||||
|
||||
if( vec4[3]>BL_NEAR_CLIP ) { /* 0.001 is the NEAR clipping cutoff for picking */
|
||||
fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
|
||||
@ -691,14 +693,15 @@ void project_int(ARegion *ar, View3D *v3d, float *vec, int *adr)
|
||||
}
|
||||
}
|
||||
|
||||
void project_int_noclip(ARegion *ar, View3D *v3d, float *vec, int *adr)
|
||||
void project_int_noclip(ARegion *ar, float *vec, int *adr)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float fx, fy, vec4[4];
|
||||
|
||||
VECCOPY(vec4, vec);
|
||||
vec4[3]= 1.0;
|
||||
|
||||
Mat4MulVec4fl(v3d->persmat, vec4);
|
||||
Mat4MulVec4fl(rv3d->persmat, vec4);
|
||||
|
||||
if( fabs(vec4[3]) > BL_NEAR_CLIP ) {
|
||||
fx = (ar->winx/2)*(1 + vec4[0]/vec4[3]);
|
||||
@ -714,15 +717,16 @@ void project_int_noclip(ARegion *ar, View3D *v3d, float *vec, int *adr)
|
||||
}
|
||||
}
|
||||
|
||||
void project_short_noclip(ARegion *ar, View3D *v3d, float *vec, short *adr)
|
||||
void project_short_noclip(ARegion *ar, float *vec, short *adr)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float fx, fy, vec4[4];
|
||||
|
||||
adr[0]= IS_CLIPPED;
|
||||
VECCOPY(vec4, vec);
|
||||
vec4[3]= 1.0;
|
||||
|
||||
Mat4MulVec4fl(v3d->persmat, vec4);
|
||||
Mat4MulVec4fl(rv3d->persmat, vec4);
|
||||
|
||||
if( vec4[3]>BL_NEAR_CLIP ) { /* 0.001 is the NEAR clipping cutoff for picking */
|
||||
fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
|
||||
@ -739,15 +743,16 @@ void project_short_noclip(ARegion *ar, View3D *v3d, float *vec, short *adr)
|
||||
}
|
||||
}
|
||||
|
||||
void project_float(ARegion *ar, View3D *v3d, float *vec, float *adr)
|
||||
void project_float(ARegion *ar, float *vec, float *adr)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float vec4[4];
|
||||
|
||||
adr[0]= IS_CLIPPED;
|
||||
VECCOPY(vec4, vec);
|
||||
vec4[3]= 1.0;
|
||||
|
||||
Mat4MulVec4fl(v3d->persmat, vec4);
|
||||
Mat4MulVec4fl(rv3d->persmat, vec4);
|
||||
|
||||
if( vec4[3]>BL_NEAR_CLIP ) {
|
||||
adr[0] = (float)(ar->winx/2.0)+(ar->winx/2.0)*vec4[0]/vec4[3];
|
||||
@ -755,14 +760,15 @@ void project_float(ARegion *ar, View3D *v3d, float *vec, float *adr)
|
||||
}
|
||||
}
|
||||
|
||||
void project_float_noclip(ARegion *ar, View3D *v3d, float *vec, float *adr)
|
||||
void project_float_noclip(ARegion *ar, float *vec, float *adr)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float vec4[4];
|
||||
|
||||
VECCOPY(vec4, vec);
|
||||
vec4[3]= 1.0;
|
||||
|
||||
Mat4MulVec4fl(v3d->persmat, vec4);
|
||||
Mat4MulVec4fl(rv3d->persmat, vec4);
|
||||
|
||||
if( fabs(vec4[3]) > BL_NEAR_CLIP ) {
|
||||
adr[0] = (float)(ar->winx/2.0)+(ar->winx/2.0)*vec4[0]/vec4[3];
|
||||
@ -778,7 +784,7 @@ void project_float_noclip(ARegion *ar, View3D *v3d, float *vec, float *adr)
|
||||
|
||||
|
||||
/* also exposed in previewrender.c */
|
||||
int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize)
|
||||
int get_view3d_viewplane(View3D *v3d, RegionView3D *rv3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize)
|
||||
{
|
||||
Camera *cam=NULL;
|
||||
float lens, fac, x1, y1, x2, y2;
|
||||
@ -790,7 +796,7 @@ int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, flo
|
||||
*clipsta= v3d->near;
|
||||
*clipend= v3d->far;
|
||||
|
||||
if(v3d->persp==V3D_CAMOB) {
|
||||
if(rv3d->persp==V3D_CAMOB) {
|
||||
if(v3d->camera) {
|
||||
if(v3d->camera->type==OB_LAMP ) {
|
||||
Lamp *la;
|
||||
@ -813,13 +819,13 @@ int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, flo
|
||||
}
|
||||
}
|
||||
|
||||
if(v3d->persp==V3D_ORTHO) {
|
||||
if(winx>winy) x1= -v3d->dist;
|
||||
else x1= -winx*v3d->dist/winy;
|
||||
if(rv3d->persp==V3D_ORTHO) {
|
||||
if(winx>winy) x1= -rv3d->dist;
|
||||
else x1= -winx*rv3d->dist/winy;
|
||||
x2= -x1;
|
||||
|
||||
if(winx>winy) y1= -winy*v3d->dist/winx;
|
||||
else y1= -v3d->dist;
|
||||
if(winx>winy) y1= -winy*rv3d->dist/winx;
|
||||
else y1= -rv3d->dist;
|
||||
y2= -y1;
|
||||
|
||||
*clipend *= 0.5; // otherwise too extreme low zbuffer quality
|
||||
@ -828,8 +834,8 @@ int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, flo
|
||||
}
|
||||
else {
|
||||
/* fac for zoom, also used for camdx */
|
||||
if(v3d->persp==V3D_CAMOB) {
|
||||
fac= (1.41421+( (float)v3d->camzoom )/50.0);
|
||||
if(rv3d->persp==V3D_CAMOB) {
|
||||
fac= (1.41421+( (float)rv3d->camzoom )/50.0);
|
||||
fac*= fac;
|
||||
}
|
||||
else fac= 2.0;
|
||||
@ -862,8 +868,8 @@ int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, flo
|
||||
}
|
||||
/* cam view offset */
|
||||
if(cam) {
|
||||
float dx= 0.5*fac*v3d->camdx*(x2-x1);
|
||||
float dy= 0.5*fac*v3d->camdy*(y2-y1);
|
||||
float dx= 0.5*fac*rv3d->camdx*(x2-x1);
|
||||
float dy= 0.5*fac*rv3d->camdy*(y2-y1);
|
||||
x1+= dx;
|
||||
x2+= dx;
|
||||
y1+= dy;
|
||||
@ -894,13 +900,14 @@ int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, flo
|
||||
|
||||
|
||||
/* important to not set windows active in here, can be renderwin for example */
|
||||
void setwinmatrixview3d(View3D *v3d, int winx, int winy, rctf *rect) /* rect: for picking */
|
||||
void setwinmatrixview3d(ARegion *ar, View3D *v3d, rctf *rect) /* rect: for picking */
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
rctf viewplane;
|
||||
float clipsta, clipend, x1, y1, x2, y2;
|
||||
int orth;
|
||||
|
||||
orth= get_view3d_viewplane(v3d, winx, winy, &viewplane, &clipsta, &clipend, NULL);
|
||||
orth= get_view3d_viewplane(v3d, rv3d, ar->winx, ar->winy, &viewplane, &clipsta, &clipend, NULL);
|
||||
// printf("%d %d %f %f %f %f %f %f\n", winx, winy, viewplane.xmin, viewplane.ymin, viewplane.xmax, viewplane.ymax, clipsta, clipend);
|
||||
x1= viewplane.xmin;
|
||||
y1= viewplane.ymin;
|
||||
@ -908,13 +915,13 @@ void setwinmatrixview3d(View3D *v3d, int winx, int winy, rctf *rect) /* rect: f
|
||||
y2= viewplane.ymax;
|
||||
|
||||
if(rect) { /* picking */
|
||||
rect->xmin/= (float)winx;
|
||||
rect->xmin/= (float)ar->winx;
|
||||
rect->xmin= x1+rect->xmin*(x2-x1);
|
||||
rect->ymin/= (float)winy;
|
||||
rect->ymin/= (float)ar->winy;
|
||||
rect->ymin= y1+rect->ymin*(y2-y1);
|
||||
rect->xmax/= (float)winx;
|
||||
rect->xmax/= (float)ar->winx;
|
||||
rect->xmax= x1+rect->xmax*(x2-x1);
|
||||
rect->ymax/= (float)winy;
|
||||
rect->ymax/= (float)ar->winy;
|
||||
rect->ymax= y1+rect->ymax*(y2-y1);
|
||||
|
||||
if(orth) wmOrtho(rect->xmin, rect->xmax, rect->ymin, rect->ymax, -clipend, clipend);
|
||||
@ -928,71 +935,71 @@ void setwinmatrixview3d(View3D *v3d, int winx, int winy, rctf *rect) /* rect: f
|
||||
|
||||
/* not sure what this was for? (ton) */
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
wmGetMatrix(v3d->winmat);
|
||||
wmGetMatrix(rv3d->winmat);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
|
||||
static void obmat_to_viewmat(Scene *scene, View3D *v3d, Object *ob, short smooth)
|
||||
static void obmat_to_viewmat(View3D *v3d, RegionView3D *rv3d, Object *ob, short smooth)
|
||||
{
|
||||
float bmat[4][4];
|
||||
float tmat[3][3];
|
||||
|
||||
v3d->view= 0; /* dont show the grid */
|
||||
rv3d->view= 0; /* dont show the grid */
|
||||
|
||||
Mat4CpyMat4(bmat, ob->obmat);
|
||||
Mat4Ortho(bmat);
|
||||
Mat4Invert(v3d->viewmat, bmat);
|
||||
Mat4Invert(rv3d->viewmat, bmat);
|
||||
|
||||
/* view quat calculation, needed for add object */
|
||||
Mat3CpyMat4(tmat, v3d->viewmat);
|
||||
Mat3CpyMat4(tmat, rv3d->viewmat);
|
||||
if (smooth) {
|
||||
float new_quat[4];
|
||||
if (v3d->persp==V3D_CAMOB && v3d->camera) {
|
||||
if (rv3d->persp==V3D_CAMOB && v3d->camera) {
|
||||
/* were from a camera view */
|
||||
|
||||
float orig_ofs[3];
|
||||
float orig_dist= v3d->dist;
|
||||
float orig_dist= rv3d->dist;
|
||||
float orig_lens= v3d->lens;
|
||||
VECCOPY(orig_ofs, v3d->ofs);
|
||||
VECCOPY(orig_ofs, rv3d->ofs);
|
||||
|
||||
/* Switch from camera view */
|
||||
Mat3ToQuat(tmat, new_quat);
|
||||
|
||||
v3d->persp=V3D_PERSP;
|
||||
v3d->dist= 0.0;
|
||||
rv3d->persp=V3D_PERSP;
|
||||
rv3d->dist= 0.0;
|
||||
|
||||
view_settings_from_ob(scene, v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens);
|
||||
view_settings_from_ob(v3d->camera, rv3d->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 */
|
||||
rv3d->persp=V3D_CAMOB; /* just to be polite, not needed */
|
||||
|
||||
} else {
|
||||
Mat3ToQuat(tmat, new_quat);
|
||||
smooth_view(NULL, NULL, NULL, NULL, new_quat, NULL, NULL); // XXX
|
||||
}
|
||||
} else {
|
||||
Mat3ToQuat(tmat, v3d->viewquat);
|
||||
Mat3ToQuat(tmat, rv3d->viewquat);
|
||||
}
|
||||
}
|
||||
|
||||
/* dont set windows active in in here, is used by renderwin too */
|
||||
void setviewmatrixview3d(Scene *scene, View3D *v3d)
|
||||
void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d)
|
||||
{
|
||||
if(v3d->persp==V3D_CAMOB) { /* obs/camera */
|
||||
if(rv3d->persp==V3D_CAMOB) { /* obs/camera */
|
||||
if(v3d->camera) {
|
||||
where_is_object(scene, v3d->camera);
|
||||
obmat_to_viewmat(scene, v3d, v3d->camera, 0);
|
||||
obmat_to_viewmat(v3d, rv3d, v3d->camera, 0);
|
||||
}
|
||||
else {
|
||||
QuatToMat4(v3d->viewquat, v3d->viewmat);
|
||||
v3d->viewmat[3][2]-= v3d->dist;
|
||||
QuatToMat4(rv3d->viewquat, rv3d->viewmat);
|
||||
rv3d->viewmat[3][2]-= rv3d->dist;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
QuatToMat4(v3d->viewquat, v3d->viewmat);
|
||||
if(v3d->persp==V3D_PERSP) v3d->viewmat[3][2]-= v3d->dist;
|
||||
QuatToMat4(rv3d->viewquat, rv3d->viewmat);
|
||||
if(rv3d->persp==V3D_PERSP) rv3d->viewmat[3][2]-= rv3d->dist;
|
||||
if(v3d->ob_centre) {
|
||||
Object *ob= v3d->ob_centre;
|
||||
float vec[3];
|
||||
@ -1005,9 +1012,9 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d)
|
||||
Mat4MulVecfl(ob->obmat, vec);
|
||||
}
|
||||
}
|
||||
i_translate(-vec[0], -vec[1], -vec[2], v3d->viewmat);
|
||||
i_translate(-vec[0], -vec[1], -vec[2], rv3d->viewmat);
|
||||
}
|
||||
else i_translate(v3d->ofs[0], v3d->ofs[1], v3d->ofs[2], v3d->viewmat);
|
||||
else i_translate(rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2], rv3d->viewmat);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1040,16 +1047,16 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b
|
||||
rect.ymax= input->ymax;
|
||||
}
|
||||
|
||||
setwinmatrixview3d(v3d, ar->winx, ar->winy, &rect);
|
||||
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
|
||||
setwinmatrixview3d(ar, v3d, &rect);
|
||||
Mat4MulMat4(vc->rv3d->persmat, vc->rv3d->viewmat, vc->rv3d->winmat);
|
||||
|
||||
if(v3d->drawtype > OB_WIRE) {
|
||||
v3d->zbuf= TRUE;
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
view3d_set_clipping(v3d);
|
||||
if(vc->rv3d->rflag & RV3D_CLIPPING)
|
||||
view3d_set_clipping(vc->rv3d);
|
||||
|
||||
glSelectBuffer( bufsize, (GLuint *)buffer);
|
||||
glRenderMode(GL_SELECT);
|
||||
@ -1107,8 +1114,8 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b
|
||||
hits= glRenderMode(GL_RENDER);
|
||||
|
||||
G.f &= ~G_PICKSEL;
|
||||
setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL);
|
||||
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
|
||||
setwinmatrixview3d(ar, v3d, NULL);
|
||||
Mat4MulMat4(vc->rv3d->persmat, vc->rv3d->viewmat, vc->rv3d->winmat);
|
||||
|
||||
if(v3d->drawtype > OB_WIRE) {
|
||||
v3d->zbuf= 0;
|
||||
@ -1116,7 +1123,7 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b
|
||||
}
|
||||
// XXX persp(PERSP_WIN);
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
if(vc->rv3d->rflag & RV3D_CLIPPING)
|
||||
view3d_clr_clipping();
|
||||
|
||||
if(hits<0) printf("Too many objects in select buffer\n"); // XXX make error message
|
||||
@ -1162,6 +1169,7 @@ static unsigned int free_localbit(void)
|
||||
|
||||
void initlocalview(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
Base *base;
|
||||
float size = 0.0, min[3], max[3], afm[3];
|
||||
unsigned int locallay;
|
||||
@ -1210,25 +1218,25 @@ void initlocalview(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
v3d->localvd= MEM_mallocN(sizeof(View3D), "localview");
|
||||
memcpy(v3d->localvd, v3d, sizeof(View3D));
|
||||
|
||||
v3d->ofs[0]= -(min[0]+max[0])/2.0;
|
||||
v3d->ofs[1]= -(min[1]+max[1])/2.0;
|
||||
v3d->ofs[2]= -(min[2]+max[2])/2.0;
|
||||
rv3d->ofs[0]= -(min[0]+max[0])/2.0;
|
||||
rv3d->ofs[1]= -(min[1]+max[1])/2.0;
|
||||
rv3d->ofs[2]= -(min[2]+max[2])/2.0;
|
||||
|
||||
v3d->dist= size;
|
||||
rv3d->dist= size;
|
||||
|
||||
// correction for window aspect ratio
|
||||
if(ar->winy>2 && ar->winx>2) {
|
||||
size= (float)ar->winx/(float)ar->winy;
|
||||
if(size<1.0) size= 1.0/size;
|
||||
v3d->dist*= size;
|
||||
rv3d->dist*= size;
|
||||
}
|
||||
|
||||
if (v3d->persp==V3D_CAMOB) v3d->persp= V3D_PERSP;
|
||||
if (rv3d->persp==V3D_CAMOB) rv3d->persp= V3D_PERSP;
|
||||
if (v3d->near> 0.1) v3d->near= 0.1;
|
||||
|
||||
v3d->cursor[0]= -v3d->ofs[0];
|
||||
v3d->cursor[1]= -v3d->ofs[1];
|
||||
v3d->cursor[2]= -v3d->ofs[2];
|
||||
v3d->cursor[0]= -rv3d->ofs[0];
|
||||
v3d->cursor[1]= -rv3d->ofs[1];
|
||||
v3d->cursor[2]= -rv3d->ofs[2];
|
||||
|
||||
v3d->lay= locallay;
|
||||
|
||||
@ -1259,16 +1267,12 @@ void restore_localviewdata(View3D *vd)
|
||||
if(vd->localvd==0) return;
|
||||
|
||||
VECCOPY(vd->ofs, vd->localvd->ofs);
|
||||
vd->dist= vd->localvd->dist;
|
||||
vd->persp= vd->localvd->persp;
|
||||
vd->view= vd->localvd->view;
|
||||
vd->near= vd->localvd->near;
|
||||
vd->far= vd->localvd->far;
|
||||
vd->lay= vd->localvd->lay;
|
||||
vd->layact= vd->localvd->layact;
|
||||
vd->drawtype= vd->localvd->drawtype;
|
||||
vd->camera= vd->localvd->camera;
|
||||
QUATCOPY(vd->viewquat, vd->localvd->viewquat);
|
||||
|
||||
}
|
||||
|
||||
@ -1315,7 +1319,7 @@ void endlocalview(Scene *scene, ScrArea *sa)
|
||||
}
|
||||
}
|
||||
|
||||
void view3d_align_axis_to_vector(Scene *scene, View3D *v3d, int axisidx, float vec[3])
|
||||
void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, float vec[3])
|
||||
{
|
||||
float alignaxis[3] = {0.0, 0.0, 0.0};
|
||||
float norm[3], axis[3], angle, new_quat[4];
|
||||
@ -1330,21 +1334,21 @@ void view3d_align_axis_to_vector(Scene *scene, View3D *v3d, int axisidx, float v
|
||||
Crossf(axis, alignaxis, norm);
|
||||
VecRotToQuat(axis, -angle, new_quat);
|
||||
|
||||
v3d->view= 0;
|
||||
rv3d->view= 0;
|
||||
|
||||
if (v3d->persp==V3D_CAMOB && v3d->camera) {
|
||||
if (rv3d->persp==V3D_CAMOB && v3d->camera) {
|
||||
/* switch out of camera view */
|
||||
float orig_ofs[3];
|
||||
float orig_dist= v3d->dist;
|
||||
float orig_dist= rv3d->dist;
|
||||
float orig_lens= v3d->lens;
|
||||
|
||||
VECCOPY(orig_ofs, v3d->ofs);
|
||||
v3d->persp= V3D_PERSP;
|
||||
v3d->dist= 0.0;
|
||||
view_settings_from_ob(scene, v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens);
|
||||
VECCOPY(orig_ofs, rv3d->ofs);
|
||||
rv3d->persp= V3D_PERSP;
|
||||
rv3d->dist= 0.0;
|
||||
view_settings_from_ob(v3d->camera, rv3d->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 */
|
||||
if (rv3d->persp==V3D_CAMOB) rv3d->persp= V3D_PERSP; /* switch out of camera mode */
|
||||
smooth_view(NULL, NULL, NULL, NULL, new_quat, NULL, NULL); // XXX
|
||||
}
|
||||
}
|
||||
|
@ -781,7 +781,7 @@ static int calc_vp_alpha_dl(VPaint *vp, ViewContext *vc, float vpimat[][3], floa
|
||||
short vertco[2];
|
||||
|
||||
if(vp->flag & VP_SOFT) {
|
||||
project_short_noclip(vc->ar, vc->v3d, vert_nor, vertco);
|
||||
project_short_noclip(vc->ar, vert_nor, vertco);
|
||||
dx= mval[0]-vertco[0];
|
||||
dy= mval[1]-vertco[1];
|
||||
|
||||
@ -975,20 +975,20 @@ void sample_wpaint(Scene *scene, ARegion *ar, View3D *v3d, int mode)
|
||||
else {
|
||||
/* calc 3 or 4 corner weights */
|
||||
dm->getVertCo(dm, mface->v1, co);
|
||||
project_short_noclip(ar, v3d, co, sco);
|
||||
project_short_noclip(ar, co, sco);
|
||||
w1= ((mval[0]-sco[0])*(mval[0]-sco[0]) + (mval[1]-sco[1])*(mval[1]-sco[1]));
|
||||
|
||||
dm->getVertCo(dm, mface->v2, co);
|
||||
project_short_noclip(ar, v3d, co, sco);
|
||||
project_short_noclip(ar, co, sco);
|
||||
w2= ((mval[0]-sco[0])*(mval[0]-sco[0]) + (mval[1]-sco[1])*(mval[1]-sco[1]));
|
||||
|
||||
dm->getVertCo(dm, mface->v3, co);
|
||||
project_short_noclip(ar, v3d, co, sco);
|
||||
project_short_noclip(ar, co, sco);
|
||||
w3= ((mval[0]-sco[0])*(mval[0]-sco[0]) + (mval[1]-sco[1])*(mval[1]-sco[1]));
|
||||
|
||||
if(mface->v4) {
|
||||
dm->getVertCo(dm, mface->v4, co);
|
||||
project_short_noclip(ar, v3d, co, sco);
|
||||
project_short_noclip(ar, co, sco);
|
||||
w4= ((mval[0]-sco[0])*(mval[0]-sco[0]) + (mval[1]-sco[1])*(mval[1]-sco[1]));
|
||||
}
|
||||
else w4= 1.0e10;
|
||||
@ -1235,9 +1235,9 @@ static int wpaint_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
/* load projection matrix */
|
||||
wmMultMatrix(ob->obmat);
|
||||
wmGetSingleMatrix(mat);
|
||||
wmLoadMatrix(wpd->vc.v3d->viewmat);
|
||||
wmLoadMatrix(wpd->vc.rv3d->viewmat);
|
||||
|
||||
MTC_Mat4SwapMat4(wpd->vc.v3d->persmat, mat);
|
||||
MTC_Mat4SwapMat4(wpd->vc.rv3d->persmat, mat);
|
||||
|
||||
mval[0]= event->x - vc->ar->winrct.xmin;
|
||||
mval[1]= event->y - vc->ar->winrct.ymin;
|
||||
@ -1357,7 +1357,7 @@ static int wpaint_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
MTC_Mat4SwapMat4(vc->v3d->persmat, mat);
|
||||
MTC_Mat4SwapMat4(vc->rv3d->persmat, mat);
|
||||
|
||||
DAG_object_flush_update(vc->scene, ob, OB_RECALC_DATA);
|
||||
ED_region_tag_redraw(vc->ar);
|
||||
@ -1431,7 +1431,7 @@ static int wpaint_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
// if(ob->lay & v3d->lay); else error("Active object is not in this layer");
|
||||
|
||||
/* imat for normals */
|
||||
Mat4MulMat4(mat, ob->obmat, wpd->vc.v3d->viewmat);
|
||||
Mat4MulMat4(mat, ob->obmat, wpd->vc.rv3d->viewmat);
|
||||
Mat4Invert(imat, mat);
|
||||
Mat3CpyMat4(wpd->wpimat, imat);
|
||||
|
||||
@ -1662,7 +1662,7 @@ static int vpaint_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
/* load projection matrix */
|
||||
wmMultMatrix(ob->obmat);
|
||||
wmGetSingleMatrix(mat);
|
||||
wmLoadMatrix(vc->v3d->viewmat);
|
||||
wmLoadMatrix(vc->rv3d->viewmat);
|
||||
|
||||
mval[0]= event->x - vc->ar->winrct.xmin;
|
||||
mval[1]= event->y - vc->ar->winrct.ymin;
|
||||
@ -1677,7 +1677,7 @@ static int vpaint_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
else totindex= 0;
|
||||
}
|
||||
|
||||
MTC_Mat4SwapMat4(vc->v3d->persmat, mat);
|
||||
MTC_Mat4SwapMat4(vc->rv3d->persmat, mat);
|
||||
|
||||
if(vp->flag & VP_COLINDEX) {
|
||||
for(index=0; index<totindex; index++) {
|
||||
@ -1737,7 +1737,7 @@ static int vpaint_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
MTC_Mat4SwapMat4(vc->v3d->persmat, mat);
|
||||
MTC_Mat4SwapMat4(vc->rv3d->persmat, mat);
|
||||
|
||||
do_shared_vertexcol(me);
|
||||
|
||||
@ -1779,7 +1779,7 @@ static int vpaint_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
copy_vpaint_prev(vp, (unsigned int *)me->mcol, me->totface);
|
||||
|
||||
/* some old cruft to sort out later */
|
||||
Mat4MulMat4(mat, ob->obmat, vpd->vc.v3d->viewmat);
|
||||
Mat4MulMat4(mat, ob->obmat, vpd->vc.rv3d->viewmat);
|
||||
Mat4Invert(imat, mat);
|
||||
Mat3CpyMat4(vpd->vpimat, imat);
|
||||
|
||||
|
@ -164,13 +164,13 @@ static void helpline(TransInfo *t, float *vec)
|
||||
void setTransformViewMatrices(TransInfo *t)
|
||||
{
|
||||
if(t->spacetype==SPACE_VIEW3D) {
|
||||
View3D *v3d = t->view;
|
||||
RegionView3D *rv3d = t->ar->regiondata;
|
||||
|
||||
Mat4CpyMat4(t->viewmat, v3d->viewmat);
|
||||
Mat4CpyMat4(t->viewinv, v3d->viewinv);
|
||||
Mat4CpyMat4(t->persmat, v3d->persmat);
|
||||
Mat4CpyMat4(t->persinv, v3d->persinv);
|
||||
t->persp = v3d->persp;
|
||||
Mat4CpyMat4(t->viewmat, rv3d->viewmat);
|
||||
Mat4CpyMat4(t->viewinv, rv3d->viewinv);
|
||||
Mat4CpyMat4(t->persmat, rv3d->persmat);
|
||||
Mat4CpyMat4(t->persinv, rv3d->persinv);
|
||||
t->persp = rv3d->persp;
|
||||
}
|
||||
else {
|
||||
Mat4One(t->viewmat);
|
||||
@ -186,7 +186,7 @@ void setTransformViewMatrices(TransInfo *t)
|
||||
void convertViewVec(TransInfo *t, float *vec, short dx, short dy)
|
||||
{
|
||||
if (t->spacetype==SPACE_VIEW3D) {
|
||||
window_to_3d(t->ar, t->view, vec, dx, dy);
|
||||
window_to_3d(t->ar, vec, dx, dy);
|
||||
}
|
||||
else if(t->spacetype==SPACE_IMAGE) {
|
||||
View2D *v2d = t->view;
|
||||
@ -230,7 +230,7 @@ void convertViewVec(TransInfo *t, float *vec, short dx, short dy)
|
||||
void projectIntView(TransInfo *t, float *vec, int *adr)
|
||||
{
|
||||
if (t->spacetype==SPACE_VIEW3D) {
|
||||
project_int_noclip(t->ar, t->view, vec, adr);
|
||||
project_int_noclip(t->ar, vec, adr);
|
||||
}
|
||||
else if(t->spacetype==SPACE_IMAGE) {
|
||||
float aspx, aspy, v[2];
|
||||
@ -255,7 +255,7 @@ void projectIntView(TransInfo *t, float *vec, int *adr)
|
||||
void projectFloatView(TransInfo *t, float *vec, float *adr)
|
||||
{
|
||||
if (t->spacetype==SPACE_VIEW3D) {
|
||||
project_float_noclip(t->ar, t->view, vec, adr);
|
||||
project_float_noclip(t->ar, vec, adr);
|
||||
}
|
||||
else if(t->spacetype==SPACE_IMAGE) {
|
||||
int a[2];
|
||||
@ -995,9 +995,9 @@ void initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
|
||||
|
||||
if(t->spacetype == SPACE_VIEW3D)
|
||||
{
|
||||
View3D *v3d = t->view;
|
||||
RegionView3D *rv3d = t->ar->regiondata;
|
||||
//calc_manipulator_stats(curarea);
|
||||
Mat3CpyMat4(t->spacemtx, v3d->twmat);
|
||||
Mat3CpyMat4(t->spacemtx, rv3d->twmat);
|
||||
Mat3Ortho(t->spacemtx);
|
||||
|
||||
t->draw_handle = ED_region_draw_cb_activate(t->ar->type, drawTransform, t, REGION_DRAW_POST);
|
||||
|
@ -442,7 +442,7 @@ void flushTransNodes(TransInfo *t);
|
||||
/*********************** exported from transform_manipulator.c ********** */
|
||||
void draw_manipulator_ext(struct ScrArea *sa, int type, char axis, int col, float vec[3], float mat[][3]);
|
||||
int calc_manipulator_stats(struct ScrArea *sa);
|
||||
float get_drawsize(struct View3D *v3d, struct ScrArea *sa, float *co);
|
||||
float get_drawsize(struct ARegion *ar, float *co);
|
||||
|
||||
/*********************** TransData Creation and General Handling *********** */
|
||||
void createTransData(struct bContext *C, TransInfo *t);
|
||||
|
@ -745,9 +745,9 @@ void drawPropCircle(TransInfo *t)
|
||||
|
||||
if (t->spacetype == SPACE_VIEW3D)
|
||||
{
|
||||
View3D *v3d = t->view;
|
||||
RegionView3D *rv3d = t->ar->regiondata;
|
||||
|
||||
Mat4CpyMat4(tmat, v3d->viewmat);
|
||||
Mat4CpyMat4(tmat, rv3d->viewmat);
|
||||
Mat4Invert(imat, tmat);
|
||||
}
|
||||
else
|
||||
|
@ -4269,12 +4269,13 @@ void createTransData(bContext *C, TransInfo *t)
|
||||
#endif
|
||||
else {
|
||||
View3D *v3d = t->view;
|
||||
RegionView3D *rv3d = t->ar->regiondata;
|
||||
|
||||
t->flag &= ~T_PROP_EDIT; /* no proportional edit in object mode */
|
||||
createTransObject(C, t);
|
||||
t->flag |= T_OBJECT;
|
||||
|
||||
if((t->flag & T_OBJECT) && v3d->camera == OBACT && v3d->persp==V3D_CAMOB)
|
||||
if((t->flag & T_OBJECT) && v3d->camera == OBACT && rv3d->persp==V3D_CAMOB)
|
||||
{
|
||||
t->flag |= T_CAMERA;
|
||||
}
|
||||
|
@ -1053,8 +1053,9 @@ void calculateCenter(TransInfo *t)
|
||||
{
|
||||
View3D *v3d = t->view;
|
||||
Scene *scene = t->scene;
|
||||
RegionView3D *rv3d = t->ar->regiondata;
|
||||
|
||||
if(v3d->camera == OBACT && v3d->persp==V3D_CAMOB)
|
||||
if(v3d->camera == OBACT && rv3d->persp==V3D_CAMOB)
|
||||
{
|
||||
float axis[3];
|
||||
/* persinv is nasty, use viewinv instead, always right */
|
||||
@ -1087,10 +1088,10 @@ void calculateCenter(TransInfo *t)
|
||||
|
||||
VECCOPY(vec, t->center);
|
||||
Mat4MulVecfl(ob->obmat, vec);
|
||||
initgrabz(t->view, vec[0], vec[1], vec[2]);
|
||||
initgrabz(t->ar->regiondata, vec[0], vec[1], vec[2]);
|
||||
}
|
||||
else {
|
||||
initgrabz(t->view, t->center[0], t->center[1], t->center[2]);
|
||||
initgrabz(t->ar->regiondata, t->center[0], t->center[1], t->center[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1200,23 +1201,24 @@ TransInfo *BIF_GetTransInfo()
|
||||
return NULL;
|
||||
}
|
||||
|
||||
float get_drawsize(View3D *v3d, ScrArea *sa, float *co)
|
||||
float get_drawsize(ARegion *ar, float *co)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float size, vec[3], len1, len2;
|
||||
|
||||
/* size calculus, depending ortho/persp settings, like initgrabz() */
|
||||
size= v3d->persmat[0][3]*co[0]+ v3d->persmat[1][3]*co[1]+ v3d->persmat[2][3]*co[2]+ v3d->persmat[3][3];
|
||||
size= rv3d->persmat[0][3]*co[0]+ rv3d->persmat[1][3]*co[1]+ rv3d->persmat[2][3]*co[2]+ rv3d->persmat[3][3];
|
||||
|
||||
VECCOPY(vec, v3d->persinv[0]);
|
||||
VECCOPY(vec, rv3d->persinv[0]);
|
||||
len1= Normalize(vec);
|
||||
VECCOPY(vec, v3d->persinv[1]);
|
||||
VECCOPY(vec, rv3d->persinv[1]);
|
||||
len2= Normalize(vec);
|
||||
|
||||
size*= 0.01f*(len1>len2?len1:len2);
|
||||
|
||||
/* correct for window size to make widgets appear fixed size */
|
||||
if(sa->winx > sa->winy) size*= 1000.0f/(float)sa->winx;
|
||||
else size*= 1000.0f/(float)sa->winy;
|
||||
if(ar->winx > ar->winy) size*= 1000.0f/(float)ar->winx;
|
||||
else size*= 1000.0f/(float)ar->winy;
|
||||
|
||||
return size;
|
||||
}
|
||||
|
@ -1347,10 +1347,10 @@ static void draw_manipulator_rotate_cyl(float mat[][4], int moving, int drawflag
|
||||
|
||||
/* ********************************************* */
|
||||
|
||||
static float get_manipulator_drawsize(ScrArea *sa)
|
||||
static float get_manipulator_drawsize(ARegion *ar)
|
||||
{
|
||||
View3D *v3d= sa->spacedata.first;
|
||||
float size = get_drawsize(v3d, v3d->twmat[3]);
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
float size = get_drawsize(ar, rv3d->twmat[3]);
|
||||
|
||||
size*= (float)U.tw_size;
|
||||
|
||||
|
@ -180,7 +180,7 @@ static int transform_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
|
||||
void TFM_OT_transform(struct wmOperatorType *ot)
|
||||
{
|
||||
static const float value[4] = {0, 0, 0};
|
||||
static const float value[4] = {0, 0, 0, 0};
|
||||
static const float mtx[3][3] = {{1, 0, 0},{0, 1, 0},{0, 0, 1}};
|
||||
static EnumPropertyItem transform_mode_types[] = {
|
||||
{TFM_INIT, "INIT", "Init", ""},
|
||||
|
@ -177,7 +177,7 @@ int manageMeshSpace(bContext *C, int confirm, int set) {
|
||||
}
|
||||
|
||||
if (createSpaceNormal(mat, normal) == 0) {
|
||||
error("Cannot use vertex with zero-length normal");
|
||||
// XXX error("Cannot use vertex with zero-length normal");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -189,7 +189,7 @@ int manageMeshSpace(bContext *C, int confirm, int set) {
|
||||
}
|
||||
|
||||
if (createSpaceNormalTangent(mat, normal, plane) == 0) {
|
||||
error("Cannot use zero-length edge");
|
||||
// XXX error("Cannot use zero-length edge");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -201,7 +201,7 @@ int manageMeshSpace(bContext *C, int confirm, int set) {
|
||||
}
|
||||
|
||||
if (createSpaceNormalTangent(mat, normal, plane) == 0) {
|
||||
error("Cannot use zero-area face");
|
||||
// XXX error("Cannot use zero-area face");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -335,7 +335,7 @@ void BIF_removeTransformOrientation(bContext *C, TransformOrientation *target) {
|
||||
|
||||
void BIF_selectTransformOrientation(bContext *C, TransformOrientation *target) {
|
||||
ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
|
||||
View3D *v3d = CTX_wm_area(C)->spacedata.first;
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
TransformOrientation *ts = transform_spaces->first;
|
||||
int i;
|
||||
|
||||
@ -348,7 +348,7 @@ void BIF_selectTransformOrientation(bContext *C, TransformOrientation *target) {
|
||||
}
|
||||
|
||||
void BIF_selectTransformOrientationValue(bContext *C, int orientation) {
|
||||
View3D *v3d = CTX_wm_area(C)->spacedata.first;
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
v3d->twmode = orientation;
|
||||
}
|
||||
|
||||
@ -387,7 +387,8 @@ int BIF_countTransformOrientation(const bContext *C) {
|
||||
|
||||
void applyTransformOrientation(bContext *C, TransInfo *t) {
|
||||
TransformOrientation *ts;
|
||||
View3D *v3d = CTX_wm_area(C)->spacedata.first;
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C);
|
||||
int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
|
||||
int i;
|
||||
|
||||
@ -396,7 +397,7 @@ void applyTransformOrientation(bContext *C, TransInfo *t) {
|
||||
if (selected_index == i) {
|
||||
strcpy(t->spacename, ts->name);
|
||||
Mat3CpyMat3(t->spacemtx, ts->mat);
|
||||
Mat4CpyMat3(v3d->twmat, ts->mat);
|
||||
Mat4CpyMat3(rv3d->twmat, ts->mat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -429,7 +430,8 @@ static int count_bone_select(bArmature *arm, ListBase *lb, int do_it)
|
||||
|
||||
void initTransformOrientation(bContext *C, TransInfo *t)
|
||||
{
|
||||
View3D *v3d = CTX_wm_area(C)->spacedata.first;
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C);
|
||||
Object *ob = CTX_data_active_object(C);
|
||||
Object *obedit = CTX_data_active_object(C);
|
||||
float normal[3]={0.0, 0.0, 0.0};
|
||||
@ -479,28 +481,28 @@ void initTransformOrientation(bContext *C, TransInfo *t)
|
||||
|
||||
if (type == ORIENTATION_NONE)
|
||||
{
|
||||
Mat4One(v3d->twmat);
|
||||
Mat4One(rv3d->twmat);
|
||||
}
|
||||
else
|
||||
{
|
||||
Mat4CpyMat3(v3d->twmat, mat);
|
||||
Mat4CpyMat3(rv3d->twmat, mat);
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* no break we define 'normal' as 'local' in Object mode */
|
||||
case V3D_MANIP_LOCAL:
|
||||
strcpy(t->spacename, "local");
|
||||
Mat4CpyMat4(v3d->twmat, ob->obmat);
|
||||
Mat4Ortho(v3d->twmat);
|
||||
Mat4CpyMat4(rv3d->twmat, ob->obmat);
|
||||
Mat4Ortho(rv3d->twmat);
|
||||
break;
|
||||
|
||||
case V3D_MANIP_VIEW:
|
||||
{
|
||||
float mat[3][3];
|
||||
strcpy(t->spacename, "view");
|
||||
Mat3CpyMat4(mat, v3d->viewinv);
|
||||
Mat3CpyMat4(mat, rv3d->viewinv);
|
||||
Mat3Ortho(mat);
|
||||
Mat4CpyMat3(v3d->twmat, mat);
|
||||
Mat4CpyMat3(rv3d->twmat, mat);
|
||||
}
|
||||
break;
|
||||
default: /* V3D_MANIP_CUSTOM */
|
||||
@ -512,8 +514,7 @@ void initTransformOrientation(bContext *C, TransInfo *t)
|
||||
int getTransformOrientation(bContext *C, float normal[3], float plane[3], int activeOnly)
|
||||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ScrArea *sa = CTX_wm_area(C);
|
||||
View3D *v3d = sa->spacedata.first;
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
Base *base;
|
||||
Object *ob = OBACT;
|
||||
@ -730,11 +731,11 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
|
||||
}
|
||||
else if(obedit->type==OB_MBALL)
|
||||
{
|
||||
#if 0 // XXX
|
||||
/* editmball.c */
|
||||
extern ListBase editelems; /* go away ! */
|
||||
MetaElem *ml, *ml_sel = NULL;
|
||||
|
||||
#if 0 // XXX
|
||||
/* loop and check that only one element is selected */
|
||||
for (ml = editelems.first; ml; ml = ml->next)
|
||||
{
|
||||
@ -750,7 +751,6 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ml_sel)
|
||||
{
|
||||
@ -766,6 +766,8 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
|
||||
|
||||
result = ORIENTATION_NORMAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
else if (obedit->type == OB_ARMATURE)
|
||||
{
|
||||
|
@ -135,16 +135,17 @@ void drawSnapping(TransInfo *t)
|
||||
|
||||
if (t->spacetype == SPACE_VIEW3D) {
|
||||
View3D *v3d = t->view;
|
||||
RegionView3D *rv3d= t->ar->regiondata;
|
||||
float tmat[4][4], imat[4][4];
|
||||
float size;
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
size = get_drawsize(v3d, t->sa, t->tsnap.snapPoint);
|
||||
size = get_drawsize(t->ar, t->tsnap.snapPoint);
|
||||
|
||||
size *= 0.5f * UI_GetThemeValuef(TH_VERTEX_SIZE);
|
||||
|
||||
Mat4CpyMat4(tmat, v3d->viewmat);
|
||||
Mat4CpyMat4(tmat, rv3d->viewmat);
|
||||
Mat4Invert(imat, tmat);
|
||||
|
||||
drawcircball(GL_LINE_LOOP, t->tsnap.snapPoint, size, imat);
|
||||
@ -874,7 +875,7 @@ int snapDerivedMesh(TransInfo *t, Object *ob, DerivedMesh *dm, float obmat[][4],
|
||||
|
||||
new_depth = VecLenf(location, ray_start);
|
||||
|
||||
project_int(t->ar, t->view, location, screen_loc);
|
||||
project_int(t->ar, location, screen_loc);
|
||||
new_dist = abs(screen_loc[0] - mval[0]) + abs(screen_loc[1] - mval[1]);
|
||||
|
||||
if (new_dist <= *dist && new_depth < *depth)
|
||||
@ -918,7 +919,7 @@ int snapDerivedMesh(TransInfo *t, Object *ob, DerivedMesh *dm, float obmat[][4],
|
||||
|
||||
new_depth = VecLenf(location, ray_start);
|
||||
|
||||
project_int(t->ar, t->view, location, screen_loc);
|
||||
project_int(t->ar, location, screen_loc);
|
||||
new_dist = abs(screen_loc[0] - mval[0]) + abs(screen_loc[1] - mval[1]);
|
||||
|
||||
if (new_dist <= *dist && new_depth < *depth)
|
||||
@ -1010,7 +1011,7 @@ int snapDerivedMesh(TransInfo *t, Object *ob, DerivedMesh *dm, float obmat[][4],
|
||||
|
||||
new_depth = VecLenf(location, ray_start);
|
||||
|
||||
project_int(t->ar, t->view, location, screen_loc);
|
||||
project_int(t->ar, location, screen_loc);
|
||||
new_dist = abs(screen_loc[0] - mval[0]) + abs(screen_loc[1] - mval[1]);
|
||||
|
||||
if (new_dist <= *dist && new_depth < *depth)
|
||||
@ -1130,7 +1131,7 @@ int snapDerivedMesh(TransInfo *t, Object *ob, DerivedMesh *dm, float obmat[][4],
|
||||
|
||||
new_depth = VecLenf(location, ray_start);
|
||||
|
||||
project_int(t->ar, t->view, location, screen_loc);
|
||||
project_int(t->ar, location, screen_loc);
|
||||
new_dist = abs(screen_loc[0] - mval[0]) + abs(screen_loc[1] - mval[1]);
|
||||
|
||||
if (new_dist <= *dist && new_depth < *depth)
|
||||
|
@ -62,8 +62,8 @@ void GPU_state_init(void);
|
||||
* GPU_enable_material returns 0 if drawing should be skipped
|
||||
* - after drawing, the material must be disabled again */
|
||||
|
||||
void GPU_set_object_materials(struct View3D *v3d, struct Scene *scene,
|
||||
struct Object *ob, int glsl, int *do_alpha_pass);
|
||||
void GPU_set_object_materials(struct View3D *v3d, struct RegionView3D *rv3d,
|
||||
struct Scene *scene, struct Object *ob, int glsl, int *do_alpha_pass);
|
||||
int GPU_enable_material(int nr, void *attribs);
|
||||
void GPU_disable_material(void);
|
||||
|
||||
|
@ -782,7 +782,7 @@ Material *gpu_active_node_material(Material *ma)
|
||||
return ma;
|
||||
}
|
||||
|
||||
void GPU_set_object_materials(View3D *v3d, Scene *scene, Object *ob, int glsl, int *do_alpha_pass)
|
||||
void GPU_set_object_materials(View3D *v3d, RegionView3D *rv3d, Scene *scene, Object *ob, int glsl, int *do_alpha_pass)
|
||||
{
|
||||
extern Material defmaterial; /* from material.c */
|
||||
Material *ma;
|
||||
@ -800,8 +800,8 @@ void GPU_set_object_materials(View3D *v3d, Scene *scene, Object *ob, int glsl, i
|
||||
GMS.gscene = scene;
|
||||
GMS.totmat= ob->totcol;
|
||||
GMS.glay= v3d->lay;
|
||||
GMS.gviewmat= v3d->viewmat;
|
||||
GMS.gviewinv= v3d->viewinv;
|
||||
GMS.gviewmat= rv3d->viewmat;
|
||||
GMS.gviewinv= rv3d->viewinv;
|
||||
|
||||
GMS.alphapass = (v3d && v3d->transp);
|
||||
if(do_alpha_pass)
|
||||
|
@ -339,18 +339,6 @@ extern Object workob;
|
||||
#define OB_SHADED 4
|
||||
#define OB_TEXTURE 5
|
||||
|
||||
/* this condition has been made more complex since editmode can draw textures */
|
||||
#define CHECK_OB_DRAWTEXTURE(vd, dt) \
|
||||
((vd->drawtype==OB_TEXTURE && dt>OB_SOLID) || \
|
||||
(vd->drawtype==OB_SOLID && vd->flag2 & V3D_SOLID_TEX))
|
||||
|
||||
#define CHECK_OB_DRAWFACEDOT(sce, vd, dt) \
|
||||
( (sce->selectmode & SCE_SELECT_FACE) && \
|
||||
(vd->drawtype<=OB_SOLID) && \
|
||||
(((vd->drawtype==OB_SOLID) && (dt>=OB_SOLID) && (vd->flag2 & V3D_SOLID_TEX) && (vd->flag & V3D_ZBUF_SELECT)) == 0) \
|
||||
)
|
||||
|
||||
|
||||
/* dtx: flags, char! */
|
||||
#define OB_AXIS 2
|
||||
#define OB_TEXSPACE 4
|
||||
|
@ -206,6 +206,7 @@ typedef struct ARegion {
|
||||
#define RGN_ALIGN_HSPLIT 5
|
||||
#define RGN_ALIGN_VSPLIT 6
|
||||
#define RGN_ALIGN_FLOAT 7
|
||||
#define RGN_ALIGN_QSPLIT 8
|
||||
|
||||
/* region flag */
|
||||
#define RGN_FLAG_HIDDEN 1
|
||||
|
@ -71,80 +71,37 @@ typedef struct BGpic {
|
||||
|
||||
/* ********************************* */
|
||||
|
||||
/* 3D ViewPort Struct */
|
||||
typedef struct View3D {
|
||||
struct SpaceLink *next, *prev;
|
||||
ListBase regionbase; /* storage of regions for inactive spaces */
|
||||
int spacetype;
|
||||
float blockscale;
|
||||
typedef struct RegionView3D {
|
||||
|
||||
short blockhandler[8];
|
||||
|
||||
float winmat[4][4];
|
||||
float viewmat[4][4];
|
||||
float viewinv[4][4];
|
||||
float persmat[4][4];
|
||||
float persinv[4][4];
|
||||
|
||||
float viewquat[4], dist, zfac; /* zfac is initgrabz() result */
|
||||
int lay_used; /* used while drawing */
|
||||
float twmat[4][4]; /* transform widget */
|
||||
|
||||
float viewquat[4], dist, zfac; /* zfac is initgrabz() result */
|
||||
float camdx, camdy; /* camera view offsets, 1.0 = viewplane moves entire width/height */
|
||||
float pixsize;
|
||||
float ofs[3];
|
||||
short camzoom, viewbut;
|
||||
int pad1;
|
||||
|
||||
short rflag, pad2;
|
||||
short persp;
|
||||
short view;
|
||||
|
||||
struct Object *camera, *ob_centre;
|
||||
struct BGpic *bgpic;
|
||||
struct View3D *localvd;
|
||||
|
||||
/* user defined clipping planes */
|
||||
float clip[4][4];
|
||||
struct BoundBox *clipbb;
|
||||
|
||||
struct bGPdata *gpd; /* Grease-Pencil Data (annotation layers) */
|
||||
|
||||
struct RegionView3D *localvd;
|
||||
struct RenderInfo *ri;
|
||||
struct RetopoViewData *retopo_view_data;
|
||||
struct ViewDepths *depths;
|
||||
|
||||
char ob_centre_bone[32]; /* optional string for armature bone to define center */
|
||||
|
||||
/**
|
||||
* The drawing mode for the 3d display. Set to OB_WIRE, OB_SOLID,
|
||||
* OB_SHADED or OB_TEXTURE */
|
||||
short drawtype;
|
||||
short localview;
|
||||
int lay, layact;
|
||||
short scenelock, around, camzoom;
|
||||
|
||||
char pivot_last, pad1; /* pivot_last is for rotating around the last edited element */
|
||||
|
||||
float lens, grid, gridview, pixsize, near, far;
|
||||
float camdx, camdy; /* camera view offsets, 1.0 = viewplane moves entire width/height */
|
||||
float ofs[3], cursor[3];
|
||||
|
||||
short gridlines, viewbut;
|
||||
short gridflag;
|
||||
short modeselect, menunr, texnr;
|
||||
|
||||
/* transform widget info */
|
||||
short twtype, twmode, twflag, twdrawflag;
|
||||
float twmat[4][4];
|
||||
|
||||
/* user defined clipping planes */
|
||||
float clip[4][4];
|
||||
|
||||
struct BoundBox *clipbb;
|
||||
|
||||
/* afterdraw, for xray & transparent */
|
||||
struct ListBase afterdraw;
|
||||
/* drawflags, denoting state */
|
||||
short zbuf, transp, xray;
|
||||
|
||||
short flag, flag2;
|
||||
|
||||
short gridsubdiv; /* Number of subdivisions in the grid between each highlighted grid line */
|
||||
|
||||
short keyflags; /* flags for display of keyframes */
|
||||
|
||||
char ndofmode; /* mode of transform for 6DOF devices -1 not found, 0 normal, 1 fly, 2 ob transform */
|
||||
char ndoffilter; /*filter for 6DOF devices 0 normal, 1 dominant */
|
||||
|
||||
void *properties_storage; /* Nkey panel stores stuff here, not in file */
|
||||
struct bGPdata *gpd; /* Grease-Pencil Data (annotation layers) */
|
||||
|
||||
/* animated smooth view */
|
||||
struct SmoothViewStore *sms;
|
||||
struct wmTimer *smooth_timer;
|
||||
@ -152,11 +109,76 @@ typedef struct View3D {
|
||||
/* last view */
|
||||
float lviewquat[4];
|
||||
short lpersp, lview;
|
||||
int pad3;
|
||||
|
||||
} RegionView3D;
|
||||
|
||||
/* 3D ViewPort Struct */
|
||||
typedef struct View3D {
|
||||
struct SpaceLink *next, *prev;
|
||||
ListBase regionbase; /* storage of regions for inactive spaces */
|
||||
int spacetype;
|
||||
float blockscale;
|
||||
short blockhandler[8];
|
||||
|
||||
float viewquat[4], dist, pad1; /* XXX depricated */
|
||||
|
||||
int lay_used; /* used while drawing */
|
||||
|
||||
short persp; /* XXX depricated */
|
||||
short view; /* XXX depricated */
|
||||
|
||||
struct Object *camera, *ob_centre;
|
||||
struct BGpic *bgpic;
|
||||
struct View3D *localvd;
|
||||
|
||||
char ob_centre_bone[32]; /* optional string for armature bone to define center */
|
||||
|
||||
int lay, layact;
|
||||
|
||||
/**
|
||||
* The drawing mode for the 3d display. Set to OB_WIRE, OB_SOLID,
|
||||
* OB_SHADED or OB_TEXTURE */
|
||||
short drawtype;
|
||||
short localview;
|
||||
short scenelock, around, pad3;
|
||||
short flag, flag2;
|
||||
|
||||
short pivot_last; /* pivot_last is for rotating around the last edited element */
|
||||
|
||||
float lens, grid, gridview, padf, near, far;
|
||||
float ofs[3]; /* XXX depricated */
|
||||
float cursor[3];
|
||||
|
||||
short gridlines, pad4;
|
||||
short gridflag;
|
||||
short gridsubdiv; /* Number of subdivisions in the grid between each highlighted grid line */
|
||||
short modeselect;
|
||||
short keyflags; /* flags for display of keyframes */
|
||||
|
||||
/* transform widget info */
|
||||
short twtype, twmode, twflag, twdrawflag;
|
||||
|
||||
/* customdata flags from modes */
|
||||
unsigned int customdata_mask;
|
||||
|
||||
/* afterdraw, for xray & transparent */
|
||||
struct ListBase afterdraw;
|
||||
|
||||
/* drawflags, denoting state */
|
||||
short zbuf, transp, xray;
|
||||
|
||||
char ndofmode; /* mode of transform for 6DOF devices -1 not found, 0 normal, 1 fly, 2 ob transform */
|
||||
char ndoffilter; /* filter for 6DOF devices 0 normal, 1 dominant */
|
||||
|
||||
void *properties_storage; /* Nkey panel stores stuff here, not in file */
|
||||
|
||||
/* XXX depricated? */
|
||||
struct bGPdata *gpd; /* Grease-Pencil Data (annotation layers) */
|
||||
|
||||
} View3D;
|
||||
|
||||
/* XXX this needs cleaning */
|
||||
|
||||
/* View3D->flag (short) */
|
||||
#define V3D_MODE (16+32+64+128+256+512)
|
||||
@ -174,14 +196,14 @@ typedef struct View3D {
|
||||
#define V3D_SELECT_OUTLINE 2048
|
||||
#define V3D_ZBUF_SELECT 4096
|
||||
#define V3D_GLOBAL_STATS 8192
|
||||
#define V3D_CLIPPING 16384
|
||||
#define V3D_DRAW_CENTERS 32768
|
||||
|
||||
/* RegionView3d->rflag */
|
||||
#define RV3D_OPP_DIRECTION_NAME 1
|
||||
#define RV3D_FLYMODE 2
|
||||
#define RV3D_CLIPPING 4
|
||||
|
||||
/* View3d->flag2 (short) */
|
||||
#define V3D_MODE2 (32)
|
||||
#define V3D_OPP_DIRECTION_NAME 1
|
||||
#define V3D_FLYMODE 2
|
||||
#define V3D_DEPRECATED 4 /* V3D_TRANSFORM_SNAP, moved to a scene setting */
|
||||
#define V3D_SOLID_TEX 8
|
||||
#define V3D_DISPGP 16
|
||||
|
||||
|
@ -111,6 +111,7 @@ static BlendFileData *load_game_data(char *filename)
|
||||
}
|
||||
|
||||
extern "C" void StartKetsjiShell(struct ScrArea *area,
|
||||
struct ARegion *ar,
|
||||
char* scenename,
|
||||
struct Main* maggie1,
|
||||
struct SpaceIpo *sipo,
|
||||
@ -140,6 +141,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
||||
do
|
||||
{
|
||||
View3D *v3d= (View3D*) area->spacedata.first;
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
|
||||
// get some preferences
|
||||
SYS_SystemHandle syshandle = SYS_GetSystem();
|
||||
@ -224,7 +226,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
float *viewmat_linear= (float*) v3d->viewmat;
|
||||
float *viewmat_linear= (float*) rv3d->viewmat;
|
||||
viewmat.setElem(i, viewmat_linear[i]);
|
||||
}
|
||||
for (i = 0; i < 16; i++)
|
||||
@ -234,7 +236,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
||||
}
|
||||
|
||||
if(v3d->persp==V3D_CAMOB) {
|
||||
camzoom = (1.41421 + (v3d->camzoom / 50.0));
|
||||
camzoom = (1.41421 + (rv3d->camzoom / 50.0));
|
||||
camzoom *= camzoom;
|
||||
}
|
||||
else
|
||||
@ -541,6 +543,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
||||
}
|
||||
|
||||
extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
||||
struct ARegion *ar,
|
||||
char* scenename,
|
||||
struct Main* maggie,
|
||||
struct SpaceIpo *sipo,
|
||||
|
@ -380,9 +380,9 @@ bool BL_ShapeActionActuator::Update(double curtime, bool frame)
|
||||
m_blendstart = curtime;
|
||||
}
|
||||
// only interested in shape channel
|
||||
extract_ipochannels_from_action(&tchanbase, &key->id, m_action, "Shape", m_localtime);
|
||||
// XXX extract_ipochannels_from_action(&tchanbase, &key->id, m_action, "Shape", m_localtime);
|
||||
|
||||
if (!execute_ipochannels(&tchanbase)) {
|
||||
if (0) { // XXX !execute_ipochannels(&tchanbase)) {
|
||||
// no update, this is possible if action does not match the keys, stop the action
|
||||
keepgoing = false;
|
||||
}
|
||||
|
@ -116,11 +116,11 @@ bool BL_ShapeDeformer::ExecuteShapeDrivers(void)
|
||||
|
||||
for (it=m_shapeDrivers.begin(); it!=m_shapeDrivers.end(); it++) {
|
||||
// no need to set a specific time: this curve has a driver
|
||||
IpoCurve *icu = *it;
|
||||
calc_icu(icu, 1.0f);
|
||||
poin = get_ipo_poin((ID*)m_bmesh->key, icu, &type);
|
||||
if (poin)
|
||||
write_ipo_poin(poin, type, icu->curval);
|
||||
// XXX IpoCurve *icu = *it;
|
||||
//calc_icu(icu, 1.0f);
|
||||
//poin = get_ipo_poin((ID*)m_bmesh->key, icu, &type);
|
||||
//if (poin)
|
||||
// write_ipo_poin(poin, type, icu->curval);
|
||||
}
|
||||
|
||||
ForceUpdate();
|
||||
|
@ -36,7 +36,7 @@ extern "C" {
|
||||
static const int BL_MAX_CHANNELS = 32;
|
||||
|
||||
float BL_ScalarInterpolator::GetValue(float currentTime) const {
|
||||
return IPO_GetFloatValue(m_blender_ipo, m_channel, currentTime);
|
||||
return 0; // XXX IPO_GetFloatValue(m_blender_ipo, m_channel, currentTime);
|
||||
}
|
||||
|
||||
|
||||
@ -44,7 +44,7 @@ float BL_ScalarInterpolator::GetValue(float currentTime) const {
|
||||
BL_InterpolatorList::BL_InterpolatorList(struct Ipo *ipo) {
|
||||
IPO_Channel channels[BL_MAX_CHANNELS];
|
||||
|
||||
int num_channels = IPO_GetChannels(ipo, channels);
|
||||
int num_channels = 0; // XXX IPO_GetChannels(ipo, channels);
|
||||
|
||||
int i;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user