public GsaNode Duplicate()
        {
            if (this.Node == null)
            {
                return(null);
            }
            GsaNode dup = new GsaNode
            {
                Node = new Node
                {
                    AxisProperty   = Node.AxisProperty,
                    DamperProperty = Node.DamperProperty,
                    MassProperty   = Node.MassProperty,
                    Name           = Node.Name,
                    Restraint      = new NodalRestraint
                    {
                        X  = Node.Restraint.X,
                        Y  = Node.Restraint.Y,
                        Z  = Node.Restraint.Z,
                        XX = Node.Restraint.XX,
                        YY = Node.Restraint.YY,
                        ZZ = Node.Restraint.ZZ,
                    },
                    SpringProperty = Node.SpringProperty,
                }
            };

            if ((System.Drawing.Color)Node.Colour != System.Drawing.Color.FromArgb(0, 0, 0)) // workaround to handle that System.Drawing.Color is non-nullable type
            {
                dup.Node.Colour = Node.Colour;
            }

            dup.Point = new Point3d
            {
                X = Node.Position.X,
                Y = Node.Position.Y,
                Z = Node.Position.Z,
            };

            if (m_id != 0)
            {
                dup.ID = m_id;
            }
            if (m_spring != null)
            {
                dup.Spring = m_spring.Duplicate();
            }
            if (m_plane != null)
            {
                dup.LocalAxis = LocalAxis.Clone();
            }
            return(dup);
        }
        public GsaNode Duplicate()
        {
            GsaNode dup = new GsaNode
            {
                Node = Node //add clone or duplicate if available
            };
            Point3dList pt    = new Point3dList(Point);
            Point3dList duppt = pt.Duplicate();

            dup.Point = duppt[0];
            if (m_id != 0)
            {
                dup.ID = m_id;
            }
            if (m_spring != null)
            {
                dup.Spring = m_spring.Duplicate();
            }
            dup.m_plane = LocalAxis.Clone();
            return(dup);
        }