diff --git a/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/HelixPanel.xaml.cs b/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/HelixPanel.xaml.cs
index d22a050..28001a0 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/HelixPanel.xaml.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/HelixPanel.xaml.cs
@@ -15,7 +15,9 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+using Assimp;
using HelixToolkit.Wpf;
+using System;
using System.Linq;
using System.Windows.Controls;
using System.Windows.Media;
@@ -25,7 +27,7 @@ namespace QuickLook.Plugin.HelixViewer;
public partial class HelixPanel : UserControl
{
- private string _path;
+ private readonly string _path;
public HelixPanel(string path) : this()
{
@@ -40,16 +42,40 @@ public partial class HelixPanel : UserControl
private void Load()
{
- var modelImporter = new ModelImporter();
- var model3DGroup = modelImporter.Load(_path);
- var diffuseMaterial = new DiffuseMaterial(new SolidColorBrush(Color.FromRgb(0xA0, 0xA0, 0xA0)));
-
- foreach (GeometryModel3D child in model3DGroup.Children.Cast())
+ if (_path.EndsWith(".fbx", StringComparison.OrdinalIgnoreCase))
{
- child.Material = diffuseMaterial;
- child.BackMaterial = diffuseMaterial;
- }
+ var context = new AssimpContext();
+ var scene = context.ImportFile(_path, PostProcessSteps.Triangulate);
- modelVisual.Content = model3DGroup;
+ foreach (var mesh in scene.Meshes)
+ {
+ var geometry = new MeshGeometry3D()
+ {
+ Positions = [.. mesh.Vertices.Select(v => new Point3D(v.X, v.Y, v.Z))],
+ TriangleIndices = [.. mesh.GetIndices()],
+ };
+ var model = new GeometryModel3D()
+ {
+ Geometry = geometry,
+ Material = Materials.Gray,
+ };
+
+ modelVisual.Content = model;
+ }
+ }
+ else
+ {
+ var modelImporter = new ModelImporter();
+ var model3DGroup = modelImporter.Load(_path);
+ var diffuseMaterial = new DiffuseMaterial(new SolidColorBrush(Color.FromRgb(0xA0, 0xA0, 0xA0)));
+
+ foreach (GeometryModel3D child in model3DGroup.Children.Cast())
+ {
+ child.Material = diffuseMaterial;
+ child.BackMaterial = diffuseMaterial;
+ }
+
+ modelVisual.Content = model3DGroup;
+ }
}
}
diff --git a/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/Plugin.cs b/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/Plugin.cs
index 27f45df..029a937 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/Plugin.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/Plugin.cs
@@ -28,6 +28,7 @@ public class Plugin : IViewer
private static readonly HashSet WellKnownExtensions = new(
[
".stl", ".obj", ".3ds", ".lwo", ".ply",
+ ".fbx",
]);
private HelixPanel _hp;
diff --git a/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/QuickLook.Plugin.HelixViewer.csproj b/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/QuickLook.Plugin.HelixViewer.csproj
index e2bcaea..ba81ac7 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/QuickLook.Plugin.HelixViewer.csproj
+++ b/QuickLook.Plugin/QuickLook.Plugin.HelixViewer/QuickLook.Plugin.HelixViewer.csproj
@@ -54,6 +54,7 @@
+