void PortionDrawer::drawGraph(DiagramDrawer &drawer) { if(mGraph) { // This must be set for svg drawer.setDiagramSize(getDrawingSize(drawer)); drawNodes(drawer); drawer.groupShapes(true, Color(0,0,0), Color(245,245,255)); drawConnections(drawer); drawer.groupShapes(false, 0, 0); std::vector<DrawString> drawStrings; std::vector<bool> virtOpers; getNodeText(drawer, drawStrings, virtOpers); drawer.groupText(true, false); drawNodeText(drawer, false, drawStrings, virtOpers); drawer.groupText(false, false); drawer.groupText(true, true); drawNodeText(drawer, true, drawStrings, virtOpers); drawer.groupText(false, false); } }
void PortionDrawer::drawConnections(DiagramDrawer &drawer) { size_t lastColorIndex = NO_INDEX; for(auto const &conn : mGraph->getConnections()) { GraphRect suppRect = getNodeRect(drawer, conn.mSupplierNodeIndex); GraphRect consRect = getNodeRect(drawer, conn.mConsumerNodeIndex); GraphPoint suppPoint; GraphPoint consPoint; drawer.getConnectionPoints(consRect, suppRect, consPoint, suppPoint); size_t colorIndex = conn.mSupplierNodeIndex; if(colorIndex != lastColorIndex) { if(lastColorIndex != NO_INDEX) { drawer.groupShapes(false, 0, 0); } Color lineColor = DistinctColors::getColor(colorIndex % DistinctColors::getNumColors()); drawer.groupShapes(true, lineColor, Color(245,245,255)); lastColorIndex = colorIndex; } drawArrowDependency(drawer, consPoint, suppPoint); } if(lastColorIndex != NO_INDEX) { drawer.groupShapes(false, 0, 0); } }
void PortionDrawer::drawNodes(DiagramDrawer &drawer) { drawer.groupShapes(true, Color(0,0,0), Color(245,245,255)); for(size_t i=0; i<mNodePositions.size(); i++) { if(mGraph->getNodes()[i].getNodeType() == PNT_Attribute) { drawer.drawRect(getNodeRect(drawer, i)); } else { drawer.drawEllipse(getNodeRect(drawer, i)); } } drawer.groupShapes(false, 0, 0); drawer.groupShapes(true, Color(0,0,255), Color(245,245,255)); for(size_t i=0; i<mNodePositions.size(); i++) { if(mGraph->getNodes()[i].getNodeType() == PNT_NonMemberVariable) { drawer.drawRect(getNodeRect(drawer, i)); } } drawer.groupShapes(false, 0, 0); }
GraphSize OperationDrawer::drawOperation(DiagramDrawer &drawer, GraphPoint pos, OperationDefinition &operDef, const OperationGraph &graph, const OperationDrawOptions &options, std::set<const OperationDefinition*> &drawnOperations, bool draw) { std::vector<DrawString> drawStrings; if(draw) { drawer.groupShapes(true, Color(0,0,0), Color(245,245,255)); } GraphSize size = drawOperationNoText(drawer, pos, operDef, graph, options, drawnOperations, drawStrings, draw); if(draw) { drawer.groupShapes(false, Color(0,0,0), Color(245,245,255)); drawer.groupText(true, false); for(size_t i=0; i<drawStrings.size(); i++) { drawer.drawText(drawStrings[i].pos, drawStrings[i].str); } drawer.groupText(false, false); } return size; }
void OperationDrawer::drawLifeLines(DiagramDrawer &drawer, const std::vector<OperationClass> &classes, std::vector<int> const &classEndY, int endy) { drawer.groupShapes(true, Color(0,0,0), Color(245,245,255)); endy += mCharHeight; for(size_t i=0; i<classes.size(); i++) { const auto &cl = classes[i]; int x = cl.getLifelinePosX(); drawer.drawLine(GraphPoint(x, classEndY[i]), GraphPoint(x, endy)); } drawer.groupShapes(false, Color(0,0,0), Color(245,245,255)); }
GraphSize OperationDrawer::drawClass(DiagramDrawer &drawer, const OperationClass &node, const OperationDrawOptions & /*options*/, bool draw) { GraphPoint startpos = node.getPosition(); const ModelType *type = node.getType(); OovStringRef const typeName = type->getName(); int rectx = 0; int recty = 0; const ModelClassifier *classifier = type->getClass(); if(classifier) { if(draw) { drawer.groupText(true, false); } OovStringVec strs; std::vector<GraphPoint> positions; strs.push_back(typeName); splitStrings(strs, 30, 40); for(auto const &str : strs) { recty += mCharHeight + (mPad * 2); positions.push_back(GraphPoint(startpos.x+mPad, startpos.y + recty - mPad)); int curx = static_cast<int>(drawer.getTextExtentWidth(str)) + mPad*2; if(curx > rectx) rectx = curx; } if(draw) { drawer.groupShapes(true, Color(0,0,0), Color(245,245,255)); drawer.drawRect(GraphRect(startpos.x, startpos.y, rectx, recty)); drawer.groupShapes(false, Color(0,0,0), Color(245,245,255)); for(size_t i=0; i<strs.size(); i++) { drawer.drawText(positions[i], strs[i]); } drawer.groupText(false, false); } } return GraphSize(rectx, recty); }