/// <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) { Rhino.Geometry.Mesh inputMesh = null; DroidVolume vol = null; double x = new double(); double y = new double(); if (!DA.GetData(0, ref inputMesh)) { return; } if (!DA.GetData(1, ref vol)) { return; } if (!DA.GetData(2, ref x)) { return; } if (!DA.GetData(3, ref y)) { return; } Vector3d normal = new Vector3d(0, 0, 1); Plane worldXY = new Plane(Point3d.Origin, normal); Vector3d trans = new Vector3d(x, y, 0); Rhino.Geometry.Mesh _inputMesh = new Rhino.Geometry.Mesh(); if (vol.volumeOutline.Length == 2) { _inputMesh = inputMesh; BoundingBox bbx = _inputMesh.GetBoundingBox(worldXY); Point3d cnr = bbx.Corner(true, true, true); Point3d center = bbx.Center; center.Z = cnr.Z; Vector3d toMiddle = new Vector3d((Point3d.Origin - center + trans)); _inputMesh.Transform(Transform.Translation(toMiddle)); } if (vol.volumeOutline.Length == 6) { _inputMesh = inputMesh; BoundingBox bbx = _inputMesh.GetBoundingBox(worldXY); Point3d cnr = bbx.Corner(true, true, true); Point3d center = bbx.Center; center.Z = cnr.Z; Point3d middle = new Point3d((vol.size[0] / 2), (vol.size[1] / 2), 0); Vector3d toMiddle = new Vector3d((middle - center + trans)); _inputMesh.Transform(Transform.Translation(toMiddle)); } DroidMesh dMesh = new DroidMesh(_inputMesh); DA.SetData(0, dMesh); DA.SetData(1, _inputMesh); }
/// <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) { // Declare variables Rhino.Geometry.Mesh mesh = null; string name = ""; Material material = null; int decimalAccuracy = 3; // Reference the inputs DA.GetData(0, ref mesh); DA.GetData(1, ref name); DA.GetData(2, ref material); DA.GetData(3, ref decimalAccuracy); // If the meshes have quads, triangulate them if (!mesh.Faces.ConvertQuadsToTriangles()) { AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Error triangulating quad meshes. Try triangulating quads before feeding into this component."); } ; // Get the center of the object so the bufferGeometry can be given a local coordinates Point3d center = mesh.GetBoundingBox(true).Center; /// Add the bufferGeometry BufferGeometry geometry = new BufferGeometry(mesh, center, decimalAccuracy, true); /// Add the child dynamic meshObject = new ExpandoObject(); meshObject.Uuid = Guid.NewGuid(); if (name.Length > 0) { meshObject.name = name; } meshObject.Type = "Mesh"; meshObject.Geometry = geometry.Uuid; meshObject.Matrix = new Matrix(center).Array; meshObject.CastShadow = true; meshObject.ReceiveShadow = true; // Create line object Object3d object3d = new Object3d(meshObject); object3d.AddGeometry(geometry); // If there is a material, add the material, textures, and images if (material != null) { meshObject.Material = material.Data.Uuid; // Set the material to use vertex colors material.Data.vertexColors = 2; material.Data.color = "0xffffff"; object3d.AddMaterial(material.Data); if (material.Textures != null) { foreach (dynamic texture in material.Textures) { object3d.AddTexture(texture); } } if (material.Images != null) { foreach (dynamic image in material.Images) { object3d.AddImage(image); } } } else { Guid uuid = Guid.NewGuid(); meshObject.Material = uuid; // Build the material object dynamic meshBasicMaterial = new ExpandoObject(); meshBasicMaterial.Uuid = uuid; meshBasicMaterial.Type = "MeshBasicMaterial"; meshBasicMaterial.vertexColors = 2; object3d.AddMaterial(meshBasicMaterial); } // Set output references DA.SetData(0, object3d); }