This is the discussion forum for Helix Toolkit.
For bugs and new features, use the issue tracker located at GitHub.
Also try the chat room!

Does Helix Toolkit work on UWP?

Garry Taylor 2 years ago 0

Hi everyone,

Just a quick question, does Helix Toolkit work on UWP? I've tried to build it, but lots of errors, so before I start looking into it further, is it even supposed to work?

Helix Toolkit has been amazing on WPF, just want to know if I can use on a UWP app?




HelixToolkit.Wpf.SharpDX - Custom Shader

Anonymous 4 years ago 0
This discussion was imported from CodePlex

eonxxx wrote at 2014-08-14 12:11:

hi there a chance to use custom shaders in HelixToolkit.Wpf.SharpDX?
how does it works, if so?

do i need to use fx0.5 effects for it?

is it possible to use generated (shaderbytecode.compilefromfile) bytecode?

Texture coordinates from ObjReader

Anonymous 4 years ago 0
This discussion was imported from CodePlex

Lolligeir wrote at 2013-03-22 18:08:

Hey! Thanks for an awesome tool.

I am reading some obj files for a ray tracer and I have managed to read the Points of each triangle and the normals but the texture coordinate don´t seem to be working correctly. This is how I am reading the file:
            ObjReader r = new ObjReader();
            Model3DGroup model = r.Read(modelUrl);
            GeometryModel3D gm1 = (GeometryModel3D)model.Children[0];
            MeshGeometry3D mg1 = (MeshGeometry3D)gm1.Geometry;
            Vector3DCollection normals = mg1.Normals;     
            System.Windows.Media.PointCollection textureCoordinates = mg1.TextureCoordinates;
            System.Windows.Media.Int32Collection indices = mg1.TriangleIndices;
            Point3DCollection points = mg1.Positions;

            for (int index = 0; index < indices.Count; index += 3)
                Point3D p0 = points[indices[index]];
                Point3D p1 = points[indices[index + 1]];
                Point3D p2 = points[indices[index + 2]];          
                Vector3D n0 = normals[indices[index]];
                Vector3D n1 = normals[indices[index + 1]];
                Vector3D n2 = normals[indices[index + 2]];

                System.Windows.Point t0 = textureCoordinates[indices[index]];
                System.Windows.Point t1 = textureCoordinates[indices[index + 1]];
                System.Windows.Point t2 = textureCoordinates[indices[index + 2]];
This loads the correct points and normals but the texture coordinates come out wrong. Am I approacing this incorrectly? How do you read the correct texture coordinate for every face?

The obj file I have been using (Removed text after vertices to get the objReader to read it) :

Best regards,

How to access different component from .3ds file

Anonymous 4 years ago 0
This discussion was imported from CodePlex

GhufranZahidi wrote at 2012-11-20 10:04:


I want to access multiple component from .3ds file by name and try to move particular component, is it possible if yes then give method name, please reply


Storyboard animation

Anonymous 4 years ago 0
This discussion was imported from CodePlex

xyxa wrote at 2012-07-14 15:56:

Thanks so much for very useful toolkit.

But unfortunately I could not create a storyboard animation via Blend for any MeshElement3D. It's strange, because I can create such animation for ModelVisual3D. What is the reason for this behavior and Is there any ways to solve it?


Collision Detection

Anonymous 4 years ago • updated by anonymous 1 year ago 3
This discussion was imported from CodePlex

BCBlanka wrote at 2012-11-10 08:47:



Is there a way to detect collision between 3D models?




objo wrote at 2012-11-11 22:14:

sorry, no collision detection is implemented in this library. But it would be interesting to see integration of the models defined here with bullet or some other physics library! 

bcblanka wrote at 2012-11-12 06:40:

Thanks for the prompt response.



davidop wrote at 2013-05-28 16:53:

Did you find the solution? What library do you recommend? Do you have any example?

BCBlanka wrote at 2013-05-29 10:10:

I ended up comparing the bounds of the models (Rect3D) and checking their intersection. This was enough for what I needed.

davidop wrote at 2013-05-30 11:00:

Do not you will have a small example? I need it for when moving objects (ModelVisual3D) with the mouse

objo wrote at 2013-06-07 12:01:

