Пример #1
0
            public bool Contains(string path, int start, StringComparison comparison)
            {
                if (!HasNodes)
                {
                    return(false);
                }

                var indexOfDot = path.IndexOf('.', start);

                if (indexOfDot < 0)
                {
                    var segment = path.Substring(start);
                    return(Nodes.Any(n => n.Value.Equals(segment, comparison)));
                }
                else
                {
                    var segment = path.Substring(start, indexOfDot - start);

                    foreach (var node in Nodes.Where(n => n.Value.Equals(segment, comparison)))
                    {
                        var nextStart = start + segment.Length + 1;
                        if (nextStart >= path.Length)
                        {
                            return(true);
                        }
                        else if (node.Contains(path, nextStart, comparison))
                        {
                            return(true);
                        }
                    }

                    return(false);
                }
            }
        internal override void WriteBody(EndianBinaryWriter writer, StringSet stringSet, BinaryFormat format)
        {
            writer.Write(StartIndex);
            writer.Write(Nodes.Count);
            stringSet.WriteString(writer, ExternalName);
            stringSet.WriteString(writer, Name);

            bool shouldWriteRotation = format == BinaryFormat.FT && Nodes.Any(x =>
                                                                              Math.Abs(x.Rotation.X) > 0 ||
                                                                              Math.Abs(x.Rotation.Y) > 0 ||
                                                                              Math.Abs(x.Rotation.Z) > 0);

            writer.ScheduleWriteOffsetIf(shouldWriteRotation, 4, AlignmentMode.Left, () =>
            {
                foreach (var bone in Nodes)
                {
                    bone.WriteOsgBlockInfo(writer, stringSet);
                }
            });

            if (writer.AddressSpace == AddressSpace.Int64)
            {
                writer.WriteNulls(4 * sizeof(ulong));
            }
            else
            {
                writer.WriteNulls(5 * sizeof(uint));
            }
        }
 void VerifyNoCyclicDependency()
 {
     if (Nodes.Any(x => x.HasRecursiveNodes()))
     {
         throw new InvalidOperationException();
     }
 }
Пример #4
0
        public void Surround(INode newParent)
        {
            if (newParent == null)
            {
                throw new ArgumentNullException(nameof(newParent));
            }

            if (Nodes.Any(m => m.NodeType != NodeType.Text && IsPartiallyContained(m)))
            {
                throw new DomException(DomError.InvalidState);
            }

            var type = newParent.NodeType;

            if (type == NodeType.Document || type == NodeType.DocumentType || type == NodeType.DocumentFragment)
            {
                throw new DomException(DomError.InvalidNodeType);
            }

            var fragment = ExtractContent();

            while (newParent.HasChildNodes)
            {
                newParent.RemoveChild(newParent.FirstChild);
            }

            Insert(newParent);
            newParent.PreInsert(fragment, null);
            Select(newParent);
        }
Пример #5
0
        private void CaluclateJointLoadVector()
        {
            if (NumberOfDegreesOfFreedom != 0)
            {
                JointLoadVector = Vector <double> .Build.Dense(NumberOfDegreesOfFreedom);
            }

            for (int i = 0; i < NumberOfDegreesOfFreedom; i++)
            {
                if (Nodes.Any(n => n.HorizontalMovementNumber == i))
                {
                    JointLoadVector[i] = Nodes.SingleOrDefault(n => n.HorizontalMovementNumber == i)?
                                         .ConcentratedForces.Sum(cf => cf.CalculateJointLoadVectorNormalForceMember()) ?? 0;
                }
                else if (Nodes.Any(n => n.VerticalMovementNumber == i))
                {
                    JointLoadVector[i] = Nodes.SingleOrDefault(n => n.VerticalMovementNumber == i)?
                                         .ConcentratedForces.Sum(cf => cf.CalculateJointLoadVectorShearMember()) ?? 0;
                }
                else
                {
                    JointLoadVector[i] = Nodes.SingleOrDefault(n => n.LeftRotationNumber == i || n.RightRotationNumber == i)?
                                         .ConcentratedForces.Sum(cf => cf.CalculateJointLoadVectorBendingMomentMember()) ?? 0;
                }
            }
        }
Пример #6
0
        public bool Contains(string path)
        {
            path = path.Replace("\\", "/");
            int f = path.IndexOf("/");

            if (f == -1)
            {
                string v;
                bool   hasAttr = Attributes.TryGetValue(path, out v);
                if (hasAttr)
                {
                    return(true);
                }
                return(Nodes.Any(o => o.Name == path));
            }

            string      name = path.Substring(0, f);
            SettingNode node = Nodes.FirstOrDefault(o => o.Name == name);

            if (node == null)
            {
                return(false);
            }
            return(node.Contains(path.Substring(f + 1)));
        }
