Skip to content

Commit abe4869

Browse files
committed
Issueの対応策として、ファイルIO関数にInputStreamを引数とする関数を追加
NyARToolkit.jarを更新
1 parent a964f27 commit abe4869

File tree

7 files changed

+134
-33
lines changed

7 files changed

+134
-33
lines changed
6.99 KB
Binary file not shown.

lib/NyARToolkit.jar

5.14 KB
Binary file not shown.

resources/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ library.version=2
135135

136136
# The version as the user will see it.
137137

138-
library.prettyVersion=3.0.4
138+
library.prettyVersion=3.0.5
139139

140140

141141
# The min and max revision of Processing compatible with your library.

resources/library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ version = 2 # This must be parsable as an int
4545

4646
# The version as the user will see it. If blank, the version attribute will be
4747
# used here.
48-
prettyVersion = 3.0.4 # This is treated as a String
48+
prettyVersion = 3.0.5 # This is treated as a String
4949

5050
# The min and max revision of Processing compatible with your library.
5151
# Note that these fields use the revision and not the version of Processing,

src/src/jp/nyatla/nyar4psg/MultiMarker.java

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
*/
2727
package jp.nyatla.nyar4psg;
2828

29+
import java.io.InputStream;
2930
import java.util.ArrayList;
3031

3132
import jp.nyatla.nyar4psg.utils.NyARPsgBaseClass;
@@ -128,7 +129,27 @@ private MultiMarker(PApplet i_applet,SingleCameraView i_view,NyAR4PsgConfig i_co
128129
this._ms=new NyARMarkerSystem(new NyARMarkerSystemConfig(i_view._view,i_config.env_transmat_mode));
129130
this._coordinate_system=i_config._coordinate_system;
130131
}
131-
132+
/**
133+
* コンストラクタです。
134+
* スクリーンサイズ、カメラパラメータ、コンフィギュレーションを指定してインスタンスを生成します。
135+
* @param i_applet
136+
* 親となるAppletオブジェクトを指定します。
137+
* @param i_width
138+
* 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
139+
* @param i_height
140+
* 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
141+
* @param i_cparam_is
142+
* ARToolKitフォーマットのカメラパラメータファイルを読み出す{@link InputStream}です。
143+
* @param i_config
144+
* コンフィギュレーションオブジェクトを指定します。
145+
*/
146+
public MultiMarker(PApplet i_applet, int i_width,int i_height,InputStream i_cparam_is,NyAR4PsgConfig i_config)
147+
{
148+
this(i_applet,new SingleCameraView(i_applet,
149+
NyARParam.loadFromARParamFile(i_cparam_is, i_width, i_height),i_config._ps_patch_version),
150+
i_config);
151+
return;
152+
}
132153
/**
133154
* コンストラクタです。
134155
* スクリーンサイズ、カメラパラメータ、コンフィギュレーションを指定してインスタンスを生成します。
@@ -142,7 +163,6 @@ private MultiMarker(PApplet i_applet,SingleCameraView i_view,NyAR4PsgConfig i_co
142163
* 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
143164
* @param i_config
144165
* コンフィギュレーションオブジェクトを指定します。
145-
* @throws NyARException
146166
*/
147167
public MultiMarker(PApplet i_applet, int i_width,int i_height,String i_cparam_file,NyAR4PsgConfig i_config)
148168
{
@@ -335,10 +355,10 @@ public void detect(PImageSensor i_source_image)
335355
this._ms.update(i_source_image);
336356
}
337357
/**
338-
* この関数は、ARToolKitスタイルのマーカーをファイルから読みだして、登録します。
358+
* この関数は、ARToolKitスタイルのマーカーを{@link InputStream}から読みだして、登録します。
339359
* 同じパターンを複数回登録した場合には、最後に登録したものを優先して認識します。
340-
* @param i_file_name
341-
* マーカパターンファイル名を指定します
360+
* @param i_file_is
361+
* マーカパターンファイルを読み出す{@link InputStream}オブジェクト
342362
* @param i_patt_resolution
343363
* マーカパターンの解像度を指定します。
344364
* @param i_edge_percentage
@@ -353,18 +373,36 @@ public void detect(PImageSensor i_source_image)
353373
* {@link #screen2ObjectCoordSystem},{@link #pickupImage},{@link #pickupRectImage}
354374
* のid値に使います。
355375
*/
356-
public int addARMarker(String i_file_name,int i_patt_resolution,int i_edge_percentage,float i_width)
376+
public int addARMarker(InputStream i_file_is,int i_patt_resolution,int i_edge_percentage,float i_width)
357377
{
358378
//初期化済みのアイテムを生成
359379
int psid=-1;
360380
try{
361-
this._id_map.add(this._ms.addARMarker(this._ref_papplet.createInput(i_file_name), i_patt_resolution, i_edge_percentage, i_width));
381+
this._id_map.add(this._ms.addARMarker(i_file_is, i_patt_resolution, i_edge_percentage, i_width));
362382
psid=this._id_map.size()-1;
363383
}catch(Exception e){
364384
e.printStackTrace();
365385
this._ref_papplet.die("Catch an exception!");
366386
}
367387
return psid;
388+
}
389+
/**
390+
* この関数は、ARToolKitスタイルのマーカーをファイルから読みだして登録します。
391+
* ファイルは{@link PApplet#createInput(String)}関数で作成したストリームから読み出します。
392+
* @param i_file_name
393+
* {@link #addARMarker(InputStream, int, int, float)}を参照
394+
* @param i_patt_resolution
395+
* {@link #addARMarker(InputStream, int, int, float)}を参照
396+
* @param i_edge_percentage
397+
* {@link #addARMarker(InputStream, int, int, float)}を参照
398+
* @param i_width
399+
* マーカの物理サイズをmm単位で指定します。
400+
* @return
401+
* {@link #addARMarker(InputStream, int, int, float)}を参照
402+
*/
403+
public int addARMarker(String i_file_name,int i_patt_resolution,int i_edge_percentage,float i_width)
404+
{
405+
return this.addARMarker(this._ref_papplet.createInput(i_file_name), i_patt_resolution, i_edge_percentage, i_width);
368406
}
369407
/**
370408
* この関数は、ARToolKitスタイルのマーカーをファイルから読みだして登録します。

src/src/jp/nyatla/nyar4psg/MultiNft.java

Lines changed: 86 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929

3030

31+
import java.io.InputStream;
3132
import java.util.ArrayList;
3233

3334
import jp.nyatla.nyar4psg.utils.NyARPsgBaseClass;
@@ -86,6 +87,22 @@ private MultiNft(PApplet i_applet,NyARParam i_param,NyAR4PsgConfig i_config)
8687
new SingleCameraView(i_applet,i_param,i_config._ps_patch_version),
8788
i_config._coordinate_system);
8889
}
90+
/**
91+
* コンストラクタです。カメラパラメータを{@link InputStream}から読みだしてインスタンスを生成します。
92+
* @param parent
93+
* 親となるAppletオブジェクトを指定します。
94+
* @param i_width
95+
* 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
96+
* @param i_height
97+
* 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
98+
* @param i_cparam_is
99+
* ARToolKitフォーマットのカメラパラメータファイルを読み出す{@link InputStream}です。
100+
* @param i_config
101+
*/
102+
public MultiNft(PApplet parent, int i_width,int i_height,InputStream i_cparam_is,NyAR4PsgConfig i_config)
103+
{
104+
this(parent,NyARParam.loadFromARParamFile(i_cparam_is,i_width,i_height),i_config);
105+
}
89106

