HTML JPG PDF XML 3MF
Aspose.3D  for .NET
3MF

แยกเนื้อหาจาก 3MF ผ่าน C#

สร้างแอป .NET ของคุณเองเพื่อแยกเนื้อหาจากไฟล์ 3MF โดยใช้ API ฝั่งเซิร์ฟเวอร์

วิธีแยกเนื้อหาจาก 3MF ไฟล์โดยใช้ C#

ในการแยกเนื้อหาจากไฟล์ 3MF เราจะใช้

Aspose.3D for .NET

API ซึ่งมีคุณลักษณะหลากหลาย มีประสิทธิภาพ และใช้งานง่าย API สำหรับแพลตฟอร์ม C# ที่จะใช้กับเนื้อหาที่แยกออกมา เปิด

NuGet

package manager ค้นหา Aspose.3D และติดตั้ง คุณยังสามารถใช้คำสั่งต่อไปนี้จาก Package Manager Console

คำสั่งคอนโซลตัวจัดการแพ็คเกจ


PM> Install-Package Aspose.3D

ขั้นตอนในการแยกเนื้อหาจาก 3MF ผ่าน C#

Aspose.3D ทำให้นักพัฒนาสามารถดึงเนื้อหาจากไฟล์ 3MF ได้อย่างง่ายดายด้วยโค้ดเพียงไม่กี่บรรทัด

  • โหลดไฟล์ 3MF ผ่านตัวสร้างของ Scene class- สร้างวัตถุรูปแบบไฟล์ zip เป็นรูปแบบไฟล์เอาต์พุต- สร้างคลาสเก็บถาวรและจัดการแยกคลาสสินทรัพย์- เรียกวิธีการแยกและบันทึกไฟล์

ความต้องการของระบบ

Aspose.3D for .NET ได้รับการสนับสนุนในระบบปฏิบัติการหลักทั้งหมด เพียงตรวจสอบให้แน่ใจว่าคุณมีข้อกำหนดเบื้องต้นดังต่อไปนี้

  • Microsoft Windows หรือระบบปฏิบัติการที่เข้ากันได้กับ .NET Framework, .NET Core, Mono- สภาพแวดล้อมการพัฒนาเช่น Microsoft Visual Studio- Aspose.3D for .NET อ้างอิงในโครงการของคุณ
 

รหัส C# เพื่อแยกเนื้อหาจาก 3MF


//ไฟล์ต้นทางที่ต้องการแยกเนื้อหา
string file = "template.3mf";
Scene scene = new Scene(file);  

//ผลลัพธ์อยู่ในรูปแบบไฟล์บีบอัด และ Directory แทนชื่อของโฟลเดอร์ที่มีอยู่
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//เรียกวิธีการแยกเพื่อดำเนินการแยกสินทรัพย์
Extract(scene,za,true);

//วิธี Callable Extract, พื้นผิวพารามิเตอร์ระบุว่า: จะแยกพื้นผิวหรือไม่
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//สร้างคลาสการประมวลผลไฟล์บีบอัด
class Zip : IDisposable
{
    private ZipArchive archive;
    private HashSet<string> entries = new HashSet<string>();

    public Zip(Stream stream)
    {
        archive = new ZipArchive(stream, ZipArchiveMode.Create);
    }
    public void Dispose()
    {
        archive.Dispose();
    }

    public void Add(string fileName, byte[] content, bool enableCompression)
    {
        var entryName = PickName(fileName);
        var compressionLevel = enableCompression ? CompressionLevel.Fastest : CompressionLevel.NoCompression;
        var entry = archive.CreateEntry(entryName, compressionLevel);
        using var stream = entry.Open();
        stream.Write(content, 0, content.Length);
    }
    
    private string PickName(string fileName)
    {
        if (!entries.Contains(fileName))
        {
            entries.Add(fileName);
            return fileName;
        }
        var baseName = Path.GetFileNameWithoutExtension(fileName);
        var ext = Path.GetExtension(fileName);
        for (var idx = 2; ; idx++)
        {
            var newName = baseName + "_" + idx;
            if (!string.IsNullOrEmpty(ext))
                newName += ext;
            if (entries.Contains(newName))
                continue;
            entries.Add(newName);
            return newName;
        }
    }
}

//สร้างคลาสการประมวลผลการแยกสินทรัพย์
class Extractor
{
    private Zip zip;
    private bool texture;
    HashSet<A3DObject> visited = new HashSet<A3DObject>();
    public Extractor(Zip zip,bool texture)
    {
        this.zip = zip;
        this.texture = texture;
    }

