/// <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))); }
/// <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)); }