最新のフィード
新規フィード
xoopscube.sourceforge.net

ホーム > ブログ

ブログ

記事一覧 > WordPress > OWCのクラスを書いてみた

OWCのクラスを書いてみた

<?php /**  * PHPからCOMを使いOWCでグラフを作成するための基底クラス  *  * @package OWC  * @version 0.1  * @copyright Copyright 2010- Marijuana  * @license Modified BSD license  * @author: Marijuana  */ /**  * グラフの種類  */ define('OWC_ChartTypeArea', 29); define('OWC_ChartTypeArea3D', 60); define('OWC_ChartTypeAreaOverlapped3D', 61); define('OWC_ChartTypeAreaStacked', 30); define('OWC_ChartTypeAreaStacked100', 31); define('OWC_ChartTypeAreaStacked1003D', 63); define('OWC_ChartTypeAreaStacked3D', 62); define('OWC_ChartTypeBar3D', 50); define('OWC_ChartTypeBarClustered', 3); define('OWC_ChartTypeBarClustered3D', 51); define('OWC_ChartTypeBarStacked', 4); define('OWC_ChartTypeBarStacked100', 5); define('OWC_ChartTypeBarStacked1003D', 53); define('OWC_ChartTypeBarStacked3D', 52); define('OWC_ChartTypeBubble', 27); define('OWC_ChartTypeBubbleLine', 28); define('OWC_ChartTypeColumn3D', 46); define('OWC_ChartTypeColumnClustered', 0); define('OWC_ChartTypeColumnClustered3D', 47); define('OWC_ChartTypeColumnStacked', 1); define('OWC_ChartTypeColumnStacked100', 2); define('OWC_ChartTypeColumnStacked1003D', 49); define('OWC_ChartTypeColumnStacked3D', 48); define('OWC_ChartTypeCombo', -1); define('OWC_ChartTypeCombo3D', -2); define('OWC_ChartTypeDoughnut', 32); define('OWC_ChartTypeDoughnutExploded', 33); define('OWC_ChartTypeLine', 6); define('OWC_ChartTypeLine3D', 54); define('OWC_ChartTypeLineMarkers', 7); define('OWC_ChartTypeLineOverlapped3D', 55); define('OWC_ChartTypeLineStacked', 8); define('OWC_ChartTypeLineStacked100', 10); define('OWC_ChartTypeLineStacked1003D', 57); define('OWC_ChartTypeLineStacked100Markers', 11); define('OWC_ChartTypeLineStacked3D', 56); define('OWC_ChartTypeLineStackedMarkers', 9); define('OWC_ChartTypePie', 18); define('OWC_ChartTypePie3D', 58); define('OWC_ChartTypePieExploded', 19); define('OWC_ChartTypePieExploded3D', 59); define('OWC_ChartTypePieStacked', 20); define('OWC_ChartTypePolarLine', 42); define('OWC_ChartTypePolarLineMarkers', 43); define('OWC_ChartTypePolarMarkers', 41); define('OWC_ChartTypePolarSmoothLine', 44); define('OWC_ChartTypePolarSmoothLineMarkers', 45); define('OWC_ChartTypeRadarLine', 34); define('OWC_ChartTypeRadarLineFilled', 36); define('OWC_ChartTypeRadarLineMarkers', 35); define('OWC_ChartTypeRadarSmoothLine', 37); define('OWC_ChartTypeRadarSmoothLineMarkers', 38); define('OWC_ChartTypeScatterLine', 25); define('OWC_ChartTypeScatterLineFilled', 26); define('OWC_ChartTypeScatterLineMarkers', 24); define('OWC_ChartTypeScatterMarkers', 21); define('OWC_ChartTypeScatterSmoothLine', 23); define('OWC_ChartTypeScatterSmoothLineMarkers', 22); define('OWC_ChartTypeSmoothLine', 12); define('OWC_ChartTypeSmoothLineMarkers', 13); define('OWC_ChartTypeSmoothLineStacked', 14); define('OWC_ChartTypeSmoothLineStacked100', 16); define('OWC_ChartTypeSmoothLineStacked100Markers', 17); define('OWC_ChartTypeSmoothLineStackedMarkers', 15); define('OWC_ChartTypeStockHLC', 39); define('OWC_ChartTypeStockOHLC', 40); /**  * 凡例  */ define('OWC_LegendPositionAutomatic', 0); define('OWC_LegendPositionBottom', 2); define('OWC_LegendPositionLeft', 3); define('OWC_LegendPositionRight', 4); define('OWC_LegendPositionTop', 1); /**  * 線の太さ  */ define('OWC_LineWeightHairline', 0); define('OWC_LineWeightMedium', 2); define('OWC_LineWeightThick', 3); define('OWC_LineWeightThin', 1); /**  * 目盛  */ define('OWC_AxisPositionBottom', -2); define('OWC_AxisPositionCategory', -7); define('OWC_AxisPositionCircular', -6); define('OWC_AxisPositionLeft', -3); define('OWC_AxisPositionPrimary', -10); define('OWC_AxisPositionRadial', -5); define('OWC_AxisPositionRight', -4); define('OWC_AxisPositionSecondary', -11); define('OWC_AxisPositionSeries', -9); define('OWC_AxisPositionTimescale', -7); define('OWC_AxisPositionTop', -1); define('OWC_AxisPositionValue', -8); /**  * ChartDimensionsEnum  */ define('OWC_DimBubbleValues', 9); define('OWC_DimCategories', 1); define('OWC_DimCharts', 15); define('OWC_DimCloseValues', 6); define('OWC_DimFilter', 14); define('OWC_DimFormatValues', 16); define('OWC_DimHighValues', 7); define('OWC_DimLowValues', 8); define('OWC_DimOpenValues', 5); define('OWC_DimRValues', 10); define('OWC_DimSeriesNames', 0); define('OWC_DimThetaValues', 11); define('OWC_DimValues', 2); define('OWC_DimXValues', 4); define('OWC_DimYValues', 3); /**  * ChartSpecialDataSourcesEnum  */ define('OWC_DataBound', 0); define('OWC_DataLinked', -3); define('OWC_DataLiteral', -1); define('OWC_DataNone', -2); abstract class OWC {   /**     * OWCのオブジェクト     *     * @var object     */   public $ChartSpace = null;      /**     * グラフオブジェクト     *     * @var object     */   public $Charts = null;      /**     * 基本のフォント設定     *     * @var array     */   public $BaseFont = array('Bold' => false, 'Color' => 0, 'Italic' => false, 'Name' => 'MS Gothic', 'Size' => 12, 'Underline' => false);      /**     * 横軸のラベル     *     * @var array     */   protected $X_Labels = array();      /**     * 基本の線の色     *     * @var array     */   protected $LineColor = array();      /**     * 基本の線の色のカウンタ     *     * @var array     */   protected $ColorNum = -1;      /**     * コンストラクタ     */   public function __construct()   {     $this->ChartSpace = new COM('OWC11.ChartSpace');     $this->ChartSpace->Clear();     $this->Charts = $this->ChartSpace->Charts->Add();     $this->LineColor = array(OWC::RGB(25, 135, 255), OWC::RGB(255, 100, 100), OWC::RGB(0, 192, 0), OWC::RGB(255, 128, 64));     $this->Charts->PlotArea->Interior->Color = OWC::RGB(255, 255, 255);   }      /**     * VB互換のRGB変換メソッド     *     * @param integer $red 赤の数値(0-255)     * @param integer $green 緑の数値(0-255)     * @param integer $blue 青の数値(0-255)     * @return integer (0-16777215)     */   public static function RGB($red, $green, $blue)   {     $hex = str_pad(dechex($red), 2, '0', STR_PAD_LEFT);     $hex.= str_pad(dechex($green), 2, '0', STR_PAD_LEFT);     $hex.= str_pad(dechex($blue), 2, '0', STR_PAD_LEFT);     return hexdec($hex);   }   /**     * 横軸の設定     *     * @param boolean $use 横軸の縦線を表示する     * @param intger $Color 縦線の色(0-16777215)     * @param intger $line 縦線の太さ(定数OWC_LineWeight***)     * @param array $font 横軸のラベルのフォント     */   public function UseYAxes($use = true, $Color = 10526880, $line = OWC_LineWeightThin, $font = false)   {     $axValueAxis = $this->Charts->Axes(OWC_AxisPositionLeft);     $axValueAxis->HasMajorGridlines = $use;     //フォント     $font = is_array($font) ? $font : $this->BaseFont;     foreach ( $font as $key => $value ){       $axValueAxis->Font->$key = $value;     }          if ( $use ) {       $axValueAxis->MajorGridlines->Line->Color = $Color;       $axValueAxis->MajorGridlines->Line->Weight = $line;     }   }      /**     * 縦軸の設定     *     * @param boolean $use 縦軸の縦線を表示する     * @param intger $Color 横線の色(0-16777215)     * @param intger $line 横線の太さ(定数OWC_LineWeight***)     * @param array $font 縦軸のラベルのフォント     */   public function UseXAxes($use = true, $Color = 10526880, $line = OWC_LineWeightThin, $font = false)   {     $axValueAxis = $this->Charts->Axes(OWC_AxisPositionBottom);     $axValueAxis->HasMajorGridlines = $use;     //フォント     $font = is_array($font) ? $font : $this->BaseFont;     foreach ( $font as $key => $value ){       $axValueAxis->Font->$key = $value;     }          if ( $use ) {       $axValueAxis->MajorGridlines->Line->Color = $Color;       $axValueAxis->MajorGridlines->Line->Weight = $line;     }   }      /**     * 縦軸の目盛設定     *     * @param intger $min 最小値     * @param intger $max 最大値     * @param intger $unit 目盛の数値     */   public function YAxesScale($min = 0, $max = 100, $unit = 10)   {     $axValueAxis = $this->Charts->Axes(OWC_AxisPositionLeft);     $axValueAxis->Scaling->Maximum = $max;     $axValueAxis->Scaling->Minimum = $min;     $axValueAxis->MajorUnit = $unit;   }      /**     * 凡例の設定     *     * @param boolean $use 凡例を表示する     * @param intger $position 凡例を表示する場所(定数OWC_LegendPosition***)     * @param array $font 凡例のフォント     */   public function UseLegend($use = true, $position = OWC_LegendPositionTop, $font = false)   {     $this->Charts->HasLegend = $use;     if ( $use ) {       $this->Charts->Legend->Position = OWC_LegendPositionTop;       //フォント       $font = is_array($font) ? $font : $this->BaseFont;       foreach ( $font as $key => $value ){         $this->Charts->Legend->Font->$key = $value;       }     }   }      /**     * グラフタイトルの設定     *     * @param string $title タイトルの文字列(空の時は表示しない)     * @param array $font タイトルのフォント     */   public function setTitle($title = '', $font = false)   {     if ( $title != '' ) {       $this->Charts->HasTitle = true;       $this->Charts->Title->Caption = $title;       $font = is_array($font) ? $font : $this->BaseFont;       foreach ( $font as $key => $value ){         $this->Charts->Title->Font->$key = $value;       }     } else {       $this->Charts->HasTitle = false;     }   }      /**     * 横軸のラベルをセットする     *     * @param array $labels ラベルタイトルの配列     */   public function setXLabel($labels)   {     $this->X_Labels = $labels;   }      /**     * データをセットする     * オーバーライドして使用     *     * @param array $values データの配列     * @param string $title データ名称(凡例に表示される)     * @param intger $color データの色(デフォルトは$LineColorが順番に設定される)     */   public function setData($values, $title, $color = -1)   {     $this->ColorNum++;     if ( $this->ColorNum >= count($this->LineColor) ) {       $this->ColorNum = 0;     }     $color = ($color > 0) ? $color : $this->LineColor[$this->ColorNum];          $SeriesCollection = $this->Charts->SeriesCollection->Add();     $SeriesCollection->Caption = $title;     $SeriesCollection->SetData(OWC_DimCategories, OWC_DataLiteral, $this->X_Labels);     $SeriesCollection->SetData(OWC_DimValues, OWC_DataLiteral, $values);   }      /**     * グラフの出力     *     * @param string $type 画像の種別(jpg,png,gif)     * @param intger $width 画像の幅     * @param intger $height 画像の高さ     */   public function DrawChart($type = 'png', $width = 800, $height = 600)   {     switch ($type) {       case 'jpg': header('Content-type: image/jpeg'); break;       case 'png': header('Content-type: image/png'); break;       case 'gif': header('Content-type: image/gif'); break;     }          foreach ( $this->ChartSpace->GetPicture($type, $width, $height) as $bit ) {       echo pack('c', $bit);     }     exit;   }      /**     * グラフの保存     *     * @param string $filename 画像を保存するファイル名(フルパス)     * @param string $type 画像の種別(jpg,png,gif)     * @param intger $width 画像の幅     * @param intger $height 画像の高さ     */   public function SaveChart($filename, $type = 'png', $width = 800, $height = 600)   {     $this->ChartSpace->ExportPicture($filename, $type, $width, $height);   } } ?> ↓こんな感じでグラフ毎にオーバーライドして使用を想定 #個人的にはOWC_ChartTypeLineMarkersのグラフしか使用しないので他のグラフだと設定の追加などが必要かも <?php//マーカーdefine('OWC_MarkerStyleCircle', 8);define('OWC_MarkerStyleDash', 7);define('OWC_MarkerStyleDiamond', 2);define('OWC_MarkerStyleDot', 6);define('OWC_MarkerStyleNone', 0);define('OWC_MarkerStylePlus', 9);define('OWC_MarkerStyleSquare', 1);define('OWC_MarkerStyleStar', 5);define('OWC_MarkerStyleTriangle', 3);define('OWC_MarkerStyleX', 4); class OWC_LineChart extends OWC{  public function __construct($type = OWC_ChartTypeLineMarkers)  {    $LineType = array(      OWC_ChartTypeLine, OWC_ChartTypeLine3D, OWC_ChartTypeLineMarkers,       OWC_ChartTypeLineOverlapped3D, OWC_ChartTypeLineStacked,       OWC_ChartTypeLineStacked100, OWC_ChartTypeLineStacked1003D, OWC_ChartTypeLineStacked100Markers,      OWC_ChartTypeLineStacked3D, OWC_ChartTypeLineStackedMarkers    );    if ( !in_array($type, $LineType) ) {      exit('Invalid Type');    }    //$this->BaseFont['Name'] = mb_convert_encoding('MS ゴシック', 'SJIS-win', 'UTF-8');        parent::__construct();     $this->Charts->PlotArea->Interior->Color = OWC::RGB(255, 255, 255);    $this->Charts->Type = $type;        //凡例    $this->UseLegend();        //横軸の縦線    $this->UseXAxes();        //縦軸の横線    $this->UseYAxes();        //縦軸の目盛    $this->YAxesScale(0, 360, 36);  }    public function setData($values, $title, $color = -1)  {    $this->ColorNum++;    $color = ($color > 0) ? $color : $this->LineColor[$this->ColorNum];        $SeriesCollection = $this->Charts->SeriesCollection->Add();    $SeriesCollection->Caption = $title;    $SeriesCollection->SetData(OWC_DimCategories, OWC_DataLiteral, $this->X_Labels);    $SeriesCollection->SetData(OWC_DimValues, OWC_DataLiteral, $values);        //線の色    $SeriesCollection->Line->Color = $color;        //マーカーの種類と大きさ、色    $SeriesCollection->Marker->Style = OWC_MarkerStyleCircle;    $SeriesCollection->Marker->Size = 7;    $SeriesCollection->Interior->Color = $color;  }} $c = new OWC_LineChart();$c->setTitle(mb_convert_encoding('グラフのタイトル', 'SJIS-win', 'UTF-8'));$c->setXLabel($Xlabels);$c->setData($data1, mb_convert_encoding('データ名1', 'SJIS-win', 'UTF-8'));$c->setData($data2, mb_convert_encoding('データ名2', 'SJIS-win', 'UTF-8'));$c->DrawChart('png', 640, 480);?>


概要 | ダウンロード | ニュース | フォーラム | 開発情報 | ツール | テーマ | モジュール
お問い合わせ | プライバシーポリシー
Copyright © 2001-2009 XOOPS Cube日本サイト