Group

Group is a Gain to use different Gain for each transducer.

use autd3::prelude::*;
#[allow(unused_variables)]
fn main() -> Result<(), Box<dyn std::error::Error>> {
let x = 0.;
let y = 0.;
let z = 0.;
let g = Group::new(|_dev| |tr| match tr.idx() {
                0..=100 => Some("null"),
                _ => Some("focus"),
            })
            .set("null", Null::new())?
            .set("focus", Focus::new(Point3::new(x, y, z)))?;
Ok(())
}
#include<optional>
#include<autd3.hpp>
int main() {
const auto x = 0.0;
const auto y = 0.0;
const auto z = 0.0;
const auto g = autd3::Group([](const auto& dev) {
                 return [](const auto& tr) -> std::optional<const char*> {
                   if (tr.idx() <= 100) return "null";
                   return "focus";
                 };
               })
                   .set("null", autd3::gain::Null())
                   .set("focus", autd3::gain::Focus(autd3::Point3(x, y, z)));
return 0; }
using AUTD3Sharp.Utils;
using AUTD3Sharp.Gain;
var x = 0.0f;
var y = 0.0f;
var z = 0.0f;
var g = new Group(dev => tr => tr.Idx <= 100 ? "null" : "focus")
          .Set("null", new Null())
          .Set("focus", new Focus(new Point3(x, y, z)));
from pyautd3 import Focus, Group, Null
x = 1.0
y = 0.0
z = 0.0
g = (
    Group(lambda _: lambda tr: "null" if tr.idx <= 100 else "focus")
    .set("null", Null())
    .set("focus", Focus([x, y, z]))
)

In the above case, transducers whose local indices are less or equal than 100 produce Null, and the others produce Focus.

NOTE: In this sample, we use string as a key, but you can use any type that can be used as a key of HashMap.