From: arif Date: Tue, 16 Mar 2010 19:09:27 +0000 (+0000) Subject: opengl dot node size fixed X-Git-Tag: LAST_LIBGRAPH~32^2~1391 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=19ab945bab9d3fd62f827ac9c66b767fd52411cf;p=graphviz opengl dot node size fixed bus error while quitting fixeselected object label color changed --- diff --git a/cmd/smyrna/selectionfuncs.c b/cmd/smyrna/selectionfuncs.c index 8d4e8a65e..f110eab8f 100644 --- a/cmd/smyrna/selectionfuncs.c +++ b/cmd/smyrna/selectionfuncs.c @@ -120,6 +120,7 @@ static void* pick_object(Agraph_t* g,glCompPoint p) static glCompPoint posT; static glCompPoint posH; static glCompPoint posN; + int defaultNodeShape; float dist=999999999; static GLfloat nd=0; /*node distance to point*/ static GLfloat ed=0; /*edge distance to point*/ @@ -128,22 +129,27 @@ static void* pick_object(Agraph_t* g,glCompPoint p) nd=0; /*node distance to point*/ ed=0; /*edge distance to point*/ + defaultNodeShape=getAttrBool(g,g,"defaultnodeshape",0); + if(!size_attr) size_attr=agattr(g, AGNODE,"size",0); if(!pos_attr) pos_attr=agattr(g, AGNODE,"pos",0); + if(defaultNodeShape==0) + nodeSize=GetOGLDistance(view->nodeScale*view->Topview->fitin_zoom/view->zoom); + for (v = agfstnode(g); v; v = agnxtnode(g, v)) { if(!((nodeRec*)(aggetrec(v,"nodeRec",0)))->visible) continue; posN=((nodeRec*)(aggetrec(v,"nodeRec",0)))->A; - nodeSize=(GLfloat)l_float(v, size_attr,0); - if (nodeSize > 0) - nodeSize=nodeSize * view->Topview->init_node_size; - else - nodeSize=view->Topview->init_node_size; + if(defaultNodeShape==1) + { + nodeSize=((nodeRec*)(aggetrec(v,"nodeRec",0)))->size; + } + nd=distBetweenPts(posN,p,nodeSize); if( nd < dist ) { diff --git a/cmd/smyrna/smyrnadefs.h b/cmd/smyrna/smyrnadefs.h index c9067ed4e..33a1db510 100644 --- a/cmd/smyrna/smyrnadefs.h +++ b/cmd/smyrna/smyrnadefs.h @@ -437,7 +437,6 @@ typedef struct float maxedgelen; float minedgelen; float avgedgelength; - float init_node_size; //raster size of node float init_zoom; float fitin_zoom; xdot* xDot; @@ -674,6 +673,7 @@ typedef struct int mouse_action_count; refresh_filter refresh; int edgerendertype; + float nodeScale; } ViewInfo; /*rotation steps*/ diff --git a/cmd/smyrna/topviewfuncs.c b/cmd/smyrna/topviewfuncs.c index e3a3cbe47..dd9db8c73 100644 --- a/cmd/smyrna/topviewfuncs.c +++ b/cmd/smyrna/topviewfuncs.c @@ -237,10 +237,21 @@ void renderSelectedNodes(Agraph_t * g) static glCompPoint pos; + static Agsym_t* l_color_attr=(Agsym_t*)0; + static glCompColor c; + + + + + static int defaultNodeShape=0; static GLfloat nodeSize=0; - if(!defaultNodeShape) - defaultNodeShape=getAttrBool(g,g,"defaultnodeshape",0); + if(!l_color_attr) + l_color_attr=agattr(g, AGRAPH,"nodelabelcolor",0); + glCompColorxlate(&c,agxget(g,l_color_attr)); + + + defaultNodeShape=getAttrBool(g,g,"defaultnodeshape",0); if(defaultNodeShape==0) glBegin(GL_POINTS); @@ -269,7 +280,10 @@ void renderSelectedNodes(Agraph_t * g) drawCircle(pos.x,pos.y,nodeSize,pos.z+0.001); if(((nodeRec*)(aggetrec(v,"nodeRec",0)))->printLabel==1) - glprintfglut(view->glutfont,pos.x+nodeSize,pos.y+nodeSize,pos.z,agnameof(v)); + { + glColor4f(c.R, c.G,c.B, c.A); + glprintfglut(view->glutfont,pos.x+nodeSize,pos.y+nodeSize,pos.z,agnameof(v)); + } } if(defaultNodeShape==0) @@ -347,9 +361,9 @@ void renderNodes(Agraph_t * g) ((nodeRec*)(aggetrec(v,"nodeRec",0)))->A=pos; if (nodeSize > 0) - nodeSize=nodeSize*view->Topview->init_node_size; + nodeSize=nodeSize*view->nodeScale; else - nodeSize=view->Topview->init_node_size; + nodeSize=view->nodeScale; if(defaultNodeShape==0) nodeSize=1; ((nodeRec*)(aggetrec(v,"nodeRec",0)))->size=nodeSize; @@ -517,10 +531,6 @@ void renderNodeLabels(Agraph_t * g) pos=((nodeRec*)(aggetrec(v,"nodeRec",0)))->A; nodeSize=((nodeRec*)(aggetrec(v,"nodeRec",0)))->size; glColor4f(c.R,c.G,c.B,c.A); - if (nodeSize > 0) - nodeSize=nodeSize*view->Topview->init_node_size; - else - nodeSize=view->Topview->init_node_size; if(!data_attr) glprintfglut(view->glutfont,pos.x+nodeSize,pos.y+nodeSize,pos.z,agnameof(v)); else @@ -702,7 +712,7 @@ void updateSmGraph(Agraph_t * g,topview* t) set_boundaries(g,t); t->avgedgelength = totalELength / t->Edgecount; - t->init_node_size=init_node_size(g, t); +// t->init_node_size=init_node_size(g, t); view->Topview=t; cacheNodes(g,t); cacheEdges(g,t); @@ -743,8 +753,10 @@ void initSmGraph(Agraph_t * g,topview* rv) void renderSmGraph(Agraph_t * g,topview* t) { + if(view->drawnodes) { + glPointSize(view->nodeScale*t->fitin_zoom/view->zoom); glCallList(t->cache.node_id); glCallList(t->cache.selnode_id); if(view->drawnodelabels) diff --git a/cmd/smyrna/viewport.c b/cmd/smyrna/viewport.c index 28ab15df1..b9d65f953 100755 --- a/cmd/smyrna/viewport.c +++ b/cmd/smyrna/viewport.c @@ -291,6 +291,7 @@ void set_viewport_settings_from_template(ViewInfo * view, Agraph_t * g) view->drawedges = atoi(get_attribute_value("drawedges", view, g)); view->drawnodelabels=atoi(get_attribute_value("labelshownodes", view, g)); view->drawedgelabels=atoi(get_attribute_value("labelshowedges", view, g)); + view->nodeScale=atof(get_attribute_value("nodesize", view, g))*.30; view->FontSizeConst = 0; //this will be calculated later in topview.c while calculating optimum font size