class grCanvas : public QGraphicsScene
{
if (BackgroundDrawing==FALSE)
{
return;
}
else
{
myCanvasDrawer->RunOpenGL();
}
}
void grCanvas::drawBackground(QPainter *painter, const QRectF &rect)
{
if (BackgroundDrawing==FALSE)
{
return;
}
else
{
myCanvasDrawer->RunOpenGL();
}
}
To copy to clipboard, switch view to plain text mode
void IRGNodeLinkDrawer::RunOpenGL()
{
IRGraph *graph = docManager->GetIRGraph();
PrepareCanvas(canvas);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
this->DrawEdges(graph);
this->DrawNodes(graph);
glDisable(GL_BLEND);
}
void IRGNodeLinkDrawer::RunOpenGL()
{
IRGraph *graph = docManager->GetIRGraph();
PrepareCanvas(canvas);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
this->DrawEdges(graph);
this->DrawNodes(graph);
glDisable(GL_BLEND);
}
To copy to clipboard, switch view to plain text mode
the code of draw edges and nodes are here:
void IRGNodeLinkDrawer::DrawEdges(IRGraph *graph)
{
int n = graph->GetEdgeNum();
int *edges = new int [n * 2];
graph->GetAllGraphEdges(edges);
glLineWidth(0.5f);
glBegin(GL_LINES);
if (this->showAllOrSelected == 1) // Show selected nodes
{
for (int i=0; i<n; i++)
{
if (graph->IsNodeSelected(edges[i*2]) && graph->IsNodeSelected(edges[i*2+1]))
{
// glColor4f(0.8f, 0.8f, 0.8f, 0.3f);
glColor4f(0.2f, 0.2f, 0.2f, 0.6f);
glVertex2d(this->posX[edges[i*2]], this->posY[edges[i*2]]);
glVertex2d(this->posX[edges[i*2+1]], this->posY[edges[i*2+1]]);
}
}
}
else
{
for (int i=0; i<n; i++)
{
if (graph->IsNodeSelected(edges[i*2]) && graph->IsNodeSelected(edges[i*2+1]))
glColor4f(0.2f, 0.2f, 0.2f, 0.6f);
else
// glColor4f(0.8f, 0.8f, 0.8f, 0.1f);
glColor4f(0.8f, 0.8f, 0.8f, 0.3f);
glVertex2d(this->posX[edges[i*2]], this->posY[edges[i*2]]);
glVertex2d(this->posX[edges[i*2+1]], this->posY[edges[i*2+1]]);
}
}
glEnd();
delete [] edges;
}
void IRGNodeLinkDrawer::DrawEdges(IRGraph *graph)
{
int n = graph->GetEdgeNum();
int *edges = new int [n * 2];
graph->GetAllGraphEdges(edges);
glLineWidth(0.5f);
glBegin(GL_LINES);
if (this->showAllOrSelected == 1) // Show selected nodes
{
for (int i=0; i<n; i++)
{
if (graph->IsNodeSelected(edges[i*2]) && graph->IsNodeSelected(edges[i*2+1]))
{
// glColor4f(0.8f, 0.8f, 0.8f, 0.3f);
glColor4f(0.2f, 0.2f, 0.2f, 0.6f);
glVertex2d(this->posX[edges[i*2]], this->posY[edges[i*2]]);
glVertex2d(this->posX[edges[i*2+1]], this->posY[edges[i*2+1]]);
}
}
}
else
{
for (int i=0; i<n; i++)
{
if (graph->IsNodeSelected(edges[i*2]) && graph->IsNodeSelected(edges[i*2+1]))
glColor4f(0.2f, 0.2f, 0.2f, 0.6f);
else
// glColor4f(0.8f, 0.8f, 0.8f, 0.1f);
glColor4f(0.8f, 0.8f, 0.8f, 0.3f);
glVertex2d(this->posX[edges[i*2]], this->posY[edges[i*2]]);
glVertex2d(this->posX[edges[i*2+1]], this->posY[edges[i*2+1]]);
}
}
glEnd();
delete [] edges;
}
To copy to clipboard, switch view to plain text mode
void IRGNodeLinkDrawer::DrawNodes(IRGraph *graph)
{
int member, colorIdx;
float alpha;
if (this->showAllOrSelected == 1) // Show selected nodes
{
glPointSize((float)nodeSize + distortionFactor);
alpha = 1.0f;
glBegin(GL_POINTS);
for (int i=0; i<graph->GetNodeNum(); i++)
{
if (graph->IsNodeSelected(i))
{
member = graph->GetNodeMembership(i);
colorIdx = member % IRGPixelDrawer::colorNum;
glColor4f(qualitativeColorTable[colorIdx][0]/255.f, qualitativeColorTable[colorIdx][1]/255.f, qualitativeColorTable[colorIdx][2]/255.f, alpha);
glVertex2d(this->posX[i], this->posY[i]);
}
}
glEnd();
}
else
{
glColor4f(0, 1.0f, 0, 1);
for (int i=0; i<graph->GetNodeNum(); i++)
{
//glPointSize((float)(nodeSize*graph->GetNodeCentrality(i)));
glPointSize(graph->IsNodeSelected(i) ? (float)nodeSize + distortionFactor * 1.5 : (float)nodeSize);
// glPointSize(graph->IsNodeSelected(i) ? (float)nodeSize + distortionFactor * 1.5 : (float)nodeSize + distortionFactor);
// glPointSize((float)nodeSize + distortionFactor);
glBegin(GL_POINTS);
member = graph->GetNodeMembership(i);
colorIdx = member % IRGPixelDrawer::colorNum;
// alpha = graph->IsNodeSelected(i) ? 1.0f : 0.3f;
alpha = graph->IsNodeSelected(i) ? 1.0f : 0.5f;
glColor4f(qualitativeColorTable[colorIdx][0]/255.f, qualitativeColorTable[colorIdx][1]/255.f, qualitativeColorTable[colorIdx][2]/255.f, alpha);
glVertex2d(this->posX[i], this->posY[i]);
glEnd();
}
}
}
void IRGNodeLinkDrawer::DrawNodes(IRGraph *graph)
{
int member, colorIdx;
float alpha;
if (this->showAllOrSelected == 1) // Show selected nodes
{
glPointSize((float)nodeSize + distortionFactor);
alpha = 1.0f;
glBegin(GL_POINTS);
for (int i=0; i<graph->GetNodeNum(); i++)
{
if (graph->IsNodeSelected(i))
{
member = graph->GetNodeMembership(i);
colorIdx = member % IRGPixelDrawer::colorNum;
glColor4f(qualitativeColorTable[colorIdx][0]/255.f, qualitativeColorTable[colorIdx][1]/255.f, qualitativeColorTable[colorIdx][2]/255.f, alpha);
glVertex2d(this->posX[i], this->posY[i]);
}
}
glEnd();
}
else
{
glColor4f(0, 1.0f, 0, 1);
for (int i=0; i<graph->GetNodeNum(); i++)
{
//glPointSize((float)(nodeSize*graph->GetNodeCentrality(i)));
glPointSize(graph->IsNodeSelected(i) ? (float)nodeSize + distortionFactor * 1.5 : (float)nodeSize);
// glPointSize(graph->IsNodeSelected(i) ? (float)nodeSize + distortionFactor * 1.5 : (float)nodeSize + distortionFactor);
// glPointSize((float)nodeSize + distortionFactor);
glBegin(GL_POINTS);
member = graph->GetNodeMembership(i);
colorIdx = member % IRGPixelDrawer::colorNum;
// alpha = graph->IsNodeSelected(i) ? 1.0f : 0.3f;
alpha = graph->IsNodeSelected(i) ? 1.0f : 0.5f;
glColor4f(qualitativeColorTable[colorIdx][0]/255.f, qualitativeColorTable[colorIdx][1]/255.f, qualitativeColorTable[colorIdx][2]/255.f, alpha);
glVertex2d(this->posX[i], this->posY[i]);
glEnd();
}
}
}
To copy to clipboard, switch view to plain text mode
Bookmarks