assimp/contrib/openddlparser
Andy Maloney 3c5f1578c2 Fixes two type warnings and a missing case option 2016-12-07 20:30:45 -05:00
..
code Fix warning 2016-07-24 02:33:33 -06:00
include/openddlparser Fixes two type warnings and a missing case option 2016-12-07 20:30:45 -05:00
CMakeLists.txt support of openddlparser lib without x++11. 2015-01-31 11:46:13 +01:00
CREDITS OpenDDLParser: add missing files. 2016-02-07 17:59:56 +01:00
LICENSE OpenDDLParser: add missing files. 2016-02-07 17:59:56 +01:00
README.md Closes https://github.com/assimp/assimp/issues/786: 2016-02-07 17:58:28 +01:00

README.md

The OpenDDL-Parser

The OpenDDL-Parser is a small and easy to use library for OpenDDL-file-format-parsing. OpenDDL is the shortcut for Open Data Description Language, a data-declaration language introduced by Eric Lengyel. Please check http://openddl.org/ if you want to learn more about it.

Build status

Linux build status: Build Status Current coverity check status: Coverity Scan Build Status

Get the source code

You can get the code from our git repository, which is located at GitHub. You can clone the repository with the following command:

git clone https://github.com/kimkulling/openddl-parser.git

Building the source from the GitHub-Repo

To build the library you need to install cmake first ( see http://www.cmake.org/ for more information ). Make also sure that a compiler tool-chain is installed on your machine. After installing it you can open a console and enter:

cmake CMakeLists.txt

This command will generate a build environment for your installed build enrironment ( for Visual-Studio-users the project files will be generated, for gcc-users the makefiles will be generated ). When using an IDE open the IDE and run the build. When using GNU-make type in your console:

make

and that's all.

When using Visual Studio CMake will generate you a solution for ythe library. Just build it there.

Use the library

To use the OpenDDL-parser you need to build the lib first. Now add the

/include

to your include-path and the

/lib

to your lib-folder. Link the openddl.lib to your application.

Here is a small example how to use the lib:


#include <iostream>
#include <cassert>
#include <openddlparser/OpenDDLParser.h>

USE_ODDLPARSER_NS;

int main( int argc, char *argv[] ) {
    if( argc < 3 ) {
        return 1;
    }

    char *filename( nullptr );
    if( 0 == strncmp( FileOption, argv[ 1 ], strlen( FileOption ) ) ) {
        filename = argv[ 2 ];
    }
    std::cout << "file to import: " << filename << std::endl;   
    if( nullptr == filename ) {
        std::cerr << "Invalid filename." << std::endl;
        return Error;
    }

    FILE *fileStream = fopen( filename, "r+" );
    if( NULL == filename ) {
        std::cerr << "Cannot open file " << filename << std::endl;
        return 1;
    }

    // obtain file size:
    fseek( fileStream, 0, SEEK_END );
    const size_t size( ftell( fileStream ) );   
    rewind( fileStream );   
    if( size > 0 ) {
        char *buffer = new char[ size ];
        const size_t readSize( fread( buffer, sizeof( char ), size, fileStream ) );
        assert( readSize == size );
        OpenDDLParser theParser;
        theParser.setBuffer( buffer, size );
        const bool result( theParser.parse() );
        if( !result ) {
            std::cerr << "Error while parsing file " << filename << "." << std::endl;
        }
    }
    return 0;
}

How to access the imported data

The data is organized as a tree. You can get the root-node of the tree with the following code:

OpenDDLParser theParser;
theParser.setBuffer( buffer, size );
const bool result( theParser.parse() );
if ( result ) {
    DDLNode *root = theParser.getRoot();
    DDLNode::DllNodeList childs = root->getChildNodeList();
    for ( size_t i=0; i<childs.size(); i++ ) {
        DDLNode *child = childs[ i ];
        Property *prop   = child->getProperty(); // to get properties
        std::string type = child->getType();     // to get the node type
        Value *values    = child->getValue();    // to get the data;
        
        // to loop through all values
        while ( values != ddl_nullptr ) {
            int current = values->getInt32();
            values = value->getNext();
        }
    }
}

The node instance called root contains the data.

All data lists are organized as linked lists.

Reference documentation

Please check http://kimkulling.github.io/openddl-parser/doxygen_html/index.html.

Projects using OpenDDL-Parser