reckfellENGINE

MeshDataTool

Рабочая копия треугольной поверхности со связями вершин, рёбер и граней.

На этой странице
class MeshDataToolReckfellSharpНаследует RefCounted

MeshDataTool — собственный RefCounted, не Mesh и не Entity. CreateFromSurface читает одну Triangles-поверхность ArrayMesh и строит локальные связи по индексам. Совпадающие позиции с разными vertex indices не объединяются. UV/normal seams поэтому могут оставаться топологическими разрывами. Освобождайте свой tool через Dispose.

C#
using var source = new ArrayMesh();
using var arrays = new Reckfell.Collections.Array();
arrays.Resize((int)Mesh.ArrayType.Max);
arrays[(int)Mesh.ArrayType.Vertex] = new Vector3[] {
    Vector3.Zero, new Vector3(1, 0, 0), new Vector3(0, 1, 0)
};
source.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);
using var edit = new MeshDataTool();
if (edit.CreateFromSurface(source, 0) != Error.Ok)
    throw new System.InvalidOperationException("Cannot read surface");
edit.SetVertex(0, new Vector3(0, 0, 1));
using var output = new ArrayMesh();
if (edit.CommitToSurface(output) != Error.Ok)
    throw new System.InvalidOperationException("Cannot commit surface");

Редактирование tool не меняет исходный Mesh. CommitToSurface добавляет новую поверхность в переданный ArrayMesh, не заменяя исходную; для безопасного получения отдельного результата используйте новый ArrayMesh. Чтобы отобразить его, затем назначьте результат нужному MeshInstance3D. В примере новые normals/UV намеренно не создаются автоматически: после изменения геометрии подготовьте нужные данные отдельно.

Vertex/edge/face ID — локальные индексы текущего импорта. У грани три угла и три ребра, у ребра два vertex endpoints. GetEdgeFaces может вернуть одну, две или больше граней: наличие связей не подтверждает manifold-меш. Сами методы не добавляют и не удаляют вершины/грани. Clear или новый импорт сбрасывают IDs/метаданные.

SetVertex меняет позицию, но не пересчитывает сохранённые vertex normals/tangents, UV и skin weights. GetFaceNormal вычисляется из текущих трёх позиций и может измениться немедленно. Setter атрибута включает канал всей поверхности: для нового канала заполните значения всех вершин. Bone/weight-пары здесь фиксированы на четыре значения; восемь влияний не поддержаны как корректный roundtrip.

Метаданные Vertex/Edge/Face живут только в tool и не сохраняются в committed-поверхности. Material — общая ссылка. Commit не переносит custom-каналы, blend shapes и LOD исходной поверхности; это не универсальное редактирование imported mesh без потерь. Предварительно проверьте используемые каналы.

Общий набор 34 Windows headless-проверок MeshDataTool/TriangleMesh использовал ArrayMesh CPU-хранилище, а не изображение GPU. Проверены topology, изменения атрибутов, append commit/reimport, metadata lifetime и BVH. Видимый рендер, деформация скелета, произвольная топология, custom/blend/LOD сохранность и производительность не подтверждены.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

MeshDataToolКонструктор
# MeshDataTool
C#
public MeshDataTool();

Создаёт собственный RefCounted с нулевыми counts/format и без material. Перед доступом по индексам импортируйте Triangles surface.

Методы41

Clearvoid
# Clear
C#
public void Clear();

Удаляет рабочие вершины, рёбра, грани и их metadata; сбрасывает material/format. Исходный Mesh не изменяется.

CommitToSurface2 перегрузки
# CommitToSurface · 1/2
C#
public Error CommitToSurface(ArrayMesh mesh);

Добавляет Triangles surface к mesh и назначает текущий material. Не заменяет старую surface и не очищает tool. Metadata/custom/blend shapes/LOD не сериализуются этим методом; bone/weight-каналы фиксированы на 4. Error.Ok не подтверждает визуальную корректность или сохранность неподдерживаемых каналов.

