I have 512x512 render and python script that exports X and Y Locations to .txt file, but the output looks like this:
0, -0.043, 1.577
1, 0.107, 5.171
2, 0.211, 8.771
3, 0.412, 12.613
4, 0.536, 16.454
5, 0.679, 20.148
6, 0.756, 23.838
7, 0.926, 27.511
8, 1.031, 31.177
9, 1.069, 34.886
10, 1.059, 38.587
But I need to have real X and Y values inside 512x512 area. Im using Orthographic camera if that matters. Do I need to multiply the Metrics, tweak settings or customize python export code?
Export code:
import bpy
def write_some_data(context, filepath, use_some_setting):
print("running write_some_data...")
scene = bpy.context.scene
frame = scene.frame_start
cube = bpy.data.objects['Tracker1']
f = open(filepath, 'w', encoding='utf-8')
while frame <= scene.frame_end:
scene.frame_set(frame)
x, y, z = cube.location
f.write("%d" % frame)
f.write(", ")
f.write("%5.3f, %5.3f" % (x, y))
f.write("\n")
frame += 1
f.close()
return {'FINISHED'}
ExportHelper is a helper class, defines filename and
invoke() function which calls the file selector.
from bpy_extras.io_utils import ExportHelper
from bpy.props import StringProperty, BoolProperty, EnumProperty
from bpy.types import Operator
class ExportSomeData(Operator, ExportHelper):
"""This appears in the tooltip of the operator and in the generated docs"""
bl_idname = "export_test.some_data" # important since its how bpy.ops.import_test.some_data is constructed
bl_label = "Export Some Data"
# ExportHelper mixin class uses this
filename_ext = ".txt"
filter_glob: StringProperty(
default="*.txt",
options={'HIDDEN'},
maxlen=255, # Max internal buffer length, longer would be clamped.
)
# List of operator properties, the attributes will be assigned
# to the class instance from the operator settings before calling.
use_setting: BoolProperty(
name="Example Boolean",
description="Example Tooltip",
default=True,
)
type: EnumProperty(
name="Example Enum",
description="Choose between two items",
items=(
('OPT_A', "First Option", "Description one"),
('OPT_B', "Second Option", "Description two"),
),
default='OPT_A',
)
def execute(self, context):
return write_some_data(context, self.filepath, self.use_setting)
Only needed if you want to add into a dynamic menu
def menu_func_export(self, context):
self.layout.operator(ExportSomeData.bl_idname, text="Text Export Operator")
def register():
bpy.utils.register_class(ExportSomeData)
bpy.types.TOPBAR_MT_file_export.append(menu_func_export)
def unregister():
bpy.utils.unregister_class(ExportSomeData)
bpy.types.TOPBAR_MT_file_export.remove(menu_func_export)
if name == "main":
register()
# test call
bpy.ops.export_test.some_data('INVOKE_DEFAULT')
