MDLMesh

Struct MDLMesh 

Source
pub struct MDLMesh { /* private fields */ }
Available on crate features MDLMesh and MDLObject only.
Expand description

A vertex buffer with info to interpret vertex data

Includes a collection of submeshs which have indexbuffer and material information

See also Apple’s documentation

Implementations§

Source§

impl MDLMesh

Source

pub unsafe fn initWithBufferAllocator( this: Allocated<Self>, buffer_allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, ) -> Retained<Self>

Available on crate feature MDLMeshBuffer only.

Initialize a mesh with an allocator

Returns: An empty mesh

Source

pub unsafe fn initWithVertexBuffer_vertexCount_descriptor_submeshes( this: Allocated<Self>, vertex_buffer: &ProtocolObject<dyn MDLMeshBuffer>, vertex_count: NSUInteger, descriptor: &MDLVertexDescriptor, submeshes: &NSArray<MDLSubmesh>, ) -> Retained<Self>

Available on crate features MDLMeshBuffer and MDLSubmesh and MDLVertexDescriptor only.

Initialize object with a vertex buffer and a collection of submeshes

Returns: Initialized mesh or nil if descriptor’s layout array does not describe a single buffer

Parameter vertexBuffer: MDLMeshBuffer object containing all vertex data for the mesh

Parameter vertexCount: Number of vertices in the vertexBuffer

Parameter descriptor: VertexDescriptor specifying how to interpret vertex data

Parameter submeshes: Array of submeshes with index buffers referencing vertex data and/or materials to be applied to mesh

Source

pub unsafe fn initWithVertexBuffers_vertexCount_descriptor_submeshes( this: Allocated<Self>, vertex_buffers: &NSArray<ProtocolObject<dyn MDLMeshBuffer>>, vertex_count: NSUInteger, descriptor: &MDLVertexDescriptor, submeshes: &NSArray<MDLSubmesh>, ) -> Retained<Self>

Available on crate features MDLMeshBuffer and MDLSubmesh and MDLVertexDescriptor only.

Initialize object with an array of vertex buffers (Structure of Arrays) and a collection of submeshes

Returns: Initialized mesh or nil if descriptor’s layout array is incompatible with vertexBuffers array

Parameter vertexCount: Number of vertices in vertexBuffers

Parameter descriptor: VertexDescriptor specifying how to interpret vertex data

Parameter submeshes: Array of submeshes with index buffers referencing vertex data and/or materials to be applied to mesh

Allows initialization with the layout of the vertexBuffers in a structure-of-arrays form, in other words, non-interleaved vertex attributes

Source

pub unsafe fn vertexAttributeDataForAttributeNamed( &self, name: &NSString, ) -> Option<Retained<MDLVertexAttributeData>>

convenience selector to get quick access to vertex attribute data

the vertex buffer will remain mapped until the MDLVertexAttributeData is freed.

Source

pub unsafe fn vertexAttributeDataForAttributeNamed_asFormat( &self, name: &NSString, format: MDLVertexFormat, ) -> Option<Retained<MDLVertexAttributeData>>

Available on crate feature MDLVertexDescriptor only.

convenience selector to get quick access to vertex attribute data reformatted to the requested format if necessary.

If the desired format has less elements than the source attribute elements, excess elements will be discarded. If the desired format has more elements than the source attribute, then the destination elements will be set to zero. The vertex buffer will remain mapped until the MDLVertexAttributeData is freed.

Source

pub unsafe fn vertexDescriptor(&self) -> Retained<MDLVertexDescriptor>

Available on crate feature MDLVertexDescriptor only.

Immutable vertex descriptor for interpreting data in vertexBuffers

Setting this applies the new layout in ‘vertexBuffers’ thus is a heavyweight operation as structured copies of almost all vertex buffer data could be made. Additionally, if the new vertexDescriptor does not have an attribute in the original vertexDescriptor, that attribute will be deleted. If the original vertexDescriptor does not have an attribute in the new vertexDescriptor, the data for the added attribute set as the added attribute’s initializationValue property.

The allocator associated with each original meshbuffer is used to reallocate the corresponding resultant meshbuffer.

Source

