indexmode = FALSE; } public function __destruct(){ } //座標関連 /** * 描画済み位置をメンバ変数に格納する。 * @access public * @param int $rownum 描画列番号 * @param int $start 描画開始点(X) * @param int $end 描画終了点(X) * @return int 最後列番号 */ public function pushDrawedPositions($rownum,$start,$end){ // $this->drawedPositions = array($rownum,$start,$end); //配列が初期化されていない場合の処理 if(!(count($this->drawedPositions[$rownum]))){ $this->drawedPositions[$rownum] = array (array($start), array($end)); }else{ array_push($this->drawedPositions[$rownum][0],$start);//スタート位置格納 array_push($this->drawedPositions[$rownum][1],$end);//エンド位置格納 } array_multisort($this->drawedPositions[$rownum][0],SORT_ASC,SORT_NUMERIC,$this->drawedPositions[$rownum][1],SORT_ASC,SORT_NUMERIC); $nums= count($this->drawedPositions[$rownum][0]); $nume= count($this->drawedPositions[$rownum][1]); return count($this->drawedPositions); } /** * 描画予定位置が描画済み位置と重ならないかチェックする * @access public * @param int $rownum 予定描画列番号 * @param int $start 予定描画開始点(X) * @param int $end 予定描画終了点(X) * @return boolean オーバーラップの有無 */ public function checkOverwrapInRow($rownum,$start,$end){ //既描画オブジェクト位置との比較 //26-132 //26-114 for($i=0;$idrawedPositions[$rownum][0]);$i++){ if($this->drawedPositions[$rownum][0][$i] > $end ){//重ならない状態1 return TRUE; }elseif($this->drawedPositions[$rownum][1][$i] < $start ){//重ならない状態2 continue; }else{//重なる状態 return FALSE; } } return TRUE; } /** * 描画予定位置が描画済み位置と重ならないかチェックする * @access public * @param int $start 予定描画開始点(X) * @param int $end 予定描画終了点(X) * @param int $rownum 予定描画列番号 * @return int 描画すべき列番号 */ public function getVacantRowNum($start,$end,$rownum=0,$mode=''){ // self::log_info("checking from row $rownum\n"); if($mode == '+'){ if($rownum){ $start_row = $rownum; }else{ $start_row = count($this->drawedPositions); } }else{ $start_row = 1; } if($rownum){ if(self::checkOverwrapInRow($rownum,$start,$end)){ // self::log_info("direct OK : $rownum\n"); if($rownum > $this->maxrow){ $this->maxrow = $rownum; } return $rownum; } } for($i=$start_row;$i<=$this->maxrow;$i++){ // self::log_info("check row $i\n"); if(self::checkOverwrapInRow($i,$start,$end)){ return $i; } } //列を最後まで周っても重なってしまう場合は最後の列を返す $this->maxrow = $i; return $i; } public function pushDrawedObject($objectid,$rownum){ $this->objectdataraw[$objectid] = $rownum; } public function getMaxRow(){ return $this->maxrow; } public function getDrawedMaxRow(){ return count($this->drawedPositions); } public function getRowToDraw($objectid){ if($this->objectdataraw[$objectid]){ return $this->objectdataraw[$objectid]; }else{ return FALSE; } } /** * インデックスモードに設定する * @access public * @return boolean インデックスモード */ public function changeIndexMode(){ if($this->indexmode){ return $this->indexmode; }else{ $this->indexmode = TRUE; unset($this->drawedPositions); return $this->indexmode; } } } ?>