Пример #7
0
        /// <summary>
        /// Удаление "висячих" точек и рёбер
        /// </summary>
        private void RemovePendentEdges()
        {
            while (Nodes.Any(pn => pn.Edges.Count == 1))
            {
                foreach (var pn in Nodes.ToList().Where(pn => pn.Edges.Count == 1))
                {
                    if (pn.Edges.Count == 0)
                    {
                        continue;
                    }
                    var edge = pn.Edges[0];
                    // "висящее" ребро на главном периметре не должно удаляться
                    var masterEdge = (edge.IsHorizontal && (edge.Node1.Offset.Y == Area.Top && edge.Node2.Offset.Y == Area.Top ||
                                                            edge.Node1.Offset.Y == Area.Bottom && edge.Node2.Offset.Y == Area.Bottom)) ||
                                     (edge.IsVertical && (edge.Node1.Offset.X == Area.Left && edge.Node2.Offset.X == Area.Left ||
                                                          edge.Node1.Offset.X == Area.Right && edge.Node2.Offset.X == Area.Right));
                    if (masterEdge)
                    {
                        goto exit;
                    }
                    var pnOther = edge.Node1 == pn ? edge.Node2 : edge.Node1;
                    pnOther.Edges.Remove(edge);
                    Edges.Remove(edge);
                    Nodes.Remove(pn);
                    RemoveIsAnadromousNode(pnOther);
                }
            }
exit:
            // удаление одиноких узловых точек
            Nodes.RemoveAll(pn => pn.IsEmpty);
        }