    private bool CanVisit(A3DObject obj)
    {
        if (visited.Contains(obj))
            return false;
        visited.Add(obj);
        return true;
    }
    public void Extract(Scene scene)
    {
        if (scene.Library != null && scene.Library.Count > 0)
        {
            foreach (var obj in scene.Library)
            {
                Visit(obj);
            }
        }
        VisitNode(scene.RootNode);
    }
    private void VisitNode(Node node)
    {
        if (!CanVisit(node))
            return;
        if (texture)
        {
            foreach (var mat in node.Materials)
            {
                VisitMaterial(mat);
            }
        }

        foreach (var entity in node.Entities)
        {
            if (entity is Mesh)
                Save((Mesh)entity, node.Name);
        }
        
        foreach (var child in node.ChildNodes)
        {
            VisitNode(child);
        }
    }
    private void VisitMaterial(Material mat)
    {
        if (!CanVisit(mat))
            return;
        if (!texture)
            return;
        foreach (var tslot in mat)
        {
            if (tslot.Texture is Texture)
            {
                Save((Texture)tslot.Texture);
            }
        }
    }
    private void Visit(A3DObject obj)
    {
        if (texture && obj is Texture)
        {
            Save((Texture)obj);
        }
        else if (obj is Mesh)
        {
            Save((Mesh)obj, null);
        }
        else if (obj is Node)
        {
            VisitNode((Node)obj);
        }
    }
    private void Save(Mesh mesh, string? nodeName)
    {
        if (!CanVisit(mesh))
            return;
        Scene scene = new Scene(mesh);
        using (var ms = new MemoryStream())
        {
            scene.Save(ms, FileFormat.FBX7400ASCII);
            var name = nodeName;
            if (string.IsNullOrEmpty(name))
                name = mesh.Name;
            if (string.IsNullOrEmpty(name))
                name = "mesh";
            var ext = ".fbx";
            zip.Add(name + ext, ms.ToArray(), true);
        }
    }
    private void Save(Texture tex)
    {
        if (tex.Content == null || !CanVisit(tex))
            return;
        var fileName = tex.FileName != null ? Path.GetFileName(tex.FileName) : null;
        zip.Add(fileName, tex.Content, false);
    }
}
 
  • เกี่ยวกับ Aspose.3D for .NET API

    Aspose.3D เป็น CAD และ Gameware API ในการโหลด แก้ไข และแปลงไฟล์ 3D API เป็นแบบสแตนด์อโลนและไม่จำเป็นต้องมี 3D ซอฟต์แวร์สร้างแบบจำลองหรือเรนเดอร์ใดๆ สามารถใช้ API สำหรับ Discreet3DS, WavefrontOBJ, STL (ASCII, Binary), Universal3D, FBX (ASCII, Binary), Collada, glTF, PLY, GLB, DirectX และรูปแบบอื่นๆ

    แอปฟรีเพื่อแยกเนื้อหาจาก 3MF

    ตรวจสอบการสาธิตสดของเราที่ ตัวแยก 3MF พร้อมสิทธิประโยชน์ดังต่อไปนี้

      ไม่จำเป็นต้องดาวน์โหลดหรือตั้งค่าอะไรเลย
      ไม่ต้องเขียนหรือคอมไพล์โค้ด
      เพียงอัปโหลดไฟล์ 3MF แล้วกดปุ่ม "แยก"
      ดาวน์โหลดไฟล์ 3MF จากลิงก์ ถ้าจำเป็น

    3MF 3MF รูปแบบไฟล์คืออะไร

    3MF, 3D รูปแบบการผลิต ถูกใช้โดยแอปพลิเคชันเพื่อแสดงโมเดลอ็อบเจ็กต์ 3D ให้กับแอปพลิเคชัน แพลตฟอร์ม บริการ และเครื่องพิมพ์อื่นๆ ที่หลากหลาย สร้างขึ้นเพื่อหลีกเลี่ยงข้อจำกัดและปัญหาในรูปแบบไฟล์ 3D อื่นๆ เช่น STL สำหรับการทำงานกับเครื่องพิมพ์ 3D เวอร์ชันล่าสุด 3MF ค่อนข้างเป็นรูปแบบไฟล์ใหม่ที่ได้รับการพัฒนาและเผยแพร่โดยกลุ่ม 3MF

    อ่านเพิ่มเติม

    แอพที่รองรับอื่น ๆ เพื่อแยกเนื้อหาจากรูปแบบ

    การใช้ C# จะทำให้ One สามารถดึงเนื้อหาจากรูปแบบไฟล์อื่นๆ ได้มากมายรวมถึง

    3DS (3D รูปแบบไฟล์ Studio Mesh)
    AMF (รูปแบบการผลิตสารเติมแต่ง)
    ASE (ไฟล์ภาพเคลื่อนไหว 2 มิติ)
    DAE (การแลกเปลี่ยนสินทรัพย์ดิจิทัล)
    DXF (วาดรูปแบบการแลกเปลี่ยน)
    DRC (Google Draco)
    FBX (3D รูปแบบ)
    GLB (3D ไฟล์ตัวแทนไบนารี)
    GLTF (รูปแบบการส่ง GL)
    JT (ไฟล์ Tessellation ของดาวพฤหัสบดี)
    OBJ (3D รูปแบบไฟล์)
    PLY (รูปแบบไฟล์รูปหลายเหลี่ยม)
    PDF (3D PDF)
    RVM (โมเดลการออกแบบโรงงาน AVEVA)
    STL (เปลี่ยนได้ 3D เรขาคณิตพื้นผิว)
    U3D (Universal 3D)
    VRML (ภาษาการสร้างแบบจำลองความเป็นจริงเสมือน)
    X (ภาพโมเดล DirectX)
    USD (คำอธิบายฉากสากล)
    USDZ (คำอธิบายฉากสากล Zip Archive)