home processing download documents tutorial python tutorial gallery source about
 チュートリアル (トピック一覧へ戻る)

ファイル入出力

     ファイルの読み込み

iGeoは現時点でのWavefront OBJファイル(.obj)と Rhinocerosバージョン4.0ファイル(.3dm)の読み込みをサポートしています。 BRep solid geometryとPoly-curves(Polylinesのみ読み込み化)には対応していません。

ファイルを開くには、IG.open()関数にファイルパスを渡します。 ファイルパスは絶対・相対パスのどちらも対応されています。

絶対パスはファイルの場所をファイルシステムの最上階から指定します。 Windowsでは
C:\Users\username\My Documents\
のように表記されます。 Macでは
/home/user/Documents/
のように表記されます。

相対パスはファイルの場所をProcessingのdataフォルダから指定します。 dataフォルダは保存された該当スケッチフォルダの下にあり、 もし現在のスケッチが "sketch_sep01a"という名前でデフォルトのProcessingフォルダ内に保存されているとき Windowsでは
My Documents\Processing\sketch_sep01a\data\
Macでは
~/Documents/Processing/sketch_sp01a/data/
に位置します。

Windowsにおいてファイルパスを記述する際、バックスラッシュまたは円記号(\)は
"C:\\User\\username\\My Documents\\"
のように二度入力される必要があります。

Processingでは入力画像やファイルなどのリソースファイルはdataフォルダ内に保存されることが推奨されます。 スケッチのフォルダ内にdataフォルダを作成し、リソースファイルをそこに保存してください。 もしくはProcessingアプリケーションのメニュー"Sketch"から"Add File..."を選択し、 リソースファイルを選択すれば、Processingは自動的にスケッチのフォルダ内にdataフォルダを作成し、 指定されたファイルをそこにコピーします。

リソースファイルがdataフォルダに保存されれば、スケッチ上で以下のように開くことができます。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

//IG.open("test_input_file.obj"); // Wavefront OBJ format
IG.open("test_input_file.3dm"); // Rhinoceros 3dm format

     ファイルの保存

読み込みと同様に、iGeoで生成したオブジェクトはIG.save()関数でリソースファイルとして保存することができます。 指定のパスが相対パスであれば、ファイルはdataフォルダ内に保存されます。 なおオブジェクトを保存する前にスケッチがまず保存される必要があります。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

//IG.save("test_output_file.obj"); // Wavefront OBJ format
IG.save("test_output_file.3dm"); // Rhinoceros 3dm format

     幾何学オブジェクトの読み込み

ファイルを読み込んだのちに、読み込まれた各種の幾何学オブジェクトを参照するには以下の関数を用います。 IG.points() IG.curves() IG.surfaces() IG.meshes() IG.breps() You can select geometries which are imported into iGeo's server with those methods.
IG.points()は点の配列を返します。
IG.curves()は曲線の配列を返します。
IG.surfaces()は平面・曲面の配列を返します。
IG.meshes()はポリゴンメッシュの配列を返します。
IG.breps()はpolysurface(またはBRep)の配列を返します。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

//IG.open("test_input_file.obj"); // Wavefront OBJ format
IG.open("test_input_file.3dm"); // Rhinoceros 3dm format

IPoint[] pts = IG.points(); //getting points

ICurve[] crvs = IG.curves(); //getting curves

ISurface[] srfs = IG.surfaces(); //getting surfaces

IMesh[] meshes = IG.meshes(); //getting polygon meshes

IBrep[] breps = IG.breps(); //getting Breps

配列の各要素を参照する際、以下のスケッチのようにfor文が用いられます。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

//IG.open("test_input_file.obj"); // Wavefront OBJ format
IG.open("test_input_file.3dm"); // Rhinoceros 3dm format

IPoint[] pts = IG.points(); //getting points
for(int i=0; i < pts.length; i++){
  // do something with pts[i]
}

ICurve[] crvs = IG.curves(); //getting curves
for(int i=0; i < crvs.length; i++){
  // do something with crvs[i]
}

ISurface[] srfs = IG.surfaces(); //getting surfaces
for(int i=0; i < srfs.length; i++){
  // do something with srfs[i]
}

IMesh[] meshes = IG.meshes(); //getting polygon meshes
for(int i=0; i < meshes.length; i++){
  // do something with meshes[i]
}

IBrep[] breps = IG.breps(); //getting BReps
for(int i=0; i < breps.length; i++){
  // do something with breps[i]
}

読み込まれた幾何学オブジェクトの種類別の数量を参照するには以下の関数を用います。

IG.pointNum()は点の総数を返します。
IG.curveNum()は曲線の総数を返します。
IG.surfaceNum()は平面・曲面の総数を返します。
IG.mesheNum()はポリゴン・メッシュの総数を返します。
IG.brepNum()はpolysufrace(BRep)の総数を返します。

読み込まれた幾何学オブジェクトの一つ一つを指定して参照するには以下の関数を用います。

