public void drawSegment() { List <Vector2> points = new List <Vector2> (); float step = (endAngle - startAngle) / (float)vertexes; for (int i = 0; i < vertexes; i++) { Vector2 point = MathHelper.getPointPositionOnCircle(Vector2.zero, radius1, startAngle + 90.0f + i * step); points.Add(point); } //curve float radiusCurve1 = radius1; float radiusCurve2 = radius2; Vector2 curve1Point1 = points.Last(); Vector2 curve1Point2 = MathHelper.getPointPositionOnCircle(Vector2.zero, radius2, startAngle + 90.0f + (vertexes - 1) * step); Vector2 tangentCurve1A = MathHelper.getPointPositionOnCircle(Vector2.zero, radiusCurve1, startAngle + 90.0f + endAngle + cubicCurveOffsetAngle); Vector2 tangentCurve1B = MathHelper.getPointPositionOnCircle(Vector2.zero, radiusCurve2, startAngle + 90.0f + endAngle + cubicCurveOffsetAngle); float curveStep = 1.0f / cubicCurvePointsCount; for (float i = curveStep; i < 1.0f; i += curveStep) { points.Add(MathHelper.GetPointOnCubicCurve(curve1Point1, curve1Point2, tangentCurve1A, tangentCurve1B, i)); } // for (int i = vertexes - 1; i >= 0; i--) { Vector2 point = MathHelper.getPointPositionOnCircle(Vector2.zero, radius2, startAngle + 90.0f + i * step); points.Add(point); } //curve Vector2 curve2Point1 = points.Last(); Vector2 curve2Point2 = MathHelper.getPointPositionOnCircle(Vector2.zero, radius1, startAngle + 90.0f); Vector2 tangentCurve2A = MathHelper.getPointPositionOnCircle(Vector2.zero, radiusCurve1, startAngle + 90.0f - cubicCurveOffsetAngle); Vector2 tangentCurve2B = MathHelper.getPointPositionOnCircle(Vector2.zero, radiusCurve2, startAngle + 90.0f - cubicCurveOffsetAngle); for (float i = 1.0f - curveStep; i >= curveStep; i -= curveStep) { points.Add(MathHelper.GetPointOnCubicCurve(curve2Point2, curve2Point1, tangentCurve2A, tangentCurve2B, i)); } // m_shape = new Core.Shape(points); var mesh = Core.Utils.ShapeCreator.CreateMesh(m_shape, Color.white, true, 30.0f, 0.1f); m_meshFilter.mesh = mesh; }
public void build() { m_shape = new Core.Shape(); foreach (var shape in m_addSegments) { m_shape = m_shape + shape.getShapeWithObjPosition(); } foreach (var shape in m_subSegments) { shape.getShapeWithObjPosition(); m_shape = m_shape - shape.getShapeWithObjPosition(); } var mesh = Core.Utils.ShapeCreator.CreateMesh(m_shape, Color.white, true, 30.0f, 0.1f); m_meshFilter.mesh = mesh; }
public Core.Shape getShapeWithObjPosition() { var points = new List <Vector2>(m_shape.vectorPoints); for (int i = 0; i < points.Count; i++) { var point = points [i]; point = (Vector2)GizmoUtils.RotatePointAroundPivot(point, Vector3.zero, gameObject.transform.localRotation.eulerAngles); point = point + (Vector2)gameObject.transform.localPosition; // point = (Vector2)GizmoUtils.RotatePointAroundPivot (point, ); points [i] = point; } var shape = new Core.Shape(points); return(shape); }
public void drawSegment() { List <Vector2> points = new List <Vector2> (); Vector2 pointLineStart = Vector2.zero; Vector2 pointLineStart1 = pointLineStart + new Vector2(0.0f, lineWidthStart / 2.0f); Vector2 pointLineStart2 = pointLineStart - new Vector2(0.0f, lineWidthStart / 2.0f); Vector2 pointLineEnd = pointLineStart + new Vector2(lineLength, 0.0f); Vector2 pointLineEnd1 = pointLineEnd + new Vector2(0.0f, lineWidthEnd / 2.0f); Vector2 pointLineEnd2 = pointLineEnd - new Vector2(0.0f, lineWidthEnd / 2.0f); points.Add(pointLineStart1); points.Add(pointLineEnd1); points.Add(pointLineEnd2); points.Add(pointLineStart2); // //curve // float radiusCurve1 = radius1; // float radiusCurve2 = radius2; // // Vector2 curve1Point1 = points.Last (); // Vector2 curve1Point2 = MathHelper.getPointPositionOnCircle (Vector2.zero, radius2, startAngle+90.0f + (vertexes -1) * step); // // Vector2 tangentCurve1A = MathHelper.getPointPositionOnCircle (Vector2.zero, radiusCurve1, startAngle + 90.0f + endAngle + cubicCurveOffsetAngle); // Vector2 tangentCurve1B = MathHelper.getPointPositionOnCircle (Vector2.zero, radiusCurve2, startAngle + 90.0f + endAngle + cubicCurveOffsetAngle); // // float curveStep = 1.0f/cubicCurvePointsCount; // for (float i = curveStep; i < 1.0f; i += curveStep) { // points.Add (MathHelper.GetPointOnCubicCurve(curve1Point1, curve1Point2, tangentCurve1A, tangentCurve1B, i)); // } // // m_shape = new Core.Shape(points); var mesh = Core.Utils.ShapeCreator.CreateMesh(m_shape, Color.white, true, 30.0f, 0.1f); m_meshFilter.mesh = mesh; }
public void drawSegment() { List <Vector2> points = new List <Vector2> (); float step = (endAngle - startAngle) / (float)vertexes; for (int i = 0; i < vertexes; i++) { Vector2 point = MathHelper.getPointPositionOnCircle(Vector2.zero, radius1, startAngle + 90.0f + i * step); points.Add(point); } for (int i = vertexes - 1; i >= 0; i--) { Vector2 point = MathHelper.getPointPositionOnCircle(Vector2.zero, radius2, startAngle + 90.0f + i * step); points.Add(point); } m_shape = new Core.Shape(points).OutlineContour(lineWidth); var mesh = Core.Utils.ShapeCreator.CreateMesh(m_shape, Color.white, true); m_meshFilter.mesh = mesh; }