/// <summary> /// Compute layer bouding box /// </summary> /// <param name="bProperties">Case properties</param> /// <returns>bounding box</returns> public BBox3D BoundingBox(CylinderProperties cylProperties) { BBox3D bbox = new BBox3D(); double radius = cylProperties.RadiusOuter; double height = cylProperties.Height; foreach (Vector3D pos in this) { Vector3D[] pts = new Vector3D[8]; pts[0] = pos - radius * Vector3D.XAxis - radius * Vector3D.YAxis; pts[1] = pos + radius * Vector3D.XAxis - radius * Vector3D.YAxis; pts[2] = pos + radius * Vector3D.XAxis + radius * Vector3D.YAxis; pts[3] = pos - radius * Vector3D.XAxis + radius * Vector3D.YAxis; pts[4] = pos - radius * Vector3D.XAxis - radius * Vector3D.YAxis + height * Vector3D.ZAxis; pts[5] = pos + radius * Vector3D.XAxis - radius * Vector3D.YAxis + height * Vector3D.ZAxis; pts[6] = pos + radius * Vector3D.XAxis + radius * Vector3D.YAxis + height * Vector3D.ZAxis; pts[7] = pos - radius * Vector3D.XAxis + radius * Vector3D.YAxis + height * Vector3D.ZAxis; foreach (Vector3D pt in pts) { bbox.Extend(pt); } } return(bbox); }
public BBox3D BoundingBox(PackProperties packProperties) { BBox3D bbox = new BBox3D(); foreach (BoxPosition bpos in this) { Vector3D[] pts = new Vector3D[8]; Vector3D vI = HalfAxis.ToVector3D(bpos.DirectionLength); Vector3D vJ = HalfAxis.ToVector3D(bpos.DirectionWidth); Vector3D vK = Vector3D.CrossProduct(vI, vJ); pts[0] = bpos.Position; pts[1] = bpos.Position + packProperties.Length * vI; pts[2] = bpos.Position + packProperties.Width * vJ; pts[3] = bpos.Position + packProperties.Length * vI + packProperties.Width * vJ; pts[4] = bpos.Position + packProperties.Height * vK; pts[5] = bpos.Position + packProperties.Width * vJ + packProperties.Height * vK; ; pts[6] = bpos.Position + HalfAxis.ToVector3D(bpos.DirectionWidth) * packProperties.Width; pts[7] = bpos.Position + HalfAxis.ToVector3D(bpos.DirectionLength) * packProperties.Length + HalfAxis.ToVector3D(bpos.DirectionWidth) * packProperties.Width; foreach (Vector3D pt in pts) bbox.Extend(pt); } return bbox; }
public void Extend(BBox3D box) { _ptMin.X = Math.Min(_ptMin.X, box._ptMin.X); _ptMin.Y = Math.Min(_ptMin.Y, box._ptMin.Y); _ptMin.Z = Math.Min(_ptMin.Z, box._ptMin.Z); _ptMax.X = Math.Max(_ptMax.X, box._ptMax.X); _ptMax.Y = Math.Max(_ptMax.Y, box._ptMax.Y); _ptMax.Z = Math.Max(_ptMax.Z, box._ptMax.Z); }
/// <summary> /// Returns a value indicating whether this instance is equal to /// the specified object. /// </summary> /// <param name="obj">An object to compare to this instance.</param> /// <returns><see langword="true"/> if <paramref name="obj"/> is a <see cref="Box2D"/> and has the same values as this instance; otherwise, <see langword="false"/>.</returns> public override bool Equals(object obj) { if (obj is BBox3D) { BBox3D v = (BBox3D)obj; return((_ptMin.Equals(v._ptMin)) && (_ptMax.Equals(v._ptMax))); } return(false); }
private BBox3D ComputeLoadBBox3D() { BBox3D bbox = new BBox3D(); bool hasInterlayer = false; double zInterlayer = 0.0; BoxLayer layer0 = GetBoxLayer(0, ref hasInterlayer, ref zInterlayer); bbox.Extend(layer0.BoundingBox(Analysis.PackProperties)); BoxLayer layerN = GetBoxLayer(LayerCount - 1, ref hasInterlayer, ref zInterlayer); bbox.Extend(layerN.BoundingBox(Analysis.PackProperties)); return(bbox); }
private BBox3D ComputeLoadBBox3D() { BBox3D bbox = new BBox3D(); int iLayer = 0; while (iLayer < Count) { ILayer layer = this[iLayer]; BoxLayer blayer = layer as BoxLayer; if (null != blayer) bbox.Extend(blayer.BoundingBox(Analysis.BProperties)); ++iLayer; } return bbox; }
private BBox3D ComputeLoadBBox3D() { BBox3D bbox = new BBox3D(); int iLayer = 0; while (iLayer < Count) { ILayer layer = this[iLayer]; CylinderLayer blayer = layer as CylinderLayer; if (null != blayer) { bbox.Extend(blayer.BoundingBox(Analysis.CylinderProperties)); } ++iLayer; } return(bbox); }
private BBox3D ComputeLoadBBox3D() { double palletLength = ParentTruckAnalysis.ParentSolution.PalletLength; double palletWidth = ParentTruckAnalysis.ParentSolution.PalletWidth; double palletHeight = ParentTruckAnalysis.ParentSolution.PalletHeight; BBox3D bbox = new BBox3D(); int iLayer = 0; while (iLayer < NoLayers) { foreach (BoxPosition bPositionLayer in Layer) { // actual position in load BoxPosition bpos = new BoxPosition( new Vector3D( bPositionLayer.Position.X , bPositionLayer.Position.Y , bPositionLayer.Position.Z + palletHeight * iLayer) , bPositionLayer.DirectionLength , bPositionLayer.DirectionWidth); Vector3D[] pts = new Vector3D[8]; Vector3D vI = HalfAxis.ToVector3D(bpos.DirectionLength); Vector3D vJ = HalfAxis.ToVector3D(bpos.DirectionWidth); Vector3D vK = Vector3D.CrossProduct(vI, vJ); pts[0] = bpos.Position; pts[1] = bpos.Position + palletLength * vI; pts[2] = bpos.Position + palletWidth * vJ; pts[3] = bpos.Position + palletLength * vI + palletWidth * vJ; pts[4] = bpos.Position + palletHeight * vK; pts[5] = bpos.Position + palletWidth * vJ + palletHeight * vK;; pts[6] = bpos.Position + HalfAxis.ToVector3D(bpos.DirectionWidth) * palletWidth; pts[7] = bpos.Position + HalfAxis.ToVector3D(bpos.DirectionLength) * palletLength + HalfAxis.ToVector3D(bpos.DirectionWidth) * palletWidth; foreach (Vector3D pt in pts) { bbox.Extend(pt); } } ++iLayer; } return(bbox); }
public BBox3D BBox(double radius, double length) { Transform3D t = Transf; Vector3D[] pts = new Vector3D[] { new Vector3D(0.0, -radius, -radius), new Vector3D(0.0, -radius, radius), new Vector3D(0.0, radius, -radius), new Vector3D(0.0, radius, radius), new Vector3D(length, -radius, -radius), new Vector3D(length, -radius, radius), new Vector3D(length, radius, -radius), new Vector3D(length, radius, radius) }; BBox3D bbox = new BBox3D(); foreach (Vector3D pt in pts) { bbox.Extend(t.transform(pt)); } return(bbox); }
public BBox3D BBox(double radius, double length) { Transform3D t = Transf; Vector3D[] pts = new Vector3D[] { new Vector3D(0.0, -radius, -radius), new Vector3D(0.0, -radius, radius), new Vector3D(0.0, radius, -radius), new Vector3D(0.0, radius, radius), new Vector3D(length, -radius, -radius), new Vector3D(length, -radius, radius), new Vector3D(length, radius, -radius), new Vector3D(length, radius, radius) }; BBox3D bbox = new BBox3D(); foreach (Vector3D pt in pts) bbox.Extend(t.transform(pt)); return bbox; }
private BBox3D ComputeLoadBBox3D() { double palletLength = ParentTruckAnalysis.ParentSolution.PalletLength; double palletWidth = ParentTruckAnalysis.ParentSolution.PalletWidth; double palletHeight = ParentTruckAnalysis.ParentSolution.PalletHeight; BBox3D bbox = new BBox3D(); int iLayer = 0; while (iLayer < NoLayers) { foreach (BoxPosition bPositionLayer in Layer) { // actual position in load BoxPosition bpos = new BoxPosition( new Vector3D( bPositionLayer.Position.X , bPositionLayer.Position.Y , bPositionLayer.Position.Z + palletHeight * iLayer) , bPositionLayer.DirectionLength , bPositionLayer.DirectionWidth); Vector3D[] pts = new Vector3D[8]; Vector3D vI = HalfAxis.ToVector3D(bpos.DirectionLength); Vector3D vJ = HalfAxis.ToVector3D(bpos.DirectionWidth); Vector3D vK = Vector3D.CrossProduct(vI, vJ); pts[0] = bpos.Position; pts[1] = bpos.Position + palletLength * vI; pts[2] = bpos.Position + palletWidth * vJ; pts[3] = bpos.Position + palletLength * vI + palletWidth * vJ; pts[4] = bpos.Position + palletHeight * vK; pts[5] = bpos.Position + palletWidth * vJ + palletHeight * vK; ; pts[6] = bpos.Position + HalfAxis.ToVector3D(bpos.DirectionWidth) * palletWidth; pts[7] = bpos.Position + HalfAxis.ToVector3D(bpos.DirectionLength) * palletLength + HalfAxis.ToVector3D(bpos.DirectionWidth) * palletWidth; foreach (Vector3D pt in pts) bbox.Extend(pt); } ++iLayer; } return bbox; }
private BBox3D ComputeLoadBBox3D() { BBox3D bbox = new BBox3D(); bool hasInterlayer = false; double zInterlayer = 0.0; BoxLayer layer0 = GetBoxLayer(0, ref hasInterlayer, ref zInterlayer); bbox.Extend(layer0.BoundingBox(Analysis.PackProperties)); BoxLayer layerN = GetBoxLayer(LayerCount - 1, ref hasInterlayer, ref zInterlayer); bbox.Extend(layerN.BoundingBox(Analysis.PackProperties)); return bbox; }
public BBox3D(BBox3D box) { Extend(box._ptMin); Extend(box._ptMax); }