Example #1
0
        public static string GetShortString(this GroupNodeType op)
        {
            switch (op)
            {
            case GroupNodeType.AND:
                return("and");

            case GroupNodeType.NAND:
                return("and not");

            case GroupNodeType.NOR:
                return("or not");

            case GroupNodeType.OR:
                return("or");

            default:
                throw new ArgumentOutOfRangeException("op");
            }
        }
Example #2
0
 private bool TryGroupNode(INode groupNode, IEdge edge, String srcName, String tgtName,
                           GroupNodeType srcGroupNodeType, GroupNodeType tgtGroupNodeType, ref GroupMode grpMode)
 {
     if (groupNode == edge.Target)
     {
         grpMode = tgtGroupNodeType.GetEdgeGroupMode(edge.Type, edge.Source.Type);
         if ((grpMode & GroupMode.GroupIncomingNodes) != 0)
         {
             ycompStream.Write("moveNode \"n" + srcName + "\" \"n" + tgtName + "\"\n");
             return(true);
         }
     }
     else if (groupNode == edge.Source)
     {
         grpMode = srcGroupNodeType.GetEdgeGroupMode(edge.Type, edge.Target.Type);
         if ((grpMode & GroupMode.GroupOutgoingNodes) != 0)
         {
             ycompStream.Write("moveNode \"n" + tgtName + "\" \"n" + srcName + "\"\n");
             return(true);
         }
     }
     return(false);
 }
Example #3
0
 private bool TryGroupNode(INode groupNode, IEdge edge, String srcName, String tgtName,
     GroupNodeType srcGroupNodeType, GroupNodeType tgtGroupNodeType, ref GroupMode grpMode)
 {
     if(groupNode == edge.Target)
     {
         grpMode = tgtGroupNodeType.GetEdgeGroupMode(edge.Type, edge.Source.Type);
         if((grpMode & GroupMode.GroupIncomingNodes) != 0)
         {
             ycompStream.Write("moveNode \"n" + srcName + "\" \"n" + tgtName + "\"\n");
             return true;
         }
     }
     else if(groupNode == edge.Source)
     {
         grpMode = srcGroupNodeType.GetEdgeGroupMode(edge.Type, edge.Target.Type);
         if((grpMode & GroupMode.GroupOutgoingNodes) != 0)
         {
             ycompStream.Write("moveNode \"n" + tgtName + "\" \"n" + srcName + "\"\n");
             return true;
         }
     }
     return false;
 }
Example #4
0
 public GroupNode( GroupNodeType op ) {
     Op = op;
     UpdateLabel();
 }
Example #5
0
        public void AddEdge(IEdge edge)
        {
            if (IsEdgeExcluded(edge))
            {
                return;
            }

            String edgeRealizerName = edgeRealizerOverride ?? realizers.GetEdgeRealizer(edge.Type, dumpInfo);

            String edgeName = graph.GetElementName(edge);
            String srcName  = graph.GetElementName(edge.Source);
            String tgtName  = graph.GetElementName(edge.Target);

            if (edge.Source != edge.Target)
            {
                GroupNodeType srcGroupNodeType = dumpInfo.GetGroupNodeType(edge.Source.Type);
                GroupNodeType tgtGroupNodeType = dumpInfo.GetGroupNodeType(edge.Target.Type);
                INode         groupNodeFirst = null, groupNodeSecond = null;
                if (tgtGroupNodeType != null)
                {
                    groupNodeFirst = edge.Target;
                }
                if (srcGroupNodeType != null)
                {
                    if (groupNodeFirst == null)
                    {
                        groupNodeFirst = edge.Source;
                    }
                    else if (srcGroupNodeType.Priority > tgtGroupNodeType.Priority)
                    {
                        groupNodeSecond = groupNodeFirst;
                        groupNodeFirst  = edge.Source;
                    }
                    else
                    {
                        groupNodeSecond = edge.Source;
                    }
                }

                GroupMode grpMode = GroupMode.None;
                bool      groupedNode = false;
                if (groupNodeFirst != null)
                {
                    groupedNode = TryGroupNode(groupNodeFirst, edge, srcName, tgtName, srcGroupNodeType, tgtGroupNodeType, ref grpMode);
                    if (!groupedNode && groupNodeSecond != null)
                    {
                        groupedNode = TryGroupNode(groupNodeSecond, edge, srcName, tgtName, srcGroupNodeType, tgtGroupNodeType, ref grpMode);
                    }
                }

                // If no grouping rule applies, grpMode is GroupMode.None (= 0)
                if ((grpMode & GroupMode.Hidden) != 0)
                {
                    hiddenEdges[edge] = true;
                    isDirty           = true;
                    isLayoutDirty     = true;
                    return;
                }
            }

            ycompStream.Write("addEdge \"e" + edgeName + "\" \"n" + srcName + "\" \"n" + tgtName
                              + "\" \"" + edgeRealizerName + "\" \"" + GetElemLabel(edge) + "\"\n");
            foreach (AttributeType attrType in edge.Type.AttributeTypes)
            {
                string attrTypeString;
                string attrValueString;
                EncodeAttr(attrType, edge, out attrTypeString, out attrValueString);
                ycompStream.Write("changeEdgeAttr \"e" + edgeName + "\" \"" + attrType.OwnerType.Name + "::" + attrType.Name + " : "
                                  + attrTypeString + "\" \"" + attrValueString + "\"\n");
            }
            isDirty       = true;
            isLayoutDirty = true;
        }
Example #6
0
 public GroupNode(GroupNodeType op)
 {
     Op = op;
     UpdateLabel();
 }