pub unsafe fn setVertexDescriptor( &self, vertex_descriptor: &MDLVertexDescriptor, )

Available on crate feature MDLVertexDescriptor only.

Setter for vertexDescriptor.

This is copied when set.

Source

pub unsafe fn vertexCount(&self) -> NSUInteger

Number of vertices in the vertexBuffers

The size of vertex data in each buffer can be computed by multiplying this value with the stride of the buffer in the vertexDescriptor’s layout

Source

pub unsafe fn setVertexCount(&self, vertex_count: NSUInteger)

Setter for vertexCount.

Source

pub unsafe fn vertexBuffers( &self, ) -> Retained<NSArray<ProtocolObject<dyn MDLMeshBuffer>>>

Available on crate feature MDLMeshBuffer only.

Array of buffers containing vertex data

The vertex buffers in this array are indexed by the vertex descriptor.

Source

pub unsafe fn setVertexBuffers( &self, vertex_buffers: &NSArray<ProtocolObject<dyn MDLMeshBuffer>>, )

Available on crate feature MDLMeshBuffer only.

Setter for vertexBuffers.

Source

pub unsafe fn submeshes(&self) -> Option<Retained<NSMutableArray<MDLSubmesh>>>

Available on crate feature MDLSubmesh only.

Array of submeshes containing an indexbuffer referencing the vertex data and material to be applied when the mesh is rendered

Source

pub unsafe fn setSubmeshes( &self, submeshes: Option<&NSMutableArray<MDLSubmesh>>, )

Available on crate feature MDLSubmesh only.

Setter for submeshes.

This is copied when set.

Source

pub unsafe fn allocator( &self, ) -> Retained<ProtocolObject<dyn MDLMeshBufferAllocator>>

Available on crate feature MDLMeshBuffer only.

allocator used to allocate contained mesh buffers

Source§

impl MDLMesh

Methods declared on superclass NSObject.

Source

pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>

Source

pub unsafe fn new() -> Retained<Self>

Source§

impl MDLMesh

Modifiers.

Source

pub unsafe fn addAttributeWithName_format( &self, name: &NSString, format: MDLVertexFormat, )

Available on crate feature MDLVertexDescriptor only.

Convenience method to add an attribute

The mesh’s allocator will be used to create storage for the new attribute.

Source

pub unsafe fn addAttributeWithName_format_type_data_stride( &self, name: &NSString, format: MDLVertexFormat, type: &NSString, data: &NSData, stride: NSInteger, )

Available on crate feature MDLVertexDescriptor only.

Create a new vertex attribute including an associated buffer with a copy of the supplied data, and update the vertex descriptor accordingly

Parameter name: The name the attribute can be found by

Parameter format: Format of the data, such as MDLVertexFormatFloat3

Parameter type: The usage of the attribute, such as MDLVertexAttributePosition

Parameter data: Object containing the data to be used in the new vertex buffer

Parameter stride: The increment in bytes from the start of one data entry to the next.

Source

pub unsafe fn addAttributeWithName_format_type_data_stride_time( &self, name: &NSString, format: MDLVertexFormat, type: &NSString, data: &NSData, stride: NSInteger, time: NSTimeInterval, )

Available on crate feature MDLVertexDescriptor only.

Create a new vertex attribute including an associated buffer with a copy of the supplied data, and update the vertex descriptor accordingly

Parameter name: The name the attribute can be found by

Parameter format: Format of the data, such as MDLVertexFormatFloat3

Parameter type: The usage of the attribute, such as MDLVertexAttributePosition

Parameter data: Object containing the data to be used in the new vertex buffer

Parameter stride: The increment in bytes from the start of one data entry to the next.

Parameter time: The time the attribute is to be invoked at.

Adding an attribute, such as position data, at multiple times will result in attributes being created for each of those times. Attributes corresponding to multiple times can be retrieved from the vertex descriptor.

Source

pub unsafe fn addNormalsWithAttributeNamed_creaseThreshold( &self, attribute_name: Option<&NSString>, crease_threshold: c_float, )

Calculate and add vertex normal data

Parameter attributeName: Name is the attribute name of vertex normal attribute. If nil, vertex normals will be added with the MDLVertexAttributeNormal name string

