]> granicus.if.org Git - graphviz/commitdiff
opengl dot node size fixed
authorarif <devnull@localhost>
Tue, 16 Mar 2010 19:09:27 +0000 (19:09 +0000)
committerarif <devnull@localhost>
Tue, 16 Mar 2010 19:09:27 +0000 (19:09 +0000)
bus error while quitting fixeselected object label color changed

cmd/smyrna/selectionfuncs.c
cmd/smyrna/smyrnadefs.h
cmd/smyrna/topviewfuncs.c
cmd/smyrna/viewport.c

index 8d4e8a65e55cae9624f4e41c6604b457c699c83e..f110eab8f315d1d655f527f4f2bc701b04055778 100644 (file)
@@ -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 )
        {
index c9067ed4e1dc3fd755af90a2d998a2dc954ae5c2..33a1db510f820c5ed900dd8e615312ae6a2fc3c8 100644 (file)
@@ -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*/
index e3a3cbe47b913479d0b10bc14813b45172a722ca..dd9db8c73c8e834951a03c7c694d5d607d8624d6 100644 (file)
@@ -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)
index 28ab15df169504843d265b044f3b73be0aa6f64e..b9d65f9536d801fb2161c1e0756af8927bb1822e 100755 (executable)
@@ -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