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

Ekstrak Aset dari 3DS melalui C#

Bangun .NET aplikasi Anda sendiri untuk Mengekstrak Aset dari 3DS file menggunakan API sisi server.

Cara Mengekstrak Aset dari 3DS Berkas Menggunakan C#

Untuk mengekstrak aset dari file 3DS, kami akan menggunakan

Aspose.3D for .NET

API yang kaya fitur, canggih, dan mudah digunakan API untuk C# platform yang akan digunakan dengan aset ekstrak. Membuka

NuGet

manajer paket, cari {/0}Aspose.3D* dan menginstal. Anda juga dapat menggunakan perintah berikut dari Package Manager Console.

Perintah Konsol Manajer Paket


PM> Install-Package Aspose.3D

Langkah-langkah untuk Mengekstrak Aset dari 3DS melalui C#

Aspose.3D memudahkan pengembang untuk mengekstrak aset dari file 3DS hanya dengan beberapa baris kode.

  • Muat file 3DS melalui konstruktor kelas Scene- Buat objek format file zip sebagai format file output- Buat kelas arsip dan tangani ekstrak kelas aset- Panggil metode Ekstrak dan simpan file

Persyaratan sistem

Aspose.3D for .NET didukung di semua sistem operasi utama. Pastikan saja Anda memiliki prasyarat berikut.

  • Microsoft Windows atau OS yang kompatibel dengan .NET Framework, .NET Core, Mono- Lingkungan pengembangan seperti Microsoft Visual Studio- Aspose.3D for .NET dirujuk dalam proyek Anda
 

C# kode untuk Mengekstrak Aset dari 3DS


//File sumber yang perlu mengekstrak aset
string file = "template.3ds";
Scene scene = new Scene(file);  

//Outputnya dalam format file terkompresi, dan Direktori mewakili nama folder yang ada
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Panggil metode Ekstrak untuk melakukan operasi ekstraksi aset
Extract(scene,za,true);

//Metode Ekstrak yang Dapat Dipanggil, Tekstur parameter menunjukkan: apakah akan mengekstrak tekstur
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Buat kelas pemrosesan file terkompresi
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;
        }
    }
}

//Buat kelas pemrosesan ekstraksi aset
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);
    }
}
 
  • Tentang Aspose.3D for .NET API

    Aspose.3D adalah CAD dan Gameware API untuk memuat, memodifikasi, dan mengonversi file 3D. API berdiri sendiri dan tidak memerlukan perangkat lunak pemodelan atau rendering 3D apa pun. Seseorang dapat dengan mudah menggunakan API untuk Discreet3DS, WavefrontOBJ, STL (ASCII, Binary), Universal3D, FBX (ASCII, Binary), Collada, glTF, PLY, GLB, DirectX, dan format lainnya.

    Aplikasi Gratis untuk Mengekstrak Aset dari 3DS

    Periksa demo langsung kami untuk Ekstraktor 3DS dengan manfaat sebagai berikut.

      Tidak perlu mengunduh atau mengatur apa pun
      Tidak perlu menulis atau mengkompilasi kode
      Cukup unggah file 3DS dan tekan tombol "Ekstrak"
      Unduh file 3DS dari tautan, jika diperlukan

    3DS Apa itu Format File 3DS

    File dengan ekstensi 3DS mewakili format file mesh 3D Studio (DOS) yang digunakan oleh Autodesk 3D Studio. Autodesk 3D Studio telah berada di pasar format file 3D sejak 1990-an dan kini telah berkembang menjadi 3D Studio MAX untuk bekerja dengan 3D pemodelan, animasi, dan rendering. File 3DS berisi data untuk 3D representasi adegan dan gambar dan merupakan salah satu format file populer untuk 3D impor dan ekspor data. Ini mempertimbangkan informasi seperti lokasi kamera, data Mesh, informasi pencahayaan, konfigurasi viewport, menghaluskan data grup, referensi dan atribut bitmap untuk membuat simpul dan poligon untuk merender pemandangan.

    Baca lebih lanjut

    Aplikasi Lain yang Didukung untuk Mengekstrak Aset dari Format

    Menggunakan C#, One juga dapat mengekstrak aset dari banyak format file lain termasuk.

    3MF (3D Format Manufaktur)
    AMF (Format Manufaktur Aditif)
    ASE (File Animasi 2D)
    DAE (Pertukaran Aset Digital)
    DXF (Menggambar Format Pertukaran)
    DRC (Google Draco)
    FBX (3D Format)
    GLB (3D Representasi Biner File)
    GLTF (Format Transmisi GL)
    JT (File Tesselasi Jupiter)
    OBJ (3D Format Berkas)
    PLY (Format File Poligon)
    PDF (3D PDF)
    RVM (Model Desain Tanaman AVEVA)
    STL (3D Geometri Permukaan yang Dapat Dipertukarkan)
    U3D (Universal 3D)
    VRML (Bahasa Pemodelan Realitas Virtual)
    x (Gambar Model DirectX)
    USD (Deskripsi Pemandangan Universal)
    USDZ (Arsip Zip Deskripsi Pemandangan Universal)