Parameter creaseThreshold: Threshold of the dot product between the 2 triangles after which their face normal will be smoothed out. Therefore, a threshold of 0 will smooth everything and a threshold of 1 won’t smooth anything.

Uses the attribute named MDLVertexAttributePosition to calculate vertex normals. If the mesh does not have an attribute with ‘attributeName’, it will be added, otherwise the attribute name will be overwritten with vertex normal data. ‘vertexDescriptor’ will be updated to reflect the new attribute.

Source

pub unsafe fn addTangentBasisForTextureCoordinateAttributeNamed_tangentAttributeNamed_bitangentAttributeNamed( &self, texture_coordinate_attribute_name: &NSString, tangent_attribute_name: &NSString, bitangent_attribute_name: Option<&NSString>, )

Create a shader basis where the tangent and bitangent span the uv -> object space transform

Parameter textureCoordinateAttributeName: Name of texture coordinates to use in calculations

Parameter tangentAttributeName: Name of vertex tangent attribute.

Parameter bitangentAttributeName: Name of vertex bitangent attribute.

Uses the attribute named MDLVertexAttributePosition and textureCoordinateAttributeName to calculate tangent and bitangent attributes. The mesh’s vertexDescriptor will be updated to reflect the new attributes if necessary. The basis may not be orthogonal; to gaurantee an orthogonal tangent basis please use addOrthTanBasisForTextureCoordinateAttibuteNamed selector.

Source

pub unsafe fn addTangentBasisForTextureCoordinateAttributeNamed_normalAttributeNamed_tangentAttributeNamed( &self, texture_coordinate_attribute_name: &NSString, normal_attribute_name: &NSString, tangent_attribute_name: &NSString, )

Create tangents which are orthogonal to the normal

Parameter textureCoordinateAttributeName: texture coordinates to use in calculations

Parameter normalAttributeName: normals to use in calculations

Parameter tangentAttributeName: Name of a four component vertex tangent attribute.

Uses the attribute named MDLVertexAttributePosition and textureCoordinateAttributeName and the specified normals to calculate tangent information. The mesh’s vertexDescriptor will be updated to reflect the new attribute if necessary. Note that this method does NOT produce a T.w component which is used in B = (N x T) * T.w Please use addOrthTanBasisForTextureCoordinateAttributeNamed.

Source

pub unsafe fn addOrthTanBasisForTextureCoordinateAttributeNamed_normalAttributeNamed_tangentAttributeNamed( &self, texture_coordinate_attribute_name: &NSString, normal_attribute_name: &NSString, tangent_attribute_name: &NSString, )

Source

pub unsafe fn addUnwrappedTextureCoordinatesForAttributeNamed( &self, texture_coordinate_attribute_name: &NSString, )

Creates texture coordinates by unwrapping the mesh

Parameter textureCoordinateAttributeName: texture coordinates to modify or create

Uses the attribute named MDLVertexAttributePosition and if available, the attribute named MDLVertexAttributeNormal to calculate texture coordinates

Source

pub unsafe fn flipTextureCoordinatesInAttributeNamed( &self, texture_coordinate_attribute_name: &NSString, )

Flips texture coordinates by performing the operation (u,v) = (u, 1-v)

Parameter textureCoordinateAttributeName: texture coordinates to modify

Many application generate model files with texture coordinate mapping assuming a bottom left bitmap origin. It can be more convenient to have texture coordinates corresponding to an upper left bitmap origin. This selector will perform the flip operation if the requested texture coordinate attribute exists on the mesh. An exception will be raised if the attribute cannot be found

Source

pub unsafe fn makeVerticesUnique(&self)

👎Deprecated

Deindexes the vertex array

If any vertices are shared on multiple faces, duplicate those vertices so faces do not share vertices. The vertex buffer and index buffers on submeshes may grow to accomadate any vertices added.

Source

pub unsafe fn makeVerticesUniqueAndReturnError( &self, ) -> Result<(), Retained<NSError>>

Deindexes the vertex array

If any vertices are shared on multiple faces, duplicate those vertices so faces do not share vertices. The vertex buffer and index buffers on submeshes may grow to accomadate any vertices added.

Source

