コンテンツにスキップ
これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.14.x を参照.

Pattern

Pattern は, 各振動子の位相と振幅をデバイスへ送るコマンド. 位相と振幅は別々のバッファで渡す.

Pattern::new(&phases, intensities);
Pattern::with_bank(bank, &phases, intensities);
Pattern {
bank,
phases: &phases,
intensities: intensities.into(),
transition_mode,
};

Pattern::new は書き込み先バンクを PatternBank::B0 とする. 別バンクへ書く場合は Pattern::with_bank(bank, phases, intensities) を使う.

フィールド 型 デフォルト 説明
bank PatternBank PatternBank::B0 書き込み先・再生対象のバンク
phases &[Vec<Phase>] — デバイスごとの位相
intensities PatternIntensity — 振幅 (Intensity の一様値, または &[Vec<Intensity>] のデバイスごとのバッファ)
transition_mode TransitionMode TransitionMode::Immediate バンク切替時の遷移挙動

patternの計算には幾つかのヘルパ関数が用意されている.

Pattern は WritePatternBuffer + ConfigPattern + ActivatePatternBank の 3 つと等価である. ただし Pattern 自体はこの 3 つを融合した 1 フレームで送られる. 以下は Pattern { bank, phases, intensities } と等価な組み合わせである.

バンクへ書き込むだけで切り替えない (後で ActivatePatternBank を送る) 場合は, Pattern ではなく WritePatternBuffer + ConfigPattern を直接送る.

WritePatternBuffer::new(bank, 0, patterns, intensities);
ConfigPattern {
bank,
config: SamplingConfig::new(NonZeroU16::MAX),
size: 1,
loop_behavior: LoopBehavior::Infinite,
};
ActivatePatternBank {
bank,
transition_mode,
};
use autd3_rs::commands::{Clear, Pattern, Synchronize};
use autd3_rs::geometry::{Autd3, Geometry, offset};
use autd3_rs::units::{m, mm, s};
use autd3_rs::value::Intensity;
use autd3_rs::Client;
use autd3_rs::udp::TransportOption;
use autd3_rs_pattern::{focus, wavelength};
let geometry = Geometry::new(vec![Autd3::default()]);
let option = TransportOption::default();
let mut client = Client::open(&geometry, &option).await?;
client.send(Clear).await?;
client.send(Synchronize).await?;
let mut phases = geometry.phase_buffer();
focus(
&geometry,
geometry.center() + offset(0.0 * mm, 0.0 * mm, 150.0 * mm),
wavelength(340.0 * m / s),
&mut phases,
);
client.send(Pattern::new(&phases, Intensity::MAX)).await?;