vrshoot

annotate libs/assimp/BlenderModifier.h @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +0200
parents
children
rev   line source
nuclear@0 1 /*
nuclear@0 2 Open Asset Import Library (assimp)
nuclear@0 3 ----------------------------------------------------------------------
nuclear@0 4
nuclear@0 5 Copyright (c) 2006-2012, assimp team
nuclear@0 6 All rights reserved.
nuclear@0 7
nuclear@0 8 Redistribution and use of this software in source and binary forms,
nuclear@0 9 with or without modification, are permitted provided that the
nuclear@0 10 following conditions are met:
nuclear@0 11
nuclear@0 12 * Redistributions of source code must retain the above
nuclear@0 13 copyright notice, this list of conditions and the
nuclear@0 14 following disclaimer.
nuclear@0 15
nuclear@0 16 * Redistributions in binary form must reproduce the above
nuclear@0 17 copyright notice, this list of conditions and the
nuclear@0 18 following disclaimer in the documentation and/or other
nuclear@0 19 materials provided with the distribution.
nuclear@0 20
nuclear@0 21 * Neither the name of the assimp team, nor the names of its
nuclear@0 22 contributors may be used to endorse or promote products
nuclear@0 23 derived from this software without specific prior
nuclear@0 24 written permission of the assimp team.
nuclear@0 25
nuclear@0 26 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
nuclear@0 27 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
nuclear@0 28 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
nuclear@0 29 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
nuclear@0 30 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
nuclear@0 31 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
nuclear@0 32 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
nuclear@0 33 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
nuclear@0 34 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
nuclear@0 35 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
nuclear@0 36 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
nuclear@0 37
nuclear@0 38 ----------------------------------------------------------------------
nuclear@0 39 */
nuclear@0 40
nuclear@0 41 /** @file BlenderModifier.h
nuclear@0 42 * @brief Declare dedicated helper classes to simulate some blender modifiers (i.e. mirror)
nuclear@0 43 */
nuclear@0 44 #ifndef INCLUDED_AI_BLEND_MODIFIER_H
nuclear@0 45 #define INCLUDED_AI_BLEND_MODIFIER_H
nuclear@0 46
nuclear@0 47 #include "BlenderIntermediate.h"
nuclear@0 48 #include "TinyFormatter.h"
nuclear@0 49 namespace Assimp {
nuclear@0 50 namespace Blender {
nuclear@0 51
nuclear@0 52 // -------------------------------------------------------------------------------------------
nuclear@0 53 /** Dummy base class for all blender modifiers. Modifiers are reused between imports, so
nuclear@0 54 * they should be stateless and not try to cache model data. */
nuclear@0 55 // -------------------------------------------------------------------------------------------
nuclear@0 56 class BlenderModifier
nuclear@0 57 {
nuclear@0 58 public:
nuclear@0 59
nuclear@0 60 virtual ~BlenderModifier() {
nuclear@0 61 }
nuclear@0 62
nuclear@0 63 public:
nuclear@0 64
nuclear@0 65 // --------------------
nuclear@0 66 /** Check if *this* modifier is active, given a ModifierData& block.*/
nuclear@0 67 virtual bool IsActive( const ModifierData& /*modin*/) {
nuclear@0 68 return false;
nuclear@0 69 }
nuclear@0 70
nuclear@0 71 // --------------------
nuclear@0 72 /** Apply the modifier to a given output node. The original data used
nuclear@0 73 * to construct the node is given as well. Not called unless IsActive()
nuclear@0 74 * was called and gave positive response. */
nuclear@0 75 virtual void DoIt(aiNode& /*out*/,
nuclear@0 76 ConversionData& /*conv_data*/,
nuclear@0 77 const ElemBase& orig_modifier,
nuclear@0 78 const Scene& /*in*/,
nuclear@0 79 const Object& /*orig_object*/
nuclear@0 80 ) {
nuclear@0 81 DefaultLogger::get()->warn((Formatter::format("This modifier is not supported, skipping: "),orig_modifier.dna_type));
nuclear@0 82 return;
nuclear@0 83 }
nuclear@0 84 };
nuclear@0 85
nuclear@0 86
nuclear@0 87 // -------------------------------------------------------------------------------------------
nuclear@0 88 /** Manage all known modifiers and instance and apply them if necessary */
nuclear@0 89 // -------------------------------------------------------------------------------------------
nuclear@0 90 class BlenderModifierShowcase
nuclear@0 91 {
nuclear@0 92 public:
nuclear@0 93
nuclear@0 94 // --------------------
nuclear@0 95 /** Apply all requested modifiers provided we support them. */
nuclear@0 96 void ApplyModifiers(aiNode& out,
nuclear@0 97 ConversionData& conv_data,
nuclear@0 98 const Scene& in,
nuclear@0 99 const Object& orig_object
nuclear@0 100 );
nuclear@0 101
nuclear@0 102 private:
nuclear@0 103
nuclear@0 104 TempArray< std::vector,BlenderModifier > cached_modifiers;
nuclear@0 105 };
nuclear@0 106
nuclear@0 107
nuclear@0 108
nuclear@0 109
nuclear@0 110
nuclear@0 111 // MODIFIERS
nuclear@0 112
nuclear@0 113
nuclear@0 114
nuclear@0 115 // -------------------------------------------------------------------------------------------
nuclear@0 116 /** Mirror modifier. Status: implemented. */
nuclear@0 117 // -------------------------------------------------------------------------------------------
nuclear@0 118 class BlenderModifier_Mirror : public BlenderModifier
nuclear@0 119 {
nuclear@0 120 public:
nuclear@0 121
nuclear@0 122 // --------------------
nuclear@0 123 virtual bool IsActive( const ModifierData& modin);
nuclear@0 124
nuclear@0 125 // --------------------
nuclear@0 126 virtual void DoIt(aiNode& out,
nuclear@0 127 ConversionData& conv_data,
nuclear@0 128 const ElemBase& orig_modifier,
nuclear@0 129 const Scene& in,
nuclear@0 130 const Object& orig_object
nuclear@0 131 ) ;
nuclear@0 132 };
nuclear@0 133
nuclear@0 134 // -------------------------------------------------------------------------------------------
nuclear@0 135 /** Subdivision modifier. Status: dummy. */
nuclear@0 136 // -------------------------------------------------------------------------------------------
nuclear@0 137 class BlenderModifier_Subdivision : public BlenderModifier
nuclear@0 138 {
nuclear@0 139 public:
nuclear@0 140
nuclear@0 141 // --------------------
nuclear@0 142 virtual bool IsActive( const ModifierData& modin);
nuclear@0 143
nuclear@0 144 // --------------------
nuclear@0 145 virtual void DoIt(aiNode& out,
nuclear@0 146 ConversionData& conv_data,
nuclear@0 147 const ElemBase& orig_modifier,
nuclear@0 148 const Scene& in,
nuclear@0 149 const Object& orig_object
nuclear@0 150 ) ;
nuclear@0 151 };
nuclear@0 152
nuclear@0 153
nuclear@0 154 }}
nuclear@0 155 #endif // !INCLUDED_AI_BLEND_MODIFIER_H