Browse Source

Merge pull request #2284 from assimp/kimkulling-dev

Kimkulling dev
Kim Kulling 6 năm trước cách đây
mục cha
commit
95e7086b9b

+ 6 - 9
port/PyAssimp/pyassimp/core.py

@@ -29,7 +29,6 @@ from . import structs
 from . import helper
 from . import helper
 from . import postprocess
 from . import postprocess
 from .errors import AssimpError
 from .errors import AssimpError
-from .formats import available_formats
 
 
 class AssimpLib(object):
 class AssimpLib(object):
     """
     """
@@ -300,14 +299,12 @@ def load(filename,
     '''
     '''
 
 
     if hasattr(filename, 'read'):
     if hasattr(filename, 'read'):
-        '''
-        This is the case where a file object has been passed to load.
-        It is calling the following function:
-        const aiScene* aiImportFileFromMemory(const char* pBuffer,
-                                              unsigned int pLength,
-                                              unsigned int pFlags,
-                                              const char* pHint)
-        '''
+        # This is the case where a file object has been passed to load.
+        # It is calling the following function:
+        # const aiScene* aiImportFileFromMemory(const char* pBuffer,
+        #                                      unsigned int pLength,
+        #                                      unsigned int pFlags,
+        #                                      const char* pHint)
         if file_type == None:
         if file_type == None:
             raise AssimpError('File type must be specified when passing file objects!')
             raise AssimpError('File type must be specified when passing file objects!')
         data  = filename.read()
         data  = filename.read()

+ 16 - 20
port/PyAssimp/scripts/3d_viewer_py3.py

@@ -1177,6 +1177,22 @@ class PyAssimp3DViewer:
         return True
         return True
 
 
     def controls_3d(self, dx, dy, zooming_one_shot=False):
     def controls_3d(self, dx, dy, zooming_one_shot=False):
+        """ Orbiting the camera is implemented the following way:
+
+        - the rotation is split into a rotation around the *world* Z axis
+          (controlled by the horizontal mouse motion along X) and a
+          rotation around the *X* axis of the camera (pitch) *shifted to
+          the focal origin* (the world origin for now). This is controlled
+          by the vertical motion of the mouse (Y axis).
+        - as a result, the resulting transformation of the camera in the
+          world frame C' is:
+            C' = (T · Rx · T⁻¹ · (Rz · C)⁻¹)⁻¹
+          where:
+          - C is the original camera transformation in the world frame,
+          - Rz is the rotation along the Z axis (in the world frame)
+          - T is the translation camera -> world (ie, the inverse of the
+            translation part of C
+          - Rx is the rotation around X in the (translated) camera frame """
 
 
         CAMERA_TRANSLATION_FACTOR = 0.01
         CAMERA_TRANSLATION_FACTOR = 0.01
         CAMERA_ROTATION_FACTOR = 0.01
         CAMERA_ROTATION_FACTOR = 0.01
@@ -1188,26 +1204,6 @@ class PyAssimp3DViewer:
         distance = numpy.linalg.norm(self.focal_point - current_pos)
         distance = numpy.linalg.norm(self.focal_point - current_pos)
 
 
         if self.is_rotating:
         if self.is_rotating:
-            """ Orbiting the camera is implemented the following way:
-
-            - the rotation is split into a rotation around the *world* Z axis
-              (controlled by the horizontal mouse motion along X) and a
-              rotation around the *X* axis of the camera (pitch) *shifted to
-              the focal origin* (the world origin for now). This is controlled
-              by the vertical motion of the mouse (Y axis).
-
-            - as a result, the resulting transformation of the camera in the
-              world frame C' is:
-                C' = (T · Rx · T⁻¹ · (Rz · C)⁻¹)⁻¹
-
-              where:
-                - C is the original camera transformation in the world frame,
-                - Rz is the rotation along the Z axis (in the world frame)
-                - T is the translation camera -> world (ie, the inverse of the
-                  translation part of C
-                - Rx is the rotation around X in the (translated) camera frame
-            """
-
             rotation_camera_x = dy * CAMERA_ROTATION_FACTOR
             rotation_camera_x = dy * CAMERA_ROTATION_FACTOR
             rotation_world_z = dx * CAMERA_ROTATION_FACTOR
             rotation_world_z = dx * CAMERA_ROTATION_FACTOR
             world_z_rotation = transformations.euler_matrix(0, 0, rotation_world_z)
             world_z_rotation = transformations.euler_matrix(0, 0, rotation_world_z)

+ 2 - 0
test/CMakeLists.txt

@@ -124,6 +124,8 @@ SET( IMPORTERS
   unit/ImportExport/utOgreImportExport.cpp
   unit/ImportExport/utOgreImportExport.cpp
   unit/ImportExport/utQ3BSPFileImportExport.cpp
   unit/ImportExport/utQ3BSPFileImportExport.cpp
   unit/ImportExport/utOFFImportExport.cpp
   unit/ImportExport/utOFFImportExport.cpp
+  unit/ImportExport/utNFFImportExport.cpp
+  unit/ImportExport/utXGLImportExport.cpp
 )
 )
 
 
 SET( MATERIAL
 SET( MATERIAL

+ 63 - 0
test/unit/ImportExport/utNFFImportExport.cpp

@@ -0,0 +1,63 @@
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
+
+Copyright (c) 2006-2018, assimp team
+
+
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the following
+conditions are met:
+
+* Redistributions of source code must retain the above
+copyright notice, this list of conditions and the
+following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the
+following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+contributors may be used to endorse or promote products
+derived from this software without specific prior
+written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------
+*/
+
+#include "UnitTestPCH.h"
+#include "AbstractImportExportBase.h"
+#include <assimp/Importer.hpp>
+#include <assimp/postprocess.h>
+
+using namespace Assimp;
+
+class utNFFImportExport : public AbstractImportExportBase {
+public:
+    virtual bool importerTest() {
+        Assimp::Importer importer;
+        const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/NFF/NFF/ManyEarthsNotJustOne.nff", 0);
+        return true;
+        return nullptr != scene;
+    }
+};
+
+TEST_F(utNFFImportExport, importNFFFromFileTest) {
+    EXPECT_TRUE(importerTest());
+}

+ 63 - 0
test/unit/ImportExport/utXGLImportExport.cpp

@@ -0,0 +1,63 @@
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
+
+Copyright (c) 2006-2018, assimp team
+
+
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the following
+conditions are met:
+
+* Redistributions of source code must retain the above
+copyright notice, this list of conditions and the
+following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the
+following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+contributors may be used to endorse or promote products
+derived from this software without specific prior
+written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------
+*/
+
+#include "UnitTestPCH.h"
+#include "AbstractImportExportBase.h"
+#include <assimp/Importer.hpp>
+#include <assimp/postprocess.h>
+
+using namespace Assimp;
+
+class utXGLImportExport : public AbstractImportExportBase {
+public:
+    virtual bool importerTest() {
+        Assimp::Importer importer;
+        const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/XGL/sample_official.xgl", 0);
+        return true;
+        return nullptr != scene;
+    }
+};
+
+TEST_F(utXGLImportExport, importXGLFromFileTest) {
+    EXPECT_TRUE(importerTest());
+}