Пример #8
0
        /// <summary>
        /// Removes a node
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        bool IObservableGraphSource.RemoveNode(object node)
        {
            IsDirty = true;

            if (Nodes.Contains(node))
            {
                var nodeVm = node as NodeViewModel;
                Nodes.Remove(nodeVm);

                var connections = Connections.Where(x =>
                                                    !Nodes.Any(y => y.Id == x.SourceViewModel?.Id) ||
                                                    !Nodes.Any(y => y.Id == x.TargetViewModel?.Id)).ToList();

                foreach (var connection in connections)
                {
                    Connections.Remove(connection);
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #9
0
        public override string ToString()
        {
            var builder = new StringBuilder();

            builder.Append(Message);

            if (Nodes.Any())
            {
                if (!Message.EndsWith("."))
                {
                    builder.Append(". ");
                }

                builder.Append("At ");

                foreach (var node in Nodes)
                {
                    if (node.Location != null)
                    {
                        builder.Append($"{node.Kind}@{node.Location}");
                    }
                    else
                    {
                        builder.Append($"{node.Kind}");
                    }

                    builder.Append(", ");
                }
            }

            return(builder.ToString().Trim().TrimEnd(','));
        }
        private bool CheckIfMetInMiddle()
        {
            // This is the most optimal way that I found to check for matching nodes
            var destSet   = DestinationSet;
            var sourceSet = SourceSet;

            destSet.UnionWith(DestinationGraph.Nodes.Select(s => s.CubeNode));
            sourceSet.UnionWith(Nodes.Select(f => f.CubeNode));

            var intersect = destSet.Intersect(sourceSet, CubeComparer).Any(); // Intersects both sets to check for any matched

            if (!intersect)
            {
                return(true);
            }
            var all        = DestinationGraph.Nodes.Where(b => Nodes.Any(a => a.IsEqual(b))); // Checks which node matched
            var sourceNode = all.First();                                                     // Gets the matching node

            if (sourceNode == null)
            {
                return(true);
            }
            MiddleNode = sourceNode;                  // Set the middle propety to the matching node
            DestinationGraph.SolvedNode = SolvedNode; // Set the destination solved node to this node
            return(false);
        }
Пример #11
0
 private void AddNodeViewModel(Node viewModel)
 {
     Nodes.Add(viewModel);
     ShowBoundingBox = Nodes.Any();
     AddWiresForNode(viewModel);
     UpdateDiagramBoundingBox();
     NotifyOfPropertyChange(nameof(Nodes));
 }
Пример #12
0
 /// <summary>
 /// Removes a node from the diagram.
 /// </summary>
 /// <param name="node">The node to remove.</param>
 public void RemoveNode(Node node)
 {
     DiagramModel.RemoveNode(node.Model);
     Nodes.Remove(node);
     UpdateDiagramBoundingBox();
     ShowBoundingBox = Nodes.Any();
     NotifyOfPropertyChange(nameof(Nodes));
 }
Пример #13
0
        public void Visit(Action <BackTrackingNode> function)
        {
            function.Invoke(this);

            if (Nodes != null && Nodes.Any())
            {
                Nodes.ForEach(d => d.Visit(function));
            }
        }
Пример #14
0
        public bool HasChildrens()
        {
            if (nodesDirty)
            {
                RebuildChildrensCore();
            }

            return(Nodes.Any());
        }
Пример #15
0
 private void AddNodeViewModel(Node viewModel)
 {
     Nodes.Add(viewModel);
     BoundingBoxVisible = Nodes.Any();
     AddWiresForNode(viewModel);
     viewModel.Initialize();
     UpdateDiagramBoundingBox();
     NotifyOfPropertyChange(nameof(AreInstructionsVisible));
 }
Пример #16
0
        private int FindIndexOfNodeThatShouldPrecede(ProcessGroupNode aNodeGroup)
        {
            Func <Node, bool> textPrecedesNodeText = node => aNodeGroup.Text.CompareTo(node.Text) > 0;

            if (!Nodes.Any(textPrecedesNodeText))
            {
                return(-1);
            }
            return(Nodes.Last(textPrecedesNodeText).Index);
        }
Пример #17
0
 public void AddNode(SwimNode node)
 {
     lock (_nodesLock)
     {
         if (!Nodes.Any(x => x.Endpoint == node.Endpoint))
         {
             Nodes.Enqueue(node);
         }
     }
 }
Пример #18
0
        public void SetStatus()
        {
            if (!Nodes.Any())
            {
                Status = ClusterStatus.NoThresholdsSet;
                return;
            }

            Status = (ClusterStatus)Nodes.SelectMany(n => n.Metrics).Select(m => m.Status).Max();
        }
Пример #19
0
        public bool ContainsVector2(Vector2 position)
        {
            bool contains = false;

            if (Nodes.Any(x => x.Position == position))
            {
                contains = true;
            }
            return(contains);
        }
        public override string ToString()
        {
            var print = base.ToString();

            if (!Nodes.Any() && !Properties.Any())
            {
                print += $": {TypeHelper.ToStringOrNull(Value)}";
            }
            return(print);
        }
Пример #21
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public string NextNodeID()
        {
            int i = 1;

            while (Nodes.Any(a => a.Name == $"Node {i}"))
            {
                i++;
            }
            return($"Node {i}");
        }
Пример #22
0
 public void UpdateWires()
 {
     do
     {
         foreach (Wire wire in Wires)
         {
             wire.Update();
             UpdateCount++;
         }
     } while (Nodes.Any(node => node.RequiresUpdate));
 }
Пример #23
0
 public IEnumerator <Tuple <ConversationNode, IConversationEditorControlData <ConversationNode, TransitionNoduleUIInfo> > > MakeEnumerator()
 {
     if (Nodes.Any())
     {
         return(Nodes.Select(n => new Tuple <ConversationNode, IConversationEditorControlData <ConversationNode, TransitionNoduleUIInfo> >(n, File)).InfiniteRepeat().GetEnumerator());
     }
     else
     {
         return(null);
     }
 }
Пример #24
0
        public Node AddNodeAt(Vector3 vector)
        {
            var node = new Node()
            {
                Id       = Nodes.Any() ? Nodes.Max(n => n.Id) + 1 : 1,
                Location = vector
            };

            Nodes.Add(node);
            return(node);
        }
Пример #25
0
 public static void DebugStatus()
 {
     Log.Message("duplicated positions:\n " +
                 string.Join(
                     "\n",
                     Nodes.Where(n => Nodes.Any(n2 => n != n2 && n.X == n2.X && n.Y == n2.Y))
                     .Select(n => n.X + ", " + n.Y + ": " + n.Label).ToArray()));
     Log.Message("out-of-bounds nodes:\n" +
                 string.Join(
                     "\n", Nodes.Where(n => n.X < 1 || n.Y < 1).Select(n => n.ToString()).ToArray()));
     Log.Trace(ToString());
 }
Пример #26
0
        protected string GetPath(bool moreMarker)
        {
            var more       = moreMarker && Nodes.Any() ? ">" : string.Empty;
            var value      = Parent?.GetPath(false);
            var parentPath = string.IsNullOrEmpty(value) ? string.Empty : $"{value}/";

            if (GetType() == typeof(SubMenu))
            {
                return(string.Empty);
            }
            return($"{parentPath}{Name}{more}");
        }
Пример #27
0
        public void PrintNodes()
        {
            if (!Nodes.Any())
            {
                throw new Exception("There's no nodes.");
            }
            int index = 0;

            foreach (Node node in Nodes)
            {
                Console.WriteLine(String.Format("Node {0}: {1}", ++index, node));
            }
        }
        private MergerCompareResult Evaluate()
        {
            if (!Nodes.Any() && !Properties.Any())
            {
                return(MergerCompareEngine.Evaluate(Instance, Compare));
            }
            var results = Properties.SelectMany(k => k.Value).Select(p => p.Result)
                          .Union(Nodes.SelectMany(k => k.Value).Select(n => n.Result))
                          .Distinct()
                          .ToList();

            return(results.Count > 1 ? MergerCompareResult.Different : results.First());
        }
Пример #29
0
        public Dgml AddNode(string id, string label)
        {
            if (!Nodes.Any(node => node.Id == id))
            {
                Nodes.Add(new DgmlNode
                {
                    Id    = id,
                    Label = label
                });
            }

            return(this);
        }
Пример #30
0
        public void RemoveNode(Node viewModel)
        {
            var wiresConnectedToNode = viewModel.Terminals.SelectMany(t => t.Model.ConnectedWires);
            var wiresToRemove        = Wires.Where(w => wiresConnectedToNode.Contains(w.Model));

            wiresToRemove.ForEach(RemoveWire);
            Model.RemoveNode(viewModel.Model);
            Nodes.Remove(viewModel);
            viewModel.DisconnectAllTerminals();
            viewModel.Uninitialize();
            UpdateDiagramBoundingBox();
            BoundingBoxVisible = Nodes.Any();
            NotifyOfPropertyChange(nameof(AreInstructionsVisible));
        }