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

Extrahera tillgångar från 3DS via C#

Bygg dina egna .NET-appar för att extrahera tillgångar från 3DS-filer med hjälp av API:er på serversidan.

Så här extraherar du tillgångar från 3DS-fil med C#

För att extrahera tillgångar från filen 3DS kommer vi att använda

Aspose.3D for .NET

API som är en funktionsrik, kraftfull och lättanvänd API för C#-plattform som ska användas med extraheringstillgångar. Öppen

NuGet

pakethanterare, sök efter Aspose.3D och installera. Du kan också använda följande kommando från Package Manager Console.

Pakethanterarens konsolkommando


PM> Install-Package Aspose.3D

Steg för att extrahera tillgångar från 3DS via C#

Aspose.3D gör det enkelt för utvecklarna att extrahera tillgångar från 3DS-filen med bara några rader kod.

  • Ladda 3DS-filen via konstruktorn för Scene-klassen- Skapa zip-filformatobjekt som utdatafilformat- Skapa arkivklass och hantera extrahera tillgångsklass- Anropa extrahera metoden och spara filen

Systemkrav

Aspose.3D for .NET stöds på alla större operativsystem. Se bara till att du har följande förutsättningar.

  • Microsoft Windows eller ett kompatibelt operativsystem med .NET Framework, .NET Core, Mono- Utvecklingsmiljö som Microsoft Visual Studio- Aspose.3D for .NET refereras till i ditt projekt
 

C#-kod för att extrahera tillgångar från 3DS


//Källfiler som behöver extrahera tillgångar
string file = "template.3ds";
Scene scene = new Scene(file);  

//Utdata är i ett komprimerat filformat och Directory representerar namnet på en befintlig mapp
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Anropa Extract-metoden för att utföra tillgångsextraktionsoperationer
Extract(scene,za,true);

//Callable Extract method, Parametern texture indikerar: om texturen ska extraheras
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Skapa en komprimerad filbearbetningsklass
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;
        }
    }
}

//Skapa en bearbetningsklass för tillgångsutvinning
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);
    }
}
 
  • Om Aspose.3D for .NET API

    Aspose.3D är ett CAD och spelprogram API för att ladda, ändra och konvertera 3D filer. API är en fristående och kräver ingen 3D-modellerings- eller renderingsprogramvara. Man kan enkelt använda API för Discreet3DS, WavefrontOBJ, STL (ASCII, binär), Universal3D, FBX (ASCII, binär), Collada, glTF, PLY, GLB, DirectX och fler format.

    Gratis app för att extrahera tillgångar från 3DS

    Kolla våra livedemos för att Extraktor 3DS med följande förmåner.

      Du behöver inte ladda ner eller ställa in någonting
      Inget behov av att skriva eller kompilera kod
      Ladda bara upp 3DS fil och tryck på knappen "Extrahera".
      Ladda ned filen 3DS från länken om det behövs

    3DS Vad är 3DS filformatet

    En fil med tillägget 3DS representerar 3D Studio (DOS) mesh-filformat som används av Autodesk 3D Studio. Autodesk 3D Studio har funnits på marknaden för 3D filformat sedan 1990-talet och har nu utvecklats till 3D Studio MAX för att arbeta med 3D-modellering, animering och rendering. En 3DS-fil innehåller data för 3D-representation av scener och bilder och är ett av de populära filformaten för 3D-dataimport och -export. Den tar hänsyn till information som kameraplatser, nätdata, ljusinformation, visningsportkonfigurationer, utjämnande gruppdata, bitmappsreferenser och attribut för att skapa hörn och polygoner för att rendera en scen.

    Läs mera

    Annan app som stöds för att extrahera tillgångar från format

    Med hjälp av C# kan man också extrahera tillgångar från många andra filformat inklusive.

    3MF (3D Tillverkningsformat)
    AMF (Additiv tillverkningsformat)
    ASE (2D-animationsfil)
    DAE (Digital Asset Exchange)
    DXF (Drawing Interchange Format)
    DRC (Google Draco)
    FBX (3D Format)
    GLB (3D Fil binär representation)
    GLTF (GL-överföringsformat)
    JT (Jupiter Tessellation-fil)
    OBJ (3D Filformat)
    PLY (Polygon filformat)
    PDF (3D PDF)
    RVM (AVEVA Plant Design Model)
    STL (Utbytbar 3D ytgeometri)
    U3D (Universal 3D)
    VRML (Virtual Reality Modeling Language)
    X (DirectX modellbild)
    USD (Universell scenbeskrivning)
    USDZ (Universal Scen Beskrivning Zip Archive)