00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef MIXEDPACKING_H
00036 #define MIXEDPACKING_H
00037
00038 #include "basepacking.h"
00039
00040 #include <vector>
00041 #include <string>
00042 using namespace std;
00043
00044
00045 class MixedBlockInfoType
00046 {
00047 public:
00048 MixedBlockInfoType(const string& blocksfilename,
00049 const string& format);
00050 virtual ~MixedBlockInfoType() {}
00051
00052 class BlockARInfo
00053 {
00054 public:
00055 double area;
00056 vector<double> maxAR;
00057 vector<double> minAR;
00058 bool isSoft;
00059 };
00060 const HardBlockInfoType& currDimensions;
00061 const vector<BlockARInfo>& blockARinfo;
00062 static const int ORIENT_NUM;
00063
00064 inline void setBlockDimensions(int index, double newWidth, double newHeight,
00065 int theta);
00066
00067 protected:
00068 HardBlockInfoType _currDimensions;
00069 vector<BlockARInfo> _blockARinfo;
00070
00071 void ParseBlocks(ifstream& input);
00072 inline void set_blockARinfo_AR(int index, double minAR, double maxAR);
00073
00074
00075 MixedBlockInfoType(int blocknum)
00076 : currDimensions(_currDimensions),
00077 blockARinfo(_blockARinfo),
00078 _currDimensions(blocknum),
00079 _blockARinfo(blocknum+2)
00080 {}
00081 };
00082
00083
00084
00085
00086
00087 void MixedBlockInfoType::setBlockDimensions(int index,
00088 double newWidth,
00089 double newHeight,
00090 int theta)
00091 {
00092 double realWidth = (theta % 2 == 0)? newWidth : newHeight;
00093 double realHeight = (theta % 2 == 0)? newHeight : newWidth;
00094 _currDimensions.set_dimensions(index, realWidth, realHeight);
00095 }
00096
00097 void MixedBlockInfoType::set_blockARinfo_AR(int index,
00098 double minAR,
00099 double maxAR)
00100 {
00101 _blockARinfo[index].minAR.resize(ORIENT_NUM);
00102 _blockARinfo[index].maxAR.resize(ORIENT_NUM);
00103 for (int i = 0; i < ORIENT_NUM; i++)
00104 {
00105 _blockARinfo[index].minAR[i] = ((i%2 == 0)?
00106 minAR : (1.0 / maxAR));
00107 _blockARinfo[index].maxAR[i] = ((i%2 == 0)?
00108 maxAR : (1.0 / minAR));
00109 }
00110 }
00111
00112 #endif