pub unsafe fn replaceAttributeNamed_withData( &self, name: &NSString, new_data: &MDLVertexAttributeData, )

replace existing attribute data with new attribute data retaining the format of the replacement data.

If the specified attribute does not already exist, it will be created.

Source

pub unsafe fn updateAttributeNamed_withData( &self, name: &NSString, new_data: &MDLVertexAttributeData, )

update existing attribute data with new attribute data retaining the format of the existing data.

If the specified attribute does not already exist, it will be created with the same format as the newData.

Source

pub unsafe fn removeAttributeNamed(&self, name: &NSString)

remove an attribute

if the named attribute does not exist, nothing happens.

Source§

impl MDLMesh

Generators.

Source

pub unsafe fn initMeshBySubdividingMesh_submeshIndex_subdivisionLevels_allocator( this: Allocated<Self>, mesh: &MDLMesh, submesh_index: c_int, subdivision_levels: c_uint, allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, ) -> Retained<Self>

Available on crate feature MDLMeshBuffer only.

Factory method that generates a subdivided mesh from a source mesh

Parameter mesh: Mesh from which to generate a subdivided mesh

Parameter submeshIndex: Index of submesh in Mesh’s submesh array from which to generate a subdivided mesh

Parameter subdivisionLevels: The number of levels to subdivide mesh

Subdivision levels over four are likely to generate more triangles than can be reasonably displayed. Index and vertex data will use the same allocator used for the source mesh. Loading an asset using the topology preservation flag set to YES will result in the best subdivision results.

Returns: Returns a mesh subdivided to index level, unless subdivision is impossible.

Source

pub unsafe fn newIcosahedronWithRadius_inwardNormals_geometryType_allocator( radius: c_float, inward_normals: bool, geometry_type: MDLGeometryType, allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, ) -> Retained<Self>

Available on crate features MDLMeshBuffer and MDLTypes only.
Source

pub unsafe fn newIcosahedronWithRadius_inwardNormals_allocator( radius: c_float, inward_normals: bool, allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, ) -> Retained<Self>

Available on crate feature MDLMeshBuffer only.
Source

pub unsafe fn newSubdividedMesh_submeshIndex_subdivisionLevels( mesh: &MDLMesh, submesh_index: NSUInteger, subdivision_levels: NSUInteger, ) -> Option<Retained<Self>>

Source§

impl MDLMesh

MDLLightBaking.

Source

pub unsafe fn generateAmbientOcclusionTextureWithQuality_attenuationFactor_objectsToConsider_vertexAttributeNamed_materialPropertyNamed( &self, bake_quality: c_float, attenuation_factor: c_float, objects_to_consider: &NSArray<MDLObject>, vertex_attribute_name: &NSString, material_property_name: &NSString, ) -> bool

Creates an Ambient Occlusion texture, returns true upon success, false upon failure

Parameter bakeQuality: Float between 0 and 1 that defines quality of the bake process. 0 is of lower quality but bakes faster and uses less memory, where 1 is of higher quality.

Parameter attenuationFactor: Float between 0 to 1 that defines how to attenuate the AO value. 0 doesn’t change it, and at 1, all AO values are white except if they are originally completely black. Quadratic attenuation in between.

Parameter objectsToConsider: NSArray of MDLMeshes containing the objects to raytrace against

Parameter vertexAttributeName: NSString of the MDLVertexAttribute where the vertex texture UVs will be stored. Creates it if it doesn’t exist, otherwise overwrites current values.

Parameter materialPropertyName: NSString of the MDLMaterialProperty that will store the texture in the Mesh.

Returns: Success or failure of the baking process.

Source

pub unsafe fn generateAmbientOcclusionVertexColorsWithRaysPerSample_attenuationFactor_objectsToConsider_vertexAttributeNamed( &self, rays_per_sample: NSInteger, attenuation_factor: c_float, objects_to_consider: &NSArray<MDLObject>, vertex_attribute_name: &NSString, ) -> bool

Source

pub unsafe fn generateAmbientOcclusionVertexColorsWithQuality_attenuationFactor_objectsToConsider_vertexAttributeNamed( &self, bake_quality: c_float, attenuation_factor: c_float, objects_to_consider: &NSArray<MDLObject>, vertex_attribute_name: &NSString, ) -> bool

