1 //-***************************************************************************** 2 // 3 // Copyright (c) 2009-2011, 4 // Sony Pictures Imageworks, Inc. and 5 // Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd. 6 // 7 // All rights reserved. 8 // 9 // Redistribution and use in source and binary forms, with or without 10 // modification, are permitted provided that the following conditions are 11 // met: 12 // * Redistributions of source code must retain the above copyright 13 // notice, this list of conditions and the following disclaimer. 14 // * Redistributions in binary form must reproduce the above 15 // copyright notice, this list of conditions and the following disclaimer 16 // in the documentation and/or other materials provided with the 17 // distribution. 18 // * Neither the name of Sony Pictures Imageworks, nor 19 // Industrial Light & Magic nor the names of their contributors may be used 20 // to endorse or promote products derived from this software without specific 21 // prior written permission. 22 // 23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 26 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 27 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 28 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 29 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 33 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 // 35 //-***************************************************************************** 36 37 #ifndef Alembic_AbcGeom_Visibility_h 38 #define Alembic_AbcGeom_Visibility_h 39 40 #include <string.h> 41 #include <Alembic/Util/Export.h> 42 #include <Alembic/AbcGeom/Foundation.h> 43 #include <Alembic/Abc/OSchemaObject.h> 44 45 46 47 namespace Alembic { 48 namespace AbcGeom { 49 namespace ALEMBIC_VERSION_NS { 50 51 //! \brief Values for the visibility property 52 //! The top-compound object of AbcGeom Schema objects can 53 //! include an optional visibility property. 54 //! The value can express 55 //! - isDeferrred - the property is present but whether the object 56 //! should be visible is determined by parents of the 57 //! object. 58 //! - isVisible - The object should be visible. 59 //! - isHidden - The object is explicitly hidden. 60 enum ObjectVisibility 61 { 62 //! When evaluating whether this object is visible we will 63 //! walk up the hierarchy of objects looking for an object that 64 //! has the visibility property and is either explcitly 65 //! isHidden or is explicitly isVisible. If we reach the top of 66 //! the archive, then the object is visible. 67 kVisibilityDeferred = -1, 68 69 //! The object has been explicitly made hidden. 70 kVisibilityHidden = 0, 71 72 //! The object has been explicitly made visible. 73 kVisibilityVisible = 1, 74 }; 75 76 //! The name used for the CharProperty (Int8) that we use to 77 //! store visibility. 78 static ALEMBIC_EXPORT_CONST std::string kVisibilityPropertyName = "visible"; 79 80 typedef Abc::ICharProperty IVisibilityProperty; 81 typedef Abc::OCharProperty OVisibilityProperty; 82 83 84 // For Writer code: 85 86 //! Creates the visibility property for the indicated object. As a convention, 87 //! if the visibility of your object is animated, for frames that 88 //! the object is visible you can write kVisibilityDeferred. 89 ALEMBIC_EXPORT OVisibilityProperty 90 CreateVisibilityProperty( OObject & iObject, 91 uint32_t iTimeSamplingID ); 92 93 //! Creates the visibility property for the indicated object. As a convention, 94 //! if the visibility of your object is animated, for frames that 95 //! the object is visible you can write kVisibilityDeferred. 96 ALEMBIC_EXPORT OVisibilityProperty 97 CreateVisibilityProperty( OObject & iObject, 98 AbcA::TimeSamplingPtr iTimeSampling ); 99 100 // For Reader code: 101 102 //! If the object doesn't have a visibility property this will 103 //! return a property that evaluates to false (aka a reset property) 104 ALEMBIC_EXPORT IVisibilityProperty 105 GetVisibilityProperty( IObject & schemaObject ); 106 107 //! If the object doesn't have a visibility property this will 108 //! return kVisibilityDeferred. This function is provided as 109 //! a convenience. It's equally valid for you to call 110 //! GetVisibilityProperty () and access the property's values 111 //! directly. 112 ALEMBIC_EXPORT ObjectVisibility 113 GetVisibility( IObject & schemaObject, 114 const Abc::ISampleSelector &iSS = 115 Abc::ISampleSelector () ); 116 117 //! Returns true if the passed in object explicitly specifies 118 //! a visibility of kVisibilityHidden, or if it doesn't have 119 //! a visibility property or has a value of Deferred this 120 //! function will traverse upward through the object hierarchy 121 //! until finding a object that does. If the top is reached, true 122 //! will be returned. 123 ALEMBIC_EXPORT bool 124 IsAncestorInvisible( IObject schemaObject, 125 const Abc::ISampleSelector &iSS = 126 Abc::ISampleSelector () ); 127 128 } // End namespace ALEMBIC_VERSION_NS 129 130 using namespace ALEMBIC_VERSION_NS; 131 132 } // End namespace AbcGeom 133 } // End namespace Alembic 134 135 #endif 136