public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_RuntimeMessageLevel level)
        {
            msg   = "";
            level = GH_RuntimeMessageLevel.Blank;
            //var line = new LineCurve();
            Brep inSrfc    = null;
            var  noIndex   = 0;
            var  comment   = "";
            var  rfSrfc    = new RFSurface();
            var  inRFEM    = new GH_RFEM();
            var  rfEdges   = new List <RFLine>();
            var  mod       = false;
            var  del       = false;
            var  boundList = "";
            var  geomType  = 0;
            var  stiffType = 0;
            var  thickType = 0;
            var  thick     = 0.0;
            var  mat       = 0;

            //int intPoints = 4;
            //int newNo = 0;

            if (DA.GetData(9, ref inRFEM))
            {
                rfSrfc = new RFSurface((RFSurface)inRFEM.Value);
                if (DA.GetData(0, ref inSrfc))
                {
                    Component_RFSurface.SetGeometry(inSrfc, ref rfSrfc);
                }
                if (DA.GetData(6, ref geomType))
                {
                    rfSrfc.GeometryType = (SurfaceGeometryType)geomType;
                    if (rfSrfc.GeometryType == SurfaceGeometryType.UnknownGeometryType)
                    {
                        msg   = "Surface Geometry Type not supported. ";
                        level = GH_RuntimeMessageLevel.Warning;
                        return;
                    }
                }
                if (DA.GetData(2, ref mat))
                {
                    rfSrfc.MaterialNo = mat;
                }
                if (DA.GetData(3, ref thick))
                {
                    rfSrfc.Thickness = thick;
                }
            }
            else if (DA.GetData(0, ref inSrfc))
            {
                if (!(DA.GetData(2, ref mat) && DA.GetData(3, ref thick)))
                {
                    msg   = "Insufficient input parameters. Provide Material Number and Surface thickness. ";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;
                }
                if (inSrfc.Edges.Select(x => x.GetLength()).Min() <= 0.001)
                {
                    level = GH_RuntimeMessageLevel.Warning;
                    msg   = "Boundary lines are too short. It may cause import errors.";
                }
                else
                {
                    rfSrfc.MaterialNo = mat;
                    rfSrfc.Thickness  = thick;
                }
                //DA.GetData(7, ref intPoints);
                Component_RFSurface.SetGeometry(inSrfc, ref rfSrfc);
                if (DA.GetData(6, ref geomType))
                {
                    rfSrfc.GeometryType = (SurfaceGeometryType)geomType;
                    if (rfSrfc.GeometryType == SurfaceGeometryType.NurbsSurfaceType)
                    {
                        if (inSrfc.Edges.Count != 4)
                        {
                            msg   = "Provide a valide NURBS Surface with 4 edge curves. ";
                            level = GH_RuntimeMessageLevel.Warning;
                            return;
                        }
                        Component_RFSurface.SetGeometryNURBS(inSrfc, ref rfSrfc);
                    }
                    if (rfSrfc.GeometryType == SurfaceGeometryType.UnknownGeometryType)
                    {
                        msg   = "Surface Geometry Type not supported. ";
                        level = GH_RuntimeMessageLevel.Warning;
                        return;
                    }
                }
            }
            else if (DA.GetData(5, ref boundList))
            {
                rfSrfc.BoundaryLineList = boundList;
                if (!(DA.GetData(2, ref mat) && DA.GetData(3, ref thick)))
                {
                    msg   = "Insufficient input parameters. Provide Material Number and Surface thickness. ";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;
                }
                else
                {
                    rfSrfc.MaterialNo = mat;
                    rfSrfc.Thickness  = thick;
                }
                if (DA.GetData(6, ref geomType))
                {
                    rfSrfc.GeometryType = (SurfaceGeometryType)geomType;
                    if (rfSrfc.GeometryType == SurfaceGeometryType.UnknownGeometryType || (rfSrfc.GeometryType != SurfaceGeometryType.PlaneSurfaceType && rfSrfc.GeometryType != SurfaceGeometryType.QuadrangleSurfaceType))
                    {
                        msg   = "Surface Geometry Type not supported. ";
                        level = GH_RuntimeMessageLevel.Warning;
                        return;
                    }
                }
                //}else
                //{
                //    rfSrfc.GeometryType = SurfaceGeometryType.PlaneSurfaceType;
                //}
            }
            else
            {
                msg   = "Insufficient input parameters. Provide either Input Surface shape, Boundary Lines List or existing RFSurface Object. ";
                level = GH_RuntimeMessageLevel.Warning;
                return;
            }
            if (DA.GetData(10, ref mod))
            {
                rfSrfc.ToModify = mod;
            }
            if (DA.GetData(11, ref del))
            {
                rfSrfc.ToDelete = del;
            }
            if (DA.GetData(1, ref noIndex))
            {
                rfSrfc.No = noIndex;
            }
            if (DA.GetData(4, ref comment))
            {
                rfSrfc.Comment = comment;
            }
            if (DA.GetData(5, ref boundList))
            {
                rfSrfc.BoundaryLineList = boundList;
            }
            if (DA.GetData(7, ref thickType))
            {
                rfSrfc.ThicknessType = (SurfaceThicknessType)thickType;
                if (rfSrfc.ThicknessType == SurfaceThicknessType.UnknownThicknessType)
                {
                    msg   = "Surface Thickness Type not supported. ";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;
                }
            }
            if (DA.GetData(8, ref stiffType))
            {
                rfSrfc.StiffnessType = (SurfaceStiffnessType)stiffType;
                if (rfSrfc.StiffnessType == SurfaceStiffnessType.UnknownStiffnessType)
                {
                    msg   = "Taper Shape Type not supported. ";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;
                }
            }
            DA.SetData(0, rfSrfc);
        }
        public static void SetGeometry(Brep surface, ref RFSurface rfSurface)
        {
            var myBoundaryLines = new List <NurbsCurve>();

            foreach (var brepEdge in surface.Edges)
            {
                myBoundaryLines.Add(brepEdge.ToNurbsCurve());
            }
            var joinedEdges = Curve.JoinCurves(myBoundaryLines).ToList();

            // In case of openings, countours must be sorted
            if (joinedEdges.Count > 1)
            {
                joinedEdges = joinedEdges.OrderByDescending(x => x.GetLength()).ToList();
            }
            var edges = new List <RFLine>();

            foreach (var e in joinedEdges[0].DuplicateSegments())
            {
                var myRFLine = new RFLine();
                Component_RFLine.SetGeometry(e, ref myRFLine);
                edges.Add(myRFLine);
            }
            rfSurface.Edges = edges.ToArray();
            // Openings
            if (joinedEdges.Count > 1)
            {
                var openings = new List <RFOpening>();
                for (int i = 1; i < joinedEdges.Count; i++)
                {
                    var myOpening = new Opening();
                    myOpening.InSurfaceNo = rfSurface.No;
                    var opEdges = new List <RFLine>();
                    foreach (var e in joinedEdges[i].DuplicateSegments())
                    {
                        var myRFLine = new RFLine();
                        Component_RFLine.SetGeometry(e, ref myRFLine);
                        opEdges.Add(myRFLine);
                    }
                    openings.Add(new RFOpening(myOpening, opEdges.ToArray()));
                }
                rfSurface.Openings = openings.ToArray();
            }
            // Check if surface is Planar to assign type
            if (rfSurface.IsPlanar())
            {
                rfSurface.GeometryType = SurfaceGeometryType.PlaneSurfaceType;
            }
            else
            {
                rfSurface.GeometryType = SurfaceGeometryType.QuadrangleSurfaceType;
                //var interpolatedPoints = 4;
                //// Assign control points
                //var myControlPoints = new Point3d[interpolatedPoints + 2, interpolatedPoints + 2];
                //var srfc = surface.Faces[0];
                //var uDomain = srfc.Domain(0);
                //var vDomain = srfc.Domain(1);
                //var derivatives = new Vector3d[0];
                //for (int i = 0; i < interpolatedPoints + 2; i++)
                //{
                //    var u = uDomain.T0 + i * (uDomain.T1 - uDomain.T0) / (interpolatedPoints + 1);
                //    for (int j = 0; j < interpolatedPoints + 2; j++)
                //    {
                //        var v = vDomain.T0 + j * (vDomain.T1 - vDomain.T0) / (interpolatedPoints + 1);
                //        srfc.Evaluate(u, v, 0, out myControlPoints[i, j], out derivatives);
                //    }
                //}
                //rfSurface.ControlPoints = myControlPoints;

                //SetGeometryNURBS(surface, ref rfSurface);
            }
        }
        public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_RuntimeMessageLevel level)
        {
            msg   = "";
            level = GH_RuntimeMessageLevel.Blank;
            //var line = new LineCurve();
            Brep inSrfc    = null;
            var  noIndex   = 0;
            var  comment   = "";
            var  rfSrfc    = new RFSurface();
            var  inRFEM    = new GH_RFEM();
            var  rfEdges   = new List <RFLine>();
            var  mod       = false;
            var  del       = false;
            var  boundList = "";
            var  geomType  = 0;
            var  stiffType = 0;
            var  thickType = 0;
            var  thick     = 0.0;
            var  mat       = 0;
            var  ecc       = 0.0;

            //int intPoints = 4;
            //int newNo = 0;
            RFEM.SurfaceAxes axes = new RFEM.SurfaceAxes();
            var     axesDirType   = 0;
            var     axesLines     = 0;
            Point3d pt1           = new Point3d();
            Point3d pt2           = new Point3d();
            int     csNo          = 0;
            var     rot           = 0.0;

            if (DA.GetData(13, ref inRFEM))
            {
                rfSrfc = new RFSurface((RFSurface)inRFEM.Value);
                if (DA.GetData(0, ref inSrfc))
                {
                    Component_RFSurface.SetGeometry(inSrfc, ref rfSrfc);
                }
                if (DA.GetData(6, ref geomType))
                {
                    rfSrfc.GeometryType = (SurfaceGeometryType)geomType;
                    if (rfSrfc.GeometryType == SurfaceGeometryType.UnknownGeometryType)
                    {
                        msg   = "Surface Geometry Type not supported. ";
                        level = GH_RuntimeMessageLevel.Warning;
                        return;
                    }
                }
                if (DA.GetData(2, ref mat))
                {
                    rfSrfc.MaterialNo = mat;
                }
                if (DA.GetData(3, ref thick))
                {
                    rfSrfc.Thickness = thick;
                }
            }
            else if (DA.GetData(0, ref inSrfc))
            {
                if (!(DA.GetData(2, ref mat) && DA.GetData(3, ref thick)))
                {
                    msg   = "Insufficient input parameters. Provide Material Number and Surface thickness. ";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;
                }
                if (inSrfc.Edges.Select(x => x.GetLength()).Min() <= 0.001)
                {
                    level = GH_RuntimeMessageLevel.Warning;
                    msg   = "Boundary lines are too short. It may cause import errors.";
                }
                else
                {
                    rfSrfc.MaterialNo = mat;
                    rfSrfc.Thickness  = thick;
                }
                Component_RFSurface.SetGeometry(inSrfc, ref rfSrfc);
                if (DA.GetData(6, ref geomType))
                {
                    rfSrfc.GeometryType = (SurfaceGeometryType)geomType;
                    if (rfSrfc.GeometryType == SurfaceGeometryType.NurbsSurfaceType)
                    {
                        if (inSrfc.Edges.Count != 4)
                        {
                            msg   = "Provide a valide NURBS Surface with 4 edge curves. ";
                            level = GH_RuntimeMessageLevel.Warning;
                            return;
                        }
                        Component_RFSurface.SetGeometryNURBS(inSrfc, ref rfSrfc);
                    }
                    if (rfSrfc.GeometryType == SurfaceGeometryType.UnknownGeometryType)
                    {
                        msg   = "Surface Geometry Type not supported. ";
                        level = GH_RuntimeMessageLevel.Warning;
                        return;
                    }
                }
            }
            else if (DA.GetData(5, ref boundList))
            {
                rfSrfc.BoundaryLineList = boundList;
                if (!(DA.GetData(2, ref mat) && DA.GetData(3, ref thick)))
                {
                    msg   = "Insufficient input parameters. Provide Material Number and Surface thickness. ";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;
                }
                else
                {
                    rfSrfc.MaterialNo = mat;
                    rfSrfc.Thickness  = thick;
                }
                if (DA.GetData(6, ref geomType))
                {
                    rfSrfc.GeometryType = (SurfaceGeometryType)geomType;
                    if (rfSrfc.GeometryType == SurfaceGeometryType.UnknownGeometryType || (rfSrfc.GeometryType != SurfaceGeometryType.PlaneSurfaceType && rfSrfc.GeometryType != SurfaceGeometryType.QuadrangleSurfaceType))
                    {
                        msg   = "Surface Geometry Type not supported. ";
                        level = GH_RuntimeMessageLevel.Warning;
                        return;
                    }
                }
            }
            else
            {
                msg   = "Insufficient input parameters. Provide either Input Surface shape, Boundary Lines List or existing RFSurface Object. ";
                level = GH_RuntimeMessageLevel.Warning;
                return;
            }
            if (DA.GetData(14, ref mod))
            {
                rfSrfc.ToModify = mod;
            }
            if (DA.GetData(15, ref del))
            {
                rfSrfc.ToDelete = del;
            }
            if (DA.GetData(1, ref noIndex))
            {
                rfSrfc.No = noIndex;
            }
            if (DA.GetData(4, ref comment))
            {
                rfSrfc.Comment = comment;
            }
            if (DA.GetData(5, ref boundList))
            {
                rfSrfc.BoundaryLineList = boundList;
            }
            if (DA.GetData(7, ref thickType))
            {
                rfSrfc.ThicknessType = (SurfaceThicknessType)thickType;
                if (rfSrfc.ThicknessType == SurfaceThicknessType.UnknownThicknessType)
                {
                    msg   = "Surface Thickness Type not supported. ";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;
                }
            }
            if (DA.GetData(8, ref stiffType))
            {
                rfSrfc.StiffnessType = (SurfaceStiffnessType)stiffType;
                if (rfSrfc.StiffnessType == SurfaceStiffnessType.UnknownStiffnessType)
                {
                    msg   = "Taper Shape Type not supported. ";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;
                }
            }
            if (DA.GetData(9, ref ecc))
            {
                rfSrfc.Eccentricity = ecc;
            }
            if (DA.GetData(10, ref axesDirType))
            {
                axes.SurfaceAxesDirection = (SurfaceAxesDirection)axesDirType;
                switch (axes.SurfaceAxesDirection)
                {
                case SurfaceAxesDirection.UnknownSurfaceAxesDirection:
                    msg   = "Axes direction not supported.";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;

                case SurfaceAxesDirection.StandardSurfaceAxesDirection:
                    break;

                case SurfaceAxesDirection.IdenticalToAxesForInput:
                    msg   = "Axes are always paralell to axes for input.";
                    level = GH_RuntimeMessageLevel.Warning;
                    break;

                case SurfaceAxesDirection.SurfaceAxesParallelToGlobalCS:
                    msg   = "Axes direction not supported.";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;

                case SurfaceAxesDirection.SurfaceAxesParallelToUserCS:
                    msg   = "Axes direction not supported.";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;

                case SurfaceAxesDirection.SurfaceAngularRotation:
                    if (!(DA.GetData(12, ref rot)))
                    {
                        msg   = "Insufficient input parameters. Provide Angular rotation.";
                        level = GH_RuntimeMessageLevel.Warning;
                        return;
                    }
                    axes.Rotation = rot;
                    break;

                case SurfaceAxesDirection.SurfaceAxisXDirectToPoint:
                    msg   = "Axes direction not supported.";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;

                case SurfaceAxesDirection.SurfaceAxisYDirectToPoint:
                    msg   = "Axes direction not supported.";
                    level = GH_RuntimeMessageLevel.Warning;
                    return;

                case SurfaceAxesDirection.SurfaceAxisXParallelToLine:
                    if (!DA.GetData(11, ref axesLines))
                    {
                        msg   = "Insufficient input parameters. Provide Line.";
                        level = GH_RuntimeMessageLevel.Warning;
                        return;
                    }
                    axes.AxesLineList = axesLines.ToString();
                    break;

                case SurfaceAxesDirection.SurfaceAxisYParallelToLine:
                    if (!DA.GetData(11, ref axesLines))
                    {
                        msg   = "Insufficient input parameters. Provide Line.";
                        level = GH_RuntimeMessageLevel.Warning;
                        return;
                    }
                    axes.AxesLineList = axesLines.ToString();
                    break;
                }
                rfSrfc.SurfaceAxes = axes;
            }
            else if (DA.GetData(12, ref rot) || DA.GetData(11, ref axesLines))
            {
                msg   = "Insufficient input parameters. Provide Axes Direction.";
                level = GH_RuntimeMessageLevel.Warning;
                return;
            }
            DA.SetData(0, rfSrfc);
        }
        public static void SetGeometryNURBS(Brep surface, ref RFSurface rfSurface)
        {
            var myNurbsSurface = surface.Faces[0].ToNurbsSurface();
            var edgesNURBS     = new NurbsCurve[4];
            // Get boundary Lines - UNTRIMMED!!!
            var edge1 = new NurbsCurve(myNurbsSurface.OrderU - 1, myNurbsSurface.Points.CountU);

            for (int i = 0; i < myNurbsSurface.Points.CountU; i++)
            {
                edge1.Points[i] = myNurbsSurface.Points.GetControlPoint(i, 0);
            }
            for (int i = 0; i < myNurbsSurface.KnotsU.Count; i++)
            {
                edge1.Knots[i] = myNurbsSurface.KnotsU[i];
            }
            var edge2 = new NurbsCurve(myNurbsSurface.OrderV - 1, myNurbsSurface.Points.CountV);

            for (int i = 0; i < myNurbsSurface.Points.CountV; i++)
            {
                edge2.Points[i] = myNurbsSurface.Points.GetControlPoint(0, i);
            }
            for (int i = 0; i < myNurbsSurface.KnotsV.Count; i++)
            {
                edge2.Knots[i] = myNurbsSurface.KnotsV[i];
            }
            var edge3 = new NurbsCurve(myNurbsSurface.OrderU - 1, myNurbsSurface.Points.CountU);

            for (int i = 0; i < myNurbsSurface.Points.CountU; i++)
            {
                edge3.Points[i] = myNurbsSurface.Points.GetControlPoint(i, myNurbsSurface.Points.CountV - 1);
            }
            for (int i = 0; i < myNurbsSurface.KnotsU.Count; i++)
            {
                edge3.Knots[i] = myNurbsSurface.KnotsU[i];
            }
            var edge4 = new NurbsCurve(myNurbsSurface.OrderV - 1, myNurbsSurface.Points.CountV);

            for (int i = 0; i < myNurbsSurface.Points.CountV; i++)
            {
                edge4.Points[i] = myNurbsSurface.Points.GetControlPoint(myNurbsSurface.Points.CountU - 1, i);
            }
            for (int i = 0; i < myNurbsSurface.KnotsV.Count; i++)
            {
                edge4.Knots[i] = myNurbsSurface.KnotsV[i];
            }
            edgesNURBS[0] = edge1;
            edgesNURBS[1] = edge2;
            edgesNURBS[2] = edge3;
            edgesNURBS[3] = edge4;

            //var myBoundaryLines = new List<NurbsCurve>();
            ////Untrim surface
            //var unTrimmed = surface.Faces[0].DuplicateSurface().ToBrep();
            //foreach (var brepEdge in unTrimmed.Edges)
            //{
            //    myBoundaryLines.Add(brepEdge.ToNurbsCurve());
            //}
            //var joinedEdges = Curve.JoinCurves(myBoundaryLines).ToList();
            //// In case of openings, countours must be sorted
            //if (joinedEdges.Count > 1)
            //{
            //    joinedEdges = joinedEdges.OrderByDescending(x => x.GetLength()).ToList();
            //}
            var edges = new List <RFLine>();

            //foreach (var e in joinedEdges[0].DuplicateSegments())
            foreach (var e in edgesNURBS)
            {
                var myRFLine = new RFLine();
                // If line has just 2 points - insert additional one (otherwise it doesnw work in RFEM)
                //var eNURBS = e.ToNurbsCurve();
                if (e.Points.Count <= 2)
                {
                    var splitted = e.Rebuild(3, e.Degree, true);
                }
                Component_RFLine.SetGeometry(e, ref myRFLine);
                edges.Add(myRFLine);
            }
            rfSurface.Edges = edges.ToArray();
            //// Openings
            //if (joinedEdges.Count > 1)
            //{
            //    var openings = new List<RFOpening>();
            //    for (int i = 1; i < joinedEdges.Count; i++)
            //    {
            //        var myOpening = new Opening();
            //        myOpening.InSurfaceNo = rfSurface.No;
            //        var opEdges = new List<RFLine>();
            //        foreach (var e in joinedEdges[i].DuplicateSegments())
            //        {
            //            var myRFLine = new RFLine();
            //            Component_RFLine.SetGeometry(e, ref myRFLine);
            //            opEdges.Add(myRFLine);
            //        }
            //        openings.Add(new RFOpening(myOpening, opEdges.ToArray()));
            //    }
            //    rfSurface.Openings = openings.ToArray();
            //}
            // Check if surface is Planar to assign type
            rfSurface.GeometryType = SurfaceGeometryType.NurbsSurfaceType;
            // Assign Nurbsurface data
            var utNURBS         = surface.Faces[0].DuplicateSurface().ToNurbsSurface();
            var myControlPoints = new Point3d[utNURBS.Points.CountU, utNURBS.Points.CountV];
            var myWeights       = new double[utNURBS.Points.CountU, utNURBS.Points.CountV];

            for (int i = 0; i < utNURBS.Points.CountU; i++)
            {
                for (int j = 0; j < utNURBS.Points.CountV; j++)
                {
                    var myPt = new Point3d();
                    utNURBS.Points.GetPoint(i, j, out myPt);
                    myControlPoints[i, j] = myPt;
                    myWeights[i, j]       = utNURBS.Points.GetWeight(i, j);
                }
            }

            // modify formulation -see curve knots!!!!!!!!!!!

            var countKnotsX = utNURBS.Points.CountU + utNURBS.OrderU;
            var myKnotX     = new double[countKnotsX];

            for (int i = 0; i < countKnotsX - 2; i++)
            {
                myKnotX[i + 1] = utNURBS.KnotsU[i] / utNURBS.KnotsU[countKnotsX - 3];
            }
            myKnotX[0] = myKnotX[1];
            myKnotX[countKnotsX - 1] = myKnotX[countKnotsX - 2];
            var countKnotsY = utNURBS.Points.CountV + utNURBS.OrderV;
            var myKnotY     = new double[countKnotsY];

            for (int i = 0; i < countKnotsY - 2; i++)
            {
                myKnotY[i + 1] = utNURBS.KnotsV[i] / utNURBS.KnotsV[countKnotsY - 3];
            }
            myKnotY[0] = myKnotY[1];
            myKnotY[countKnotsY - 1] = myKnotY[countKnotsY - 2];
            // Assign nurbs values
            rfSurface.ControlPoints = myControlPoints;
            rfSurface.Weights       = myWeights;
            rfSurface.KnotsX        = myKnotX;
            rfSurface.KnotsY        = myKnotY;
            rfSurface.OrderX        = utNURBS.OrderU;
            rfSurface.OrderY        = utNURBS.OrderV;
        }
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object can be used to retrieve data from input parameters and
        /// to store data in output parameters.</param>
        protected override void SolveInstance(IGH_DataAccess DA, EvaluationUnit unit)
        {
            //var line = new LineCurve();
            Brep inSrfc    = null;
            var  noIndex   = 0;
            var  comment   = "";
            var  rfSrfc    = new RFSurface();
            var  inRFEM    = new GH_RFEM();
            var  rfEdges   = new List <RFLine>();
            var  mod       = false;
            var  del       = false;
            var  boundList = "";
            var  geomType  = "";
            var  stiffType = "";
            var  thickType = "";
            var  thick     = 0.0;
            var  mat       = 0;

            //int intPoints = 4;
            //int newNo = 0;

            if (DA.GetData(9, ref inRFEM))
            {
                rfSrfc = new RFSurface((RFSurface)inRFEM.Value);
                if (DA.GetData(6, ref geomType))
                {
                    Enum.TryParse(geomType, out SurfaceGeometryType myGeomType);
                    rfSrfc.GeometryType = myGeomType;
                }
            }
            else if (DA.GetData(0, ref inSrfc))
            {
                if (!(DA.GetData(2, ref mat) && DA.GetData(3, ref thick)))
                {
                    return;
                }
                else
                {
                    rfSrfc.MaterialNo = mat;
                    rfSrfc.Thickness  = thick;
                }
                //DA.GetData(7, ref intPoints);
                if (DA.GetData(6, ref geomType))
                {
                    Enum.TryParse(geomType, out SurfaceGeometryType myGeomType);
                    rfSrfc.GeometryType = myGeomType;
                }
                Component_RFSurface.SetGeometry(inSrfc, ref rfSrfc);
            }
            else
            {
                return;
            }
            if (DA.GetData(10, ref mod))
            {
                rfSrfc.ToModify = mod;
            }
            if (DA.GetData(11, ref del))
            {
                rfSrfc.ToDelete = del;
            }
            if (DA.GetData(1, ref noIndex))
            {
                rfSrfc.No = noIndex;
            }
            if (DA.GetData(4, ref comment))
            {
                rfSrfc.Comment = comment;
            }
            if (DA.GetData(5, ref boundList))
            {
                rfSrfc.BoundaryLineList = boundList;
            }
            if (DA.GetData(7, ref thickType))
            {
                Enum.TryParse(thickType, out SurfaceThicknessType myThicknessType);
                rfSrfc.ThicknessType = myThicknessType;
            }
            if (DA.GetData(8, ref stiffType))
            {
                Enum.TryParse(stiffType, out SurfaceStiffnessType myStiffType);
                rfSrfc.StiffnessType = myStiffType;
            }

            DA.SetData(0, rfSrfc);
        }