A small collision detection demo is on the wish list! Simple geometries (boxes) would be sufficient. Also a larger demo combining WPF3D and one of the well-known physics engines would be very interesting to see. Sorry, I don't have time to do this myself at the moment :)

Migrate to HelixToolKit WPF to HelixToolKit SharpDX

Anonymous 4 years ago • updated by anonymous 1 year ago 5
This discussion was imported from CodePlex

cedrelo wrote at 2014-02-07 08:50:


First really thanks for your work!!!!

I use HelixToolKit WPF to develop an WPF application of robot trajectory, i use import of .stl, camera, viewport3D, LineVisual3Ds.

It's works really great, but when we load large data and a lots of stl, the perfomance fall on
some computer.

Do you think it's possible to migrate the projet to the fork HelixToolKit SharpDX to improve perfomance ?
Does the fork has all the functionnality of the orginal project ?
It is possible to use HelixToolKit SharpDX inside a WPF application ?



Control Zoom in/out

Anonymous 4 years ago 0
This discussion was imported from CodePlex

veerammalkumaran wrote at 2014-08-07 12:11:

I can zoom in/out using mouse wheel. But it goes infinity. How to prevent the zoom in/out at a particular position?
IsZoomEnabled option is disabled the zoom in/out, but I want prevent the user from zoom in/out infinitely.
Is there any way to do this...?

everytimer wrote at 2014-08-08 01:31:

You can try to disabling the zoom (IsZoomEnabled) when the camera is further than a specific value, there is a property that indicates you the Camera Distance. Create an event for the wheel and play with the delta. I'm not sure about this as I've never tried it. Good luck!

veerammalkumaran wrote at 2014-08-08 08:31:

Thanks for the answer, the problem is IsZoomEnabled stops the camera distance then when should we enable the zoom.
we can disable based on the camera movements, once disabled the camera won't move then when that should be enabled.

veerammalkumaran wrote at 2014-08-08 09:47:

I done that using PreviewMouseWheel event of view port 3d (MouseWheel event doesn't trigger on helix view port 3d)
        private void viewPort3D_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
            if (viewPort3D.Camera.LookDirection.Length >= 800 && e.Delta<0)
                e.Handled = true;

            if (viewPort3D.Camera.LookDirection.Length <= 15 && e.Delta > 0)
                e.Handled = true;

Zoom out

Anonymous 4 years ago 0
This discussion was imported from CodePlex

Cygor6 wrote at 2012-11-23 22:40:

I'm beginners and would need your help! I made a console application 
to save down a rendered image. BUT the camera is too close and
I can not somehow zoom out.

How do I solve this?
using System.IO;
using System.Threading;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Media3D;
using System.Windows.Shapes;
using HelixToolkit.Wpf;

namespace ConsoleApplication1
    internal class Program
        public static IHelixViewport3D HelixView { get; set; }
        public static Model3D MyModel { get; set; }

        private static void Main(string[] args)
            var thread = new Thread(Test);

        private static void Test()
            var c = new FileStream("Ferarri40.3ds", FileMode.Open, FileAccess.Read, FileShare.Read);
            var reader = new StudioReader {TexturePath = "."};
            MyModel = reader.Read(c);

            var m = new ModelVisual3D {Content = MyModel};

            const string Path = @"H:\test.png";
            const int Height = 480;
            const int Width = 640;

            var vp = new HelixViewport3D {Width = Width, Height = Height};


            vp.Children.Add(new DefaultLights());

            var zoom = new ScaleTransform3D(1.5, 1.5, 1.5);
            var t = new Transform3DGroup();
            vp.Camera.Transform = t;

            vp.Camera = CameraHelper.CreateDefaultCamera();
            vp.Camera.Position = new Point3D(5.300, -12.300, 3.300);
            vp.Camera.LookDirection = new Vector3D(-6.300, 11.000, -6.600);
            vp.Camera.UpDirection = new Vector3D(0.000, 0.000, 1.000);
            vp.Camera.NearPlaneDistance = 0.123;         

            var r = new Rectangle {Width = vp.ActualWidth, Height = vp.ActualHeight};
            var cb = new BitmapCacheBrush(vp) {BitmapCache = new BitmapCache(0)};
            r.Fill = cb;
            r.Arrange(new Rect(0, 0, r.Width, r.Height));