pub struct MDLMesh { /* private fields */ }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
impl MDLMesh
Sourcepub unsafe fn initWithBufferAllocator(
this: Allocated<Self>,
buffer_allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>,
) -> Retained<Self>
Available on crate feature MDLMeshBuffer only.
pub unsafe fn initWithBufferAllocator( this: Allocated<Self>, buffer_allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, ) -> Retained<Self>
MDLMeshBuffer only.Initialize a mesh with an allocator
Returns: An empty mesh
Sourcepub 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.
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>
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
Sourcepub 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.
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>
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
Sourcepub unsafe fn vertexAttributeDataForAttributeNamed(
&self,
name: &NSString,
) -> Option<Retained<MDLVertexAttributeData>>
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.
Sourcepub unsafe fn vertexAttributeDataForAttributeNamed_asFormat(
&self,
name: &NSString,
format: MDLVertexFormat,
) -> Option<Retained<MDLVertexAttributeData>>
Available on crate feature MDLVertexDescriptor only.
pub unsafe fn vertexAttributeDataForAttributeNamed_asFormat( &self, name: &NSString, format: MDLVertexFormat, ) -> Option<Retained<MDLVertexAttributeData>>
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.
Sourcepub unsafe fn vertexDescriptor(&self) -> Retained<MDLVertexDescriptor>
Available on crate feature MDLVertexDescriptor only.
pub unsafe fn vertexDescriptor(&self) -> Retained<MDLVertexDescriptor>
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.
Sourcepub unsafe fn setVertexDescriptor(
&self,
vertex_descriptor: &MDLVertexDescriptor,
)
Available on crate feature MDLVertexDescriptor only.
pub unsafe fn setVertexDescriptor( &self, vertex_descriptor: &MDLVertexDescriptor, )
MDLVertexDescriptor only.Setter for vertexDescriptor.
This is copied when set.
Sourcepub unsafe fn vertexCount(&self) -> NSUInteger
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
Sourcepub unsafe fn setVertexCount(&self, vertex_count: NSUInteger)
pub unsafe fn setVertexCount(&self, vertex_count: NSUInteger)
Setter for vertexCount.
Sourcepub unsafe fn vertexBuffers(
&self,
) -> Retained<NSArray<ProtocolObject<dyn MDLMeshBuffer>>>
Available on crate feature MDLMeshBuffer only.
pub unsafe fn vertexBuffers( &self, ) -> Retained<NSArray<ProtocolObject<dyn MDLMeshBuffer>>>
MDLMeshBuffer only.Array of buffers containing vertex data
The vertex buffers in this array are indexed by the vertex descriptor.
Sourcepub unsafe fn setVertexBuffers(
&self,
vertex_buffers: &NSArray<ProtocolObject<dyn MDLMeshBuffer>>,
)
Available on crate feature MDLMeshBuffer only.
pub unsafe fn setVertexBuffers( &self, vertex_buffers: &NSArray<ProtocolObject<dyn MDLMeshBuffer>>, )
MDLMeshBuffer only.Setter for vertexBuffers.
Sourcepub unsafe fn submeshes(&self) -> Option<Retained<NSMutableArray<MDLSubmesh>>>
Available on crate feature MDLSubmesh only.
pub unsafe fn submeshes(&self) -> Option<Retained<NSMutableArray<MDLSubmesh>>>
MDLSubmesh only.Array of submeshes containing an indexbuffer referencing the vertex data and material to be applied when the mesh is rendered
Sourcepub unsafe fn setSubmeshes(
&self,
submeshes: Option<&NSMutableArray<MDLSubmesh>>,
)
Available on crate feature MDLSubmesh only.
pub unsafe fn setSubmeshes( &self, submeshes: Option<&NSMutableArray<MDLSubmesh>>, )
MDLSubmesh only.Sourcepub unsafe fn allocator(
&self,
) -> Retained<ProtocolObject<dyn MDLMeshBufferAllocator>>
Available on crate feature MDLMeshBuffer only.
pub unsafe fn allocator( &self, ) -> Retained<ProtocolObject<dyn MDLMeshBufferAllocator>>
MDLMeshBuffer only.allocator used to allocate contained mesh buffers
Source§impl MDLMesh
Modifiers.
impl MDLMesh
Modifiers.
Sourcepub unsafe fn addAttributeWithName_format(
&self,
name: &NSString,
format: MDLVertexFormat,
)
Available on crate feature MDLVertexDescriptor only.
pub unsafe fn addAttributeWithName_format( &self, name: &NSString, format: MDLVertexFormat, )
MDLVertexDescriptor only.Convenience method to add an attribute
The mesh’s allocator will be used to create storage for the new attribute.
Sourcepub unsafe fn addAttributeWithName_format_type_data_stride(
&self,
name: &NSString,
format: MDLVertexFormat,
type: &NSString,
data: &NSData,
stride: NSInteger,
)
Available on crate feature MDLVertexDescriptor only.
pub unsafe fn addAttributeWithName_format_type_data_stride( &self, name: &NSString, format: MDLVertexFormat, type: &NSString, data: &NSData, stride: NSInteger, )
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.
Sourcepub 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.
pub unsafe fn addAttributeWithName_format_type_data_stride_time( &self, name: &NSString, format: MDLVertexFormat, type: &NSString, data: &NSData, stride: NSInteger, time: NSTimeInterval, )
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.
Sourcepub unsafe fn addNormalsWithAttributeNamed_creaseThreshold(
&self,
attribute_name: Option<&NSString>,
crease_threshold: c_float,
)
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.
Sourcepub unsafe fn addTangentBasisForTextureCoordinateAttributeNamed_tangentAttributeNamed_bitangentAttributeNamed(
&self,
texture_coordinate_attribute_name: &NSString,
tangent_attribute_name: &NSString,
bitangent_attribute_name: Option<&NSString>,
)
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.
Sourcepub unsafe fn addTangentBasisForTextureCoordinateAttributeNamed_normalAttributeNamed_tangentAttributeNamed(
&self,
texture_coordinate_attribute_name: &NSString,
normal_attribute_name: &NSString,
tangent_attribute_name: &NSString,
)
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.
pub unsafe fn addOrthTanBasisForTextureCoordinateAttributeNamed_normalAttributeNamed_tangentAttributeNamed( &self, texture_coordinate_attribute_name: &NSString, normal_attribute_name: &NSString, tangent_attribute_name: &NSString, )
Sourcepub unsafe fn addUnwrappedTextureCoordinatesForAttributeNamed(
&self,
texture_coordinate_attribute_name: &NSString,
)
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
Sourcepub unsafe fn flipTextureCoordinatesInAttributeNamed(
&self,
texture_coordinate_attribute_name: &NSString,
)
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
Sourcepub unsafe fn makeVerticesUnique(&self)
👎Deprecated
pub unsafe fn makeVerticesUnique(&self)
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.
Sourcepub unsafe fn makeVerticesUniqueAndReturnError(
&self,
) -> Result<(), Retained<NSError>>
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.
Sourcepub unsafe fn replaceAttributeNamed_withData(
&self,
name: &NSString,
new_data: &MDLVertexAttributeData,
)
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.
Sourcepub unsafe fn updateAttributeNamed_withData(
&self,
name: &NSString,
new_data: &MDLVertexAttributeData,
)
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.
Sourcepub unsafe fn removeAttributeNamed(&self, name: &NSString)
pub unsafe fn removeAttributeNamed(&self, name: &NSString)
remove an attribute
if the named attribute does not exist, nothing happens.
Source§impl MDLMesh
Generators.
impl MDLMesh
Generators.
Sourcepub 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.
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>
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.
pub unsafe fn newIcosahedronWithRadius_inwardNormals_geometryType_allocator( radius: c_float, inward_normals: bool, geometry_type: MDLGeometryType, allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, ) -> Retained<Self>
MDLMeshBuffer and MDLTypes only.pub unsafe fn newIcosahedronWithRadius_inwardNormals_allocator( radius: c_float, inward_normals: bool, allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, ) -> Retained<Self>
MDLMeshBuffer only.pub unsafe fn newSubdividedMesh_submeshIndex_subdivisionLevels( mesh: &MDLMesh, submesh_index: NSUInteger, subdivision_levels: NSUInteger, ) -> Option<Retained<Self>>
Source§impl MDLMesh
MDLLightBaking.
impl MDLMesh
MDLLightBaking.
Sourcepub 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
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.
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
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
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
MDLLight only.pub unsafe fn generateLightMapVertexColorsWithLightsToConsider_objectsToConsider_vertexAttributeNamed( &self, lights_to_consider: &NSArray<MDLLight>, objects_to_consider: &NSArray<MDLObject>, vertex_attribute_name: &NSString, ) -> bool
MDLLight only.Methods from Deref<Target = MDLObject>§
Sourcepub unsafe fn components(
&self,
) -> Retained<NSArray<ProtocolObject<dyn MDLComponent>>>
Available on crate feature MDLTypes only.
pub unsafe fn components( &self, ) -> Retained<NSArray<ProtocolObject<dyn MDLComponent>>>
MDLTypes only.Allows applications to introspect the components on the objects.
Sourcepub unsafe fn setComponent_forProtocol(
&self,
component: &ProtocolObject<dyn MDLComponent>,
protocol: &AnyProtocol,
)
Available on crate feature MDLTypes only.
pub unsafe fn setComponent_forProtocol( &self, component: &ProtocolObject<dyn MDLComponent>, protocol: &AnyProtocol, )
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.
Sourcepub unsafe fn componentConformingToProtocol(
&self,
protocol: &AnyProtocol,
) -> Option<Retained<ProtocolObject<dyn MDLComponent>>>
Available on crate feature MDLTypes only.
pub unsafe fn componentConformingToProtocol( &self, protocol: &AnyProtocol, ) -> Option<Retained<ProtocolObject<dyn MDLComponent>>>
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.
Sourcepub unsafe fn objectForKeyedSubscript(
&self,
key: &AnyProtocol,
) -> Option<Retained<ProtocolObject<dyn MDLComponent>>>
Available on crate feature MDLTypes only.
pub unsafe fn objectForKeyedSubscript( &self, key: &AnyProtocol, ) -> Option<Retained<ProtocolObject<dyn MDLComponent>>>
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.
Sourcepub unsafe fn setObject_forKeyedSubscript(
&self,
obj: Option<&ProtocolObject<dyn MDLComponent>>,
key: &AnyProtocol,
)
Available on crate feature MDLTypes only.
pub unsafe fn setObject_forKeyedSubscript( &self, obj: Option<&ProtocolObject<dyn MDLComponent>>, key: &AnyProtocol, )
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.
Sourcepub unsafe fn parent(&self) -> Option<Retained<MDLObject>>
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.
Sourcepub unsafe fn setParent(&self, parent: Option<&MDLObject>)
pub unsafe fn setParent(&self, parent: Option<&MDLObject>)
Setter for parent.
This is a weak property.
Sourcepub unsafe fn instance(&self) -> Option<Retained<MDLObject>>
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.
Sourcepub unsafe fn setInstance(&self, instance: Option<&MDLObject>)
pub unsafe fn setInstance(&self, instance: Option<&MDLObject>)
Setter for instance.
Sourcepub unsafe fn path(&self) -> Retained<NSString>
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.
Sourcepub unsafe fn objectAtPath(&self, path: &NSString) -> Retained<MDLObject>
pub unsafe fn objectAtPath(&self, path: &NSString) -> Retained<MDLObject>
Return the object at the specified path, or nil if none exists there
Sourcepub 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.
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>, )
block2 only.§Safety
object_classprobably has further requirements.stop_pointermust be a valid pointer.
Sourcepub unsafe fn transform(
&self,
) -> Option<Retained<ProtocolObject<dyn MDLTransformComponent>>>
Available on crate features MDLTransform and MDLTypes only.
pub unsafe fn transform( &self, ) -> Option<Retained<ProtocolObject<dyn MDLTransformComponent>>>
MDLTransform and MDLTypes only.Short hand property for the MDLTransformComponent.
The default value is nil
See: MDLTransformComponent
Sourcepub unsafe fn setTransform(
&self,
transform: Option<&ProtocolObject<dyn MDLTransformComponent>>,
)
Available on crate features MDLTransform and MDLTypes only.
pub unsafe fn setTransform( &self, transform: Option<&ProtocolObject<dyn MDLTransformComponent>>, )
MDLTransform and MDLTypes only.Setter for transform.
Sourcepub unsafe fn children(
&self,
) -> Retained<ProtocolObject<dyn MDLObjectContainerComponent>>
Available on crate feature MDLTypes only.
pub unsafe fn children( &self, ) -> Retained<ProtocolObject<dyn MDLObjectContainerComponent>>
MDLTypes only.Short hand property for the MDLObjectContainerComponent.
The default value is an empty MDLObjectContainer
See: MDLObjectContainerComponent
Sourcepub unsafe fn setChildren(
&self,
children: &ProtocolObject<dyn MDLObjectContainerComponent>,
)
Available on crate feature MDLTypes only.
pub unsafe fn setChildren( &self, children: &ProtocolObject<dyn MDLObjectContainerComponent>, )
MDLTypes only.Setter for children.
Visibility of the node
default is NO
Sourcepub unsafe fn addChild(&self, child: &MDLObject)
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>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
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());Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
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.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
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 ClassType for MDLMesh
impl ClassType for MDLMesh
Source§const NAME: &'static str = "MDLMesh"
const NAME: &'static str = "MDLMesh"
Source§type ThreadKind = <<MDLMesh as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<MDLMesh as ClassType>::Super as ClassType>::ThreadKind
Source§impl NSObjectProtocol for MDLMesh
impl NSObjectProtocol for MDLMesh
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass directly, or cast your objects with AnyObject::downcast_ref