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

Model3d Hit Testing
cobra18t wrote at 2011-12-13 16:12:
I am trying to follow your Voxel example to highlight a 3D model in the viewport when the user mouses over it. I have multiple Model3D objects in the viewport and the hit testing works fine until I start adding transforms to the Model3Ds. Even if the model is transformed to say (100,20,0), the hit testing reports a Model3D that is positioned at its original location, (0,0,0). I tried to determine which model was moused over by the bounding box of the orignal model and the bounding box of the hit result, but this only worked for some of the models. Any ideas? should I be using a different object type?
cobra18t wrote at 2011-12-13 17:33:
Additionally, hits.First().Position is reporting a position that is scaled with the same scale transformation of the model that is moused over. So when mousing over a model so that the mouse is hitting point (1,1,1) on the surface of the model, Position reports (5,5,5) as the hit point since the model is scaled by 5 in each dimension. Is there a way to apply the transformation permanently to avoid these discrepancies?
objo wrote at 2011-12-13 18:38:
have a look at HelixToolkit.Wpf.Viewport3DHelper.GetTransform to get the total transforms applied to the Visual3Ds and Model3Ds in your hits.
Also see the Viewport3DHelper.FindNearestPoint method!
valdis1987 wrote at 2013-08-15 14:07:
Can't get necessary results.
Can someone help me? I think this question is a problem to others also.
So lets say i have:
<Helix3D:HelixViewport3D x:Name="Mainviewport">
..Camera
<Helix3D:HelixVisual3D x:Name="Scene">
..Inside is <Helix3D:HelixVisual3D.Content><Model3DGroup> with deep tree with Model3dGroup[...]
</<Helix3D:HelixVisual3D>
<Helix3D:HelixVisual3D x:Name="Obje1"/>
<Helix3D:HelixVisual3D x:Name="Obje2"/>
<Helix3D:HelixVisual3D x:Name="Obje3"/>
<Helix3D:HelixVisual3D x:Name="Obje4"/>
</Helix3D:HelixViewport3D>
Inside HelixViewport3D all items have transforms( ScaleTransform3D,RotateTransform3D,TranslateTransform3D)
Now how I can get notice that Obje1 have hit Scene? Or Obje1 have hit Obje2?
I done a lot of try's to get result but no success.
Can someone give me a couple tips how to accomplish my target?
Thanks.

How to Draw a Post Cap
AQSRanck wrote at 2014-06-28 04:12:
I can draw all sorts of assemblies that derive from Box, Pipe, Cylinder, Cone etc. But now I have a new challenge. How would I approach drawing a more complex structure, In a similar fashion to SiloVisual3D, suppose I have a PostCapVisual3D. Could you suggest what elements to use to draw the Post Cap pictured below. I don't care about the textured finish, I'm more interested in your suggestion of which tools to use to draw the shape.
Bob
link to picture of Post Cap
objo wrote at 2014-07-02 13:19:
AQSRanck wrote at 2014-07-02 15:21:
I will keep that in mind when I need holes. In fact I these holes are to be filled with Nails, so I tried the example you used in Legos (with short pipes) to represent the nail heads and while the results were OK the code for the illustration and its placement became way too complicated. I decided to abandon it for more important issues. There are actually hundreds of different connectors like the one that I linked to in the first post and they are available in 2D form. The real solution for the larger issue here is to someday find a way to edit and convert from .DXF or .DWG files to simple Helix illustrations.
Thank you again,
Bob

mouse capture in viewport
alexalthauser wrote at 2013-04-03 23:43:
I'm trying to show the x,y,z position of the mouse within the helix3d viewport. I was wondering if there are any examples or samples, that show how to do this?
I'm building a 3D level editor, with a 3D grid, used for positioning objects. When the mouse moves through the grid, I want transparent planes to light up each side of the cube which the mouse is over, within the grid.
So far I have the X & Y mouse coordinates of the HelixViewport3D. I forget how to get the z coords. It's Camera lookat direction multiplied by something.. Arg, can't remember. Help!
Thanks,
Alex
objo wrote at 2013-04-15 12:22:
CurrentPosition
property in the HelixViewport3D
control.
Or use the
Viewport3DHelper.Point2DToRay3D
function. You can then find the intersection of the
Ray3D
and a Plane3D
. See also the "VoxelDemo" in the "ExampleBrowser".

