Skip to content
Snippets Groups Projects
Commit d1d984f8 authored by Bocska Karina's avatar Bocska Karina
Browse files

use threading for point searching

parent 664f27dd
No related branches found
No related tags found
No related merge requests found
...@@ -4190,7 +4190,7 @@ PrefabInstance: ...@@ -4190,7 +4190,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: cbd9713bd330c064b8c327427eb068e1, type: 3} - target: {fileID: 919132149155446097, guid: cbd9713bd330c064b8c327427eb068e1, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 1 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []
...@@ -13258,11 +13258,11 @@ PrefabInstance: ...@@ -13258,11 +13258,11 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4704240697808797663, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 4704240697808797663, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
value: 0 value: 119.91
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4704240697808797663, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 4704240697808797663, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_SizeDelta.y propertyPath: m_SizeDelta.y
value: 0 value: 46
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4704240698125147208, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 4704240698125147208, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_text propertyPath: m_text
...@@ -13270,23 +13270,23 @@ PrefabInstance: ...@@ -13270,23 +13270,23 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_AnchorMin.y propertyPath: m_AnchorMin.y
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
value: 0 value: 91.91
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_AnchoredPosition.x propertyPath: m_AnchoredPosition.x
value: 0 value: 59.955
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 4704240698125147210, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
value: 0 value: -23
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 5043647495600119106, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 5043647495600119106, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_Layer propertyPath: m_Layer
...@@ -13310,7 +13310,7 @@ PrefabInstance: ...@@ -13310,7 +13310,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 7785151267686525225, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 7785151267686525225, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 1 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 7785151267686525226, guid: 048249d9a15aa3c459399751e860bde7, type: 3} - target: {fileID: 7785151267686525226, guid: 048249d9a15aa3c459399751e860bde7, type: 3}
propertyPath: m_RootOrder propertyPath: m_RootOrder
...@@ -21778,7 +21778,7 @@ PrefabInstance: ...@@ -21778,7 +21778,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668758913251958, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668758913251958, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.x propertyPath: m_AnchoredPosition.x
value: 0 value: 44.7
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668758913251958, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668758913251958, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
...@@ -21810,7 +21810,7 @@ PrefabInstance: ...@@ -21810,7 +21810,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668759388320319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668759388320319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.x propertyPath: m_AnchoredPosition.x
value: 0 value: 40
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668759388320319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668759388320319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
...@@ -21846,7 +21846,7 @@ PrefabInstance: ...@@ -21846,7 +21846,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668759906836222, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668759906836222, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.x propertyPath: m_AnchoredPosition.x
value: 0 value: 40
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668759906836222, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668759906836222, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
...@@ -21870,7 +21870,7 @@ PrefabInstance: ...@@ -21870,7 +21870,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668759991436502, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668759991436502, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.x propertyPath: m_AnchoredPosition.x
value: 0 value: 40
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668759991436502, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668759991436502, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
...@@ -21906,7 +21906,7 @@ PrefabInstance: ...@@ -21906,7 +21906,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668760453204319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668760453204319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.x propertyPath: m_AnchoredPosition.x
value: 0 value: 44.7
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668760453204319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668760453204319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
...@@ -21930,7 +21930,7 @@ PrefabInstance: ...@@ -21930,7 +21930,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668760497519799, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668760497519799, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.x propertyPath: m_AnchoredPosition.x
value: 0 value: 42.510002
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668760497519799, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668760497519799, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
...@@ -21958,7 +21958,7 @@ PrefabInstance: ...@@ -21958,7 +21958,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668760711245992, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668760711245992, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.x propertyPath: m_AnchoredPosition.x
value: 0 value: 40
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1984668760711245992, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3} - target: {fileID: 1984668760711245992, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
......
...@@ -7,6 +7,7 @@ using MathNet.Numerics.LinearAlgebra.Factorization; ...@@ -7,6 +7,7 @@ using MathNet.Numerics.LinearAlgebra.Factorization;
using MathNet.Numerics.LinearAlgebra; using MathNet.Numerics.LinearAlgebra;
using Unity.Mathematics; using Unity.Mathematics;
using static PointCloudDataReader; using static PointCloudDataReader;
using System.Threading.Tasks;
public class SelectPointsController : MonoBehaviour public class SelectPointsController : MonoBehaviour
{ {
...@@ -44,32 +45,64 @@ public class SelectPointsController : MonoBehaviour ...@@ -44,32 +45,64 @@ public class SelectPointsController : MonoBehaviour
private void SelectPointsHandler(InputAction.CallbackContext context) private void SelectPointsHandler(InputAction.CallbackContext context)
{ {
List<Vector3> selectedPoints = new(); Vector3[] cloudPositions = new Vector3[pointClouds.Count];
foreach (GameObject cloud in pointClouds) Quaternion[] cloudRotations = new Quaternion[pointClouds.Count];
List<Point[]> points = new();
for (int i = 0; i < pointClouds.Count; i++)
{ {
Transform cloudTransform = cloud.transform; cloudPositions[i] = pointClouds[i].transform.position;
Point[] points = cloud.GetComponent<PointCloudDataReader>().PointData; cloudRotations[i] = pointClouds[i].transform.rotation;
for (int i = 0; i < points.Length; i++) points.Add(pointClouds[i].GetComponent<PointCloudDataReader>().PointData);
}
Bounds[] selectionBounds = new Bounds[_blockSelections.Count];
for (int i = 0; i < _blockSelections.Count; i++)
{
selectionBounds[i] = _blockSelections[i].GetComponent<MeshCollider>().bounds;
}
_ = FitPlaneToSelectedPointsAsync(cloudPositions, cloudRotations, points, selectionBounds);
}
private async Task FitPlaneToSelectedPointsAsync(Vector3[] cloudPositions, Quaternion[] cloudRotations, List<Point[]> cloudPoints, Bounds[] selectionBounds)
{
Debug.Log("task");
Task<List<Vector3>> task = Task.Run(() =>
{
Debug.Log("running task");
List<Vector3> selectedPoints = new();
for (int i1 = 0; i1 < cloudPoints.Count; i1++)
{ {
Vector3 point = points[i].position; // GameObject cloud = pointClouds[i1];
point.x *= -1f; // Transform cloudTransform = cloud.transform;
foreach (GameObject blockSelection in _blockSelections) // Point[] points = cloud.GetComponent<PointCloudDataReader>().PointData;
Point[] points = cloudPoints[i1];
for (int i = 0; i < points.Length; i++)
{ {
MeshCollider collider = blockSelection.GetComponent<MeshCollider>(); Vector3 point = points[i].position;
Vector3 ptGlobal = cloudTransform.rotation * point + cloudTransform.position; point.x *= -1f;
if (collider.bounds.Contains(ptGlobal)) // foreach (GameObject blockSelection in _blockSelections)
foreach (Bounds bound in selectionBounds)
{ {
selectedPoints.Add(ptGlobal); // MeshCollider collider = blockSelection.GetComponent<MeshCollider>();
// Vector3 ptGlobal = cloudTransform.rotation * point + cloudTransform.position;
Vector3 ptGlobal = cloudRotations[i1] * point + cloudPositions[i1];
// if (collider.bounds.Contains(ptGlobal))
if (bound.Contains(ptGlobal))
{
selectedPoints.Add(ptGlobal);
}
} }
} }
} }
} Debug.Log("finished collecting points");
CalculatePlane(selectedPoints); return selectedPoints;
});
CalculatePlane(await task);
} }
// source: https://stackoverflow.com/questions/10900141/fast-plane-fitting-to-many-points // source: https://stackoverflow.com/questions/10900141/fast-plane-fitting-to-many-points
private void CalculatePlane(List<Vector3> points) private void CalculatePlane(List<Vector3> points)
{ {
Debug.Log("calculating plane");
if (points.Count < 3) if (points.Count < 3)
{ {
Debug.Log("not enough points to calculate plane"); Debug.Log("not enough points to calculate plane");
...@@ -116,17 +149,18 @@ public class SelectPointsController : MonoBehaviour ...@@ -116,17 +149,18 @@ public class SelectPointsController : MonoBehaviour
Plane plane = new(planeNormal, -d); Plane plane = new(planeNormal, -d);
Debug.Log(plane); Debug.Log(plane);
_debugPoints.Clear(); // _debugPoints.Clear();
for (int i = 0; i < 200; i++) // for (int i = 0; i < 200; i++)
{ // {
Vector3 randomPoint = new(UnityEngine.Random.Range(-8f, 8f), UnityEngine.Random.Range(-8f, 8f), UnityEngine.Random.Range(-8f, 8f)); // Vector3 randomPoint = new(UnityEngine.Random.Range(-8f, 8f), UnityEngine.Random.Range(-8f, 8f), UnityEngine.Random.Range(-8f, 8f));
_debugPoints.Add(ProjectPointOntoPlane(plane, randomPoint)); // _debugPoints.Add(ProjectPointOntoPlane(plane, randomPoint));
} // }
Vector<float> colAvg = G.ColumnSums(); Vector<float> colAvg = G.ColumnSums();
colAvg /= G.RowCount; colAvg /= G.RowCount;
Vector3 pointAvg = new(colAvg[0], colAvg[1], colAvg[2]); Vector3 pointAvg = new(colAvg[0], colAvg[1], colAvg[2]);
SpawnPlane(ProjectPointOntoPlane(plane, pointAvg), planeNormal); SpawnPlane(ProjectPointOntoPlane(plane, pointAvg), planeNormal);
UIController.Instance.NewStatusMessage("Plane calculation completed.");
} }
public GameObject SpawnPlane(Vector3 pos, Vector3 normal) public GameObject SpawnPlane(Vector3 pos, Vector3 normal)
...@@ -193,8 +227,8 @@ public class SelectPointsController : MonoBehaviour ...@@ -193,8 +227,8 @@ public class SelectPointsController : MonoBehaviour
{ {
// CalculateRealPoints(); // CalculateRealPoints();
EditState.Instance.RegisterListener(EditChangeHandler); EditState.Instance.RegisterListener(EditChangeHandler);
SpawnPlane(new Vector3(0, 0, 0), Vector3.left); // SpawnPlane(new Vector3(0, 0, 0), Vector3.left);
SpawnPlane(new Vector3(-1, 0, 0), Vector3.up); // SpawnPlane(new Vector3(-1, 0, 0), Vector3.up);
} }
private void EditChangeHandler() private void EditChangeHandler()
......
...@@ -77,15 +77,15 @@ public class SpawnBlockEvent : MonoBehaviour ...@@ -77,15 +77,15 @@ public class SpawnBlockEvent : MonoBehaviour
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
{ {
GameObject spawnedObject = Instantiate(spawnPrefab, new Vector3(-1.65f, 0.46f, -4.93f), Quaternion.identity); // GameObject spawnedObject = Instantiate(spawnPrefab, new Vector3(-1.65f, 0.46f, -4.93f), Quaternion.identity);
Collider objectCollider = spawnedObject.GetComponent<Collider>(); // Collider objectCollider = spawnedObject.GetComponent<Collider>();
Vector3 adjustment = Vector3.Scale(this.transform.up, objectCollider.bounds.size / 2); // Vector3 adjustment = Vector3.Scale(this.transform.up, objectCollider.bounds.size / 2);
spawnedObject.transform.position += adjustment; // spawnedObject.transform.position += adjustment;
spawnedObject.transform.parent = this.transform; // spawnedObject.transform.parent = this.transform;
// _selectPointsController.AddSelection(spawnedObject); // _selectPointsController.AddSelection(spawnedObject);
// spawnedObject.GetComponent<BlockSelect>().selectPointsController = _selectPointsController; // spawnedObject.GetComponent<BlockSelect>().selectPointsController = _selectPointsController;
ProgramController.Instance.RegisterBlock(spawnedObject); // ProgramController.Instance.RegisterBlock(spawnedObject);
} }
} }
v -1.15 0.46 -4.43 v 4.790933 0.0005001426 3.249483
v -2.15 0.46 -4.43 v 4.190578 0.0005001426 3.249483
v -1.15 1.46 -4.43 v 4.790933 5.129273 3.249483
v -2.15 1.46 -4.43 v 4.190578 5.129273 3.249483
v -1.15 1.46 -5.43 v 4.790933 5.129273 2.379545
v -2.15 1.46 -5.43 v 4.190578 5.129273 2.379545
v -1.15 0.46 -5.43 v 4.790933 0.0005001426 2.379545
v -2.15 0.46 -5.43 v 4.190578 0.0005001426 2.379545
v -1.15 1.46 -4.43 v 4.790933 5.129273 3.249483
v -2.15 1.46 -4.43 v 4.190578 5.129273 3.249483
v -1.15 1.46 -5.43 v 4.790933 5.129273 2.379545
v -2.15 1.46 -5.43 v 4.190578 5.129273 2.379545
v -1.15 0.46 -5.43 v 4.790933 0.0005001426 2.379545
v -1.15 0.46 -4.43 v 4.790933 0.0005001426 3.249483
v -2.15 0.46 -4.43 v 4.190578 0.0005001426 3.249483
v -2.15 0.46 -5.43 v 4.190578 0.0005001426 2.379545
v -2.15 0.46 -4.43 v 4.190578 0.0005001426 3.249483
v -2.15 1.46 -4.43 v 4.190578 5.129273 3.249483
v -2.15 1.46 -5.43 v 4.190578 5.129273 2.379545
v -2.15 0.46 -5.43 v 4.190578 0.0005001426 2.379545
v -1.15 0.46 -5.43 v 4.790933 0.0005001426 2.379545
v -1.15 1.46 -5.43 v 4.790933 5.129273 2.379545
v -1.15 1.46 -4.43 v 4.790933 5.129273 3.249483
v -1.15 0.46 -4.43 v 4.790933 0.0005001426 3.249483
f 1 3 4 f 1 3 4
f 1 4 2 f 1 4 2
f 9 5 6 f 9 5 6
...@@ -34,15 +34,9 @@ f 17 18 19 ...@@ -34,15 +34,9 @@ f 17 18 19
f 17 19 20 f 17 19 20
f 21 22 23 f 21 22 23
f 21 23 24 f 21 23 24
v 5.960464E-08 -0.5 -0.5000001 v 5.100156 -0.02601445 14.33806
v -5.960464E-08 -0.5 0.5000001 v 7.014131 0.03212595 14.30453
v 5.960464E-08 0.5 -0.5000001 v 5.094431 2.09043 14.34149
v -5.960464E-08 0.5 0.5000001 v 6.875519 2.140711 14.31028
f 25 28 26 f 25 28 26
f 28 25 27 f 28 25 27
v -1.5 5.960464E-08 0.5000001
v -0.5 5.960464E-08 0.5000001
v -1.5 -5.960464E-08 -0.5000001
v -0.5 -5.960464E-08 -0.5000001
f 29 32 30
f 32 29 31
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment