mcjObjFix

//=======================================================================

//

//=======================================================================

var appName = "mcjObjFix"


var wDlg = new DzDialog;

wDlg.caption = appName;

var wDlgLyt = new DzVBoxLayout( wDlg );

wDlgLyt.autoAdd = true;


var nodes = Scene.getSelectedNodeList()

nNodes = nodes.length;


var ctlNames = [

"XTranslate","YTranslate", "ZTranslate",

"XRotate","YRotate", "ZRotate",

"XScale", "YScale", "ZScale", "Scale"

];

var nCtls = ctlNames.length;


var wDlgBtnsGB = new DzVGroupBox( wDlg );

wDlgBtnsGB.columns = 1;

wDlgBtnsGB.minWidth = 600;


var ctls = new Array();

for( var i = 0; i < nCtls; i++ )

{

var defVal = 0;

debug( ctlNames[i].indexOf( "Scale" ) );

if( ctlNames[i].indexOf( "Scale" ) >= 0 )

{

defVal = 1;

}

ctls[i] = AddSlider( wDlgBtnsGB, ctlNames[i], defVal );

}


var JunkBtn = new DzPushButton( wDlgBtnsGB );

JunkBtn.text = ".";


var wDoItBtn = new DzPushButton( wDlgBtnsGB );

wDoItBtn.text = "Apply These Parameters To All Selected";

connect( wDoItBtn, "clicked()", process );


var wDoItBtn2 = new DzPushButton( wDlgBtnsGB );

wDoItBtn2.text = "Export All Selected Nodes as Obj filename = 'cleaned' node Label .obj";

connect( wDoItBtn2, "clicked()", massExport );


var wCancelBtn = new DzPushButton( wDlgBtnsGB );

wCancelBtn.text = "Exit";


wDlg.setRejectButton( wCancelBtn );


wDlg.exec()


for( var i = 0; i < nCtls; i++ )

{

saveSetting( ctlNames[i], ctls[i].value );

}


//=======================================================================

//

//=======================================================================

function massExport()

{

path = Browse();

if( !path )

{

return;

}

var allNodes = Scene.getNodeList();

n = allNodes.length;

for( var i = 0; i < n; i++ )

{

node = allNodes[i];

ctl = node.getVisibilityControl();

ctl.setValue( false );

}

for( var i = 0; i < nNodes; i++ )

{

node = nodes[i];

if( node.getObject() )

{

ctl = node.getVisibilityControl();

ctl.setValue( true );

filename = node.getLabel().replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, "_");

ExportObj( path + "/" + filename + ".obj", 1, true, true )

ctl = node.getVisibilityControl();

ctl.setValue( false );

}

}

for( var i = 0; i < n; i++ )

{

node = allNodes[i];

ctl = node.getVisibilityControl();

ctl.setValue( true );

}

}


//=======================================================================

//

//=======================================================================

function Browse()

{

var lastDirectory = getSetting( "lastDirectory", "c:/" );

var filename = FileDialog.doDirectoryDialog (

"Select output folder",

"Select the folder where the obj and mtl files will be written.",

lastDirectory

);

if( !filename )

{

return( 0 );

}

saveSetting( "lastDirectory", filename );

return( filename )

}


//===============================================

// ExportObj Was written by Rob Whisenant.

//===============================================

function ExportObj( objFilename, scale, bWriteMtl, bCollectMaps )

{

var mgr = App.getExportMgr();

var exporter = mgr.findExporterByClassName( 'DzObjExporter' );

var settings = new DzFileIOSettings();

exporter.getDefaultOptions( settings );

settings.setStringValue( 'Preset', 'Custom (1 unit = 1cm)' );

settings.setStringValue( 'Scale', scale );

settings.setBoolValue( 'SwapYZ', false );

settings.setBoolValue( 'IgnoreInvisible', true );

settings.setBoolValue( 'WeldSeams', true ); //<========= figures welded

settings.setBoolValue( 'WriteO', false );

settings.setBoolValue( 'WriteG', true );

settings.setBoolValue( 'GroupNodes', false );

settings.setBoolValue( 'GroupSurfaces', false );

settings.setBoolValue( 'GroupSingle', true ); //<========= figures welded

settings.setBoolValue( 'GroupGeom', false );

settings.setBoolValue( 'WriteVN', true );

settings.setBoolValue( 'WriteVT', true );

settings.setBoolValue( 'WriteUsemtl', true );

settings.setBoolValue( 'WriteMtllib', bWriteMtl );

settings.setBoolValue( 'CollectMaps', bCollectMaps );

settings.setBoolValue( 'ConvertMaps', false );

settings.setBoolValue( 'RemoveUnusedVerts', false );

settings.setIntValue( 'RunSilent', 1 );

exporter.writeFile( objFilename, settings );

}


//===============================================================================================

//

//===============================================================================================

function AddSlider( gb, lbl, defVal )

{

var wIni = new DzFloatSlider( gb )

wIni.label = lbl;

wIni.labelVisible = true;

wIni.textEditable = true;


wIni.value = getSetting( lbl, defVal );

return( wIni );

}


//===============================================================================================

//

//===============================================================================================

function process()

{

for( var j = 0; j < nNodes; j++ )

{

node = nodes[j];

for( var i = 0; i < ctls.length; i++ )

{

val = ctls[i].value;

debug( ctlNames[i], val )

prop = node.findProperty( ctlNames[i] );

prop.setValue( val );

}

}

}


//=========================================================================================

// save key/val in Registry for Windows, via the Carbon Preferences API for Mac

//=========================================================================================

function saveSetting( key, keyVal )

{

var m_oMgr = App.getAppSettingsMgr();

m_oMgr.pushPath( appName );

m_oMgr.setStringValue( key, keyVal );

m_oMgr.popPath();

}


function saveBoolSetting( key, keyVal )

{

var m_oMgr = App.getAppSettingsMgr();

m_oMgr.pushPath( appName );

m_oMgr.setBoolValue( key, keyVal );

m_oMgr.popPath();

}


//=========================================================================================

// load key/val from Registry

//=========================================================================================

function getSetting( key, defVal )

{

var m_oMgr = App.getAppSettingsMgr();

m_oMgr.pushPath( appName );

var val = m_oMgr.getStringValue( key, defVal );

m_oMgr.popPath();

return ( val );

}


function getBoolSetting( key, defVal )

{

var m_oMgr = App.getAppSettingsMgr();

m_oMgr.pushPath( appName );

var val = m_oMgr.getBoolValue( key, defVal );

m_oMgr.popPath();

return ( val );

}