Agsym_t* N_labelattribute;
Agsym_t* E_visible;
Agsym_t* E_selected;
+ Agsym_t* E_pos;
Agsym_t* G_edgelabelcolor;
Agsym_t* E_labelattribute;
} graphRec;
#define GN_selected(g) (GREC(g)->N_selected)
#define GG_nodelabelcolor(g) (GREC(g)->G_nodelabelcolor)
#define GN_labelattribute(g) (GREC(g)->N_labelattribute)
+#define GE_pos(g) (GREC(g)->E_pos)
#define GE_visible(g) (GREC(g)->E_visible)
#define GE_selected(g) (GREC(g)->E_selected)
#define GG_edgelabelcolor(g) (GREC(g)->G_edgelabelcolor)
#define GE_labelattribute(g) (GREC(g)->E_labelattribute)
+
#define GUI_WINDOWED 0
#define GUI_FULLSCREEN 1
}
glEnd();
}
+static int removeChar(char* str,char r)
+{
+ char* ptr=str;
+ int rv=0;
+ while (*ptr!='\0')
+ {
+ if(*ptr == r)
+ {
+ *ptr=' ';
+ rv++;
+ }
+ ptr++;
+ }
+ return rv;
+}
+char* pos_to_xdot(char* xdots,char* buf)
+{
+/*
+"e,227.75,177.25 186.27,218.73 196.2,208.8 209.32,195.68 220.44,184.56",
+"B 4 186 219 196 209 209 196 220 185 ", _hdraw_="S 5 -solid c 9 -#000000ff C 9 -#000000ff P 3 223 187 228 177 218 182 ";*/
+ char* pt;
+ int spaceCnt=0;
+ strcpy(buf,xdots);
+ pt=buf;
+ while ((spaceCnt == 0) && (*pt!='\0'))
+ {
+ if(*pt==' ')
+ spaceCnt++;
+ pt++;
+ }
+ return pt;
+}
static void renderEdges(Agraph_t * g)
{
+ char Buf[1024];
+ char posBuf[1024];
Agedge_t *e;
Agnode_t *v;
Agsym_t* pos_attr = GN_pos(g);
+ Agsym_t* pos_attr_e = GE_pos(g);
xdot * x;
glCompPoint posT; /*Tail position*/
glCompPoint posH; /*Head position*/
continue;
if(ED_selected(e))
continue;
- glColor4f(c.R,c.G,c.B,c.A);
- posT=getPointFromStr(agxget(agtail(e), pos_attr));
- posH=getPointFromStr(agxget(aghead(e), pos_attr));
- draw_edge(&posT,&posH,getEdgeLength(e),0);
- ED_posTail(e) = posT;
- ED_posHead(e) = posH;
+ glColor4f(c.R,c.G,c.B,c.A);
+ if(!pos_attr_e)
+ {
+ posT=getPointFromStr(agxget(agtail(e), pos_attr));
+ posH=getPointFromStr(agxget(aghead(e), pos_attr));
+ draw_edge(&posT,&posH,getEdgeLength(e),0);
+ ED_posTail(e) = posT;
+ ED_posHead(e) = posH;
+ }
+ else/*NOT IMPLEMENTED YET*/
+ {
+ int pCount=0;
+ char* bf;
+ bf=pos_to_xdot(agxget(e,pos_attr_e),Buf);
+ pCount=removeChar(bf,',');
+ sprintf(posBuf,"B %d %s ",pCount,bf);
+ x=parseXDotFOn (posBuf, OpFns,sizeof(sdot_op), NULL);
+ draw_xdot(x,0);
+ if(x)
+ freeXDot (x);
+ }
}
}
glEnd();
GN_selected(g) = agattr (g, AGNODE, "selected", 0);
GN_labelattribute(g) = agattr (g, AGNODE, agget(g,"nodelabelattribute"), 0);
+ GE_pos(g)=agattr(g,AGEDGE,"pos",0);
GE_visible(g) = agattr (g, AGEDGE, "visible", 0);
GE_selected(g) = agattr (g, AGEDGE, "selected", 0);
GE_labelattribute(g) = agattr (g, AGEDGE, agget(g,"edgelabelattribute"), 0);