Posts Tagged ‘Editing’
Twitter Weekly Updates for 2009-08-09
Saturday, August 8th, 2009
- @KimKnox SpaceFluffin aX da univers, On d Starship Enterprise under Capt Knox. SFin aX da univers, 1ly goin fwd cauz we cnt fnd reverse. in reply to KimKnox #
- @KimKnox lol It was in my head messing up my editing so I thought I’d share it in reply to KimKnox #
- Doubt they ment this for working out comparative value of money stolen at different famous robberies http://bit.ly/c8VC6 #
- A good days editing almost got a complete piece to send off. Now a little light relaxation before bed… #
- listening to “Johnny Clegg & Savuka – One (Hu)’ Man One Vote” ♫ http://blip.fm/~b1stj #
- listening to “Tasmin Archer – Lords of the New Church” ♫ http://blip.fm/~b1t4h #
- listening to “nik kershaw one world” ♫ http://blip.fm/~b1tkw #
- @guardiantech G-Force http://bit.ly/HyvGW but Bruckheimer’s got a short memory Cats&Dogs did spy pets 8 yrs ago in reply to guardiantech #
- listening to “Billy Bragg – Moving The Goalposts” ♫ http://blip.fm/~b2qox #
- listening to “Ofra Haza Im Nin Alu” ♫ http://blip.fm/~b2r4a #
- Haggis invented in England? http://bit.ly/1olEv5 Doesn’t really matter its Scottish now.
Just glad I’m not in a meeting with the SAA today. # - listening to “Sisters of Mercy – Temple of Love ’92″ ♫ http://blip.fm/~b2uo7 #
- @jearle Looks like there might be something fishy going on http://bit.ly/4hyQyv in reply to jearle #
- listening to “Nickel Creek- Hanging by a thread” ♫ http://blip.fm/~b2wmr #
- RT @criticalhits criticalhitsTop 10 Comic Book Cities from Architects Journal http://is.gd/20FDx #
- 2 Sites updated without a hitch RT wordpressWordPress 2.8.3: http://bit.ly/Qf1Cx #
- Akismet 227 : Spammers 0 #
- @very_true_thing I’ve no fish knife hang up but I did buy ice cream spoons on Sat so I can get the last of the jam out of jars – go with age in reply to very_true_thing #
- @very_true_thing It gets worse they do long handled melon spoons too. Is there a market for CDGs (Collectable Dinnerservice Games)? in reply to very_true_thing #
- RT @DanDiplo Is this the best programming related song ever? http://bit.ly/InfF0 #
- @very_true_thing I’ve seen grapefruit knives but never tomato knives – does that mean those are an Ultra rare or just a Promo? in reply to very_true_thing #
- Will you click unfollow, Oh ethereal twit spammers, By autumn? #poem #
- Back from round trip to London to see client. Liverpool a lot warmer. #
- What fuels US sitcom writers? Sort of a RT of @KenLevine http://bit.ly/aqBxN #
- What (if anything) should we read into it if Clarkson is hit by a meteorite now? #
- RT @richeym: @DanDiplo @impworks He does have a way with lyrics. Probably has the best zombie-related song too: http://bit.ly/9j3Ih #
- Is this cartoon the best comment on Bingoo deal? http://bit.ly/H8CGY #
- Quantum physics announcement on the Tube yesterday “Please use all entrances to enter the station” Are passengers wavicles? #
- Is it me or does aquiavic’s comment on my blog make no sense or is it some new sort of weird spam? http://bit.ly/3Shlg #
- Just saw a picture listed on a stock photo site described as “London Sky line 1970s”. Just one thing – when was the Gerkin built? lol #
- For the spec that just went in the recycling bin ♫ http://blip.fm/~b8xmf #
- RT: mediaguardian Twitter’s Evan Williams grilled on Demi Moore in Newsnight interview: http://bit.ly/3NNDTz [The claws come out at the end] #
- RIP John Hughes http://bit.ly/tTBGs ♫ http://blip.fm/~ba1cq #
- @KimKnox You did but don’t worry – I just saw a twitterer who posted the same tweet every 5 minutes for a day… in reply to KimKnox #
- RT @jearle Dear Tony Carter, You don’t get it, you’re an idiot. KTHXBYE. http://bit.ly/1Acpxs #
- RT @guardianweekly American word introduced into the office – neatnik: a person overly obsessed with tidiness, particularly IN the office #
- @KimKnox Or you didn’t and I saw it on your RSS feed lol.Too many ways to keep up these days.Should just turn everything off once a week. #
- RT @guardiantech: Twist in the tale of questioning spam http://bit.ly/sR5mq #
- RT @guardiantech: Charlie’s Angles: Why can’t local government and open source be friends? http://bit.ly/KPOVY #
Twitter Weekly Updates for 2009-08-02
Saturday, August 1st, 2009
- Weather = Yuch so just messin' around with Vue #
- @very_true_thing So did it work? in reply to very_true_thing #
- Comment spammers found my site yesterday and (so far) akismet has caught every single one of em #
- Sustained in my editing efforts by an excellent batch of Pork and Mushroom Curry http://bit.ly/AgZze #recipe #food #
- RT @AllenVarney William Shatner masterfully recites Sarah Palin's farewell speech (Conan O'Brien): http://bit.ly/RkVWx via @JamesWallis #
- RT: @jearle Big Cat sighting in Scotland. http://tw3.it/LI – it's a Puma, by the look of things, running wild. #
- RT: @KimKnox ooh this looks very cool. Trailer for Waters of Mars – Doctor Who http://bit.ly/AQtBJ #
- So I need to join Scribd to download a pdf copy of a document but not to print it? Stupid controlfreakery and bad for the environment too #
- And printing from Scribd in Firefox = completely broken too. 20 sheets of paper wasted. /rant #
- RT @jearle If you Google "Scottish Cuisine", my Munchy Box blog post is on the front page. http://bit.ly/e640w #
- @jearle Wish I'd photos of the Scottish Indian I had a business trip. Unlike any English Indian I've had. Clearly related to your Munchy Box in reply to jearle #
- @jearle I wish I could work that into my current project. I'm forcing myself to stick to just London so it wont get out of hand in reply to jearle #
- Can it really take an hour and a half to visit the Pencil Museum? http://bit.ly/6Rsuo Is it twinned with the Hotel California? #
- @KimKnox So how cheesy is Satin Spar's cover or is it classy like Dark Host? in reply to KimKnox #
- @KimKnox Good news – I'll look forward to seeing it then. Meanwhile contemplating if IsItCheese.com or CheeseOrNot.com is a better URL… in reply to KimKnox #
- @KimKnox Hmm. That ones barely work safe… in reply to KimKnox #
- Aarrgh. Basic maths failure. What was I thinking when I wrote a table for a 3d6 roll with the first entry being for a roll of 2? #
- Some really nice entries for the Vue 3D Environment Competition 2009 http://bit.ly/1b7BE9 glad I don't have to pick the winner #
- listening to "cacharpaya – incantation 1982" ♫ http://blip.fm/~at2mc #
- listening to "Capercaillie – Coisich A Rùin – video clip Gàidhlig Gaidhli" ♫ http://blip.fm/~atgp8 #
- listening to "MANDOLIN RAIN original video" ♫ http://blip.fm/~atp60 #
- RT @criticalhits Why can't we show these ads instead of Evony http://is.gd/1TeiZ #
- I always thought some perfumes should be banned under the Hague Conventions http://bit.ly/t2LBr #
- @jearle lol. We'll keep that off the banned list just for you. in reply to jearle #
- @KimKnox Let Blur distract you. That way the rest of Write Club don't feel so bad about our pitiful comparative word counts in reply to KimKnox #
- for @KimKnox your mission should you choose to accept it is to finish Space Fluff ♫ http://blip.fm/~autqy #
- RT @johnmcc: Probably the best explanation of the xhtml 2 announcement I've yet seen: http://bit.ly/2pSCJN via @jearle #
- Will economics defeat Moore's Law? http://bit.ly/ThLjm #
- @KimKnox Sounds like you need this instead of Mission Impossible ♫ http://blip.fm/~auw9u #
- Looking for the Johnny Clegg original I found this cover ♫ http://blip.fm/~av040 #
- listening to "Tanita Tikaram – Twist In My Sobriety" ♫ http://blip.fm/~av0pd #
- listening to "Pet Shop Boys – Suburbia (HD)" ♫ http://blip.fm/~av1gx #
- Hunting for the early 90s rock cover. This isn't it but hey… ♫ http://blip.fm/~av1x0 #
- And it definitly isn't this one either – I give up ♫ http://blip.fm/~av2gz #
- Thats a tough one RT @mediaguardian: Vote for your favourite TV show of the decade: http://bit.ly/4t5loz. #
- From the Guardian: 'Swine Flu readiness has become a competitive sport'. Will we be hosting the world cup? http://bit.ly/kHmjv #
- @richeym The Wires really caught up. When I voted The West Wing was ahead of it. in reply to richeym #
- RT @DanDiplo Why you shouldn't design birthday cakes using Microsoft Word…. http://bit.ly/m484u #fail #programming #webdevelopment #
- Sausage Brown Barm Red Sauce #famishedfriday #
- @JamesWallis Far too early to call the Ashes because of three little words: England Batting Collapse in reply to JamesWallis #
- RT @guardiantech: Volomedia claims podcast patent http://bit.ly/yNcsq #
- @very_true_thing #VisitLondon (http://ustre.am/4n0W) Tower bridge faster than twitter – Just closed when I got the page loaded #
- listening to "The Peanuts Theme" ♫ http://blip.fm/~az5p3 #
Hand me my Chainsaw of Editing
Thursday, July 23rd, 2009
The rebuilding and post launch work on impworks is now pretty much done which means I can get back to other projects. tonight I’ve taken an editing chainsaw to a 120 page text which is the core design for a game and so far I’ve cut it to 60 pages. Now I’m at the hard part: cutting stuff I want to keep, stuff that took hard thinking or hard research. I’ve a simple incentive. I know that if I get this right and this text ends up in print then there is a chance I can see the cut material in print as supplements.
So tomorrow its away with the chainsaw and out with the pruning knife.
Using EcoSystem To CSV
Friday, June 19th, 2009
EcoSystem to CSV and CSV to EcoSystem are two Python scripts for Vue 6 Infinite and Vue 5 Infinite that work together to provide a rudimentary method for editing EcoSystems using a spreadsheet. An ecosystem consists of a number of instances of the objects that make it up. The scripts come in a single Zip Archive. This file includes two python files: ecotocsv.py and csvtoeco.py.
EcoSystem to CSV / CSV to EcoSystem
ecotocsv.py, when run with an object with an EcoSystem texture, produces a CSV (Comma Separated Value) file that can be loaded into a text editor and many spreadsheet packages. Each line in the CSV file contains information about one instance in the EcoSystem. The typical first few lines of CSV file produced by ecotocsv.py would look something like:
Instance,Position X,Position Y,Position Z,Rotation X,Rotation Y,Rotation Z,Scale X,Scale Y,Scale Z,Filename,Action
0,122,157,83,0,9,351,0.92,0.5,1.2,\moje inf\square stone 2.vob,T1,128,153,83,1.2,358,351,0.88,0.81,1.17,\moje inf\square stone4.vob,T
2,126,160,83,9,352,6,0.83,0.95,1.03,\moje inf\square stone8.vob,T3,123,154,83,0,351,349,0.97,0.95,1.07,\moje inf\square stone 2.vob,T
csvtoeco.py, when run on the same object with the same EcoSystem applied as before (without repopulation or other runs of csvtoeco.py on it), modifies the EcoSystem’s instances. After running ecotocsv.py and before running csvtoeco.py I would suggest saving your file so that if the changes don’t work quite as you expected you can modify the CSV file again, reload the scene and try it again.
The CSV file has Twelve Columns:
- Instance
- Position X
- Position Y
- Position Z
- Rotation X
- Rotation Y
- Rotation Z
- Scale X
- Scale Y
- Scale Z
- Filename
- Action
Instance is the number of the instance in the EcoSystem. Don’t edit this number.
Position X, Y and Z are the X, Y and Z coordinates of the instance.
Rotation X, Y and Z are the X, Y and Z rotations applied to the instance.
Scale X, Y and Z are the scale factors of the instance.
Filename is the filename of the instance’s base object. Editing this has no effect when csvtoeco.py is run.
Action is an action to be carried out on the instance. It can either be T for Transform or D for Delete. If it is T, any changes to Position, Rotation or Scale you make will be applied to the instance on running csvtoeco.py. If it is D, this instance will be deleted.
Example 1
To delete the 2nd Instance from the EcoSystem from the example file above change the T on the line with Instance number 2 to a D.
Instance,Position X,Position Y,Position Z,Rotation X,Rotation Y,Rotation Z,Scale X,Scale Y,Scale Z,Filename,Action
0,122,157,83,0,9,351,0.92,0.5,1.2,\moje inf\square stone 2.vob,T1,128,153,83,1.2,358,351,0.88,0.81,1.17,\moje inf\square stone4.vob,T
2,126,160,83,9,352,6,0.83,0.95,1.03,\moje inf\square stone 8.vob,D3,123,154,83,0,351,349,0.97,0.95,1.07,\moje inf\square stone 2.vob,T
Example 2
To line up the instances’ X positions so they form a straight line, change all the numbers in the Position X column to the same number.
Instance,Position X,Position Y,Position Z,Rotation X,Rotation Y,Rotation Z,Scale X,Scale Y,Scale Z,Filename,Action
0,122,157,83,0,9,351,0.92,0.5,1.2,\moje inf\square stone2.vob,T1,122,153,83,1.2,358,351,0.88,0.81,1.17,\moje inf\square stone4.vob,T
2,122,160,83,9,352,6,0.83,0.95,1.03,\moje inf\square stone 8.vob,T3,122,154,83,0,351,349,0.97,0.95,1.07,\moje inf\square stone 2.vob,T
Vue Tutorials
Friday, June 19th, 2009
Vue Python for Beginners
A short introduction to using Python scripts with Vue 5 Infinite in 5 parts.
- What is Python?
- How do I run a Python Script?
- How do I use a Python Script?
- What Next?
- So where can I find Python Scripts?
Punching Holes in the Sky
Sunbeams or Godrays appear in Vue renders when clouds break up the sun light. In this tutorial I’ll show you how to create them by punching holes in the cloud.
Cloud Layer Sculpting in Vue
Make clouds that are shaped like words or objects in Vue by cutting out clouds in shapes of my your own design from cloud layers.
Creating a Bifurcated Lava Flow in Vue Infinite
A tutorial on how to create a lava flow effect in Vue Infinite using an ecosystem and metablobs:
Creating a Bifurcated Lava Flow in Vue Infinite
Editing EcoSystems
A tutorial introducing my scripts for changing EcoSystems using a CSV file that can be edited in a spreadsheet. With improvements in Vue this technique is now not really needed but I’m leaving it up, at least for awhile for posterity: Using EcoSystem To CSV / CSV to EcoSystem
Mass Convert Script
Friday, March 27th, 2009
This python script will convert between two 3d formats using Vue to do the hard work. If you are using Vue 6 (Build 289182 or later) or Vue 7 you can convert to the Vue vob file format using it. It supports the import of 3dmf, 3ds, cob, dxf, lwo, obj, pz3, raw, shd, skp and vob. It can use vue to export 3ds, c4d, dxf, lwo, obj, shd and vob. Two versions are available. The most recent version has a Graphical User Interface (GUI). To use it you’ll need to have wxPython installed for Vue on your computer. I’ve not packaged wxPython with MassConvert yet so for now you’ll need to have either SkinVue or the VueToolbar installed which both include wxPython. The other version doesn’t have a graphical user interface and doesn’t require wxPython but will require editing of the script to use to set the input and output paths for the files.
Mass Convert GUI 0.5.1 (5k Zip Archive)
Mass Convert 0.5.1 (No GUI) (4k Zip Archive)
Python Code – Mass Convert (GUI)
######################################################################################################
# Convert between 3d object formats using Vue
#
# - massconvert.py
# - By Mark Caldwell
# - Version 0.5.1
# - 17th June 2007
# - Copyright Mark Caldwell 2007
# - Tested with Vue 6 Infinite on a PC
#
# Requires wxPython to be installed in to Vue to use.
#
# How to use in 2 easy steps
#
# 1. Download this file onto your computer
#
# 2. Run the script then follow the in script help for
# more information
#
# Conversion options are those currently selected under
# File -> Export As
#
######################################################################################################
######################################################################################################
#
# Set up by importing libraries
#
######################################################################################################
import os # import os libraries
import sys
VuePythonPath = sys.path[1] # get the Vue python path
VuePythonFolder = os.path.abspath(os.path.join(VuePythonPath[0:VuePythonPath.find("Python")],"Python"))
wxPythonFolder = os.path.abspath(os.path.join(VuePythonFolder,"PythonLib/wx"))
os.chdir(wxPythonFolder)
import wx # import the wx libraries
import wx.html # import the wx html libraries
import string # import string libraries
import time # import time
# get the Vue Python Folder
VuePythonFolder,junk = os.path.split(VuePythonPath)
# Get the Vue Root Path
VueRootPath,junk = os.path.split(VuePythonFolder)
######################################################################################################
#
# Create lists of file types that can be imported and exported
#
######################################################################################################
InExtensions=['3dmf','3ds','cob','dxf','lwo','obj','pz3','raw','shd','skp','vob']
OutExtensions=['3ds','c4d','dxf','lwo','obj','shd','vob']
######################################################################################################
#
# Class for the Main GUI
#
######################################################################################################
class MassConvertApp(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent = None, id = -1,
title = "MassConvert",
size = (600,400),
style = (wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX)))
self.SetFont(wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL)) # Set Default Font
BoldFont=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.BOLD) # Create Bold Font for later use
self.ClearBackground()
# Set Some variables to use later
self.inFilepath = VueRootPath
self.outFilepath = VueRootPath
self.out_vob=0
self.InExtensionsBox=[]
self.OutExtensionsBox=[]
panel = wx.Panel(self) # Create Panel
panel.SetBackgroundColour('White')
statusBar = self.CreateStatusBar() # Create Status Bar
# Create Menu Structure
menuBar = wx.MenuBar()
menu1 = wx.Menu()
in_dir=menu1.Append(wx.NewId(), "&Import...", "Directory to import files from")
self.Bind(wx.EVT_MENU, self.OnIn, in_dir)
out_dir=menu1.Append(wx.NewId(), "&Export...", "Directory to export files to")
self.Bind(wx.EVT_MENU, self.OnOut, out_dir)
menu1.AppendSeparator()
exit=menu1.Append(wx.NewId(), "Exit")
self.Bind(wx.EVT_MENU, self.OnExit, exit)
menuBar.Append(menu1, "&File")
menu2 = wx.Menu()
helpmenu=menu2.Append(wx.NewId(), "&Help", "Help using MassConvert")
self.Bind(wx.EVT_MENU, self.OnHelp, helpmenu)
about=menu2.Append(wx.NewId(), "&About", "About MassConvert")
self.Bind(wx.EVT_MENU, self.OnAbout, about)
menuBar.Append(menu2, "&Help")
self.SetMenuBar(menuBar)
CheckBoxSize=(90, 20)
InColumnX=35
OutColumnX=180
inc=20
StartY=60
# Create File Path Text Display
text=wx.StaticText(panel,-1,"Import File Path:",(10,10))
text.SetFont(BoldFont)
self.InFilePathText=wx.StaticText(panel,-1,self.inFilepath,(120,10))
text=wx.StaticText(panel,-1,"Export File Path:",(10,10+inc))
text.SetFont(BoldFont)
self.OutFilePathText=wx.StaticText(panel,-1,self.outFilepath,(120,10+inc))
# Create File Import / Export Count Display
self.NumberOfFilesImportedLabel=wx.StaticText(panel,-1,'',(300,60))
self.NumberOfFilesImportedLabel.SetFont(BoldFont)
self.NumberOfFilesImported=wx.StaticText(panel,-1,'',(470,60))
self.NumberOfFilesExportedLabel=wx.StaticText(panel,-1,'',(300,80))
self.NumberOfFilesExportedLabel.SetFont(BoldFont)
self.NumberOfFilesExported=wx.StaticText(panel,-1,'',(470,80))
self.ConvertTimeLabel=wx.StaticText(panel,-1,'',(300,100))
self.ConvertTimeLabel.SetFont(BoldFont)
self.ConvertTime=wx.StaticText(panel,-1,'',(470,100))
# Create Check Boxes for Import Types
y=StartY
text=wx.StaticText(panel,-1,'Input File Types: ',(10,y))
text.SetFont(BoldFont)
y=y+inc
x=InColumnX
for Extension in InExtensions:
Box=wx.CheckBox(panel, -1, Extension, (x, y), CheckBoxSize)
self.InExtensionsBox.append((Extension,Box))
y=y+inc
yBottom=y+inc+inc
# Create Check Boxes for Output Type
y=StartY
x=OutColumnX
text=wx.StaticText(panel,-1,'Output File Types: ',(155,y))
text.SetFont(BoldFont)
y=y+inc
for Extension in OutExtensions:
Box=wx.CheckBox(panel, -1, Extension, (x, y), CheckBoxSize)
self.OutExtensionsBox.append((Extension,Box))
y=y+inc
y=y+inc+inc
# Create Convert Button
self.button = wx.Button(panel, -1, 'Convert', pos=(OutColumnX, y))
self.Bind(wx.EVT_BUTTON, self.OnClickConvert, self.button)
self.button.SetDefault()
self.CenterOnParent() # Center the GUI on the Vue Window
self.ClearBackground()
self.Show(True) # Show the GUI
######################################################################################################
#
# When the convert button is clicked
#
######################################################################################################
def OnClickConvert(self, event):
OutExtensionList=[]
InExtensionList=[]
objImportCount=0
objExportCount=0
startTime=time.time()
for Extension,Check in self.InExtensionsBox:
if Check.IsChecked():
InExtensionList.append(Extension)
for Extension,Check in self.OutExtensionsBox:
if Check.IsChecked():
OutExtensionList.append(Extension)
filenames=os.listdir(self.inFilepath)
for filename in filenames:
for extensionin in InExtensionList:
if '.'+extensionin in filename:
fullPath=self.inFilepath+'/'+filename
obj=ImportObject(fullPath)
if obj:
objImportCount=objImportCount+1
for extensionout in OutExtensionList:
newFileName=self.outFilepath+'/'+filename.replace('.'+extensionin,'.'+extensionout)
if os.path.exists(newFileName)!=True:
SelectOnly(obj)
ExportObject (newFileName)
objExportCount=objExportCount+1
SelectOnly(obj)
Delete()
endTime=time.time()
elapsedTime=endTime-startTime
self.NumberOfFilesImportedLabel.SetLabel('Number of Files Imported:')
self.NumberOfFilesExportedLabel.SetLabel('Number of Files Exported:')
self.ConvertTimeLabel.SetLabel('Time:')
self.NumberOfFilesImported.SetLabel(str(objImportCount))
self.NumberOfFilesExported.SetLabel(str(objExportCount))
self.ConvertTime.SetLabel(str(int(elapsedTime))+' seconds')
self.Raise()
######################################################################################################
#
# When exit and close are clicked
#
######################################################################################################
def OnExit(self, event):
self.Close()
def OnCloseMe(self, event):
self.Close(True)
def OnCloseWindow(self, event):
self.Destroy()
######################################################################################################
#
# Read the Input Directory
#
######################################################################################################
def OnIn(self, event):
dialog = wx.DirDialog(None, "Choose a directory to import from:",self.inFilepath,
style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON)
if dialog.ShowModal() == wx.ID_OK:
self.inFilepath = dialog.GetPath()
self.InFilePathText.SetLabel(self.inFilepath)
dialog.Destroy()
######################################################################################################
#
# Read the Export Directory
#
######################################################################################################
def OnOut(self, event):
dialog = wx.DirDialog(None, "Choose a directory to export to:",self.outFilepath,
style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON)
if dialog.ShowModal() == wx.ID_OK:
self.outFilepath=dialog.GetPath()
self.OutFilePathText.SetLabel(self.outFilepath)
dialog.Destroy()
######################################################################################################
#
# When About is clicked
#
######################################################################################################
def OnAbout(self, event):
dialog = MassConvertAbout(self)
dialog.ShowModal()
dialog.Destroy()
######################################################################################################
#
# When Help is clicked
#
######################################################################################################
def OnHelp(self, event):
dialog = MassConvertHelp(self)
dialog.ShowModal()
dialog.Destroy()
######################################################################################################
#
# About Window
#
######################################################################################################
class MassConvertAbout(wx.Dialog):
text = '''
<html>
<body bgcolor="#ffffff">
<center><table bgcolor="#ffffff" width="100%" cellspacing="0"
cellpadding="0" border="1">
<tr>
<td align="center"><h1>MassConvert</h1></td>
</tr>
</table>
</center>
<p align="center">Version 0.5.0</p>
<p align="center">http://www.impworks.co.uk/</p>
<p align="center">Copyright Mark Caldwell 2007</p>
<p align="center">Tested with Vue 6 Infinite on a PC</p>
</body>
</html>
'''
def __init__(self, parent):
wx.Dialog.__init__(self, parent, -1, 'About MassConvert',
size=(440, 300) )
html = wx.html.HtmlWindow(self)
html.SetPage(self.text)
button = wx.Button(self, wx.ID_OK, "Okay")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(html, 1, wx.EXPAND|wx.ALL, 5)
sizer.Add(button, 0, wx.ALIGN_CENTER|wx.ALL, 5)
self.SetSizer(sizer)
self.Layout()
######################################################################################################
#
# Help Window
#
######################################################################################################
class MassConvertHelp(wx.Dialog):
text = '''
<html>
<body bgcolor="#ffffff">
<center><table bgcolor="#ffffff" width="100%" cellspacing="0"
cellpadding="0" border="1">
<tr>
<td align="center"><h1>MassConvert Help</h1></td>
</tr>
</table>
</center>
<p>This Vue python script reads 3d object files from a selected import directory and saves them in new formats to
a selected export directory. If it finds a file of the same name as one it is trying to create already exists in the
export directory it doesn't export the file.</p>
<p>Select the directory to import files from in the <em>File</em> menu with <em>Import...</em>.</p>
<p>Select the directory to export files from in the <em>File</em> menu with <em>Export...</em>.</p>
<p>Select the types of file to import and the types of file to export with the check boxes.</p>
<p>Once you've made your selections click the <em>Convert</em> button and Vue will import the selected files
and export them in the selected formats.</p>
<p>The export will use the settings from the last export you did with Vue.</p>
<p>When converting some file formats (such as poser) Vue will ask you to make choices during the import.</p>
</body>
</html>
'''
def __init__(self, parent):
wx.Dialog.__init__(self, parent, -1, 'MassConvert Help',
size=(440, 550) )
html = wx.html.HtmlWindow(self)
html.SetPage(self.text)
button = wx.Button(self, wx.ID_OK, "Close")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(html, 1, wx.EXPAND|wx.ALL, 5)
sizer.Add(button, 0, wx.ALIGN_CENTER|wx.ALL, 5)
self.SetSizer(sizer)
self.Layout()
######################################################################################################
#
# Start of Program
#
######################################################################################################
app = None # Clear out any previous instances of app
del app # destroy it completely
app = wx.PySimpleApp() # Create a new wx application instance
frame = MassConvertApp() # Create the GUI instance
app.MainLoop() # Execute wx
Refresh()
Python Code – Mass Convert (No GUI)
#******************************************************
# Convert between two formats using Vue
#
# - massconvert.py
# - By Mark Caldwell
# - Version 0.5.1 (No GUI)
# - 6th August 2007
# - Copyright Mark Caldwell 2007
# - Tested with Vue 6 Infinite Pre Release
#
# How to use in 4 easy steps
#
# 1. Download this file onto your computer
#
# 2. Place the files to be converted in the same directory
# as the script
#
# 3. Edit the script to change output_directory. This is
# the directory the files will be put in and is relative
# to the root directory of your vue installation.
# eg if Vue python is in to:
# C:\Program Files\e-on software\Vue 6 Infinite\Python
# and you want to save the files to:
# C:\Program Files\e-on software\Vue 6 Infinite\Python\Scripts\outfiles
# Change output directory to:
# output_directory='\Scripts\outfiles'
#
# Make sure the directory you want to save to exists.
# If it doesn't the files will not be saved.
#
# 4. Then run script and wait for it to work supplying
# responses when prompted.
#
# To run it go to Python -> Run Python Script
# Then locate the file on your computer
#
# Do not run using quick load options
#
# Available input formats are:
# 3dmf
# 3ds
# cob
# dxf
# lwo
# obj
# pz3
# raw
# shd
# skp
# vob
#
# Available output formats are:
# 3ds
# c4d
# dxf
# lwo
# obj
# shd
# vob
#
# Conversion options are those currently selected under
# File -> Export As
#
#******************************************************
#----------------------------------------------
# Configuration: Set these to alter end result
#----------------------------------------------
# Change the line below to change where files are saved
# see instructions above for more details
output_directory='/scripts/massconvert'
#----------------------------------------------
# Internal Variables Set Up: Don't alter these
#----------------------------------------------
import os
import string
# get the Vue python path
VuePythonPath = sys.path[1]
# get the Vue Python Folder
VuePythonFolder,junk = os.path.split(VuePythonPath)
# Get the Vue Root Path
VueRootPath,junk = os.path.split(VuePythonFolder)
# Set where to put the output files
output_path=VuePythonFolder+output_directory
obj=[]
objectlist=[]
extensionin='obj'
extensionout='3ds'
#---------------------------------------------------
# Get User Input
#---------------------------------------------------
extensionin=Prompt('File extension of files to import\nobj 3ds lwo c4d cob dxf pz3 shd vob',extensionin,true,'Input File Extension')
extensionout=Prompt('File extension on files to output\nobj 3ds lwo c4d cob dxf shd vob',extensionout,true,'Output File Extension')
#---------------------------------------------------
# Main Script Body
#---------------------------------------------------
# Load objects
filenames=os.listdir(os.curdir)
for filename in filenames:
if '.'+extensionin in filename:
obj=ImportObject(filename)
newfilename=output_path+'/'+filename.replace('.'+extensionin,'.'+extensionout)
print filename+" to "+newfilename
SelectOnly(obj)
print ExportObject (newfilename)
Delete()
Refresh()
Stay on target…
Monday, December 1st, 2008
Sometimes the biggest problem I find when writing isn’t writing too few words its writing too many. Stop heckling from the back – I know when you’re trying to get past the end of the first chapter of a three volume novel trilogy to propel you into the best seller list so you can spend your days at book signings and your nights at glittering functions with your favourite authors that doesn’t sound like much of a problem. However I like writing articles and short stories. One piece I’ve been working on is just about to pass the 15,000 word mark. There is no specific limit for it but it keeps wanting to go off in other directions to make it complete. Thank goodness for editing.
The punch line to the Star Wars joke that I’ve used as a title tonight is So Luke closed his eyes. If you know the rest of the joke please leave it as a comment.
The Mummy: Tomb of the Dragon Emperor
Thursday, August 14th, 2008
Wow. How can you take a franchise as good as the resurected Mummy and pretty much destroy it in 112 minutes?
Could it be the completely miss cast replacements? Maria Bello was no Rachel Weisz. Luke Ford just wasn’t interesting. Perhaps thats part of it too. I know Anthony Wong Chau-Sang, Michelle Yeoh, Jet Li and David Calder all have something they can do on screen but they were criminaly wasted on this outing. John Hannah and Brendan Fraser certainly pulled it off in the previous films too so maybe it was the flat dialogue, the forced jokes, the hackey attempts at character development and the poor editing. It took three lines of dialogue to say what Brendan Fraser said in the middle line which amounted to lets go and get on a plane illustrated just how baddly the script needed work. It kept hitting duff notes. Which brings me to my next gripe – possibly the worst score for a film I can remember where someone had spent time and money to add music. It was distracting, it didn’t fit. The score from the Mummy lifted the film. This was the musical equivalent of concrete shoes. The opening just dragged and the attempt at a humerous ending was weak beyond words.
The special effects were competent but special effects rarely turn a film into a classic.
Hopefully the Mummy franchise has been laid to rest like the eponymous monster of the title until it can be resurected by someone with an interesting take on it comes along and raises it from the dead again…
Dirk Dangerous and the Giant Balls of Doom – Away
Friday, May 30th, 2008
I’ve sent Dirk Dangerous and the Giant Balls of Doom off to Astonishing Adventures Magazine last night. Glad I gave it one last proof read because some little graphics had crept in to the file. I think they were Word 2007 editing markup converted to graphics by switching to old style doc format but I could be completely wrong.
Issue 3 of AAM has been out for a little while now and features another of my stories in this somewhat erratically focused series: Mrs H’s Knitting Circle. There is a small mistake in the issue: Mrs H’s begins with "The sap felt good in my hand." not the sentence before that which is from the end of the previous story so don’t get confused by the opening.
I’ve been putting some more work in on the Dirk Dangerous web site. It won’t be ready for at least a geological era but it is at least moving someway towards launch even if its at the speed of tectonic plate movement.
I’ve also got a structure for the next story in the series. Story five, tentativelly titled Meanwhile… will jump around between the various ongoing threads of the plots revealed so far tangling them up and bringing the various elements of the story together.
The Only Way is Up?
Monday, March 24th, 2008
Just which up would that be?
Hopefully you wern’t looking for the lyrics to a 1988 hit by Yazz and the Plastic Population and thought the title included punctuation. If you were I hope you’ll accept my appologies and leave quiety back to google or whatever search engine sent you here…
I’ve spent part of the long Easter weekend trying to get pyODE to play nicely in Vue. If I don’t bring rotations into the set up everything plays nicely and a simple simulation of bouncy sphere works fine. If I foolishly try to use cubes and apply a little rotation to them: BAM! rotations get skewed, objects vanish mysteriously as rotations take on impossible values.
I was going to do some writing or editing this week end or maybe a render or two. Its not like there was anything worth watching on TV, my regular viewing all got cancelled for Easter. I could even have wasted it on the latest meem to catch DarkDwarf in its insidious tentacles. Instead I’ve been reading up on vector, coordinate systems and other stuff I thought I’d not need to worry about again since I was in my early 20s. The problem, I suspect, lies in up not being right. Vue uses Z for depth and Y for height. pyODE uses Z for height and Y for depth. Somewhere in the conversion errors are creaping in and hence good data in gives garbage out.
Now if I can just figure out which way is up I’ll be fine.

