/// <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) { MeshGhData hE_MeshData = new MeshGhData(); if (!DA.GetData(0, ref hE_MeshData)) { return; } Paramdigma.Core.HalfEdgeMesh.Mesh hE_Mesh = hE_MeshData.Value; if (!hE_Mesh.IsTriangularMesh()) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Mesh is not triangular!"); return; } List <Vector3d> normals = new List <Vector3d>(); List <Point3d> centroids = new List <Point3d>(); List <Point3d> circumcenters = new List <Point3d>(); foreach (Paramdigma.Core.HalfEdgeMesh.MeshFace face in hE_Mesh.Faces) { Paramdigma.Core.Geometry.Vector3d v = Paramdigma.Core.Geometry.MeshGeometry.FaceNormal(face); Paramdigma.Core.Geometry.Point3d centroid = Paramdigma.Core.Geometry.MeshGeometry.Centroid(face); normals.Add(new Vector3d(v.X, v.Y, v.Z)); centroids.Add(new Point3d(centroid.X, centroid.Y, centroid.Z)); } DA.SetDataList(0, normals); DA.SetDataList(1, centroids); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object can be used to retrieve data from input parameters and /// to store data in output parameters.</param> protected override void SolveInstance(IGH_DataAccess DA) { MeshGhData hE_MeshData = new MeshGhData(); if (!DA.GetData(0, ref hE_MeshData)) { return; } Paramdigma.Core.HalfEdgeMesh.Mesh hE_Mesh = hE_MeshData.Value; if (!hE_Mesh.IsTriangularMesh()) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Mesh is not triangular!"); return; } List <Vector3d> normals = new List <Vector3d>(); foreach (MeshVertex v in hE_Mesh.Vertices) { Paramdigma.Core.Geometry.Vector3d vect = new Paramdigma.Core.Geometry.Vector3d(); switch (Selection) { case NormalSelection.Equal: vect = Paramdigma.Core.Geometry.MeshGeometry.VertexNormalEquallyWeighted(v); break; case NormalSelection.Area: vect = Paramdigma.Core.Geometry.MeshGeometry.VertexNormalAreaWeighted(v); break; case NormalSelection.Angle: vect = Paramdigma.Core.Geometry.MeshGeometry.VertexNormalAngleWeighted(v); break; case NormalSelection.Gauss: vect = Paramdigma.Core.Geometry.MeshGeometry.VertexNormalGaussCurvature(v); break; case NormalSelection.Mean: vect = Paramdigma.Core.Geometry.MeshGeometry.VertexNormalMeanCurvature(v); break; case NormalSelection.Sphere: vect = Paramdigma.Core.Geometry.MeshGeometry.VertexNormalSphereInscribed(v); break; } normals.Add(new Vector3d(vect.X, vect.Y, vect.Z)); } DA.SetDataList(0, normals); }