これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.6.x を参照.
Pattern
Pattern は, 各振動子の Emission をデバイスへ送るコマンド.
Pattern::new(&emissions);
Pattern::with_bank(bank, &emissions);
Pattern { bank, emissions: &emissions, transition_mode,};Pattern::new は書き込み先バンクを PatternBank::B0 とする.
別バンクへ書く場合は Pattern::with_bank(bank, emissions) を使う.
Pattern(emissions)
Pattern( bank=bank, emissions=emissions, transition_mode=transition_mode,)Pattern は書き込み先バンクをデフォルトで PatternBank.B0 とする.
別バンクを指定したい場合は bank 引数を渡す.
new Pattern(emissions);
new Pattern(bank, emissions);
new Pattern( bank: bank, emissions: emissions, transitionMode: transitionMode);new Pattern(emissions) は書き込み先バンクを PatternBank.B0 とする.
別バンクへ書く場合は new Pattern(bank, emissions) を使う.
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
bank |
PatternBank |
PatternBank::B0 |
書き込み先・再生対象のバンク |
emissions |
&[Vec<Emission>] |
— | デバイスごとの emission パターン |
transition_mode |
TransitionMode |
TransitionMode::Immediate |
バンク切替時の遷移挙動 |
patternの計算には幾つかのヘルパ関数が用意されている.
等価な低レベルコマンド
Section titled “等価な低レベルコマンド”Pattern は WritePatternBuffer + ConfigPattern + ChangePatternBank の 3 つと等価であり, これらは 1 フレームに融合して送られる.
以下は Pattern { bank, emissions } と等価な組み合わせである.
transition_mode に TransitionMode::Later を指定した場合は融合せず, WritePatternBuffer + ConfigPattern の 2 フレームに分解して送る (ChangePatternBank を送らない).
詳細は ChangePatternBank の TransitionMode を参照.
WritePatternBuffer { bank, index: 0, emissions,};ConfigPattern { bank, config: SamplingConfig::new(NonZeroU16::MAX), size: 1, loop_behavior: LoopBehavior::Infinite,};ChangePatternBank { bank, transition_mode,};WritePatternBuffer( bank=bank, index=0, emissions=emissions,)ConfigPattern( bank=bank, config=SamplingConfig(0xFFFF), size=1, loop_behavior=LoopBehavior.Infinite,)ChangePatternBank( bank=bank, transition_mode=transition_mode,)new WritePatternBuffer( bank: bank, index: 0, emissions: emissions);new ConfigPattern( bank: bank, config: new SamplingConfig(ushort.MaxValue), size: 1, loopBehavior: LoopBehavior.Infinite);new ChangePatternBank( bank: bank, transitionMode: transitionMode);Example
Section titled “Example”use autd3_rs::commands::Pattern;use autd3_rs::geometry::{Autd3, Geometry, offset};use autd3_rs::units::{m, mm, s};use autd3_rs::{Client, ClientConfig};use autd3_rs_link_nop::Nop;use autd3_rs_pattern::{FocusOption, focus, wavelength};
let geometry = Geometry::new(vec![Autd3::default()]);let client = Client::open(&geometry, Nop, ClientConfig::default()).await?;
let mut emissions = geometry.pattern_buffer();focus( &geometry, geometry.center() + offset(0.0 * mm, 0.0 * mm, 150.0 * mm), wavelength(340.0 * m / s), &FocusOption::default(), &mut emissions,);
let mut builder = client.datagram_builder();builder.push(Pattern::new(&emissions));let frames = builder.build()?;for frame in &frames { client.send_checked(frame).await?;}
client.close().await?;import asyncio
import numpy as np
from autd3 import Client, ClientConfigfrom autd3.commands import Patternfrom autd3.geometry import Autd3, Geometryfrom autd3.units import m, sfrom autd3_link_nop import Nopfrom autd3_pattern import FocusOption, focus, wavelength
async def main() -> None: geometry = Geometry([Autd3([0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0])]) client = await Client.open(geometry, Nop(), ClientConfig())
emissions = geometry.pattern_buffer() focus( geometry, geometry.center() + np.array([0.0, 0.0, 150.0]), wavelength(340 * m / s), FocusOption(), emissions, )
builder = client.datagram_builder() builder.push(Pattern(emissions)) frames = builder.build() for frame in frames: await client.send_checked(frame)
await client.close()
asyncio.run(main())using System.Numerics;using System.Threading.Tasks;using AUTD3;using AUTD3.Link;using Nop = AUTD3.Link.Nop;using static AUTD3.Units;
var geometry = new Geometry(new[] { new Autd3(Vector3.Zero) });var client = await Client.OpenAsync(geometry, new Nop(), new ClientConfig());
var emissions = geometry.PatternBuffer();Pattern.Focus( geometry, geometry.Center + new Vector3(0.0f, 0.0f, 150.0f), Pattern.Wavelength(340.0f * m / s), new FocusOption(), emissions);
var builder = client.DatagramBuilder();builder.Push(new Pattern(emissions));var frames = builder.Build();foreach (var frame in frames){ await client.SendCheckedAsync(frame);}
await client.CloseAsync();