1977 lines
		
	
	
		
			70 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			1977 lines
		
	
	
		
			70 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!BPY
 | |
| """
 | |
| Name: 'Autodesk FBX (.fbx)...'
 | |
| Blender: 243
 | |
| Group: 'Export'
 | |
| Tooltip: 'Selection to an ASCII Autodesk FBX '
 | |
| """
 | |
| __author__ = "Campbell Barton, Jiri Hnidek"
 | |
| __url__ = ['www.blender.org', 'blenderartists.org']
 | |
| __version__ = "1.1"
 | |
| 
 | |
| __bpydoc__ = """\
 | |
| This script is an exporter to the FBX file format.
 | |
| 
 | |
| Usage:
 | |
| 
 | |
| Select the objects you wish to export and run this script from "File->Export" menu.
 | |
| All objects that can be represented as a mesh (mesh, curve, metaball, surface, text3d)
 | |
| will be exported as mesh data.
 | |
| """
 | |
| 
 | |
| # --------------------------------------------------------------------------
 | |
| # FBX Export v0.1 by Campbell Barton (AKA Ideasman)
 | |
| # --------------------------------------------------------------------------
 | |
| # ***** BEGIN GPL LICENSE BLOCK *****
 | |
| #
 | |
| # This program is free software; you can redistribute it and/or
 | |
| # modify it under the terms of the GNU General Public License
 | |
| # as published by the Free Software Foundation; either version 2
 | |
| # of the License, or (at your option) any later version.
 | |
| #
 | |
| # This program is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| # GNU General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU General Public License
 | |
| # along with this program; if not, write to the Free Software Foundation,
 | |
| # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 | |
| #
 | |
| # ***** END GPL LICENCE BLOCK *****
 | |
| # --------------------------------------------------------------------------
 | |
| 
 | |
| import Blender
 | |
| import BPyMesh
 | |
| import time
 | |
| 
 | |
| # Used to add the scene name into the filename without using odd chars
 | |
| sane_name_mapping_ob = {}
 | |
| sane_name_mapping_mat = {}
 | |
| sane_name_mapping_tex = {}
 | |
| 
 | |
| def strip_path(p):
 | |
| 	return p.split('\\')[-1].split('/')[-1]
 | |
| 
 | |
| def sane_name(name, dct):
 | |
| 	
 | |
| 	try:		return dct[name]
 | |
| 	except:		pass
 | |
| 	
 | |
| 	orig_name = name
 | |
| 	for ch in ' /\\~!@#$%^&*()+=[];\':",./<>?\t\r\n':
 | |
| 		name = name.replace(ch, '_')
 | |
| 	dct[orig_name] = name
 | |
| 	return name
 | |
| 
 | |
| def sane_obname(name):
 | |
| 	return sane_name(name, sane_name_mapping_ob)
 | |
| 
 | |
| def sane_matname(name):
 | |
| 	return sane_name(name, sane_name_mapping_mat)
 | |
| 
 | |
| def sane_texname(name):
 | |
| 	return sane_name(name, sane_name_mapping_tex)
 | |
| 
 | |
| header_comment = \
 | |
| '''; FBX 6.1.0 project file
 | |
| ; Created by Blender FBX Exporter
 | |
| ; for support mail cbarton@metavr.com
 | |
| ; ----------------------------------------------------
 | |
| 
 | |
| '''
 | |
| 
 | |
| def write_header(file):
 | |
| 	file.write(header_comment)
 | |
| 	curtime = time.localtime()[0:6]
 | |
| 	# 
 | |
| 	file.write(\
 | |
| '''FBXHeaderExtension:  {
 | |
| 	FBXHeaderVersion: 1003
 | |
| 	FBXVersion: 6100
 | |
| 	CreationTimeStamp:  {
 | |
| 		Version: 1000
 | |
| 		Year: %.4i
 | |
| 		Month: %.2i
 | |
| 		Day: %.2i
 | |
| 		Hour: %.2i
 | |
| 		Minute: %.2i
 | |
| 		Second: %.2i
 | |
| 		Millisecond: 0
 | |
| 	}
 | |
| 	Creator: "FBX SDK/FBX Plugins build 20070228"
 | |
| 	OtherFlags:  {
 | |
| 		FlagPLE: 0
 | |
| 	}
 | |
| }
 | |
| ''' % (curtime))
 | |
| 	
 | |
| 	file.write('CreationTime: "%.4i-%.2i-%.2i %.2i:%.2i:%.2i:000"\n' % curtime)
 | |
| 	file.write('Creator: "Blender3D version %.2f"\n' % Blender.Get('version'))
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| def write_scene(file):
 | |
| 	
 | |
| 	def write_camera_switch():
 | |
| 		file.write('''
 | |
| 	Model: "Model::Camera Switcher", "CameraSwitcher" {
 | |
| 		Version: 232
 | |
| 		Properties60:  {
 | |
| 			Property: "QuaternionInterpolate", "bool", "",0
 | |
| 			Property: "Visibility", "Visibility", "A+",0
 | |
| 			Property: "Lcl Translation", "Lcl Translation", "A+",0,0,0
 | |
| 			Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0
 | |
| 			Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1
 | |
| 			Property: "RotationOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationActive", "bool", "",0
 | |
| 			Property: "TranslationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMinX", "bool", "",0
 | |
| 			Property: "TranslationMinY", "bool", "",0
 | |
| 			Property: "TranslationMinZ", "bool", "",0
 | |
| 			Property: "TranslationMaxX", "bool", "",0
 | |
| 			Property: "TranslationMaxY", "bool", "",0
 | |
| 			Property: "TranslationMaxZ", "bool", "",0
 | |
| 			Property: "RotationOrder", "enum", "",0
 | |
| 			Property: "RotationSpaceForLimitOnly", "bool", "",0
 | |
| 			Property: "AxisLen", "double", "",10
 | |
| 			Property: "PreRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "PostRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationActive", "bool", "",0
 | |
| 			Property: "RotationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMinX", "bool", "",0
 | |
| 			Property: "RotationMinY", "bool", "",0
 | |
| 			Property: "RotationMinZ", "bool", "",0
 | |
| 			Property: "RotationMaxX", "bool", "",0
 | |
| 			Property: "RotationMaxY", "bool", "",0
 | |
| 			Property: "RotationMaxZ", "bool", "",0
 | |
| 			Property: "RotationStiffnessX", "double", "",0
 | |
| 			Property: "RotationStiffnessY", "double", "",0
 | |
| 			Property: "RotationStiffnessZ", "double", "",0
 | |
| 			Property: "MinDampRangeX", "double", "",0
 | |
| 			Property: "MinDampRangeY", "double", "",0
 | |
| 			Property: "MinDampRangeZ", "double", "",0
 | |
| 			Property: "MaxDampRangeX", "double", "",0
 | |
| 			Property: "MaxDampRangeY", "double", "",0
 | |
| 			Property: "MaxDampRangeZ", "double", "",0
 | |
| 			Property: "MinDampStrengthX", "double", "",0
 | |
| 			Property: "MinDampStrengthY", "double", "",0
 | |
| 			Property: "MinDampStrengthZ", "double", "",0
 | |
| 			Property: "MaxDampStrengthX", "double", "",0
 | |
| 			Property: "MaxDampStrengthY", "double", "",0
 | |
| 			Property: "MaxDampStrengthZ", "double", "",0
 | |
| 			Property: "PreferedAngleX", "double", "",0
 | |
| 			Property: "PreferedAngleY", "double", "",0
 | |
| 			Property: "PreferedAngleZ", "double", "",0
 | |
| 			Property: "InheritType", "enum", "",0
 | |
| 			Property: "ScalingActive", "bool", "",0
 | |
| 			Property: "ScalingMin", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMax", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMinX", "bool", "",0
 | |
| 			Property: "ScalingMinY", "bool", "",0
 | |
| 			Property: "ScalingMinZ", "bool", "",0
 | |
| 			Property: "ScalingMaxX", "bool", "",0
 | |
| 			Property: "ScalingMaxY", "bool", "",0
 | |
| 			Property: "ScalingMaxZ", "bool", "",0
 | |
| 			Property: "GeometricTranslation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricScaling", "Vector3D", "",1,1,1
 | |
| 			Property: "LookAtProperty", "object", ""
 | |
| 			Property: "UpVectorProperty", "object", ""
 | |
| 			Property: "Show", "bool", "",0
 | |
| 			Property: "NegativePercentShapeSupport", "bool", "",1
 | |
| 			Property: "DefaultAttributeIndex", "int", "",0
 | |
| 			Property: "Color", "Color", "A",0.8,0.8,0.8
 | |
| 			Property: "Camera Index", "Integer", "A+",100
 | |
| 		}
 | |
| 		MultiLayer: 0
 | |
| 		MultiTake: 1
 | |
| 		Hidden: "True"
 | |
| 		Shading: W
 | |
| 		Culling: "CullingOff"
 | |
| 		Version: 101
 | |
| 		Name: "Model::Camera Switcher"
 | |
| 		CameraId: 0
 | |
| 		CameraName: 100
 | |
| 		CameraIndexName: 
 | |
| 	}''')
 | |
| 	
 | |
| 	def write_cameras():
 | |
| 		# This sucks but to match FBX converter its easier to
 | |
| 		# write the cameras though they are not needed.
 | |
