Plotter.java
/*
* Created on 2008/12/05
* Copyright (C) 2008 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.control;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.mklab.nfc.matrix.DoubleMatrix;
/**
* グラフを描画するためのクラスです。
*
* @author koga
* @version $Revision$, 2008/12/05
*/
public abstract class Plotter {
/** 線の番号 */
protected Map<SystemInputOutputKey, Integer> lineNumbers;
/** 線の名前 */
protected Map<SystemInputOutputKey, String> lineNames;
/** 選択可能な色の数 */
protected int colorSize = 6;
/**
* グラフの線の名前を設定します。
*
* @param lineNumber 線の番号
* @param name 線の名前
*/
public abstract void setGraphLineName(final int lineNumber, final String name);
/**
* 線の名前を返します。
*
* @param lineNumber 線の番号
* @return 線の名前
*/
public abstract String getGraphLineName(final int lineNumber);
/**
* 線の表示・非表示を設定します。
*
* @param lineNumber 線の番号
* @param visible 線の表示・非表示
*/
public abstract void setGraphLineVisible(final int lineNumber, final boolean visible);
/**
* 線の表示・非表示を返します。
*
* @param lineNumber 線の番号
* @return 線の表示・非表示
*/
public abstract boolean isGraphLineVisible(final int lineNumber);
/**
* 線のタイプ(色)を設定します。
*
* @param lineNumber 線の番号
* @param type 線のタイプ(色)
*/
public abstract void setGraphLineType(final int lineNumber, final int type);
/**
* 線のタイプを返します。
*
* @param lineNumber 線の番号
* @return 線のタイプ
*/
public abstract int getGraphLineType(final int lineNumber);
/**
* 線の幅を設定します。
*
* @param lineNumber 線の番号
* @param width 線の幅
*/
public abstract void setGraphLineWidth(final int lineNumber, final int width);
/**
* 線の幅を返します。
*
* @param lineNumber 線の番号
* @return 線の幅
*/
public abstract int getGraphLineWidth(final int lineNumber);
/**
* フォントの大きさを設定します。
*
* @param fontSize フォントの大きさ
*/
public abstract void setGraphFontSize(final int fontSize);
/**
* フォントの大きさを返します。
*
* @return フォントの大きさ
*/
public abstract int getGraphFontSize();
/**
* 線の名前を設定します。
*
* @param key システムの入出力番号キー
* @param name 線の名前
*/
public void setLineName(SystemInputOutputKey key, final String name) {
this.lineNames.put(key, name);
setGraphLineName(this.lineNumbers.get(key).intValue(), name);
}
/**
* 線の表示・非表示を設定します。
*
* @param key システムの入出力番号キー
* @param visible 線の表示・非表示
*/
public void setLineVisible(SystemInputOutputKey key, final boolean visible) {
setGraphLineVisible(this.lineNumbers.get(key).intValue(), visible);
}
/**
* 線のタイプ(色)を設定します。
*
* @param key システムの入出力番号キー
* @param type 線のタイプ(色)
*/
public void setLineType(SystemInputOutputKey key, final int type) {
setGraphLineType(this.lineNumbers.get(key).intValue(), type);
}
/**
* 線の幅を設定します。
*
* @param key システムの入出力番号キー
* @param width 線の幅
*/
public void setLineWidth(SystemInputOutputKey key, final int width) {
setGraphLineWidth(this.lineNumbers.get(key).intValue(), width);
}
/**
* 線の幅を返します。
*
* @param key システムの入出力番号キー
* @return 線の幅
*/
public int getLineWidth(SystemInputOutputKey key) {
return getGraphLineWidth(this.lineNumbers.get(key).intValue());
}
/**
* 線のタイプを返します。
*
* @param key システムの入出力番号キー
* @return 線のタイプ
*/
public int getLineType(SystemInputOutputKey key) {
return getGraphLineType(this.lineNumbers.get(key).intValue());
}
/**
* 線の表示・非表示を返します。
*
* @param key システムの入出力番号キー
* @return 線の表示・非表示
*/
public boolean isLineVisible(SystemInputOutputKey key) {
return isGraphLineVisible(this.lineNumbers.get(key).intValue());
}
/**
* 線の名前を返します。
*
* @param key システムの入出力番号キー
* @return 線の名前
*/
public String getLineName(SystemInputOutputKey key) {
return getGraphLineName(this.lineNumbers.get(key).intValue());
}
/**
* システムの入出力番号キーのリストを返します。
*
* @return システムの入出力番号キーのリスト
*/
public List<SystemInputOutputKey> getKeyList() {
return new ArrayList<>(this.lineNumbers.keySet());
}
/**
* 線のタイプ(色)の初期を行います。
*/
public void initializeLineTypes() {
int colorCount = 0;
for (final SystemInputOutputKey key : getKeyList()) {
setLineType(key, colorCount++ % this.colorSize);
}
}
/**
* フォントの大きさを設定します。
*
* @param fontSize フォントの大きさ
*/
public void setFontSize(final int fontSize) {
setGraphFontSize(fontSize);
}
/**
* フォントの大きさを返します。
*
* @return フォントの大きさ
*/
public int getFontSize() {
return getGraphFontSize();
}
/**
* 線の名前とタイプ(色)を設定します。
*
* @param magnitudes 大きさと位相のリスト
*/
public void setupLineNameAndType(final List<DoubleMatrix> magnitudes) {
this.lineNames = new TreeMap<>();
this.lineNumbers = new TreeMap<>();
int inputNumber = 1;
int lineNumber = 1;
for (final DoubleMatrix magnitudeColumn : magnitudes) {
for (int outputNumber = 1; outputNumber <= magnitudeColumn.getRowSize(); outputNumber++) {
final DoubleMatrix magnitude = magnitudeColumn.getRowVector(outputNumber);
if (magnitude.isZero()) {
continue;
}
final SystemInputOutputKey key = new SystemInputOutputKey(inputNumber, outputNumber);
this.lineNames.put(key, "G(" + outputNumber + "," + inputNumber + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
this.lineNumbers.put(key, Integer.valueOf(lineNumber++));
}
inputNumber++;
}
}
}