Source

pub unsafe fn generateLightMapTextureWithQuality_lightsToConsider_objectsToConsider_vertexAttributeNamed_materialPropertyNamed( &self, bake_quality: c_float, lights_to_consider: &NSArray<MDLLight>, objects_to_consider: &NSArray<MDLObject>, vertex_attribute_name: &NSString, material_property_name: &NSString, ) -> bool

Available on crate feature MDLLight only.
Source

pub unsafe fn generateLightMapVertexColorsWithLightsToConsider_objectsToConsider_vertexAttributeNamed( &self, lights_to_consider: &NSArray<MDLLight>, objects_to_consider: &NSArray<MDLObject>, vertex_attribute_name: &NSString, ) -> bool

Available on crate feature MDLLight only.

Methods from Deref<Target = MDLObject>§

Source

pub unsafe fn components( &self, ) -> Retained<NSArray<ProtocolObject<dyn MDLComponent>>>

Available on crate feature MDLTypes only.

Allows applications to introspect the components on the objects.

Source

pub unsafe fn setComponent_forProtocol( &self, component: &ProtocolObject<dyn MDLComponent>, protocol: &AnyProtocol, )

Available on crate feature MDLTypes only.

Extensible component support that allows user of ModelIO to customize MDLObjects to fit their format and workflow.

§Safety

protocol possibly has further requirements.

Source

pub unsafe fn componentConformingToProtocol( &self, protocol: &AnyProtocol, ) -> Option<Retained<ProtocolObject<dyn MDLComponent>>>

Available on crate feature MDLTypes only.

Extensible component support that allows user of ModelIO to customize MDLObjects to fit their format and workflow.

§Safety

protocol possibly has further requirements.

Source

pub unsafe fn objectForKeyedSubscript( &self, key: &AnyProtocol, ) -> Option<Retained<ProtocolObject<dyn MDLComponent>>>

Available on crate feature MDLTypes only.

Allows shorthand [key] syntax for componentConformingToProtocol:.

Parameter key: The protocol that the component conforms to.

See: componentConformingToProtocol:

§Safety

key possibly has further requirements.

Source

pub unsafe fn setObject_forKeyedSubscript( &self, obj: Option<&ProtocolObject<dyn MDLComponent>>, key: &AnyProtocol, )

Available on crate feature MDLTypes only.

Allows shorthand [key] syntax for setComponent:forProtocol:.

Parameter key: The protocol that the component conforms to.

See: setComponent:forProtocol:

§Safety

key possibly has further requirements.

Source

pub unsafe fn parent(&self) -> Option<Retained<MDLObject>>

Parent object. Nil if no parent.

Set to nil when you remove this from an object container inside the parent object.

Source

pub unsafe fn setParent(&self, parent: Option<&MDLObject>)

Setter for parent.

This is a weak property.

Source

pub unsafe fn instance(&self) -> Option<Retained<MDLObject>>

Instance object

nil, unless this object refers to original data to be instanced. The original data object can be any MDLObject that does not have a parent. If an MDLAsset has been created from a data file, any original objects parsed from that file will be found in the originals property. A typical use of a original and instance might be to have one original chair MDLObject, and instance six chairs around a table. The transform of each chair would be found on the parent MDLObject, but the various items making up the chair would be found in the original object.

Source

pub unsafe fn setInstance(&self, instance: Option<&MDLObject>)

Setter for instance.

Source

pub unsafe fn path(&self) -> Retained<NSString>

a string representing a path to the object

a path is of the form /path/to/object where the path is formed by concatenating the names of the objects up the parent chain. Requesting a path will force any unnamed objects to became uniquely named. Any characters outside of [A-Z][a-z][0-9][:-_.] will be forced to underscore.

Source

pub unsafe fn objectAtPath(&self, path: &NSString) -> Retained<MDLObject>

Return the object at the specified path, or nil if none exists there

Source

pub unsafe fn enumerateChildObjectsOfClass_root_usingBlock_stopPointer( &self, object_class: &AnyClass, root: &MDLObject, block: &DynBlock<dyn Fn(NonNull<MDLObject>, NonNull<Bool>)>, stop_pointer: NonNull<Bool>, )

