private static void CreateOrUpdateAbstractNodeFromConcreteNode( ConcreteNode srcNode, Cluster cluster, ref int abstractNodeId, int level, Dictionary <Id <ConcreteNode>, AbstractNodeInfo> abstractNodes) { AbstractNodeInfo abstractNodeInfo; if (!abstractNodes.TryGetValue(srcNode.NodeId, out abstractNodeInfo)) { cluster.AddEntrance( Id <AbstractNode> .From(abstractNodeId), new Position(srcNode.Info.Position.X - cluster.Origin.X, srcNode.Info.Position.Y - cluster.Origin.Y)); abstractNodeInfo = new AbstractNodeInfo( Id <AbstractNode> .From(abstractNodeId), level, cluster.Id, new Position(srcNode.Info.Position.X, srcNode.Info.Position.Y), srcNode.NodeId); abstractNodes[srcNode.NodeId] = abstractNodeInfo; abstractNodeId++; } else if (level > abstractNodeInfo.Level) { abstractNodeInfo.Level = level; } }