protected override void SolveInstance(IGH_DataAccess DA) { Glulam m_glulam = null; if (!DA.GetData("Glulam", ref m_glulam)) { this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "No glulam input."); return; } Mesh m = m_glulam.GetBoundingMesh(); double m_ratio = 200.0; DA.GetData("Ratio", ref m_ratio); if (m_ratio <= 0.0) { this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Ratio values must be greater than 0."); return; } double min_rx = m_glulam.Data.LamWidth * m_ratio; double min_ry = m_glulam.Data.LamHeight * m_ratio; double max_kx = 1 / min_rx; double max_ky = 1 / min_ry; List <double> f_values = new List <double>(); double t; for (int i = 0; i < m.Vertices.Count; ++i) { m_glulam.Centreline.ClosestPoint(m.Vertices[i], out t); Plane frame = m_glulam.GetPlane(t); Vector3d offset = m.Vertices[i] - frame.Origin; double offset_x = offset * frame.XAxis; double offset_y = offset * frame.YAxis; Vector3d kv = m_glulam.Centreline.CurvatureAt(t); double k = kv.Length; kv.Unitize(); double r = (1 / k) - offset * kv; k = 1 / r; double kx = k * (kv * frame.XAxis); double ky = k * (kv * frame.YAxis); f_values.Add(Math.Max(Math.Abs(kx / max_kx), Math.Abs(ky / max_ky))); } DA.SetData("Mesh", m); DA.SetDataList("Factor", f_values); }
protected override void SolveInstance(IGH_DataAccess DA) { Glulam m_glulam = null; if (!DA.GetData("Glulam", ref m_glulam)) { this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "No glulam input."); return; } Mesh m = m_glulam.GetBoundingMesh(); List <double> kx_values = new List <double>(); List <double> ky_values = new List <double>(); double t; for (int i = 0; i < m.Vertices.Count; ++i) { m_glulam.Centreline.ClosestPoint(m.Vertices[i], out t); Plane frame = m_glulam.GetPlane(t); Vector3d offset = m.Vertices[i] - frame.Origin; double offset_x = offset * frame.XAxis; double offset_y = offset * frame.YAxis; Vector3d kv = m_glulam.Centreline.CurvatureAt(t); double k = kv.Length; kv.Unitize(); double r = (1 / k) - offset * kv; k = 1 / r; double kx = k * (kv * frame.XAxis); double ky = k * (kv * frame.YAxis); kx_values.Add(Math.Abs(kx)); ky_values.Add(Math.Abs(ky)); } DA.SetData("Mesh", m); DA.SetDataList("Curvature X", kx_values); DA.SetDataList("Curvature Y", ky_values); }