Mesh

Paket: aspose.threed.entities (aspose-3d-foss 26.1.0)

Mesh menyimpan geometri poligon sebagai daftar titik kontrol (posisi vertex) dan daftar wajah poligon. Setiap wajah poligon adalah daftar indeks berbasis nol ke dalam array titik kontrol. Wajah dapat berupa segitiga, kuad, atau poligon dengan aritas lebih tinggi. Data tambahan per-vertex; normal, koordinat UV, warna vertex; dilampirkan sebagai VertexElement lapisan.

class Mesh(Geometry):

Methods

A3DObjectSceneObjectEntityGeometryMesh


Methods

Bangun mesh segitiga tunggal dari awal:

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

# Create the mesh and add three vertex positions
# IMPORTANT: control_points returns a copy of the internal list.
# Append to _control_points directly — appending to control_points discards the vertex.
# This is a known library limitation; a public mutation API does not yet exist.
mesh = Mesh()
mesh._control_points.append(Vector4(0.0, 0.0, 0.0, 1.0))   # vertex 0
mesh._control_points.append(Vector4(1.0, 0.0, 0.0, 1.0))   # vertex 1
mesh._control_points.append(Vector4(0.5, 1.0, 0.0, 1.0))   # vertex 2

# Define one triangle face using vertex indices
mesh.create_polygon(0, 1, 2)

# Attach to a scene and save
scene = Scene()
scene.root_node.create_child_node("triangle", mesh)
scene.save("triangle.stl")

Bangun mesh kuad dan triangulasi sebelum diekspor:

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

mesh = Mesh()
# Four corners of a unit square in the XZ plane
# Use _control_points to mutate the backing list (control_points returns a copy)
for x, z in [(0, 0), (1, 0), (1, 1), (0, 1)]:
    mesh._control_points.append(Vector4(float(x), 0.0, float(z), 1.0))

# One quad face
mesh.create_polygon(0, 1, 2, 3)
print(f"Polygons before triangulate: {mesh.polygon_count}")  # 1

triangulated = mesh.triangulate()
print(f"Polygons after triangulate: {triangulated.polygon_count}")  # 2

scene = Scene()
scene.root_node.create_child_node("quad", triangulated)
scene.save("quad.glb")

Methods

control_points, polygon_count, polygons, edges, dan vertex_elements semua adalah properti; akses mereka tanpa tanda kurung.

MethodsMethodsMethodsMethods
control_pointslist[Vector4]bacaArray posisi Vertex. Setiap entri adalah sebuah Vector4(x, y, z, w) di mana w adalah 1.0 untuk data posisi. Mengembalikan salinan — jangan menambahkan ke daftar yang dikembalikan. Gunakan mesh._control_points.append(v) untuk menambahkan vertex (batasan yang diketahui; API mutasi publik belum tersedia).
polygon_countintbacaJumlah muka poligon yang didefinisikan pada mesh ini.
polygonslist[list[int]]bacaSemua definisi muka sebagai daftar daftar indeks. Setiap daftar dalam memuat indeks vertex (ke control_points) untuk satu face.
edgeslist[int]bacaData indeks tepi mentah. Utamanya untuk penggunaan internal dan kueri topologi lanjutan.
vertex_elementslist[VertexElement]bacaSemua lapisan elemen vertex yang saat ini terlampir pada mesh ini (normal, UV, warna, dll.).
visibleboolbaca/tulisMethods False, mesh disembunyikan di penampil yang menghormati visibilitas.
cast_shadowsboolbaca/tulisApakah mesh ini memancarkan bayangan di renderer yang mendukung peta bayangan.
receive_shadowsboolbaca/tulisApakah mesh ini menerima bayangan dari geometri lain yang memancarkan bayangan.

Methods

create_polygon(*indices)

Definisikan sebuah face poligon baru dengan memberikan indeks vertex secara berurutan. Indeks tersebut merujuk ke posisi dalam control_points. Menerima tiga atau lebih indeks untuk segitiga, kuad, dan n-gon.

