⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macro_baketextures.mcr

📁 3dmax导出3d模型二次开发插件
💻 MCR
📖 第 1 页 / 共 5 页
字号:
		--	Close Button pressed 
		--
		on bClose pressed do
		(
			-- format "close button\n"
			-- & close the dialog, save handled by on ... close event
			destroydialog gTextureBakeDialog
		)
			
		-------------------------------------------------------------
		--	
		--	Cancel Button pressed 
		--
		on bCancel pressed do
		(
			-- format "cancel button\n"
			-- just set the cancel flag, cleanup handled by on ... close
			isCancel = true
			destroydialog gTextureBakeDialog
		)
		
		on gTextureBakeDialog resized newSz do
		(
			--format "resize to %, % \n" newSz.x newSz.y
			if newSz == undefined then newSz = [350,483]
			if (gTextureBakeDialog.width != 350) then gTextureBakeDialog.width = 350
			pDialogHeight = newSz.y
 
			-- adjust the dialog layout
			rollouts.height = newSz.y - 43
			bRender.pos = [7, newSz.y - 33]
			bUpdateLast.pos = [80, newSz.y - 33]
			bClose.pos = [227, newSz.y - 33]
			bCancel.pos = [284, newSz.y - 33]
		)
		
			
) -- end, Bake to texture shell


	fn getINIConfigData filename section key default =
	(
		local res = getINISetting filename section key
		if res == "" then default
		else readValue (stringStream res)
	)
	
	fn setINIConfigData filename section key value =
	(
		setINISetting filename section key (value as string)
	)
	
	fn readDialogConfig =
	(
		pDialogHeight = getINIConfigData iniFile "Dialog" "DialogHeight " 526
		pDialogPos = getINIConfigData iniFile "Dialog" "DialogPos" [120,100]
		pCommonRolledUp = getINIConfigData iniFile "Dialog" "CommonRolledUp" false
		pSelectedRolledUp = getINIConfigData iniFile "Dialog" "SelectedRolledUp" true
		pUniqueRolledUp = getINIConfigData iniFile "Dialog" "UniqueRolledUp" false
	)

	fn readConfigData =
	(
		-- format "load state\n"
	
		--gTextureBakeOverwriteFilesOk = getINIConfigData iniFile "Files" "OverwriteOk" 0
		commonBakeProps.cAutoFlattenOn.checked = getINIConfigData iniFile "AutoFlatten" "On" true
		commonBakeProps.sSpacing.value = getINIConfigData iniFile "AutoFlatten" "Spacing" 0.03
		commonBakeProps.sThresholdAngle.value = getINIConfigData iniFile "AutoFlatten" "ThresholdAngle" 45.0
--		commonBakeProps.cNormalize.checked = getINIConfigData iniFile "AutoFlatten" "Normalize" true
		commonBakeProps.cRotate.checked = getINIConfigData iniFile "AutoFlatten" "Rotate" true
		commonBakeProps.cFillHoles .checked = getINIConfigData iniFile "AutoFlatten" "FillHoles" true
					
		commonBakeProps.rDraftOrProduction.state = getINIConfigData iniFile "Renderer" "UseRenderer" 1
				
		commonBakeProps.cBakedInVP.checked = getINIConfigData iniFile "Materials" "BakedInVP" true
		commonBakeProps.cDisplayFB.checked = getINIConfigData iniFile "Materials" "DisplayFB" true 
		commonBakeProps.cShellMaterials.checked = getINIConfigData iniFile "Materials" "ShellMaterials" true 
		commonBakeProps.dUseShader.selection = getINIConfigData iniFile "Materials" "UseShader" 1  
				
		commonBakeProps.sSizeMin.value = getINIConfigData iniFile "AutoSize" "SizeMin" 32 
		commonBakeProps.sSizeMax.value = getINIConfigData iniFile "AutoSize" "SizeMax" 2048 
		commonBakeProps.sSizeScale.value = getINIConfigData iniFile "AutoSize" "SizeScale" 0.01
		commonBakeProps.cSizePowersOf2.checked = getINIConfigData iniFile "AutoSize" "SizePowersOf2" false
		
		local res = getINISetting iniFile "FileOutput" "FilePath"
		if res == "" then res = (getdir #image)
		commonBakeProps.eFilePath.text = res
		
		res = getINISetting iniFile "FileOutput" "FileType"
		if res == "" then res = ".tga"
		defaultFileType = res
		--format "set file type = % \n" res
		
 	)
	
	fn writeConfigData =
	(
		-- format "save state\n"
		-- setINIConfigData iniFile "Files" "OverwriteOk" gTextureBakeOverwriteFilesOk 
 
		setINIConfigData iniFile "AutoFlatten" "On" commonBakeProps.cAutoFlattenOn.checked 
	 	setINIConfigData iniFile "AutoFlatten" "Spacing" commonBakeProps.sSpacing.value
	 	setINIConfigData iniFile "AutoFlatten" "ThresholdAngle" commonBakeProps.sThresholdAngle.value
		--setINIConfigData iniFile "AutoFlatten" "Normalize" commonBakeProps.cNormalize.checked
		setINIConfigData iniFile "AutoFlatten" "Rotate" commonBakeProps.cRotate.checked
		setINIConfigData iniFile "AutoFlatten" "FillHoles" commonBakeProps.cFillHoles.checked
				
		setINIConfigData iniFile "Renderer" "UseRenderer" commonBakeProps.rDraftOrProduction.state	
		
		setINIConfigData iniFile "Materials" "BakedInVP" commonBakeProps.cBakedInVP.checked
		setINIConfigData iniFile "Materials" "DisplayFB" commonBakeProps.cDisplayFB.checked
		setINIConfigData iniFile "Materials" "ShellMaterials" commonBakeProps.cShellMaterials.checked
		setINIConfigData iniFile "Materials" "UseShader" commonBakeProps.dUseShader.selection
--		setINIConfigData iniFile "Materials" "UseD3D" commonBakeProps.cUseD3D.checked
			
		setINIConfigData iniFile "FileOutput" "FilePath" commonBakeProps.eFilePath.text
		setINIConfigData iniFile "FileOutput" "FileType" defaultFileType
				
		setINIConfigData iniFile "AutoSize" "SizeMin" commonBakeProps.sSizeMin.value
		setINIConfigData iniFile "AutoSize" "SizeMax" commonBakeProps.sSizeMax.value
		setINIConfigData iniFile "AutoSize" "SizeScale" commonBakeProps.sSizeScale.value
		setINIConfigData iniFile "AutoSize" "SizePowersOf2" commonBakeProps.cSizePowersOf2.checked 
		
		--format "write dialog height = % \n" pDialogHeight
		setINIConfigData iniFile "Dialog" "DialogHeight" pDialogHeight 
		setINIConfigData iniFile "Dialog" "DialogPos" pDialogPos
		setINIConfigData iniFile "Dialog" "CommonRolledUp" false	-- pCommonRolledUp
		setINIConfigData iniFile "Dialog" "SelectedRolledUp" true	-- pSelectedRolledUp
		setINIConfigData iniFile "Dialog" "UniqueRolledUp" false	-- pUniqueRolledUp
		
	) -- end, write config

------------------------------------------------------------------
--
--	Common Settings Rollout - these apply to the whole scene
--
rollout commonBakeProps "General Settings" width:328 height:402
(
	-- first the options group
	GroupBox gOptions "Objects to Bake" pos:[6,3] width:317 height:41
	radiobuttons rSceneType "" pos:[19,21] width:299 height:16 enabled:true labels:#("Selected Objects   ", "All Prepared Objects") default:1 columns:2 
			
	-- the auto flatten group
	GroupBox grp1 "Automatic Unwrap Mapping" pos:[7,52] width:317 height:86 
	checkbox cAutoFlattenOn "On" pos:[102,70] width:48 height:16 checked:true
	spinner sThresholdAngle "Threshold Angle:" pos:[28,92] width:126 height:16 range:[1,100,45] type:#float fieldwidth:40 
	spinner sSpacing "Spacing" pos:[69,114] width:84 height:16 range:[0,1,0.02] type:#float scale:0.001 fieldwidth:40

--	checkbox cNormalize "Normalize Clusters" pos:[184,64] width:120 height:18 checked:true 
	checkbox cRotate "Rotate Clusters" pos:[184,69] width:120 height:18 checked:true 
	checkbox cFillHoles "Fill Holes" pos:[184,90] width:120 height:18 checked:true
	button bClearUnwrap "Clear Unwrappers" pos:[184,111] width:123 height:20 
 
-- Render Setting group
	GroupBox gRenderSettings "Use Render Settings" pos:[3,147] width:320 height:47 
	radiobuttons rDraftOrProduction "" pos:[35,167] width:146 height:16 labels:#("Production", "Draft") columns:2 
	button setupRenderSettingsButton "Setup..." pos:[246,166] width:60 height:20 

-- Display & materials group
	GroupBox gMaterial "Display and Materials" pos:[6,197] width:317 height:83
	checkbox cBakedInVP "Show Baked in Viewport" pos:[24,235] width:159 height:16 checked:true
	checkbox cDisplayFB "Display Frame Buffer" pos:[23,257] width:125 height:16 checked:true 
	checkbox cShellMaterials "Create Baked Materials:" pos:[24,214] width:137 height:16 checked:true 
	dropdownList dUseShader "" pos:[162,210] width:146 height:21
	button bClearBakeMtls "Clear Shell Materials" pos:[184,254] width:124 height:20 enabled:true
	
-- autosize group
	GroupBox gAutoSize "Automatic Map Size" pos:[6,283] width:318 height:63
	checkbox cSizePowersOf2 "Nearest power of 2" pos:[28,322] width:110 height:19
	spinner sSizeScale "Scale" pos:[36,302] width:97 height:16 range:[0,1,0.01] type:#float scale:0.001
	spinner sSizeMin "Min" pos:[236,302] width:73 height:16 range:[1,2048,32] type:#integer
	spinner sSizeMax "Max" pos:[236,325] width:73 height:16 range:[1,2048,1024] type:#integer
	
-- path group
	GroupBox gPath "File Output Path" pos:[7,348] width:317 height:49
	edittext eFilePath "" pos:[13,367] width:220 height:20 
	button bPathSelect "..." pos:[246,367] width:62 height:20
		
	-- return the effective file path
	function GetFilePath = 
	(
		 path = eFilePath.text
		if path == "" then
		(
			-- path = ".\\"	-- make it the current directory
			path = getdir #image		-- image directory is the default
		)
		if path[ path.count ] != "\\" then
			path += "\\"

		-- format "        file path: % \n" path
		return path
	)

	-- enable/disable auto-flatten controls  
	function updateFlattenEnables _enable =
	(
		sThresholdAngle.enabled = _enable				
		sSpacing.enabled = _enable				
		--cNormalize.enabled = _enable				
		cRotate.enabled = _enable			
		cFillHoles.enabled = _enable
	)			

	function setupShaderDropdown =
	(
		readBakeMtlMappings()
		theList = #()
		append theList "Default"	-- always first is the list
		
		-- then add the stdmtl mappings if they exist
		for i = 2 to (fileMappings.count+1) do
			append theList ("StdMtl." + fileMappings[ i - 1 ])
		
		-- & last the available hardware shaders
		getHWShaderList()
		for i = 1 to hwShaders.count do
			append( theList )( hwShaders[ i ] )
				
		-- & last set the list into the items of the dropdown		
		dUseShader.items = theList
	)
	
	function UpdateUseShader _nSelected = 
	(
		--format "select output shader # = %\n" _nSelected
		useHWShader = 0
		
		if _nSelected> dUseShader.items.count then
			_nSelected= 1
			
		-- if greater than default
		if _nSelected > 1 then
		(
			if _nSelected<= (fileMappings.count + 1) then
			(
				-- its a file mapping, select it
				mappingName = fileMappings[ _nSelected- 1 ]
				selectBakeMtlMapping( mappingName )
				--format "select stdmtl file mapping = % \n" mappingName
			) else (
				useHWShader = _nSelected- (fileMappings.count + 1) 
				--format "select hw shader = % \n" useHWShader 
			)
		)
	)
	
	
	
	on commonBakeProps open do
	(
		useHWShader = 0
	
		setupShaderDropdown() 	
		readConfigData()
		
		updateUseShader( dUseShader.selection )
		
		cBakedInVP.enabled = dUseShader.enabled = cShellMaterials.checked 
	
		updateFlattenEnables( cAutoFlattenOn.checked )
	)
	on commonBakeProps close do
	(
		if isCancel == false then
		(
			-- save the persistent state
			writeConfigData()
		)
	)
	on rSceneType changed _newState do
	(
		--format "objectProps = %, eleList = % \n" selectedObjectProps (selectedObjectProps.lvElements)
		gTextureBakeDialog.bRender.enabled = if (commonBakeProps.rSceneType.state == 1) \
								and (SelectedObjects.count == 1) and (selectedObjectProps.lvElements.listItems.count == 0) then
									false else true
	)
	on cAutoFlattenOn changed _newState do
	(
		-- enable auto flatten controls
		updateFlattenEnables( _newState )
	)
	on bClearUnwrap pressed do
	(
		removeFlatteners()
	)
	on rDraftOrProduction changed _newState do
	(
		renderer = if (_newState == 1) then #production else #draft
	)
	on setupRenderSettingsButton pressed do
	(
		-- select the settings to use
		renderer = if (commonBakeProps.rDraftOrProduction.state == 1) then #production else #draft
		max render scene
	)
	on cShellMaterials changed _newState do
	(
		cBakedInVP.enabled = _newState 
		dUseShader.enabled = _newState 
	)
	on dUseShader selected _nSel do
	(
		UpdateUseShader( _nSel )
	)
	on bClearBakeMtls pressed do
	(
		removeBakeMaterials()	
	)
	on cSizePowersOf2 changed _newVal do
	(
		selectedObjectProps.UpdateAutoSize()
	)
	on sSizeScale changed _newVal do
	(
		selectedObjectProps.UpdateAutoSize()
	)
	on sSizeMin changed _newVal do
	(
		selectedObjectProps.UpdateAutoSize()
	)
	on sSizeMax changed _newVal do
	(
		selectedObjectProps.UpdateAutoSize()
	)
	on eFilePath changed _newPath do
	(
		if _newPath == "" then
			eFilePath.text = getdir #image
	)
	on bPathSelect pressed do
	(
		path = GetSavePath caption:"Select Output Path" 
		if path != undefined then
			eFilePath.text = path
	)
)
------------------------------------------------------------------
--
--	add bake elements popup dialog
--
rollout addElementsDialog "Add Texture Elements" 
	width:177 height:239
(
	local elementClasses -- List of all available bake element plug-ins
	
	multiListBox mlAvailableElements "Available Elements"
		pos:[9,8] width:154 height:10 -- height is measured in Lines, not pixels
	button bCancel "Cancel" 
		pos:[102,201] width:52 height:24
	button bAddSelectedElements "Add Elements" 
		pos:[14,201] width:79 height:24
		
	on mlAvailableElements doubleClicked nClicked do
	(
		bAddSelectedElements.pressed()
	)
		
	-- prepare the class list
	on addElementsDialog open do
	(
		 elementsName = #()
	
		elementClasses = BakeElement.classes
		for i in elementClasses do
		(
			-- eliminate the standin
			if i.creatable then
			(
				tmpEle = i()
				s = tmpEle.elementName
				append( elementsName )( s )
			)
		)
		mlAvailableElements.items = elementsName
		
		-- no selection to begin
		mlAvailableElements.selection = #{}
	)
	
	-- Cancel handler
	on bCancel pressed do
	(
		-- just destroy the dialog
		destroydialog addElementsDialog 
	)
	
	-- Add the elements to the bake properties
	on bAddSelectedElements pressed do
	(
		--format "add selected: % \n" mlAvailableElements.selection
		
		-- save current edited params
		selectedObjectProps.CloseSelectedElement()	
		
		-- add the selected elements
		for i in mlAvailableElements.selection do
		(
			--format "%\n" mlAvailableElements.items[ i ]
			-- search the class list
			for j = 1 to elementClasses.count do 
			(
				if (elementClasses[j]).creatable then
				(
					-- this creates an instance of the class j
					tmpEle = (elementClasses[j])()
					s = tmpEle.elementName
					if mlAvailableElements.items[ i ] == s then
					(
						-- found it, create an instance of the elementClass j
						-- add it to the node's bake properties
						--format "bake element: %\n" (elementClasses[ j ] as string) 
					
						-- for each object in the selection
						for obj in selectedObjects do
						(
							--format "superClass = %, class = % \n" (superclassof obj)(classof obj)
--							if (super

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -