Skip to content

Commit 952f7a8

Browse files
committed
Fix the "Export Display List" button
1 parent b8af0d3 commit 952f7a8

2 files changed

Lines changed: 111 additions & 12 deletions

File tree

fast64_internal/f3d/f3d_writer.py

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1843,18 +1843,28 @@ def getWriteMethodFromEnum(enumVal):
18431843
return matWriteMethodEnumDict[enumVal]
18441844

18451845

1846-
def exportF3DtoXML(dirPath, obj, DLFormat, transformMatrix, texDir, objectPath, savePNG, texSeparate, name, matWriteMethod):
1847-
1846+
def exportF3DtoXML(dirPath, obj, DLFormat, transformMatrix, texDir, objectPath, savePNG, texSeparate, name, matWriteMethod, logging_func):
1847+
logging_func({"INFO"}, "exportF3DtoXML 0")
18481848
fModel = FModel(name, DLFormat, matWriteMethod)
1849+
logging_func({"INFO"}, "exportF3DtoXML 1")
18491850
fMesh = exportF3DCommon(obj, fModel, transformMatrix, True, name, DLFormat, not savePNG)
18501851

1852+
logging_func({"INFO"}, "exportF3DtoXML 2")
1853+
18511854
modelDirPath = os.path.join(dirPath, objectPath)
1852-
1855+
1856+
logging_func({"INFO"}, "exportF3DtoXML 3")
1857+
18531858
if not os.path.exists(modelDirPath):
18541859
os.makedirs(modelDirPath)
1855-
1860+
1861+
logging_func({"INFO"}, "exportF3DtoXML 4")
1862+
18561863
#gfxFormatter = GfxFormatter(ScrollMethod.Vertex, 64)
1857-
exportData = fModel.to_soh_xml(modelDirPath, objectPath, None)
1864+
exportData = fModel.to_soh_xml(modelDirPath, objectPath, logging_func)
1865+
1866+
logging_func({"INFO"}, "exportF3DtoXML 5")
1867+
18581868
staticData = exportData
18591869
#dynamicData = exportData.dynamicData
18601870
#texC = exportData.textureData
@@ -1879,6 +1889,8 @@ def exportF3DtoXML(dirPath, obj, DLFormat, transformMatrix, texDir, objectPath,
18791889
#texCFile.close()
18801890

18811891
writeXMLData(staticData, os.path.join(modelDirPath, "model.xml"))
1892+
1893+
logging_func({"INFO"}, "exportF3DtoXML 6")
18821894

18831895

18841896
def exportF3DtoC(dirPath, obj, DLFormat, transformMatrix, texDir, savePNG, texSeparate, name, matWriteMethod):
@@ -1956,15 +1968,18 @@ class F3D_ExportDL(bpy.types.Operator):
19561968
# Called on demand (i.e. button press, menu item)
19571969
# Can also be called from operator search menu (Spacebar)
19581970
def execute(self, context):
1971+
self.report({"INFO"}, "F3D_ExportDL 0")
19591972
if context.mode != "OBJECT":
19601973
bpy.ops.object.mode_set(mode="OBJECT")
19611974
try:
19621975
allObjs = context.selected_objects
19631976
if len(allObjs) == 0:
19641977
raise PluginError("No objects selected.")
1978+
self.report({"INFO"}, "F3D_ExportDL 1")
19651979
obj = context.selected_objects[0]
19661980
if obj.type != "MESH":
19671981
raise PluginError("Object is not a mesh.")
1982+
self.report({"INFO"}, "F3D_ExportDL 2")
19681983

19691984
scaleValue = bpy.context.scene.blenderF3DScale
19701985
finalTransform = mathutils.Matrix.Diagonal(mathutils.Vector((scaleValue, scaleValue, scaleValue))).to_4x4()
@@ -1973,9 +1988,12 @@ def execute(self, context):
19731988
raisePluginError(self, e)
19741989
return {"CANCELLED"}
19751990

1991+
self.report({"INFO"}, "F3D_ExportDL 3")
1992+
19761993
try:
19771994
applyRotation([obj], math.radians(90), "X")
19781995

1996+
self.report({"INFO"}, "F3D_ExportDL 4")
19791997
exportPath = bpy.path.abspath(context.scene.DLExportPath)
19801998
dlFormat = DLFormat.Static if context.scene.DLExportisStatic else DLFormat.Dynamic
19811999
texDir = bpy.context.scene.DLTexDir
@@ -1984,8 +2002,10 @@ def execute(self, context):
19842002
separateTexDef = bpy.context.scene.DLSeparateTextureDef
19852003
DLName = bpy.context.scene.DLName
19862004
matWriteMethod = getWriteMethodFromEnum(context.scene.matWriteMethod)
2005+
self.report({"INFO"}, "F3D_ExportDL 5")
19872006

19882007
if bpy.context.scene.fast64.oot.featureSet == "SoH":
2008+
self.report({"INFO"}, "F3D_ExportDL 6")
19892009
exportF3DtoXML(
19902010
exportPath,
19912011
obj,
@@ -1997,7 +2017,9 @@ def execute(self, context):
19972017
separateTexDef,
19982018
DLName,
19992019
matWriteMethod,
2020+
self.report
20002021
)
2022+
self.report({"INFO"}, "F3D_ExportDL 7")
20012023
else:
20022024
exportF3DtoC(
20032025
exportPath,

fast64_internal/oot/f3d/operators.py

Lines changed: 84 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,67 @@ def ootConvertMeshToC(
9292
removeDL(sourcePath, headerPath, name)
9393

9494

95+
def ootConvertMeshToXML(
96+
originalObj: bpy.types.Object,
97+
finalTransform: mathutils.Matrix,
98+
DLFormat: DLFormat,
99+
saveTextures: bool,
100+
settings: OOTDLExportSettings,
101+
):
102+
folderName = settings.folder
103+
exportPath = bpy.path.abspath(settings.customPath)
104+
isCustomExport = settings.isCustom
105+
drawLayer = settings.drawLayer
106+
removeVanillaData = settings.removeVanillaData
107+
name = toAlnum(settings.name)
108+
overlayName = settings.actorOverlayName
109+
flipbookUses2DArray = settings.flipbookUses2DArray
110+
flipbookArrayIndex2D = settings.flipbookArrayIndex2D if flipbookUses2DArray else None
111+
112+
try:
113+
obj, allObjs = ootDuplicateHierarchy(originalObj, None, False, OOTObjectCategorizer())
114+
115+
fModel = OOTModel(name, DLFormat, drawLayer)
116+
triConverterInfo = TriangleConverterInfo(obj, None, fModel.f3d, finalTransform, getInfoDict(obj))
117+
fMeshes = saveStaticModel(
118+
triConverterInfo, fModel, obj, finalTransform, fModel.name, not saveTextures, False, "oot"
119+
)
120+
121+
# Since we provide a draw layer override, there should only be one fMesh.
122+
for drawLayer, fMesh in fMeshes.items():
123+
fMesh.draw.name = name
124+
125+
ootCleanupScene(originalObj, allObjs)
126+
127+
except Exception as e:
128+
ootCleanupScene(originalObj, allObjs)
129+
raise Exception(str(e))
130+
131+
path = ootGetPath(exportPath, isCustomExport, "assets/objects/", folderName, False, True)
132+
includeDir = settings.customAssetIncludeDir if settings.isCustom else f"assets/objects/{folderName}"
133+
data = fModel.to_soh_xml(
134+
TextureExportSettings(False, saveTextures, includeDir, path), OOTGfxFormatter(ScrollMethod.Vertex)
135+
)
136+
137+
if isCustomExport:
138+
textureArrayData = writeTextureArraysNewXML(fModel, flipbookArrayIndex2D)
139+
data.append(textureArrayData)
140+
141+
writeXMLData(data, os.path.join(path, name + ".xml"))
142+
143+
144+
def writeTextureArraysNewXML(fModel: OOTModel, arrayIndex: int):
145+
textureArrayData = ""
146+
#for flipbook in fModel.flipbooks:
147+
# if flipbook.exportMode == "Array":
148+
# if arrayIndex is not None:
149+
# textureArrayData += flipbook_2d_to_xml(flipbook, True, arrayIndex + 1) + "\n"
150+
# else:
151+
# textureArrayData += flipbook_to_xml(flipbook, True) + "\n"
152+
return textureArrayData
153+
154+
155+
95156
class OOT_ImportDL(Operator):
96157
# set bl_ properties
97158
bl_idname = "object.oot_import_dl"
@@ -162,15 +223,20 @@ class OOT_ExportDL(Operator):
162223
# Called on demand (i.e. button press, menu item)
163224
# Can also be called from operator search menu (Spacebar)
164225
def execute(self, context):
226+
self.report({"INFO"}, "OOT_ExportDL execute 0")
165227
obj = None
166228
if context.mode != "OBJECT":
167229
object.mode_set(mode="OBJECT")
230+
self.report({"INFO"}, "OOT_ExportDL execute 1")
168231
if len(context.selected_objects) == 0:
169232
raise PluginError("Mesh not selected.")
233+
self.report({"INFO"}, "OOT_ExportDL execute 2")
170234
obj = context.active_object
171235
if obj.type != "MESH":
172236
raise PluginError("Mesh not selected.")
173237

238+
self.report({"INFO"}, "OOT_ExportDL execute 3")
239+
174240
finalTransform = Matrix.Scale(getOOTScale(obj.ootActorScale), 4)
175241

176242
try:
@@ -181,13 +247,24 @@ def execute(self, context):
181247
saveTextures = context.scene.saveTextures
182248
exportSettings = context.scene.fast64.oot.DLExportSettings
183249

184-
ootConvertMeshToC(
185-
obj,
186-
finalTransform,
187-
DLFormat.Static,
188-
saveTextures,
189-
exportSettings,
190-
)
250+
self.report({"INFO"}, "OOT_ExportDL execute 4")
251+
252+
if context.scene.fast64.oot.featureSet == "SoH":
253+
ootConvertMeshToXML(
254+
obj,
255+
finalTransform,
256+
DLFormat.Static,
257+
saveTextures,
258+
exportSettings,
259+
)
260+
else:
261+
ootConvertMeshToC(
262+
obj,
263+
finalTransform,
264+
DLFormat.Static,
265+
saveTextures,
266+
exportSettings,
267+
)
191268

192269
self.report({"INFO"}, "Success!")
193270
return {"FINISHED"}

0 commit comments

Comments
 (0)