public void Paint(Vector3 startPosition, Vector3 endPosition) { if (tree.IsReady == true && painter.IsReady == true) { var start = lockedGameObject.transform.InverseTransformPoint(startPosition); var end = lockedGameObject.transform.InverseTransformPoint(endPosition); if (passThrough == true) { var results = tree.FindBetweenAll(start, end); for (var i = results.Count - 1; i >= 0; i--) { Paint(results[i].GetUV(currentCoord)); } } else { var result = tree.FindBetweenNearest(start, end); if (result != null) { Paint(result.GetUV(currentCoord)); } } } }
// This paints the nearest triangles between the input positions // NOTE: This method requires you to call SetMesh first public void PaintBetweenNearest(Vector3 startPosition, Vector3 endPosition, P3D_CoordType coord = P3D_CoordType.UV1) { if (CanMeshPaint == true) { startPosition = transform.InverseTransformPoint(startPosition); endPosition = transform.InverseTransformPoint(endPosition); Paint(tree.FindBetweenNearest(startPosition, endPosition), coord); } }
public static void ScenePaintBetweenNearest(P3D_Brush brush, Vector3 startPosition, Vector3 endPosition, int layerMask = -1, int groupMask = -1) { float num = Vector3.Distance(startPosition, endPosition); if (num != 0f) { P3D_Paintable paintable = null; P3D_Result result = null; for (int i = AllPaintables.Count - 1; i >= 0; i--) { P3D_Paintable paintable2 = AllPaintables[i]; if (P3D_Helper.IndexInMask(paintable2.gameObject.layer, layerMask)) { P3D_Tree tree = paintable2.GetTree(); if (tree != null) { Transform transform = paintable2.transform; Vector3 startPoint = transform.InverseTransformPoint(startPosition); P3D_Result result2 = tree.FindBetweenNearest(startPoint, startPoint + ((transform.InverseTransformPoint(endPosition) - startPoint).normalized * num)); if (result2 != null) { paintable = paintable2; result = result2; num *= result2.Distance01; } } } } if ((paintable != null) && (result != null)) { paintable.Paint(brush, result, groupMask); } } }
// This will paint the first surface between the start and end positions in world space public void PaintBetweenNearest(P3D_Brush brush, Vector3 startPosition, Vector3 endPosition, int groupMask = -1) { if (CheckTree() == true) { var start = transform.InverseTransformPoint(startPosition); var end = transform.InverseTransformPoint(endPosition); var results = tree.FindBetweenNearest(start, end); Paint(brush, results, groupMask); } }
public static void ScenePaintBetweenNearestRaycast(P3D_Brush brush, Vector3 startPosition, Vector3 endPosition, int layerMask = -1, int groupMask = -1) { float maxDistance = Vector3.Distance(startPosition, endPosition); if (maxDistance != 0f) { P3D_Paintable component = null; RaycastHit hitInfo = new RaycastHit(); P3D_Result result = null; if (Physics.Raycast(startPosition, endPosition - startPosition, out hitInfo, maxDistance, layerMask)) { component = hitInfo.collider.GetComponent <P3D_Paintable>(); maxDistance = hitInfo.distance; } for (int i = AllPaintables.Count - 1; i >= 0; i--) { P3D_Paintable paintable2 = AllPaintables[i]; if (P3D_Helper.IndexInMask(paintable2.gameObject.layer, layerMask)) { P3D_Tree tree = paintable2.GetTree(); if (tree != null) { Transform transform = paintable2.transform; Vector3 startPoint = transform.InverseTransformPoint(startPosition); P3D_Result result2 = tree.FindBetweenNearest(startPoint, startPoint + ((transform.InverseTransformPoint(endPosition) - startPoint).normalized * maxDistance)); if (result2 != null) { component = paintable2; result = result2; maxDistance *= result2.Distance01; } } } } if (component != null) { if (result != null) { component.Paint(brush, result, groupMask); } else { component.Paint(brush, hitInfo, groupMask); } } } }