Параметры
ИмяТипПо умолчанию
meshArrayMesh—
mesh

Непустой ArrayMesh назначения; метод добавит поверхность, не заменит существующую.

Возвращает Error

Error результата wrapper; проверяйте свежую surface и журнал отдельно, не считайте Ok визуальной проверкой.

# CommitToSurface · 2/2
C#
public Error CommitToSurface(ArrayMesh mesh, ulong compressionFlags = 0);

Добавляет Triangles surface к mesh и назначает текущий material. Не заменяет старую surface и не очищает tool. Metadata/custom/blend shapes/LOD не сериализуются этим методом; bone/weight-каналы фиксированы на 4. Error.Ok не подтверждает визуальную корректность или сохранность неподдерживаемых каналов.

Параметры
ИмяТипПо умолчанию
meshArrayMesh—
compressionFlagsulong0
mesh

Непустой ArrayMesh назначения; метод добавит поверхность, не заменит существующую.

compressionFlags

ulong-флаги поверхности/сжатия для AddSurfaceFromArrays, по умолчанию 0. Не преобразуют неподдерживаемые каналы автоматически.

Возвращает Error

Error результата wrapper; проверяйте свежую surface и журнал отдельно, не считайте Ok визуальной проверкой.

CreateFromSurfaceError
# CreateFromSurface
C#
public Error CreateFromSurface(ArrayMesh mesh, int surface);

Читает одну Triangles surface из ArrayMesh, проверяя непустые vertices, кратность индексов трём и диапазон индексов. Без INDEX использует последовательные индексы, не weld по позициям. Успешный импорт заменяет состояние/material; старые IDs не используйте. Не валидирует произвольную manifold-топологию и все длины каналов.

Параметры
ИмяТипПо умолчанию
meshArrayMesh—
surfaceint—
mesh

Непустой ArrayMesh с существующей Triangles surface для импорта.

surface

Существующий индекс surface исходного ArrayMesh.

Возвращает Error

Error.Ok при принятом импорте; ошибка не является доказательством проверки произвольных каналов.

GetEdgeCountint
# GetEdgeCount
C#
public int GetEdgeCount();

Число уникальных неориентированных пар vertex indices. Совпадающие позиции с разными индексами не объединяют рёбра.

Возвращает int

Неотрицательное число элементов текущего импорта.

GetEdgeFacesint[]
# GetEdgeFaces
C#
public int[] GetEdgeFaces(int idx);

Возвращает face IDs, использующие ребро. Одна грань обычно граница, две общий край; больше двух возможно и не запрещено как nonmanifold.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный edge ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает int[]

Новый managed-массив данных/локальных IDs; изменение копии не меняет tool.

GetEdgeMetaVariant
# GetEdgeMeta
C#
public Variant GetEdgeMeta(int idx);

Читает служебный Variant текущего элемента. Nil допустим и не означает только ошибку. Это tool-local metadata, не сохранённое поле поверхности.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный edge ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Variant

Принадлежащий вызывающему Variant; Nil допустим. Освободите Variant после использования.

GetEdgeVertexint
# GetEdgeVertex
C#
public int GetEdgeVertex(int idx, int vertex);

Возвращает один из двух vertex IDs ребра. Пара хранится по возрастанию индексов, не по направлению обхода грани.

Параметры
ИмяТипПо умолчанию
idxint—
vertexint—
idx

Локальный edge ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

vertex

Номер конца ребра 0 или 1, не vertex ID.

Возвращает int

Локальный vertex/edge ID, -1 при диагностике неверного индекса.

GetFaceCountint
# GetFaceCount
C#
public int GetFaceCount();

Число треугольных граней, не число индексов.

Возвращает int

Неотрицательное число элементов текущего импорта.

GetFaceEdgeint
# GetFaceEdge
C#
public int GetFaceEdge(int idx, int edge);

Возвращает edge ID между локальным углом edge и (edge+1)%3. Направление endpoints самого ребра каноническое, не обязательно совпадает с гранью.

Параметры
ИмяТипПо умолчанию
idxint—
edgeint—
idx

