| Home | Trees | Indices | Help | 
        
  | 
  
|---|
| 
       | 
  
  1  """ 
  2  :mod:`pyffi.formats.dae` --- COLLADA (.dae) 
  3  =========================================== 
  4   
  5  .. warning:: 
  6      
  7     This module is not yet fully implemented, and is certainly not 
  8     yet useful in its current state. 
  9   
 10  Implementation 
 11  -------------- 
 12   
 13  .. autoclass:: DaeFormat 
 14     :show-inheritance: 
 15     :members: 
 16   
 17  Regression tests 
 18  ---------------- 
 19   
 20  Create a DAE file 
 21  ^^^^^^^^^^^^^^^^^ 
 22   
 23  >>> daedata = DaeFormat.Data() 
 24  >>> print(daedata.collada) # doctest: +ELLIPSIS 
 25  <pyffi.formats.dae.Collada object at ...> 
 26   
 27  Read a DAE file 
 28  ^^^^^^^^^^^^^^^ 
 29   
 30  >>> # check and read dae file 
 31  >>> stream = open('tests/dae/cube.dae', 'rb') 
 32  >>> daedata = DaeFormat.Data() 
 33  >>> daedata.read(stream) # doctest: +ELLIPSIS 
 34  Traceback (most recent call last): 
 35      ... 
 36  NotImplementedError 
 37  >>> # get DAE file root element 
 38  >>> #print(daedata.getRootElement()) 
 39  >>> stream.close() 
 40   
 41  Parse all DAE files in a directory tree 
 42  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 43   
 44  >>> for stream, data in DaeFormat.walkData('tests/dae'): 
 45  ...     try: 
 46  ...         # the replace call makes the doctest also pass on windows 
 47  ...         print("reading %s" % stream.name.replace("\\\\", "/")) 
 48  ...         data.read(stream) 
 49  ...     except Exception: 
 50  ...         print("Warning: read failed due corrupt file, corrupt format description, or bug.") 
 51  reading tests/dae/cube.dae 
 52  Warning: read failed due corrupt file, corrupt format description, or bug. 
 53   
 54  Create a DAE file from scratch and write to file 
 55  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 56   
 57  >>> daedata = DaeFormat.Data() 
 58  >>> from tempfile import TemporaryFile 
 59  >>> stream = TemporaryFile() 
 60  >>> daedata.write(stream) # doctest: +ELLIPSIS 
 61  Traceback (most recent call last): 
 62      ... 
 63  NotImplementedError 
 64  """ 
 65   
 66  # ***** BEGIN LICENSE BLOCK ***** 
 67  # 
 68  # Copyright (c) 2007-2011, Python File Format Interface 
 69  # All rights reserved. 
 70  # 
 71  # Redistribution and use in source and binary forms, with or without 
 72  # modification, are permitted provided that the following conditions 
 73  # are met: 
 74  # 
 75  #    * Redistributions of source code must retain the above copyright 
 76  #      notice, this list of conditions and the following disclaimer. 
 77  # 
 78  #    * Redistributions in binary form must reproduce the above 
 79  #      copyright notice, this list of conditions and the following 
 80  #      disclaimer in the documentation and/or other materials provided 
 81  #      with the distribution. 
 82  # 
 83  #    * Neither the name of the Python File Format Interface 
 84  #      project nor the names of its contributors may be used to endorse 
 85  #      or promote products derived from this software without specific 
 86  #      prior written permission. 
 87  # 
 88  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 89  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 90  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 91  # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
 92  # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
 93  # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
 94  # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 95  # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
 96  # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
 97  # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
 98  # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 99  # POSSIBILITY OF SUCH DAMAGE. 
100  # 
101  # ***** END LICENSE BLOCK ***** 
102   
103  import struct 
104  import os 
105  import re 
106   
107  import pyffi.object_models.xsd 
108   
110      """This class implements the DAE format.""" 
111      xsdFileName = 'COLLADASchema.xsd' 
112      # where to look for the xsd file and in what order: 
113      # DAEXSDPATH env var, or XsdFormat module directory 
114      xsdFilePath = [os.getenv('DAEXSDPATH'), os.path.dirname(__file__)] 
115      # file name regular expression match 
116      RE_FILENAME = re.compile(r'^.*\.dae$', re.IGNORECASE) 
117      # used for comparing floats 
118      _EPSILON = 0.0001 
119   
121          """A class to contain the actual collada data.""" 
122   
124              """Initialize collada data. By default, this creates an 
125              empty collada 1.4.1 root element. 
126   
127              :param version: The collada version (for instance, 0x01040100 for 
128                  1.4.1). 
129              :type version: int 
130              """ 
131              # TODO integrate the Collada and Data elements 
132              self.collada = DaeFormat.Collada() 
133   
135              """Get the collada version, as integer (for instance, 1.4.1 would be 
136              0x01040100). 
137   
138              :return: The version, as integer. 
139              """ 
140              return 0x01040100 
141   
142          # overriding pyffi.object_models.FileFormat.Data methods 
143   
145              """Quickly checks whether the stream appears to contain 
146              collada data. Resets stream to original position. If the stream 
147              turns out to be collada, L{getVersion} is guaranteed to return 
148              the version. 
149   
150              Call this function if you simply wish to check that a file is 
151              a collada file without having to parse it completely. 
152   
153              :param stream: The file to inspect. 
154              :type stream: file 
155              :return: ``True`` if stream is collada, ``False`` otherwise. 
156              """ 
157              raise NotImplementedError 
158   
160              """Read collada data from stream. 
161   
162              :param stream: The file to read from. 
163              :type stream: file 
164              """ 
165              raise NotImplementedError 
166   
174   
175      # basic types 
176      # TODO 
177   
178      # implementation of dae-specific basic types 
179      # TODO 
180   
| Home | Trees | Indices | Help | 
        
  | 
  
|---|
| Generated by Epydoc 3.0.1 on Mon Oct 10 19:04:13 2011 | http://epydoc.sourceforge.net |