Пример #1
0
        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);
        }
Пример #2
0
        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);
        }