Example ====== Shapes - Reverse, Offset, Restart ====== ^ by: | Matías Muccillo, February 2020 \\ final changes by Sebastian Beutel | ^ published: | inquiry: https://www.facebook.com/groups/Avolites/permalink/1799612296837663/ \\ final macro: here | ^ description: | reverses shape on part of fixtures, offsets them, restarts shape | ^ remarks: | most useful for circle shapes | When creating shapes, in order to make a symmetrical look (e.g. circle shape with left fixtures turning clockwise, right fixtures turning counter-clockwise) you need to (1) select half of the fixtures, (2) reverse the shape for them, (3) offset them by 180°, and (4) restart the shape to see the effect. This macro does everything (for a predefined number of fixtures at least - there are macros for other fixture quantities as well). {{tag>shape reverse invert offset restart}} ==== functions ==== * [[:macros:function:Editor.Shapes.ProgrammerShapesList]] * [[:macros:function:Editor.Shapes.SelectAllShapes]] * [[:macros:function:ActionScript.SetProperty.Integer]] * [[:macros:function:Command.RunCommand]] * [[:macros:function:ActionScript.SetProperty.Boolean]] * [[:macros:function:Editor.Shapes.Reverse]] * [[:macros:function:ActionScript.SetProperty.Double]] * [[:macros:function:Programmer.RefireProgrammer]] * [[:macros:function:Selection.Context.Global.ClearPatternSelect]] ==== affected properties ==== * [[:macros:property:Editor.Shapes.ProgrammerShapes.Empty]] * [[:macros:property:Editor.Shapes.EditShapesEmpty]] * [[:macros:property:Editor.Shapes.Spread]] * [[:macros:property:Selection.Context.Global.RepeatPattern]] * [[:macros:property:Editor.Shapes.PhaseOffset]] * [[:macros:property:Programmer.CurrentProgrammerIds]] ==== control structures ==== * [[macros:control_structures|condition]] Matias made more macros for various fixture quantities: {{ :macros:example:mm_symmetrical_shape.xml |}} ===== Code ===== Editor.Shapes.ProgrammerShapesList() Editor.Shapes.SelectAllShapes() ActionScript.SetProperty.Integer('Editor.Shapes.Spread', 8) Command.RunCommand("PATTERN 8 IN 16") ActionScript.SetProperty.Boolean("Selection.Context.Global.RepeatPattern", true) Editor.Shapes.Reverse() ActionScript.SetProperty.Double('Editor.Shapes.PhaseOffset', 180) Programmer.RefireProgrammer(Programmer.CurrentProgrammerIds) Selection.Context.Global.ClearPatternSelect() ===== Explanation ===== This explains the functional steps within the sequence. For all the other XML details please refer to [[:macros:formats_and_syntax#xml_format|Formats and syntax]] * ''Editor.Shapes.ProgrammerShapesList()'' gets the currently running shapes * ''Editor.Shapes.SelectAllShapes()'' selects all shapes * the next step was conditional until Titan v11 - but ''!Editor.Shapes.EditShapesEmpty'' returns false from v12 on * ''ActionScript.SetProperty.Integer('Editor.Shapes.Spread', 8)'' sets a spread of 8 * ''Command.RunCommand("PATTERN 8 IN 16")'' is a nice way of selecting half of the fixtures, togetether with ''ActionScript.SetProperty.Boolean("Selection.Context.Global.RepeatPattern", true)'' * ''Editor.Shapes.Reverse()'' reverses the shape(s) for the previously selected first half of fixtures * ''ActionScript.SetProperty.Double('Editor.Shapes.PhaseOffset', 180)'' offsets them by 180° - note that this property is of type [[macros:type:double]] * ''Programmer.RefireProgrammer(Programmer.CurrentProgrammerIds)'' restarts the shapes * ''Selection.Context.Global.ClearPatternSelect()'' finally clears the selection pattern ===== How to use it ===== - [[:macros:deploying|make this macro available]] - select 16 fixtures in a row, create a circle spread, set it to medium size and speed => all fixtures will move simultaneously - fire this macro. Immediately the fixtures will be divided in half, with suitable spread, left and right half turning in opposite directions but in perfect sync ~~DISCUSSION~~