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!
0

Programmatic control of camera parameters

Anonymous 11 years ago 0
This discussion was imported from CodePlex

AnotherBor wrote at 2013-11-20 07:26:

Hi,

First of all I want to say big THANK YOU to all the contributors and authors of Helix. THIS IS OSOM!

Now to the point.
I need to control FOV, point of view and other parameters of the scene in the code but with the visual effects provided by manual control.
For example, if I change camera FOV in CameraSettings in the code, the FOV changes instantly but other properties of the camera remain unchanged. That's obviously how it's supposed to be.
But when you change camera FOV using mouse, the distance of the camera is adjusted (behind the scenes) so that apparent perspective changes, but ZOOM remains constant.
How can I achieve the same in the code??

I have same question/requirement for other parameters. For example, it's super easy to control the point of view of camera using mouse. How could I change the camera position with the same nice animation and effects in code instead?

objo wrote at 2013-12-02 20:08:

Try the methods AddPanForce, AddRotateForce and AddZoomForce in the CameraController.
ChangeDirection and LookAt has animation time parameters, I agree there should also be a ChangeFov method! I added an issue: https://helixtoolkit.codeplex.com/workitem/10010

AnotherBor wrote at 2014-01-03 14:48:

Thank you very much for the information.
I have to say, I'm deeply impressed with helixtoolkit. Really great work!!
I'm sorry for not replying earlier. Too many things on my head.
0

Cylindrical panoramas

Anonymous 11 years ago 0
This discussion was imported from CodePlex

Provagino wrote at 2012-01-09 16:41:

