/// <summary>
        ///  Get the size of the part
        /// </summary>
        /// <param name="part"></param>
        /// <returns></returns>
        static public double Size(this IScene3DPart part)
        {
            double mx = Math.Abs(part.Min.X - part.Max.X);
            double my = Math.Abs(part.Min.Y - part.Max.Y);
            double mz = Math.Abs(part.Min.Z - part.Max.Z);

            return(Math.Max(mx, Math.Max(my, mz)));
        }
Beispiel #2
0
        /// <summary>
        /// Update the ScanData bounding values
        /// </summary>
        public override void Update()
        {
            if (this.Count == 0)
            {
                m_Min = new Vector3d(double.NaN, 0, 0);
                m_Max = new Vector3d(double.NaN, 0, 0);
            }
            else
            {
                for (int i = 0; i < Count; i++)
                {
                    ScanLine part = this[i];
                    if (part.Dirty)
                    {
                        part.Update();
                    }
                }
                IScene3DPart p = this[0];
                m_Min = new Vector3d(p.Min);
                m_Max = new Vector3d(p.Max);

                for (int i = 1; i < Count; i++)
                {
                    p = this[i];
                    if (p.Min.IsValid())
                    {
                        m_Min.X = Math.Min(m_Min.X, p.Min.X);
                        m_Min.Y = Math.Min(m_Min.Y, p.Min.Y);
                        m_Min.Z = Math.Min(m_Min.Z, p.Min.Z);
                    }
                    if (p.Max.IsValid())
                    {
                        m_Max.X = Math.Max(m_Max.X, p.Max.X);
                        m_Max.Y = Math.Max(m_Max.Y, p.Max.Y);
                        m_Max.Z = Math.Max(m_Max.Z, p.Max.Z);
                    }
                }
            }
            base.Update();
        }
 /// <summary>
 /// Get the center of the part
 /// </summary>
 /// <param name="part"></param>
 /// <returns></returns>
 public static Vector3d Center(this IScene3DPart part)
 {
     return(new Vector3d((part.Min.X + part.Max.X) / 2.0f, (part.Min.Y + part.Max.Y) / 2.0f, (part.Min.Z + part.Max.Z) / 2.0f));
 }