Локальный edge ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

edge

Локальное ребро грани 0…2, не глобальный edge ID.

Возвращает int

Локальный vertex/edge ID, -1 при диагностике неверного индекса.

GetFaceMetaVariant
# GetFaceMeta
C#
public Variant GetFaceMeta(int idx);

Читает служебный Variant текущего элемента. Nil допустим и не означает только ошибку. Это tool-local metadata, не сохранённое поле поверхности.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный face ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Variant

Принадлежащий вызывающему Variant; Nil допустим. Освободите Variant после использования.

GetFaceNormalVector3
# GetFaceNormal
C#
public Vector3 GetFaceNormal(int idx);

Вычисляет единичную нормаль Plane из текущих позиций трёх углов. Не читает сохранённые vertex normals и не обновляет их. Вырожденная грань не даёт надёжного направления.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный face ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Vector3

Геометрическая normal текущих позиций; не сохранённая vertex normal.

GetFaceVertexint
# GetFaceVertex
C#
public int GetFaceVertex(int idx, int vertex);

Возвращает vertex ID локального угла 0…2 в исходном порядке индексов треугольника.

Параметры
ИмяТипПо умолчанию
idxint—
vertexint—
idx

Локальный face ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

vertex

Локальный угол грани 0…2, не vertex ID.

Возвращает int

Локальный vertex/edge ID, -1 при диагностике неверного индекса.

GetFormatulong
# GetFormat
C#
public ulong GetFormat();

Возвращает ulong-маску импортированных/добавленных каналов. Не подтверждает, что Commit сохраняет каждый source-format bit: custom и 8-weight данные не имеют полного roundtrip.

Возвращает ulong

ulong-битовая маска каналов; 0 у нового/очищенного tool.

GetMaterialMaterial
# GetMaterial
C#
public Material GetMaterial();

Возвращает общий Material текущей surface либо null. Не самостоятельная копия: не освобождайте полученный алиас, пока его использует владелец.

Возвращает Material

Общий Material либо null; не копия.

GetVertexVector3
# GetVertex
C#
public Vector3 GetVertex(int idx);

Читает позицию vertex record. Это рабочие данные, не преобразованные в world space.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Vector3

Текущее значение локального атрибута вершины; диагностический fallback не подтверждает корректный индекс.

GetVertexBonesint[]
# GetVertexBones
C#
public int[] GetVertexBones(int idx);

Читает четыре bone indices vertex record. Возвращает отдельный managed-массив; его изменение не меняет tool.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает int[]

Новый managed-массив данных/локальных IDs; изменение копии не меняет tool.

GetVertexColorColor
# GetVertexColor
C#
public Color GetVertexColor(int idx);

Читает цвет vertex record. Это рабочие данные, не преобразованные в world space.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Color

Текущее значение локального атрибута вершины; диагностический fallback не подтверждает корректный индекс.

GetVertexCountint
# GetVertexCount
C#
public int GetVertexCount();

Число vertex records текущего импорта, не уникальных позиций.

Возвращает int

Неотрицательное число элементов текущего импорта.

GetVertexEdgesint[]
# GetVertexEdges
C#
public int[] GetVertexEdges(int idx);

Возвращает копию локальных edge IDs, инцидентных vertex record. Не обход всей связной компоненты.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный edge ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает int[]

Новый managed-массив данных/локальных IDs; изменение копии не меняет tool.

GetVertexFacesint[]
# GetVertexFaces
C#
public int[] GetVertexFaces(int idx);

Возвращает копию face IDs, содержащих vertex record. Не объединяет vertices по координатам.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный face ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает int[]

Новый managed-массив данных/локальных IDs; изменение копии не меняет tool.

GetVertexMetaVariant
# GetVertexMeta
C#
public Variant GetVertexMeta(int idx);

Читает служебный Variant текущего элемента. Nil допустим и не означает только ошибку. Это tool-local metadata, не сохранённое поле поверхности.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Variant

