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

How to offset/translate a Point in PointsVisual3D

Anonymous 4 years ago 0
This discussion was imported from CodePlex

pyrrhicpk wrote at 2012-11-06 07:29:

Hi,

I am drawing two points in the helixviewport3d using the following code. How can I offset/translate the points to new positions?

var result = new Point3DCollection(n);

var pt1 = new Point3D(0, 0, 0);
var pt2 = new Point3D(5, 5, 5);

result.Add(pt1);
result.Add(pt2);  

VisualPoints = new PointsVisual3D();
VisualPoints.Points = result;


myhelixviewport3d.Children.Add(VisualPoints);


pyrrhicpk wrote at 2012-11-07 03:58:

Actually, I want to translate the two points to different locations. Applying translate transform to the VisualPoints would result in the translation of both the points to the same new location. Am I right in this?

Actually, I have about 300,000 points in "result" and I want to translate each point to a new position. I tried doing result[0].Offset(xnew,ynew,znew); but I found that the offset applies on a copy and not on the original point. So, other possible way is to replace all the points in "result" with new points (with new positions). Are there any other workarounds?

0

capping extrusions?

Anonymous 4 years ago 0
This discussion was imported from CodePlex

mihaipruna wrote at 2014-08-24 19:36:

Hi, this is the code I am using to create an extrusion. I'd like to cap the ends so it looks solid.
    ExtrudedVisual3D extru = new ExtrudedVisual3D();
                System.Windows.Media.PointCollection collpo = new PointCollection();
                foreach (Point popo in sketchy.points2dlist  )
                {
                    collpo.Add(popo); 
                }
                extru.Section = collpo;
                extru.SectionXAxis = xaxis;
                extru.Transform = groupo;
                extru.Material = new DiffuseMaterial(new SolidColorBrush(colo));
                extru.IsSectionClosed = true;
                 
                Point3DCollection collpa=new Point3DCollection();
               foreach (Point3D po3 in pupo.points3dlist)
                {
                    collpa.Add(po3);  
                }
                extru.Path = collpa;

  
                extru.Fill = new SolidColorBrush(colo);
0

GetTotalNumberOfTriangles NullPointerException

Anonymous 4 years ago 0
This discussion was imported from CodePlex

ddklo wrote at 2012-01-30 15:55:

Hi.

I some circumstances the Geometry or TriangleIndices property on our models is null which causes the GetTotalNumberOfTriangles to throw an NullPointerException. Could you add some null checks or catch the exception?

Regards Dagfinn


objo wrote at 2012-01-30 20:45:

added null checks - see 74458.

0

Loading large mesh or many model3d

Anonymous 4 years ago 0
This discussion was imported from CodePlex

behnam263 wrote at 2014-06-29 06:08:

HI
is there any thing like field of view for camera?
i mean loading meshes if camera look into them like "unity4"
and other meshes do not render when they are not in front of
camera? it is a big issue for controlling ram and cpu usage.

objo wrote at 2014-07-02 13:13:

Yes, see http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.perspectivecamera.fieldofview(v=vs.110).aspx
Sorry, occlusion culling is not implemented in this library. I am not sure if this will work with the WPF 3D model, changing the visual model may be expensive!
0

Import a file with background worker

Anonymous 4 years ago 0
This discussion was imported from CodePlex

thiagoaguirre wrote at 2014-02-25 13:47:

Hi Objo!
Your library is amazing!

I couldn't import a model, with the ModelImporter, using a thread or task. It's cause a exception in Viewport3D.
While the thread is reading and the file size is too big, the main window not respond.
I think it is because the Model3DGroup is frozen.

I don't know as do that.
You can help me?

Thank you very much.
Thiago Aguirre Lorscheiter
0

Just a big "Thank You"

Anonymous 4 years ago 0
This discussion was imported from CodePlex

Jac312 wrote at 2010-06-06 18:57:

