private List <Rhino.Geometry.Curve> CreateRhinoCurves(string selectedLineList) { //defining the list with lines that will have to be returned later on List <Rhino.Geometry.Curve> rhOutputCurves = new List <Rhino.Geometry.Curve>(); // Gets interface to running RFEM application. app = Marshal.GetActiveObject("RFEM5.Application") as IApplication; // Locks RFEM licence app.LockLicense(); // Gets interface to active RFEM model. model = app.GetActiveModel(); // Gets interface to model data. IModelData data = model.GetModelData(); //Create new array for Rhino Curve objects List <Rhino.Geometry.Curve> rhinoLineList = new List <Rhino.Geometry.Curve>(); //Create new array for Rhino point objects List <Rhino.Geometry.Point3d> rhinoPointArray = new List <Rhino.Geometry.Point3d>(); try { for (int index = 0; index < data.GetLineCount(); index++) { Dlubal.RFEM5.Line currentLine = data.GetLine(index, ItemAt.AtIndex).GetData(); // the code below converts string describing nodes used in line definition into // list fo all used node numbers. e.g. converts "1,2,4-7,9" into "1,2,4,5,6,7,9" string lineNodes = currentLine.NodeList; List <int> nodesList = new List <int>(); foreach (string tempLineNode in lineNodes.Split(',')) { if (tempLineNode.Contains('-')) { string[] tempLineNodeDashes = new string[2]; tempLineNodeDashes = tempLineNode.Split('-'); int startNumber = Int32.Parse(tempLineNodeDashes[0]); int endNumber = Int32.Parse(tempLineNodeDashes[1]); for (int i = startNumber; i <= endNumber; i++) { nodesList.Add(i); } } else { nodesList.Add(Int32.Parse(tempLineNode)); } } //currently component only reads "polyline" type from RFEM, i.e. straight lines if (currentLine.Type == LineType.PolylineType) { for (int i = 0; i < nodesList.Count - 1; i++) { //getting data for start point and end point from RFEM Dlubal.RFEM5.Node rfemStartPoint = data.GetNode(nodesList[i], ItemAt.AtNo).GetData(); Dlubal.RFEM5.Node rfemEndPoint = data.GetNode(nodesList[i + 1], ItemAt.AtNo).GetData(); //creating Rhino Objects Point3d rhinoStartPoint = new Point3d(rfemStartPoint.X, rfemStartPoint.Y, rfemStartPoint.Z); Point3d rhinoEndPoint = new Point3d(rfemEndPoint.X, rfemEndPoint.Y, rfemEndPoint.Z); Rhino.Geometry.LineCurve currentRhinoCurve = new Rhino.Geometry.LineCurve(rhinoStartPoint, rhinoEndPoint); rhOutputCurves.Add(currentRhinoCurve); } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } // Releases interface to RFEM model. model = null; // Unlocks licence and releases interface to RFEM application. if (app != null) { app.UnlockLicense(); app = null; } // Cleans Garbage Collector and releases all cached COM interfaces. System.GC.Collect(); System.GC.WaitForPendingFinalizers(); //list with all Rhino Curves is prepared for output return(rhOutputCurves); }