]TweetJava言語での制御・自動処理と直接的な3D描画リニアングラフ3Dは、Ver.5.6以降において、Java※1言語での制御もサポートしています。ここでは、実際にJava言語のコードから3Dグラフをプロットさせたり、3D図形を描画させたりする方法を解説します。採用されたモジュール機能の使用はサポートしていません。将来的なバージョンにおいて対応する予定です。開発の準備とコンパイル・実行Java言語でリニアングラフ3Dを制御するには、別途Java言語の開発環境(JDK)が必要です。JDKの入手やインストールについては、Java言語の解説書や解説サイトなどをご参照ください。ここでは解説の単純化のためIDEは使用せず、コンパイルと実行はコマンドラインで行います。はじめに、環境が揃っている事の確認として、リニアングラフ3Dを起動するための簡単なサンプルを作成し、コンパイル・実行してみましょう。上のコードと同じ場所に置いてください。(Linux等の場合)実行の結果、グラフ画面が起動すれば成功です。以降のサンプルコードでは、上のコマンドのSample0の部分をSample1〜Sample6に置き換えて、同様にコンパイル・実行できます。」とするようにご注意ください。この解説で使用するリニアングラフ3DのJava言語用APIライブラリは、以下のURLで仕様書を参照できます。API仕様書https://www.rinearn.com/ja-jp/graph3d/api/com/rinearn/graph3d/RinearnGraph3D以下では、いくつかの基本となる使い方について、サンプルコードを例示しながら解説していきます。以下で掲載するサンプルコードは、配布パッケージ内にも同梱されています。ファイルのプロットまずは、実用における最も単純な例として、CSVファイルに記載された座標値データをプロットしてみましょう。10の範囲で適当に座標値が書き出されています。メソッドを呼び出して、開きたいファイルを引数に渡しています。ファイルを開く過程での例外については、必要に応じて適切に処理してください。メソッドで配列データを渡します。線プロット時には、小系列の区切りで線が切れ、大系列の区切りで色が変わります。その際、どちらが縦か横かは気にしなくても構いません。具体例は「範囲やオプションなどの詳細設定」の項をご参照ください。メソッドを使用します。これまで登場したサンプルコードにおいて、mainメソッドの末尾に以下の一行を追加すれば、画像ファイル「graph.png」が出力されます:code/ExportImage.java画像形式は拡張子から自動で判断されますが、現時点ではJPEGとPNG形式にのみ対応しています。2番目の引数は画質で、1.0で最高、0.0で最低となります(JPEG形式のみで有効です)。メソッドにより、グラフ画像をjava.awt.Imageクラスのインスタンスとして取得する事もできます。これにより、グラフ画像を加工したり、別のGUI画面上に埋め込んだりする事も(それなりの処理を書く必要がありますが)可能です。メソッドなどを用いて、プロット範囲やオプションなどの設定を行う事ができます。上のコードでは、setOptionSelectedメソッドでプロットオプションの有効/無効状態を操作しています。操作するオプションの項目はRinearnGraph3DOptionItem列挙子の要素で指定します。上では初期状態で有効な点プロットオプションを無効化し、メッシュプロットオプションを有効化しています。メソッドでそれぞれX/Y/Z軸方向のプロット範囲を設定しています。設定系のメソッドは他にも存在します。詳細については、RinearnGraph3DクラスのAPI仕様書をご参照ください。メソッドで読み込む方法もあります。項で扱ったファイルや配列データのプロットを繰り返し、少しずつ異なる内容を連続で描かせ続ければOKです。メソッドで配列データを渡した際、データの描画処理が完了するまで、呼び出し元に処理が戻らない事に留意する必要があります。これは、アニメーションの各画面をコマ落ちなく画像に出力したい場合などには便利です。入ってくるデータに対して描画速度が追い付かない、つまり描画がボトルネックになってしまう可能性もあります。メソッド呼び出し時はすぐに処理が戻り、描画処理は別スレッドで非同期に、適当なタイミングで行われるようになります。これは、一般にアニメーション速度を描画所要時間に依存させたくない場合にも有効です。実際に、毎時刻の配列データを計算で生成し、非同期描画でアニメーションさせてみましょう:code/Sample4.java実行結果(曲面グラフがプロットされ、形状がアニメーションで時間変化します。)描画エンジンの直接操作による自由な3D描画ここまで、座標値データから、点や線および面などを組み合わせて3Dのグラフを描く処理は、全てリニアングラフ3D側が自動で行っていました。これは手軽なので便利ですが、用途によっては、自分で自由に、3D空間内に点や線および面などを描きたい場合もあるでしょう。そのような場合には、リニアングラフ3Dの描画エンジンのAPIを使用します。クラスの各メソッドとして提供されています。API仕様書https://www.rinearn.com/ja-jp/graph3d/api/com/rinearn/graph3d/renderer/RinearnGraph3DRendererこのAPIを用いると、リニアングラフ3Dを通常のグラフソフトとしてだけではなく、プログラミングでの簡易3D描画環境としても活用する事ができます。」といった用途などに便利かもしれません。リニアングラフ3Dの描画エンジンの基本特性リニアングラフ3Dでは、全処理をJava言語で実装した、ソフトウェアレンダリング式の3D描画エンジンを採用しています。これにより、動作環境に関する要求は特に無く、どこでも概ね同様の描画結果が得られます。その半面として、描画速度は数十万ポリゴン/秒程度と、そう速くありません。描画形式はシンプルなZソート形式のフラットシェーディングのみとなっています。遠近判定はピクセル単位ではなくポリゴン単位で行われるため、ポリゴン同士が交差・めり込んでいたり、遠近方向にかなり近接していたり、巨大なポリゴンがある箇所などでは、描画上の手前/奥の関係がラフになります。そのため、細かく遠近判定させたい箇所では、ポリゴンも細かく分割してください。簡単な例さて、描画エンジンの処理は、もちろんリニアングラフ3D側からも呼び出されます。そのため、ここで扱う描画エンジンの直接操作と、リニアングラフ3Dの他の機能(ファイルを開いてプロットしたり、メニューから手動でグラフ範囲やプロットオプションを変更したり、等々)とを併用したい場合には、少し工夫が必要です。詳しくは次の項で説明しますが、とりあえずそのような事を一切考えずに、単に3D空間に図形を描きたいだけであれば、非常に単純にコードを書く事ができます。メソッドで描画エンジンを取得し、グラフ空間の範囲を設定した上で、描画エンジンの各描画メソッドを呼び出して点や線などを描いています。メソッドでスクリーンの再描画を行わせていますが、この段階で初めて、3D空間内に描いた立体が、平面のグラフ画面に射影されて(2次元の絵として)描画されます。いわゆる3DCGのレンダリング処理です。マウスで視点を操作した際などには自動で再レンダリングされますが、点や線の描画メソッドを呼ぶ度に毎回自動で再レンダリングされたりはしないため(処理コストが大きいためです)、このように最後に明示的に再レンダリングさせています。各描画メソッドの引数に渡す座標は、標準ではグラフ空間における座標と見なされます。そのため、描画される絶対的な位置はグラフの範囲設定によって変化します。グラフの範囲より外側にはみ出した内容は、標準では描画されません。クラスのインスタンスを渡してください。このクラスには、描画時のグラフ範囲に応じたスケーリングの有無や、はみ出した部分の除去の有無、および色設定や自動彩色の有無などを細かく設定できます。メソッドを呼び出しておくと、グラフ範囲の目盛りや枠線を非表示にする事もできます。グラフ範囲やプロットオプションを変更しても描画内容が消えないようにするにはところで、上のサンプルコードでは、後からグラフ範囲やプロットオプションの変更操作などを行うと、描画内容が消えてしまいます。そのような操作は、グラフ全体の立体形状の造りなおしが必要になるため、最初にリニアングラフ3D側から描画内容をリセットする処理が呼ばれるからです。setMenuVisibleメソッドの引数にfalseを指定して、メニューを非表示にする事もできます。一方で、ちゃんとグラフ範囲の変更などに対応したい場合は、グラフの再描画が必要なタイミングをイベントとして受け取って、その度に描画しなおす事もできます。以下がその例です:code/Sample6.javaこのコードを実行した結果、描画される内容は、先ほどのSample5と全く同様です。選んでグラフの範囲を変更しても、内容が消えてしまう事は無く、ちゃんと正しいグラフ範囲で表示されます。リニアングラフ3Dに登録しています。メソッド内で、3D描画処理を再実行して描き直しています。!ここで一つ注意が必要です。(描画エンジンであるRinearnGraph3DRendererクラスのメソッドは呼んでもOKです)。無限ループに陥ってしまいます。他にも、RinearnGraph3Dクラスの多くのメソッドは、処理が中途半端なタイミングで行われてしまうのを避けるために、描画エンジンの操作中は一旦待機して、描画完了してから処理を行うようになっています。実行中は描画エンジンが操作中であると見なされるため、その中でRinearnGraph3Dクラスのメソッドを呼ぶと、描画完了をいつまでも待機してしまい、処理が進まなくなってしまいます。インターフェースを実装した結果、グラフが動かなくなってしまったら、上の点を踏まえて見直してみてください。その子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。米国およびその他の国における登録商標です。関連のある、もしくはスポンサーを受けるものではありません。氏の米国およびその他の国における商標または登録商標です。その他、文中に使用されている商標は、その商標を保持する各社の各国における商標または登録商標です。遅ればせながら、新年のご挨拶を申し上げます。本年もRINEARNをどうぞよろしくお願い申し上げます。RINEARNでは10月9日にソフトウェアの最新版をリリースしました。VCSSLのAPI関数の追加や、リニアングラフ3Dのアニメーションツールの追加など行っています。その概要をお知らせします。」の公式ページが、RINEARNサイト内にオープンしました。その概要をお知らせします。お知らせ一覧コードアーカイブ新着3Dグラフを回転アニメーションさせるツール3Dグラフを、Z軸まわりにゆっくりと回転アニメーションさせるツールです。全角度のグラフを、連番の画像ファイルに保存する事もできます。GUI開発ガイド」内のサンプルコードです。ユーザーがGUIを操作した際に行う処理を実装します。GUI開発ガイド」内のサンプルコードです。色々な種類のGUI部品を画面上に配置します。連番ファイルから3Dグラフをアニメーション描画するツールフォルダ内の連番データファイルを読み込み、3Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。連番ファイルから2Dグラフをアニメーション描画するツールフォルダ内の連番データファイルを読み込み、2Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。|このウェブサイトでは、広告配信とトラフィックデータ解析にCookieを使用しています。このサイトをご利用頂くにはプライバシーポリシーをご確認ください。このサイトはRINEARNが管理・運営を行っています。サイト内に掲載されている文章・画像の著作権は、原則としてRINEARNおよびその代表に帰属します。