public void ApplyRandomAtlasFrame(BillboardInstance[] sel)
        {
            string name = string.Format("Apply random atlas frame");
              ModifyBillboardsAction action = new ModifyBillboardsAction(this, sel, name);
              BillboardInstance[] inst = action.NewInstances;

              foreach (BillboardInstance b in inst)
            b._fAtlasValue = (float)Rnd.NextDouble();
              EditorManager.Actions.Add(action);
        }
        public void ApplyRandomScale(BillboardInstance[] sel, float fPercentage)
        {
            string name = string.Format("Apply billboard scaling +/-{0}%", fPercentage);
              ModifyBillboardsAction action = new ModifyBillboardsAction(this, sel, name);
              BillboardInstance[] scaled = action.NewInstances;

              foreach (BillboardInstance b in scaled)
              {
            float f = 1.0f + (float)(Rnd.NextDouble()-0.5) * 0.02f * fPercentage;
            b.ScaleX *= f;
            b.ScaleY *= f;
              }
              EditorManager.Actions.Add(action);
        }
 public void RelaxPositions(BillboardInstance[] sel)
 {
     ModifyBillboardsAction action = new ModifyBillboardsAction(this,sel,"Relax billboard positions");
       float m = Math.Max(this.PivotCenterX, 1.0f - PivotCenterX);
       m *= 2.0f; // wanted distance
       EngineMesh.RelaxPositions(action.NewInstances, m, 20);
       EditorManager.Actions.Add(action);
 }