Struct ghx_proc_gen::generator::socket::SocketCollection
source · pub struct SocketCollection { /* private fields */ }
Expand description
Used to create one or more Socket
. Created sockets can then be used to define super::model::Model
and
define connections between them.
Implementations§
source§impl SocketCollection
impl SocketCollection
sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new SocketCollection
sourcepub fn add_connection<I>(&mut self, from: Socket, to: I) -> &mut Selfwhere
I: IntoIterator<Item = Socket>,
pub fn add_connection<I>(&mut self, from: Socket, to: I) -> &mut Selfwhere
I: IntoIterator<Item = Socket>,
Adds a connection between two sockets. super::model::Model
with sockets from
can connect to model with
sockets to
and vice versa.
- There is no direction in the relation, adding a connection from
a
tob
also adds a connection fromb
toa
- By default (until the connection is explicitly added), a socket is not “compatible” with itself.
§Example
use ghx_proc_gen::generator::socket::SocketCollection;
let mut sockets = SocketCollection::new();
let a = sockets.create();
let b = sockets.create();
sockets.add_connection(a, vec![a, b]);
// `a` can be connected to `a` and `b`
// `b` can be connected to `a`
sourcepub fn add_connections<I, J>(&mut self, connections: I) -> &mut Self
pub fn add_connections<I, J>(&mut self, connections: I) -> &mut Self
Same as add_connection
but accept multiple connections definitions at the same time.
§Example
use ghx_proc_gen::generator::socket::SocketCollection;
let mut sockets = SocketCollection::new();
let (a, b, c) = (sockets.create(), sockets.create(), sockets.create());
sockets.add_connections(vec![
(a, vec![a, b]),
(b, vec![c])
]);
// `a` can be connected to `a` and `b`
// `b` can be connected to `a` and `c`
// `c` can be connected to `b`
sourcepub fn add_rotated_connection(
&mut self,
from: Socket,
to: Vec<Socket>
) -> &mut Self
pub fn add_rotated_connection( &mut self, from: Socket, to: Vec<Socket> ) -> &mut Self
Adds a connection between all possible rotations of two sockets that are on the rotation axis of the super::Rules
. super::model::Model
with sockets from
can connect to model with sockets to
and vice versa.
- There is no direction in the relation, adding a connection from
a
tob
also adds a connection fromb
toa
- By default (until the connection is explicitly added), a socket is not “compatible” with itself.
§Example
use ghx_proc_gen::generator::{socket::{SocketCollection, SocketsCartesian3D}, model::ModelCollection};
let mut sockets = SocketCollection::new();
let (side_a, vertical_a) = (sockets.create(), sockets.create());
let (side_b, vertical_b) = (sockets.create(), sockets.create());
// If Y+ is our rotation axis. We could have such models:
let mut models = ModelCollection::new();
let model_a = models.create(SocketsCartesian3D::Simple {
x_pos: side_a,
x_neg: side_a,
z_pos: side_a,
z_neg: side_a,
y_pos: vertical_a,
y_neg: vertical_a,
}).with_all_rotations();
let model_b = models.create(SocketsCartesian3D::Simple {
x_pos: side_b,
x_neg: side_b,
z_pos: side_b,
z_neg: side_b,
y_pos: vertical_b,
y_neg: vertical_b,
}).with_all_rotations();
sockets.add_rotated_connection(vertical_a, vec![vertical_b]);
// `model_a` and `model_b` can now be stacked on top of each other (no matter their rotations)
// Note: here two `model_a` cannot be stacked on top of each other since `vertical_a` was not said to be connected to itself.
sourcepub fn add_rotated_connections<I>(&mut self, connections: I) -> &mut Self
pub fn add_rotated_connections<I>(&mut self, connections: I) -> &mut Self
Same as add_rotated_connection
but accepts multiple connections definitions at the same time.
sourcepub fn add_constrained_rotated_connection(
&mut self,
from: Socket,
relative_rotations: Vec<ModelRotation>,
to: Vec<Socket>
) -> &mut Self
pub fn add_constrained_rotated_connection( &mut self, from: Socket, relative_rotations: Vec<ModelRotation>, to: Vec<Socket> ) -> &mut Self
Similar to add_rotated_connection
but with additional constraints.
Adds a connection between only the specified relative_rotations
of two sockets that are on the rotation axis
of the super::Rules
. super::model::Model
with sockets from
, with a given relative rotation to socket
to
, can connect to model with sockets to
(and vice versa with the opposite relative rotation).
relative_rotations
should be defined with regard to rotation ModelRotation::Rot0
of to
. So a value of
ModelRotation::Rot90
in relative_rotations
means that a from
socket can be connected to a to
socket if
and only if the from
socket is rotated 90° more than the to
socket, no matter their absolute rotations.
- There is no direction in the relation, adding a connection from
a
tob
also adds a connection fromb
toa
(here with the opposite relative rotation) - By default (until the connection is explicitly added), a socket is not “compatible” with itself.
Trait Implementations§
source§impl Clone for SocketCollection
impl Clone for SocketCollection
source§fn clone(&self) -> SocketCollection
fn clone(&self) -> SocketCollection
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl Freeze for SocketCollection
impl RefUnwindSafe for SocketCollection
impl Send for SocketCollection
impl Sync for SocketCollection
impl Unpin for SocketCollection
impl UnwindSafe for SocketCollection
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.