Exemplo n.º 1
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="PolygonalFace" /> class.
        /// </summary>
        /// <param name="vertices">The vertices.</param>
        /// <param name="normal">A guess for the normal vector.</param>
        /// <param name="connectVerticesBackToFace">if set to <c>true</c> [connect vertices back to face].</param>
        public PolygonalFace(IEnumerable <Vertex> vertices, double[] normal, bool connectVerticesBackToFace = true)
            : this()
        {
            foreach (var v in vertices)
            {
                Vertices.Add(v);
                if (connectVerticesBackToFace)
                {
                    v.Faces.Add(this);
                }
            }
            var centerX = Vertices.Average(v => v.X);
            var centerY = Vertices.Average(v => v.Y);
            var centerZ = Vertices.Average(v => v.Z);

            Center = new[] { centerX, centerY, centerZ };
            bool reverseVertexOrder;

            Normal = DetermineNormal(Vertices, out reverseVertexOrder, normal);
            if (reverseVertexOrder)
            {
                Vertices.Reverse();
            }
            Area = DetermineArea();
        }
Exemplo n.º 2
0
        //Set new normal and area.
        //References are assumed to be the same.
        /// <summary>
        ///     Updates normal, vertex order, and area
        /// </summary>
        public void Update()
        {
            var centerX = Vertices.Average(v => v.X);
            var centerY = Vertices.Average(v => v.Y);
            var centerZ = Vertices.Average(v => v.Z);

            Center = new[] { centerX, centerY, centerZ };
            bool reverseVertexOrder;

            Normal = DetermineNormal(this.Vertices, out reverseVertexOrder, Normal);
            if (reverseVertexOrder)
            {
                Vertices.Reverse();
            }
            Area = DetermineArea();
        }
Exemplo n.º 3
0
 public void ComputeCentroid()
 {
     Centroid = new Point3d(Vertices.Average(x => x.Point.X), Vertices.Average(y => y.Point.Y), Vertices.Average(z => z.Point.Z));
 }
Exemplo n.º 4
0
 public C3Vector GetCenter() => new C3Vector(Vertices.Average(x => x.X), Vertices.Average(x => x.Y), Vertices.Average(x => x.Z));
Exemplo n.º 5
0
 Vector2 GetCentroid()
 {
     return(new Vector2((float)Vertices.Average(v => v.Position[0]), (float)Vertices.Average(v => v.Position[1])));
 }
Exemplo n.º 6
0
 public Point3D GetCenter()
 {
     return(new Point3D(Vertices.Average(v => v.X), Vertices.Average(v => v.Y), Vertices.Average(v => v.Z)));
 }