kinect - Trackball [Solved]
MrNikito wrote at 2013-09-12 17:01:
I am new here and in kinect world, and I have a simple question. (I guess)
Using Helix3D I can zoom, rotate, etc by mouse. But is it possible using kinect?
Because I use:
<helix:HelixViewport3D CameraRotationMode="Trackball" ZoomExtentsWhenLoaded="False">
<helix:HelixViewport3D.Camera>
<PerspectiveCamera Position="0,0,0" LookDirection="0,6,0" UpDirection="0,0,1" NearPlaneDistance="0.01" FarPlaneDistance="1000" FieldOfView="57"/>
</helix:HelixViewport3D.Camera>
<helix:SunLight/>
<ModelVisual3D Content="{Binding Model}"/>
</helix:HelixViewport3D>
And Kinect did not recognize. Then I thought: "I need execute any code", but I was not able to find anything about this.
Can you help me?
Thanks
MrNikito wrote at 2013-09-25 17:15:
I get 2 ways to resolve my problem and I finished with the regular and the best way, using HelixViewport3D.CameraController.
But I completelly forget close this topic...
Well, thanks very much, because this tool is very simple to use.
karunakarreddy123 wrote at 2014-06-10 16:07:
We also facing same issue. Can you please give more details how you resolved the issue, if possible can you share code snippet for the same.
ThanksMrNikito wrote at 2014-09-01 06:51:
Well, I hope that you've already solved the problem.
But... here is my explanation:
As I needed finish the project quickly I just think: "Well I can rotate/move (Control) the Camera to solve my problem"
So I use this code to rotate the camera, where vector is a Vector3D calculated by Kinect Joints Position
helixViewport.CameraController.AddRotateForce(vector.X, vector.Y);
And I use that code to zoom in/zoom out the camera, where force is a double value that I calculated by hands distance...helixViewport.CameraController.AddZoomForce(force);
I hope that you solve your problem and my sincere apologies again (by the wait time).
Error using Meshbuilder.AddRevolvedGeometry
mcrxb wrote at 2012-02-09 17:51:
I'm receiving the following error when trying to add a revolved geometry:
Cannot implicitly convert type 'void' to 'System.Windows.Media.Media3D.Geometry3D'
My code looks like this:
private IList<Point> profile = new List<Point>();
private MeshBuilder mb = new MeshBuilder();
profile.Add(new Point(0, 0));
profile.Add(new Point(ShankRadius, 0));
profile.Add(new Point(ShankRadius, ShankLength - ChamferOffset));
GeometryModel3D ShankGeometry = new GeometryModel3D();
ShankGeometry.Geometry = mb.AddRevolvedGeometry(profile, new Point3D(0, 0, 0), new Vector3D(0, 1, 0), 30);
ShankGeometry.Material = Materials.Hue;
ShankGeometry.BackMaterial = Materials.Hue;
vc.Add(ShankGeometry);
I get the error on the ShankGeometry.Geometry line. Any help would be greatly appreciated!
objo wrote at 2012-02-13 20:06:
try
mb.AddRevolvedGeometry(profile, new Point3D(0, 0, 0), new Vector3D(0, 1, 0), 30); ShankGeometry.Geometry = mb.ToMesh();
mcrxb wrote at 2012-02-21 14:10:
That worked perfect, thank you. One follow up question: I'm adding the revolves to a Model3D collection and want to set a different color for each revolved geometry (say I have two cylinders stacked on top of each other, one red and one blue) but for some reason it only uses the material of the last object added to the collection...do I need to clear this somehow? Should I be creating a new MeshBuilder for every revolve?
objo wrote at 2012-02-21 14:22:
you need a new GeometryModel3D to define objects with different materials. Geometry can be reused, but I think it is necessary to freeze (use the freeze argument in the MeshBuilder.ToMesh method).
mcrxb wrote at 2012-02-21 14:28:
I'm creating a new GeometryModel3D every time I add to the collection:
points.Add(new Point(0, 0)); points.Add(new Point(0, 1)); points.Add(new Point(1, 1)); mb.AddRevolvedGeometry(points, new Point3D(0, 0, 0), new Vector3D(0, 1, 0), 50); vc.Add(new GeometryModel3D(mb.ToMesh(), Materials.Gray)); points.Clear();
points.Add(new Point(0, 0)); points.Add(new Point(0, 2)); points.Add(new Point(2, 2)); mb.AddRevolvedGeometry(points, new Point3D(0, 0, 0), new Vector3D(0, 1, 0), 50); vc.Add(new GeometryModel3D(mb.ToMesh(), Materials.Blue)); points.Clear();
objo wrote at 2012-02-21 20:47:
I think you should also create a new MeshBuilder every time - the add methods are not clearing the existing mesh in the MeshBuilder.

Fix to STL binary reader
MattyBoy wrote at 2014-04-09 17:17:
this.Header = System.Text.ASCIIEncoding.ASCII.GetString(reader.ReadBytes(80)).Trim();
ReadChars(80) doesn't work in a binary file with nulls, etc...
objo wrote at 2014-04-29 10:29:
objo wrote at 2014-04-29 10:32:
MattyBoy wrote at 2014-05-01 19:38:
objo wrote at 2014-05-05 14:56:
Alt 2. Make the file available for download somewhere. Dropbox, OneDrive, etc.

