Livery Editor – Tools / Transform
Transform tool - translate, rotate, scale, skew, and stamp operations for cursor and decal layers.
Transform tool - translate, rotate, scale, skew, and stamp operations for cursor and decal layers.
Overview
ui_liveryEditor_tools_transform is the primary spatial editing tool. It provides translate, rotate, scale, skew, and stamp operations, dispatching to the appropriate handler (cursor, decal, or group) via doOperation.
Extension path: lua/ge/extensions/ui/liveryEditor/tools/transform.lua
Exports (M)
| Function | Signature | Description |
|---|---|---|
useStamp | () | Enters stamp mode - matches cursor to selected layer, hides layer, enables mouse projection. |
cancelStamp | () | Cancels stamp mode - restores layer visibility, returns to cursor projection. |
translate | (steps_x, steps_y) | Translates cursor by step increments. |
setPosition | (posX, posY) | Sets cursor position absolutely. |
rotate | (degrees, counterClockwise) | Rotates cursor or decal layer by degrees. |
setRotation | (degrees) | Sets absolute rotation on cursor or decal layer. |
scale | (steps_x, steps_y) | Scales cursor or decal layer by steps. |
setScale | (scaleX, scaleY) | Sets absolute scale on cursor or decal layer. |
skew | (steps_x, steps_y) | Skews cursor or decal layer by steps. |
setSkew | (skewX, skewY) | Sets absolute skew on cursor or decal layer. |
Internals
Stamp Mode
Stamp mode lets the user reposition a placed decal by projecting it through the cursor:
M.useStamp = function()
local layer = api.getLayerByUid(layerUid)
-- Copy layer properties to cursor
api.setDecalRotation(layer.decalRotation)
api.setDecalScale(layer.decalScale)
api.setDecalSkew(layer.decalSkew)
api.setDecalColor(layer.color)
-- Hide layer (alpha=0), show cursor, enable mouse
layer.color = Point4F(layer.color.x, layer.color.y, layer.color.z, 0)
api.setLayer(layer, true)
endType-Based Dispatch
Each transform function routes by layer type:
| Layer | Handler |
|---|---|
nil (cursor) | ui_liveryEditor_layers_cursor |
decal | ui_liveryEditor_layers_decals |
group | Logged as "not implemented yet" |
Step Units (internal reference)
TRANSLATE_STEP_UNIT = 0.1
ROTATE_STEP_UNIT = 1
SCALE_STEP_UNIT = 0.1
SKEW_STEP_UNIT = 0.1Note: These are larger than the cursor/layerEdit step units (designed for the tool slider UI).
How It Works
- The transform tool is activated via
ui_liveryEditor_tools.useTool("transform") - Operations dispatch through
doOperationto cursor or layer handlers - Stamp mode copies layer properties to the cursor for visual repositioning
cancelStamprestores the original layer; confirming stamps viaeditormodule- Group transforms are stubbed but not yet implemented
Example Usage
local transform = extensions.ui_liveryEditor_tools_transform
-- Enter stamp mode for the selected layer
transform.useStamp()
-- Rotate the active target by 15 degrees clockwise
transform.rotate(15, false)
-- Set absolute scale
transform.setScale(0.5, 0.5)
-- Cancel stamp
transform.cancelStamp()Additional Exports
The following exports are available but not yet documented in detail:
M.cancelStampM.rotateM.scaleM.setPositionM.setRotationM.setScaleM.setSkewM.skewM.translate