Hallo,
ich versuche mal den Sachverhalt im Detail zu schildern.
Ich prüfe 3D-Modelle auf Kollision. Funktioniert auch perfekt.
In Form1 habe ich ein OpenGL-Fenster, also die Visualisierung. In der Form1 ist auch eine Liste deklariert als: IntersectionVolumes As List(Of Mesh).
Für die Kollisionsprüfung habe ich:
1. ContourPath as List(Of Geometry3D) ==> Eine Liste mit Linien, Kreisausschnitten oder Vollkreis und Kurven
2. StaticEntities As List(Of Mesh) ==> Eine Liste mit 3D-Modellen welche nicht Transformiert werden
3. DynamicEntites As List(Of Mesh) ==> Eine Liste mit 3D-Modellen welche entlang des ContourPath Transformiert werden. Bei jeder Transformation erfolgt eine Kollisionsprüfung zwischen StaticEntities und DynamicEntities.
Je nach dem wie groß das zu bearbeitende Bauteil ist und je nach dem wie hoch die Genauigkeit sein soll, kann es passieren das der ContourPath aus bis zu 6000 3D-Punkten oder mehr besteht.
Ich würde gerne den ContourPath auf z.B. 3 Threads aufteilen.
Thread1 soll 0 - 1999 rechnen.
Thread2 soll 2000 - 3999 rechnen.
Thread3 soll 4000 - 6000 rechnen.
Den Threads muss man StaticEntities, DynamicEntites und einen Teil des ContourPath übergeben
Schema der Kollisionsprüfung
==========================
Dim iv As New List(Of Mesh)
For i = 0 To ContourPath.Count-1
Dim t As Transformation = GetTransformation(ContourPath(i)) ==> Diese Funktion ist in einem Modul
DynamicEntities.TransformAll(t)
Dim cp As CollisionDetection3D = New CollisionDetection3D(StaticEntities,DynamicEntites)
cp.Dowork()
If cp.IntercetionVolumes IsNot Nothing Then iv.AddRange(cp.IntersectionVolumes.Mesh)
Next
Jetzt soll der Thread die iv-Liste in den IntersectionVolumes ( HauptThread ) übergeben.
HauptThread.IntersectionVolumes.AddRange(iv)
Thread beenden.
Das Programm soll erst dann weiter laufen wenn alle zusätzlichen Threads geschlossen sind.
Puhhhhh
Besten Dank.
ich versuche mal den Sachverhalt im Detail zu schildern.
Ich prüfe 3D-Modelle auf Kollision. Funktioniert auch perfekt.
In Form1 habe ich ein OpenGL-Fenster, also die Visualisierung. In der Form1 ist auch eine Liste deklariert als: IntersectionVolumes As List(Of Mesh).
Für die Kollisionsprüfung habe ich:
1. ContourPath as List(Of Geometry3D) ==> Eine Liste mit Linien, Kreisausschnitten oder Vollkreis und Kurven
2. StaticEntities As List(Of Mesh) ==> Eine Liste mit 3D-Modellen welche nicht Transformiert werden
3. DynamicEntites As List(Of Mesh) ==> Eine Liste mit 3D-Modellen welche entlang des ContourPath Transformiert werden. Bei jeder Transformation erfolgt eine Kollisionsprüfung zwischen StaticEntities und DynamicEntities.
Je nach dem wie groß das zu bearbeitende Bauteil ist und je nach dem wie hoch die Genauigkeit sein soll, kann es passieren das der ContourPath aus bis zu 6000 3D-Punkten oder mehr besteht.
Ich würde gerne den ContourPath auf z.B. 3 Threads aufteilen.
Thread1 soll 0 - 1999 rechnen.
Thread2 soll 2000 - 3999 rechnen.
Thread3 soll 4000 - 6000 rechnen.
Den Threads muss man StaticEntities, DynamicEntites und einen Teil des ContourPath übergeben
Schema der Kollisionsprüfung
==========================
Dim iv As New List(Of Mesh)
For i = 0 To ContourPath.Count-1
Dim t As Transformation = GetTransformation(ContourPath(i)) ==> Diese Funktion ist in einem Modul
DynamicEntities.TransformAll(t)
Dim cp As CollisionDetection3D = New CollisionDetection3D(StaticEntities,DynamicEntites)
cp.Dowork()
If cp.IntercetionVolumes IsNot Nothing Then iv.AddRange(cp.IntersectionVolumes.Mesh)
Next
Jetzt soll der Thread die iv-Liste in den IntersectionVolumes ( HauptThread ) übergeben.
HauptThread.IntersectionVolumes.AddRange(iv)
Thread beenden.
Das Programm soll erst dann weiter laufen wenn alle zusätzlichen Threads geschlossen sind.
Puhhhhh
Besten Dank.