Group
Group
を使用すると, デバイスをグループ分けし, 各グループごとに異なるデータを送信することができる.
use autd3::prelude::*;
use std::collections::HashMap;
fn main() {
let x = 0.;
let y = 0.;
let z = 0.;
let _ =
Group::new(
|dev| match dev.idx() {
0 => Some("focus"),
1 => Some("null"),
_ => None,
},
HashMap::from([
(
"focus",
BoxedDatagram::new(Focus {
pos: Point3::new(x, y, z),
option: Default::default(),
}),
),
("null", BoxedDatagram::new(Null {})),
]),
);
}
NOTE: Rust版は
HashMap
の値がすべて同じ型である必要があるため, ここではBoxedDatagram
を使用して, 型を統一している.
#include<autd3.hpp>
int main() {
using namespace autd3;
const auto x = 0.0;
const auto y = 0.0;
const auto z = 0.0;
autd3::Group(
[](const Device& dev) -> std::optional<const char*> {
if (dev.idx() == 0) {
return "null";
} else if (dev.idx() == 1) {
return "focus";
} else {
return std::nullopt;
}
},
std::unordered_map<const char*, std::shared_ptr<driver::Datagram>>{
{"focus",
std::make_shared<Focus>(Focus(Point3(x, y, z), FocusOption{}))},
{"null", std::make_shared<Null>()}});
return 0; }
NOTE: C++の場合, キーには
std::optional
を使用する必要がある. また, 型を統一するため,std::shared_ptr<driver::Datagram>
を使用している.
using AUTD3Sharp;
using AUTD3Sharp.Link;
using AUTD3Sharp.Gain;
using AUTD3Sharp.Modulation;
using AUTD3Sharp.Utils;
var x = 0.0f;
var y = 0.0f;
var z = 0.0f;
new AUTD3Sharp.Group(dev =>
{
return dev.Idx() switch
{
0 => "null",
1 => "focus",
_ => null
};
},
new GroupDictionary {
{ "null", new Null() },
{ "focus", new Focus(pos: new Point3(x, y, z), option: new FocusOption()) }
}
);
from pyautd3 import Device, Group
from pyautd3.gain import Focus, FocusOption, Null
x = 0.0
y = 0.0
z = 0.0
def key_map(dev: Device) -> str | None:
if dev.idx == 0:
return "null"
if dev.idx == 1:
return "focus"
return None
Group(
key_map=key_map,
data_map={"null": Null(), "focus": Focus(pos=[x, y, z], option=FocusOption())},
)
GainGroup
とは異なり, 通常のsend
で送信できるデータなら何でも使用できる.
ただし, デバイス単位でしかグルーピングできない.
NOTE: このサンプルでは, キーとして文字列を使用しているが,
HashMap
のキーとして使用できるものなら何でも良い.