How I do create a cylindrical panorama? ( Image source http://blog.360cities.net/)
Thanks


objo wrote at 2012-01-09 19:32:

A simple cylinder with the panorama as a texture should work! For spherical panoramas, use a sphere.

Remember to place the camera in the middle of the cylinder/sphere! And use an emissive material or ambient light!

0

AddTriangles error/fix

Anonymous 11 years ago 0
This discussion was imported from CodePlex

mentalarray wrote at 2012-04-08 04:32:

Hi

there seemed to be an error in the triangleIndices code for AddTriangles as i had points in all wrong places i have added code that fixes it below

//Not working (old code)

 /*
            int indexEnd = this.positions.Count;
            for (int i = index0; i + 2 < indexEnd; i++)
            {
                this.triangleIndices.Add(i);
                this.triangleIndices.Add(i + 1);
                this.triangleIndices.Add(i + 2);
            }
             */


//Working

           for (int i = 0; i < this.positions.Count; i+=3)
            {
                this.triangleIndices.Add(i);
                this.triangleIndices.Add(i + 1);
                this.triangleIndices.Add(i + 2);
            }

 


objo wrote at 2012-04-08 13:10:

thanks! I submitted a fix on the AddTriangles method. Notice that the triangle indices should be based on the index of the first point added (this will allow AddTriangles to be called multiple times). I also corrected some errors in the argument checks.

I found that this method is currently not in use in the library, but I will leave it there in case someone use it. Will add more unit tests/examples for the mesh builder later.


Mentalarray wrote at 2012-04-08 13:24:

Oh great objo yea i realised about the index afterwards as i was adding my object all in one go good point 

great work on the whole library btw,,,

0

Wrong number of normal vectors.

Anonymous 11 years ago 0
This discussion was imported from CodePlex

everytimer wrote at 2014-03-12 08:38:

I'm importing a geometry from a file reading the vertices of the figures. For each type I've wrote the correct indices, for example:
        public GeometryModel3D Generate3D()
        {

               GeometryModel3D My3DModel = new GeometryModel3D(); //Materials ommited

            List<Point3D> puntos = new List<Point3D>();
            List<int> indices = new List<int>();

                if (Elementos[i] is CTRIA3)
                {
                    Point3D p1 = Elementos[i].Grids[0].ToPoint();
                    Point3D p2 = Elementos[i].Grids[1].ToPoint();
                    Point3D p3 = Elementos[i].Grids[2].ToPoint();
                    puntos.Add(p1);
                    puntos.Add(p2);
                    puntos.Add(p3);

                    int n = puntos.Count;

                    indices.Add(n - 3);
                    indices.Add(n - 2);
                    indices.Add(n - 1);

                }

                if (Elementos[i] is CQUAD4)
                {
                    Point3D p1 = Elementos[i].Grids[0].ToPoint();
                    Point3D p2 = Elementos[i].Grids[1].ToPoint();
                    Point3D p3 = Elementos[i].Grids[2].ToPoint();
                    Point3D p4 = Elementos[i].Grids[3].ToPoint();
                    puntos.Add(p1);
                    puntos.Add(p2);
                    puntos.Add(p3);
                    puntos.Add(p4);

                    int n = puntos.Count;

                    indices.Add(n - 4);
                    indices.Add(n - 3);
                    indices.Add(n - 2);

                    indices.Add(n - 4);
                    indices.Add(n - 2);
                    indices.Add(n - 1);

                }
            //More geometric stuff

            Mesh3D mesh = new Mesh3D(puntos, indices);
            MeshBuilder mb = new MeshBuilder(false, false); //I've tried the default constructor too

            mb.AddCylinder(new Point3D(0, 0, 0), new Point3D(100, 100, 100), 5, 20);
            mb.Append(mesh.ToMeshGeometry3D()); //I've tried switching the order
            
            //My3DModel.Geometry = mesh.ToMeshGeometry3D();
            My3DModel.Geometry = mb.ToMesh();
            return My3DModel;
}
What I want is to use both, manually created figures and using MeshBuilder class (for tubes, cones etc). But if I use the append method to try than, even if I do not add any stuff with the MeshBuilder I get this exception:
An unhandled exception of type 'System.InvalidOperationException' occurred in HelixToolkit.Wpf.dll
Additional information: Wrong number of normal vectors.

What can I do to fix this situation? I know that there is a method called add triangles but It would be a bit difficult to implement for me right now.

objo wrote at 2014-03-12 15:56:

This looks like a bug in Mesh3D or MeshBuilder. I don't think you need to use a Mesh3D here. Try to use a mb.Append(puntos, indices)
0

Zoom/Rotate around the mouse down point

Anonymous 11 years ago 0
This discussion was imported from CodePlex

khatran79 wrote at 2013-10-14 10:43:

Hello,

Can you help me with an example of "Zoom/Rotate around the mouse down point"? I failed when trying to search from document.

Thanks,

0

3D Boolean Operations?

Anonymous 11 years ago 0
This discussion was imported from CodePlex

3dguy wrote at 2013-04-18 02:10:

Is there a way to perform 3D Boolean operations like GeometryCombineMode in WPF 2D Graphics?

objo wrote at 2013-04-18 09:37:

Sorry, this library only contains functionality to cut MeshGeometry3D by planes. See the MeshGeometryHelper.Cut method. I am not planning to add more advanced 3D boolean operations here.
0

Ruler (like photoshop ruler)

Anonymous 11 years ago 0
This discussion was imported from CodePlex

behnam263 wrote at 2014-05-31 08:53:

I need a ruler in my project for helixviewport like Photoshop Ruler in 2D(in zoom values change to cm and then to mm).
Could you tell me where i should start to get this approach?
Is there any built-in element in helix for this?

behnam263 wrote at 2014-08-02 20:19:


i mean by ruler is like this in 3d space with zoom and move (not rotate) , finding measures for an image or a plane.
0

subtracting one shape from another

will 10 years ago updated by Schwabelbauch 9 years ago 3

Say I have 2 spheres(SphereVisual3D) and place them so that they overlap. Can I somehow subtract one from the other such that one sphere will have a dimple on it? Or subtracting a cylinder from a box to create a hole?


For a hole, maybe a circular cutting plane and triangulate the hole wall?


I know I can do this in Blender and the like and export the model, but what I'm basically trying to achieve is to have a single model and parameterize a few dimensions.


Any help or nudges would be greatly appreciated.

0

ScatterViews, Touch Events and Manipulators

Anonymous 11 years ago 0
This discussion was imported from CodePlex

Darkounet789 wrote at 2014-02-24 16:15:

Hi everyone !

I added a 3d viewport inside a scatterview item. So I had to manually add a manipulator to the cameracontroller in order to catch the manipulation events on the viewport, otherwise the scatterview catch it. I did it this way :
        private void HV3DTouchDown(object sender, TouchEventArgs e)
        {
            CameraController cameraController = Viewport3D.CameraController;
            try
            {
                Manipulation.AddManipulator(Viewport3D, e.TouchDevice.AsManipulator());
            }
            catch
            {
                Console.WriteLine("Error occured in Sketch3D.HV3DTouchDown");
            }
            e.Handled = true;
            CaptureTouch(e.TouchDevice);
        }

        private void HV3DTouchLeave(object sender, TouchEventArgs e)
        {
            CameraController cameraController = Viewport3D.CameraController;
            try
            {
                Manipulation.RemoveManipulator(cameraController, e.TouchDevice.AsManipulator());
            }
            catch
            {
                Console.WriteLine("Error occured in Sketch3D.HV3DTouchLeave");
            }
            e.Handled = true;
            CaptureTouch(e.TouchDevice);
        }
But now, I would like to catch the manipulation on a manipulator (or any other 3D object in my scene) and I can't figure out how to achieve it, because of the AddManipulator method which only takes a UIElement and not a UIElement3D...

Is there any workaround about this ?

Thanks in advance ! Regards.
(Sorry for my bad english...)
0

Create a tube of specific wall thickness

Anonymous 11 years ago 0
This discussion was imported from CodePlex

bradphelan wrote at 2013-07-10 09:56:

Hi there, nice library.

I've used MeshBuilder.AddTube to create a tube with open ends. If I wanted to create a tube with a specific wall thickness is there a method somewhere to create a shell from a such a surface?

I guess I'm looking for something like this

http://help.solidworks.com/2012/English/solidworks/sldworks/hidd_dve_feat_shell.htm

objo wrote at 2013-07-12 23:08:

I think you can create another tube, and then reverse the triangle indices to flip the normals to the inside.
But it would desirable to improve the current MeshBuilder method to support inner diameters and end caps! Sorry, I can't help you with this at the moment.