Unsupported — We cannot guarantee that this software will work properly on Mac OS 10.8 and above. Please be careful.

Release: Structure Maker, v20080205

Release Type: Beta
Version: 20080205
Release Notes

This is the first public release of the Structure Maker patch.

This set of 2 patches allows you to create Indexed or Keyed structures similar to the Queue or Multiplexer patches.

Indexed structures may not work properly under Tiger; I'm unable to test it at the moment. By "Not Work Properly", I mean that structure members may show up out of order. Please let me know if this happens, and I'll work on an alternative implementation.

StructureMaker-20080205.zip25.5 KB

psonice's picture
Great / spartan :)

These are very handy patches, but the interface is looking a little sparse (at least here, the only thing I see is a number box in the settings, with no label). It's pretty obvious what it does though. Thanks (yet again)!

cwright's picture
heh, sorry :)

Sorry for the spartan interface. The first prototypes had a box just like the math patch, but I felt like I'd be patronizing if I included such drivel. If you're able to install our plugins (no simple feat! :), you're probably able to guess what the boxes do :)

If you've got some ideas, or think prettying it up would help, let me know and I'll see what I can do.

(Side note: I still hate IB -- the interface should be centered, and near the top of the inspector panel, but I can never get things to wind up in the right place with IB... I guess I'm an idiot or something.)

psonice's picture
Like you say, it's easy

Like you say, it's easy enough, and most things can be figured out with a few seconds of playing with it, but I think improving it wouldn't take much. For this case, just something like a "number of inputs" label would be it.

Also, a brief description of what the patch does would be handy at times, especially when you want a particular patch and don't want to try several out to figure which is the right one. For most patches it's pretty obvious once you know the basics of QC, but for others I'm left scratching my head (and to be fair, this applies more to apple's private patches - I mean wtf does "CIKuwaharaNagaoFilter" do?!)

If you could put just a basic line in like "Makes a structure from multiple inputs" or "Makes a structure from multiple key/value pairs", it'd be great, particularly for the more obscure ones like 'Canny'.

I don't think it needs prettying up at all, so long as the buttons work etc., it's the output that needs to be pretty more than the interface :)

yanomano's picture
work like a charm !

complicated things become easier with you...;) Thanks a lot !


yanomano's picture
unplugged message...

Cool to know that nothing is unplugged, but when you assemble a structure like "movies from a folder" to get thumbnails; on loading there is a short time when the message "unplugged"is display on screen...not very smart during performance or in an application...;) Perhaps a button to disable it ?


cwright's picture
Will do

I'll make it an empty string (""). Would that suffice, or is there a better solution that would be better (i.e. not inserting anything, etc, which would make indexes completely wrong etc)...

yanomano's picture
string with 0.0 alpha ?

a string with a color with 0.0 in alpha would be invisible doesn't it ?... or it take the color from bilboard...all in black ? a constant black color? a string with font size to zero ? your phone number ?...:) GPU temperature ?

cwright's picture
Colorless strings

Strings don't have color attached to them: they're just text data. They'll take their color from the patch that renders it, multiplied with the billboard color.

psonice's picture
feature request :)

As it happens, I now have a case where this patch is invaluable. Your timing is great :)

One thing would make it much more useful though - making the member count an input (or removing it), and having only one pair of inputs. I'll explain how I'm using it, so it's fairly clear as to why it would be good and how it might work:

I'm making a custom font, with a string containing "abc...zA...Z0...9" etc., and splitting it into component letters, giving me a structure.

The structure is then fed into a macro, which goes through the whole structure, and for each member creates an image from the string, with some processing to pretty up the standard font with colour etc.

That macro produces two outputs - a string and an image (say 'a' and the image for 'a').

I need a named structure with the letter + image pairs (cue named structure maker). So, I can split the macro output with a demultiplexer, create 70 odd input pairs, and enjoy the spaghetti :) But a better way to do it would be to have just one key and one input on the structure maker, and have it recognise the input.