You have done a wonderful and useful job. I'm using your library in a 3D Xbap application that will help design precasted concrete products once finished. The toolkit works like a charm. So: a big "Thank You" and keep going. Jacques PS: ZoomToFit() works perfectly

objo wrote at 2010-06-07 07:44:

thanks for the feedback! good to hear that the zoomtofit function works for you!

0

Progress - keep it going please

Anonymous 4 years ago 0
This discussion was imported from CodePlex

stfx wrote at 2010-02-02 18:50:

Hey I just registered here to tell you how awesome that toolkit is. I use a modified version of it and it works perfectly. Do you have any progress on the code so far like object transformation (position, rotation, size) or maybe fit screen to object and fit to show all objects?

Please dont give up on it I really appreciate it.

Oh yeah you should consider to rename it to Helix Engine - sounds so much cooler :D

PS: I can send you the modifications if you are interested.


objo wrote at 2010-02-21 18:13:

Thanks for your feedback!! Sure, this project just started - I hope to get more work done on it soon. I have added you as a developer, you are welcome to submit improvements! There is a simple manipulator class for object transformation (translation only) in the toolkit now, but I am sure this needs more work. Do you have solutions to this? And the "fit screen to object" feature? That's a feature I would really like to have included!

Engine or toolkit - I like "toolkit" since this is mostly a collection of tools and helper classes - not replacing or encapsulating the wpf 3d engine. 

0

Drawing Polygon with CuttingEars algorithm

Anonymous 4 years ago 0
This discussion was imported from CodePlex

Darkounet789 wrote at 2014-02-05 11:00:

Hi there !

I'm very new to Helix3D (even WPF...) and I've a newby question about a way to draw polygons from scratch. I just can't figure out how the function AddPolygonByCuttingEars should be used ^^" Here is my current code :
var visualMesh = new MeshVisual3D();
var geometry = new GeometryModel3D();
var meshbuilder = new MeshBuilder(false,false);
var polygon = new[]
{
        new Point(1, 1),
        new Point(1, 2),
        new Point(4, 3),
        new Point(2, 1),
        new Point(1.5, 1.5)
};
var polygon3D = new[]
{
        new Point3D(1, 1,0),
        new Point3D(1, 2,0),
        new Point3D(4, 3,0),
        new Point3D(2, 1,0),
        new Point3D(1.5, 1.5,0)
};

var result = CuttingEarsTriangulator.Triangulate(polygon);
/* 1 */
//meshbuilder.AddPolygon(polygon3D);
/* 2 */
//meshbuilder.AddPolygon(result);
/* 3 */
meshbuilder.AddPolygonByCuttingEars(result);
geometry.Geometry = meshbuilder.ToMesh();
geometry.Material = MaterialHelper.CreateMaterial(Colors.OrangeRed);
visualMesh.Content = geometry;
this.Viewport3D.Children.Add(visualMesh);
The polygons are /convex/ -edited- -> concave !.
  1. The flatten Polygon3D only appear with false, false as attributes of the MeshBuilder constructor, otherwise I get a 'System.InvalidOperationException' in HelixToolkit.Wpf.dll. However some faces are upside down and the shape is finally not /convex/ -edited- -> concave ! =s
  2. meshbuilder.AddPolygon(result) line works, but no shapes appears... even with true, true in the MeshBuilder constructor.
  3. With meshbuilder.AddPolygonByCuttingEars(result); I get a 'System.ArgumentOutOfRangeException' in mscorlib.dll, and I don't really know why...
I'me sure I'm doing it wrong, if someone could explain how it should work or lead me to a working example of the cutting ears function usages, it would be great !

Thank you in advance for your answers !

/ Edit /
I said convex, of course, they are concave ^^" sorry !

Darkounet789 wrote at 2014-02-06 11:21:

Hi !

