using CaeMesh; using System; using System.Collections.Generic; namespace RBFMorphing { [Serializable] public sealed class NodeSet : AbstractClass { [NonSerialized] private readonly FeMesh _mesh; public NodeSet(FeMesh mesh, FeNodeSet nodeSet) : base(EnumMorphMethod.NodeSet) { if (mesh == null || nodeSet == null) throw new ArgumentNullException(nameof(NodeSet)); if (!mesh.NodeSets.ContainsKey(nodeSet.Name)) throw new ArgumentException(nameof(mesh)); _mesh = mesh; _name = nodeSet.Name; } public override List GetNodes() { var nodes = new List(); // ReSharper disable once InvertIf if (_mesh.NodeSets.TryGetValue(_name, out var nodeSet)) { foreach (var id in nodeSet.Labels) { if (_mesh.Nodes.TryGetValue(id, out var node)) nodes.Add(node); } } return nodes; } public override int[] Labels => _mesh.NodeSets.TryGetValue(_name, out var nodeSet) ? nodeSet.Labels : null; public override int Length => Labels?.Length ?? 0; } }