新しい頂点クラスを作る手順メモ
grinedit.addVertex("BoxVertex", {})
と書いてみる。実行すると頂点が表示された。OK。
BoxVertexの所を org.nishiohirokazu.graph.FileVertex に変えてみる。 Graph#addObjでキャストエラー。IGRINObjectインターフェイスをimplementsしていないから。 ちなみに今回はRenderableVertexを継承していないのだ。 なぜならextends JLabelだから。
private String id;
public String getId() {
return id;
}
public void setId(Object o){
id = o.toString();
}
public Hashtable getParams() {
return new Hashtable();
}
SimpleLayout#layoutStepでキャストエラー。 MassPointを継承していないから。これはIMassPointに変えるべきですな。 IMassPointをimplementsしてMassPointを参考に実装。
private Vector dVelList = new Vector();
private double[] position = new double[2];
private double[] velocity = new double[2];
public Vector getDVelList() {
return dVelList;
}
public void setDVelList(Vector velList) {
dVelList = velList;
}
public double[] getPosition() {
return position;
}
public void setPosition(double[] position) {
this.position = position;
}
public double[] getVelocity() {
return velocity;
}
public void setVelocity(double[] velocity) {
this.velocity = velocity;
}
PL_RepulsionでRenderableVertexにキャストしようとしてエラー。 これはRepulsionが悪い。 IMassPointに変更。
ワールド座標系からスクリーン座標系に変換するところで RenderableVertexにキャストしていたのを、
Object o = i.next(); IMassPoint v = (IMassPoint) o; IHasScreenPos sv = (IHasScreenPos) o; sv.setScreenPos(vp.viewportTransform(v.getPosition()));に修正。IHasScreenPosにセッタがなかったので追加。
private double[] screenPos;
public double[] getScreenPos() {
return screenPos;
}
public void setScreenPos(double[] pos) {
screenPos = pos;
}
レンダリングエンジンがIRenderにキャストしようとするのでそれもimplements
public void render(Object target) {
update((Graphics) target);
}
無事描画はされるようになったが、描画される位置がおかしい。
どうやって直すかなぁ、これ。