Skip to content

Commit 2f35684

Browse files
committed
Adapt mesh export to latest blender data structure
1 parent b6a7355 commit 2f35684

File tree

3 files changed

+43
-52
lines changed

3 files changed

+43
-52
lines changed

include/luxcore/pyluxcore/blender_types.h

-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ static const int ME_SMOOTH = 1;
3232

3333
typedef struct MLoopTri {
3434
unsigned int tri[3];
35-
unsigned int poly;
3635
} MLoopTri;
3736

3837
typedef struct MLoopUV {

include/luxcore/pyluxcore/pyluxcoreforblender.h

+10-12
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
* limitations under the License. *
1717
***************************************************************************/
1818

19-
#ifndef _LUXCORE_FOR_BLENER_H
20-
#define _LUXCORE_FOR_BLENER_H
19+
#ifndef _LUXCORE_FOR_BLENDER_H
20+
#define _LUXCORE_FOR_BLENDER_H
2121

2222
#include "luxcore/luxcoreimpl.h"
2323

@@ -70,35 +70,33 @@ extern boost::python::tuple GetOpenVDBGridInfo(const std::string &filePathStr, c
7070

7171

7272
extern boost::python::list Scene_DefineBlenderMesh1(luxcore::detail::SceneImpl *scene, const std::string &name,
73-
const size_t loopTriCount, const size_t loopTriPtr,
73+
const size_t loopTriCount, const size_t loopTriPtr, const size_t loopTriPolyPtr,
7474
const size_t loopPtr,
7575
const size_t vertPtr,
76-
const size_t normalPtr,
77-
const size_t polyPtr,
78-
const size_t sharpPtr,
76+
const size_t normalPtr,
77+
const size_t sharpPtr,
7978
const bool sharpAttr,
8079
const boost::python::object &loopUVsPtrList,
8180
const boost::python::object &loopColsPtrList,
8281
const size_t meshPtr,
8382
const u_int materialCount,
84-
const boost::python::object &transformation,
83+
const boost::python::object& transformation,
8584
const boost::python::tuple &blenderVersion,
8685
const boost::python::object& material_indices,
8786
const boost::python::object &loopTriCustomNormals);
8887

8988
extern boost::python::list Scene_DefineBlenderMesh2(luxcore::detail::SceneImpl *scene, const std::string &name,
90-
const size_t loopTriCount, const size_t loopTriPtr,
89+
const size_t loopTriCount, const size_t loopTriPtr, const size_t loopTriPolyPtr,
9190
const size_t loopPtr,
9291
const size_t vertPtr,
93-
const size_t normalPtr,
94-
const size_t polyPtr,
95-
const size_t sharpPtr,
92+
const size_t normalPtr,
93+
const size_t sharpPtr,
9694
const bool sharpAttr,
9795
const boost::python::object &loopUVsPtrList,
9896
const boost::python::object &loopColsPtrList,
9997
const size_t meshPtr,
10098
const u_int materialCount,
101-
const boost::python::tuple &blenderVersion,
99+
const boost::python::tuple &blenderVersion,
102100
const boost::python::object& material_indices,
103101
const boost::python::object &loopTriCustomNormals);
104102

src/luxcore/pyluxcoreforblender.cpp

+33-39
Original file line numberDiff line numberDiff line change
@@ -688,29 +688,29 @@ boost::python::tuple GetOpenVDBGridInfo(const string &filePathStr, const string
688688
//------------------------------------------------------------------------------
689689

690690
static bool Scene_DefineBlenderMesh(luxcore::detail::SceneImpl *scene, const string &name,
691-
const size_t loopTriCount, const size_t loopTriPtr,
691+
const size_t loopTriCount, const size_t loopTriPtr, const size_t loopTriPolyPtr,
692692
const size_t loopPtr,
693693
const size_t vertPtr,
694-
const size_t normalPtr,
695-
const size_t polyPtr,
696-
const size_t sharpPtr,
694+
const size_t normalPtr,
695+
const size_t sharpPtr,
697696
const bool sharpAttr,
698697
const boost::python::object &loopUVsPtrList,
699698
const boost::python::object &loopColsPtrList,
700699
const size_t meshPtr,
701700
const short matIndex,
702701
const luxrays::Transform *trans,
703-
const boost::python::tuple &blenderVersion,
704-
const boost::python::object &material_indices,
705-
const boost::python::object &loopTriCustomNormals) {
702+
const boost::python::tuple& blenderVersion,
703+
const boost::python::object& material_indices,
704+
const boost::python::object&loopTriCustomNormals) {
706705

707706
const MLoopTri *loopTris = reinterpret_cast<const MLoopTri *>(loopTriPtr);
708-
const u_int *loops = reinterpret_cast<const u_int *>(loopPtr);
709-
const MPoly *polygons = reinterpret_cast<const MPoly *>(polyPtr);
707+
const int* loopTriPolys = reinterpret_cast<const int*>(loopTriPolyPtr);
708+
709+
const u_int* loops = reinterpret_cast<const u_int*>(loopPtr);
710710
const float(*normals)[3] = nullptr;
711711
normals = reinterpret_cast<const float(*)[3]>(normalPtr);
712712

713-
const bool *sharpList = reinterpret_cast<const bool *>(sharpPtr);
713+
const bool* sharpList = reinterpret_cast<const bool*>(sharpPtr);
714714

715715
extract<boost::python::list> getUVPtrList(loopUVsPtrList);
716716
extract<boost::python::list> getColPtrList(loopColsPtrList);
@@ -779,21 +779,16 @@ static bool Scene_DefineBlenderMesh(luxcore::detail::SceneImpl *scene, const str
779779
const float rgbScale = 1.f / 255.f;
780780

781781
for (u_int loopTriIndex = 0; loopTriIndex < loopTriCount; ++loopTriIndex) {
782-
const MLoopTri &loopTri = loopTris[loopTriIndex];
783-
const MPoly &poly = polygons[loopTri.poly];
784-
785-
if (blenderVersionMajor == 3 && blenderVersionMinor >= 4 && !material_indices.is_none()) {
786-
if (material_indices[loopTri.poly] != matIndex)
787-
continue;
788-
} else {
789-
if (poly.mat_nr != matIndex)
790-
continue;
791-
}
782+
const MLoopTri &loopTri = loopTris[loopTriIndex];
783+
const int poly = loopTriPolys[loopTriIndex];
784+
785+
if (material_indices[poly] != matIndex)
786+
continue;
792787

793788
u_int vertIndices[3];
794789

795790
bool smooth = true;
796-
if(sharpAttr) smooth = !sharpList[loopTri.poly];
791+
if(sharpAttr) smooth = !sharpList[poly];
797792

798793
if (smooth) {
799794
// Smooth shaded, use the Blender vertex normal
@@ -979,9 +974,10 @@ static bool Scene_DefineBlenderMesh(luxcore::detail::SceneImpl *scene, const str
979974
vertIndices[i] = vertIndex;
980975
}
981976
}
977+
982978
}
983979

984-
tmpMeshTris.emplace_back(Triangle(vertIndices[0], vertIndices[1], vertIndices[2]));
980+
tmpMeshTris.emplace_back(Triangle(vertIndices[0], vertIndices[1], vertIndices[2]));
985981
}
986982

987983
// Check if there wasn't any triangles with matIndex
@@ -1035,21 +1031,20 @@ static bool Scene_DefineBlenderMesh(luxcore::detail::SceneImpl *scene, const str
10351031
}
10361032

10371033
boost::python::list Scene_DefineBlenderMesh1(luxcore::detail::SceneImpl *scene, const string &name,
1038-
const size_t loopTriCount, const size_t loopTriPtr,
1034+
const size_t loopTriCount, const size_t loopTriPtr, const size_t loopTriPolyPtr,
10391035
const size_t loopPtr,
10401036
const size_t vertPtr,
1041-
const size_t normalPtr,
1042-
const size_t polyPtr,
1043-
const size_t sharpPtr,
1037+
const size_t normalPtr,
1038+
const size_t sharpPtr,
10441039
const bool sharpAttr,
10451040
const boost::python::object &loopUVsPtrList,
10461041
const boost::python::object &loopColsPtrList,
10471042
const size_t meshPtr,
10481043
const u_int materialCount,
10491044
const boost::python::object &transformation,
1050-
const boost::python::tuple &blenderVersion,
1051-
const boost::python::object& material_indices,
1052-
const boost::python::object& loopTriCustomNormals) {
1045+
const boost::python::tuple &blenderVersion,
1046+
const boost::python::object &material_indices,
1047+
const boost::python::object &loopTriCustomNormals) {
10531048

10541049
// Get the transformation if required
10551050
bool hasTransformation = false;
@@ -1063,13 +1058,13 @@ boost::python::list Scene_DefineBlenderMesh1(luxcore::detail::SceneImpl *scene,
10631058
for (u_int matIndex = 0; matIndex < materialCount; ++matIndex) {
10641059
const string meshName = (boost::format(name + "%03d") % matIndex).str();
10651060

1066-
if (Scene_DefineBlenderMesh(scene, meshName, loopTriCount, loopTriPtr,
1067-
loopPtr, vertPtr, normalPtr, polyPtr, sharpPtr, sharpAttr,
1061+
if (Scene_DefineBlenderMesh(scene, meshName, loopTriCount, loopTriPtr, loopTriPolyPtr,
1062+
loopPtr, vertPtr, normalPtr, sharpPtr, sharpAttr,
10681063
loopUVsPtrList, loopColsPtrList,
10691064
meshPtr,
10701065
matIndex,
10711066
hasTransformation ? &trans : NULL,
1072-
blenderVersion,
1067+
blenderVersion,
10731068
material_indices,
10741069
loopTriCustomNormals)) {
10751070
boost::python::list meshInfo;
@@ -1083,22 +1078,21 @@ boost::python::list Scene_DefineBlenderMesh1(luxcore::detail::SceneImpl *scene,
10831078
}
10841079

10851080
boost::python::list Scene_DefineBlenderMesh2(luxcore::detail::SceneImpl *scene, const string &name,
1086-
const size_t loopTriCount, const size_t loopTriPtr,
1081+
const size_t loopTriCount, const size_t loopTriPtr, const size_t loopTriPolyPtr,
10871082
const size_t loopPtr,
10881083
const size_t vertPtr,
1089-
const size_t normalPtr,
1090-
const size_t polyPtr,
1091-
const size_t sharpPtr,
1084+
const size_t normalPtr,
1085+
const size_t sharpPtr,
10921086
const bool sharpAttr,
10931087
const boost::python::object &loopUVsPtrList,
10941088
const boost::python::object &loopColsPtrList,
10951089
const size_t meshPtr,
10961090
const u_int materialCount,
10971091
const boost::python::tuple &blenderVersion,
1098-
const boost::python::object& material_indices,
1092+
const boost::python::object &material_indices,
10991093
const boost::python::object &loopTriCustomNormals) {
1100-
return Scene_DefineBlenderMesh1(scene, name, loopTriCount, loopTriPtr,
1101-
loopPtr, vertPtr, normalPtr, polyPtr, sharpPtr, sharpAttr, loopUVsPtrList, loopColsPtrList,
1094+
return Scene_DefineBlenderMesh1(scene, name, loopTriCount, loopTriPtr, loopTriPolyPtr,
1095+
loopPtr, vertPtr, normalPtr, sharpPtr, sharpAttr, loopUVsPtrList, loopColsPtrList,
11021096
meshPtr, materialCount, boost::python::object(), blenderVersion, material_indices,
11031097
loopTriCustomNormals);
11041098
}

0 commit comments

Comments
 (0)