MethodsMethodsMethods
*indicesintArgumen indeks vertex dalam urutan winding (biasanya berlawanan arah jarum jam ketika dilihat dari luar).

Mengembalikan: None

mesh = Mesh()
# ... populate control_points ...
mesh.create_polygon(0, 1, 2)       # triangle
mesh.create_polygon(0, 1, 2, 3)    # quad
print(mesh.polygon_count)          # 2

triangulate()

Kembalikan yang baru Mesh di mana setiap poligon telah dibagi menjadi segitiga menggunakan fan triangulation. Mesh asli tidak dimodifikasi. Berguna sebelum mengekspor ke format yang memerlukan geometri hanya segitiga (seperti STL atau beberapa pipeline glTF).

Mengembalikan: Mesh; sebuah mesh baru yang hanya berisi segitiga.

from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

mesh = Mesh()
# Use _control_points to mutate the backing list (control_points returns a copy)
for v in [(0,0,0), (1,0,0), (1,1,0), (0,1,0)]:
    mesh._control_points.append(Vector4(*v, 1.0))
mesh.create_polygon(0, 1, 2, 3)   # one quad

tri_mesh = mesh.triangulate()
print(tri_mesh.polygon_count)      # 2

to_mesh()

Kembalikan ini Mesh sebagai Mesh instansi. Untuk Mesh objek, ini adalah operasi identitas (mengembalikan self) Geometry kelas dasar untuk menyediakan antarmuka konversi yang seragam saat bekerja dengan Geometry referensi.

Mengembalikan: Mesh

from aspose.threed.entities import Geometry

def ensure_mesh(geom: Geometry):
    return geom.to_mesh()

create_element(element_type, mapping_mode, reference_mode)

Tambahkan baru VertexElement lapisan dengan tipe yang ditentukan ke mesh. Gunakan ini untuk menambahkan normal, tangent, binormal, warna vertex, dan grup smoothing.

MethodsMethodsMethods
element_typeVertexElementTypeJenis data yang disimpan lapisan ini (misalnya,., VertexElementType.NORMAL).
mapping_modeMappingModeBagaimana data dipetakan ke geometri: CONTROL_POINT, POLYGON_VERTEX, POLYGON, dll.
reference_modeReferenceModeBagaimana indeks digunakan: DIRECT atau INDEX_TO_DIRECT.

Mengembalikan: VertexElement

from aspose.threed.entities import Mesh, VertexElementType, MappingMode, ReferenceMode
from aspose.threed.utilities import Vector4

mesh = Mesh()
# Use _control_points to mutate the backing list (control_points returns a copy)
mesh._control_points.append(Vector4(0, 0, 0, 1))
mesh._control_points.append(Vector4(1, 0, 0, 1))
mesh._control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)

normal_element = mesh.create_element(
    VertexElementType.NORMAL,
    MappingMode.CONTROL_POINT,
    ReferenceMode.DIRECT,
)

create_element_uv(uv_mapping, mapping_mode, reference_mode)

Tambahkan lapisan koordinat UV ke mesh. Ini adalah metode yang disarankan untuk melampirkan data koordinat tekstur.

MethodsMethodsMethods
uv_mappingTextureMappingTujuan saluran UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, dll.
mapping_modeMappingModeBagaimana UV memetakan ke elemen geometri.
reference_modeReferenceModeMode pengindeksan: DIRECT atau INDEX_TO_DIRECT.

Mengembalikan: VertexElementUV

from aspose.threed.entities import Mesh, TextureMapping, MappingMode, ReferenceMode

mesh = Mesh()
# ... define control_points and polygons ...
uv_element = mesh.create_element_uv(
    TextureMapping.DIFFUSE,
    MappingMode.POLYGON_VERTEX,
    ReferenceMode.INDEX_TO_DIRECT,
)

Lihat Juga

 Bahasa Indonesia