Available on crate feature block2 only.
§Safety
  • object_class probably has further requirements.
  • stop_pointer must be a valid pointer.
Source

pub unsafe fn transform( &self, ) -> Option<Retained<ProtocolObject<dyn MDLTransformComponent>>>

Available on crate features MDLTransform and MDLTypes only.

Short hand property for the MDLTransformComponent.

The default value is nil

See: MDLTransformComponent

Source

pub unsafe fn setTransform( &self, transform: Option<&ProtocolObject<dyn MDLTransformComponent>>, )

Available on crate features MDLTransform and MDLTypes only.

Setter for transform.

Source

pub unsafe fn children( &self, ) -> Retained<ProtocolObject<dyn MDLObjectContainerComponent>>

Available on crate feature MDLTypes only.

Short hand property for the MDLObjectContainerComponent.

The default value is an empty MDLObjectContainer

See: MDLObjectContainerComponent

Source

pub unsafe fn setChildren( &self, children: &ProtocolObject<dyn MDLObjectContainerComponent>, )

Available on crate feature MDLTypes only.

Setter for children.

Source

pub unsafe fn hidden(&self) -> bool

Visibility of the node

default is NO

Source

pub unsafe fn setHidden(&self, hidden: bool)

Setter for hidden.

Source

pub unsafe fn addChild(&self, child: &MDLObject)

Short hand for adding a child to the current container component and setting the parent to this object.

It will create a default container if none exists. If children are explicitly disallowed for an object, then add a container component that throws on addition.

See: MDLObjectContainer

Methods from Deref<Target = NSObject>§

Source

pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !

Handle messages the object doesn’t recognize.

See Apple’s documentation for details.

Methods from Deref<Target = AnyObject>§

Source

pub fn class(&self) -> &'static AnyClass

Dynamically find the class of this object.

§Panics

May panic if the object is invalid (which may be the case for objects returned from unavailable init/new methods).

§Example

Check that an instance of NSObject has the precise class NSObject.

use objc2::ClassType;
use objc2::runtime::NSObject;

let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());
Source

pub unsafe fn get_ivar<T>(&self, name: &str) -> &T
where T: Encode,

👎Deprecated: this is difficult to use correctly, use Ivar::load instead.

Use Ivar::load instead.

§Safety

The object must have an instance variable with the given name, and it must be of type T.

See Ivar::load_ptr for details surrounding this.

Source

pub fn downcast_ref<T>(&self) -> Option<&T>
where T: DowncastTarget,

Attempt to downcast the object to a class of type T.

This is the reference-variant. Use Retained::downcast if you want to convert a retained object to another type.

§Mutable classes

Some classes have immutable and mutable variants, such as NSString and NSMutableString.

When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.

So using this method to convert a NSString to a NSMutableString, while not unsound, is generally frowned upon unless you created the string yourself, or the API explicitly documents the string to be mutable.

See Apple’s documentation on mutability and on isKindOfClass: for more details.

§Generic classes

Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.

You can, however, safely downcast to generic collections where all the type-parameters are AnyObject.

§Panics

This works internally by calling isKindOfClass:. That means that the object must have the instance method of that name, and an exception will be thrown (if CoreFoundation is linked) or the process will abort if that is not the case. In the vast majority of cases, you don’t need to worry about this, since both root objects NSObject and NSProxy implement this method.

§Examples

Cast an NSString back and forth from NSObject.

use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};

let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();

Try (and fail) to cast an NSObject to an NSString.

use objc2_foundation::{NSObject, NSString};

let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());

Try to cast to an array of strings.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();

This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.

Downcast when processing each element instead.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);

for elem in arr {
    if let Some(data) = elem.downcast_ref::<NSString>() {
        // handle `data`
    }
}

Trait Implementations§

Source§

impl AsRef<AnyObject> for MDLMesh

Source§

fn as_ref(&self) -> &AnyObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<MDLMesh> for MDLMesh

Source§

fn as_ref(&self) -> &Self

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<MDLObject> for MDLMesh

Source§

fn as_ref(&self) -> &MDLObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<NSObject> for MDLMesh