I.e. when the key changes, a new key/value pair is created with the new value. When only the input changes, the value for that key is updated. The structure would then be dynamic, and much more flexible.

What do you think, good idea? And why didn't apple include a structure maker? :)

cwright's picture
almost queue

almost the queue patch. maybe a pair for queues (one for keys, the other for values) would get it working without an additional patch? I'm not against another one, it's just a lot of effort right now, so I don't know that I'll have time to get to it in the immediate future.

As for why apple didn't include one, they may consider Javascript's ability to make structures "Good Enough" -- or, perhaps they're merciful, and want to keep us around for a bit ;)

psonice's picture
That reminds me, I've not

That reminds me, I've not had a play with queue to see what it does. Totally forgot it! If it'll do the job, brilliant - I'd ideally like to get this done with no custom patches, as I want to distribute it without building an app.

I'll let you know how it goes.

tobyspark's picture
queue is your friend (and so is this beta!)

rendering text inside an iterator is not a smart thing to do, so i made something up not dissimilar to what you're doing on tiger with kineme structure tools and the boinx set structure. the structure tools bit has been largely superceded by the queue patch in leopard, and now we have a kineme-strength structure patch.

i'll be diving back into all this next week for a new project, so i'm sure i'll have real feedback then.

psonice's picture
Job done...

It's probably a bit more complicated than it should be, but it works and I can generate a custom, colourful font set pretty easily. Here's what I did:

  • First, use the string printer to create the set of characters. I've actually used the ascii code set, in sequence, so it contains all the standard characters. More on why later..
  • Split the string into single character components to create a structure.
  • Parse the structure, using image with string and resize to create a suitable sized letter image. Process it to give it some shape and colour or whatever.
  • Pass the final character images to a queue. The structure this creates is the actual font set, and it's ordered by ascii code
  • To get the image for any character, just use a javascript patch with two inputs (one is the character as a string, the other is the font set structure) and 1 output (image type). Use asciicode = inputstring.charCodeAt(0) on the string input to get the ascii code, return inputstructure[asciicode] to output the image.

I think that's a fairly efficient way to do it. The bit I don't like is the iteration system I've set up. You can't use iterator because you can only render in it, not publish a structure (which is really annoying). So I have a clumsy system with a counter, and LFO to drive it, and a conditional to stop the LFO when the output structure equals the length of the ascii string.

Is there a better way of driving a counter for a certain number of steps?

Once I've cleaned it up a bit, I'll publish it here, as it'll be useful for anyone wanting to do titles, scrolling text etc. with per-character animation, or with a colour font etc.

What's the boinx set structure btw? I can't see that anywhere.

cwright's picture

Boinx made a structure maker for Tiger early last year. You can find that patch here: http://www.boinx.com/chronicles/2007/02/07/set-structure-member-patch-10/

It's Tiger-only though, so not too helpful if you're running Leopard (maybe it works though? Many of ours didn't, but that was due to a poor choice of methods to implement initially)

tobyspark's picture

i've bee deep in the hillegass cocoa book for a week now, and custom text patches for qc has been high on my agenda literally for 12 months now. so finally, i might be in a position to make it happen!

psonice's picture

Boinx no do v2 of their structure patch, which works on leopard. It looks useful actually, but I'd rather not use it for this project if possible. I need to distribute it at the end, so if it's a single file with no plugins, it'll be much easier.

Toby: qc is badly in need of some proper text handling tools. It was a pain getting per-character scrolling working, never mind a customised font. I think apple will build more and more useful tools into QC, but they'll be careful not to make it a replacement for some of their expensive apps at the same time, so I doubt they'll do anything too useful for text animation.

Installation Instructions

Place the plugin file in
/Users/[you]/Library/Graphics/Quartz Composer Patches/
(Create the folder if it doesn't already exist.)