Beispiel #1
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            object raw_g = null;

            if (!DA.GetData("Glulam", ref raw_g))
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid Glulam input.");
                return;
            }

            GH_Glulam ghg = raw_g as GH_Glulam;

            if (ghg == null)
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid Glulam input.");
                return;
            }

            Glulam g = ghg.Value;

            double offset = 0.0;

            DA.GetData("Amount", ref offset);

            DA.SetData("Output", g.GetBoundingBrep(offset));
        }
Beispiel #2
0
        public void Write(string path)
        {
            if (!System.IO.Directory.Exists(path))
            {
                throw new Exception("Path does not exist.");
            }

            if (g == null || beam == null)
            {
                throw new Exception("Must add Glulam and Beam geometry!");
            }

            Rhino.FileIO.File3dm file = new Rhino.FileIO.File3dm();

            // Setup layers
            Layer lRoot = new Layer();

            lRoot.Name = "tas";
            file.AllLayers.Add(lRoot);
            lRoot = file.AllLayers.Last();

            Layer lNC = new Layer();

            lNC.Name      = "NC";
            lNC.IsVisible = false;
            lNC.IsLocked  = true;
            file.AllLayers.Add(lNC);
            lNC = file.AllLayers.Last();
            lNC.ParentLayerId = lRoot.Id;

            Layer lBL = new Layer();

            lBL.Name     = "BL";
            lBL.IsLocked = true;
            file.AllLayers.Add(lBL);
            lBL = file.AllLayers.Last();
            lBL.ParentLayerId = lRoot.Id;

            Layer lBE = new Layer();

            lBE.Name     = "BE";
            lBE.IsLocked = true;
            file.AllLayers.Add(lBE);
            lBE = file.AllLayers.Last();
            lBE.ParentLayerId = lRoot.Id;

            Layer lBL_Centreline = new Layer();

            lBL_Centreline.Name          = "BL_Centreline";
            lBL_Centreline.Index         = 1;
            lBL_Centreline.Color         = Color.FromArgb(0, 0, 255);
            lBL_Centreline.ParentLayerId = lBL.Id;
            file.AllLayers.Add(lBL_Centreline);
            lBL_Centreline = file.AllLayers.Last();

            Layer lBL_Geometry = new Layer();

            lBL_Geometry.Name          = "BL_Geometry";
            lBL_Geometry.Color         = Color.FromArgb(125, 200, 125);
            lBL_Geometry.ParentLayerId = lBL.Id;
            file.AllLayers.Add(lBL_Geometry);
            lBL_Geometry = file.AllLayers.Last();

            Layer lBL_Safety = new Layer();

            lBL_Safety.Name          = "BL_Safety";
            lBL_Safety.IsVisible     = false;
            lBL_Safety.Color         = Color.FromArgb(200, 200, 200);
            lBL_Safety.ParentLayerId = lBL.Id;
            file.AllLayers.Add(lBL_Safety);
            lBL_Safety = file.AllLayers.Last();

            Layer lBE_Geometry = new Layer();

            lBE_Geometry.Name          = "BE_Geometry";
            lBE_Geometry.Color         = Color.FromArgb(100, 100, 100);
            lBE_Geometry.ParentLayerId = lBE.Id;
            file.AllLayers.Add(lBE_Geometry);
            lBE_Geometry = file.AllLayers.Last();

            Layer lNC_Surface = new Layer();

            lNC_Surface.Name          = "NC_Surface";
            lNC_Surface.Color         = Color.FromArgb(255, 0, 255);
            lNC_Surface.ParentLayerId = lNC.Id;
            file.AllLayers.Add(lNC_Surface);
            lNC_Surface = file.AllLayers.Last();

            Layer lNC_Normals = new Layer();

            lNC_Normals.Name          = "NC_SurfaceNormals";
            lNC_Normals.Color         = Color.FromArgb(255, 0, 150);
            lNC_Normals.ParentLayerId = lNC.Id;
            file.AllLayers.Add(lNC_Normals);
            lNC_Normals = file.AllLayers.Last();

            Layer lNC_GlueFace = new Layer();

            lNC_GlueFace.Name          = "NC_GlueFace";
            lNC_GlueFace.Color         = Color.FromArgb(255, 0, 255);
            lNC_GlueFace.ParentLayerId = lNC.Id;
            file.AllLayers.Add(lNC_GlueFace);
            lNC_GlueFace = file.AllLayers.Last();

            Layer lNC_Joints = new Layer();

            lNC_Joints.Name          = "NC_Joints";
            lNC_Joints.Color         = Color.FromArgb(255, 0, 255);
            lNC_Joints.ParentLayerId = lNC.Id;
            file.AllLayers.Add(lNC_Joints);
            lNC_Joints = file.AllLayers.Last();

            Layer lNC_Drill = new Layer();

            lNC_Drill.Name          = "NC_Drill";
            lNC_Drill.Color         = Color.FromArgb(255, 0, 0);
            lNC_Drill.ParentLayerId = lNC.Id;
            file.AllLayers.Add(lNC_Drill);
            lNC_Drill = file.AllLayers.Last();

            // Add objects

            ObjectAttributes oa;

            oa = new ObjectAttributes();

            oa.LayerIndex = lBL_Centreline.Index;
            oa.Name       = "Glulam_Centreline";
            file.Objects.AddCurve(g.Centreline, oa);

            oa.LayerIndex = lBL_Geometry.Index;
            oa.UserDictionary.Set("LamWidth", g.Data.LamWidth);
            oa.UserDictionary.Set("LamHeight", g.Data.LamHeight);
            oa.UserDictionary.Set("NumWidth", g.Data.NumWidth);
            oa.UserDictionary.Set("NumHeight", g.Data.NumHeight);

            oa.Name = "Glulam_BoundingMesh";
            Guid blank_id = file.Objects.AddBrep(g.GetBoundingBrep(), oa);

            oa.LayerIndex = lBE_Geometry.Index;
            oa.UserDictionary.Clear();
            oa.Name = "Beam_Geometry";
            file.Objects.AddBrep(beam, oa);

            oa.LayerIndex = lBL_Safety.Index;
            oa.Name       = "Glulam_Safety";

            Brep blank_safety = g.GetBoundingBrep(50.0);

            if (blank_safety != null)
            {
                file.Objects.AddBrep(blank_safety, oa);
            }


            for (int i = 0; i < Cuts_Surface.Count; ++i)
            {
                oa.LayerIndex = lNC_Surface.Index;
                oa.Name       = string.Format("Machining_Surface_{0:00}", i);
                file.Objects.AddBrep(Cuts_Surface[i], oa);

                oa.LayerIndex = lNC_Normals.Index;
                oa.Name       = string.Format("Machining_Surface_Normal_{0:00}", i);
                BrepFace bf     = Cuts_Surface[i].Faces[0];
                Vector3d normal = bf.NormalAt(bf.Domain(0).Mid, bf.Domain(1).Mid);
                Point3d  point  = bf.PointAt(bf.Domain(0).Mid, bf.Domain(1).Mid);

                file.Objects.AddTextDot(string.Format("NC_Srf_{0:00}", i), point + normal * 100.0, oa);
                file.Objects.AddLine(new Line(point, point + normal * 100.0), oa);
            }

            for (int i = 0; i < Cuts_GlueSurface.Count; ++i)
            {
                oa.LayerIndex = lNC_Surface.Index;
                oa.Name       = string.Format("Glue_Surface_{0:00}", i);
                file.Objects.AddBrep(Cuts_GlueSurface[i], oa);

                oa.LayerIndex = lNC_Normals.Index;
                oa.Name       = string.Format("Glue_Surface_Normal_{0:00}", i);
                BrepFace bf     = Cuts_GlueSurface[i].Faces[0];
                Vector3d normal = bf.NormalAt(bf.Domain(0).Mid, bf.Domain(1).Mid);
                Point3d  point  = bf.PointAt(bf.Domain(0).Mid, bf.Domain(1).Mid);

                file.Objects.AddTextDot(string.Format("NC_Glu_{0:00}", i), point + normal * 100.0, oa);
                file.Objects.AddLine(new Line(point, point + normal * 100.0), oa);
            }

            for (int i = 0; i < Cuts_Joint.Count; ++i)
            {
                oa.LayerIndex = lNC_Joints.Index;
                oa.Name       = string.Format("Joint_Surface_{0:00}", i);
                file.Objects.AddBrep(Cuts_Joint[i], oa);

                oa.LayerIndex = lNC_Normals.Index;
                oa.Name       = string.Format("Joint_Surface_Normal_{0:00}", i);
                BrepFace bf     = Cuts_Joint[i].Faces[0];
                Vector3d normal = bf.NormalAt(bf.Domain(0).Mid, bf.Domain(1).Mid);
                Point3d  point  = bf.PointAt(bf.Domain(0).Mid, bf.Domain(1).Mid);

                file.Objects.AddTextDot(string.Format("NC_Jnt_{0:00}", i), point + normal * 100.0, oa);
                file.Objects.AddLine(new Line(point, point + normal * 100.0), oa);
            }

            for (int i = 0; i < Drills_Joint.Count; ++i)
            {
                oa.LayerIndex = lNC_Drill.Index;
                oa.Name       = string.Format("Joint_Drill_{0:00}", i);

                Vector3d dir = Drills_Joint[i].Direction;
                dir.Unitize();

                file.Objects.AddTextDot(string.Format("NC_Drill_{0:00}", i), Drills_Joint[i].From - dir * 40.0, oa);
                file.Objects.AddLine(Drills_Joint[i], oa);
            }

            // Write notes and data
            string notes = "";

            notes += "This file was created with tasTools (Tom Svilans, 2017).\n\n";
            notes += "Blank data:\n\n";
            notes += string.Format("LamWidth\n{0}\n", g.Data.LamWidth);
            notes += string.Format("LamHeight\n{0}\n", g.Data.LamHeight);
            notes += string.Format("NumWidth\n{0}\n", g.Data.NumWidth);
            notes += string.Format("NumHeight\n{0}\n", g.Data.NumHeight);
            notes += string.Format("Length\n{0}\n", g.Centreline.GetLength());

            file.Notes.Notes = notes;
            file.Settings.ModelUnitSystem = UnitSystem.Millimeters;

            file.Write(path + "\\" + Name + ".3dm", 5);
        }