| 		file.write('''
 | |
| 	Model: "Model::Producer Perspective", "Camera" {
 | |
| 		Version: 232
 | |
| 		Properties60:  {
 | |
| 			Property: "QuaternionInterpolate", "bool", "",0
 | |
| 			Property: "Visibility", "Visibility", "A+",0
 | |
| 			Property: "Lcl Translation", "Lcl Translation", "A+",0,71.3,287.5
 | |
| 			Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0
 | |
| 			Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1
 | |
| 			Property: "RotationOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationActive", "bool", "",0
 | |
| 			Property: "TranslationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMinX", "bool", "",0
 | |
| 			Property: "TranslationMinY", "bool", "",0
 | |
| 			Property: "TranslationMinZ", "bool", "",0
 | |
| 			Property: "TranslationMaxX", "bool", "",0
 | |
| 			Property: "TranslationMaxY", "bool", "",0
 | |
| 			Property: "TranslationMaxZ", "bool", "",0
 | |
| 			Property: "RotationOrder", "enum", "",0
 | |
| 			Property: "RotationSpaceForLimitOnly", "bool", "",0
 | |
| 			Property: "AxisLen", "double", "",10
 | |
| 			Property: "PreRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "PostRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationActive", "bool", "",0
 | |
| 			Property: "RotationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMinX", "bool", "",0
 | |
| 			Property: "RotationMinY", "bool", "",0
 | |
| 			Property: "RotationMinZ", "bool", "",0
 | |
| 			Property: "RotationMaxX", "bool", "",0
 | |
| 			Property: "RotationMaxY", "bool", "",0
 | |
| 			Property: "RotationMaxZ", "bool", "",0
 | |
| 			Property: "RotationStiffnessX", "double", "",0
 | |
| 			Property: "RotationStiffnessY", "double", "",0
 | |
| 			Property: "RotationStiffnessZ", "double", "",0
 | |
| 			Property: "MinDampRangeX", "double", "",0
 | |
| 			Property: "MinDampRangeY", "double", "",0
 | |
| 			Property: "MinDampRangeZ", "double", "",0
 | |
| 			Property: "MaxDampRangeX", "double", "",0
 | |
| 			Property: "MaxDampRangeY", "double", "",0
 | |
| 			Property: "MaxDampRangeZ", "double", "",0
 | |
| 			Property: "MinDampStrengthX", "double", "",0
 | |
| 			Property: "MinDampStrengthY", "double", "",0
 | |
| 			Property: "MinDampStrengthZ", "double", "",0
 | |
| 			Property: "MaxDampStrengthX", "double", "",0
 | |
| 			Property: "MaxDampStrengthY", "double", "",0
 | |
| 			Property: "MaxDampStrengthZ", "double", "",0
 | |
| 			Property: "PreferedAngleX", "double", "",0
 | |
| 			Property: "PreferedAngleY", "double", "",0
 | |
| 			Property: "PreferedAngleZ", "double", "",0
 | |
| 			Property: "InheritType", "enum", "",0
 | |
| 			Property: "ScalingActive", "bool", "",0
 | |
| 			Property: "ScalingMin", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMax", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMinX", "bool", "",0
 | |
| 			Property: "ScalingMinY", "bool", "",0
 | |
| 			Property: "ScalingMinZ", "bool", "",0
 | |
| 			Property: "ScalingMaxX", "bool", "",0
 | |
| 			Property: "ScalingMaxY", "bool", "",0
 | |
| 			Property: "ScalingMaxZ", "bool", "",0
 | |
| 			Property: "GeometricTranslation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricScaling", "Vector3D", "",1,1,1
 | |
| 			Property: "LookAtProperty", "object", ""
 | |
| 			Property: "UpVectorProperty", "object", ""
 | |
| 			Property: "Show", "bool", "",0
 | |
| 			Property: "NegativePercentShapeSupport", "bool", "",1
 | |
| 			Property: "DefaultAttributeIndex", "int", "",0
 | |
| 			Property: "Color", "Color", "A",0.8,0.8,0.8
 | |
| 			Property: "Roll", "Roll", "A+",0
 | |
| 			Property: "FieldOfView", "FieldOfView", "A+",40
 | |
| 			Property: "FieldOfViewX", "FieldOfView", "A+",1
 | |
| 			Property: "FieldOfViewY", "FieldOfView", "A+",1
 | |
| 			Property: "OpticalCenterX", "Real", "A+",0
 | |
| 			Property: "OpticalCenterY", "Real", "A+",0
 | |
| 			Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63
 | |
| 			Property: "TurnTable", "Real", "A+",0
 | |
| 			Property: "DisplayTurnTableIcon", "bool", "",1
 | |
| 			Property: "Motion Blur Intensity", "Real", "A+",1
 | |
| 			Property: "UseMotionBlur", "bool", "",0
 | |
| 			Property: "UseRealTimeMotionBlur", "bool", "",1
 | |
| 			Property: "ResolutionMode", "enum", "",0
 | |
| 			Property: "ApertureMode", "enum", "",2
 | |
| 			Property: "GateFit", "enum", "",0
 | |
| 			Property: "FocalLength", "Real", "A+",21.3544940948486
 | |
| 			Property: "CameraFormat", "enum", "",0
 | |
| 			Property: "AspectW", "double", "",320
 | |
| 			Property: "AspectH", "double", "",200
 | |
| 			Property: "PixelAspectRatio", "double", "",1
 | |
| 			Property: "UseFrameColor", "bool", "",0
 | |
| 			Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3
 | |
| 			Property: "ShowName", "bool", "",1
 | |
| 			Property: "ShowGrid", "bool", "",1
 | |
| 			Property: "ShowOpticalCenter", "bool", "",0
 | |
| 			Property: "ShowAzimut", "bool", "",1
 | |
| 			Property: "ShowTimeCode", "bool", "",0
 | |
| 			Property: "NearPlane", "double", "",10
 | |
| 			Property: "FarPlane", "double", "",4000
 | |
| 			Property: "FilmWidth", "double", "",0.816
 | |
| 			Property: "FilmHeight", "double", "",0.612
 | |
| 			Property: "FilmAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "FilmSqueezeRatio", "double", "",1
 | |
| 			Property: "FilmFormatIndex", "enum", "",4
 | |
| 			Property: "ViewFrustum", "bool", "",1
 | |
| 			Property: "ViewFrustumNearFarPlane", "bool", "",0
 | |
| 			Property: "ViewFrustumBackPlaneMode", "enum", "",2
 | |
| 			Property: "BackPlaneDistance", "double", "",100
 | |
| 			Property: "BackPlaneDistanceMode", "enum", "",0
 | |
| 			Property: "ViewCameraToLookAt", "bool", "",1
 | |
| 			Property: "LockMode", "bool", "",0
 | |
| 			Property: "LockInterestNavigation", "bool", "",0
 | |
| 			Property: "FitImage", "bool", "",0
 | |
| 			Property: "Crop", "bool", "",0
 | |
| 			Property: "Center", "bool", "",1
 | |
| 			Property: "KeepRatio", "bool", "",1
 | |
| 			Property: "BackgroundMode", "enum", "",0
 | |
| 			Property: "BackgroundAlphaTreshold", "double", "",0.5
 | |
| 			Property: "ForegroundTransparent", "bool", "",1
 | |
| 			Property: "DisplaySafeArea", "bool", "",0
 | |
| 			Property: "SafeAreaDisplayStyle", "enum", "",1
 | |
| 			Property: "SafeAreaAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "Use2DMagnifierZoom", "bool", "",0
 | |
| 			Property: "2D Magnifier Zoom", "Real", "A+",100
 | |
| 			Property: "2D Magnifier X", "Real", "A+",50
 | |
| 			Property: "2D Magnifier Y", "Real", "A+",50
 | |
| 			Property: "CameraProjectionType", "enum", "",0
 | |
| 			Property: "UseRealTimeDOFAndAA", "bool", "",0
 | |
| 			Property: "UseDepthOfField", "bool", "",0
 | |
| 			Property: "FocusSource", "enum", "",0
 | |
| 			Property: "FocusAngle", "double", "",3.5
 | |
| 			Property: "FocusDistance", "double", "",200
 | |
| 			Property: "UseAntialiasing", "bool", "",0
 | |
| 			Property: "AntialiasingIntensity", "double", "",0.77777
 | |
| 			Property: "UseAccumulationBuffer", "bool", "",0
 | |
| 			Property: "FrameSamplingCount", "int", "",7
 | |
| 		}
 | |
| 		MultiLayer: 0
 | |
| 		MultiTake: 0
 | |
| 		Hidden: "True"
 | |
| 		Shading: Y
 | |
| 		Culling: "CullingOff"
 | |
| 		TypeFlags: "Camera"
 | |
| 		GeometryVersion: 124
 | |
| 		Position: 0,71.3,287.5
 | |
| 		Up: 0,1,0
 | |
| 		LookAt: 0,0,0
 | |
| 		ShowInfoOnMoving: 1
 | |
| 		ShowAudio: 0
 | |
| 		AudioColor: 0,1,0
 | |
| 		CameraOrthoZoom: 1
 | |
| 	}
 | |
| 	Model: "Model::Producer Top", "Camera" {
 | |
| 		Version: 232
 | |
| 		Properties60:  {
 | |
| 			Property: "QuaternionInterpolate", "bool", "",0
 | |
| 			Property: "Visibility", "Visibility", "A+",0
 | |
| 			Property: "Lcl Translation", "Lcl Translation", "A+",0,4000,0
 | |
| 			Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0
 | |
| 			Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1
 | |
| 			Property: "RotationOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationActive", "bool", "",0
 | |
| 			Property: "TranslationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMinX", "bool", "",0
 | |
| 			Property: "TranslationMinY", "bool", "",0
 | |
| 			Property: "TranslationMinZ", "bool", "",0
 | |
| 			Property: "TranslationMaxX", "bool", "",0
 | |
| 			Property: "TranslationMaxY", "bool", "",0
 | |
| 			Property: "TranslationMaxZ", "bool", "",0
 | |
| 			Property: "RotationOrder", "enum", "",0
 | |
| 			Property: "RotationSpaceForLimitOnly", "bool", "",0
 | |
| 			Property: "AxisLen", "double", "",10
 | |
| 			Property: "PreRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "PostRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationActive", "bool", "",0
 | |
| 			Property: "RotationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMinX", "bool", "",0
 | |
| 			Property: "RotationMinY", "bool", "",0
 | |
| 			Property: "RotationMinZ", "bool", "",0
 | |
| 			Property: "RotationMaxX", "bool", "",0
 | |
| 			Property: "RotationMaxY", "bool", "",0
 | |
| 			Property: "RotationMaxZ", "bool", "",0
 | |
| 			Property: "RotationStiffnessX", "double", "",0
 | |
| 			Property: "RotationStiffnessY", "double", "",0
 | |
| 			Property: "RotationStiffnessZ", "double", "",0
 | |
| 			Property: "MinDampRangeX", "double", "",0
 | |
| 			Property: "MinDampRangeY", "double", "",0
 | |
| 			Property: "MinDampRangeZ", "double", "",0
 | |
| 			Property: "MaxDampRangeX", "double", "",0
 | |
| 			Property: "MaxDampRangeY", "double", "",0
 | |
| 			Property: "MaxDampRangeZ", "double", "",0
 | |
| 			Property: "MinDampStrengthX", "double", "",0
 | |
| 			Property: "MinDampStrengthY", "double", "",0
 | |
| 			Property: "MinDampStrengthZ", "double", "",0
 | |
| 			Property: "MaxDampStrengthX", "double", "",0
 | |
| 			Property: "MaxDampStrengthY", "double", "",0
 | |
| 			Property: "MaxDampStrengthZ", "double", "",0
 | |
| 			Property: "PreferedAngleX", "double", "",0
 | |
| 			Property: "PreferedAngleY", "double", "",0
 | |
| 			Property: "PreferedAngleZ", "double", "",0
 | |
| 			Property: "InheritType", "enum", "",0
 | |
| 			Property: "ScalingActive", "bool", "",0
 | |
| 			Property: "ScalingMin", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMax", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMinX", "bool", "",0
 | |
| 			Property: "ScalingMinY", "bool", "",0
 | |
| 			Property: "ScalingMinZ", "bool", "",0
 | |
| 			Property: "ScalingMaxX", "bool", "",0
 | |
| 			Property: "ScalingMaxY", "bool", "",0
 | |
| 			Property: "ScalingMaxZ", "bool", "",0
 | |
| 			Property: "GeometricTranslation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricScaling", "Vector3D", "",1,1,1
 | |
| 			Property: "LookAtProperty", "object", ""
 | |
| 			Property: "UpVectorProperty", "object", ""
 | |
| 			Property: "Show", "bool", "",0
 | |
| 			Property: "NegativePercentShapeSupport", "bool", "",1
 | |
| 			Property: "DefaultAttributeIndex", "int", "",0
 | |
| 			Property: "Color", "Color", "A",0.8,0.8,0.8
 | |
| 			Property: "Roll", "Roll", "A+",0
 | |
| 			Property: "FieldOfView", "FieldOfView", "A+",40
 | |
| 			Property: "FieldOfViewX", "FieldOfView", "A+",1
 | |
| 			Property: "FieldOfViewY", "FieldOfView", "A+",1
 | |
| 			Property: "OpticalCenterX", "Real", "A+",0
 | |
| 			Property: "OpticalCenterY", "Real", "A+",0
 | |
| 			Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63
 | |
| 			Property: "TurnTable", "Real", "A+",0
 | |
| 			Property: "DisplayTurnTableIcon", "bool", "",1
 | |
| 			Property: "Motion Blur Intensity", "Real", "A+",1
 | |
| 			Property: "UseMotionBlur", "bool", "",0
 | |
| 			Property: "UseRealTimeMotionBlur", "bool", "",1
 | |
| 			Property: "ResolutionMode", "enum", "",0
 | |
| 			Property: "ApertureMode", "enum", "",2
 | |
| 			Property: "GateFit", "enum", "",0
 | |
| 			Property: "FocalLength", "Real", "A+",21.3544940948486
 | |
| 			Property: "CameraFormat", "enum", "",0
 | |
| 			Property: "AspectW", "double", "",320
 | |
| 			Property: "AspectH", "double", "",200
 | |
| 			Property: "PixelAspectRatio", "double", "",1
 | |
| 			Property: "UseFrameColor", "bool", "",0
 | |
| 			Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3
 | |
| 			Property: "ShowName", "bool", "",1
 | |
| 			Property: "ShowGrid", "bool", "",1
 | |
| 			Property: "ShowOpticalCenter", "bool", "",0
 | |
| 			Property: "ShowAzimut", "bool", "",1
 | |
| 			Property: "ShowTimeCode", "bool", "",0
 | |
| 			Property: "NearPlane", "double", "",1
 | |
| 			Property: "FarPlane", "double", "",30000
 | |
| 			Property: "FilmWidth", "double", "",0.816
 | |
| 			Property: "FilmHeight", "double", "",0.612
 | |
| 			Property: "FilmAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "FilmSqueezeRatio", "double", "",1
 | |
| 			Property: "FilmFormatIndex", "enum", "",4
 | |
| 			Property: "ViewFrustum", "bool", "",1
 | |
| 			Property: "ViewFrustumNearFarPlane", "bool", "",0
 | |
| 			Property: "ViewFrustumBackPlaneMode", "enum", "",2
 | |
| 			Property: "BackPlaneDistance", "double", "",100
 | |
| 			Property: "BackPlaneDistanceMode", "enum", "",0
 | |
| 			Property: "ViewCameraToLookAt", "bool", "",1
 | |
| 			Property: "LockMode", "bool", "",0
 | |
| 			Property: "LockInterestNavigation", "bool", "",0
 | |
| 			Property: "FitImage", "bool", "",0
 | |
| 			Property: "Crop", "bool", "",0
 | |
| 			Property: "Center", "bool", "",1
 | |
| 			Property: "KeepRatio", "bool", "",1
 | |
| 			Property: "BackgroundMode", "enum", "",0
 | |
| 			Property: "BackgroundAlphaTreshold", "double", "",0.5
 | |
| 			Property: "ForegroundTransparent", "bool", "",1
 | |
| 			Property: "DisplaySafeArea", "bool", "",0
 | |
| 			Property: "SafeAreaDisplayStyle", "enum", "",1
 | |
| 			Property: "SafeAreaAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "Use2DMagnifierZoom", "bool", "",0
 | |
| 			Property: "2D Magnifier Zoom", "Real", "A+",100
 | |
| 			Property: "2D Magnifier X", "Real", "A+",50
 | |
| 			Property: "2D Magnifier Y", "Real", "A+",50
 | |
| 			Property: "CameraProjectionType", "enum", "",1
 | |
| 			Property: "UseRealTimeDOFAndAA", "bool", "",0
 | |
| 			Property: "UseDepthOfField", "bool", "",0
 | |
| 			Property: "FocusSource", "enum", "",0
 | |
| 			Property: "FocusAngle", "double", "",3.5
 | |
| 			Property: "FocusDistance", "double", "",200
 | |
| 			Property: "UseAntialiasing", "bool", "",0
 | |
| 			Property: "AntialiasingIntensity", "double", "",0.77777
 | |
| 			Property: "UseAccumulationBuffer", "bool", "",0
 | |
| 			Property: "FrameSamplingCount", "int", "",7
 | |
| 		}
 | |
| 		MultiLayer: 0
 | |
| 		MultiTake: 0
 | |
| 		Hidden: "True"
 | |
| 		Shading: Y
 | |
| 		Culling: "CullingOff"
 | |
| 		TypeFlags: "Camera"
 | |
| 		GeometryVersion: 124
 | |
| 		Position: 0,4000,0
 | |
| 		Up: 0,0,-1
 | |
| 		LookAt: 0,0,0
 | |
| 		ShowInfoOnMoving: 1
 | |
| 		ShowAudio: 0
 | |
| 		AudioColor: 0,1,0
 | |
| 		CameraOrthoZoom: 1
 | |
| 	}
 | |
| 	Model: "Model::Producer Bottom", "Camera" {
 | |
| 		Version: 232
 | |
| 		Properties60:  {
 | |
| 			Property: "QuaternionInterpolate", "bool", "",0
 | |
| 			Property: "Visibility", "Visibility", "A+",0
 | |
| 			Property: "Lcl Translation", "Lcl Translation", "A+",0,-4000,0
 | |
| 			Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0
 | |
| 			Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1
 | |
| 			Property: "RotationOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationActive", "bool", "",0
 | |
| 			Property: "TranslationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMinX", "bool", "",0
 | |
| 			Property: "TranslationMinY", "bool", "",0
 | |
| 			Property: "TranslationMinZ", "bool", "",0
 | |
| 			Property: "TranslationMaxX", "bool", "",0
 | |
| 			Property: "TranslationMaxY", "bool", "",0
 | |
| 			Property: "TranslationMaxZ", "bool", "",0
 | |
| 			Property: "RotationOrder", "enum", "",0
 | |
| 			Property: "RotationSpaceForLimitOnly", "bool", "",0
 | |
| 			Property: "AxisLen", "double", "",10
 | |
| 			Property: "PreRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "PostRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationActive", "bool", "",0
 | |
| 			Property: "RotationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMinX", "bool", "",0
 | |
| 			Property: "RotationMinY", "bool", "",0
 | |
| 			Property: "RotationMinZ", "bool", "",0
 | |
| 			Property: "RotationMaxX", "bool", "",0
 | |
| 			Property: "RotationMaxY", "bool", "",0
 | |
| 			Property: "RotationMaxZ", "bool", "",0
 | |
| 			Property: "RotationStiffnessX", "double", "",0
 | |
| 			Property: "RotationStiffnessY", "double", "",0
 | |
| 			Property: "RotationStiffnessZ", "double", "",0
 | |
| 			Property: "MinDampRangeX", "double", "",0
 | |
| 			Property: "MinDampRangeY", "double", "",0
 | |
| 			Property: "MinDampRangeZ", "double", "",0
 | |
| 			Property: "MaxDampRangeX", "double", "",0
 | |
| 			Property: "MaxDampRangeY", "double", "",0
 | |
| 			Property: "MaxDampRangeZ", "double", "",0
 | |
| 			Property: "MinDampStrengthX", "double", "",0
 | |
| 			Property: "MinDampStrengthY", "double", "",0
 | |
| 			Property: "MinDampStrengthZ", "double", "",0
 | |
| 			Property: "MaxDampStrengthX", "double", "",0
 | |
| 			Property: "MaxDampStrengthY", "double", "",0
 | |
| 			Property: "MaxDampStrengthZ", "double", "",0
 | |
| 			Property: "PreferedAngleX", "double", "",0
 | |
| 			Property: "PreferedAngleY", "double", "",0
 | |
| 			Property: "PreferedAngleZ", "double", "",0
 | |
| 			Property: "InheritType", "enum", "",0
 | |
| 			Property: "ScalingActive", "bool", "",0
 | |
| 			Property: "ScalingMin", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMax", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMinX", "bool", "",0
 | |
| 			Property: "ScalingMinY", "bool", "",0
 | |
| 			Property: "ScalingMinZ", "bool", "",0
 | |
| 			Property: "ScalingMaxX", "bool", "",0
 | |
| 			Property: "ScalingMaxY", "bool", "",0
 | |
| 			Property: "ScalingMaxZ", "bool", "",0
 | |
| 			Property: "GeometricTranslation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricScaling", "Vector3D", "",1,1,1
 | |
| 			Property: "LookAtProperty", "object", ""
 | |
| 			Property: "UpVectorProperty", "object", ""
 | |
| 			Property: "Show", "bool", "",0
 | |
| 			Property: "NegativePercentShapeSupport", "bool", "",1
 | |
| 			Property: "DefaultAttributeIndex", "int", "",0
 | |
| 			Property: "Color", "Color", "A",0.8,0.8,0.8
 | |
| 			Property: "Roll", "Roll", "A+",0
 | |
| 			Property: "FieldOfView", "FieldOfView", "A+",40
 | |
| 			Property: "FieldOfViewX", "FieldOfView", "A+",1
 | |
| 			Property: "FieldOfViewY", "FieldOfView", "A+",1
 | |
| 			Property: "OpticalCenterX", "Real", "A+",0
 | |
| 			Property: "OpticalCenterY", "Real", "A+",0
 | |
| 			Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63
 | |
| 			Property: "TurnTable", "Real", "A+",0
 | |
| 			Property: "DisplayTurnTableIcon", "bool", "",1
 | |
| 			Property: "Motion Blur Intensity", "Real", "A+",1
 | |
| 			Property: "UseMotionBlur", "bool", "",0
 | |
| 			Property: "UseRealTimeMotionBlur", "bool", "",1
 | |
| 			Property: "ResolutionMode", "enum", "",0
 | |
| 			Property: "ApertureMode", "enum", "",2
 | |
| 			Property: "GateFit", "enum", "",0
 | |
| 			Property: "FocalLength", "Real", "A+",21.3544940948486
 | |
| 			Property: "CameraFormat", "enum", "",0
 | |
| 			Property: "AspectW", "double", "",320
 | |
| 			Property: "AspectH", "double", "",200
 | |
| 			Property: "PixelAspectRatio", "double", "",1
 | |
| 			Property: "UseFrameColor", "bool", "",0
 | |
| 			Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3
 | |
| 			Property: "ShowName", "bool", "",1
 | |
| 			Property: "ShowGrid", "bool", "",1
 | |
| 			Property: "ShowOpticalCenter", "bool", "",0
 | |
| 			Property: "ShowAzimut", "bool", "",1
 | |
| 			Property: "ShowTimeCode", "bool", "",0
 | |
| 			Property: "NearPlane", "double", "",1
 | |
| 			Property: "FarPlane", "double", "",30000
 | |
| 			Property: "FilmWidth", "double", "",0.816
 | |
| 			Property: "FilmHeight", "double", "",0.612
 | |
| 			Property: "FilmAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "FilmSqueezeRatio", "double", "",1
 | |
| 			Property: "FilmFormatIndex", "enum", "",4
 | |
| 			Property: "ViewFrustum", "bool", "",1
 | |
| 			Property: "ViewFrustumNearFarPlane", "bool", "",0
 | |
| 			Property: "ViewFrustumBackPlaneMode", "enum", "",2
 | |
| 			Property: "BackPlaneDistance", "double", "",100
 | |
| 			Property: "BackPlaneDistanceMode", "enum", "",0
 | |
| 			Property: "ViewCameraToLookAt", "bool", "",1
 | |
| 			Property: "LockMode", "bool", "",0
 | |
| 			Property: "LockInterestNavigation", "bool", "",0
 | |
| 			Property: "FitImage", "bool", "",0
 | |
| 			Property: "Crop", "bool", "",0
 | |
| 			Property: "Center", "bool", "",1
 | |
| 			Property: "KeepRatio", "bool", "",1
 | |
| 			Property: "BackgroundMode", "enum", "",0
 | |
| 			Property: "BackgroundAlphaTreshold", "double", "",0.5
 | |
| 			Property: "ForegroundTransparent", "bool", "",1
 | |
| 			Property: "DisplaySafeArea", "bool", "",0
 | |
| 			Property: "SafeAreaDisplayStyle", "enum", "",1
 | |
| 			Property: "SafeAreaAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "Use2DMagnifierZoom", "bool", "",0
 | |
| 			Property: "2D Magnifier Zoom", "Real", "A+",100
 | |
| 			Property: "2D Magnifier X", "Real", "A+",50
 | |
| 			Property: "2D Magnifier Y", "Real", "A+",50
 | |
| 			Property: "CameraProjectionType", "enum", "",1
 | |
| 			Property: "UseRealTimeDOFAndAA", "bool", "",0
 | |
| 			Property: "UseDepthOfField", "bool", "",0
 | |
| 			Property: "FocusSource", "enum", "",0
 | |
| 			Property: "FocusAngle", "double", "",3.5
 | |
| 			Property: "FocusDistance", "double", "",200
 | |
| 			Property: "UseAntialiasing", "bool", "",0
 | |
| 			Property: "AntialiasingIntensity", "double", "",0.77777
 | |
| 			Property: "UseAccumulationBuffer", "bool", "",0
 | |
| 			Property: "FrameSamplingCount", "int", "",7
 | |
| 		}
 | |
| 		MultiLayer: 0
 | |
| 		MultiTake: 0
 | |
| 		Hidden: "True"
 | |
| 		Shading: Y
 | |
| 		Culling: "CullingOff"
 | |
| 		TypeFlags: "Camera"
 | |
| 		GeometryVersion: 124
 | |
| 		Position: 0,-4000,0
 | |
| 		Up: 0,0,-1
 | |
| 		LookAt: 0,0,0
 | |
| 		ShowInfoOnMoving: 1
 | |
| 		ShowAudio: 0
 | |
| 		AudioColor: 0,1,0
 | |
| 		CameraOrthoZoom: 1
 | |
| 	}
 | |
| 	Model: "Model::Producer Front", "Camera" {
 | |
| 		Version: 232
 | |
| 		Properties60:  {
 | |
| 			Property: "QuaternionInterpolate", "bool", "",0
 | |
| 			Property: "Visibility", "Visibility", "A+",0
 | |
| 			Property: "Lcl Translation", "Lcl Translation", "A+",0,0,4000
 | |
| 			Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0
 | |
| 			Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1
 | |
| 			Property: "RotationOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationActive", "bool", "",0
 | |
| 			Property: "TranslationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMinX", "bool", "",0
 | |
| 			Property: "TranslationMinY", "bool", "",0
 | |
| 			Property: "TranslationMinZ", "bool", "",0
 | |
| 			Property: "TranslationMaxX", "bool", "",0
 | |
| 			Property: "TranslationMaxY", "bool", "",0
 | |
| 			Property: "TranslationMaxZ", "bool", "",0
 | |
| 			Property: "RotationOrder", "enum", "",0
 | |
| 			Property: "RotationSpaceForLimitOnly", "bool", "",0
 | |
| 			Property: "AxisLen", "double", "",10
 | |
| 			Property: "PreRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "PostRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationActive", "bool", "",0
 | |
| 			Property: "RotationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMinX", "bool", "",0
 | |
| 			Property: "RotationMinY", "bool", "",0
 | |
| 			Property: "RotationMinZ", "bool", "",0
 | |
| 			Property: "RotationMaxX", "bool", "",0
 | |
| 			Property: "RotationMaxY", "bool", "",0
 | |
| 			Property: "RotationMaxZ", "bool", "",0
 | |
| 			Property: "RotationStiffnessX", "double", "",0
 | |
| 			Property: "RotationStiffnessY", "double", "",0
 | |
| 			Property: "RotationStiffnessZ", "double", "",0
 | |
| 			Property: "MinDampRangeX", "double", "",0
 | |
| 			Property: "MinDampRangeY", "double", "",0
 | |
| 			Property: "MinDampRangeZ", "double", "",0
 | |
| 			Property: "MaxDampRangeX", "double", "",0
 | |
| 			Property: "MaxDampRangeY", "double", "",0
 | |
| 			Property: "MaxDampRangeZ", "double", "",0
 | |
| 			Property: "MinDampStrengthX", "double", "",0
 | |
| 			Property: "MinDampStrengthY", "double", "",0
 | |
| 			Property: "MinDampStrengthZ", "double", "",0
 | |
| 			Property: "MaxDampStrengthX", "double", "",0
 | |
| 			Property: "MaxDampStrengthY", "double", "",0
 | |
| 			Property: "MaxDampStrengthZ", "double", "",0
 | |
| 			Property: "PreferedAngleX", "double", "",0
 | |
| 			Property: "PreferedAngleY", "double", "",0
 | |
| 			Property: "PreferedAngleZ", "double", "",0
 | |
| 			Property: "InheritType", "enum", "",0
 | |
| 			Property: "ScalingActive", "bool", "",0
 | |
| 			Property: "ScalingMin", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMax", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMinX", "bool", "",0
 | |
| 			Property: "ScalingMinY", "bool", "",0
 | |
| 			Property: "ScalingMinZ", "bool", "",0
 | |
| 			Property: "ScalingMaxX", "bool", "",0
 | |
| 			Property: "ScalingMaxY", "bool", "",0
 | |
| 			Property: "ScalingMaxZ", "bool", "",0
 | |
| 			Property: "GeometricTranslation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricScaling", "Vector3D", "",1,1,1
 | |
| 			Property: "LookAtProperty", "object", ""
 | |
| 			Property: "UpVectorProperty", "object", ""
 | |
| 			Property: "Show", "bool", "",0
 | |
| 			Property: "NegativePercentShapeSupport", "bool", "",1
 | |
| 			Property: "DefaultAttributeIndex", "int", "",0
 | |
| 			Property: "Color", "Color", "A",0.8,0.8,0.8
 | |
| 			Property: "Roll", "Roll", "A+",0
 | |
| 			Property: "FieldOfView", "FieldOfView", "A+",40
 | |
| 			Property: "FieldOfViewX", "FieldOfView", "A+",1
 | |
| 			Property: "FieldOfViewY", "FieldOfView", "A+",1
 | |
| 			Property: "OpticalCenterX", "Real", "A+",0
 | |
| 			Property: "OpticalCenterY", "Real", "A+",0
 | |
| 			Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63
 | |
| 			Property: "TurnTable", "Real", "A+",0
 | |
| 			Property: "DisplayTurnTableIcon", "bool", "",1
 | |
| 			Property: "Motion Blur Intensity", "Real", "A+",1
 | |
| 			Property: "UseMotionBlur", "bool", "",0
 | |
| 			Property: "UseRealTimeMotionBlur", "bool", "",1
 | |
| 			Property: "ResolutionMode", "enum", "",0
 | |
| 			Property: "ApertureMode", "enum", "",2
 | |
| 			Property: "GateFit", "enum", "",0
 | |
| 			Property: "FocalLength", "Real", "A+",21.3544940948486
 | |
| 			Property: "CameraFormat", "enum", "",0
 | |
| 			Property: "AspectW", "double", "",320
 | |
| 			Property: "AspectH", "double", "",200
 | |
| 			Property: "PixelAspectRatio", "double", "",1
 | |
| 			Property: "UseFrameColor", "bool", "",0
 | |
| 			Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3
 | |
| 			Property: "ShowName", "bool", "",1
 | |
| 			Property: "ShowGrid", "bool", "",1
 | |
| 			Property: "ShowOpticalCenter", "bool", "",0
 | |
| 			Property: "ShowAzimut", "bool", "",1
 | |
| 			Property: "ShowTimeCode", "bool", "",0
 | |
| 			Property: "NearPlane", "double", "",1
 | |
| 			Property: "FarPlane", "double", "",30000
 | |
| 			Property: "FilmWidth", "double", "",0.816
 | |
| 			Property: "FilmHeight", "double", "",0.612
 | |
| 			Property: "FilmAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "FilmSqueezeRatio", "double", "",1
 | |
| 			Property: "FilmFormatIndex", "enum", "",4
 | |
| 			Property: "ViewFrustum", "bool", "",1
 | |
| 			Property: "ViewFrustumNearFarPlane", "bool", "",0
 | |
| 			Property: "ViewFrustumBackPlaneMode", "enum", "",2
 | |
| 			Property: "BackPlaneDistance", "double", "",100
 | |
| 			Property: "BackPlaneDistanceMode", "enum", "",0
 | |
| 			Property: "ViewCameraToLookAt", "bool", "",1
 | |
| 			Property: "LockMode", "bool", "",0
 | |
| 			Property: "LockInterestNavigation", "bool", "",0
 | |
| 			Property: "FitImage", "bool", "",0
 | |
| 			Property: "Crop", "bool", "",0
 | |
| 			Property: "Center", "bool", "",1
 | |
| 			Property: "KeepRatio", "bool", "",1
 | |
| 			Property: "BackgroundMode", "enum", "",0
 | |
| 			Property: "BackgroundAlphaTreshold", "double", "",0.5
 | |
| 			Property: "ForegroundTransparent", "bool", "",1
 | |
| 			Property: "DisplaySafeArea", "bool", "",0
 | |
| 			Property: "SafeAreaDisplayStyle", "enum", "",1
 | |
| 			Property: "SafeAreaAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "Use2DMagnifierZoom", "bool", "",0
 | |
| 			Property: "2D Magnifier Zoom", "Real", "A+",100
 | |
| 			Property: "2D Magnifier X", "Real", "A+",50
 | |
| 			Property: "2D Magnifier Y", "Real", "A+",50
 | |
| 			Property: "CameraProjectionType", "enum", "",1
 | |
| 			Property: "UseRealTimeDOFAndAA", "bool", "",0
 | |
| 			Property: "UseDepthOfField", "bool", "",0
 | |
| 			Property: "FocusSource", "enum", "",0
 | |
| 			Property: "FocusAngle", "double", "",3.5
 | |
| 			Property: "FocusDistance", "double", "",200
 | |
| 			Property: "UseAntialiasing", "bool", "",0
 | |
| 			Property: "AntialiasingIntensity", "double", "",0.77777
 | |
| 			Property: "UseAccumulationBuffer", "bool", "",0
 | |
| 			Property: "FrameSamplingCount", "int", "",7
 | |
| 		}
 | |
| 		MultiLayer: 0
 | |
| 		MultiTake: 0
 | |
| 		Hidden: "True"
 | |
| 		Shading: Y
 | |
| 		Culling: "CullingOff"
 | |
| 		TypeFlags: "Camera"
 | |
| 		GeometryVersion: 124
 | |
| 		Position: 0,0,4000
 | |
| 		Up: 0,1,0
 | |
| 		LookAt: 0,0,0
 | |
| 		ShowInfoOnMoving: 1
 | |
| 		ShowAudio: 0
 | |
| 		AudioColor: 0,1,0
 | |
| 		CameraOrthoZoom: 1
 | |
| 	}
 | |
| 	Model: "Model::Producer Back", "Camera" {
 | |
| 		Version: 232
 | |
| 		Properties60:  {
 | |
| 			Property: "QuaternionInterpolate", "bool", "",0
 | |
| 			Property: "Visibility", "Visibility", "A+",0
 | |
| 			Property: "Lcl Translation", "Lcl Translation", "A+",0,0,-4000
 | |
| 			Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0
 | |
| 			Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1
 | |
| 			Property: "RotationOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationActive", "bool", "",0
 | |
| 			Property: "TranslationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMinX", "bool", "",0
 | |
| 			Property: "TranslationMinY", "bool", "",0
 | |
| 			Property: "TranslationMinZ", "bool", "",0
 | |
| 			Property: "TranslationMaxX", "bool", "",0
 | |
| 			Property: "TranslationMaxY", "bool", "",0
 | |
| 			Property: "TranslationMaxZ", "bool", "",0
 | |
| 			Property: "RotationOrder", "enum", "",0
 | |
| 			Property: "RotationSpaceForLimitOnly", "bool", "",0
 | |
| 			Property: "AxisLen", "double", "",10
 | |
| 			Property: "PreRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "PostRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationActive", "bool", "",0
 | |
| 			Property: "RotationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMinX", "bool", "",0
 | |
| 			Property: "RotationMinY", "bool", "",0
 | |
| 			Property: "RotationMinZ", "bool", "",0
 | |
| 			Property: "RotationMaxX", "bool", "",0
 | |
| 			Property: "RotationMaxY", "bool", "",0
 | |
| 			Property: "RotationMaxZ", "bool", "",0
 | |
| 			Property: "RotationStiffnessX", "double", "",0
 | |
| 			Property: "RotationStiffnessY", "double", "",0
 | |
| 			Property: "RotationStiffnessZ", "double", "",0
 | |
| 			Property: "MinDampRangeX", "double", "",0
 | |
| 			Property: "MinDampRangeY", "double", "",0
 | |
| 			Property: "MinDampRangeZ", "double", "",0
 | |
| 			Property: "MaxDampRangeX", "double", "",0
 | |
| 			Property: "MaxDampRangeY", "double", "",0
 | |
| 			Property: "MaxDampRangeZ", "double", "",0
 | |
| 			Property: "MinDampStrengthX", "double", "",0
 | |
| 			Property: "MinDampStrengthY", "double", "",0
 | |
| 			Property: "MinDampStrengthZ", "double", "",0
 | |
| 			Property: "MaxDampStrengthX", "double", "",0
 | |
| 			Property: "MaxDampStrengthY", "double", "",0
 | |
| 			Property: "MaxDampStrengthZ", "double", "",0
 | |
| 			Property: "PreferedAngleX", "double", "",0
 | |
| 			Property: "PreferedAngleY", "double", "",0
 | |
| 			Property: "PreferedAngleZ", "double", "",0
 | |
| 			Property: "InheritType", "enum", "",0
 | |
| 			Property: "ScalingActive", "bool", "",0
 | |
| 			Property: "ScalingMin", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMax", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMinX", "bool", "",0
 | |
| 			Property: "ScalingMinY", "bool", "",0
 | |
| 			Property: "ScalingMinZ", "bool", "",0
 | |
| 			Property: "ScalingMaxX", "bool", "",0
 | |
| 			Property: "ScalingMaxY", "bool", "",0
 | |
| 			Property: "ScalingMaxZ", "bool", "",0
 | |
| 			Property: "GeometricTranslation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricScaling", "Vector3D", "",1,1,1
 | |
| 			Property: "LookAtProperty", "object", ""
 | |
| 			Property: "UpVectorProperty", "object", ""
 | |
| 			Property: "Show", "bool", "",0
 | |
| 			Property: "NegativePercentShapeSupport", "bool", "",1
 | |
| 			Property: "DefaultAttributeIndex", "int", "",0
 | |
| 			Property: "Color", "Color", "A",0.8,0.8,0.8
 | |
| 			Property: "Roll", "Roll", "A+",0
 | |
| 			Property: "FieldOfView", "FieldOfView", "A+",40
 | |
| 			Property: "FieldOfViewX", "FieldOfView", "A+",1
 | |
| 			Property: "FieldOfViewY", "FieldOfView", "A+",1
 | |
| 			Property: "OpticalCenterX", "Real", "A+",0
 | |
| 			Property: "OpticalCenterY", "Real", "A+",0
 | |
| 			Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63
 | |
| 			Property: "TurnTable", "Real", "A+",0
 | |
| 			Property: "DisplayTurnTableIcon", "bool", "",1
 | |
| 			Property: "Motion Blur Intensity", "Real", "A+",1
 | |
| 			Property: "UseMotionBlur", "bool", "",0
 | |
| 			Property: "UseRealTimeMotionBlur", "bool", "",1
 | |
| 			Property: "ResolutionMode", "enum", "",0
 | |
| 			Property: "ApertureMode", "enum", "",2
 | |
| 			Property: "GateFit", "enum", "",0
 | |
| 			Property: "FocalLength", "Real", "A+",21.3544940948486
 | |
| 			Property: "CameraFormat", "enum", "",0
 | |
| 			Property: "AspectW", "double", "",320
 | |
| 			Property: "AspectH", "double", "",200
 | |
| 			Property: "PixelAspectRatio", "double", "",1
 | |
| 			Property: "UseFrameColor", "bool", "",0
 | |
| 			Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3
 | |
| 			Property: "ShowName", "bool", "",1
 | |
| 			Property: "ShowGrid", "bool", "",1
 | |
| 			Property: "ShowOpticalCenter", "bool", "",0
 | |
| 			Property: "ShowAzimut", "bool", "",1
 | |
| 			Property: "ShowTimeCode", "bool", "",0
 | |
| 			Property: "NearPlane", "double", "",1
 | |
| 			Property: "FarPlane", "double", "",30000
 | |
| 			Property: "FilmWidth", "double", "",0.816
 | |
| 			Property: "FilmHeight", "double", "",0.612
 | |
| 			Property: "FilmAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "FilmSqueezeRatio", "double", "",1
 | |
| 			Property: "FilmFormatIndex", "enum", "",4
 | |
| 			Property: "ViewFrustum", "bool", "",1
 | |
| 			Property: "ViewFrustumNearFarPlane", "bool", "",0
 | |
| 			Property: "ViewFrustumBackPlaneMode", "enum", "",2
 | |
| 			Property: "BackPlaneDistance", "double", "",100
 | |
| 			Property: "BackPlaneDistanceMode", "enum", "",0
 | |
| 			Property: "ViewCameraToLookAt", "bool", "",1
 | |
| 			Property: "LockMode", "bool", "",0
 | |
| 			Property: "LockInterestNavigation", "bool", "",0
 | |
| 			Property: "FitImage", "bool", "",0
 | |
| 			Property: "Crop", "bool", "",0
 | |
| 			Property: "Center", "bool", "",1
 | |
| 			Property: "KeepRatio", "bool", "",1
 | |
| 			Property: "BackgroundMode", "enum", "",0
 | |
| 			Property: "BackgroundAlphaTreshold", "double", "",0.5
 | |
| 			Property: "ForegroundTransparent", "bool", "",1
 | |
| 			Property: "DisplaySafeArea", "bool", "",0
 | |
| 			Property: "SafeAreaDisplayStyle", "enum", "",1
 | |
| 			Property: "SafeAreaAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "Use2DMagnifierZoom", "bool", "",0
 | |
| 			Property: "2D Magnifier Zoom", "Real", "A+",100
 | |
| 			Property: "2D Magnifier X", "Real", "A+",50
 | |
| 			Property: "2D Magnifier Y", "Real", "A+",50
 | |
| 			Property: "CameraProjectionType", "enum", "",1
 | |
| 			Property: "UseRealTimeDOFAndAA", "bool", "",0
 | |
| 			Property: "UseDepthOfField", "bool", "",0
 | |
| 			Property: "FocusSource", "enum", "",0
 | |
| 			Property: "FocusAngle", "double", "",3.5
 | |
| 			Property: "FocusDistance", "double", "",200
 | |
| 			Property: "UseAntialiasing", "bool", "",0
 | |
| 			Property: "AntialiasingIntensity", "double", "",0.77777
 | |
| 			Property: "UseAccumulationBuffer", "bool", "",0
 | |
| 			Property: "FrameSamplingCount", "int", "",7
 | |
| 		}
 | |
| 		MultiLayer: 0
 | |
| 		MultiTake: 0
 | |
| 		Hidden: "True"
 | |
| 		Shading: Y
 | |
| 		Culling: "CullingOff"
 | |
| 		TypeFlags: "Camera"
 | |
| 		GeometryVersion: 124
 | |
| 		Position: 0,0,-4000
 | |
| 		Up: 0,1,0
 | |
| 		LookAt: 0,0,0
 | |
| 		ShowInfoOnMoving: 1
 | |
| 		ShowAudio: 0
 | |
| 		AudioColor: 0,1,0
 | |
| 		CameraOrthoZoom: 1
 | |
| 	}
 | |
| 	Model: "Model::Producer Right", "Camera" {
 | |
| 		Version: 232
 | |
| 		Properties60:  {
 | |
| 			Property: "QuaternionInterpolate", "bool", "",0
 | |
| 			Property: "Visibility", "Visibility", "A+",0
 | |
| 			Property: "Lcl Translation", "Lcl Translation", "A+",4000,0,0
 | |
| 			Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0
 | |
| 			Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1
 | |
| 			Property: "RotationOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationActive", "bool", "",0
 | |
| 			Property: "TranslationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMinX", "bool", "",0
 | |
| 			Property: "TranslationMinY", "bool", "",0
 | |
| 			Property: "TranslationMinZ", "bool", "",0
 | |
| 			Property: "TranslationMaxX", "bool", "",0
 | |
| 			Property: "TranslationMaxY", "bool", "",0
 | |
| 			Property: "TranslationMaxZ", "bool", "",0
 | |
| 			Property: "RotationOrder", "enum", "",0
 | |
| 			Property: "RotationSpaceForLimitOnly", "bool", "",0
 | |
| 			Property: "AxisLen", "double", "",10
 | |
| 			Property: "PreRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "PostRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationActive", "bool", "",0
 | |
| 			Property: "RotationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMinX", "bool", "",0
 | |
| 			Property: "RotationMinY", "bool", "",0
 | |
| 			Property: "RotationMinZ", "bool", "",0
 | |
| 			Property: "RotationMaxX", "bool", "",0
 | |
| 			Property: "RotationMaxY", "bool", "",0
 | |
| 			Property: "RotationMaxZ", "bool", "",0
 | |
| 			Property: "RotationStiffnessX", "double", "",0
 | |
| 			Property: "RotationStiffnessY", "double", "",0
 | |
| 			Property: "RotationStiffnessZ", "double", "",0
 | |
| 			Property: "MinDampRangeX", "double", "",0
 | |
| 			Property: "MinDampRangeY", "double", "",0
 | |
| 			Property: "MinDampRangeZ", "double", "",0
 | |
| 			Property: "MaxDampRangeX", "double", "",0
 | |
| 			Property: "MaxDampRangeY", "double", "",0
 | |
| 			Property: "MaxDampRangeZ", "double", "",0
 | |
| 			Property: "MinDampStrengthX", "double", "",0
 | |
| 			Property: "MinDampStrengthY", "double", "",0
 | |
| 			Property: "MinDampStrengthZ", "double", "",0
 | |
| 			Property: "MaxDampStrengthX", "double", "",0
 | |
| 			Property: "MaxDampStrengthY", "double", "",0
 | |
| 			Property: "MaxDampStrengthZ", "double", "",0
 | |
| 			Property: "PreferedAngleX", "double", "",0
 | |
| 			Property: "PreferedAngleY", "double", "",0
 | |
| 			Property: "PreferedAngleZ", "double", "",0
 | |
| 			Property: "InheritType", "enum", "",0
 | |
| 			Property: "ScalingActive", "bool", "",0
 | |
| 			Property: "ScalingMin", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMax", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMinX", "bool", "",0
 | |
| 			Property: "ScalingMinY", "bool", "",0
 | |
| 			Property: "ScalingMinZ", "bool", "",0
 | |
| 			Property: "ScalingMaxX", "bool", "",0
 | |
| 			Property: "ScalingMaxY", "bool", "",0
 | |
| 			Property: "ScalingMaxZ", "bool", "",0
 | |
| 			Property: "GeometricTranslation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricScaling", "Vector3D", "",1,1,1
 | |
| 			Property: "LookAtProperty", "object", ""
 | |
| 			Property: "UpVectorProperty", "object", ""
 | |
| 			Property: "Show", "bool", "",0
 | |
| 			Property: "NegativePercentShapeSupport", "bool", "",1
 | |
| 			Property: "DefaultAttributeIndex", "int", "",0
 | |
| 			Property: "Color", "Color", "A",0.8,0.8,0.8
 | |
| 			Property: "Roll", "Roll", "A+",0
 | |
| 			Property: "FieldOfView", "FieldOfView", "A+",40
 | |
| 			Property: "FieldOfViewX", "FieldOfView", "A+",1
 | |
| 			Property: "FieldOfViewY", "FieldOfView", "A+",1
 | |
| 			Property: "OpticalCenterX", "Real", "A+",0
 | |
| 			Property: "OpticalCenterY", "Real", "A+",0
 | |
| 			Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63
 | |
| 			Property: "TurnTable", "Real", "A+",0
 | |
| 			Property: "DisplayTurnTableIcon", "bool", "",1
 | |
| 			Property: "Motion Blur Intensity", "Real", "A+",1
 | |
| 			Property: "UseMotionBlur", "bool", "",0
 | |
| 			Property: "UseRealTimeMotionBlur", "bool", "",1
 | |
| 			Property: "ResolutionMode", "enum", "",0
 | |
| 			Property: "ApertureMode", "enum", "",2
 | |
| 			Property: "GateFit", "enum", "",0
 | |
| 			Property: "FocalLength", "Real", "A+",21.3544940948486
 | |
| 			Property: "CameraFormat", "enum", "",0
 | |
| 			Property: "AspectW", "double", "",320
 | |
| 			Property: "AspectH", "double", "",200
 | |
| 			Property: "PixelAspectRatio", "double", "",1
 | |
| 			Property: "UseFrameColor", "bool", "",0
 | |
| 			Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3
 | |
| 			Property: "ShowName", "bool", "",1
 | |
| 			Property: "ShowGrid", "bool", "",1
 | |
| 			Property: "ShowOpticalCenter", "bool", "",0
 | |
| 			Property: "ShowAzimut", "bool", "",1
 | |
| 			Property: "ShowTimeCode", "bool", "",0
 | |
| 			Property: "NearPlane", "double", "",1
 | |
| 			Property: "FarPlane", "double", "",30000
 | |
| 			Property: "FilmWidth", "double", "",0.816
 | |
| 			Property: "FilmHeight", "double", "",0.612
 | |
| 			Property: "FilmAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "FilmSqueezeRatio", "double", "",1
 | |
| 			Property: "FilmFormatIndex", "enum", "",4
 | |
| 			Property: "ViewFrustum", "bool", "",1
 | |
| 			Property: "ViewFrustumNearFarPlane", "bool", "",0
 | |
| 			Property: "ViewFrustumBackPlaneMode", "enum", "",2
 | |
| 			Property: "BackPlaneDistance", "double", "",100
 | |
| 			Property: "BackPlaneDistanceMode", "enum", "",0
 | |
| 			Property: "ViewCameraToLookAt", "bool", "",1
 | |
| 			Property: "LockMode", "bool", "",0
 | |
| 			Property: "LockInterestNavigation", "bool", "",0
 | |
| 			Property: "FitImage", "bool", "",0
 | |
| 			Property: "Crop", "bool", "",0
 | |
| 			Property: "Center", "bool", "",1
 | |
| 			Property: "KeepRatio", "bool", "",1
 | |
| 			Property: "BackgroundMode", "enum", "",0
 | |
| 			Property: "BackgroundAlphaTreshold", "double", "",0.5
 | |
| 			Property: "ForegroundTransparent", "bool", "",1
 | |
| 			Property: "DisplaySafeArea", "bool", "",0
 | |
| 			Property: "SafeAreaDisplayStyle", "enum", "",1
 | |
| 			Property: "SafeAreaAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "Use2DMagnifierZoom", "bool", "",0
 | |
| 			Property: "2D Magnifier Zoom", "Real", "A+",100
 | |
| 			Property: "2D Magnifier X", "Real", "A+",50
 | |
| 			Property: "2D Magnifier Y", "Real", "A+",50
 | |
| 			Property: "CameraProjectionType", "enum", "",1
 | |
| 			Property: "UseRealTimeDOFAndAA", "bool", "",0
 | |
| 			Property: "UseDepthOfField", "bool", "",0
 | |
| 			Property: "FocusSource", "enum", "",0
 | |
| 			Property: "FocusAngle", "double", "",3.5
 | |
| 			Property: "FocusDistance", "double", "",200
 | |
| 			Property: "UseAntialiasing", "bool", "",0
 | |
| 			Property: "AntialiasingIntensity", "double", "",0.77777
 | |
| 			Property: "UseAccumulationBuffer", "bool", "",0
 | |
| 			Property: "FrameSamplingCount", "int", "",7
 | |
| 		}
 | |
| 		MultiLayer: 0
 | |
| 		MultiTake: 0
 | |
| 		Hidden: "True"
 | |
| 		Shading: Y
 | |
| 		Culling: "CullingOff"
 | |
| 		TypeFlags: "Camera"
 | |
| 		GeometryVersion: 124
 | |
| 		Position: 4000,0,0
 | |
| 		Up: 0,1,0
 | |
| 		LookAt: 0,0,0
 | |
| 		ShowInfoOnMoving: 1
 | |
| 		ShowAudio: 0
 | |
| 		AudioColor: 0,1,0
 | |
| 		CameraOrthoZoom: 1
 | |
| 	}
 | |
| 	Model: "Model::Producer Left", "Camera" {
 | |
| 		Version: 232
 | |
| 		Properties60:  {
 | |
| 			Property: "QuaternionInterpolate", "bool", "",0
 | |
| 			Property: "Visibility", "Visibility", "A+",0
 | |
| 			Property: "Lcl Translation", "Lcl Translation", "A+",-4000,0,0
 | |
| 			Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0
 | |
| 			Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1
 | |
| 			Property: "RotationOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationActive", "bool", "",0
 | |
| 			Property: "TranslationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMinX", "bool", "",0
 | |
| 			Property: "TranslationMinY", "bool", "",0
 | |
| 			Property: "TranslationMinZ", "bool", "",0
 | |
| 			Property: "TranslationMaxX", "bool", "",0
 | |
| 			Property: "TranslationMaxY", "bool", "",0
 | |
| 			Property: "TranslationMaxZ", "bool", "",0
 | |
| 			Property: "RotationOrder", "enum", "",0
 | |
| 			Property: "RotationSpaceForLimitOnly", "bool", "",0
 | |
| 			Property: "AxisLen", "double", "",10
 | |
| 			Property: "PreRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "PostRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationActive", "bool", "",0
 | |
| 			Property: "RotationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMinX", "bool", "",0
 | |
| 			Property: "RotationMinY", "bool", "",0
 | |
| 			Property: "RotationMinZ", "bool", "",0
 | |
| 			Property: "RotationMaxX", "bool", "",0
 | |
| 			Property: "RotationMaxY", "bool", "",0
 | |
| 			Property: "RotationMaxZ", "bool", "",0
 | |
| 			Property: "RotationStiffnessX", "double", "",0
 | |
| 			Property: "RotationStiffnessY", "double", "",0
 | |
| 			Property: "RotationStiffnessZ", "double", "",0
 | |
| 			Property: "MinDampRangeX", "double", "",0
 | |
| 			Property: "MinDampRangeY", "double", "",0
 | |
| 			Property: "MinDampRangeZ", "double", "",0
 | |
| 			Property: "MaxDampRangeX", "double", "",0
 | |
| 			Property: "MaxDampRangeY", "double", "",0
 | |
| 			Property: "MaxDampRangeZ", "double", "",0
 | |
| 			Property: "MinDampStrengthX", "double", "",0
 | |
| 			Property: "MinDampStrengthY", "double", "",0
 | |
| 			Property: "MinDampStrengthZ", "double", "",0
 | |
| 			Property: "MaxDampStrengthX", "double", "",0
 | |
| 			Property: "MaxDampStrengthY", "double", "",0
 | |
| 			Property: "MaxDampStrengthZ", "double", "",0
 | |
| 			Property: "PreferedAngleX", "double", "",0
 | |
| 			Property: "PreferedAngleY", "double", "",0
 | |
| 			Property: "PreferedAngleZ", "double", "",0
 | |
| 			Property: "InheritType", "enum", "",0
 | |
| 			Property: "ScalingActive", "bool", "",0
 | |
| 			Property: "ScalingMin", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMax", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMinX", "bool", "",0
 | |
| 			Property: "ScalingMinY", "bool", "",0
 | |
| 			Property: "ScalingMinZ", "bool", "",0
 | |
| 			Property: "ScalingMaxX", "bool", "",0
 | |
| 			Property: "ScalingMaxY", "bool", "",0
 | |
| 			Property: "ScalingMaxZ", "bool", "",0
 | |
| 			Property: "GeometricTranslation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricScaling", "Vector3D", "",1,1,1
 | |
| 			Property: "LookAtProperty", "object", ""
 | |
| 			Property: "UpVectorProperty", "object", ""
 | |
| 			Property: "Show", "bool", "",0
 | |
| 			Property: "NegativePercentShapeSupport", "bool", "",1
 | |
| 			Property: "DefaultAttributeIndex", "int", "",0
 | |
| 			Property: "Color", "Color", "A",0.8,0.8,0.8
 | |
| 			Property: "Roll", "Roll", "A+",0
 | |
| 			Property: "FieldOfView", "FieldOfView", "A+",40
 | |
| 			Property: "FieldOfViewX", "FieldOfView", "A+",1
 | |
| 			Property: "FieldOfViewY", "FieldOfView", "A+",1
 | |
| 			Property: "OpticalCenterX", "Real", "A+",0
 | |
| 			Property: "OpticalCenterY", "Real", "A+",0
 | |
| 			Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63
 | |
| 			Property: "TurnTable", "Real", "A+",0
 | |
| 			Property: "DisplayTurnTableIcon", "bool", "",1
 | |
| 			Property: "Motion Blur Intensity", "Real", "A+",1
 | |
| 			Property: "UseMotionBlur", "bool", "",0
 | |
| 			Property: "UseRealTimeMotionBlur", "bool", "",1
 | |
| 			Property: "ResolutionMode", "enum", "",0
 | |
| 			Property: "ApertureMode", "enum", "",2
 | |
| 			Property: "GateFit", "enum", "",0
 | |
| 			Property: "FocalLength", "Real", "A+",21.3544940948486
 | |
| 			Property: "CameraFormat", "enum", "",0
 | |
| 			Property: "AspectW", "double", "",320
 | |
| 			Property: "AspectH", "double", "",200
 | |
| 			Property: "PixelAspectRatio", "double", "",1
 | |
| 			Property: "UseFrameColor", "bool", "",0
 | |
| 			Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3
 | |
| 			Property: "ShowName", "bool", "",1
 | |
| 			Property: "ShowGrid", "bool", "",1
 | |
| 			Property: "ShowOpticalCenter", "bool", "",0
 | |
| 			Property: "ShowAzimut", "bool", "",1
 | |
| 			Property: "ShowTimeCode", "bool", "",0
 | |
| 			Property: "NearPlane", "double", "",1
 | |
| 			Property: "FarPlane", "double", "",30000
 | |
| 			Property: "FilmWidth", "double", "",0.816
 | |
| 			Property: "FilmHeight", "double", "",0.612
 | |
| 			Property: "FilmAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "FilmSqueezeRatio", "double", "",1
 | |
| 			Property: "FilmFormatIndex", "enum", "",4
 | |
| 			Property: "ViewFrustum", "bool", "",1
 | |
| 			Property: "ViewFrustumNearFarPlane", "bool", "",0
 | |
| 			Property: "ViewFrustumBackPlaneMode", "enum", "",2
 | |
| 			Property: "BackPlaneDistance", "double", "",100
 | |
| 			Property: "BackPlaneDistanceMode", "enum", "",0
 | |
| 			Property: "ViewCameraToLookAt", "bool", "",1
 | |
| 			Property: "LockMode", "bool", "",0
 | |
| 			Property: "LockInterestNavigation", "bool", "",0
 | |
| 			Property: "FitImage", "bool", "",0
 | |
| 			Property: "Crop", "bool", "",0
 | |
| 			Property: "Center", "bool", "",1
 | |
| 			Property: "KeepRatio", "bool", "",1
 | |
| 			Property: "BackgroundMode", "enum", "",0
 | |
| 			Property: "BackgroundAlphaTreshold", "double", "",0.5
 | |
| 			Property: "ForegroundTransparent", "bool", "",1
 | |
| 			Property: "DisplaySafeArea", "bool", "",0
 | |
| 			Property: "SafeAreaDisplayStyle", "enum", "",1
 | |
| 			Property: "SafeAreaAspectRatio", "double", "",1.33333333333333
 | |
| 			Property: "Use2DMagnifierZoom", "bool", "",0
 | |
| 			Property: "2D Magnifier Zoom", "Real", "A+",100
 | |
| 			Property: "2D Magnifier X", "Real", "A+",50
 | |
| 			Property: "2D Magnifier Y", "Real", "A+",50
 | |
| 			Property: "CameraProjectionType", "enum", "",1
 | |
| 			Property: "UseRealTimeDOFAndAA", "bool", "",0
 | |
| 			Property: "UseDepthOfField", "bool", "",0
 | |
| 			Property: "FocusSource", "enum", "",0
 | |
| 			Property: "FocusAngle", "double", "",3.5
 | |
| 			Property: "FocusDistance", "double", "",200
 | |
| 			Property: "UseAntialiasing", "bool", "",0
 | |
| 			Property: "AntialiasingIntensity", "double", "",0.77777
 | |
| 			Property: "UseAccumulationBuffer", "bool", "",0
 | |
| 			Property: "FrameSamplingCount", "int", "",7
 | |
| 		}
 | |
| 		MultiLayer: 0
 | |
| 		MultiTake: 0
 | |
| 		Hidden: "True"
 | |
| 		Shading: Y
 | |
| 		Culling: "CullingOff"
 | |
| 		TypeFlags: "Camera"
 | |
| 		GeometryVersion: 124
 | |
| 		Position: -4000,0,0
 | |
| 		Up: 0,1,0
 | |
| 		LookAt: 0,0,0
 | |
| 		ShowInfoOnMoving: 1
 | |
| 		ShowAudio: 0
 | |
| 		AudioColor: 0,1,0
 | |
| 		CameraOrthoZoom: 1
 | |
| 	}''')
 | |
