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

C#を介してPLYからアセットを抽出します

サーバー側APIを使用してPLYファイルからアセットを抽出する独自の.NETアプリを作成します。

C#を使用してPLYファイルからアセットを抽出する方法

PLYファイルからアセットを抽出するために、

Aspose.3D for .NET

APIは、機能が豊富で強力で使いやすいAPIforC#プラットフォームで抽出アセットで使用されます。開ける

NuGet

パッケージマネージャー、検索 ** Aspose.3D ** とインストールします。パッケージマネージャーコンソールから次のコマンドを使用することもできます。

パッケージマネージャーコンソールコマンド


PM> Install-Package Aspose.3D

PLYからC#を介してアセットを抽出する手順

Aspose.3Dを使用すると、開発者は数行のコードでPLYファイルからアセットを簡単に抽出できます。

  • Sceneクラスのコンストラクターを介してPLYファイルをロードします- zipファイル形式オブジェクトを出力ファイル形式として作成します- アーカイブクラスを作成し、アセットクラスの抽出を処理します- Extractメソッドを呼び出して、ファイルを保存します

システム要求

Aspose.3D for .NETは、すべての主要なオペレーティングシステムでサポートされています。次の前提条件があることを確認してください。

  • Microsoft Windowsまたは.NETフレームワーク、.NETコア、Monoと互換性のあるOS- MicrosoftVisualStudioのような開発環境- プロジェクトで参照されているAspose.3Dfor .NET
 

PLYからアセットを抽出するためのC#コード


//アセットを抽出する必要があるソースファイル
string file = "template.ply";
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);

//呼び出し可能なExtractメソッド、パラメータtextureは、テクスチャを抽出するかどうかを示します
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.3Dfor .NETAPI

    Aspose.3Dは、3Dファイルをロード、変更、変換するためのCADおよびゲームウェアAPIです。 APIはスタンドアロンであり、3Dモデリングまたはレンダリングソフトウェアを必要としません。 Discreet3DS、WavefrontOBJ、STL(ASCII、バイナリ)、Universal3D、FBX(ASCII、バイナリ)、Collada、glTF、PLY、 GLB、DirectXおよびその他の形式。

    PLYからアセットを抽出する無料アプリ

    ライブデモをチェックして エクストラクタPLY 以下の利点があります。

      何かをダウンロードしたりセットアップしたりする必要はありません
      コードを書いたりコンパイルしたりする必要はありません
      PLYファイルをアップロードして[抽出]ボタンを押すだけです
      必要に応じて、リンクからPLYファイルをダウンロードします

    PLY PLY ファイル形式とは

    PLY、ポリゴンファイル形式は、ポリゴンのコレクションとして記述されたグラフィカルオブジェクトを格納する3Dファイル形式を表します。このファイル形式の目的は、幅広いモデルに役立つほど一般的な、シンプルで簡単なファイルタイプを確立することでした。 PLYファイル形式はASCIIとバイナリ形式で提供され、コンパクトなストレージと迅速な保存と読み込みが可能です。

    続きを読む

    フォーマットからアセットを抽出するためにサポートされているその他のアプリ

    C#を使用すると、を含む他の多くのファイル形式からアセットを抽出することもできます。

    3MF (3D製造フォーマット)
    AMF (アディティブマニュファクチャリングフォーマット)
    ASE (2Dアニメーションファイル)
    DAE (デジタル資産交換)
    DXF (図面交換フォーマット)
    DRC (Google Draco)
    FBX (3D形式)
    GLB (3Dファイルのバイナリ表現)
    GLTF (GL伝送フォーマット)
    JT (木星テッセレーションファイル)
    OBJ (3Dファイル形式)
    3DS (3Dスタジオメッシュファイル形式)
    PDF (3D PDF)
    RVM (AVEVAプラント設計モデル)
    STL (交換可能な3D表面形状)
    U3D (Universal 3D)
    VRML (仮想現実モデリング言語)
    バツ (DirectXモデルイメージ)
    USD (ユニバーサルシーンの説明)
    USDZ (ユニバーサルシーンの説明Zipアーカイブ)