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 );
}