| 
									
										
										
										
											2011-02-23 10:52:22 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2010-10-06 13:21:08 +00:00
										 |  |  |  * ***** BEGIN GPL LICENSE BLOCK ***** | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  |  * modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  |  * as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  |  * of the License, or (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with this program; if not, write to the Free Software Foundation, | 
					
						
							|  |  |  |  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Contributor(s): Chingiz Dyussenov, Arystanbek Dyussenov, Jan Diederich, Tod Liverseed, | 
					
						
							|  |  |  |  *                 Nathan Letwory | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ***** END GPL LICENSE BLOCK ***** | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-27 20:30:35 +00:00
										 |  |  | /** \file blender/collada/MaterialExporter.cpp
 | 
					
						
							|  |  |  |  *  \ingroup collada | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 13:21:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "MaterialExporter.h"
 | 
					
						
							| 
									
										
										
										
											2010-10-24 07:55:56 +00:00
										 |  |  | #include "COLLADABUUtils.h"
 | 
					
						
							| 
									
										
										
										
											2010-10-06 13:21:08 +00:00
										 |  |  | #include "collada_internal.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-20 16:43:48 +00:00
										 |  |  | MaterialsExporter::MaterialsExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings) : COLLADASW::LibraryMaterials(sw), export_settings(export_settings) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	/* pass */ | 
					
						
							| 
									
										
										
										
											2012-06-12 22:05:33 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-10-06 13:21:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-07 18:23:30 +00:00
										 |  |  | void MaterialsExporter::exportMaterials(Scene *sce) | 
					
						
							| 
									
										
										
										
											2010-10-06 13:21:08 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-03-24 07:52:14 +00:00
										 |  |  | 	if (hasMaterials(sce)) { | 
					
						
							| 
									
										
										
										
											2011-07-28 00:08:03 +00:00
										 |  |  | 		openLibrary(); | 
					
						
							| 
									
										
										
										
											2010-10-06 13:21:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-28 00:08:03 +00:00
										 |  |  | 		MaterialFunctor mf; | 
					
						
							| 
									
										
										
										
											2012-06-12 21:25:29 +00:00
										 |  |  | 		mf.forEachMaterialInExportSet<MaterialsExporter>(sce, *this, this->export_settings->export_set); | 
					
						
							| 
									
										
										
										
											2010-10-06 13:21:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-28 00:08:03 +00:00
										 |  |  | 		closeLibrary(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool MaterialsExporter::hasMaterials(Scene *sce) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-06-12 23:19:34 +00:00
										 |  |  | 	LinkNode *node; | 
					
						
							| 
									
										
										
										
											2012-06-17 09:58:26 +00:00
										 |  |  | 	for (node=this->export_settings->export_set; node; node = node->next) { | 
					
						
							| 
									
										
										
										
											2012-06-12 23:19:34 +00:00
										 |  |  | 		Object *ob = (Object *)node->link; | 
					
						
							| 
									
										
										
										
											2011-07-28 00:08:03 +00:00
										 |  |  | 		int a; | 
					
						
							| 
									
										
										
										
											2012-04-28 06:31:57 +00:00
										 |  |  | 		for (a = 0; a < ob->totcol; a++) { | 
					
						
							| 
									
										
										
										
											2012-06-12 22:05:33 +00:00
										 |  |  | 			Material *ma = give_current_material(ob, a + 1); | 
					
						
							| 
									
										
										
										
											2011-07-28 00:08:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			// no material, but check all of the slots
 | 
					
						
							|  |  |  | 			if (!ma) continue; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			return true; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return false; | 
					
						
							| 
									
										
										
										
											2010-10-06 13:21:08 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MaterialsExporter::operator()(Material *ma, Object *ob) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	std::string name(id_name(ma)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-27 21:26:06 +00:00
										 |  |  | 	openMaterial(get_material_id(ma), translate_id(name)); | 
					
						
							| 
									
										
										
										
											2010-10-06 13:21:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	std::string efid = translate_id(name) + "-effect"; | 
					
						
							|  |  |  | 	addInstanceEffect(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, efid)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	closeMaterial(); | 
					
						
							|  |  |  | } |