Source§

fn as_ref(&self) -> &NSObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Borrow<AnyObject> for MDLMesh

Source§

fn borrow(&self) -> &AnyObject

Immutably borrows from an owned value. Read more
Source§

impl Borrow<MDLObject> for MDLMesh

Source§

fn borrow(&self) -> &MDLObject

Immutably borrows from an owned value. Read more
Source§

impl Borrow<NSObject> for MDLMesh

Source§

fn borrow(&self) -> &NSObject

Immutably borrows from an owned value. Read more
Source§

impl ClassType for MDLMesh

Source§

const NAME: &'static str = "MDLMesh"

The name of the Objective-C class that this type represents. Read more
Source§

type Super = MDLObject

The superclass of this class. Read more
Source§

type ThreadKind = <<MDLMesh as ClassType>::Super as ClassType>::ThreadKind

Whether the type can be used from any thread, or from only the main thread. Read more
Source§

fn class() -> &'static AnyClass

Get a reference to the Objective-C class that this type represents. Read more
Source§

fn as_super(&self) -> &Self::Super

Get an immutable reference to the superclass.
Source§

impl Debug for MDLMesh

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for MDLMesh

Source§

type Target = MDLObject

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Hash for MDLMesh

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl MDLNamed for MDLMesh

Source§

unsafe fn name(&self) -> Retained<NSString>
where Self: Sized + Message,

Available on crate feature MDLTypes only.
Source§

unsafe fn setName(&self, name: &NSString)
where Self: Sized + Message,

Available on crate feature MDLTypes only.
Setter for name. Read more
Source§

impl Message for MDLMesh

Source§

fn retain(&self) -> Retained<Self>
where Self: Sized,

Increment the reference count of the receiver. Read more
Source§

impl NSObjectProtocol for MDLMesh

Source§

fn isEqual(&self, other: Option<&AnyObject>) -> bool
where Self: Sized + Message,

Check whether the object is equal to an arbitrary other object. Read more
Source§

fn hash(&self) -> usize
where Self: Sized + Message,

An integer that can be used as a table address in a hash table structure. Read more
Source§

fn isKindOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of the class, or one of its subclasses. Read more
Source§

fn is_kind_of<T>(&self) -> bool
where T: ClassType, Self: Sized + Message,

👎Deprecated: use isKindOfClass directly, or cast your objects with AnyObject::downcast_ref
Check if the object is an instance of the class type, or one of its subclasses. Read more
Source§

fn isMemberOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of a specific class, without checking subclasses. Read more
Source§

fn respondsToSelector(&self, aSelector: Sel) -> bool
where Self: Sized + Message,

Check whether the object implements or inherits a method with the given selector. Read more
Source§

fn conformsToProtocol(&self, aProtocol: &AnyProtocol) -> bool
where Self: Sized + Message,

Check whether the object conforms to a given protocol. Read more
Source§

fn description(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object. Read more
Source§

fn debugDescription(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object to use when debugging. Read more
Source§

fn isProxy(&self) -> bool
where Self: Sized + Message,

Check whether the receiver is a subclass of the NSProxy root class instead of the usual NSObject. Read more
Source§

fn retainCount(&self) -> usize
where Self: Sized + Message,

The reference count of the object. Read more
Source§

impl PartialEq for MDLMesh

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RefEncode for MDLMesh

Source§

const ENCODING_REF: Encoding = <MDLObject as ::objc2::RefEncode>::ENCODING_REF

The Objective-C type-encoding for a reference of this type. Read more
Source§

impl DowncastTarget for MDLMesh

Source§

impl Eq for MDLMesh

Auto Trait Implementations§

§

impl !Freeze for MDLMesh

§

impl !RefUnwindSafe for MDLMesh

§

impl !Send for MDLMesh

§

impl !Sync for MDLMesh

§

impl !Unpin for MDLMesh

§

impl !UnwindSafe for MDLMesh

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T> AnyThread for T
where T: ClassType<ThreadKind = dyn AnyThread + 'a> + ?Sized,

Source§

fn alloc() -> Allocated<Self>
where Self: Sized + ClassType,

Allocate a new instance of the class. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,