void SMDNodeList::AddNode ( XSI::CString in_szName, XSI::CString  in_szParentName,  XSI::Kinematics	l_pHierarchyCompensation, XSI::Kinematics l_pHierarchyCompensation2)
{
	char *pString1 = new char [ in_szName.Length() + 1 ];
	char *pString2 = new char [ in_szParentName.Length() + 1 ];

	W2AHelper ( pString1, in_szName.GetWideString() );
	W2AHelper ( pString2, in_szParentName.GetWideString() );

	AddNode ( pString1, pString2, l_pHierarchyCompensation, l_pHierarchyCompensation2);


	delete [] pString1;
	delete [] pString2;


}
bool SMDImporter::Import ( char *in_szFilename )
{

	FILE *f = fopen ( in_szFilename, "rb" );

	if ( !f )
	{
		LPWSTR l_wszModelName;
		DSA2W(&l_wszModelName,in_szFilename);

		XSI::CString cstr = L"SMDImport: Cannot open the file ";
		cstr += l_wszModelName;

		XSILogMessage ( (unsigned short*)cstr.GetWideString(), XSI::siErrorMsg );
		return false;
	}
	
	memset ( m_szActionName, 0, 1024 );
	_splitpath ( in_szFilename, NULL, NULL, m_szActionName, NULL );

	char drive[1024];
	char dirc[1024];

	memset ( m_szDirectory, 0, 1024 );

	if ( strlen(___gTexturePathOverride))
	{
		sprintf ( ___gTexturePathOverride, "%s\\", ___gTexturePathOverride );
		_splitpath ( ___gTexturePathOverride, drive, dirc, NULL, NULL );
		sprintf ( m_szDirectory, "%s\\%s\\", drive, dirc );
	} else {
		_splitpath ( in_szFilename, drive, dirc, NULL, NULL );
		sprintf ( m_szDirectory, "%s\\%s\\", drive, dirc );
	}

	
	bool Success = Parse ( f );

	fclose (f);

	if ( !Success )
	{
		return Success;
	}

	DetectModel();

	CreateHierarchy();

	CreateGeometry();

	WeightGeometry();

	CreateShapeClips();

	CreateAnimationSource();

	return true;
}
void SMDNodeList::AddNode ( XSI::CString in_szName, int in_iParentID, XSI::X3DObject in_pModel, XSI::Kinematics	in_pHierarchyCompensation ,XSI::Kinematics	in_pHierarchyCompensation2 )
{

	char *pSzString = new char [ in_szName.Length() + 1 ];
	W2AHelper ( pSzString, in_szName.GetWideString() );
	
	AddNodeS ( pSzString, in_iParentID, in_pModel, in_pHierarchyCompensation ,in_pHierarchyCompensation2 );

	delete [] pSzString;

}
void DependencyExporter::exportUpdateCanvasSize(XSI::CString outputFile, const char *data, unsigned int dataLength){
	std::string htmlData(data,dataLength);

	htmlData = replace(htmlData, "width=\"1000\"", replace("width=\"1000\"","1000", toString(this->width)));
	htmlData = replace(htmlData, "height=\"500\"", replace("height=\"500\"","500", toString(this->height)));
	data = htmlData.c_str();
	dataLength = htmlData.length();
	std::ofstream myFile (outputFile.GetWideString(), std::ios::out | std::ios::binary);
    myFile.write (data, dataLength);
	myFile.close();
}
void DependencyExporter::exportFile(XSI::CString directory, std::string fileName, const char *data, unsigned int dataLength){
	XSI::CString outputFile = directory + fileName.c_str();

	bool updateCanvasSize = fileName.compare("index.html")==0;
	if (updateCanvasSize){
		exportUpdateCanvasSize(outputFile, data, dataLength);
		return;
	}

    std::ofstream myFile (outputFile.GetWideString(), std::ios::out | std::ios::binary);
    myFile.write (data, dataLength);
	myFile.close();
}