[#6787] OOPS window draw changes patch from Matthew Plough (meestaplu)
And added groups to the oopsview
This commit is contained in:
@@ -527,6 +527,7 @@ typedef struct SpaceImaSel {
|
|||||||
#define OOPS_LI 2048
|
#define OOPS_LI 2048
|
||||||
#define OOPS_IM 4096
|
#define OOPS_IM 4096
|
||||||
#define OOPS_AR 8192
|
#define OOPS_AR 8192
|
||||||
|
#define OOPS_GR 16384
|
||||||
|
|
||||||
/* SpaceOops->outlinevis */
|
/* SpaceOops->outlinevis */
|
||||||
#define SO_ALL_SCENES 0
|
#define SO_ALL_SCENES 0
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
|
|
||||||
#include "BIF_interface.h"
|
#include "BIF_interface.h"
|
||||||
#include "BIF_interface_icons.h"
|
#include "BIF_interface_icons.h"
|
||||||
|
#include "BIF_language.h"
|
||||||
#include "BIF_gl.h"
|
#include "BIF_gl.h"
|
||||||
#include "BIF_glutil.h"
|
#include "BIF_glutil.h"
|
||||||
#include "BIF_mywindow.h"
|
#include "BIF_mywindow.h"
|
||||||
@@ -69,8 +70,13 @@
|
|||||||
#include "BSE_drawipo.h"
|
#include "BSE_drawipo.h"
|
||||||
#include "BSE_drawoops.h"
|
#include "BSE_drawoops.h"
|
||||||
|
|
||||||
float oopscalex;
|
float aspect;
|
||||||
struct BMF_Font *font; /* for using different sized fonts */
|
void *font;
|
||||||
|
|
||||||
|
|
||||||
|
static float icon_width();
|
||||||
|
float center_oops_text(char *str);
|
||||||
|
|
||||||
|
|
||||||
void boundbox_oops(short sel)
|
void boundbox_oops(short sel)
|
||||||
{
|
{
|
||||||
@@ -130,7 +136,7 @@ void draw_oopslink(Oops *oops)
|
|||||||
float vec[4][3], dist, spline_step;
|
float vec[4][3], dist, spline_step;
|
||||||
short curve_res;
|
short curve_res;
|
||||||
|
|
||||||
if(oops->type==ID_SCE) {
|
if(oops->type==ID_SCE || oops->type==ID_GR) {
|
||||||
if(oops->flag & SELECT) {
|
if(oops->flag & SELECT) {
|
||||||
/* when using python Mesh to make meshes a file was saved
|
/* when using python Mesh to make meshes a file was saved
|
||||||
that had an oops with no ID, stops a segfault when looking for lib */
|
that had an oops with no ID, stops a segfault when looking for lib */
|
||||||
@@ -180,7 +186,7 @@ void draw_oopslink(Oops *oops)
|
|||||||
else if ( MAX4(vec[0][0], vec[1][0], vec[2][0], vec[3][0]) < G.v2d->cur.xmin); /* clipped */
|
else if ( MAX4(vec[0][0], vec[1][0], vec[2][0], vec[3][0]) < G.v2d->cur.xmin); /* clipped */
|
||||||
else {
|
else {
|
||||||
/* calculate a curve resolution to use based on the length of the curve.*/
|
/* calculate a curve resolution to use based on the length of the curve.*/
|
||||||
curve_res = MIN2(40, MAX2(2, (short)((dist*2) * (oopscalex))));
|
curve_res = MIN2(40, MAX2(2, 2*dist/aspect));
|
||||||
|
|
||||||
/* we can reuse the dist variable here to increment the GL curve eval amount*/
|
/* we can reuse the dist variable here to increment the GL curve eval amount*/
|
||||||
dist = (float)1/curve_res;
|
dist = (float)1/curve_res;
|
||||||
@@ -200,9 +206,16 @@ void draw_oopslink(Oops *oops)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float icon_width()
|
||||||
|
{
|
||||||
|
/* change it in *one place* when you mess around */
|
||||||
|
return 0.8*OOPSY;
|
||||||
|
}
|
||||||
|
|
||||||
void draw_icon_oops(float *co, short type)
|
void draw_icon_oops(float *co, short type)
|
||||||
{
|
{
|
||||||
BIFIconID icon;
|
BIFIconID icon;
|
||||||
|
float ofs;
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
default: return;
|
default: return;
|
||||||
@@ -218,12 +231,15 @@ void draw_icon_oops(float *co, short type)
|
|||||||
case ID_IP: icon= ICON_IPO_HLT; break;
|
case ID_IP: icon= ICON_IPO_HLT; break;
|
||||||
case ID_LI: icon= ICON_LIBRARY_HLT; break;
|
case ID_LI: icon= ICON_LIBRARY_HLT; break;
|
||||||
case ID_IM: icon= ICON_IMAGE_HLT; break;
|
case ID_IM: icon= ICON_IMAGE_HLT; break;
|
||||||
|
case ID_GR: icon= ICON_CIRCLE_DEHLT; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
BIF_icon_draw(co[0], co[1]-0.2, icon);
|
/* height of box is OOPSY...icon is centered vertically */
|
||||||
|
ofs = (OOPSY - icon_width())/2.0;
|
||||||
|
BIF_icon_draw_aspect(co[0], co[1]+ofs, icon, icon_width()*aspect*ICON_DEFAULT_HEIGHT/OOPSY);
|
||||||
|
|
||||||
glBlendFunc(GL_ONE, GL_ZERO);
|
glBlendFunc(GL_ONE, GL_ZERO);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
@@ -267,6 +283,8 @@ unsigned int give_oops_color(short type, short sel, unsigned int *border)
|
|||||||
body= 0x2198DC; break;
|
body= 0x2198DC; break;
|
||||||
case ID_IM:
|
case ID_IM:
|
||||||
body= 0x35659F; break;
|
body= 0x35659F; break;
|
||||||
|
case ID_GR:
|
||||||
|
body= 0x507050; break;
|
||||||
default:
|
default:
|
||||||
body= 0x606070; break;
|
body= 0x606070; break;
|
||||||
}
|
}
|
||||||
@@ -281,46 +299,25 @@ unsigned int give_oops_color(short type, short sel, unsigned int *border)
|
|||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
|
||||||
void calc_oopstext(char *str, float *v1)
|
|
||||||
|
float center_oops_text(char *str)
|
||||||
|
/* gives x offset at which to draw oops text -- takes icon into account */
|
||||||
{
|
{
|
||||||
float f1, f2, size; /* f1 is the lhs of the oops block, f2 is the rhs */
|
int len;
|
||||||
short mval[2], len, flen;
|
float width;
|
||||||
|
|
||||||
ipoco_to_areaco_noclip(G.v2d, v1, mval);
|
|
||||||
f1= mval[0];
|
|
||||||
v1[0]+= OOPSX;
|
|
||||||
ipoco_to_areaco_noclip(G.v2d, v1, mval);
|
|
||||||
f2= mval[0];
|
|
||||||
|
|
||||||
if (oopscalex>1.1) { /* Make text area wider if we have no icon.*/
|
|
||||||
size= f2-f1;
|
|
||||||
} else {
|
|
||||||
size= (f2-f1)*1.7;
|
|
||||||
}
|
|
||||||
|
|
||||||
len= strlen(str);
|
len= strlen(str);
|
||||||
|
if(len < 1) return 0;
|
||||||
while( (flen= BMF_GetStringWidth(G.fonts, str)) > size) {
|
|
||||||
if(flen < 10 || len<2) break;
|
/* center at box width of OOPSX */
|
||||||
len--;
|
width= aspect*BIF_GetStringWidth(font, str, 0) + icon_width();
|
||||||
str[len]= 0;
|
|
||||||
}
|
while(width > OOPSX && len >= 0) {
|
||||||
|
str[len] = 0;
|
||||||
flen= BMF_GetStringWidth(font, str);
|
width= aspect*BIF_GetStringWidth(font, str, 0) + icon_width();
|
||||||
|
len--;
|
||||||
/* calc centerd location for icon and text,
|
}
|
||||||
else if were zoomed too far out, just push text to the left of the oops block. */
|
return (OOPSX - width)/2;
|
||||||
if (oopscalex>1.1) {
|
|
||||||
mval[0]= (f1+f2-flen+1)/2;
|
|
||||||
} else {
|
|
||||||
mval[0]= f1;
|
|
||||||
}
|
|
||||||
|
|
||||||
mval[1]= 1;
|
|
||||||
areamouseco_to_ipoco(G.v2d, mval, &f1, &f2);
|
|
||||||
|
|
||||||
v1[0]= f1;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_oops(Oops *oops)
|
void draw_oops(Oops *oops)
|
||||||
@@ -336,6 +333,7 @@ void draw_oops(Oops *oops)
|
|||||||
y1= oops->y;
|
y1= oops->y;
|
||||||
y2= oops->y+OOPSY;
|
y2= oops->y+OOPSY;
|
||||||
|
|
||||||
|
/* do clip */
|
||||||
if(x2 < G.v2d->cur.xmin || x1 > G.v2d->cur.xmax) return;
|
if(x2 < G.v2d->cur.xmin || x1 > G.v2d->cur.xmax) return;
|
||||||
if(y2 < G.v2d->cur.ymin || y1 > G.v2d->cur.ymax) return;
|
if(y2 < G.v2d->cur.ymin || y1 > G.v2d->cur.ymax) return;
|
||||||
|
|
||||||
@@ -346,9 +344,9 @@ void draw_oops(Oops *oops)
|
|||||||
if(oops->id->us) {
|
if(oops->id->us) {
|
||||||
cpack(body);
|
cpack(body);
|
||||||
|
|
||||||
glRectf(x1, y1, x2, y2);
|
glRectf(x1, y1, x2, y2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* it has never happened that an oops was missing an ID at
|
/* it has never happened that an oops was missing an ID at
|
||||||
this point but has occured elseware so lets be safe */
|
this point but has occured elseware so lets be safe */
|
||||||
if(oops->id && oops->id->lib) {
|
if(oops->id && oops->id->lib) {
|
||||||
@@ -359,27 +357,31 @@ void draw_oops(Oops *oops)
|
|||||||
}
|
}
|
||||||
|
|
||||||
v1[0]= x1;
|
v1[0]= x1;
|
||||||
v1[1]= (y1+y2)/2 -0.3;
|
v1[1] = y1;
|
||||||
|
|
||||||
if(oops->type==ID_LI) {
|
if(oops->type==ID_LI) {
|
||||||
sprintf(str, " %s", ((Library *)oops->id)->name);
|
sprintf(str, " %s", ((Library *)oops->id)->name);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sprintf(str, " %s", oops->id->name+2);
|
sprintf(str, " %s", oops->id->name+2);
|
||||||
}
|
}
|
||||||
calc_oopstext(str, v1);
|
|
||||||
|
|
||||||
/* ICON */
|
BIF_SetScale(aspect);
|
||||||
if(str[1] && oopscalex>1.1) { /* HAS ICON */
|
v1[0] += center_oops_text(str);
|
||||||
draw_icon_oops(v1, oops->type);
|
|
||||||
} else { /* NO ICON, UNINDENT*/
|
draw_icon_oops(v1, oops->type);
|
||||||
v1[0] -= 1.3 / oopscalex;
|
v1[0] += icon_width();
|
||||||
}
|
|
||||||
|
v1[1] = y1+(y2-y1)/3.0;
|
||||||
if(oops->flag & SELECT) BIF_ThemeColor(TH_TEXT_HI);
|
if(oops->flag & SELECT) BIF_ThemeColor(TH_TEXT_HI);
|
||||||
else BIF_ThemeColor(TH_TEXT);
|
else BIF_ThemeColor(TH_TEXT);
|
||||||
glRasterPos3f(v1[0], v1[1], 0.0);
|
glRasterPos2f(v1[0], v1[1]);
|
||||||
BMF_DrawString(font, str);
|
BIF_RasterPos(v1[0], v1[1]);
|
||||||
|
BIF_SetScale(aspect);
|
||||||
if(line) setlinestyle(2);
|
BIF_DrawString(font, str, 0);
|
||||||
|
|
||||||
|
|
||||||
|
if(line) setlinestyle(2);
|
||||||
cpack(border);
|
cpack(border);
|
||||||
|
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||||
@@ -410,7 +412,7 @@ void draw_oops(Oops *oops)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(oops->flag & OOPS_REFER) {
|
if(oops->flag & OOPS_REFER) {
|
||||||
/* Draw the little rounded connection point */
|
/* Draw the little rounded connection point */
|
||||||
glColor3ub(0, 0, 0);
|
glColor3ub(0, 0, 0);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
@@ -445,62 +447,56 @@ void drawoopsspace(ScrArea *sa, void *spacedata)
|
|||||||
boundbox_oops(0);
|
boundbox_oops(0);
|
||||||
calc_scrollrcts(sa, G.v2d, curarea->winx, curarea->winy);
|
calc_scrollrcts(sa, G.v2d, curarea->winx, curarea->winy);
|
||||||
|
|
||||||
myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
|
myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
|
||||||
|
bwin_clear_viewmat(sa->win); /* clear buttons view */
|
||||||
|
glLoadIdentity();
|
||||||
|
|
||||||
|
aspect= (G.v2d->cur.xmax - G.v2d->cur.xmin)/((float)sa->winx);
|
||||||
|
font= uiSetCurFont_ext(30*aspect);
|
||||||
|
|
||||||
oopscalex= .14*((float)curarea->winx)/(G.v2d->cur.xmax-G.v2d->cur.xmin);
|
|
||||||
calc_ipogrid(); /* for scrollvariables */
|
calc_ipogrid(); /* for scrollvariables */
|
||||||
|
|
||||||
|
/* drop shadow */
|
||||||
/* Draw a page about the oops */
|
BIF_ThemeColorShade(TH_BACK, -96); /* drop shadow color */
|
||||||
|
glRectf(G.v2d->tot.xmin-1, G.v2d->tot.ymin-3, G.v2d->tot.xmax+3,
|
||||||
|
G.v2d->tot.ymax+1);
|
||||||
|
|
||||||
|
/* light square in the center */
|
||||||
BIF_GetThemeColor3fv(TH_BACK, col);
|
BIF_GetThemeColor3fv(TH_BACK, col);
|
||||||
glColor3fv(col);
|
glColor3fv(col);
|
||||||
glRectf(G.v2d->tot.xmin-2, G.v2d->tot.ymin-2, G.v2d->tot.xmax+2, G.v2d->tot.ymax+2); /* light square in the center */
|
glRectf(G.v2d->tot.xmin-2, G.v2d->tot.ymin-2, G.v2d->tot.xmax+2,
|
||||||
BIF_ThemeColorShade(TH_BACK, -96); /* drop shadow color */
|
G.v2d->tot.ymax+2);
|
||||||
glRectf(G.v2d->tot.xmin-1, G.v2d->tot.ymin-2, G.v2d->tot.xmax+3, G.v2d->tot.ymin-3); /* bottom dropshadow */
|
|
||||||
glRectf(G.v2d->tot.xmax+2, G.v2d->tot.ymin-2, G.v2d->tot.xmax+3, G.v2d->tot.ymax+1); /* right hand dropshadow */
|
|
||||||
/* box around the oops. */
|
/* box around the oops. */
|
||||||
cpack(0x0);
|
cpack(0x0);
|
||||||
mysbox(G.v2d->tot.xmin-2, G.v2d->tot.ymin-2, G.v2d->tot.xmax+2, G.v2d->tot.ymax+2);
|
mysbox(G.v2d->tot.xmin-2, G.v2d->tot.ymin-2, G.v2d->tot.xmax+2,
|
||||||
|
G.v2d->tot.ymax+2);
|
||||||
|
|
||||||
/* Set the font size for the oops based on the zoom level */
|
|
||||||
if (oopscalex > 6.0) font = BMF_GetFont(BMF_kScreen15);
|
|
||||||
else if (oopscalex > 3.5) font = G.font;
|
|
||||||
else if (oopscalex > 2.5) font = G.fonts;
|
|
||||||
else font = G.fontss;
|
|
||||||
|
|
||||||
/* Draw unselected oops links */
|
/* Draw unselected oops links */
|
||||||
oops= soops->oops.first;
|
for(oops= soops->oops.first; oops; oops = oops->next) {
|
||||||
while(oops) {
|
|
||||||
if(oops->hide==0 && (oops->flag & SELECT)); else {
|
if(oops->hide==0 && (oops->flag & SELECT)); else {
|
||||||
draw_oopslink(oops);
|
draw_oopslink(oops);
|
||||||
}
|
}
|
||||||
oops= oops->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw selected oops links */
|
/* Draw selected oops links */
|
||||||
oops= soops->oops.first;
|
for(oops= soops->oops.first; oops; oops = oops->next) {
|
||||||
while(oops) {
|
|
||||||
if(oops->hide==0 && (oops->flag & SELECT)) {
|
if(oops->hide==0 && (oops->flag & SELECT)) {
|
||||||
draw_oopslink(oops);
|
draw_oopslink(oops);
|
||||||
}
|
}
|
||||||
oops= oops->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
oops= soops->oops.first;
|
for(oops= soops->oops.first; oops; oops = oops->next) {
|
||||||
while(oops) {
|
|
||||||
if(oops->hide==0) {
|
if(oops->hide==0) {
|
||||||
if(oops->flag & SELECT); else draw_oops(oops);
|
if(oops->flag & SELECT); else draw_oops(oops);
|
||||||
}
|
}
|
||||||
oops= oops->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
oops= soops->oops.first;
|
for(oops= soops->oops.first; oops; oops = oops->next) {
|
||||||
while(oops) {
|
|
||||||
if(oops->hide==0) {
|
if(oops->hide==0) {
|
||||||
if(oops->flag & SELECT) draw_oops(oops);
|
if(oops->flag & SELECT) draw_oops(oops);
|
||||||
}
|
}
|
||||||
oops= oops->next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -507,7 +507,9 @@ void oops_buttons(void)
|
|||||||
uiDefIconButBitS(block, TOG, OOPS_TE, B_NEWOOPS, ICON_TEXTURE_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Texture datablocks");
|
uiDefIconButBitS(block, TOG, OOPS_TE, B_NEWOOPS, ICON_TEXTURE_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Texture datablocks");
|
||||||
uiDefIconButBitS(block, TOG, OOPS_IP, B_NEWOOPS, ICON_IPO_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Ipo datablocks");
|
uiDefIconButBitS(block, TOG, OOPS_IP, B_NEWOOPS, ICON_IPO_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Ipo datablocks");
|
||||||
uiDefIconButBitS(block, TOG, OOPS_IM, B_NEWOOPS, ICON_IMAGE_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Image datablocks");
|
uiDefIconButBitS(block, TOG, OOPS_IM, B_NEWOOPS, ICON_IMAGE_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Image datablocks");
|
||||||
|
uiDefIconButBitS(block, TOG, OOPS_GR, B_NEWOOPS, ICON_CIRCLE_DEHLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Group datablocks");
|
||||||
uiDefIconButBitS(block, TOG, OOPS_LI, B_NEWOOPS, ICON_LIBRARY_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Library datablocks");
|
uiDefIconButBitS(block, TOG, OOPS_LI, B_NEWOOPS, ICON_LIBRARY_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Library datablocks");
|
||||||
|
|
||||||
|
|
||||||
uiBlockEndAlign(block);
|
uiBlockEndAlign(block);
|
||||||
|
|
||||||
@@ -518,8 +520,11 @@ void oops_buttons(void)
|
|||||||
else strcpy(naam, oops->id->name);
|
else strcpy(naam, oops->id->name);
|
||||||
|
|
||||||
cpack(0x0);
|
cpack(0x0);
|
||||||
|
BIF_ThemeColor(TH_MENU_TEXT); /* makes text readable on dark theme */
|
||||||
|
BIF_SetScale(1.0);
|
||||||
glRasterPos2i(xco+=XIC+10, 5);
|
glRasterPos2i(xco+=XIC+10, 5);
|
||||||
BMF_DrawString(uiBlockGetCurFont(block), naam);
|
BIF_RasterPos(xco+=XIC+10, 5);
|
||||||
|
BIF_DrawString(G.font, naam, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,7 @@
|
|||||||
#include "DNA_texture_types.h"
|
#include "DNA_texture_types.h"
|
||||||
#include "DNA_texture_types.h"
|
#include "DNA_texture_types.h"
|
||||||
#include "DNA_key_types.h"
|
#include "DNA_key_types.h"
|
||||||
|
#include "DNA_group_types.h"
|
||||||
|
|
||||||
#include "BKE_utildefines.h"
|
#include "BKE_utildefines.h"
|
||||||
#include "BKE_global.h"
|
#include "BKE_global.h"
|
||||||
@@ -656,8 +657,21 @@ void add_material_oopslinks(Material *ma, Oops *oops, short flag)
|
|||||||
if(ma->mtex[a]) add_oopslink("ob", oops, ID_OB, &(ma->mtex[a]->object), 0.0, (float)(0.2*OOPSY));
|
if(ma->mtex[a]) add_oopslink("ob", oops, ID_OB, &(ma->mtex[a]->object), 0.0, (float)(0.2*OOPSY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag & OOPS_IP) {
|
if(flag & OOPS_IP)
|
||||||
if(ma->ipo) add_oopslink("ipo", oops, ID_IP, &(ma->ipo), OOPSX, (float)(0.5*OOPSY));
|
if(ma->ipo) add_oopslink("ipo", oops, ID_IP, &(ma->ipo), OOPSX, (float)(0.5*OOPSY));
|
||||||
|
|
||||||
|
if (ma->group)
|
||||||
|
add_oopslink("group", oops, ID_GR, &(ma->group), OOPSX, (float)(0.5*OOPSY));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void add_group_oopslinks(Group *gp, Oops *oops, short flag)
|
||||||
|
{
|
||||||
|
GroupObject *gob;
|
||||||
|
if(flag & OOPS_GR) {
|
||||||
|
for(gob=gp->gobject.first; gob; gob= gob->next) {
|
||||||
|
add_oopslink("group", oops, ID_GR, &(gob->ob), (float)(0.5*OOPSX), (float)OOPSY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -701,6 +715,9 @@ void add_object_oopslinks(Object *ob, Oops *oops, short flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(flag & OOPS_IP) add_oopslink("ipo", oops, ID_IP, &ob->ipo, OOPSX, (float)(0.5*OOPSY));
|
if(flag & OOPS_IP) add_oopslink("ipo", oops, ID_IP, &ob->ipo, OOPSX, (float)(0.5*OOPSY));
|
||||||
|
|
||||||
|
if (ob->dup_group && (ob->transflag & OB_DUPLIGROUP))
|
||||||
|
add_oopslink("group", oops, ID_GR, &ob->dup_group, OOPSX, (float)(0.5*OOPSY));
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_mesh_oopslinks(Mesh *me, Oops *oops, short flag)
|
void add_mesh_oopslinks(Mesh *me, Oops *oops, short flag)
|
||||||
@@ -817,6 +834,9 @@ Oops *add_test_oops(void *id) /* incl links */
|
|||||||
case ID_MA:
|
case ID_MA:
|
||||||
add_material_oopslinks((Material *)id, oops, G.soops->visiflag);
|
add_material_oopslinks((Material *)id, oops, G.soops->visiflag);
|
||||||
break;
|
break;
|
||||||
|
case ID_GR:
|
||||||
|
add_group_oopslinks((Group *)id, oops, G.soops->visiflag);
|
||||||
|
break;
|
||||||
case ID_TE:
|
case ID_TE:
|
||||||
tex= (Tex *)id;
|
tex= (Tex *)id;
|
||||||
if(tex->ima) if(G.soops->visiflag & OOPS_IM) add_oopslink("image", oops, ID_IM, &tex->ima, OOPSX, (float)(0.3*OOPSY));
|
if(tex->ima) if(G.soops->visiflag & OOPS_IM) add_oopslink("image", oops, ID_IM, &tex->ima, OOPSX, (float)(0.3*OOPSY));
|
||||||
@@ -962,7 +982,13 @@ void build_oops()
|
|||||||
ima= ima->id.next;
|
ima= ima->id.next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(G.soops->visiflag & OOPS_GR) {
|
||||||
|
Group *gp= G.main->group.first;
|
||||||
|
while(gp) {
|
||||||
|
oops= add_test_oops(gp);
|
||||||
|
gp= gp->id.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user