Katana Plug-in APIs 0.1

FnImathHelpers.h

00001 // Copyright (c) 2017 The Foundry Visionmongers Ltd. All Rights Reserved.
00002 
00003 #ifndef FNIMATHHELPERS_H_
00004 #define FNIMATHHELPERS_H_
00005 
00006 #include <FnViewer/plugin/FnMathTypes.h>
00007 #include <FnAttribute/FnAttribute.h>
00008 
00009 #include <ImathVec.h>
00010 #include <ImathMatrix.h>
00011 
00012 
00013 namespace Foundry
00014 {
00015 namespace Katana
00016 {
00017 namespace ViewerUtils
00018 {
00019 
00026 static inline IMATH_NAMESPACE::V3d toRadians(const IMATH_NAMESPACE::V3d& vec)
00027 {
00028     return vec * (M_PI / 180.0);
00029 }
00030 
00031 static inline IMATH_NAMESPACE::V3d toDegrees(const IMATH_NAMESPACE::V3d& vec)
00032 {
00033     return vec * (180.0 / M_PI);
00034 }
00035 
00036 inline IMATH_NAMESPACE::Matrix44<double> toImathMatrix44d(const double* m)
00037 {
00038     return IMATH_NAMESPACE::Matrix44<double>(m[0], m[1], m[2], m[3], m[4], m[5],
00039                                              m[6], m[7], m[8], m[9], m[10],
00040                                              m[11], m[12], m[13], m[14], m[15]);
00041 }
00042 
00043 inline IMATH_NAMESPACE::Matrix44<double> toImathMatrix44d(
00044     const Foundry::Katana::ViewerAPI::Matrix44d& m)
00045 {
00046     return IMATH_NAMESPACE::Matrix44<double>(
00047         m.data[0], m.data[1], m.data[2], m.data[3], m.data[4], m.data[5],
00048         m.data[6], m.data[7], m.data[8], m.data[9], m.data[10], m.data[11],
00049         m.data[12], m.data[13], m.data[14], m.data[15]);
00050 }
00051 
00052 inline IMATH_NAMESPACE::Matrix44<double> toImathMatrix44d(
00053     FnAttribute::DoubleAttribute a)
00054 {
00055     if (!a.isValid())
00056     {
00057         return IMATH_NAMESPACE::M44d();
00058     }
00059 
00060     FnAttribute::DoubleConstVector m = a.getNearestSample(0);
00061     return IMATH_NAMESPACE::M44d(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7],
00062                                  m[8], m[9], m[10], m[11], m[12], m[13], m[14],
00063                                  m[15]);
00064 }
00065 
00066 inline Foundry::Katana::ViewerAPI::Matrix44d toMatrix44d(
00067     const IMATH_NAMESPACE::Matrix44<double>& m)
00068 {
00069     return Foundry::Katana::ViewerAPI::Matrix44d(
00070         m[0][0], m[0][1], m[0][2], m[0][3],
00071         m[1][0], m[1][1], m[1][2], m[1][3],
00072         m[2][0], m[2][1], m[2][2], m[2][3],
00073         m[3][0], m[3][1], m[3][2], m[3][3]);
00074 }
00075 
00076 inline FnAttribute::DoubleAttribute toDoubleAttribute(
00077     const IMATH_NAMESPACE::Matrix44<double>& m)
00078 {
00079     double matrixArray[16] = {
00080         m[0][0], m[0][1], m[0][2], m[0][3],
00081         m[1][0], m[1][1], m[1][2], m[1][3],
00082         m[2][0], m[2][1], m[2][2], m[2][3],
00083         m[3][0], m[3][1], m[3][2], m[3][3] };
00084     return FnAttribute::DoubleAttribute(matrixArray, 16, 4);
00085 }
00086 
00087 inline IMATH_NAMESPACE::V3d toImathV3d(
00088     const Foundry::Katana::ViewerAPI::Vec3d& v)
00089 {
00090     return IMATH_NAMESPACE::V3d(v.x, v.y, v.z);
00091 }
00092 
00093 inline Foundry::Katana::ViewerAPI::Vec3d toVec3d(const IMATH_NAMESPACE::V3d& v)
00094 {
00095     return Foundry::Katana::ViewerAPI::Vec3d(v.x, v.y, v.z);
00096 }
00097 
00098 inline Foundry::Katana::ViewerAPI::Vec3f toVec3f(const IMATH_NAMESPACE::V3d& v)
00099 {
00100     return Foundry::Katana::ViewerAPI::Vec3f(
00101             static_cast<float>(v.x),
00102             static_cast<float>(v.y),
00103             static_cast<float>(v.z));
00104 }
00105 
00106 inline IMATH_NAMESPACE::V2i toImathV2i(
00107     const Foundry::Katana::ViewerAPI::Vec2i& v)
00108 {
00109     return IMATH_NAMESPACE::V2i(v.x, v.y);
00110 }
00111 
00112 inline Foundry::Katana::ViewerAPI::Vec2i toVec2i(const IMATH_NAMESPACE::V2i& v)
00113 {
00114     return Foundry::Katana::ViewerAPI::Vec2i(v.x, v.y);
00115 }
00116 
00117 } // ViewerUtils
00118 } // Katana
00119 } // Foundry
00120 
00121 #endif // FNIMATHHELPERS_H_
 All Classes Functions Variables Typedefs Enumerations Enumerator