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
A3DObject → SceneObject → Entity → Geometry → Mesh
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.
| Methods | Methods | Methods | Methods |
|---|---|---|---|
control_points | list[Vector4] | baca | Array 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_count | int | baca | Jumlah muka poligon yang didefinisikan pada mesh ini. |
polygons | list[list[int]] | baca | Semua definisi muka sebagai daftar daftar indeks. Setiap daftar dalam memuat indeks vertex (ke control_points) untuk satu face. |
edges | list[int] | baca | Data indeks tepi mentah. Utamanya untuk penggunaan internal dan kueri topologi lanjutan. |
vertex_elements | list[VertexElement] | baca | Semua lapisan elemen vertex yang saat ini terlampir pada mesh ini (normal, UV, warna, dll.). |
visible | bool | baca/tulis | Methods False, mesh disembunyikan di penampil yang menghormati visibilitas. |
cast_shadows | bool | baca/tulis | Apakah mesh ini memancarkan bayangan di renderer yang mendukung peta bayangan. |
receive_shadows | bool | baca/tulis | Apakah 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.
| Methods | Methods | Methods |
|---|---|---|
*indices | int | Argumen 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) # 2triangulate()
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) # 2to_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.
| Methods | Methods | Methods |
|---|---|---|
element_type | VertexElementType | Jenis data yang disimpan lapisan ini (misalnya,., VertexElementType.NORMAL). |
mapping_mode | MappingMode | Bagaimana data dipetakan ke geometri: CONTROL_POINT, POLYGON_VERTEX, POLYGON, dll. |
reference_mode | ReferenceMode | Bagaimana 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.
| Methods | Methods | Methods |
|---|---|---|
uv_mapping | TextureMapping | Tujuan saluran UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, dll. |
mapping_mode | MappingMode | Bagaimana UV memetakan ke elemen geometri. |
reference_mode | ReferenceMode | Mode 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,
)