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

διαχειριστής πακέτων, αναζητήστε Aspose.3D και εγκαταστήστε. Μπορείτε επίσης να χρησιμοποιήσετε την ακόλουθη εντολή από την Κονσόλα Package Manager.

Εντολή κονσόλας διαχείρισης πακέτων


PM> Install-Package Aspose.3D

Βήματα για την εξαγωγή στοιχείων από το 3MF μέσω του C#

Το Aspose.3D διευκολύνει τους προγραμματιστές να εξαγάγουν στοιχεία από το αρχείο 3MF με λίγες μόνο γραμμές κώδικα.

  • Φόρτωση αρχείου 3MF μέσω του κατασκευαστή της κλάσης Scene- Δημιουργήστε αντικείμενο μορφής αρχείου 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);  

//Η έξοδος είναι σε μορφή συμπιεσμένου αρχείου και ο Κατάλογος αντιπροσωπεύει το όνομα ενός υπάρχοντος φακέλου
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Καλέστε τη μέθοδο Extract για να εκτελέσετε λειτουργίες εξαγωγής περιουσιακών στοιχείων
Extract(scene,za,true);

//Καλούμενη μέθοδος εξαγωγής, Η υφή της παραμέτρου υποδεικνύει: εάν θα εξαχθεί η υφή
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 Manufacturing Format, χρησιμοποιείται από εφαρμογές για την απόδοση μοντέλων αντικειμένων 3D σε διάφορες άλλες εφαρμογές, πλατφόρμες, υπηρεσίες και εκτυπωτές. Κατασκευάστηκε για να αποφεύγονται οι περιορισμοί και τα προβλήματα σε άλλες μορφές αρχείων 3D, όπως το STL, για εργασία με τις πιο πρόσφατες εκδόσεις των εκτυπωτών 3D. Το 3MF είναι μια σχετικά νέα μορφή αρχείου που έχει αναπτυχθεί και δημοσιευτεί από την κοινοπραξία 3MF.

    Διαβάστε Περισσότερα

    Άλλη υποστηριζόμενη εφαρμογή για εξαγωγή στοιχείων από μορφές

    Χρησιμοποιώντας το C#, κάποιος μπορεί επίσης να εξαγάγει στοιχεία από πολλές άλλες μορφές αρχείων, όπως.

    3DS (3D Μορφή αρχείου Mesh Studio)
    AMF (Μορφή κατασκευής πρόσθετων)
    ASE (Αρχείο 2D Animation)
    DAE (Ανταλλαγή ψηφιακών περιουσιακών στοιχείων)
    DXF (Μορφή ανταλλαγής σχεδίου)
    DRC (Google Draco)
    FBX (3D Μορφή)
    GLB (3D Δυαδική αναπαράσταση αρχείου)
    GLTF (Μορφή μετάδοσης GL)
    JT (Αρχείο Jupiter Tessellation)
    OBJ (3D Μορφή αρχείου)
    PLY (Μορφή αρχείου Polygon)
    PDF (3D PDF)
    RVM (Μοντέλο σχεδίασης φυτών AVEVA)
    STL (Εναλλάξιμη Γεωμετρία Επιφανειών 3D)
    U3D (Universal 3D)
    VRML (Γλώσσα μοντελοποίησης εικονικής πραγματικότητας)
    Χ (Εικόνα μοντέλου DirectX)
    USD (Περιγραφή Universal Σκηνής)
    USDZ (Γενική Περιγραφή Σκηνής Zip Archive)