| 	
 | |
| 	
 | |
| 	def write_object_props(ob):
 | |
| 		# if the type is 0 its an empty otherwise its a mesh
 | |
| 		# only difference at the moment is one has a color
 | |
| 		file.write(\
 | |
| '''
 | |
| 		Properties60:  {
 | |
| 			Property: "QuaternionInterpolate", "bool", "",0
 | |
| 			Property: "Visibility", "Visibility", "A+",1
 | |
| 			Property: "Lcl Translation", "Lcl Translation", "A+",0,0,0
 | |
| 			Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0
 | |
| 			Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1
 | |
| 			Property: "RotationOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingOffset", "Vector3D", "",0,0,0
 | |
| 			Property: "ScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationActive", "bool", "",0
 | |
| 			Property: "TranslationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "TranslationMinX", "bool", "",0
 | |
| 			Property: "TranslationMinY", "bool", "",0
 | |
| 			Property: "TranslationMinZ", "bool", "",0
 | |
| 			Property: "TranslationMaxX", "bool", "",0
 | |
| 			Property: "TranslationMaxY", "bool", "",0
 | |
| 			Property: "TranslationMaxZ", "bool", "",0
 | |
| 			Property: "RotationOrder", "enum", "",0
 | |
| 			Property: "RotationSpaceForLimitOnly", "bool", "",0
 | |
| 			Property: "AxisLen", "double", "",10
 | |
| 			Property: "PreRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "PostRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationActive", "bool", "",0
 | |
| 			Property: "RotationMin", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMax", "Vector3D", "",0,0,0
 | |
| 			Property: "RotationMinX", "bool", "",0
 | |
| 			Property: "RotationMinY", "bool", "",0
 | |
| 			Property: "RotationMinZ", "bool", "",0
 | |
| 			Property: "RotationMaxX", "bool", "",0
 | |
| 			Property: "RotationMaxY", "bool", "",0
 | |
| 			Property: "RotationMaxZ", "bool", "",0
 | |
| 			Property: "RotationStiffnessX", "double", "",0
 | |
| 			Property: "RotationStiffnessY", "double", "",0
 | |
| 			Property: "RotationStiffnessZ", "double", "",0
 | |
| 			Property: "MinDampRangeX", "double", "",0
 | |
| 			Property: "MinDampRangeY", "double", "",0
 | |
| 			Property: "MinDampRangeZ", "double", "",0
 | |
| 			Property: "MaxDampRangeX", "double", "",0
 | |
| 			Property: "MaxDampRangeY", "double", "",0
 | |
| 			Property: "MaxDampRangeZ", "double", "",0
 | |
| 			Property: "MinDampStrengthX", "double", "",0
 | |
| 			Property: "MinDampStrengthY", "double", "",0
 | |
| 			Property: "MinDampStrengthZ", "double", "",0
 | |
| 			Property: "MaxDampStrengthX", "double", "",0
 | |
| 			Property: "MaxDampStrengthY", "double", "",0
 | |
| 			Property: "MaxDampStrengthZ", "double", "",0
 | |
| 			Property: "PreferedAngleX", "double", "",0
 | |
| 			Property: "PreferedAngleY", "double", "",0
 | |
| 			Property: "PreferedAngleZ", "double", "",0
 | |
| 			Property: "InheritType", "enum", "",0
 | |
| 			Property: "ScalingActive", "bool", "",0
 | |
| 			Property: "ScalingMin", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMax", "Vector3D", "",1,1,1
 | |
| 			Property: "ScalingMinX", "bool", "",0
 | |
| 			Property: "ScalingMinY", "bool", "",0
 | |
| 			Property: "ScalingMinZ", "bool", "",0
 | |
| 			Property: "ScalingMaxX", "bool", "",0
 | |
| 			Property: "ScalingMaxY", "bool", "",0
 | |
| 			Property: "ScalingMaxZ", "bool", "",0
 | |
| 			Property: "GeometricTranslation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricRotation", "Vector3D", "",0,0,0
 | |
| 			Property: "GeometricScaling", "Vector3D", "",1,1,1
 | |
| 			Property: "LookAtProperty", "object", ""
 | |
| 			Property: "UpVectorProperty", "object", ""
 | |
| 			Property: "Show", "bool", "",1
 | |
| 			Property: "NegativePercentShapeSupport", "bool", "",1
 | |
| 			Property: "DefaultAttributeIndex", "int", "",0
 | |
| ''')
 | |
