3ds Max USD API Reference
Loading...
Searching...
No Matches
TypeUtils.h
1//**************************************************************************/
2// Copyright (c) 2022 Autodesk, Inc.
3// All rights reserved.
4//
5// These coded instructions, statements, and computer programs contain
6// unpublished proprietary information written by Autodesk, Inc., and are
7// protected by Federal copyright law. They may not be disclosed to third
8// parties or copied or duplicated in any form, in whole or in part, without
9// the prior written consent of Autodesk, Inc.
10//**************************************************************************/
11#pragma once
12
13#include "MaxUsd.h"
14#include <ipoint2.h>
15#include <point3.h>
16#include <matrix3.h>
17#include <Graphics/Matrix44.h>
18
19#include <pxr/base/gf/vec2i.h>
20#include <pxr/base/gf/vec3d.h>
21#include <pxr/base/gf/vec4f.h>
22#include <pxr/base/gf/matrix4d.h>
23
24
25namespace MAXUSD_NS_DEF {
26
27inline pxr::GfVec2i toUSD(IPoint2 p)
28{
29 return pxr::GfVec2i(p.x, p.y);
30}
31
32inline pxr::GfVec3d toUSD(Point3 p)
33{
34 return pxr::GfVec3d(p.x, p.y, p.z);
35}
36
37inline pxr::GfMatrix4d toUSD(Matrix3 m)
38{
39 pxr::GfMatrix4d r;
40
41 for (int i = 0; i < 4; ++i)
42 {
43 r.SetRow3(i, toUSD(m.GetRow(i)));
44 }
45
46 r.SetColumn(3, pxr::GfVec4d(0, 0, 0, 1));
47 return r;
48}
49
50inline pxr::GfMatrix4d toUSD(MaxSDK::Graphics::Matrix44 m)
51{
52 pxr::GfMatrix4d r;
53 for (int i = 0; i < 4; ++i)
54 {
55 r.SetRow(i, pxr::GfVec4d(pxr::GfVec4f(m.m[i])));
56 }
57
58 return r;
59}
60
61inline Point3 toMax(pxr::GfVec3d p)
62{
63 return Point3(p[0], p[1], p[2]);
64}
65
66inline MaxSDK::Graphics::Matrix44 toMax(const pxr::GfMatrix4d& m)
67{
68 MaxSDK::Graphics::Matrix44 r;
69 std::copy_n(m.data(), 16, &r.m[0][0]);
70
71 return r;
72}
73
74inline Matrix3 toMaxMatrix3(const MaxSDK::Graphics::Matrix44& mat)
75{
76 Matrix3 matrix3;
77 const auto row1 = mat.m[0];
78 matrix3.SetRow(0, Point3(row1[0], row1[1], row1[2]));
79 const auto row2 = mat.m[1];
80 matrix3.SetRow(1, Point3(row2[0], row2[1], row2[2]));
81 const auto row3 = mat.m[2];
82 matrix3.SetRow(2, Point3(row3[0], row3[1], row3[2]));
83 const auto row4 = mat.m[3];
84 matrix3.SetRow(3, Point3(row4[0], row4[1], row4[2]));
85 return matrix3;
86}
87
88inline Matrix3 toMaxMatrix3(const pxr::GfMatrix4d& mat)
89{
90 Matrix3 matrix3;
91 const auto row1 = mat.GetRow3(0).data();
92 matrix3.SetRow(0, Point3(row1[0], row1[1], row1[2]));
93 const auto row2 = mat.GetRow3(1).data();
94 matrix3.SetRow(1, Point3(row2[0], row2[1], row2[2]));
95 const auto row3 = mat.GetRow3(2).data();
96 matrix3.SetRow(2, Point3(row3[0], row3[1], row3[2]));
97 const auto row4 = mat.GetRow3(3).data();
98 matrix3.SetRow(3, Point3(row4[0], row4[1], row4[2]));
99 return matrix3;
100}
101
102} // namespace USDCore