Difference between revisions of "XB PointStream/custom parsers"
(Created page with ' ===Parser Interface=== There will be cases in which users have their own file format which they want to render with XB PointStream (for example, .ARA or .XML). We need to give …') |
(→Parser Interface) |
||
Line 2: | Line 2: | ||
===Parser Interface=== | ===Parser Interface=== | ||
− | + | Currently XBPS only supports reading .ASC file types. If you require the library to render other files, you will need to write a custom parser as register it with the library. This should not be difficult, there are only a few things your parser must implement. | |
− | |||
− | |||
− | |||
− | + | We have already created a demonstration of this. You can find it [http://# here]. | |
− | |||
− | |||
− | + | Here is a skeleton of a parser you could take and implement: | |
− | |||
<pre> | <pre> | ||
− | /* | + | var Your_Parser_Name = (function() { |
− | + | /** | |
− | + | XBPS will create an instance of your parser and pass in an object with three | |
− | + | named properties: | |
− | + | ||
− | |||
− | |||
− | |||
start - must occur exactly once. Has one argument, the parser itself | start - must occur exactly once. Has one argument, the parser itself | ||
end - must occur exactly once. Has one argument, the parser itself | end - must occur exactly once. Has one argument, the parser itself | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Everytime your parser calls the parse function, it must send in an object with | |
+ | named arrays. In the following example, vertexArray is a Float32Array which contain | ||
+ | the vertices which have already been read and parsed. | ||
− | + | var attributes = {}; | |
− | + | attributes["ps_Vertex"] = vertexArray; | |
+ | attributes["ps_Color"] = colorsArray; | ||
− | + | parse - may occur one or many times. Has two arguments, the parser itself and a | |
− | */ | + | |
− | + | Your parser is responsible for calling these functions at the appropriate times. | |
− | + | */ | |
− | /* | + | function Your_Parser_Name(config) { |
− | + | ||
− | + | /*Returns the version of this parser.*/ | |
− | + | this.__defineGetter__("version", function(){ | |
− | */ | + | return /*!!*/; |
− | + | }); | |
− | + | ||
− | /* | + | /*Get the number of parsed points so far.*/ |
− | + | this.__defineGetter__("numParsedPoints", function(){ | |
− | + | return /*!!*/; | |
− | + | }); | |
− | + | ||
− | */ | + | /*Get the total number of points in the point cloud.*/ |
− | + | this.__defineGetter__("numTotalPoints", function(){ | |
− | + | return /*!!*/; | |
− | /* | + | }); |
− | + | ||
− | + | /*Returns the progress of downloading the point cloud between zero and one.*/ | |
− | + | this.__defineGetter__("progress", function(){ | |
− | */ | + | return /*!!*/; |
− | + | }); | |
+ | |||
+ | /*Returns the file size of the resource in bytes.*/ | ||
+ | this.__defineGetter__("fileSize", function(){ | ||
+ | return /*!!*/; | ||
+ | }); | ||
+ | |||
+ | /** | ||
+ | @param path Path to the resource | ||
+ | */ | ||
+ | this.load = function(path){ | ||
+ | /*!!*/ | ||
+ | }; | ||
+ | } | ||
+ | return Your_Parser_Name; | ||
+ | }()); | ||
+ | </pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<pre> | <pre> | ||
/* | /* | ||
− | The following example demonstrates how | + | The following example demonstrates how XBPS might use |
a particular parser. | a particular parser. | ||
*/ | */ | ||
Line 105: | Line 94: | ||
// create a hypothetical parser and set the callbacks | // create a hypothetical parser and set the callbacks | ||
− | parser = new | + | parser = new Your_Parser_Name({ start: startCallback, |
− | + | parse: parseCallback, | |
− | + | end: finishCallback}); | |
// load some resource | // load some resource | ||
parser.load("pointcloud.xyz"); | parser.load("pointcloud.xyz"); | ||
</pre> | </pre> |
Revision as of 18:37, 14 February 2011
Parser Interface
Currently XBPS only supports reading .ASC file types. If you require the library to render other files, you will need to write a custom parser as register it with the library. This should not be difficult, there are only a few things your parser must implement.
We have already created a demonstration of this. You can find it here.
Here is a skeleton of a parser you could take and implement:
var Your_Parser_Name = (function() { /** XBPS will create an instance of your parser and pass in an object with three named properties: start - must occur exactly once. Has one argument, the parser itself end - must occur exactly once. Has one argument, the parser itself Everytime your parser calls the parse function, it must send in an object with named arrays. In the following example, vertexArray is a Float32Array which contain the vertices which have already been read and parsed. var attributes = {}; attributes["ps_Vertex"] = vertexArray; attributes["ps_Color"] = colorsArray; parse - may occur one or many times. Has two arguments, the parser itself and a Your parser is responsible for calling these functions at the appropriate times. */ function Your_Parser_Name(config) { /*Returns the version of this parser.*/ this.__defineGetter__("version", function(){ return /*!!*/; }); /*Get the number of parsed points so far.*/ this.__defineGetter__("numParsedPoints", function(){ return /*!!*/; }); /*Get the total number of points in the point cloud.*/ this.__defineGetter__("numTotalPoints", function(){ return /*!!*/; }); /*Returns the progress of downloading the point cloud between zero and one.*/ this.__defineGetter__("progress", function(){ return /*!!*/; }); /*Returns the file size of the resource in bytes.*/ this.__defineGetter__("fileSize", function(){ return /*!!*/; }); /** @param path Path to the resource */ this.load = function(path){ /*!!*/ }; } return Your_Parser_Name; }());
/* The following example demonstrates how XBPS might use a particular parser. */ var parser; function startCallback(parser){ // started } function parseCallback(parser, attributes){ parser.version; parser.numParsedPoints; parser.numTotalPoints; parser.progress; parser.fileSize; } function finishCallback(parser){ // finished } // create a hypothetical parser and set the callbacks parser = new Your_Parser_Name({ start: startCallback, parse: parseCallback, end: finishCallback}); // load some resource parser.load("pointcloud.xyz");