- Timestamp:
- 07/13/16 09:30:01 (8 years ago)
- Location:
- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/BinPacking2D.cs
r14049 r14055 85 85 } 86 86 87 public override PackingPosition FindExtremePointForItem(PackingItem measures, bool rotated, bool stackingConstraints) {88 PackingItem item = new PackingItem(89 rotated ? measures.Height : measures.Width,90 rotated ? measures.Width : measures.Height,91 measures.TargetBin);87 public override PackingPosition FindExtremePointForItem(PackingItem item, bool rotated, bool stackingConstraints) { 88 PackingItem rotatedItem = new PackingItem( 89 rotated ? item.Height : item.Width, 90 rotated ? item.Width : item.Height, 91 item.TargetBin); 92 92 93 93 int epIndex = 0; 94 while (epIndex < ExtremePoints.Count && (!IsPositionFeasible( item, ExtremePoints.ElementAt(epIndex)))) { epIndex++; }94 while (epIndex < ExtremePoints.Count && (!IsPositionFeasible(rotatedItem, ExtremePoints.ElementAt(epIndex)))) { epIndex++; } 95 95 96 96 if (epIndex < ExtremePoints.Count) { … … 102 102 return null; 103 103 } 104 public override PackingPosition FindPositionBySliding(PackingItem measures, bool rotated) {104 public override PackingPosition FindPositionBySliding(PackingItem item, bool rotated) { 105 105 PackingPosition currentPosition = new PackingPosition(0, 106 BinMeasures.Width - (rotated ? measures.Height : measures.Width),107 BinMeasures.Height - (rotated ? measures.Width : measures.Height), rotated);106 BinMeasures.Width - (rotated ? item.Height : item.Width), 107 BinMeasures.Height - (rotated ? item.Width : item.Height), rotated); 108 108 //Slide the item as far as possible to the left 109 while (IsPositionFeasible( measures, PackingPosition.MoveLeft(currentPosition))110 || IsPositionFeasible( measures, PackingPosition.MoveDown(currentPosition))) {109 while (IsPositionFeasible(item, PackingPosition.MoveLeft(currentPosition)) 110 || IsPositionFeasible(item, PackingPosition.MoveDown(currentPosition))) { 111 111 //Slide the item as far as possible to the bottom 112 while (IsPositionFeasible( measures, PackingPosition.MoveDown(currentPosition))) {112 while (IsPositionFeasible(item, PackingPosition.MoveDown(currentPosition))) { 113 113 currentPosition = PackingPosition.MoveDown(currentPosition); 114 114 } 115 if (IsPositionFeasible( measures, PackingPosition.MoveLeft(currentPosition)))115 if (IsPositionFeasible(item, PackingPosition.MoveLeft(currentPosition))) 116 116 currentPosition = PackingPosition.MoveLeft(currentPosition); 117 117 } 118 118 119 return IsPositionFeasible( measures, currentPosition) ? currentPosition : null;120 } 121 122 public override void SlidingBasedPacking(ref List<int> sequence, ItemList<PackingItem> item Measures) {119 return IsPositionFeasible(item, currentPosition) ? currentPosition : null; 120 } 121 122 public override void SlidingBasedPacking(ref List<int> sequence, ItemList<PackingItem> items) { 123 123 var temp = new List<int>(sequence); 124 124 for (int i = 0; i < temp.Count; i++) { 125 var item = item Measures[temp[i]];125 var item = items[temp[i]]; 126 126 var position = FindPositionBySliding(item, false); 127 127 if (position != null) { … … 131 131 } 132 132 } 133 public override void SlidingBasedPacking(ref List<int> sequence, ItemList<PackingItem> item Measures, Dictionary<int, bool> rotationArray) {133 public override void SlidingBasedPacking(ref List<int> sequence, ItemList<PackingItem> items, Dictionary<int, bool> rotationArray) { 134 134 var temp = new List<int>(sequence); 135 135 for (int i = 0; i < temp.Count; i++) { 136 var item = item Measures[temp[i]];136 var item = items[temp[i]]; 137 137 var position = FindPositionBySliding(item, rotationArray[temp[i]]); 138 138 if (position != null) { … … 142 142 } 143 143 } 144 public override void ExtremePointBasedPacking(ref List<int> sequence, ItemList<PackingItem> item Measures, bool stackingConstraints) {144 public override void ExtremePointBasedPacking(ref List<int> sequence, ItemList<PackingItem> items, bool stackingConstraints) { 145 145 var temp = new List<int>(sequence); 146 146 foreach (int itemID in temp) { 147 var item = item Measures[itemID];147 var item = items[itemID]; 148 148 var positionFound = FindExtremePointForItem(item, false, false); 149 149 if (positionFound != null) { … … 153 153 } 154 154 } 155 public override void ExtremePointBasedPacking(ref List<int> sequence, ItemList<PackingItem> item Measures, bool stackingConstraints, Dictionary<int, bool> rotationArray) {155 public override void ExtremePointBasedPacking(ref List<int> sequence, ItemList<PackingItem> items, bool stackingConstraints, Dictionary<int, bool> rotationArray) { 156 156 var temp = new List<int>(sequence); 157 157 foreach (int itemID in temp) { 158 var item = item Measures[itemID];158 var item = items[itemID]; 159 159 var positionFound = FindExtremePointForItem(item, rotationArray[itemID], false); 160 160 if (positionFound != null) { -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/HeuristicLab.Problems.BinPacking2D-3.3.csproj
r14053 r14055 169 169 <Compile Include="Instances\BPPORLIBDataDescriptor.cs" /> 170 170 <Compile Include="Instances\BPPORLIBParser.cs" /> 171 <Compile Include="Instances\RealBPPData.cs" />172 171 <Compile Include="Interfaces\I2DGVDecoder.cs" /> 173 172 <Compile Include="Interfaces\I2DMCVDecoder.cs" /> -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPData.cs
r14053 r14055 23 23 24 24 namespace HeuristicLab.Problems.BinPacking2D { 25 /// <summary>26 /// Describes instances of the regular two dimensional bin packing problem (2DBPP).27 25 28 /// </summary>29 30 // TODO implement specifically for 2d and 3d instances31 26 public class BPPData { 32 27 /// <summary> … … 42 37 /// The number of items. 43 38 /// </summary> 44 public int Items { get; set; } 45 /// <summary> 46 /// The measures of the bin. 47 /// </summary> 48 public int[] BinMeasures { get; set; } 49 /// <summary> 50 /// The measures of the items. 51 /// </summary> 52 public int[][] ItemMeasures { get; set; } 53 39 public int NumItems { get { return Items == null ? 0 : Items.Length; } } 40 public PackingShape BinShape { get; set; } 41 public PackingItem[] Items { get; set; } 54 42 /// <summary> 55 43 /// Optional! The quality of the best-known solution. -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPInstanceProvider.cs
r14053 r14055 42 42 43 43 public override Uri WebLink { 44 get { return new Uri("http://people.brunel.ac.uk/~mastjjb/jeb/orlib/binpacktwoinfo.html , http://www.diku.dk/~pisinger/new3dbpp/readme.3dbpp"); }44 get { return new Uri("http://people.brunel.ac.uk/~mastjjb/jeb/orlib/binpacktwoinfo.html"); } 45 45 } 46 46 … … 74 74 75 75 using (var stream = entry.Open()) { 76 var parser = new BPPORLIBParser(); 77 parser.Parse(stream); 78 var instance = Load(parser); 76 var instance = BPPORLIBParser.Parse(stream); 79 77 instance.Name = id.Name; 80 78 instance.Description = id.Description; … … 89 87 } 90 88 public override BPPData ImportData(string path) { 91 var parser = new BPPORLIBParser(); 92 parser.Parse(path); 93 var instance = Load(parser); 89 var instance = BPPORLIBParser.Parse(path); 94 90 instance.Name = Path.GetFileName(path); 95 91 instance.Description = "Loaded from file \"" + path + "\" on " + DateTime.Now; 96 return instance;97 }98 99 private BPPData Load(BPPORLIBParser parser) {100 var instance = new BPPData {101 Items = parser.Items,102 BinMeasures = parser.BinMeasures,103 ItemMeasures = parser.ItemMeasures104 };105 92 return instance; 106 93 } … … 111 98 112 99 public override void ExportData(BPPData instance, string path) { 113 var parser = new BPPORLIBParser { 114 Name = instance.Name, 115 Description = instance.Description, 116 Items = instance.Items, 117 BinMeasures = instance.BinMeasures, 118 ItemMeasures = instance.ItemMeasures 119 }; 120 parser.Export(path); 100 BPPORLIBParser.Export(instance, path); 121 101 } 122 102 -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPORLIBParser.cs
r14053 r14055 25 25 26 26 namespace HeuristicLab.Problems.BinPacking2D { 27 public class BPPORLIBParser { 28 public string Name { get; set; } 29 public string Description { get; set; } 30 public int Items { get; set; } 31 public int[] BinMeasures { get; set; } 32 public int[][] ItemMeasures { get; set; } 33 34 public BPPORLIBParser() { 35 Reset(); 36 } 37 38 public void Reset() { 39 Name = Description = String.Empty; 40 Items = 0; 41 BinMeasures = null; 42 ItemMeasures = null; 43 } 44 45 public void Parse(string file) { 27 public static class BPPORLIBParser { 28 public static BPPData Parse(string file) { 46 29 using (Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) { 47 Parse(stream);30 return Parse(stream); 48 31 } 49 32 } 50 33 51 public void Export(string file) {34 public static void Export(BPPData instance, string file) { 52 35 using (Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) { 53 Export( stream);36 Export(instance, stream); 54 37 } 55 38 } … … 62 45 /// </remarks> 63 46 /// <param name="stream">The stream to read data from.</param> 64 /// <returns>True if the file was successfully read or false otherwise.</returns> 65 public void Parse(Stream stream) { 66 var reader = new StreamReader(stream); 67 var delim = new char[] { ' ', '\t' }; 68 var problemClass = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries); 47 /// <returns>The parsed problem instance</returns> 48 public static BPPData Parse(Stream stream) { 49 using (var reader = new StreamReader(stream)) { 50 var instance = new BPPData(); 51 var delim = new char[] { ' ', '\t' }; 52 var problemClass = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries); 69 53 70 var nrOfItems = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries); 71 Items = int.Parse(nrOfItems[0]); 72 //Numbering of instances.. 73 reader.ReadLine(); 74 var binMeasures = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries); 75 int depth; 76 bool isThreeDimensional = false; 77 if (int.TryParse(binMeasures[2], out depth)) { 78 isThreeDimensional = true; 79 BinMeasures = new int[3]; 80 BinMeasures[0] = int.Parse(binMeasures[0]); 81 BinMeasures[1] = int.Parse(binMeasures[1]); 82 BinMeasures[2] = depth; 83 } else { 84 BinMeasures = new int[2]; 85 BinMeasures[0] = int.Parse(binMeasures[0]); 86 BinMeasures[1] = int.Parse(binMeasures[1]); 54 var tok = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries); 55 var numItems = int.Parse(tok[0]); 56 //Numbering of instances.. 57 reader.ReadLine(); 58 tok = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries); 59 instance.BinShape = new PackingShape(int.Parse(tok[0]), int.Parse(tok[1])); 60 instance.Items = new PackingItem[numItems]; 61 62 for (int k = 0; k < numItems; k++) { 63 if (reader.EndOfStream) throw new InvalidDataException("Unexpected End of Stream (at line " + k + ")."); 64 var valLine = reader.ReadLine(); 65 while (String.IsNullOrWhiteSpace(valLine)) valLine = reader.ReadLine(); 66 tok = valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries); 67 instance.Items[k] = new PackingItem(int.Parse(tok[0]), int.Parse(tok[1]), instance.BinShape) { Material = 1, Weight = 1.0 }; // these problem instances do not specify weights and materials 68 } 69 70 int problemClassNr = -1; 71 if (int.TryParse(problemClass[0], out problemClassNr)) { 72 instance.Name = "dbpp_class_0" + problemClassNr; 73 if (problemClassNr >= 1 && problemClassNr <= 5) 74 instance.Description = "Proposed by Berkey and Wang."; 75 else if (problemClassNr >= 6 && problemClassNr <= 10) 76 instance.Description = "Proposed by Martello and Vigo."; 77 } else { 78 instance.Name = "Unknown"; 79 instance.Description = "<Missing>"; 80 } 81 82 return instance; 87 83 } 88 ItemMeasures = new int[Items][];89 90 for (int k = 0; k < Items; k++) {91 if (reader.EndOfStream) throw new InvalidDataException("Unexpected End of Stream (at line " + k + ").");92 var valLine = reader.ReadLine();93 while (String.IsNullOrWhiteSpace(valLine)) valLine = reader.ReadLine();94 var vals = valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries);95 ItemMeasures[k] = new int[isThreeDimensional ? 3 : 2];96 ItemMeasures[k][0] = int.Parse(vals[0]);97 ItemMeasures[k][1] = int.Parse(vals[1]);98 if (isThreeDimensional)99 ItemMeasures[k][2] = int.Parse(vals[2]);100 }101 102 Int32 problemClassNr = -1;103 if (int.TryParse(problemClass[0], out problemClassNr)) {104 Name = (isThreeDimensional ? "3" : "2") + "dbpp_class_0" + problemClassNr;105 if (!isThreeDimensional) {106 if (problemClassNr >= 1 && problemClassNr <= 5)107 Description = "Proposed by Berkey and Wang.";108 else if (problemClassNr >= 6 && problemClassNr <= 10)109 Description = "Proposed by Martello and Vigo.";110 } else {111 if (problemClassNr >= 1 && problemClassNr <= 5)112 Description = "Proposed by Martello and Vigo.";113 else if (problemClassNr >= 6 && problemClassNr <= 9)114 Description = "Proposed by Berkey and Wang.";115 }116 } else {117 Name = "Unknown";118 Description = "<Missing>";119 }120 121 122 84 } 123 85 124 public void Export(Stream stream) { 125 bool isThreeDimensional = BinMeasures.Length == 3; 126 var nameParts = Name.Split('_'); 86 public static void Export(BPPData instance, Stream stream) { 87 var nameParts = instance.Name.Split('_'); 127 88 int problemClassNr = int.Parse(nameParts[2]); 128 89 129 var writer = new StreamWriter(stream);130 writer.WriteLine(String.Format("{0,-5} PROBLEM CLASS ({1})", problemClassNr,Description));131 writer.WriteLine(String.Format("{0,-5} {1,-5} {2,-5} WBIN,HBIN,DBIN", BinMeasures[0], BinMeasures[1], BinMeasures[2]));132 for (int i = 0; i <Items; i++) {133 if (i == 0)134 writer.WriteLine("{0,-5} {1,-5} {2,-5} W(I),H(I),D(I),I=1,...,N", ItemMeasures[i][0], ItemMeasures[i][1], ItemMeasures[i][2]);135 else136 writer.WriteLine("{0,-5} {1,-5} {2,-5}", ItemMeasures[i][0], ItemMeasures[i][1], ItemMeasures[i][2]);90 using (var writer = new StreamWriter(stream)) { 91 writer.WriteLine(String.Format("{0,-5} PROBLEM CLASS ({1})", problemClassNr, instance.Description)); 92 writer.WriteLine(String.Format("{0,-5} {1,-5} WBIN,HBIN", instance.BinShape.Width, instance.BinShape.Height)); 93 for (int i = 0; i < instance.NumItems; i++) { 94 if (i == 0) 95 writer.WriteLine("{0,-5} {1,-5} W(I),H(I),I=1,...,N", instance.Items[i].Width, instance.Items[i].Height); 96 else 97 writer.WriteLine("{0,-5} {1,-5}", instance.Items[i].Width, instance.Items[i].Height); 137 98 99 } 100 writer.Flush(); 138 101 } 139 writer.Flush();140 102 } 141 103 -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Problem.cs
r14054 r14055 44 44 Name = "2D BPP Default Instance", 45 45 Description = "The default instance for 2D Bin Packing.", 46 Bin Measures = new int[] { 20, 16 },47 Item Measures = new int[][] {48 new int[] {3,8},49 new int[] {5,3},50 new int[] {9,3},51 new int[] {2,7},52 new int[] {5,3},53 new int[] {9,3},54 new int[] {2,7},55 new int[] {5,3},56 new int[] {9,3},57 new int[] {2,7},58 new int[] {5,3},59 new int[] {9,3},60 new int[] {2,7},61 new int[] {5,3},62 new int[] {9,3},63 new int[] {2,7},64 new int[] {5,3},65 new int[] {9,3},66 new int[] {2,7},67 new int[] {5,3},68 new int[] {9,3},69 new int[] {2,7},70 new int[] {5,3},71 new int[] {9,3},72 new int[] {2,7},73 new int[] {5,3},74 new int[] {9,3},75 new int[] {2,7},76 new int[] {5,3},77 new int[] {9,3},78 new int[] {2,7},79 new int[] {5,3},80 new int[] {9,3},81 new int[] {2,7},82 new int[] {5,3},83 new int[] {9,3},84 new int[] {2,7}46 BinShape = new PackingShape(20, 16), 47 Items = new PackingItem[] { 48 new PackingItem(3, 8, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 49 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 50 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 51 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 52 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 53 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 54 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 55 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 56 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 57 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 58 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 59 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 60 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 61 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 62 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 63 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 64 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 65 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 66 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 67 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 68 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 69 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 70 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 71 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 72 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 73 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 74 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 75 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 76 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 77 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 78 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 79 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 80 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 81 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 82 new PackingItem(5, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 83 new PackingItem(9, 3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}, 84 new PackingItem(2, 7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0} 85 85 }, 86 Items = 3087 86 }; 88 87 #endregion … … 91 90 protected Problem(bool deserializing) : base(deserializing) { } 92 91 protected Problem(Problem original, Cloner cloner) 93 : base(original, cloner) {92 : base(original, cloner) { 94 93 } 95 94 public override IDeepCloneable Clone(Cloner cloner) { … … 97 96 } 98 97 public Problem() : base( 99 new DecodingEvaluator<Permutation, PackingPosition, PackingShape, PackingItem>()) {98 new DecodingEvaluator<Permutation, PackingPosition, PackingShape, PackingItem>()) { 100 99 } 101 100 102 101 #region Problem instance handling 103 102 public void Load(BPPData data) { 104 var realData = data as RealBPPData;105 var binData = new PackingShape(data.BinMeasures[0], data.BinMeasures[1]);106 107 var itemData = new ItemList<PackingItem>(data.Items);108 for (int j = 0; j < data.Items; j++) {109 var bin = new PackingShape(data.BinMeasures[0], data.BinMeasures[1]);110 var item = new PackingItem(data.ItemMeasures[j][0], data.ItemMeasures[j][1], bin);111 if (realData != null) {112 item.Weight = realData.ItemWeights[j];113 item.Material = realData.ItemMaterials[j];114 }115 itemData.Add(item);116 }117 103 118 104 BestKnownQuality = data.BestKnownQuality.HasValue ? new DoubleValue(data.BestKnownQuality.Value) : null; 119 105 120 PackingBinMeasures = binData;121 PackingItemMeasures = itemData;106 PackingBinMeasures = data.BinShape; 107 PackingItemMeasures = new ItemList<PackingItem>(data.Items); 122 108 123 109 ApplyHorizontalOrientation(); … … 129 115 130 116 public BPPData Export() { 131 var result =new BPPData {117 return new BPPData { 132 118 Name = Name, 133 119 Description = Description, 134 Items = PackingItemsParameter.Value.Value,135 BinMeasures = new int[] { PackingBinMeasures.Width, PackingBinMeasures.Height }120 BinShape = PackingBinMeasures, 121 Items = PackingItemMeasures.ToArray() 136 122 }; 137 138 var itemMeasures = new int[result.Items][];139 int i = 0;140 foreach (var item in PackingItemMeasures) {141 itemMeasures[i] = new int[] { item.Width, item.Height };142 i++;143 }144 result.ItemMeasures = itemMeasures;145 return result;146 123 } 147 124 #endregion
Note: See TracChangeset
for help on using the changeset viewer.