| 		if ob:
 | |
| 			# Only mesh objects have color 
 | |
| 			file.write('			Property: "Color", "Color", "A",0.8,0.8,0.8\n')
 | |
| 		
 | |
| 		file.write('		}\n')
 | |
| 	
 | |
| 	
 | |
| 	
 | |
| 	# Material Settings
 | |
| 	world = Blender.World.GetCurrent()
 | |
| 	if world:
 | |
| 		world_amb = world.getAmb()
 | |
| 	else:
 | |
| 		world_amb = (0,0,0) # Default value
 | |
| 	
 | |
| 	
 | |
| 	def write_material(matname, mat):
 | |
| 		file.write('\n	Material: "Material::%s", "" {' % matname)
 | |
| 		
 | |
| 		# Todo, add more material Properties.
 | |
| 		if mat:
 | |
| 			mat_cold = tuple(mat.rgbCol)
 | |
| 			mat_cols = tuple(mat.rgbCol)
 | |
| 			mat_amb = tuple([c for c in world_amb])
 | |
| 		else:
 | |
| 			mat_cols = mat_cold = 0.8, 0.8, 0.8
 | |
| 			mat_amb = 0.0,0.0,0.0
 | |
| 		
 | |
| 		file.write('''
 | |
| 		Version: 102
 | |
| 		ShadingModel: "phong"
 | |
| 		MultiLayer: 0
 | |
| 		Properties60:  {
 | |
| 			Property: "ShadingModel", "KString", "", "Phong"
 | |
| 			Property: "MultiLayer", "bool", "",0
 | |
| 			Property: "EmissiveColor", "ColorRGB", "",0,0,0
 | |
| 			Property: "EmissiveFactor", "double", "",1
 | |
| ''')
 | |
