EnglishBob opened this issue on Mar 20, 2014 · 9 posts
EnglishBob posted Thu, 20 March 2014 at 5:25 AM
I'm trying to devise a script that will let me browse for and load any library file.
I can use LoadLibraryFigure( path ) to load any sort of geometry-based content: figures, props or hair. So far, so good.
Contrary to what I've read elsewhere, I seem to have to use the correct specific method for modifier types: LoadLibraryPose for poses, LoadLibraryLight for lights and so on, although I haven't tested every permutation yet. If this is true, then I should add some code to detect the file extension that I choose and switch to using the right load method - but if you know a better way, please let me know!
A bigger problem, in Poser 7 anyway, is that there isn't a LoadLibraryMaterial method - or is there? It isn't in the Python Methods manual. I tried
scene.LoadLibraryMaterial( path )
but it didn't do anything. However there wasn't a syntax error either, so maybe the method exists but is broken?
EnglishBob posted Thu, 20 March 2014 at 5:35 AM
Quote - ...there isn't a LoadLibraryMaterial method - or is there?
Ah, found it. I need LoadMaterialSet or LoadMaterialCollection. Naming conventions - who needs 'em? :)
I can probably take it from here by ploughing through a big elif structure, but do chime in with hints 'n' tips if you have them.
structure posted Thu, 20 March 2014 at 7:32 AM Forum Coordinator
this is something I am still working on - but you may be able to use it for what you need
'''coded by structure'''
#----------------------#
# imports
import poser, os, os.path
# set Variables
scene=poser.Scene()
# dictionaries and lists
suflist = { 0 : '.cr%s',
1 : '.pz%s',
2 : '.fc%s',
3 : '.hr%s',
4 : '.hd%s',
6 : '.lt%s',
7 : '.cm%s',
8 : '.mt%s',
9 : '.mc%s',
10 : '.pz%s',
11 : '.pp%s'}
s=[2,3,5,6,'z']
library = ['Character','Pose','Face','Hair','Hand','light','Camera','Material','Material','Scene','Props']
# functions
def DoSomething(item, c):
folder = os.path.join(poser.Libraries()[0], 'runtime','Libraries',library[c])
print folder
# main
item = 'material.pp2'
c=0
for i in suflist:
t=0
for a in range(len(s)):
try:
if item.endswith(suflist[c] %s[t]):
print suflist[c] %s[t], c
DoSomething(item, c)
except:
pass
t+=1
c+=1
Locked Out
EnglishBob posted Thu, 20 March 2014 at 7:37 AM
Thanks, that looks like an elegant way of dealing with the Poser library file types. I'll reflect on it in due course.
A little more on the project - it seems that although LoadLibraryFigure() will indeed load any object, it doesn't pass through parenting information from smart props or hair, nor does it replace existing hair. I guess I should use the specific load method for each one to get those behaviours.
structure posted Sat, 29 March 2014 at 9:38 AM Forum Coordinator
updated script - this appears to be working correctly
import poser, os, os.path, string
# Set Variables
scene=poser.Scene()
path=None
libs=['camera','character','face','hair','hand','light','pose','props','materials']
ext={0:'.cm%s',1:'.cr%s',2:'.fc%s',3:'.hr%s',4:'.hd%s',5:'.lt%s',6:'.pz%s',7:'.pp%s',8:'.mc%s',9:'.mt%s'} #,'.png','.rsr'}
s=['2','3','5','6','z']
# Select Folder
def GetWorkingFolder(link):
parentDialog=0
message='Select Folder'
Dir=os.path.join(poser.Libraries()[0], 'Runtime')
startDir=os.path.join(Dir,'Libraries', link)
wDir=poser.DialogDirChooser(parentDialog,message,startDir)
wDir.Show()
WorkingFolder=wDir.Path()
return WorkingFolder
# what to do with what we found ?
def DoSomething(item, c):
if c==9:c=8
print 't',item, c, libs[c]
# create Choice Dialog
link=poser.DialogSimple.AskMenu("Choose :","Which Library ?",libs)
# find the correct starting folder
for l in libs:
if not link == None:
if l == link:
path = GetWorkingFolder(l)
# discover files
if not path == None:
items=os.listdir(path)
for item in items:
c=0
for i in ext:
t=0
for a in range(len(s)):
try:
if c==9 : c-8
if item.endswith(ext[c] %s[t]):
DoSomething(item, c)
except:
pass
t+=1
c+=1
Locked Out
EnglishBob posted Sat, 29 March 2014 at 11:28 AM
Thanks! I'm away from home at present, so I'll study that on my return.
Meantime, I pulled apart Tromnek's PRPC code and cobbled together something that works, at least.
markschum posted Mon, 31 March 2014 at 7:58 PM
Have you cosidered using the file dialog to select a file and then a stack of
if (filename[-3:] == "cr2") or (filename[-3:] == "crz"0 :
loadlibraryfigure(... )
etc
its tedious to code but a few copy paste and edit and your done.
EnglishBob posted Tue, 01 April 2014 at 4:47 AM
That's exactly what I did, Mark, thanks... ;)
I'll see about posting my script if there's any interest in it. I only need it because my Poser uage is a little - peculiar - and I'm not referring to the artwork. Although that is peculiar, too. ;)
markschum posted Wed, 02 April 2014 at 5:35 PM
markschum stating the obvious since 2004 :woot: