protected override void SolveInstance(IGH_DataAccess DA) { bool newDocument = new bool(); string docName = "empty"; if (!DA.GetData(0, ref newDocument)) { return; } if (!DA.GetData(1, ref docName) && newDocument == false) { return; } //System.Runtime.Remoting.Lifetime.LifetimeServices.LeaseTime = System.TimeSpan.FromDays(1); //System.Runtime.Remoting.Lifetime.LifetimeServices.RenewOnCallTime = System.TimeSpan.FromDays(1); //Create ETABS Object string pathtoetabs = @"C:\Program Files\Computers and Structures\ETABS 2013\ETABS.exe"; Assembly ETABSassembly = Assembly.LoadFrom(pathtoetabs); //ETABS2013.cOAPI test = (ETABS2013.cOAPI)ETABSassembly.GetModule("CSI.ETABS.API.ETABSObject"); ETABS2013.cOAPI ETABS = (ETABS2013.cOAPI)ETABSassembly.CreateInstance("CSI.ETABS.API.ETABSObject"); //if developer settings checkobx is left checked it stops here (1. Solution exception:Unable to cast object of type 'CSI.ETABS.API.ETABSObject' to type 'ETABS2013.cOAPI'.) //Interaction.GetObject( //ETABS2013.cOAPI ETABS2 = (ETABS2013.cOAPI)Microsoft.VisualBasic.Interaction.GetObject(@"H:\Entisar Iterations\140409_iteration_model.EDB"); //Type anExtractedType = ETABSassembly.GetType("CSI.ETABS.API.ETABSObject"); //object testis = (ETABS2013.cOAPI)Activator.CreateInstance(anExtractedType); //object testis = (ETABS2013.cOAPI)Activator.GetObject(anExtractedType, "C:/Program Files/Computers and Structures/ETABS 2013/ETABS.exe"); //ETABS2013.cOAPI newETABS = (ETABS2013.cOAPI)testis; //newETABS.SapModel.InitializeNewModel(); //Start ETABS and Create New Model ETABS.ApplicationStart(); if (newDocument == true) { ETABS.SapModel.InitializeNewModel(ETABS2013.eUnits.kN_m_C); ETABS.SapModel.File.NewBlank(); // ETABS.SapModel.File.NewGridOnly(4,3,3,1,1,24,24); } else { ETABS.SapModel.File.OpenFile(docName); } DA.SetData(0, ETABS); //GC.KeepAlive(ETABS); }
protected override void SolveInstance(IGH_DataAccess DA) { #region Create Variables List <Grasshopper.Kernel.Types.GH_Curve> lines = new List <Grasshopper.Kernel.Types.GH_Curve>(); List <Grasshopper.Kernel.Types.GH_Brep> panels = new List <Grasshopper.Kernel.Types.GH_Brep>(); #endregion #region Extract Data from GH if (!DA.GetDataList(0, panels)) { return; } if (panels == null) { return; } if (panels.Count == 0) { return; } if (!DA.GetDataList(1, lines)) { return; } if (lines == null) { return; } if (lines.Count == 0) { return; } #endregion //Create ETABS Object string pathtoetabs = @"C:\Program Files\Computers and Structures\ETABS 2013\ETABS.exe"; System.Reflection.Assembly ETABSassembly = System.Reflection.Assembly.LoadFrom(pathtoetabs); ETABS2013.cOAPI ETABS = (ETABS2013.cOAPI)ETABSassembly.CreateInstance("CSI.ETABS.API.ETABSObject"); //if developer settings checkobx is left checked it stops here (1. Solution exception:Unable to cast object of type 'CSI.ETABS.API.ETABSObject' to type 'ETABS2013.cOAPI'.) //Start ETABS and Create New Model ETABS.ApplicationStart(); ETABS.SapModel.InitializeNewModel(); ETABS.SapModel.File.NewBlank(); ETABS.SapModel.SetPresentUnits(ETABS2013.eUnits.kgf_mm_C); ETABS.SapModel.File.Save(@"C:\Users\janderss\testingtesting.EDB"); int counter = 0; //Import Lines foreach (Grasshopper.Kernel.Types.GH_Curve i in lines) { string label = counter.ToString(); //Insert Nodes ETABS.SapModel.PointObj.AddCartesian(i.Value.PointAtStart.X, i.Value.PointAtStart.Y, i.Value.PointAtStart.Z, ref label, "", "Global", false, 0); ETABS.SapModel.PointObj.AddCartesian(i.Value.PointAtEnd.X, i.Value.PointAtEnd.Y, i.Value.PointAtEnd.Z, ref label, "", "Global", false, 0); //Insert Frames ETABS.SapModel.FrameObj.AddByCoord(i.Value.PointAtStart.X, i.Value.PointAtStart.Y, i.Value.PointAtStart.Z, i.Value.PointAtEnd.X, i.Value.PointAtEnd.Y, i.Value.PointAtEnd.Z, ref label, "Default", "", "Global"); counter++; } //Use Robot to Mesh Surfaces #region create Robot app // robApp = new RobotApplicationClass(); // // if Robot is not visible // if (robApp.Visible == 0) // robApp.Visible = -1 // { // robApp.Interactive = 1; // set robot visible and allow user interaction // robApp.Visible = 1; // } // robApp.Project.New(IRobotProjectType.I_PT_SHELL); // IRobotStructure str = robApp.Project.Structure; // RobotLabelServer labelserv = null; // robApp.Project.Structure.ResultsFreeze=false; // //Delete all the panel objects In the model(don't use clear as this clears loadcases etc.) // // If Delete_Panels = True Then // RobotSelection prev_panel_sel; // prev_panel_sel=robApp.Project.Structure.Selections.CreateFull(IRobotObjectType.I_OT_PANEL); // robApp.Project.Structure.Objects.DeleteMany(prev_panel_sel); // // End If // RobotPointsArray panel_pnts=new RobotPointsArray(); // List<int> panel_nos= new List<int>(); // GH_ObjectType obj_type= new GH_ObjectType(); // Grasshopper.Kernel.Types.GH_Brep curr_brep = new Grasshopper.Kernel.Types.GH_Brep(); // int brepno = 1; // foreach (Grasshopper.Kernel.Types.GH_Brep b in panels) // { // List<Rhino.Geometry.BrepEdge> crvs =new List<Rhino.Geometry.BrepEdge>(); // int edges=0; // int i=0; // edges=b.Value.Edges.Count; // for(i=0;i<=edges-1;i++) // { // crvs.Add(b.Value.Edges[i]); // } // string label = b.ToString(); // int p = 0; // panel_pnts.SetSize(edges); // counter=1; // foreach (Rhino.Geometry.BrepEdge crv in crvs) // { // panel_pnts.Set(counter, crv.PointAtStart.X, crv.PointAtStart.Y, crv.PointAtStart.Z); // counter++; // } // robApp.Project.Structure.Objects.CreateContour(brepno, panel_pnts); // robApp.Project.Structure.Objects.BeginMultiOperation(); // int panel_NUM = robApp.Project.Structure.Objects.FreeNumber; // RobotObjObject panel; // //panel = (RobotObjObject)robApp.Project.Structure.Objects.Get(panel_NUM); // panel = (RobotObjObject)robApp.Project.Structure.Objects.Get(brepno); // panel.SetLabel(IRobotLabelType.I_LT_PANEL_CALC_MODEL, "Shell"); // panel.SetLabel(IRobotLabelType.I_LT_PANEL_THICKNESS, "TH12.00"); // panel.Main.Attribs.Meshed = 1; // panel.Update(); // panel.Initialize(); // panel.Mesh.Generate(); // brepno++; // } // robApp.Project.Structure.Objects.EndMultiOperation(); // robApp.Project.ViewMngr.Refresh(); ////For i As int32 = 0 To Brep_or_Curve.Count - 1 //// obj_type = Brep_or_Curve(i).ObjectType //// //If obj_type = ObjectType.Brep Then //// // curr_brep = Brep_or_Curve(i) //// // crv_array = curr_brep.DuplicateEdgeCurves(False) //// //End If //// //If obj_type = ObjectType.Curve Then //// // curr_crv = Brep_or_Curve(i) //// // crv_array = curr_crv.DuplicateSegments //// //End If //// Dim kounta As int32: kounta = 1 //// For Each crv As curve In crv_array //// panel_pnts.SetSize(kounta) //// panel_pnts.Set(kounta, crv.PointAtStart.X, crv.PointAtStart.Y, crv.PointAtStart.Z) //// kounta = kounta + 1 //// Next crv //// robot.Project.Structure.Objects.BeginMultiOperation() //// Dim panel As robotobjobject //// Dim panel_num As int32: panel_num = robot.Project.Structure.Objects.FreeNumber + i //// panel_nos.Add(panel_num) //// robot.Project.Structure.Objects.CreateContour(panel_num, panel_pnts) //// panel = robot.Project.Structure.Objects.Get(panel_num) //// panel.SetLabel(IRobotLabelType.I_LT_PANEL_CALC_MODEL, Calculation_Model) //// panel.Main.Attribs.Meshed = True //// If Calculation_Model = "Shell" Then //// panel.Mesh.Params.SurfaceParams.Generation.Type = IRobotMeshGenerationType.I_MGT_ELEMENT_SIZE //// panel.Mesh.Params.SurfaceParams.Generation.ElementSize = FE_Element_Size //// panel.Mesh.Params.SurfaceParams.Method.Method = IRobotMeshMethodType.I_MMT_DELAUNAY //// panel.Mesh.Params.SurfaceParams.Delaunay.RegularMesh = False //// If Not fe_emitter_size = 0 Then //// panel.Mesh.Params.SurfaceParams.Delaunay.Type = IRobotMeshDelaunayType.I_MDT_DELAUNAY_AND_KANG //// panel.Mesh.Params.SurfaceParams.Delaunay.EmittersSmoothing = True //// panel.Mesh.Params.SurfaceParams.Delaunay.H0 = fe_emitter_size //// End If //// End If //// If Panel_Thickness.Count >= Brep_or_Curve.Count Then //// panel.SetLabel(IRobotLabelType.I_LT_PANEL_THICKNESS, Panel_Thickness(i)) //// Else //// panel.setlabel(IRobotLabelType.I_LT_PANEL_THICKNESS, "TH30_CONCR") //// End If //// panel.initialize //// panel_pnts = Nothing ////Next i ////robot.Project.Structure.Objects.EndMultiOperation() ////Panel_Numbers = panel_nos ////robot.Project.ViewMngr.Refresh // // IRobotNodeSupportData fix; #endregion //Import Panels foreach (Grasshopper.Kernel.Types.GH_Brep i in panels) { int number_of_vertices = i.Value.Vertices.Count(); double[] x = new double[number_of_vertices]; double[] y = new double[number_of_vertices]; double[] z = new double[number_of_vertices]; string label = i.ToString(); int p = 0; for (p = 0; p <= number_of_vertices - 1; p++) { x[p] = i.Value.Vertices[p].Location.X; y[p] = i.Value.Vertices[p].Location.Y; z[p] = i.Value.Vertices[p].Location.Z; } ETABS.SapModel.AreaObj.AddByCoord(number_of_vertices, ref x, ref y, ref z, ref label, "Default", "", "Global"); } //Merge Points int NumberPoints = 0; string[] PointName = new string[1]; ETABS.SapModel.EditPoint.Merge(.01, ref NumberPoints, ref PointName); DA.SetData(0, ETABS); }