| 		file.write('			Property: "AmbientColor", "ColorRGB", "",%.1f,%.1f,%.1f\n' % mat_amb)
 | |
| 		file.write('			Property: "AmbientFactor", "double", "",1\n')
 | |
| 		file.write('			Property: "DiffuseColor", "ColorRGB", "",%.1f,%.1f,%.1f\n' % mat_cold)
 | |
| 		file.write('			Property: "DiffuseFactor", "double", "",1\n')
 | |
| 		file.write('			Property: "Bump", "Vector3D", "",0,0,0\n')
 | |
| 		file.write('			Property: "TransparentColor", "ColorRGB", "",1,1,1\n')
 | |
| 		file.write('			Property: "TransparencyFactor", "double", "",0\n')
 | |
| 		file.write('			Property: "SpecularColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cols)
 | |
| 		
 | |
| 		file.write('''
 | |
| 			Property: "SpecularFactor", "double", "",1
 | |
| 			Property: "ShininessExponent", "double", "",80.0
 | |
| 			Property: "ReflectionColor", "ColorRGB", "",0,0,0
 | |
| 			Property: "ReflectionFactor", "double", "",1
 | |
| 			Property: "Emissive", "Vector3D", "",0,0,0
 | |
| 			Property: "Ambient", "Vector3D", "",0,0,0
 | |
| 			Property: "Diffuse", "Vector3D", "",0,0.8,0
 | |
| 			Property: "Specular", "Vector3D", "",0.5,0.5,0.5
 | |
| 			Property: "Shininess", "double", "",80.0
 | |
| 			Property: "Opacity", "double", "",1
 | |
| 			Property: "Reflectivity", "double", "",0
 | |
| 		}
 | |
| 	}''')
 | |
| 	
 | |
| 	
 | |
| 	def write_video(texname, tex):
 | |
| 		# Same as texture really!
 | |
| 		file.write('\n	Video: "Video::%s", "Clip" {' % texname)
 | |
| 		
 | |
| 		file.write('''
 | |
| 		Type: "Clip"
 | |
| 		Properties60:  {
 | |
| 			Property: "FrameRate", "double", "",0
 | |
| 			Property: "LastFrame", "int", "",0
 | |
| 			Property: "Width", "int", "",0
 | |
| 			Property: "Height", "int", "",0''')
 | |
| 		if tex:
 | |
| 			fname = tex.filename
 | |
| 			fname_strip = strip_path(fname)
 | |
| 		else:
 | |
| 			fname = fname_strip = ''
 | |
| 		
 | |
| 		file.write('\n			Property: "Path", "charptr", "", "%s"' % fname_strip)
 | |
| 		
 | |
| 		
 | |
| 		file.write('''
 | |
| 			Property: "StartFrame", "int", "",0
 | |
| 			Property: "StopFrame", "int", "",0
 | |
| 			Property: "PlaySpeed", "double", "",1
 | |
| 			Property: "Offset", "KTime", "",0
 | |
| 			Property: "InterlaceMode", "enum", "",0
 | |
| 			Property: "FreeRunning", "bool", "",0
 | |
| 			Property: "Loop", "bool", "",0
 | |
| 			Property: "AccessMode", "enum", "",0
 | |
| 		}
 | |
| 		UseMipMap: 0''')
 | |
| 		
 | |
| 		file.write('\n		Filename: "%s"' % fname_strip)
 | |
| 		if fname_strip: fname_strip = '/' + fname_strip
 | |
| 		file.write('\n		RelativeFilename: "fbx%s"' % fname_strip) # make relative
 | |
| 		file.write('\n	}')
 | |
| 
 | |
| 	
 | |
| 	def write_texture(texname, tex, num):
 | |
| 		# if tex == None then this is a dummy tex
 | |
| 		file.write('\n	Texture: "Texture::%s", "TextureVideoClip" {' % texname)
 | |
| 		file.write('\n		Type: "TextureVideoClip"')
 | |
| 		file.write('\n		Version: 202')
 | |
| 		# TODO, rare case _empty_ exists as a name.
 | |
| 		file.write('\n		TextureName: "Texture::%s"' % texname)
 | |
| 		
 | |
| 		file.write('''
 | |
| 		Properties60:  {
 | |
| 			Property: "Translation", "Vector", "A+",0,0,0
 | |
| 			Property: "Rotation", "Vector", "A+",0,0,0
 | |
| 			Property: "Scaling", "Vector", "A+",1,1,1''')
 | |
| 		file.write('\n			Property: "Texture alpha", "Number", "A+",%i' % num)
 | |
| 		file.write('''
 | |
| 			Property: "TextureTypeUse", "enum", "",0
 | |
| 			Property: "CurrentTextureBlendMode", "enum", "",1
 | |
| 			Property: "UseMaterial", "bool", "",0
 | |
| 			Property: "UseMipMap", "bool", "",0
 | |
| 			Property: "CurrentMappingType", "enum", "",0
 | |
| 			Property: "UVSwap", "bool", "",0
 | |
| 			Property: "WrapModeU", "enum", "",0
 | |
| 			Property: "WrapModeV", "enum", "",0
 | |
| 			Property: "TextureRotationPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "TextureScalingPivot", "Vector3D", "",0,0,0
 | |
| 			Property: "VideoProperty", "object", ""
 | |
| 		}''')
 | |
| 		
 | |
| 		file.write('\n		Media: "Video::%s"' % texname)
 | |
| 		if tex:
 | |
| 			fname = tex.filename
 | |
| 			file.write('\n		FileName: "%s"' % strip_path(fname))
 | |
| 			file.write('\n		RelativeFilename: "fbx/%s"' % strip_path(fname)) # need some make relative command
 | |
| 		else:
 | |
| 			file.write('\n		FileName: ""')
 | |
| 			file.write('\n		RelativeFilename: "fbx"')
 | |
| 		
 | |
| 		file.write('''
 | |
| 		ModelUVTranslation: 0,0
 | |
| 		ModelUVScaling: 1,1
 | |
| 		Texture_Alpha_Source: "None"
 | |
| 		Cropping: 0,0,0,0
 | |
| 	}''')
 | |
| 	
 | |
| 	
 | |
| 	scn = Blender.Scene.GetCurrent()
 | |
| 	objects = []
 | |
| 	materials = {}
 | |
| 	textures = {}
 | |
| 	for ob in scn.objects.context:
 | |
| 		me = BPyMesh.getMeshFromObject(ob)
 | |
| 		if me:
 | |
| 			
 | |
| 			for mat in me.materials:
 | |
| 				# 2.44 use mat.lib too for uniqueness
 | |
| 				if mat: materials[mat.name] = mat
 | |
| 			
 | |
| 			if me.faceUV:
 | |
| 				for f in me.faces:
 | |
| 					img = f.image
 | |
| 					if img: textures[img.name] = img
 | |
| 			
 | |
| 			me.transform(ob.matrixWorld)
 | |
| 			BPyMesh.meshCalcNormals(me) # high quality normals nice for realtime engines.
 | |
| 			objects.append( (sane_obname(ob.name), ob, me) )
 | |
| 	
 | |
| 	materials = [(sane_matname(mat.name), mat) for mat in materials.itervalues()]
 | |
| 	textures = [(sane_texname(img.name), img) for img in textures.itervalues()]
 | |
| 	materials.sort() # sort by name
 | |
| 	textures.sort()
 | |
| 	
 | |
| 	if not materials:
 | |
| 		materials = [('null', None)]
 | |
| 	
 | |
| 	material_mapping = {} # blen name : index
 | |
| 	if textures:
 | |
| 		texture_mapping_local = {None:0} # ditto
 | |
| 		i = 0
 | |
| 		for texname, tex in textures:
 | |
| 			texture_mapping_local[tex.name] = i
 | |
| 			i+=1
 | |
| 		textures.insert(0, ('_empty_', None))
 | |
| 	
 | |
| 	
 | |
| 	i = 0
 | |
| 	for matname, mat in materials:
 | |
| 		material_mapping[matname] = i
 | |
| 		i+=1
 | |
| 	
 | |
| 
 | |
| 	camera_count = 8
 | |
| 	file.write(\
 | |
| '''
 | |
| ; Object definitions
 | |
| ;------------------------------------------------------------------
 | |
| 
 | |
| Definitions:  {
 | |
| 	Version: 100
 | |
| 	Count: %i''' % (1+1+camera_count+len(objects)+len(materials)+(len(textures)*2))) # add 1 for the root model 1 for global settings
 | |
| 	
 | |
| 	file.write('''
 | |
| 	ObjectType: "Model" {
 | |
| 		Count: %i
 | |
| 	}''' % (1+camera_count+len(objects))) # add 1 for the root model
 | |
| 	
 | |
| 	file.write('''
 | |
| 	ObjectType: "Geometry" {
 | |
| 		Count: %i
 | |
| 	}''' % len(objects))
 | |
| 	
 | |
| 	if materials:
 | |
| 		file.write('''
 | |
| 	ObjectType: "Material" {
 | |
| 		Count: %i
 | |
| 	}''' % len(materials))
 | |
| 	
 | |
| 	if textures:
 | |
| 		file.write('''
 | |
| 	ObjectType: "Texture" {
 | |
| 		Count: %i
 | |
| 	}''' % len(textures)) # add 1 for an empty tex
 | |
| 		file.write('''
 | |
| 	ObjectType: "Video" {
 | |
| 		Count: %i
 | |
| 	}''' % len(textures)) # add 1 for an empty tex
 | |
| 	
 | |
| 	file.write('''
 | |
| 	ObjectType: "GlobalSettings" {
 | |
| 		Count: 1
 | |
| 	}
 | |
| }
 | |
| ''')
 | |
| 	
 | |
| 	file.write(\
 | |
| '''
 | |
| ; Object properties
 | |
| ;------------------------------------------------------------------
 | |
| 
 | |
| Objects:  {''')
 | |
| 	
 | |
| 	# To comply with other FBX FILES
 | |
| 	write_camera_switch()
 | |
| 	
 | |
| 	# Write the null object
 | |
| 	file.write('''
 | |
| 	Model: "Model::blend_root", "Null" {
 | |
| 		Version: 232''')
 | |
| 	write_object_props(None)
 | |
| 	file.write(\
 | |
| '''		MultiLayer: 0
 | |
| 		MultiTake: 1
 | |
| 		Shading: Y
 | |
| 		Culling: "CullingOff"hr
 | |
| 		TypeFlags: "Null"
 | |
| 	}''')
 | |
| 
 | |
| 	
 | |
| 	for obname, ob, me in objects:
 | |
| 		file.write('\n	Model: "Model::%s", "Mesh" {\n' % sane_obname(ob.name))
 | |
| 		file.write('		Version: 232') # newline is added in write_object_props
 | |
| 		write_object_props(ob)
 | |
| 		
 | |
| 		file.write('		MultiLayer: 0\n')
 | |
| 		file.write('		MultiTake: 1\n')
 | |
| 		file.write('		Shading: Y\n')
 | |
| 		file.write('		Culling: "CullingOff"')
 | |
| 		
 | |
| 		# Write the Real Mesh data here
 | |
| 		file.write('\n		Vertices: ')
 | |
| 		i=-1
 | |
| 		for v in me.verts:
 | |
| 			if i==-1:
 | |
| 				file.write('%.6f,%.6f,%.6f' % tuple(v.co))
 | |
| 				i=0
 | |
| 			else:
 | |
| 				if i==7:
 | |
| 					file.write('\n		')
 | |
| 					i=0
 | |
| 				file.write(',%.6f,%.6f,%.6f'% tuple(v.co))
 | |
| 			i+=1
 | |
| 		file.write('\n		PolygonVertexIndex: ')
 | |
| 		i=-1
 | |
| 		for f in me.faces:
 | |
| 			fi = [v.index for v in f]
 | |
| 			# flip the last index, odd but it looks like
 | |
| 			# this is how fbx tells one face from another
 | |
| 			fi[-1] = -(fi[-1]+1)
 | |
| 			fi = tuple(fi)
 | |
| 			if i==-1:
 | |
| 				if len(f) == 3:		file.write('%i,%i,%i' % fi )
 | |
| 				else:				file.write('%i,%i,%i,%i' % fi )
 | |
| 				i=0
 | |
| 			else:
 | |
| 				if i==13:
 | |
| 					file.write('\n		')
 | |
| 					i=0
 | |
| 				if len(f) == 3:		file.write(',%i,%i,%i' % fi )
 | |
| 				else:				file.write(',%i,%i,%i,%i' % fi )
 | |
| 			i+=1
 | |
| 		
 | |
| 		file.write('\n		GeometryVersion: 124')
 | |
| 		
 | |
| 		file.write(\
 | |
| '''
 | |
| 		LayerElementNormal: 0 {
 | |
| 			Version: 101
 | |
| 			Name: ""
 | |
| 			MappingInformationType: "ByVertice"
 | |
| 			ReferenceInformationType: "Direct"
 | |
| 			Normals: ''')
 | |
| 
 | |
| 		i=-1
 | |
| 		for v in me.verts:
 | |
| 			if i==-1:
 | |
| 				file.write('%.15f,%.15f,%.15f' % tuple(v.no))
 | |
| 				i=0
 | |
| 			else:
 | |
| 				if i==2:
 | |
| 					file.write('\n			 ')
 | |
| 					i=0
 | |
| 				file.write(',%.15f,%.15f,%.15f' % tuple(v.no))
 | |
| 			i+=1
 | |
| 		file.write('\n		}')
 | |
| 		
 | |
| 		
 | |
| 		if me.faceUV:
 | |
| 			file.write('''
 | |
| 		LayerElementUV: 0 {
 | |
| 			Version: 101
 | |
| 			Name: ""
 | |
| 			MappingInformationType: "ByPolygonVertex"
 | |
| 			ReferenceInformationType: "IndexToDirect"
 | |
| 			UV: ''')
 | |
| 			
 | |
| 			i = -1
 | |
| 			ii = 0
 | |
| 			for f in me.faces:
 | |
| 				for uv in f.uv:
 | |
| 					
 | |
| 					if i==-1:
 | |
| 						file.write('%.6f,%.6f' % tuple(uv))
 | |
| 						i=0
 | |
| 					else:
 | |
| 						if i==7:
 | |
| 							file.write('\n			 ')
 | |
| 							i=0
 | |
| 						file.write(',%.6f,%.6f' % tuple(uv))
 | |
| 					i+=1
 | |
| 					ii+=1
 | |
| 			
 | |
| 			
 | |
| 			file.write('\n			UVIndex: ')
 | |
| 			for i in xrange(ii):
 | |
| 				if i == 0:	file.write('%i'  % i)
 | |
| 				else:		file.write(',%i' % i)
 | |
| 			
 | |
| 			file.write('\n		}')
 | |
| 		
 | |
| 		
 | |
| 		
 | |
| 		if materials:
 | |
| 			file.write('''
 | |
| 		LayerElementMaterial: 0 {
 | |
| 			Version: 101
 | |
| 			Name: ""
 | |
| 			MappingInformationType: "ByPolygon"
 | |
| 			ReferenceInformationType: "IndexToDirect"
 | |
| 			Materials: ''')
 | |
| 			
 | |
| 			# Build a material mapping for this 
 | |
| 			material_mapping_local = {} # local-index : global index.
 | |
| 			for i, mat in enumerate(me.materials):
 | |
| 				if mat:
 | |
| 					material_mapping_local[i] = material_mapping[mat.name]
 | |
| 				else:
 | |
| 					material_mapping_local[i] = 0 # None material is zero for now.
 | |
| 			
 | |
| 			if not material_mapping_local:
 | |
| 				material_mapping_local[0] = 0
 | |
| 			
 | |
| 			i=-1
 | |
| 			for f in me.faces:
 | |
| 				if i==-1:
 | |
| 					i=0
 | |
| 					file.write( '%s' % material_mapping_local[f.mat])
 | |
| 				else:
 | |
| 					file.write(',%s' % material_mapping_local[f.mat])
 | |
| 				i+=1
 | |
| 			
 | |
| 			file.write('\n		}')
 | |
| 		
 | |
| 		
 | |
| 		if textures:
 | |
| 			if me.faceUV:
 | |
| 				file.write('''
 | |
| 		LayerElementTexture: 0 {
 | |
| 			Version: 101
 | |
| 			Name: ""
 | |
| 			MappingInformationType: "ByPolygon"
 | |
| 			ReferenceInformationType: "IndexToDirect"
 | |
| 			BlendMode: "Translucent"
 | |
| 			TextureAlpha: 1
 | |
| 			TextureId: ''')
 | |
| 				i=-1
 | |
| 				for f in me.faces:
 | |
| 					img_key = f.image
 | |
| 					if img_key: img_key = img_key.name
 | |
| 					
 | |
| 					if i==-1:
 | |
| 						i=0
 | |
| 						file.write( '%s' % texture_mapping_local[img_key])
 | |
| 					else:
 | |
| 						file.write(',%s' % texture_mapping_local[img_key])
 | |
| 					i+=1
 | |
| 			else:
 | |
| 				file.write('''
 | |
| 		LayerElementTexture: 0 {
 | |
| 			Version: 101
 | |
| 			Name: ""
 | |
| 			MappingInformationType: "NoMappingInformation"
 | |
| 			ReferenceInformationType: "IndexToDirect"
 | |
| 			BlendMode: "Translucent"
 | |
| 			TextureAlpha: 1
 | |
| 			TextureId: ''')
 | |
| 			file.write('\n		}')
 | |
| 		
 | |
| 		
 | |
| 		file.write('''
 | |
| 		Layer: 0 {
 | |
| 			Version: 100
 | |
| 			LayerElement:  {
 | |
| 				Type: "LayerElementNormal"
 | |
| 				TypedIndex: 0
 | |
| 			}''')
 | |
| 		
 | |
| 		if materials:
 | |
| 			file.write('''
 | |
| 			LayerElement:  {
 | |
| 				Type: "LayerElementMaterial"
 | |
| 				TypedIndex: 0
 | |
| 			}''')
 | |
| 			
 | |
| 		# Always write this
 | |
| 		if textures:
 | |
| 			file.write('''
 | |
| 			LayerElement:  {
 | |
| 				Type: "LayerElementTexture"
 | |
| 				TypedIndex: 0
 | |
| 			}''')
 | |
| 			
 | |
| 		if me.faceUV:
 | |
| 			file.write('''
 | |
| 			LayerElement:  {
 | |
| 				Type: "LayerElementUV"
 | |
| 				TypedIndex: 0
 | |
| 			}''')
 | |
| 		file.write('\n		}')
 | |
| 		file.write('\n	}')
 | |
| 	
 | |
| 	write_cameras()
 | |
| 	
 | |
| 	for matname, mat in materials:
 | |
| 		write_material(matname, mat)
 | |
| 	
 | |
| 	# each texture uses a video, odd
 | |
| 	for texname, tex in textures:
 | |
| 		write_video(texname, tex)
 | |
| 	i = 0
 | |
| 	for texname, tex in textures:
 | |
| 		write_texture(texname, tex, i)
 | |
| 		i+=1
 | |
| 	
 | |
| 	
 | |
| 	# Finish Writing Objects
 | |
| 	# Write global settings
 | |
| 	file.write('''
 | |
| 	GlobalSettings:  {
 | |
| 		Version: 1000
 | |
| 		Properties60:  {
 | |
| 			Property: "UpAxis", "int", "",1
 | |
| 			Property: "UpAxisSign", "int", "",1
 | |
| 			Property: "FrontAxis", "int", "",2
 | |
| 			Property: "FrontAxisSign", "int", "",1
 | |
| 			Property: "CoordAxis", "int", "",0
 | |
| 			Property: "CoordAxisSign", "int", "",1
 | |
| 			Property: "UnitScaleFactor", "double", "",1
 | |
| 		}
 | |
| 	}
 | |
| ''')	
 | |
| 	file.write('}\n\n')
 | |
| 	
 | |
| 	file.write(\
 | |
| '''; Object relations
 | |
| ;------------------------------------------------------------------
 | |
| 
 | |
| Relations:  {
 | |
| ''')
 | |
| 
 | |
| 	file.write('	Model: "Model::blend_root", "Null" {\n	}\n')
 | |
| 	
 | |
| 	for obname, ob, me in objects:
 | |
| 		file.write('	Model: "Model::%s", "Mesh" {\n	}\n' % obname)
 | |
| 	
 | |
| 	file.write('''	Model: "Model::Producer Perspective", "Camera" {
 | |
| 	}
 | |
| 	Model: "Model::Producer Top", "Camera" {
 | |
| 	}
 | |
| 	Model: "Model::Producer Bottom", "Camera" {
 | |
| 	}
 | |
| 	Model: "Model::Producer Front", "Camera" {
 | |
| 	}
 | |
| 	Model: "Model::Producer Back", "Camera" {
 | |
| 	}
 | |
| 	Model: "Model::Producer Right", "Camera" {
 | |
| 	}
 | |
| 	Model: "Model::Producer Left", "Camera" {
 | |
| 	}
 | |
| 	Model: "Model::Camera Switcher", "CameraSwitcher" {
 | |
| 	}
 | |
| ''')
 | |
| 	
 | |
| 	for matname, mat in materials:
 | |
| 		file.write('	Material: "Material::%s", "" {\n	}\n' % matname)
 | |
| 
 | |
| 
 | |
| 	if textures:
 | |
| 		for texname, tex in textures:
 | |
| 			file.write('	Texture: "Texture::%s", "TextureVideoClip" {\n	}\n' % texname)
 | |
| 		for texname, tex in textures:
 | |
| 			file.write('	Video: "Video::%s", "Clip" {\n	}\n' % texname)		
 | |
| 
 | |
| 	file.write('}\n')
 | |
| 	file.write(\
 | |
| '''
 | |
| ; Object connections
 | |
| ;------------------------------------------------------------------
 | |
| 
 | |
| Connections:  {
 | |
| ''')
 | |
| 
 | |
| 	# write the fake root node
 | |
| 	file.write('	Connect: "OO", "Model::blend_root", "Model::Scene"\n')
 | |
| 	
 | |
| 	for obname, ob, me in objects:
 | |
| 		file.write('	Connect: "OO", "Model::%s", "Model::blend_root"\n' % obname)
 | |
| 	
 | |
| 	for obname, ob, me in objects:
 | |
| 		# Connect all materials to all objects, not good form but ok for now.
 | |
| 		for matname, mat in materials:
 | |
| 			file.write('	Connect: "OO", "Material::%s", "Model::%s"\n' % (matname, obname))
 | |
| 	
 | |
| 	if textures:
 | |
| 		for obname, ob, me in objects:
 | |
| 			for texname, tex in textures:
 | |
| 				file.write('	Connect: "OO", "Texture::%s", "Model::%s"\n' % (texname, obname))
 | |
| 		
 | |
| 		for texname, tex in textures:
 | |
| 			file.write('	Connect: "OO", "Video::%s", "Texture::%s"\n' % (texname, texname))
 | |
| 	
 | |
| 	file.write('}\n')
 | |
| 
 | |
| 
 | |
| def write_footer(file):
 | |
| 	file.write(\
 | |
| ''';Takes and animation section
 | |
| ;----------------------------------------------------
 | |
| 
 | |
| Takes:  {
 | |
| 	Current: ""
 | |
| }
 | |
| ;Version 5 settings
 | |
| ;------------------------------------------------------------------
 | |
| 
 | |
| Version5:  {
 | |
| 	AmbientRenderSettings:  {
 | |
| 		Version: 101
 | |
| 		AmbientLightColor: 0.4,0.4,0.4,0
 | |
| 	}
 | |
| 	FogOptions:  {
 | |
| 		FlogEnable: 0
 | |
| 		FogMode: 0
 | |
| 		FogDensity: 0.002
 | |
| 		FogStart: 0.3
 | |
| 		FogEnd: 1000
 | |
| 		FogColor: 1,1,1,1
 | |
| 	}
 | |
| 	Settings:  {
 | |
| 		FrameRate: "30"
 | |
| 		TimeFormat: 1
 | |
| 		SnapOnFrames: 0
 | |
| 		ReferenceTimeIndex: -1
 | |
| 		TimeLineStartTime: 0
 | |
| 		TimeLineStopTime: 46186158000
 | |
| 	}
 | |
| 	RendererSetting:  {
 | |
| 		DefaultCamera: "Producer Perspective"
 | |
| 		DefaultViewingMode: 0
 | |
| 	}
 | |
| }
 | |
| ''')
 | |
| 
 | |
| 
 | |
| def write_ui(filename):
 | |
| 	Blender.Window.WaitCursor(1)
 | |
| 	file = open(filename, 'w')
 | |
| 	write_header(file)
 | |
| 	write_scene(file)
 | |
| 	write_footer(file)
 | |
| 	Blender.Window.WaitCursor(0)
 | |
| 
 | |
| if __name__ == '__main__':
 | |
| 	Blender.Window.FileSelector(write_ui, 'Export FBX', Blender.sys.makename(ext='.fbx'))
 |