Принадлежащий вызывающему Variant; Nil допустим. Освободите Variant после использования.

GetVertexNormalVector3
# GetVertexNormal
C#
public Vector3 GetVertexNormal(int idx);

Читает сохранённую нормаль vertex record. Это рабочие данные, не преобразованные в world space.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Vector3

Текущее значение локального атрибута вершины; диагностический fallback не подтверждает корректный индекс.

GetVertexTangentPlane
# GetVertexTangent
C#
public Plane GetVertexTangent(int idx);

Читает тангенс в Plane (Normal=xyz, D=handedness) vertex record. Это рабочие данные, не преобразованные в world space.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Plane

Текущее значение локального атрибута вершины; диагностический fallback не подтверждает корректный индекс.

GetVertexUVVector2
# GetVertexUV
C#
public Vector2 GetVertexUV(int idx);

Читает первый UV vertex record. Это рабочие данные, не преобразованные в world space.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Vector2

Текущее значение локального атрибута вершины; диагностический fallback не подтверждает корректный индекс.

GetVertexUV2Vector2
# GetVertexUV2
C#
public Vector2 GetVertexUV2(int idx);

Читает второй UV vertex record. Это рабочие данные, не преобразованные в world space.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает Vector2

Текущее значение локального атрибута вершины; диагностический fallback не подтверждает корректный индекс.

GetVertexWeightsfloat[]
# GetVertexWeights
C#
public float[] GetVertexWeights(int idx);

Читает четыре веса vertex record. Возвращает отдельный managed-массив; его изменение не меняет tool.

Параметры
ИмяТипПо умолчанию
idxint—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

Возвращает float[]

Новый managed-массив данных/локальных IDs; изменение копии не меняет tool.

SetEdgeMetavoid
# SetEdgeMeta
C#
public void SetEdgeMeta(int idx, Variant meta);

Сохраняет Variant элемента только в tool. Контейнеры Variant не клонируются глубоко; Commit не сохраняет metadata, Clear/новый импорт её удаляет.

Параметры
ИмяТипПо умолчанию
idxint—
metaVariant—
idx

Локальный edge ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

meta

Variant служебных данных; shared-контейнеры при необходимости копируйте явно.

SetFaceMetavoid
# SetFaceMeta
C#
public void SetFaceMeta(int idx, Variant meta);

Сохраняет Variant элемента только в tool. Контейнеры Variant не клонируются глубоко; Commit не сохраняет metadata, Clear/новый импорт её удаляет.

Параметры
ИмяТипПо умолчанию
idxint—
metaVariant—
idx

Локальный face ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

meta

Variant служебных данных; shared-контейнеры при необходимости копируйте явно.

SetMaterialvoid
# SetMaterial
C#
public void SetMaterial(Material material);

Сохраняет общую ссылку для следующего CommitToSurface. Не меняет материал исходного Mesh немедленно. null снимает выбранный material.

Параметры
ИмяТипПо умолчанию
materialMaterial—
material

Общий Material либо null для следующего Commit, не немедленная правка source mesh.

SetVertexvoid
# SetVertex
C#
public void SetVertex(int idx, Vector3 vertex);

Записывает позицию vertex record. Не пересчитывает normals/tangents, UV, bounds исходного Mesh или topology.

Параметры
ИмяТипПо умолчанию
idxint—
vertexVector3—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

vertex

Новая локальная позиция вершины.

SetVertexBones2 перегрузки
# SetVertexBones · 1/2
C#
public void SetVertexBones(int idx, int[] bones);

Записывает четыре bone indices vertex record. Требует ровно 4 значения и включает канал. При первом добавлении подготовьте парные bones/weights всех вершин; нормализация не выполняется.

Параметры
ИмяТипПо умолчанию
idxint—
bonesint[]—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

bones

Ровно четыре индекса костей; подготовьте соответствующие четыре weights.

# SetVertexBones · 2/2
C#
public void SetVertexBones(int idx, ReadOnlySpan<int> bones);