I think I got it ! I just drawn each triangle by using the indexes given by the cuttingears algorithm. I don't know if it's the right way to do it, but it works ^^.
var visualMesh = new MeshVisual3D();
var geometry = new GeometryModel3D();
var meshbuilder = new MeshBuilder(true, true);
var polygon = new PointCollection()
{
      new Point(1, 1),
      new Point(1, 2),
      new Point(2, 3),
      new Point(3, 2),
      new Point(4, 4),
      new Point(4, 2),
      new Point(3, 1)
};

var result = CuttingEarsTriangulator.Triangulate(polygon);

List<int> tri = new List<int>();
for (int i = 0; i < result.Count; i++)
{
      tri.Add(result[i]);
      if (tri.Count == 3)
      {
            Console.WriteLine("Triangle " + (i / 3).ToString() + " : " + tri[0].ToString() + ", " + tri[1].ToString() + ", " + tri[2].ToString());
            meshbuilder.AddTriangle(new Point3D(polygon[tri[0]].X, polygon[tri[0]].Y, 0),
                new Point3D(polygon[tri[1]].X, polygon[tri[1]].Y, 0),
                new Point3D(polygon[tri[2]].X, polygon[tri[2]].Y, 0));
            tri.Clear();
      }
}

geometry.Geometry = meshbuilder.ToMesh();
geometry.Material = MaterialHelper.CreateMaterial(Colors.OrangeRed);
visualMesh.Content = geometry;
                    
this.Viewport3D.Children.Add(visualMesh);
However, I encounter and new issue... the triangles I'm drawing are one-sided. Only the upper side of the face is rendered. Is there a way to make the triangles double-sided ?

/ FIXED / : I didn't know I had to set a backmaterial. I discovered that in an another topic ^^

Darkounet789 wrote at 2014-02-13 16:03:

Hey everybody !

You shouldn't use the code I wrote in my previous posts. Instead of this, I now use this couple of functions to fill a polygon with triangles.
//Support for 2D polygons

        public static MeshGeometry3D FillPolygon(Polygon p)
        {
            List<Point3D> pts3D = new List<Point3D>();
            foreach (var point in p.Points)
            {
                pts3D.Add(new Point3D(point.X, point.Y, 0));
            }
            Polygon3D p3 = new Polygon3D(pts3D);
            return FillPolygon(p3);
        }

//For 3D polygons

        public static MeshGeometry3D FillPolygon(Polygon3D p3)
        {
            var meshBuilder = new MeshBuilder(false, false);

            Polygon polygon = p3.Flatten();
            var triangleIndexes = CuttingEarsTriangulator.Triangulate(polygon.Points);

            meshBuilder.Append(p3.Points, triangleIndexes);
            return meshBuilder.ToMesh();
        }
The Append method of the MeshBuilder made my day...

Feel free to reuse !
0

TextBillboardVisual3D with Mouse-Events?

Anonymous 4 years ago 0
This discussion was imported from CodePlex

31337 wrote at 2012-11-27 12:28:

Hallo, is it possible to add the TextBillboardVisual3D as ModelUIElement3D?


31337 wrote at 2012-11-30 12:22:

Figured it out myself.

"ContainerUIElement3D" is the answer.


bennasi wrote at 2012-12-03 10:47:

Could you please elaborate on this a bit more? A code example would be nice. Thanks

0

CAD formats

Anonymous 4 years ago 0
This discussion was imported from CodePlex

vindex wrote at 2011-12-17 11:55:

Hi, 

First of all, great job, and thank you again. I'm a grateful user of Oxyplot, and here i find you again!

 

And now my question... have you any plans to give support to some CAD formats like .step, .sat,  or .iges?


objo wrote at 2011-12-19 09:24:

Sorry, no plans to implement readers for step, sat or iges. Only simple formats using triangular/quadrilateral meshes.

I might add import for a subset of the DXF format (polylines/curves and simple surfaces).

openNURBS is also interesting, would like to add a demo using the .net library:

http://download.rhino3d.com/openNURBS.NET/5.0/release/download/