Materials won't load
sion005 wrote at 2011-10-26 17:49:
Greetings, I'm using Helix in an application to view 3d models, however, when I import the model, it's all black, with no materials. I tried several models, including the ones used on the Studio example, but the result was the same. Probably I'm doing some newbie mistake, but i would appreciate some tips to solve this.
Here is the code that I use to load the model:
// Fields
private TerrainCreator tc;
private Model3D CurrentModel;
private ModelVisual3D render;
public MainWindow()
{
this.InitializeComponent();
this.render = new ModelVisual3D();
this.CurrentModel = ModelImporter.Load("C:\\Users\\Pedro\\Desktop\\Helix\\HelixToolkit-Examples\\StudioDemo\\Models\\Ferarri40.3ds");
this.render.Content = this.CurrentModel;
this.view.Add(render); // this is the HelixView3D
}
objo wrote at 2011-10-26 20:43:
hi Pedro! a simple question first: did you add lights to your scene? Helix toolkit has a couple of light visuals, and also a 'headlight' in the HelixViewport3D control.
sion005 wrote at 2011-10-31 15:49:
Problem solved. I didn't had any lights! Thanks a lot!

Databinding HelixView (MVVM)
vuurvos wrote at 2011-04-21 16:08:
Hi,
I want to bind the HelixView3D to a model (MVVM design pattern). The only fully working way I found was by not using the MVVM design pattern. Since the MVVM pattern is a must and used in other all parts of the project, I want to use it also for the HelixView3D.
When I bind to the ModelVisual3D.content to its content in the model, the Viewport3DHelper doesnt work anymore. The viewport3DHelper doesn't detected a Visual3D which is near the clicked point. When I check the VisualChildernCount, its shows me one child.
I think the VisualChild isn't the child (3D Model) which I am clicking on. I guess its an ambientlight visual....
Regards
VuurVOS
zeux wrote at 2011-04-25 20:54:
try adding this to HelixView3D:
protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{ //base.OnItemsChanged(e); switch (e.Action) { case System.Collections.Specialized.NotifyCollectionChangedAction.Add: Add(e.NewItems.ToList<Visual3D>()); break; case System.Collections.Specialized.NotifyCollectionChangedAction.Move: break; case System.Collections.Specialized.NotifyCollectionChangedAction.Remove: Remove(e.OldItems.ToList<Visual3D>()); break; case System.Collections.Specialized.NotifyCollectionChangedAction.Replace: break; case System.Collections.Specialized.NotifyCollectionChangedAction.Reset: ClearChildren(); break; default: break; } }
objo wrote at 2011-06-19 12:27:
vuurvos: I added a MvvmDemo that binds to HelixVis3D.ItemsSource. Adding new Visual3Ds should work now. (In the past I have used to add Visual3Ds in the XAML and bind to Model3Ds in the ViewModels)
zeux: thanks for pointing out the missing code! I added it to HelixView3D with some modifications (seems like you have added different Add/Remove methods) The implementation of Move and Replace is also remaining, as you point out.
The MvvmDemo is not complete, will add more when I learn more Caliburn.Micro...

Orientation of image assigned to SphereVisual3D
tacheleu wrote at 2012-12-07 20:42:
I am using the helixtoolkit of codeplex.
¿How I can set the orientation of the image that I assign to a sphere3D?
I can assign the ImageMaterial but ¿how to rotate/orientate the image?
Thanks in advace
objo wrote at 2012-12-07 21:25:
To rotate the image, try applying a Transform2D to the TextureCoordinates in your sphere geometry.
Or create a material from a VisualBrush or ImageBrush that contains a rotated image (slower performance).
http://msdn.microsoft.com/en-us/library/system.windows.media.transform(v=vs.95).aspx
http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.meshgeometry3d.texturecoordinates.aspx

F1 = click on bottom of cube
bennasi wrote at 2012-12-03 11:45:
Hi,
How can I make this:
If I press F1 I would like the same thing to happen (switch view) as it would do when clicking on the bottom of the view cube.
Thanks
objo wrote at 2012-12-03 21:26:
I think it should be possible to add a KeyBinding to the CameraController.BottomViewCommand!
But why F1? That's for help!
bennasi wrote at 2012-12-04 11:05:
Want to use the keybindings as they are in another software package (ANSA).
so I want to change the function keys to default camera positions.
I cannot find the helixviewport.cameracontroller.bottomviewcommand.
Could you give me some sample code please.
Customer support service by UserEcho