split merge mesh

Du kan dela upp alla maskor i en 3D-scen i flera undernät. På samma sätt kan du slå samman flera mesh till ett enda nät programmatiskt med C#. Den här artikeln täcker uppdelning och sammanslagning av 3D-nät i olika scenarier:

3D Scene Meshes Splitter eller Merger – C# API Installation

Aspose.3D for .NET API kan användas för att dela eller slå samman 3D-nätverk programmatiskt med C#. Du kan konfigurera API:et genom att installera det från avsnittet Nedladdningar eller med installationskommandot nedan för NuGet:

PM> Install-Package Aspose.3D

Dela maskor av en scen per material Programmatiskt med C#

En 3D-fil som FBX-formatet kan innehålla flera maskor av en scen. Du kan dela upp alla maskor i flera submaskor per material om maskan inte har tilldelats ett enda material. Följ stegen nedan för att dela upp maskor av en scen per material:

  1. Ladda in 3D-fil.
  2. Dela alla maskor med metoden SplitMesh.
  3. Spara utdatafilen med de delade maskorna.

Följande kod visar hur man delar maskor av en scen per material programmatiskt med C#:

// Ladda indata FBX 3D-fil
Scene scene = new Scene("test.fbx");

// Dela alla maskor
PolygonModifier.SplitMesh(scene, SplitMeshPolicy.CloneData);

// Spara utdatafil med delade maskor
scene.Save("test-splitted.fbx", FileFormat.FBX7500ASCII);

Dela ett nät efter ett specifikt material Programmatiskt med C#

Du kan dela ett nät genom att manuellt ange materialet. På så sätt kan du skapa flera objekt som bara innehåller ett material. För demonstrationsändamål skapar koden nedan ett nät av en låda med 6 plan. Sedan kommer du att dela ett primitivt nät genom att manuellt specificera materialet med följande steg:

  1. Skapa ett nät av en låda med sex plan.
  2. För det andra, skapa ett materialelement och ange index för varje plan.
  3. Dela mesh med SplitMeshPolicy uppräkning.

Koden nedan förklarar hur man delar ett nät efter specifikt material programmatiskt med C#:

// Skapa ett nät av låda (En låda består av 6 plan)
Mesh box = (new Box()).ToMesh();

// Skapa ett materialelement på detta nät
VertexElementMaterial mat = (VertexElementMaterial)box.CreateElement(VertexElementType.Material, MappingMode.Polygon, ReferenceMode.Index);

// Och ange olika materialindex för varje plan
mat.Indices.AddRange(new int[] { 0, 1, 2, 3, 4, 5 });

// Dela nu upp det i 6 undermaskor, vi specificerade 6 olika material på varje plan, varje plan kommer att bli ett undernät.
// Vi använde CloneData-policyn, varje plan kommer att ha samma kontrollpunktsinformation eller kontrollpunktsbaserad vertexelementinformation.
Mesh[] planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CloneData);

mat.Indices.Clear();
mat.Indices.AddRange(new int[] { 0, 0, 0, 1, 1, 1 });

// Dela upp det nu i 2 undermaskor, det första nätet kommer att innehålla 0/1/2 plan, och det andra nätet kommer att innehålla det 3/4/5:e planet.
// Vi använde CompactData-policyn, varje plan kommer att ha sin egen kontrollpunktsinformation eller kontrollpunktsbaserad vertexelementinformation.
planes = PolygonModifier.SplitMesh(box, SplitMeshPolicy.CompactData);

Slå samman nät i en 3D-fil till ett enda nät Programmatically i C#

Du kan slå samman olika mesh till ett enda giltigt mesh med stegen nedan:

  1. Ladda ingångs 3D-scenfil.
  2. Slå samman alla maskor.
  3. Koda slutligen det sammanslagna nätet.

Följande kod utvecklar hur man sammanfogar mesh till ett enda mesh programmässigt med C#:

// Ladda ingångs 3D-scenen
Scene scene = new Scene("LAD-TOP.rvm");

// Slå samman alla maskor
Mesh mesh = PolygonModifier.MergeMesh(scene);

// Koda in detta nät i PLY-formatet
FileFormat.PLY.Encode(mesh, "LAD-TOP.ply");

Få gratis tillfällig licens

Du kan få en Free Evaluation License för att testa API:et utan några begränsningar.

Slutsats

Sammanfattningsvis har du lärt dig hur man slår samman eller delar ett nät av en 3D-scen. API:t avslöjar olika metoder för att dela eller slå samman en eller flera maskor, som du kan använda enligt dina krav. Dessutom är du välkommen att besöka Dokumentationen där flera andra funktioner också förklaras. Kontakta oss på Free Support Forum om du har några frågor.

Se även