Resizer: Größer oder kleiner auf Tastendruck

Resizer in Aktion

Resizer sind Scripte, die Größenänderungen an Objekten zulassen, ohne dass man dazu das Baumenü oder den Bearbeiten-Modus öffnen müsste. Sie erfreuen sich bei Möbeln und speziell bei Schuhen und Kleidungsstücken größter Beliebtheit. Dies kommt speziell solchen Kunden entgegen, die entweder keine Baukenntnisse besitzen oder einfach nur keine Lust haben, an der soeben erworbenen Sandalen jede einzelne der vierundzwanzig Zierschnallen nacheinander von Hand anzupassen - ein durchaus guter Grund für etwas programmgestützte Hilfe. Besonders komfortable Resizer-Scripte ändern gleich einen ganzen Schwung von verlinkten Objekten auf einmal, wofür man sich entweder eines Dialogmenüs oder eines Head Up Displays (HUD) bedienen kann. Doch wir beginnen bescheiden mit einem Resizer, der zwar auch schon über ein Dialogmenü verfügt, aber lediglich einen einzelnen Prim maßstäblich verändern kann. Ausgangspunkt wird das Dialogmenü-Script, das wir bereits kennengelernt haben; wenn hierzu noch etwas unklar geblieben sein sollte, bitte einfach noch einmal dort nachlesen.

Dialogmenü des fertigen Resizers

Das hier vorgestellte Script ermöglicht ein Ändern der Größe durch Halbieren oder Verdoppeln, aber auch in 5%-Schritten in negativer und positiver Richtung bis zum Erreichen der jeweiligen Grenzwerte. Um überprüfen zu können, wie sich Größe und Position des Objekts geändert hat, kann man auch die Taste "Position" betätigen. Letztlich würde man solch eine Option in einem tatsächlich eingesetzten Resizer-Script wohl kaum einsetzen, aber hier macht es zum Lernen m.E. schon Sinn: Es lässt sich dadurch nachprüfen, welche Werte durch das Script berechnet worden sind.

Die globalen Variablen wurden lediglich durch zwei vector-Werte ergänzt: die Originalgröße und den (anfangs noch leeren) Wert für die lokale Position des Prims in der Sim. Letzterer wird während der Laufzeit des Script immer wieder neu ermittelt, sobald eine Skalierung stattgefunden hat. Der Grund dafür ist einfach:

Da das Skalieren immer bezogen auf den Objektmittelpunkt erfolgt, würde das Objekt nach dem Verkleinern in der Luft schweben oder nach dem Vergrößern im Boden verschwinden. Um die "Bodenhaftung" nicht zu verlieren, muss neben dem Skalieren also auch ein Neupositionieren erfolgen. Beides zusammen wird in der benutzerdefinierten Funktion abWechslePositionUndGroesse abgearbeitet. Diese Auslagerung in eine benutzerdefinierte Funktion lohnt sich schon deswegen, da die Prozedur bei jeder Skalierung wieder notwendig wird. Als Eingabeparameter wird der jeweilige Skalierungsfaktor erwartet. Was die Funktion genau macht, ist den Kommentaren zu entnehmen. Die Funktion wird jeweils in den if- bzw. else if-Teilen des Events listen aufgerufen.

Die Taste "Schließen" bewirkt letztlich nur das, was sie sagt: Das Menü wird geschlossen und der Listener abgeschaltet.

Resizerscript
© 2012 ff. Almut Brunswick. Nur für den persönlichen Gebrauch! Aus rechtlichen Gründen distanziere ich mich von allen externen Links.