<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="scripts.xsl" type="text/xsl"?>
<scripts>
	<entry id="ADP_UDPserver.zip" size="9.8KB" date="10/10/2008" version="0.9">
   	<short>Poser Python Library to communicate via UDP.</short>
   	<long>

    <p class="Standard"></p>
    <p class="Textbodyindent">Starting with Poser 7, it is not longer possible to run two or more Python scripts in parallel. This means, all scripts used to communicate with other running programs will disturb Poser. Even Posers Wacros are just scripts and want work anymore, if a communication script runs in the background.</p>
    <p class="Textbodyindent">To find a way out of this dilemma, I developed a method to manage this. The most important part is a library that, once loaded, replaces Posers library with an own library („import poser“ is catched and redirected if another script is started). This library is mainly used to catch calls to Posers Python lib a script commonly does, calls a „wakeup“ function in the communication script, and then calls the original Poser function.</p>
    <p class="Textbodyindent">The only drawback is, that script shouldn't be started with standard Poser functions to make it work properly. So don't use Posers menu, but the button „Run Poser-Python Script“ or „Run Wacro“. The normal start procedure wan't work, because Poser does not use Python's „execfile“ but an own function build-in into Poser.</p>
    <p class="Textbodyindent">Because most of Poser-calls are „catched“, it is also possible to have a sort of debugging (see demo: Switch debug on and start another script using „Run Poser-Python Script“).</p>
    <p class="Textbodyindent">Another advantage is, that Poser events are also catched and managed. So, several scripts running in parallel may use the same sort of events.</p>
    <p class="Textbodyindent"></p>
    <p class="Textbodyindent">This package includes </p>
    <ul style="margin-top:0;margin-bottom:0;list-style-type:disc;clear:left">
      <li>
        <p class="Textbodyindent"><span style="font-weight:bold">PPmaster.py</span>, the library to „replace“ Poser calls and to start another script in parallel</p>
      </li>
      <li>
        <p class="Textbodyindent"><span style="font-weight:bold">UDPserver.py</span>, a library (with Demomode) to be able to communicate with Poser via UDP.</p>
      </li>
    </ul>
    <p class="Standard"></p>
    <h3 id="toc1"><span class="SectionNumber"></span>PPmaster.py</h3>
    <p class="Textbody"></p>
    <p class="Textbody">This library may be used for several reasons. To understand what it does, we have to understand how Poser-Python works.</p>
    <p class="Textbody">If Poser is started, the „build-in“ Python interpreter is also started and initialized. This Python interpreter is a modified version, so some standard libs want work (threads, for example). </p>
    <p class="Textbody">With Poser version 7 (and up), even the method how scripts are executed has changed. Insteed of using Pythons standard function „exec“, an internal exec-function is called by Poser to run a user-written script. This Poser exec function makes sure that only one script is running. Means: it is impossible to have a script running in the background and starting another script in parallel. Maybe this is good for Poser, but this is not so good for a lot of Python scripts used by Poser users.</p>
    <p class="Textbody">One of the examples where it makes sense to have a script running in background is communication with the „outside world“. Mostly done with RPC-like scripts (RPC = Remote Procedure Call). This is a method to have one or more applications able to communicate with a server (or another app running on the same machine).</p>
    <p class="Textbody">Library PPmaster.py, once started, is using Pythons flexibility to stay between the standard poser library and a running Python script (a script running after lib PPmaster.py is loaded). This is done by overloading the import lib „poser“ with lib „PPmaster.py“ and loading the original poser library with another name. If a script now calls a function from the standard poser library, actually PPmaster.py ist called. If no method or variable is defined for the request the script has made in „PPmaster.py“, the request is send to the original poser library. This is how it basically works.</p>
    <p class="Textbody">Note: If a script is started with Pythons original exec-function, the started script should use „PPmaster“ insteed of „poser“ after „import poser“ is executed. That means, a script must know nothing about „PPmaster“ but is controlled by this lib.</p>
    <p class="Textbody">But this is not the case if a script is started via Posers standard menus to execute a script if you're using P7 or greater. In this case, Poser starts your script with his own function. So, to use „PPmaster.py“ successfully, you have to use something like a „program-loader“ (you can find a sample in „UDPserver.py“ included in this package).</p>
    <p class="Textbody"></p>
    <p class="Textbody"></p>
    <p class="Standard"></p>
	</long>
  	</entry>

	<entry id="ADP_MatNodes5-source.zip" size="6.7KB" date="10/09/2008" version="0.3">
   	<short>Poser Python Library to deal with Posers shadernodes.</short>
   	<long>
			<p>This is the sourcecode to lib Matnode5 (see a few entries below for description).</p>
			<p>Sorry, but I have had no time to extend this further at the moment. 
			If you find error or quirks please feel free to contact me.</p>
		</long>
  	</entry>
	
  <entry id="ADPcreatePP-Docu.zip" size="" date="08/13/2008" version="n/a">
    <short>Create Poser-Python Docu (HTML-format) from Poser</short>
    <long>
      <p>
      Script to generate a nice HTML-Documentation directly from Poser-Python library (doc-strings).
      </p>
      <p>
		This script is pretty small and easy to extend to your own needs. <br/>
		Start this script from Poser. <strong>Make sure you have a figure in your current scene, because the
		script needs a "handle" to inspect the "figure()" object.</strong><br/>
		Output is written to file "poserdoc.html".    
      </p>
      <iframe src="poserdoc.html" style="width:100%;height:500px;background-color:white"></iframe>
      <a target="_blank" href="poserdoc.html">Click to see this output fullscreen</a>
    </long>
  </entry>
  
  <entry id="ADPresize_images.exe.zip" size="" date="07/24/2008" version="n/a">
    <short>Bulk resizing of images - Windows EXE</short>
    <long>
      <p>
			This is a Windows EXE file for users not familar with installing Python and Python-libs.<br/>
			Move the contained EXE-file in any folder you like. No installation required.
      </p>
    </long>
  </entry>

  <entry id="ADPresize_images.zip" size="" date="07/24/2008" version="n/a">
    <short>Bulk resizing of images</short>
    <long>
      <p>
	Script to resize selected images from a directory to a certain size.
	Images smaller than the given maxX/maxY are not affected.
	<br/>
	ATTENTION: This script needs Python library "Image" from Pythonware!
	Downwload: http://www.pythonware.com
	<br/>
	Because installation of modules may become an adventure with Poser-Python,
	I advise to install standard Python first (http://www.python.org). This
	does not affect Poser-Python! For those not familiar with this, download the EXE above.
      </p>
      <p>
		In the dialog, enter the max sizes for X and Y your images should have.
		Select if images should be replaced (Yes) or saved as <strong>R_oldimagename</strong> ("R_" in front of the old name)
		(No).<br/>
		Click the button, navigate to the image folder and select all images you like to resize (use left-click, ctrl-left-click or Shift-left-click to select/deselect).
		</p>
		<p>
		Please Note: Exif-Tags are removed if present. Nearly all imageformats are supported, but
		there may be probleams with PSD-files (Adobe).       
      </p>
    </long>
  </entry>


  <entry id="ADP_MatNodes5.zip" size="240KB" updated="07/04/2008" date="06/30/2008" version="0.2">
    <short>PRE-RELEASE: Poser Python Library to deal with Posers shadernodes.</short>
    <long>
    <p style="border-bottom:solid 1px">Updated and extended: 07/06/2008<br/>
		Some bugfixes.<br/>		
		<strong>XML-support</strong> (MatNodesXML.py) added in a seperate class based on MatNode5. DOM-support with standard Python lib dom.minidom.<br/>
		Usage is simple:
		<blockquote>		
		 <strong>exportXML( &lt;openfile&gt; )</strong> exports all nodes into the given file in XML-format.<br/>
		 <strong>exportPartialXML( &lt;openfile&gt;, nodename )</strong> exports a certain node including it's children.<br/>
		 <strong>importXML( &lt;openfile&gt; )</strong> imports all nodes from the given file to your Poser Material-Room.<br/>
		</blockquote>
		Demo included in the package, XML-class is in source format.<br/>
		<a href="testmaterial_1.xml" target="_blank">Testouput form exportXML</a>  
    </p>
	<p>This library is able to make your life easier if you have to deal with Posers shadernodes in Python, escpecially if you produce Wacros.
	The complete library is object-oriented. Means, you have to deal with classes, inheritance and things like this.</p>
	<p>ATTENTION: There is only a pre-compiled Python library for Poser 7/Pro in this package! Source code may be available
	if the library is finished. </p>
	<p>Feedback of any kind is very appreciated. Please go over to Renderosity and write a private mail to user <strong>adp001</strong>.</p>
	<p>
				To get a picture, look at the following sample:<pre style="margin:0">
					
	turbulence=self.node(T.TURBULENCE,
                             x_scale=8,
                             y_scale=8,
                             z_scale=8,
                             Octaves=2,
                             Bottom=0,
                             Bias=0.5,
                             Gain=0.5)
				</pre>
				This creates a turbulence node right into you Material-Room. Here is some more:
				<pre>
        snow_percent=self.node(T.N,x=0,y=0.5,z=0)
        
        Math1=self.Math(M.Add,   (snow_percent,1.3), (turbulence,0.1))
        Math2=self.Math(M.Add,   (Math1, 20.0), -2)
        Math3=self.Math(M.Clamp, (Math2, 1.0), 0)
        Math4=self.Math(M.Step,  (Math3, 1), 0.001)
        Math5=self.Math(M.Add,   1.0,(Math4, -1.0))				
				</pre>
				
				This creates several nodes (<strong>realtime, directly into your preview!</strong>), some connected with each other (it's a part of an existing shader published at Renderosity). But that's not all (and not the only way to do it). Your are
				also able to do math with shader-nodes. Like this:
				
				<pre>
        bl=self.node(T.EDGEBLEND,
                     Inner_Color=1,
                     Outer_Color=2)
        
        normal=self.node(T.N, x=0,z=0)
        
        first_row=bl+5-(bl*(2*normal))
        
        self.node(T.MATH,
                  Math_Argument=M.Sin,
                  Value_1=normal*3+first_row-1,
                  SetName="Sinus"
                  )
				
				</pre>
				(I call this "uselessShaderNodes", because there is no functionality, but it's good to
				get a picture of what can be done with MatNodes5).<br/>
				To see what comes out if the few lines above are executed, klick <a target="_blank" href="SHADER_uselessMath2.jpg" ><strong>here</strong></a>
	</p>
	<p>
	        Because it is too mutch to decribe here, <a target="ADP MatNodes5 PDF" href="ADP_MatNodes5.pdf">download the description</a> I just started.
	        Description is not ready yet (means, not everything is completly described) and I'm really busy adding new functions/methods/classes.<br/>
	        There are a few samples in the package, with debugging switched on. This creates a lot of lines to inform you what's going on
	        if the demo-scripts are executed. Just start each demo from within your Poser (load a figure or a prop first).
	</p>
	</long>
  </entry>
  
  
  <entry id="ADPPoserClientChat.zip" size="" date="07/01/2007" version="0.1">
    <short>Demo using ADPPoserClient with Tkinter to remote control a Poser server running CommServerLib or PoserEvalServer.</short>
    <long>
	<p>After starting this a connection is made to the local Poser server (change the IP-address/Port in the soure to
	connect to any other server). There are 2 windows: One for what comes from the Poser server (status messages, error
	messages or answers to your questions) and one (below the other) to insert what should be send to the Poser server
	after you pressed &lt;Return&gt;. 
	</p>

	</long>
  </entry>
	
	
	<entry id="ADPGammaAndMore-0a.zip" size="12.9KB" date="09/05/2008" version="0.1a">
    <short>Image Gamma and Color correction. <p>Bugfixed version.</p></short>
    <long>
	<p>Bugfix and small extensions. See version below for description</p>
	</long>
  </entry>
  <entry id="ADPGammaAndMore.zip" size="" date="07/05/2008" version="0.1">
    <short>Image Gamma and Color correction.</short>
    <long>
			<h4>NUDITY at the bottom of this description <small>(Image for demonstration)</small></h4>
			<p>Stand alone Python 2.5 app based on Tkinter and using PIL to get more out of your Poser Images.</p>
			<p>
				The main reason to write this script was the poor image quality of most Poser images. This version is a quick
				first hack for those people that likes to see what they do (original is a command line utility for batch processing
				written several years ago). It's using only Tkinter and PIL to avoid compatibility problems.
			</p>
			<h4>IT'S FAST - but please, don't use it from within Poser - use a standalone Python interpreter</h4>
			<p>
				On an todays avarage computer the script works very fast. Even with larger images!
				</p>
			<h4>Features</h4>
			<ul>
				<li>Gamma correction for each of R, G and B seperately</li>
				<li>Brightness control</li>
				<li>Contrast control</li>
				<li>Color intensity control</li>
				</ul>
			<p><strong>Short description:</strong></p>
				<blockquote>
				<p>Make sure you have <strong>Python 2.5</strong> and <strong>PIL</strong> installed. You can download both from
				<a target="_blank" href="http://www.python.org/download/">Python.org (Python)</a> and <a target="_blank" href="http://www.pythonware.com/downloads/index.htm">Pythonware.com (PIL)</a>
				</p>
			<p>
				Copy the content from this ZIP file to a folder of your choice. If you've installed Python correctly, a doubleclick on <strong>PoserImage.py</strong> will
				start this app.
				</p>
			<p>
				On the first start, the app appears on a random screen position with a more ore less random size. If you change the
				position and/or size, it will appear on exactly the same position on the next run.
				</p>
			<p>To load an image, click <strong>New</strong> or <strong>Add</strong> from the toolbar. Select the file you want to
				work with in the upcomming dialog. The path you last used is saved between sessions, so you probably have to navigate only for the first time
				you select a file.<br/>
				Wait a second until this image is loaded.
				</p>
			<p>
				The difference between <strong>New</strong> and <strong>Add</strong> is, that with <strong>Add</strong> previously
				loaded images are kept. If you press and hold the left mousebutton onto an image, you may move it around. With this you are
				able to load overlays (for a copyright notice for example).
				</p>
			<p>
				Press the <strong>right mousebutton</strong> on a loaded image to see a small submenu popping up.<br/>
				From this submenu, you may send the selected image up or down, or, most important, can select an <strong>Image Operation</strong>
				dialog.
				</p>
			<p>
				If you click ok in the dialog, all changes are taken over to the selected image. If you click cancel, nothing is changed.<br/>
				Please note that all parameters you entered are saved between sessions (except if you've pressed cancel).
			</p>
			<h4>Image Operation</h4>
			<p>
					Use the dials to change values. If you release the mousebutton, the image will be changed to the new values.<br/>
					(The dials doesn't work optimal - release the mouse and start again; if you find the trick how to do it better, just drop me a mail)
			</p>
			   <p>
					To insert values directly, point your mouse to one of the inputfields. Change the value and press <strong>Return</strong>.
				</p>
			<p>
				Please keep in mind that this script is Work In Progress. Please give feedback, critique, talk about what you want to see.
				And if you somebody is willing and able to make a better description: be my guest! I'm a german with a lot of problems while writing english :(
			</p>
				<p>
					Here is a sample - V4 standard texture (all texturefiles gamma corrected), slightly modified shader, 2 lights.<br/>
					The one to the right is Poser unmodified, the left one is slightly corrected with this script.<br/>
					<img src="V4-gamma5b.jpg" />
					</p>
			</blockquote>
	</long>
  </entry>
	
	
  <entry id="ADPPoserClient.zip" size="" date="07/01/2007" version="0.1">
    <short>Simple and threaded client to be used with CommServerLib or PoserEvalServer.</short>
    <long>
	<p>Class to connect and communicate with one or more Poser servers running CommServerLib or PoserEvalServer.</p>
	<p>The main class primarely has 2 functions:
		<ul>
			<li>Initialising/connecting to a server</li>
			<li>Sending a question, receiving and returning an answer</li>
		</ul>
		Because a connection may not be successfull while trying to connect to a Poserserver, errorhandling is
		the most important part while initializing and sending/receiving data.
	</p>
	<p>
	The second class in this script is a threaded version. With this one is able to hold connections to as
	mutch Poserservers as needed, all to the same time.
	</p>
	</long>
  </entry>
  <entry id="ADPPoserClientChat.zip" size="" date="07/01/2007" version="0.1">
    <short>Demo using ADPPoserClient with Tkinter to remote control a Poser server running CommServerLib or PoserEvalServer.</short>
    <long>
	<p>After starting this a connection is made to the local Poser server (change the IP-address/Port in the soure to
	connect to any other server). There are 2 windows: One for what comes from the Poser server (status messages, error
	messages or answers to your questions) and one (below the other) to insert what should be send to the Poser server
	after you pressed &lt;Return&gt;. 
	</p>

	</long>
  </entry>

	<entry id="CommServerLib_1_71.zip" size="" date="07/02/2007" version="1.71">
    <short>IPC connection to Poser Python. Bugfixed version.</short>
    <long>
	<p>See version 1.7 for description</p>
	<p>Now able to run outside of Poser. May be usefull for testing.</p>
	</long>
  </entry>
  <entry id="CommServerLib_1_70.zip" size="" date="06/21/2007" version="1.7">
    <short>IPC connection to Poser Python</short>
    <long>
      <p>This is a "server" listening on localhost, Port 8080, made to be used as a class for your own projects.</p>
      <p>
	    <strong>DEMO INCLUDED</strong>:<br/>
        Just starting the script from within Poser results in a Python command prompt similar to a standard Python shell.
        You may reach your Poser Python shell while using telnet to make a connection to localhost:8080.
      </p>
      <p>Study the well documented sourcecode to get a picture of what is possible with this script.<br/>
      Beside of using this as a Python shell for Poser, this script is primarily usefull as a basic class to do IPC (Inter Process Communication) with Poser.
      </p>
      <p>
        Because Windows telnet seems not to be a real standard telnet client, you probably want to install a fully functional telnet (and ssh client).
        Small, fast and full of features.<br/>
        Download from <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">PuTTY Downloadpage</a>
      </p>
    </long>
  </entry>
  <entry id="ADPScaleEntry.zip" size="" date="06/15/2007" version="n/a">
    <short>Poser like dials for your Python scripts (requires <a target="_blank" href="www.effbot.org">PIL</a>)</short>
    <long>
		<img style="float:left;margin-left:0" align="LEFT" hspace="10" alt="Preview ADPScaleEntry" src="poserdials.jpg" />
      <p style="margin-left:.5cm">
        Yes, I'm a bit proud that I could make this possible :)<br/>
		And, you wouldn't believe it until you see it: it's very small!<br/>
		What this class does is best shown with this image to the left.<br/>
      </p>
      <p>
        The dials behave in a similar manner as the well known Poser dials do.<br/>
		Your may display the dials with different sizes, if you wish.<br/>
		Handling is very simple: Just use it as you do with other standard Tk-widgets. It has some special keywords, all well documented in the source.<br/>
		There is no need to hold each dial in an array or something like this to get the values, because a special virtual event is fired if a value is
		changed. So, just inspecting the event-parameter "ev.widget" tells you which dial is updated.
      </p>
	  <p>
	  	If you run this script with Poser-Python, you must make sure that the images are in the same folder the script is located. A script running with 
		Poser Python has no chance find the path themself.
		*<br/>
		After a quick test it assumes that Poser 7 and <strong>ImageTk.Photoimage</strong> are no friends. Poser 7 dies silently on my machine.
	  </p>
	  <p>
	  	<strong>Please note: This class is using <a target="_blank" href="http://www.effbot.org/downloads/#PIL">PIL from effbot.org</a> for the required images and image manipulation.</strong>
	  </p>
    </long>
  </entry>
  <entry id="ADPpopupballon.zip" size="" date="02/17/2007" version="n/a">
    <short>Popup ballons for your help text</short>
    <long>
      <p>
        There is a small demo app at the end of the source to show how to use it.
      </p>
      <p>
        To see it work start the script and let the mouse rest over the widgets.
      </p>
    </long>
  </entry>
  <entry id="ADPBrowserDialog.zip" size="" date="02/06/2007" version="n/a">
    <short>Simple, specialized webserver for Poser</short>
    <long>
      <p>
        Sometimes you may need more features with a dialog - Tkinter is complicated, without bells and wistles,
        and not available on Macs (Tkinter from Poser 7 and OS-X works!).
      </p>
      <p>
        If you are familar with HTML, what about creating a full featured webpage (including Javascript)
        to design your dialogs?
      </p>
      <p>
        This little scripts shows you how to do it. It is using <a href="CommServerLib.zip">
          <strong>CommServerLib</strong>
        </a> to do the basics.
      </p>
      <p>
        This script creates and starts a little webserver listening on port 8080. The webserver knows only GET requests.
        If a GET request (from a webbrowser) comes in, it looks for submitted data and collect this data in a dictionary
        named query. The requested page is delivered to the Browser if the page could be found.
      </p>
      <p>
        If the magic page DATA (no extension) is requested, the script assumes this was the last page and stops.
      </p>
      <p>
        This script is a nice startpoint to create your own Poser Application Server!
      </p>
      <p>
        An index.html file is included. Unzip this scriptpackage to the same folder where CommserverLib resides.<br/>
        Start the script (nothing seems to happen in your Poser - you may still use it) and start your webbrowser.<br/>
        Request http://127.0.0.1:8080 and the contained index.html will be shown. Enter something into the input fields
        and hit submit. The Poser Python Console window will show what you left into the input fields.<br/>
        The script has stopped, so if you want to try again, you have to re-start the script.
      </p>
      <p>Should work with P5/P6/P7.</p>
    </long>
  </entry>

  <entry id="ADPDropdownList.zip" size="" date="01/22/2007" version="n/a">
    <short>Simple dropdown list to be used with Tkinter</short>
    <long>
      <p>
        A really simple dropdownlist as a class (quick hack).
      </p>
      <p>
        Start the script (from Poser Python or stand alone) to checkout how it looks. But make sure you have
        ADPPoserConsole also available, because it's using class App to hold the demo simple to read.
      </p>
      <p>
        To use it in your own script, write
        <pre>
          from ADPDropdownList import DropDown
          DropDown( master, width=25)
        </pre>
        <p>
          Or copy the class directly into your script and use it like other widgets.<br/>
          Please note: All parameters except <strong>width</strong> are handed over to the Frame widget wrapping the Entry and
          Button Widget.
        </p>
      </p>
    </long>
  </entry>
  <entry id="ADPPoserConsole_a1.zip" size="" date="01/26/2007" version="n/a">
    <short>A real Python console (Shell) for Poser</short>
    <long>
      <p>
        Tested with P5/P6/P7.<br/>
        No real description available yet. Study source.
      </p>
      <p>
        After starting the script, a small "Application Window" and a Console Window will pop up.<br/>
        Use the bottom part of the Console Window to insert any Python commands (even whole scripts).<br/><br/>
        Pressing SHIFT-Enter will execute what is contained in the input window (from first line to last line). 
        Output is shown in the upper window.<br/>
        Pressing CTRL-Enter will execute the actual line only (line where the cursor is located).
        <p>
          All Error or other outputs are redirected to the upper part of the Debug Window.
        </p>
        <p align="center">DON'T FORGET TO CLOSE THE STANDARD POSER PYTHON OUTPUT WINDOW</p>
        <h4>
          SIDE-EFFECT: Poser needs less resources in idle-mode if this script is running. See your task manager to check CPU-cycles.
          Should be (close to) 0% if Poser isn't busy with rendering.
        </h4>
        <div style="position:relative;margin-left:0mm;padding-left:0mm">
          USEFULL one-liners (try them from the console):
          <ul style="margin:0mm;font-family: Courier New">
            <li>actor_names = map( lambda x: x.Name(), [a for a in poser.Scene().Actors()] )</li>
            <li>actor_names = map( lambda x: x.Name(), [a for a in poser.Scene().Actors() if a.IsProp()] )</li>
            <li>light_names = map( lambda x: x.Name(), [a for a in poser.Scene().Lights()] )</li>
          </ul>
        </div>
        <p>
          You may start any script by typing:
          <span style="margin:0mm;font-family: Courier New">execfile( scriptname )</span>
        </p>
      </p>
    </long>
  </entry>
  <entry id="PoserPythonCreateRegEntry.py" size="" date="" version="n/a">
    <short>Registry entries for Poser Python</short>
    <long>
      <p>
        Poser Python does not allow the installastion of standard Python Packages with Windows, because Poser
        didn't register Python correctly. So no Windows installer is able to find your Poser Python.
      </p>
      <p>
        This little script creates a file in your Posers main directory named <strong>poserpython-[version].reg</strong> (where
        [version] is Pythons version number, depending on which Poser Version you have installed.<br/>
        After creating this litle file (you may check it using a normal text editor), make sure your Poser is closed and
        simply doubleclick <strong>poserpython-[version].reg</strong> to create the registry entries Poser Python needs.<br/>

      </p>
    </long>
  </entry>
  <entry id="poserfileOOPlib.zip" size="" date="" version="n/a">
    <short>Reading Poserfiles using OOP</short>
    <long>
      <p>A class lib to read Poserfiles. Subclass this lib. You'll find plenty descriptions in the sourcecode.</p>
      <p>A complete script to extract joint parameters is included as a demo.</p>
    </long>
  </entry>
  <h1>Stand alone Programs - Python scripts with embedded Python interpreter</h1>
  <entry id="ADPmovechannel_v102.zip" size="" date="1/9/2008" version="1.1">
    <short>Moving/Renaming DAZ channel entries</short>
    <long>
	  <h4>Source not included</h4>
      <p>Using the DAZ method for using morphs often results in a desaster: The channel a morph is using is also used
      from another morph. As a result, a user ins't able to have both morphpackages installed at the same time.</p>
      <p>With this stand alone program a user becomes able to move/rename
      morphs.</p>
      <p>This package contains a Python script packed as an exe-file. Anything the script needs to execute properly
      is included into this EXE. Even the required Python interpreter. So you are able to use this program without Poser.</p>
      <p>Just doubleclick the EXE and follow the instructions you'll see.</p>
    </long>
  </entry>
  <entry id="ExtractJoints.zip" size="" date="1/9/2008" version="1.1">
    <short>Extracting joint parameters to a pose file</short>
    <long>
	  <h4>Source not included</h4>
	  <small>See poserfileOOPlib.zip above if you are interested in source.</small>
      <p>Saves Joint Parameters from selected actors of a character as a pose file.</p>
      <p>This package contains a Python script packed as an exe-file. Anything the script needs to execute properly
      is included into this EXE. Even the required Python interpreter. So you are able to use this program without Poser.</p>
      <p>Just doubleclick the EXE and follow the instructions you'll see.</p>
    </long>
  </entry>
</scripts>
