Pattern
Pattern is a command that sends the Emission of each transducer to the device.
Pattern::new(&emissions);
Pattern::with_bank(bank, &emissions);
Pattern { bank, emissions: &emissions, transition_mode,};Pattern::new sets the destination bank to PatternBank::B0.
To write to another bank, use Pattern::with_bank(bank, emissions).
Pattern(emissions)
Pattern( bank=bank, emissions=emissions, transition_mode=transition_mode,)Pattern sets the destination bank to PatternBank.B0 by default.
To specify another bank, pass the bank argument.
new Pattern(emissions);
new Pattern(bank, emissions);
new Pattern( bank: bank, emissions: emissions, transitionMode: transitionMode);new Pattern(emissions) sets the destination bank to PatternBank.B0.
To write to another bank, use new Pattern(bank, emissions).
| Field | Type | Default | Description |
|---|---|---|---|
bank |
PatternBank |
PatternBank::B0 |
Bank to write to / play back |
emissions |
&[Vec<Emission>] |
— | Emission pattern per device |
transition_mode |
TransitionMode |
TransitionMode::Immediate |
Behavior when switching the bank |
Several helper functions are provided for computing patterns.
Equivalent Low-Level Commands
Section titled “Equivalent Low-Level Commands”Pattern is equivalent to the three commands WritePatternBuffer + ConfigPattern + ChangePatternBank, which are fused into a single frame.
The following is equivalent to Pattern { bank, emissions }.
When transition_mode is TransitionMode::Later, nothing is fused: the command decomposes into the two frames WritePatternBuffer + ConfigPattern and no ChangePatternBank is sent.
See the TransitionMode section of ChangePatternBank for details.
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();