Corner ¶
Corner(a=None, mode='COPY', selector=None, attr_from=None, **attrs)
Mesh corner (loop) domain.
Stores, for each corner of each face, the index of the associated vertex and optional per-corner attributes (e.g., UVs).
Attributes:
Name | Type | Description |
---|---|---|
vertex_index |
(M,) int
|
Index of the referenced vertex in the point (vertex) array. |
UVMap |
(M, 2) float, optional
|
UV coordinates (you may create additional maps via :meth: |
Methods:
Name | Description |
---|---|
check |
Validate that all vertex indices are < |
new_uvmap |
Create and optionally initialize a new UV map attribute. |
compute_attribute_on_points |
Average a per-corner attribute back to points (vertices). |
Examples:
Create a second UV map:
corners.new_uvmap("UV2", value=(0.0, 0.0))
Accumulate per-corner shading to vertices:
v_attr = corners.compute_attribute_on_points("illum", points)
Initialize a domain array and its attribute schema.
Initializes the storage from an existing array/domain or creates an empty structure. Optionally merges attribute definitions/values from another domain and keyword-provided attributes.
Domains are never instancied directly but by owning geometries.
Actual Domains are Vertex
, [Faces
][npblender.Faces],
Corner
, Edge
,
ControlPoint
, Spline
and Point
.
Domains are initialized with their defaults attributes, for instance position
for
point domaines.
Use attributes can be freely added.
Note: user attributes are saved in Blender Mesh objects only, Blender Curve objects don't store user attributes.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
a
|
array - like or FieldArray or None
|
Source data used to initialize the domain. If |
None
|
mode
|
(COPY, CAPTURE, EMPTY)
|
Initialization mode. |
'COPY'
|
selector
|
Any
|
Optional row/element selector applied to |
None
|
attr_from
|
Domain or Mapping or None
|
Attribute schema (and possibly values) to merge into this domain. |
None
|
**attrs
|
Additional attribute name/value pairs to inject or override. |
{}
|
Notes
The effective attribute list results from _declare_attributes()
, then
attr_from
, then **attrs
(later entries take precedence).
Examples:
cube = Mesh.cube() # points, corners, faces and edges domains are created
# Adding named attribute to point domain
cube.points.new_float('age')
# Setting the age
cube.points.age = np.random.uniforme(10, 10, len(cube.points))
actual_names
property
¶
actual_names
Column names.
Returns the actual field names, excluding optional fields.
transdom_names
property
¶
transdom_names
List the names of trans-domain attributes.
Returns:
Type | Description |
---|---|
list of str
|
Names of attributes flagged with |
Examples:
names = D.transdom_names()
add ¶
add(count, **fields)
Add count records
New records are set with default values or values provided by the user in fields dict.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
count
|
int
|
Number of records to add. |
required |
fields
|
dict
|
Keyword arguments mapping field names to values. |
{}
|
append ¶
append(**fields)
Append values to the structured array.
The number of records to append is determined by the number of fields provided in the fields dictionary. The values of the fields are copied to the new records.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
fields
|
dict
|
Keyword arguments mapping field names to values. |
{}
|
as_kwargs ¶
as_kwargs(selector=None, include=None, exclude=None)
Return a dictionary of field values formatted as kwargs.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
selector
|
slice, int, list, or mask
|
Optional selection of elements to extract. |
None
|
include
|
list[str]
|
List of field names (original or python names) to include. |
None
|
exclude
|
list[str]
|
List of field names (original or python names) to exclude. |
None
|
Returns:
Type | Description |
---|---|
dict
|
Mapping from python-safe field names to array values. |
check ¶
check(count, halt=True)
Validate corner indices against a vertex count.
Verifies that all entries of vertex_index
reference valid vertices
(i.e., are strictly less than count
). When invalid indices are
detected, either raises or logs an error depending on halt
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
count
|
int
|
Number of vertices in the referenced point/vertex domain. |
required |
halt
|
bool
|
If |
True
|
Returns:
Type | Description |
---|---|
bool
|
|
Raises:
Type | Description |
---|---|
RuntimeError
|
If invalid indices are found and |
Examples:
ok = corners.check(count=len(vertices), halt=False)
if not ok:
# fix topology or filter invalid corners
...
compute_attribute_on_points ¶
compute_attribute_on_points(attr, points)
Average a per-corner attribute back to points (vertices).
For each vertex, computes the mean of the source attribute over all
incident corners (as defined by vertex_index
). The attribute is
validated with
[_check_attribute_to_compute
][npblender._check_attribute_to_compute].
Parameters:
Name | Type | Description | Default |
---|---|---|---|
attr
|
str or ndarray, shape ``(M, ...)``
|
Corner attribute to average. If a string, the field is looked up on this
domain; if an array, it must have length |
required |
points
|
Vertex
|
Vertex domain used to size the result ( |
required |
Returns:
Type | Description |
---|---|
ndarray, shape ``(len(points), ...)``
|
Per-vertex averaged attribute. The trailing item shape is preserved and the dtype follows the input attribute. |
Raises:
Type | Description |
---|---|
AttributeError
|
If |
IndexError
|
If |
TypeError
|
If the attribute dtype cannot be averaged (e.g., non-numeric types). |
Notes
This routine computes an unweighted arithmetic mean per vertex over all incident corners.
Examples:
# Accumulate per-corner illumination to vertices
v_illum = corners.compute_attribute_on_points("illum", vertices)
# Average custom corner vectors per vertex
v_vec = corners.compute_attribute_on_points(corner_vecs, vertices)
copy_field ¶
copy_field(field_name, new_name, **infos)
Duplicate an existing field under a new name, with optional metadata overrides.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
field_name
|
str
|
The name of the existing field to copy. |
required |
new_name
|
str
|
The name of the new field to create. |
required |
infos
|
keyword arguments
|
Optional metadata (e.g. default, unit, description...) to override or supplement the original field's metadata. |
{}
|
Raises:
Type | Description |
---|---|
KeyError
|
If the source field does not exist. |
ValueError
|
If the target name already exists or is reserved. |
delete ¶
delete(index)
Delete a selection of items from the array.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
index
|
int, slice, or array-like
|
The indices of the elements to delete from the current data. |
required |
Notes
This operates only on the valid range [0:self._length]
.
The internal buffer is preserved (no reallocation).
dump ¶
dump(title='Dump', attributes=None, target='SCREEN')
Pretty-print or export domain content.
Formats attribute values and prints to screen or builds a tabular dump suitable for spreadsheets.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
title
|
str
|
Title displayed in the report. |
'Dump'
|
attributes
|
Sequence[str] or None
|
Subset of attribute names to include. If |
None
|
target
|
(SCREEN, ...)
|
Output target. |
'SCREEN'
|
Returns:
Type | Description |
---|---|
None
|
|
Examples:
Domain(points).dump(title="Vertices")
Note: Formatting adapts to the chosen
target
.
extend ¶
extend(other, join_fields=True)
Append multiple records from another array or FieldArray.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
other
|
FieldArray or structured np.ndarray
|
The array of records to append. Must have named fields matching a subset of the current array's fields. |
required |
filtered ¶
filtered(selector, *, copy=False)
Return a FieldArray containing only the selected records.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
selector
|
array‑like, slice or int
|
Any valid NumPy 1‑D index: boolean mask, integer index/array, or slice.
It is applied to the current valid part of the buffer
( |
required |
copy
|
bool
|
|
False
|
Returns:
Type | Description |
---|---|
FieldArray
|
A new instance holding exactly |
from_bl_attributes ¶
from_bl_attributes(bl_attributes)
Import attributes from a Blender attribute collection.
Reads geometry attributes from a Blender data-block and creates/updates the corresponding domain attributes, resizing the domain if needed.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
bl_attributes
|
Mapping[str, Any]
|
Blender attributes collection (name → attribute descriptor) providing
at least |
required |
Returns:
Type | Description |
---|---|
None
|
|
> ***Note:*** Only external (non-internal) Blender attributes matching this
|
|
domain are imported. Missing attributes are created with `transfer=True`.
|
|
from_dict
classmethod
¶
from_dict(data)
Build a FieldArray from a dictionary with field data and optional metadata.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
data
|
dict[str, array - like or (array, dict)]
|
Mapping field names to arrays or (array, infos). Infos must include NAME. |
required |
copy
|
bool
|
Whether to copy the data. Default: True. |
required |
Returns:
Type | Description |
---|---|
FieldArray
|
|
get ¶
get(name, default=None, broadcast_shape=None)
Get attribute by name.
If name is not an actual field, return default value. Name can be an array.
pos = field_array.get("position", (0, 0, 1))
pos = field_array.get([[0, 0, 1], [0, 0, 0]])
join_attributes ¶
join_attributes(other)
Merge trans-domain attributes from another domain.
Copies or aligns attributes from other
into the current domain, excluding
any attributes not flagged as trans-domain in other
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
other
|
Domain or None
|
Source domain. If |
required |
Returns:
Type | Description |
---|---|
Domain
|
The domain itself (for chaining). |
join_fields ¶
join_fields(other, exclude=[])
Add all missing fields from another FieldArray.
For every field in other
that is not present in self
, a new field is created
with the same dtype and shape, and initialized with its default value across all existing records.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
other
|
FieldArray
|
Another FieldArray instance whose fields will be checked for missing fields. |
required |
Returns:
Type | Description |
---|---|
self
|
|
make_buckets ¶
make_buckets(attr)
Group items into buckets by attribute value.
When a domain is to be considered as a collection of packets of various sizes, buckets mechanism groups pakets by size, allowing further operation with numpy vectorization.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
attr
|
array - like or str
|
Either an integer of shape |
required |
Returns:
Type | Description |
---|---|
list[ndarray(count, n)]
|
A list of int arrays (count, n): count is the number of buckets of length n. |
Examples:
buckets = mesh.make_buckets('material')
for bucket in buckets:
print(bucket.shape)
Note: The bucket attribute can be read with
attr[bucket[:, 0]]
.
multiply ¶
multiply(count)
Duplicate the current records count
times.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
count
|
int
|
Number of times to repeat the current records. |
required |
Notes
This duplicates the current valid records (up to self._length). If the array is empty or count <= 1, nothing happens.
Example:
If the array has 3 records and count == 4, the result will be:
[rec0, rec1, rec2, rec0, rec1, rec2, rec0, rec1, rec2, rec0, rec1, rec2]
new_attribute ¶
new_attribute(name, data_type, default, optional=False, transfer=True, transdom=True)
Register a new attribute in the domain schema.
Creates (or ensures) an attribute with a given name, logical data type, default value, and flags controlling Blender transfer and cross-domain propagation.
Note:
data_type
argument is a Blender data type not a python data type. The data type name is compatible with Blender internal storage.FLOAT
data type is implemented asnp.float32
and 'INT' asnp.int32
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name (Python identifier recommended). |
required |
data_type
|
(FLOAT, INT, BOOL, VECTOR, VECTOR2, COLOR, QUATERNION, MATRIX, STRING, ...)
|
Logical data type used by the domain. |
'FLOAT'
|
default
|
Any
|
Default value for newly allocated elements. |
required |
optional
|
bool
|
If |
False
|
transfer
|
bool
|
If |
True
|
transdom
|
bool
|
If |
True
|
See Also
new_float
, new_vector
, new_int
, new_bool
, new_color
, new_vector2
,
new_quaternion
, new_matrix
new_bool ¶
new_bool(name, default=False, optional=False, transfer=True, transdom=True)
Create or ensure a boolean attribute.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name. |
required |
default
|
bool
|
Default value. |
False
|
optional
|
bool
|
|
False
|
transfer
|
bool
|
|
True
|
transdom
|
bool
|
|
True
|
new_color ¶
new_color(name, default=(0.5, 0.5, 0.5, 1.0), optional=False, transfer=True, transdom=True)
Create or ensure a color attribute.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name. |
required |
default
|
array-like of shape (3,) or (4,)
|
Default color as RGB or RGBA. |
(0.5, 0.5, 0.5, 1.0)
|
optional
|
bool
|
|
False
|
transfer
|
bool
|
|
True
|
transdom
|
bool
|
|
True
|
new_field ¶
new_field(name, dtype, shape=None, default=0, optional=False, **infos)
Add a field to the structured array.
Arguments
- name (str) : field name
- dtype (type) : a valid numpy dtype
- shape (tuple = None) : the shape of the field
- default (any = 0) : default value
- optional (bool = False) : the field is created only when accessed
- infos (dict) : field infos
new_float ¶
new_float(name, default=0.0, optional=False, transfer=True, transdom=True)
Create or ensure a scalar float attribute.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name. |
required |
default
|
float
|
Default value. |
0.0
|
optional
|
bool
|
|
False
|
transfer
|
bool
|
|
True
|
transdom
|
bool
|
|
True
|
new_int ¶
new_int(name, default=0, optional=False, transfer=True, transdom=True)
Create or ensure an integer attribute.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name. |
required |
default
|
int
|
Default value. |
0
|
optional
|
bool
|
|
False
|
transfer
|
bool
|
|
True
|
transdom
|
bool
|
|
True
|
new_matrix ¶
new_matrix(name, default=np.eye(4), optional=False, transfer=True, transdom=True)
Create or ensure a matrix attribute.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name. |
required |
default
|
array - like
|
Default matrix. By convention this is a square matrix per element
(e.g., |
np.eye(4)
|
optional
|
bool
|
|
False
|
transfer
|
bool
|
|
True
|
transdom
|
bool
|
|
True
|
order
|
|
required |
new_quaternion ¶
new_quaternion(name, default=(0.0, 0.0, 0.0, 1.0), optional=False, transfer=True, transdom=True)
Create or ensure a quaternion attribute.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name. |
required |
default
|
array-like of shape (4,)
|
Default quaternion in |
(0.0, 0.0, 0.0, 1.0)
|
optional
|
bool
|
|
False
|
transfer
|
bool
|
|
True
|
transdom
|
bool
|
|
True
|
new_uvmap ¶
new_uvmap(name, value=None)
Create (and optionally initialize) a per-corner UV map.
Declares a new 2D UV attribute with the given name
. If value
is
provided, assigns it to the whole array (broadcast rules apply).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name for the UV map. |
required |
value
|
array-like of shape ``(2,)`` or ``(M, 2)`` or None
|
Initial UV values; broadcastable to the corner count. |
None
|
Returns:
Type | Description |
---|---|
None
|
|
Raises:
Type | Description |
---|---|
ValueError
|
If |
TypeError
|
If |
See Also
[new_vector2
][npblender.new_vector2] :
Registers a 2D vector attribute.
new_vector ¶
new_vector(name, default=(0.0, 0.0, 0.0), optional=False, transfer=True, transdom=True)
Create or ensure a 3D vector attribute.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name. |
required |
default
|
array-like of shape (3,)
|
Default XYZ vector. |
(0.0, 0.0, 0.0)
|
optional
|
bool
|
|
False
|
transfer
|
bool
|
|
True
|
transdom
|
bool
|
|
True
|
new_vector2 ¶
new_vector2(name, default=(0.0, 0.0), optional=False, transfer=True, transdom=True)
Create or ensure a 2D vector attribute.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name
|
str
|
Attribute name. |
required |
default
|
array-like of shape (2,)
|
Default XY vector. |
(0.0, 0.0)
|
optional
|
bool
|
|
False
|
transfer
|
bool
|
|
True
|
transdom
|
bool
|
|
True
|
to_bl_attributes ¶
to_bl_attributes(attributes, update=False)
Export attributes to a Blender attribute collection.
Writes eligible domain attributes to a Blender data-block, creating missing attributes and adjusting sizes as needed.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
attributes
|
Any
|
Blender attributes collection receiving the values. |
required |
update
|
bool
|
If |
False
|
Returns:
Type | Description |
---|---|
None
|
|
> ***Caution:*** Only attributes with `transfer=True` are exported. Optional
|
|
attributes are skipped.
|
|
> ***Caution:*** Curve domains user attributes are not saved.
|
|
to_dict ¶
to_dict(*, copy=True, with_infos=True)
Convert the array to a dictionary of fields or (field, infos) pairs.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
copy
|
bool
|
Whether to copy the arrays. |
True
|
with_infos
|
bool
|
If True, return (array, infos) for each field. |
True
|
Returns:
Type | Description |
---|---|
dict[str, array or (array, dict)]
|
|
transfer_attributes ¶
transfer_attributes(other, shape=None, other_shape=None)
Transfer values of trans-domain attributes from another domain.
Copies values for each trans-domain attribute present in other
into the
corresponding attributes of self
, with optional reshaping for batched
assignments.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
other
|
Domain
|
Source domain providing attribute values. |
required |
shape
|
tuple of int or None
|
Target reshape for |
None
|
other_shape
|
tuple of int or None
|
Source reshape for |
None
|
Returns:
Type | Description |
---|---|
Domain
|
The domain itself (for chaining). |
> ***Note:*** Each attribute is reshaped as `shape + item_shape` on `self`
|
|
and `other_shape + item_shape` on `other` prior to assignment.
|
|