For bugs and new features, use the issue tracker located at GitHub.
Also try the chat room!

Programmatic control of camera parameters
AnotherBor wrote at 2013-11-20 07:26:
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:
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:
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.

Cylindrical panoramas
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!

AddTriangles error/fix
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,,,

Wrong number of normal vectors.
everytimer wrote at 2014-03-12 08:38:
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.dllAdditional 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:
mb.Append(puntos, indices)

Zoom/Rotate around the mouse down point

3D Boolean Operations?
3dguy wrote at 2013-04-18 02:10:
objo wrote at 2013-04-18 09:37:
MeshGeometry3D
by planes. See the
MeshGeometryHelper.Cut
method. I am not planning to add more advanced 3D boolean operations here.
Ruler (like photoshop ruler)
behnam263 wrote at 2014-05-31 08:53:
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.

subtracting one shape from another
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.

ScatterViews, Touch Events and Manipulators
Darkounet789 wrote at 2014-02-24 16:15:
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...)

Create a tube of specific wall thickness
bradphelan wrote at 2013-07-10 09:56:
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:
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.
Customer support service by UserEcho