/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { solverOpt = new IguanaGmshSolver3D(); DA.GetData(0, ref sizeFactor); DA.GetData(1, ref minSize); DA.GetData(2, ref maxSize); DA.GetData(3, ref minPts); DA.GetData(4, ref adaptive); DA.GetData(5, ref minElemPerTwoPi); DA.GetData(6, ref steps); DA.GetData(7, ref qualityType); DA.GetData(8, ref qualityThreshold); DA.GetData(9, ref recombine); solverOpt.MeshingAlgorithm = MeshSolvers3D.Delaunay; solverOpt.CharacteristicLengthFactor = sizeFactor; solverOpt.CharacteristicLengthMin = minSize; solverOpt.CharacteristicLengthMax = maxSize; solverOpt.CharacteristicLengthFromCurvature = adaptive; solverOpt.OptimizationSteps = steps; solverOpt.OptimizeThreshold = qualityThreshold; solverOpt.HighOrderOptimize = ho_optimization; solverOpt.ElementOrder = 2; string method = Enum.GetName(typeof(ElementQualityType), qualityType); if (method != null) { qualityType = 2; } solverOpt.QualityType = qualityType; method = Enum.GetName(typeof(RecombinationAlgorithm), recombine); if (method == null) { recombine = 2; } solverOpt.RecombinationAlgorithm = recombine; solverOpt.RecombineAll = true; DA.SetData(0, solverOpt); this.Message = "20Hexa+13Pyram"; }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { if (recompute) { Mesh bMesh = null; Vector3d dir = new Vector3d(); List <double> lengths = new List <double>(); List <int> divisions = new List <int>(); IguanaGmshField field = null; IguanaGmshSolver3D solverOptions = new IguanaGmshSolver3D(); DA.GetData(0, ref bMesh); DA.GetData(1, ref dir); DA.GetDataList(2, lengths); DA.GetDataList(3, divisions); DA.GetData(4, ref field); DA.GetData(7, ref solverOptions); List <IguanaGmshConstraint> constraints = new List <IguanaGmshConstraint>(); foreach (var obj in base.Params.Input[5].VolatileData.AllData(true)) { IguanaGmshConstraint c; obj.CastTo <IguanaGmshConstraint>(out c); constraints.Add(c); } List <IguanaGmshTransfinite> transfinite = new List <IguanaGmshTransfinite>(); foreach (var obj in base.Params.Input[6].VolatileData.AllData(true)) { IguanaGmshTransfinite t; obj.CastTo <IguanaGmshTransfinite>(out t); transfinite.Add(t); } // Extract required data from base surface if (!bMesh.IsClosed) { IguanaGmsh.Initialize(); Tuple <int, int>[] dimTags; IguanaGmshFactory.Geo.GmshSurfaceFromMesh(bMesh, out dimTags); Tuple <int, int>[] temp; IguanaGmsh.Model.GetEntities(out temp, 2); bool synchronize = true; if (constraints.Count > 0) { synchronize = false; } // Embed constraints if (!synchronize) { IguanaGmshFactory.Geo.EmbedConstraintsOnSurface(constraints, temp[0].Item2, true); } //Transfinite if (transfinite.Count > 0) { IguanaGmshFactory.ApplyTransfiniteSettings(transfinite); } // Extrude Tuple <int, int>[] ov; IguanaGmsh.Model.Geo.Extrude(temp, dir.X, dir.Y, dir.Z, out ov, divisions.ToArray(), lengths.ToArray(), true); IguanaGmsh.Model.Geo.Synchronize(); // Preprocessing settings //solverOptions.ApplyBasic3DSettings(); //solverOptions.ApplyAdvanced3DSettings(); // 2d mesh generation IguanaGmsh.Model.Mesh.Generate(3); // Iguana mesh construction mesh = IguanaGmshFactory.TryGetIMesh(3); IguanaGmshFactory.TryGetEntitiesID(out entitiesID); IguanaGmsh.FinalizeGmsh(); } } recompute = true; DA.SetData(0, mesh); }