Mesh

חבילה: aspose.threed.entities (aspose-3d-foss 26.1.0)

Mesh מאחסן את גאומטריית הפוליגון כרשימה של נקודות בקרה (מיקומי קודקוד) ורשימה של משטחי פוליגון. כל משטח פוליגון הוא רשימה של אינדקסים מבוססי‑אפס למערך נקודות הבקרה. המשטחים יכולים להיות משולשים, מרובעים, או פוליגונים בעלות אריות גבוהות. נתונים נוספים לכל קודקוד; נורמליות, קואורדינטות UV, צבעי קודקוד; מצורפים כ VertexElement שכבות.

class Mesh(Geometry):

Methods

A3DObjectSceneObjectEntityGeometryMesh


Methods

בנה רשת משולשת יחידה מאפס:

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")

בנה רשת מרובעת וטריאנגולציה אותה לפני הייצוא:

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, ו vertex_elements הן כולן מאפיינים; גישה אליהם ללא סוגריים.

MethodsMethodsMethodsMethods
control_pointslist[Vector4]קריאהמערך מיקומי קודקוד. כל ערך הוא Vector4(x, y, z, w) כאשר w הוא 1.0 לנתוני מיקום. מחזיר עותק — אל תוסיף לרשימה המוחזרת. השתמש ב mesh._control_points.append(v) להוספת קודקודים (מגבלה ידועה; API שינוי ציבורי עדיין אינו זמין).
polygon_countintקראמספר הפאות של הפוליגון המוגדרים ברשת זו.
polygonslist[list[int]]קראכל הגדרות הפאות כרשימה של רשימות אינדקס. כל רשימה פנימית מכילה את אינדקסי הקודקודים (אל control_points) עבור פאה אחת.
edgeslist[int]קריאהנתוני אינדקס קצוות גולמיים. בעיקר לשימוש פנימי ולשאילתות טופולוגיה מתקדמות.
vertex_elementslist[VertexElement]קריאהכל שכבות רכיבי הקודקוד המחוברות כעת לרשת זו (נורמליות, UVs, צבעים, וכו’).
visibleboolקריאה/כתיבהMethods False, הרשת מוסתרת במציגים שמכבדים נראות.
cast_shadowsboolקריאה/כתיבההאם רשת זו מטילה צללים במעבדים התומכים במפות צל.
receive_shadowsboolקריאה/כתיבההאם רשת זו מקבלת צללים מגיאומטריה אחרת המטילה צללים.

Methods

create_polygon(*indices)

הגדר פאה פוליגונלית חדשה על ידי מתן אינדקסי הקודקודים בסדר. האינדקסים מתייחסים למיקומים ב control_points. מקבל שלושה אינדקסים או יותר עבור משולשים, מרובעים ו‑n‑גונים.

MethodsMethodsMethods
*indicesintארגומנטים של אינדקסי קודקוד בסדר רוּפ (בדרך כלל נגד כיוון השעון כאשר נצפים מבחוץ).

מחזיר: 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()

החזר חדש Mesh כאשר כל מצולע חולק למשולשים באמצעות fan triangulation. הרשת המקורית אינה משתנה. שימושי לפני יצוא לפורמטים הדורשים גאומטריה של משולשים בלבד (כגון STL או כמה צינורות glTF).

מחזיר: Mesh; רשת חדשה המכילה רק משולשים.

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()

החזר זאת Mesh כ Mesh מופע. עבור Mesh באובייקטים זהו פעולה זהות (מחזירה self). מוגדר ב Geometry מחלקת הבסיס כדי לספק ממשק המרה אחיד בעת עבודה עם Geometry הפניות.

מחזיר: Mesh

from aspose.threed.entities import Geometry

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

create_element(element_type, mapping_mode, reference_mode)

הוסף חדש VertexElement שכבה מהסוג המוגדר לרשת. השתמש בזה כדי לצרף נורמליות, טנגנטים, בינורמליות, צבעי קודקוד, וקבוצות החלקה.

MethodsMethodsMethods
element_typeVertexElementTypeסוג הנתונים שהשכבה הזו מחזיקה (למשל,., VertexElementType.NORMAL).
mapping_modeMappingModeכיצד הנתונים ממופים לגאומטריה: CONTROL_POINT, POLYGON_VERTEX, POLYGON, וכו'.
reference_modeReferenceModeכיצד אינדקסים משמשים: DIRECT או INDEX_TO_DIRECT.

מחזיר: 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)

הוסף שכבת קואורדינטות UV למשטח. זוהי השיטה המועדפת לצרף נתוני קואורדינטות מרקם.

MethodsMethodsMethods
uv_mappingTextureMappingמטרת ערוץ UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, וכו'.
mapping_modeMappingModeאיך UVs ממפים אל רכיבי הגאומטריה.
reference_modeReferenceModeמצב אינדוקס: DIRECT או INDEX_TO_DIRECT.

מחזיר: 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,
)

ראה גם

 עברית