90107
/**
91108
* コンストラクタです。
@@ -99,27 +116,22 @@ private MultiNft(PApplet i_applet,NyARParam i_param,NyAR4PsgConfig i_config)
99116
* 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
100117
* @param i_config
101118
* コンフィギュレーションオブジェクトを指定します。
102-
* @throws NyARRuntimeException
103119
*/
104120
public MultiNft(PApplet parent, int i_width,int i_height,String i_cparam_file,NyAR4PsgConfig i_config)
105121
{
106-
this(
107-
parent,
108-
NyARParam.loadFromARParamFile(parent.createInput(i_cparam_file),
109-
i_width,i_height),i_config);
122+
this(parent,i_width,i_height,parent.createInput(i_cparam_file),i_config);
110123
}
111124
/**
112125
* コンストラクタです。
113126
* {@link MultiNft#MultiNft(PApplet, int, int, String, NyAR4PsgConfig)}のコンフィギュレーションに、{@link NyAR4PsgConfig#CONFIG_DEFAULT}を指定した物と同じです。
114127
* @param parent
115-
* {@link MultiNft#MultiNft(PApplet, int, int, String, NyAR4PsgConfig)}を参照
128+
* 親となるAppletオブジェクトを指定します
116129
* @param i_width
117130
* 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
118131
* @param i_height
119132
* 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
120133
* @param i_cparam_file
121-
* {@link MultiNft#MultiNft(PApplet, int, int, String, NyAR4PsgConfig)}を参照。
122-
* @throws NyARRuntimeException
134+
* ARToolKitフォーマットのカメラパラメータファイルの名前を指定します。
123135
*/
124136
public MultiNft(PApplet parent,int i_width,int i_height,String i_cparam_file)
125137
{
@@ -267,6 +279,49 @@ public void detect(PImageSensor i_source_image)
267279
{
268280
this._ns.update(i_source_image);
269281
}
282+
private int addNftTarget(NyARNftDataSet i_dataset)
283+
{
284+
//初期化済みのアイテムを生成
285+
int psid=-1;
286+
try{
287+
this._id_map.add(this._ns.addNftTarget(i_dataset));
288+
psid=this._id_map.size()-1;
289+
}catch(Exception e){
290+
e.printStackTrace();
291+
this._ref_papplet.die("Catch an exception!");
292+
}
293+
return psid;
294+
}
295+
296+
/**
297+
* この関数は、NFTファイルセットを{@link InputStream}から読みだして、NFTターゲットを生成して登録します。
298+
* 同じターゲットを複数個登録することはできません。
299+
* @param i_iset_is
300+
* isetファイルを読み出す{@link InputStream}
301+
* @param i_fset_is
302+
* fsetファイルを読み出す{@link InputStream}
303+
* @param i_fset3_is
304+
* fset3ファイルを読み出す{@link InputStream}
305+
* @param i_page_no
306+
* fset3のページ番号を指定します。
307+
* @param i_target_width
308+
* NFTパターンの横幅をmm単位で指定します。
309+
* @return
310+
* 0から始まるマーカーIDを返します。
311+
* この数値は、マーカを区別するためのId値です。0から始まり、{@link #addNftTarget}関数を呼ぶたびにインクリメントされます。
312+
* {@link #getMatrix},{@link #isExistTarget},{@link #addNftTarget},
313+
* {@link #screen2CoordSystem},{@link #pickupTargetImage},{@link #pickupRectTargetImage}
314+
* のid値に使います。
315+
*/
316+
public int addNftTarget(InputStream i_iset_is,InputStream i_fset_is,InputStream i_fset3_is,int i_page_no,float i_target_width)
317+
{
318+
return this.addNftTarget(
319+
NyARNftDataSet.loadFromNftFiles(
320+
i_iset_is,i_fset_is,i_fset3_is,i_page_no,
321+
Float.isNaN(i_target_width)?Double.NaN:i_target_width));
322+
}
323+
324+
270325
/**
271326
* この関数は、NFTファイルセットからNFTターゲットを生成して登録します。
272327
* 同じターゲットを複数個登録することはできません。
@@ -286,20 +341,11 @@ public void detect(PImageSensor i_source_image)
286341
*/
287342
public int addNftTarget(String i_file_name_prefix,int i_page_no,float i_target_width)
288343
{
289-
//初期化済みのアイテムを生成
290-
int psid=-1;
291-
try{
292-
this._id_map.add(this._ns.addNftTarget(NyARNftDataSet.loadFromNftFiles(
293-
this._ref_papplet.createInput(i_file_name_prefix+".iset"),
294-
this._ref_papplet.createInput(i_file_name_prefix+".fset"),
295-
this._ref_papplet.createInput(i_file_name_prefix+".fset3"),i_page_no,
296-
Float.isNaN(i_target_width)?Double.NaN:i_target_width)));
297-
psid=this._id_map.size()-1;
298-
}catch(Exception e){
299-
e.printStackTrace();
300-
this._ref_papplet.die("Catch an exception!");
301-
}
302-
return psid;
344+
return this.addNftTarget(
345+
this._ref_papplet.createInput(i_file_name_prefix+".iset"),
346+
this._ref_papplet.createInput(i_file_name_prefix+".fset"),
347+
this._ref_papplet.createInput(i_file_name_prefix+".fset3"),i_page_no,
348+
i_target_width);
303349
}
304350

305351

@@ -329,7 +375,24 @@ public int addNftTarget(String i_file_name_prefix)
329375
{
330376
return this.addNftTarget(i_file_name_prefix,Float.NaN);
331377
}
332-
378+
/**
379+
* この関数は、NFTデータセットを{@link InputStream}から読みだして、NFTターゲットを登録します。
380+
* 同じターゲットを複数個登録することはできません。
381+
* @param i_isetdataset
382+
* nftdatasetファイルを読み出す{@link InputStream}です。
383+
* @param i_target_width
384+
* NFTパターンの横幅をmm単位で指定します。
385+
* @return
386+
* 0から始まるマーカーIDを返します。
387+
* この数値は、マーカを区別するためのId値です。0から始まり、{@link #addNftTarget}関数を呼ぶたびにインクリメントされます。
388+
* {@link #getMatrix},{@link #isExistTarget},{@link #addNftTarget},
389+
* {@link #screen2CoordSystem},{@link #pickupTargetImage},{@link #pickupRectTargetImage}
390+
* のid値に使います。
391+
*/
392+
public int addNftTarget(InputStream i_isetdataset,int i_page_no,float i_target_width)
393+
{
394+
return this.addNftTarget(NyARNftDataSet.loadFromNftDataSet(i_isetdataset, i_target_width));
395+
}
333396

334397
/**
335398
* この関数は、マーカの姿勢行列を返します。

src/src/jp/nyatla/nyar4psg/utils/NyARPsgBaseClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public abstract class NyARPsgBaseClass
5959
* バージョン文字列です。
6060
* NyAR4psgのバージョン情報を示します。
6161
*/
62-
final public static String VERSION = "NyAR4psg/3.0.4;"+NyARVersion.VERSION_STRING;
62+
final public static String VERSION = "NyAR4psg/3.0.5;"+NyARVersion.VERSION_STRING;
6363
/** 参照するAppletのインスタンスです。*/
6464
final protected PApplet _ref_papplet;
6565

0 commit comments

Comments
 (0)