protected override void SolveInstance(Grasshopper.Kernel.IGH_DataAccess DA) { if (!FriedChiken.isInitialized) { Rhino.Geometry.Mesh m = null; if (!DA.GetData(0, ref m)) { return; } lGeometry = m.DuplicateMesh(); lGeometry2 = m.DuplicateMesh(); newNodes.Clear(); newNodes.AddRange(m.Vertices.ToPoint3dArray()); int nNewNodes = newNodes.Count; el = new List <int[]>(); for (int i = 0; i < m.Faces.Count; i++) { if (m.Faces[i].IsQuad) { int[] f = new int[4] { m.Faces[i].A, m.Faces[i].B, m.Faces[i].D, m.Faces[i].C }; el.Add(f); } if (m.Faces[i].IsTriangle) { int[] f = new int[3] { m.Faces[i].A, m.Faces[i].B, m.Faces[i].C }; el.Add(f); } } bool isJoin = false; mikity.NumericalMethodHelper.particle[] particles = new mikity.NumericalMethodHelper.particle[nNewNodes]; for (int i = 0; i < nNewNodes; i++) { particles[i] = new mikity.NumericalMethodHelper.particle(newNodes[i][0], newNodes[i][1], newNodes[i][2]); } eM = new generalSpring(); pS = new GH_particleSystem(particles); if (!DA.GetData(3, ref isJoin)) { return; } if (isJoin) { pS.simplify(el); } lGeometry.Faces.Clear(); lGeometry2.Faces.Clear(); for (int i = 0; i < el.Count; i++) { if (el[i].Length == 4) { mikity.NumericalMethodHelper.elements.isoparametricElement e = new NumericalMethodHelper.elements.isoparametricElement(el[i]); eM.addElement(e); lGeometry.Faces.AddFace(e.el[0], e.el[1], e.el[3], e.el[2]); lGeometry2.Faces.AddFace(e.el[0], e.el[1], e.el[3], e.el[2]); } else if (el[i].Length == 3) { mikity.NumericalMethodHelper.elements.simplexElement e = new NumericalMethodHelper.elements.simplexElement(el[i]); eM.addElement(e); lGeometry.Faces.AddFace(e.el[0], e.el[1], e.el[2]); lGeometry2.Faces.AddFace(e.el[0], e.el[1], e.el[2]); } } pS.Value.addObject(eM); this.DVPW = GetDVPW(lGeometry); this.BKGT = GetBKGT(lGeometry); pS.DVPW = GetDVPW(lGeometry2); pS.UPGR = GetUPGR(lGeometry2); pS.BKGT = GetBKGT(lGeometry2); DA.SetData(0, pS); DA.SetDataList(1, newNodes); GH_material mat = null; GH_gravity gvt = null; if (!DA.GetData(1, ref mat)) { return; } if (!DA.GetData(2, ref gvt)) { return; } eM.setMaterial(mat.Value, gvt.Value); } }
protected override void SolveInstance(Grasshopper.Kernel.IGH_DataAccess DA) { if (!FriedChiken.isInitialized) { Rhino.Geometry.Curve c = null; if (!DA.GetData(0, ref c)) { return; } if (c.IsPolyline()) { Rhino.Geometry.Polyline pl = null; if (c.TryGetPolyline(out pl)) { int nNewNodes = pl.Count(); int nElements = nNewNodes - 1; newNodes.Clear(); newNodes.AddRange(pl); GH_material mat = null; GH_gravity gvt = null; if (!DA.GetData(1, ref mat)) { return; } if (!DA.GetData(2, ref gvt)) { return; } mikity.NumericalMethodHelper.particle[] particles = new mikity.NumericalMethodHelper.particle[nNewNodes]; for (int i = 0; i < nNewNodes; i++) { particles[i] = new mikity.NumericalMethodHelper.particle(newNodes[i][0], newNodes[i][1], newNodes[i][2]); } eM = new generalSpring(); pS = new GH_particleSystem(particles); for (int i = 0; i < nElements; i++) { mikity.NumericalMethodHelper.elements.isoparametricElement e = new NumericalMethodHelper.elements.isoparametricElement(i, i + 1); eM.addElement(e); } eM.setMaterial(mat.Value, gvt.Value); pS.Value.addObject(eM); lGeometry = new Rhino.Geometry.Polyline(); lGeometry2 = new Rhino.Geometry.Polyline(); for (int i = 0; i < pS.Value.__N; i++) { lGeometry.Add(particles[i][0], particles[i][1], particles[i][2]); } this.DVPW = GetDVPW(lGeometry); pS.DVPW = GetDVPW(lGeometry2); pS.UPGR = GetUPGR(lGeometry2); pS.BKGT = GetBKGT(lGeometry2); this.BKGT = GetBKGT(lGeometry); DA.SetData(0, pS); DA.SetDataList(1, newNodes); } } else { AddRuntimeMessage(Grasshopper.Kernel.GH_RuntimeMessageLevel.Error, "Only polyline is accepted"); return; } } }
protected override void SolveInstance(Grasshopper.Kernel.IGH_DataAccess DA) { if (!FriedChiken.isInitialized) { Rhino.Geometry.Curve c = null; if (!DA.GetData(0, ref c)) { return; } Rhino.Geometry.Interval uDomain = c.Domain; int[] nEdgeNodes = new int[_dim]; DA.GetData(1, ref nEdgeNodes[0]); for (int i = 0; i < _dim; i++) { if (nEdgeNodes[i] < 2) { AddRuntimeMessage(Grasshopper.Kernel.GH_RuntimeMessageLevel.Error, "Integers must be greater than or equal to 2"); return; } } lGeometry.Clear(); //メッシュノード構築 newNodes.Clear(); for (int j = 0; j < nEdgeNodes[0]; j++) { newNodes.Add(c.PointAt(uDomain.T0 + (uDomain.T1 - uDomain.T0) / (nEdgeNodes[0] - 1) * j)); } int nNewNodes = newNodes.Count; GH_material mat = null; GH_gravity gvt = null; if (!DA.GetData(2, ref mat)) { return; } if (!DA.GetData(3, ref gvt)) { return; } el = MathUtil.isoparametricElements(nEdgeNodes); int nElements = el.Length; mikity.NumericalMethodHelper.particle[] particles = new mikity.NumericalMethodHelper.particle[nNewNodes]; for (int i = 0; i < nNewNodes; i++) { particles[i] = new mikity.NumericalMethodHelper.particle(newNodes[i][0], newNodes[i][1], newNodes[i][2]); } eM = new generalSpring(); pS = new GH_particleSystem(particles); for (int i = 0; i < el.Length; i++) { mikity.NumericalMethodHelper.elements.isoparametricElement e = new NumericalMethodHelper.elements.isoparametricElement(el[i]); eM.addElement(e); } eM.setMaterial(mat.Value, gvt.Value); for (int i = 0; i < pS.Value.__N; i++) { lGeometry.Add(particles[i][0], particles[i][1], particles[i][2]); } this.DVPW = GetDVPW(lGeometry); pS.DVPW = GetDVPW(lGeometry2); pS.UPGR = GetUPGR(lGeometry2); pS.BKGT = GetBKGT(lGeometry2); pS.Value.addObject(eM); DA.SetData(0, pS); DA.SetDataList(1, newNodes); } }