DATAKIT API  V2025.1
Collada Write Sample
//start_of_maincolladawrite
int ColladaWriteSample( const Dtk_string &inResultDirectory )
{
int status;
Dtk_MeshPtr cubeMesh = NULL;
Dtk_MeshPtr cubeMeshVC = NULL;
Dtk_MeshPtr cylinderMesh = NULL;
Dtk_MeshPtr wireMesh = NULL;
Dtk_ModelDisplayPtr modelDisplay = NULL;
Dtk_RenderInfosPtr renderInfos = NULL;
Dtk_string outputFileName, outputDirectory;
Dtk_string nodeName;
Dtk_tab<Dtk_ID> tabNodesView1;
Dtk_tab<Dtk_ID> tabNodesView2;
Dtk_tab<Dtk_ID> tabNodesView3;
Dtk_tab< Dtk_tab <Dtk_ID> > tabNodesViews;
Dtk_ID nodeID;
Dtk_bool reinstanciate = DTK_TRUE;
cout << endl << "----------------------------------------------" << endl;
cout << "Collada Write start" << endl;
// Choosing output directory and file name
outputDirectory = inResultDirectory + L"dtk/Collada/";
outputDirectory.FixPathSeparator();
outputDirectory.mkdir();
outputFileName = outputDirectory + L"sample.dae";
// Cube Sample
// Cylinder Sample
cylinderMesh = sampleWriter::CreateMeshCylinder( 30 );
//RenderInfos Sample
// First we initialize writing
options.ConvertRenderInfos = 1;
status = Colladaw::InitWrite( outputFileName, Dtk_string( "testcolladaw.log" ), options );
if( status != 0 )
{
cout << "error : " << dtkTypeError( status ).c_str() << endl;
return status;
}
// Lets write a small assembly composed by one cube and one cylinder
// let a matrix moving the cube on the left
Dtk_transfo cubetransfo;
cubetransfo.addTranslate( Dtk_dir( -10, 0, 0 ) );
// let a matrix moving the cylinder
Dtk_transfo cyltransfo;
cyltransfo.addTranslate( Dtk_dir( 10, 0, 0 ) );
// let a matrix moving the first instance
Dtk_transfo transfo;
transfo.addTranslate( Dtk_dir( 100, 100, 100 ) );
transfo.setXdir( 0.0, 1.0, 0.0 );
transfo.setYdir( 0.0, 0.0, 1.0 );
transfo.setZdir( 1.0, 0.0, 0.0 );
// Rootnode creation
if( err == dtkNoError )
{
nodeName = "RootNode";
err = Colladaw::InitNode( nodeName );
}
// Facetted data node creation
if( err == dtkNoError )
{
nodeName = "Facetted data";
info = Dtk_Info::create();
err = Colladaw::InitNode( nodeName, Dtk_transfo(), info, nodeID );
}
// from this node, create a Child for the cube, giving its matrix, and naming it "Cube"
if( err == dtkNoError )
{
nodeName = "Cube";
err = Colladaw::InitNode( nodeName, cubetransfo );
}
cubeMesh->info() = Dtk_Info::create();
cubeMesh->info()->AddRenderInfos( renderInfos );
// Write the mesh cube
if( err == dtkNoError )
// Close the mesh cube node
if( err == dtkNoError )
// From root node again, create a Child for the cylinder, giving its matrix, and naming it "Cylinder"
if( err == dtkNoError )
{
nodeName = "Cylinder";
err = Colladaw::InitNode( nodeName, cyltransfo );
}
// Write the mesh cylinder
if( err == dtkNoError )
// Close the mesh cylinder
if( err == dtkNoError )
// Close the facetted data node
if( err == dtkNoError )
if( reinstanciate )
{
// "Facetted data (Reinstanciated)" creation
if( err == dtkNoError )
{
nodeName = "Facetted data (Reinstanciated)";
err = Colladaw::InitNode( nodeName, transfo );
}
// Reinstanciating prototype nodeID
if( err == dtkNoError )
// Closing node
if( err == dtkNoError )
}
// Rootnode closing : VERY IMPORTANT, you must close all nodes that were opened.
if( err == dtkNoError )
// And free memory allocated for writing
if( err == dtkNoError )
cout << "=> " << outputFileName.c_str() << endl << "Collada Write end" << endl;
return err;
}
//end_of_maincolladawrite
Dtk_ID
uint32_t Dtk_ID
Definition: define.h:689
Dtk_transfo
This is the Transformation dedicated class.
Definition: dtk_transfo.hpp:19
sampleWriter::CreateMeshCube
Dtk_MeshPtr CreateMeshCube()
Mesh Cube sample.
Definition: testcreatemesh.cpp:207
Colladaw::EndNode
DtkErrorStatus EndNode()
End the node.
Dtk_transfo::setZdir
void setZdir(const Dtk_dir &Z)
Set a new Z vector.
Colladaw::InitWrite
DtkErrorStatus InitWrite(const Dtk_string &inOutputFile, const Dtk_string &inLogFile, WriteOptions &inOptions)
Initialize the Collada Writer
DTK_TRUE
#define DTK_TRUE
Definition: define.h:727
Dtk_string
This is a high level string class.
Definition: dtk_string.hpp:58
Dtk_bool
char Dtk_bool
Definition: define.h:725
Colladaw::EndWrite
DtkErrorStatus EndWrite()
Creation of the output file and free the Collada Writer
Dtk_transfo::setXdir
void setXdir(const Dtk_dir &X)
Set a new X vector.
sampleWriter::FillFacesColors
void FillFacesColors(Dtk_MeshPtr &inoutCubeMesh)
Filling mesh faces with colors.
Definition: testcreatemesh.cpp:244
Colladaw::WriteOptions
This class provides several options to tune Collada Writer. It must be provided to Colladaw::InitWrit...
Definition: colladaw.hpp:17
Colladaw::WriteOptions::ConvertRenderInfos
Dtk_bool ConvertRenderInfos
Definition: colladaw.hpp:27
Dtk_SmartPtr< Dtk_Entity >::DtkDynamicCast
static Dtk_SmartPtr< Dtk_Entity > DtkDynamicCast(const Dtk_SmartPtr< T2 > &p)
Definition: util_ptr_dtk.hpp:101
Dtk_ErrorStatus
Dtk_ErrorStatus
Definition: error_dtk.hpp:6
sampleWriter::CreateCubeRenderInfos
Dtk_RenderInfosPtr CreateCubeRenderInfos()
Definition: testcreatemesh.cpp:498
Dtk_SmartPtr
Definition: util_ptr_dtk.hpp:37
dtkTypeError
Dtk_string dtkTypeError(Dtk_Int32 errNumero)
Dtk_string::c_str
const char * c_str() const
Retrieve the ASCII conversion string.
sampleWriter::CreateMeshCylinder
Dtk_MeshPtr CreateMeshCylinder(int nbpoints)
Mesh Cylinder sample.
Definition: testcreatemesh.cpp:337
Dtk_transfo::setYdir
void setYdir(const Dtk_dir &Y)
Set a new Y vector.
Dtk_string::mkdir
int mkdir() const
File Utility : Create a Directory.
Dtk_string::FixPathSeparator
void FixPathSeparator()
File Utility : Fixes path separator consistency. It lets you replace the '\' or '/' by the OS needed ...
ColladaWriteSample
int ColladaWriteSample(const Dtk_string &inResultDirectory)
Definition: testlibcolladawrite.cpp:16
Colladaw::ReinstanciatePrototype
DtkErrorStatus ReinstanciatePrototype(Dtk_ID inID)
Reinstanciate a node.
Dtk_tab
This is a high level array class.
Definition: util_stl_dtk.hpp:85
Dtk_transfo::addTranslate
void addTranslate(const Dtk_dir &V)
Translate the Dtk_transfo.
Colladaw::InitNode
DtkErrorStatus InitNode(Dtk_string &inNodeName, const Dtk_transfo &inTransfo, Dtk_InfoPtr &inInfo, Dtk_ID &outID)
Initialize a node.
dtkNoError
@ dtkNoError
Definition: error_dtk.hpp:140
Dtk_Info::create
static Dtk_SmartPtr< Dtk_Info > create()
Colladaw::WriteEntity
Dtk_ErrorStatus WriteEntity(const Dtk_EntityPtr &inEntity)
Write the entity provided in parameter in a node.
Dtk_dir
This is a mathematical direction class.
Definition: dtk_dir.hpp:15