Записывает четыре bone indices vertex record. Требует ровно 4 значения и включает канал. При первом добавлении подготовьте парные bones/weights всех вершин; нормализация не выполняется.

Параметры
ИмяТипПо умолчанию
idxint—
bonesReadOnlySpan<int>—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

bones

Ровно четыре индекса костей; подготовьте соответствующие четыре weights.

SetVertexColorvoid
# SetVertexColor
C#
public void SetVertexColor(int idx, Color color);

Записывает цвет vertex record. Включает канал поверхности; заполните все вершины. Не выполняет автоматическую генерацию согласованных остальных атрибутов.

Параметры
ИмяТипПо умолчанию
idxint—
colorColor—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

color

Vertex color; материал должен использовать этот канал.

SetVertexMetavoid
# SetVertexMeta
C#
public void SetVertexMeta(int idx, Variant meta);

Сохраняет Variant элемента только в tool. Контейнеры Variant не клонируются глубоко; Commit не сохраняет metadata, Clear/новый импорт её удаляет.

Параметры
ИмяТипПо умолчанию
idxint—
metaVariant—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

meta

Variant служебных данных; shared-контейнеры при необходимости копируйте явно.

SetVertexNormalvoid
# SetVertexNormal
C#
public void SetVertexNormal(int idx, Vector3 normal);

Записывает сохранённую нормаль vertex record. Включает канал поверхности; заполните все вершины. Не выполняет автоматическую генерацию согласованных остальных атрибутов.

Параметры
ИмяТипПо умолчанию
idxint—
normalVector3—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

normal

Единичная локальная vertex normal; setter не нормализует её автоматически.

SetVertexTangentvoid
# SetVertexTangent
C#
public void SetVertexTangent(int idx, Plane tangent);

Записывает тангенс в Plane (Normal=xyz, D=handedness) vertex record. Включает канал поверхности; заполните все вершины. Не выполняет автоматическую генерацию согласованных остальных атрибутов.

Параметры
ИмяТипПо умолчанию
idxint—
tangentPlane—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

tangent

Plane: Normal содержит tangent xyz, D — handedness, обычно ±1.

SetVertexUVvoid
# SetVertexUV
C#
public void SetVertexUV(int idx, Vector2 uV);

Записывает первый UV vertex record. Включает канал поверхности; заполните все вершины. Не выполняет автоматическую генерацию согласованных остальных атрибутов.

Параметры
ИмяТипПо умолчанию
idxint—
uVVector2—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

uV

Значение соответствующего UV-канала, не позиция вершины.

SetVertexUV2void
# SetVertexUV2
C#
public void SetVertexUV2(int idx, Vector2 uV2);

Записывает второй UV vertex record. Включает канал поверхности; заполните все вершины. Не выполняет автоматическую генерацию согласованных остальных атрибутов.

Параметры
ИмяТипПо умолчанию
idxint—
uV2Vector2—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

uV2

Значение соответствующего UV-канала, не позиция вершины.

SetVertexWeights2 перегрузки
# SetVertexWeights · 1/2
C#
public void SetVertexWeights(int idx, ReadOnlySpan<float> weights);

Записывает четыре веса vertex record. Требует ровно 4 значения и включает канал. При первом добавлении подготовьте парные bones/weights всех вершин; нормализация не выполняется.

Параметры
ИмяТипПо умолчанию
idxint—
weightsReadOnlySpan<float>—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

weights

Ровно четыре неотрицательных нормализованных веса; автоматической нормализации нет.

# SetVertexWeights · 2/2
C#
public void SetVertexWeights(int idx, float[] weights);

Записывает четыре веса vertex record. Требует ровно 4 значения и включает канал. При первом добавлении подготовьте парные bones/weights всех вершин; нормализация не выполняется.

Параметры
ИмяТипПо умолчанию
idxint—
weightsfloat[]—
idx

Локальный vertex ID: 0 ≤ idx < соответствующего Count. Не ID Entity/ресурса.

weights

Ровно четыре неотрицательных нормализованных веса; автоматической нормализации нет.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.