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

Trích xuất Nội dung từ U3D qua C#

Tạo .NET ứng dụng của riêng bạn để Trích xuất Nội dung từ U3D tệp bằng cách sử dụng API phía máy chủ.

Cách Trích xuất Nội dung từ U3D Tệp Sử dụng C#

Để trích xuất nội dung từ tệp U3D, chúng tôi sẽ sử dụng

Aspose.3D for .NET

API là một nền tảng API dành cho C# giàu tính năng, mạnh mẽ và dễ sử dụng được sử dụng với các nội dung trích xuất. Mở

NuGet

quản lý gói, tìm kiếm ** Aspose.3D ** và cài đặt. Bạn cũng có thể sử dụng lệnh sau từ Bảng điều khiển Trình quản lý Gói.

Lệnh Bảng điều khiển Trình quản lý Gói


PM> Install-Package Aspose.3D

Các bước để Trích xuất Nội dung từ U3D qua C#

Aspose.3D giúp các nhà phát triển dễ dàng trích xuất nội dung từ tệp U3D chỉ với vài dòng mã.

  • Tải tệp U3D qua hàm tạo của lớp Scene- Tạo đối tượng định dạng tệp zip làm định dạng tệp đầu ra- Tạo lớp lưu trữ và xử lý lớp tài sản trích xuất- Gọi phương thức Giải nén và lưu tệp

yêu cầu hệ thống

Aspose.3D for .NET được hỗ trợ trên tất cả các hệ điều hành chính. Chỉ cần đảm bảo rằng bạn có các điều kiện tiên quyết sau.

  • Microsoft Windows hoặc hệ điều hành tương thích với .NET Framework, .NET Core, Mono- Môi trường phát triển như Microsoft Visual Studio- Aspose.3D for .NET được tham chiếu trong dự án của bạn
 

C# mã để Trích xuất Nội dung từ U3D


//Tệp nguồn cần trích xuất nội dung
string file = "template.u3d";
Scene scene = new Scene(file);  

//Đầu ra ở định dạng tệp nén và Thư mục đại diện cho tên của một thư mục hiện có
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Gọi phương thức Trích xuất để thực hiện các hoạt động trích xuất tài sản
Extract(scene,za,true);

//Phương thức Trích xuất có thể gọi, Kết cấu tham số cho biết: có trích xuất kết cấu hay không
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Tạo một lớp xử lý tệp nén
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;
        }
    }
}

//Tạo một lớp xử lý trích xuất nội dung
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);
    }
}
 
  • Giới thiệu về Aspose.3D for .NET API

    Aspose.3D là một CAD và Phần mềm trò chơi API để tải, sửa đổi và chuyển đổi 3D tệp. API là một phần mềm độc lập và không yêu cầu bất kỳ 3D phần mềm kết xuất hoặc mô hình hóa nào. Người ta có thể dễ dàng sử dụng API cho Discreet3DS, WavefrontOBJ, STL (ASCII, Binary), Universal3D, FBX (ASCII, Binary), Collada, glTF, PLY, GLB, DirectX và các định dạng khác.

    Ứng dụng miễn phí để trích xuất tài sản từ U3D

    Kiểm tra các bản trình diễn trực tiếp của chúng tôi để Bộ giải nén U3D với những lợi ích sau đây.

      Không cần tải xuống hoặc thiết lập bất cứ thứ gì
      Không cần viết hoặc biên dịch mã
      Chỉ cần tải tệp U3D lên và nhấn nút "Giải nén"
      Tải xuống tệp U3D từ liên kết, nếu cần

    U3D Những gì là U3D Tập Tin Định Dạng

    U3D (Universal 3D) là định dạng tệp nén và cấu trúc dữ liệu cho 3D đồ họa máy tính. Nó chứa thông tin mô hình 3D chẳng hạn như lưới tam giác, ánh sáng, bóng đổ, dữ liệu chuyển động, đường và điểm có màu sắc và cấu trúc. Định dạng này đã được chấp nhận là tiêu chuẩn ECMA-363 vào tháng 8 năm 2005. 3D PDF tài liệu hỗ trợ U3D nhúng đối tượng và có thể xem được trong Adobe Reader (phiên bản 7 trở đi).

    Đọc Thêm

    Ứng dụng được hỗ trợ khác để trích xuất tài sản từ các định dạng

    Sử dụng C#, Người ta cũng có thể trích xuất nội dung từ nhiều định dạng tệp khác bao gồm.

    3MF (3D Định dạng Sản xuất)
    AMF (Định dạng sản xuất phụ gia)
    ASE (Tệp hoạt hình 2D)
    DAE (Trao đổi tài sản kỹ thuật số)
    DXF (Vẽ định dạng trao đổi)
    DRC (Google Draco)
    FBX (3D Định dạng)
    GLB (3D Biểu diễn tệp nhị phân)
    GLTF (Định dạng truyền dẫn GL)
    JT (Tệp sao Mộc Tessellation)
    OBJ (3D Định dạng Tệp)
    PLY (Định dạng tệp đa giác)
    PDF (3D PDF)
    RVM (Mô hình thiết kế nhà máy AVEVA)
    STL (Hình học bề mặt 3D có thể hoán đổi cho nhau)
    3DS (3D Định dạng tệp lưới Studio)
    VRML (Ngôn ngữ tạo mô hình thực tế ảo)
    X (Hình ảnh mô hình DirectX)
    USD (Mô tả cảnh toàn cảnh)
    USDZ (Kho lưu trữ Zip mô tả cảnh phổ biến)