IG.point(int)は指定の番号の点を返します。
IG.curve(int)は指定の番号の曲線を返します。
IG.surface(int)は指定の番号の平面・曲面を返します。
IG.meshe(int)は指定の番号のポリゴンメッシュを返します。
IG.brep(int)は指定の番号のpolysurface(BRep)を返します。

以上の関数を用いることで、上記のスケッチは以下のように簡潔に記述できます。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

//IG.open("test_input_file.obj"); // Wavefront OBJ format
IG.open("test_input_file.3dm"); // Rhinoceros 3dm format

for(int i=0; i < IG.pointNum(); i++){
  // do something with IG.point(i)
}

for(int i=0; i < IG.curveNum(); i++){
  // do something with IG.curve(i)
}

for(int i=0; i < IG.surfaceNum(); i++){
  // do something with IG.surface(i)
}

for(int i=0; i < IG.meshNum(); i++){
  // do something with IG.mesh(i)
}

for(int i=0; i < IG.brepNum(); i++){
  // do something with IG.brep(i)
}

上記の数量を返す関数は、その実行時に認識されている全てのオブジェクトに対する総数を返すことに注意してください。 たとえば以下のようなスケッチは無限ループに陥ります。反復のたびにIPointオブジェクトが増加するため、 IPointオブジェクトの総数を使った条件式が永久に真となります。

for(int i=0; i < IG.pointNum(); i++){
  new IPoint(IG.point(i)); // duplicating each point
}

このような場合、IG.points()などで生成した配列を操作すべきです。


     レイヤーごとの幾何学オブジェクトの読み込み

入力されたファイルが(3dmファイルのように)レイヤー構造を持つ場合、その構造はiGeoにそのまま読み込まれます。

各レイヤーのオブジェクトを参照するにはIG.layer()にレイヤーの名前をStringオブジェクトとして渡してください。 レイヤーオブジェクトは上記で列挙されている、各種の幾何学オブジェクトを取得する関数をすべて持ちます。

IG.layer("layer name").points()はレイヤー上の全ての点を配列として返します。
IG.layer("layer name").curves()はレイヤー上の全ての曲線を配列として返します。
IG.layer("layer name").surfaces()はレイヤー上の全ての曲面を配列として返します。
IG.layer("layer name").meshes()はレイヤー上の全てのポリゴン・メッシュを配列として返します。
IG.layer("layer name").breps()はレイヤー上の全てのpolysurface(Brep)を配列として返します。

レイヤーに含まれる各種幾何学オブジェクトの総数は以下のメソッドで取得されます。

IG.layer("layer name").pointNum()はレイヤー上の点の総数を返します。
IG.layer("layer name").curveNum()はレイヤー上の曲線の総数を返します。
IG.layer("layer name").surfaceNum()はレイヤー上の曲面の総数を返します。
IG.layer("layer name").mesheNum()はレイヤー上のポリゴン・メッシュの総数を返します。
IG.layer("layer name").brepNum()はレイヤー上のpolysurface(BRep)の総数を返します。

以下のメソッドはレイヤー内のひとつひとつの幾何学オブジェクトを参照します。

IG.layer("layer name").point(int)はレイヤー上で指定の番号の点を参照します。
IG.layer("layer name").curve(int)はレイヤー上で指定の番号の曲線を参照します。
IG.layer("layer name").surface(int)はレイヤー上で指定の番号の曲面を参照します。
IG.layer("layer name").meshe(int)はレイヤー上で指定の番号のポリゴン・メッシュを参照します。
IG.layer("layer name").brep(int)はレイヤー上で指定の番号のpolysurface(BRep)を参照します。

以下は3つの曲線が異なるレイヤーにある場合の例です。 もしもレイヤーまたは曲線が存在しない場合エラーが発生します。 例に用いたファイルは以下です。

test_input_file2.3dm

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

IG.open("test_input_file2.3dm"); 

// first curve in layer 01
ICurve curveInLayer1 = IG.layer("Layer 01").curve(0); 
// first curve in layer 02
ICurve curveInLayer2 = IG.layer("Layer 02").curve(0); 
// first curve in layer 03
ICurve curveInLayer3 = IG.layer("Layer 03").curve(0);

幾何学オブジェクトを生成する際、layer()メソッドによって オブジェクトが所属するレイヤーを選択することができます。 指定のレイヤーが存在しない場合、新しいレイヤーが生成されます。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

new IPoint(0,0,0).clr(1.0,0,0).layer("layerA");
new ICurve(10,0,0, 20,20,0).clr(0,0,1.0).layer("layerB");
new ISurface(0,0,5, 5,5,5, -10,0,10).layer("layerC");

(トピック一覧へ戻る)

HOME
FOR PROCESSING
DOWNLOAD
DOCUMENTS
TUTORIALS (Java / Python)
GALLERY
SOURCE CODE(GitHub)
PRIVACY POLICY
ABOUT/CONTACT