Forum: Poser - OFFICIAL


Subject: Rendering Preset File Location

ThunderStone opened this issue on Mar 12, 2020 · 23 posts


structure posted Sat, 14 March 2020 at 9:27 AM Forum Coordinator

This script will allow you to store your presets anywhere you like.

it allows you to save and load from any location and stores the

last folder you used as it's default open / save location next time.

# -*- coding: utf-8 -*- 
# ©copyright structure 2001 - 2020
# Firefly Preset Manager
# ================================

import os
import os.path
import poser
import wx

types = "Render Presets (*.prp )|*.prp|"
options = ["Load Preset", "Save Preset", "Delete Preset"]
pref = poser.PrefsLocation()
folder = os.path.join( pref, "structure","rpm" )
file = "lastpath.pth"
start = os.path.join( pref, "RenderPresets" )

def checkprefs( folder, file, lastpath = None ):
    if not os.path.exists( folder ):
        os.makedirs( folder )

    if not os.path.isfile( os.path.join( folder, file) ):
        with open( os.path.join( folder, file), "w" ) as outfile:
            outfile.write( start )

    return True

def choose( title = '' , prompt = '' , OptionList = [] ):
    dialog = wx.SingleChoiceDialog( None, prompt, title, OptionList  )                  # prepare the dialog
    
    if not OptionList == []:                                                            # ensure the list is not empty

        return dialog.GetStringSelection() if dialog.ShowModal() == wx.ID_OK else None  # check the dialog response

def getlastfolder( folder, file ):
    with open( os.path.join( folder, file), "r" ) as infile:
         data = infile.read()
    return data

def managefile( types, start, op = 0 ):
    if not op == 1 and not op == 2:
        return False
    elif op == 1:
        style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST
    else:
        style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT

    dialog = wx.FileDialog(None, "Save a RenderPreset file", start , "" ,  types , style )

    return dialog.GetPath() if dialog.ShowModal() == wx.ID_OK else False

def okcancel( title = None , alertmessage = None, okonly = False ):

    if okonly:
        style = ( wx.OK|wx.ICON_INFORMATION|wx.STAY_ON_TOP )                # test if the dialog requires only an ok button
    else:
        style = ( wx.OK|wx.CANCEL|wx.ICON_INFORMATION|wx.STAY_ON_TOP )      

    ok_dialog = wx.MessageDialog(None, alertmessage, title, style)          # prepare the dialog
    
    return True if ok_dialog.ShowModal() == wx.ID_OK else False             # test dialog response

def putlastfolder( folder, file, path = None ):
    if path == None:
        path = start
    with open( os.path.join( folder, file), "w" ) as outfile:
         outfile.write( path )

def yesno( title = "" , message = "" ):
    # get working folder
    YN_dialog = wx.MessageDialog(None, message, style=wx.YES|wx.NO )

    return True if YN_dialog.ShowModal() == wx.ID_YES else False

scene = poser.Scene()
option = choose("Firefly Preset Manager","Select an option", options )

prefsfile = checkprefs( folder, file )
lastfolder = getlastfolder( folder, file )
start = lastfolder
os.startfile( lastfolder )

if option:
    if option == "Load Preset":
        preset = scene.CurrentFireFlyOptions().LoadPreset
        load = managefile( types, start, 1 )
        save = None
        if load:
            okcancel ("Render Preset Manager","%s has been Loaded" %load, True )
            preset( load )

    elif option == "Save Preset":
        preset = scene.CurrentFireFlyOptions().SavePreset
        save = managefile( types, start, 2 )
        load = None
        if save:
            okcancel ("Render Preset Manager","%s has been Saved" %save, True )
            preset( save )
            putlastfolder( folder, file, os.path.dirname(save) )

    else:
        deletefile = managefile( types, start, 1 )
        if deletefile:
            deletefileok = yesno("Render Preset Manager", "Delete %s are you sure?" %deletefile )
            if deletefileok:
                os.remove( deletefile )
                okcancel( "Render Preset Manager", "%s Deleted" %deletefile, True )
            else:
                okcancel( "Render Preset Manager", "Deletion of %s Aborted!" %deletefile, True )

A copy is available from freestuff

Locked Out