26 private Matrix4x4? _overrideMatrix;
28 get {
return _overrideMatrix; }
29 set { _overrideMatrix = value; }
35 : this(localCircle.
center, localCircle.direction, localCircle.
radius,
45 this.transform = (transformSource ==
null ? null : transformSource.transform);
47 this.direction = direction;
49 this._overrideMatrix =
null;
78 return Matrix4x4.Translate(
center);
91 return this.
matrix.MultiplyPoint3x4(Vector3.zero);
97 #region Debug Rendering
100 Matrix4x4 m = Matrix4x4.identity;
111 radialStartDirection: direction.
Vec().GetPerpendicular(),
113 fractionOfCircleToDraw: 1f,
114 numCircleSegments: 44
121 if (color !=
null) { drawer.
color = color.Value; }
125 radialStartDirection: direction.
Vec().GetPerpendicular(),
127 fractionOfCircleToDraw: 1f,
128 numCircleSegments: 44,
130 Matrix4x4.identity :
transform.localToWorldMatrix,
131 lineDrawingFunc: drawer.
Line
135 public void DrawLines(Action<Vector3, Vector3> lineDrawingFunc) {
139 radialStartDirection: direction.
Vec().GetPerpendicular(),
141 fractionOfCircleToDraw: 1f,
142 numCircleSegments: 44,
144 Matrix4x4.identity :
transform.localToWorldMatrix,
145 lineDrawingFunc: lineDrawingFunc
152 float radius,
int numCircleSegments,
153 Action<Vector3, Vector3> lineDrawingFunc,
154 float fractionOfCircleToDraw = 1.0f,
156 Vector3? radialStartDirection =
null) {
158 matrix = Matrix4x4.identity;
160 if (!radialStartDirection.HasValue) {
161 radialStartDirection = normal.GetPerpendicular();
164 normal = normal.normalized;
165 Vector3 radiusVector = radialStartDirection.Value.normalized *
radius;
167 int numSegmentsToDraw = (int)(numCircleSegments * fractionOfCircleToDraw);
168 Quaternion rotator = Quaternion.AngleAxis(360f / numCircleSegments, normal);
169 for (
int i = 0; i < numSegmentsToDraw; i++) {
170 nextVector = rotator * radiusVector;
175 radiusVector = nextVector;
197 this.numPoints = Mathf.Max(3,
numPoints);
199 this.startRadiusVector = ((Vector3)
circle.direction).GetPerpendicular()
201 this.rotator = Quaternion.AngleAxis(360f /
numPoints,
circle.direction);
202 this.radiusVector =
null;
223 numLines = Mathf.Max(1, numLines);
263 public static class CircleExtensions {
265 public static Vector3 GetPerpendicular(
this Vector3 v) {
266 return Utils.Perpendicular(v);
UnityEngine.Component Component
Simple drawing interface abstraction (intended for debug drawing, not production!) with statically-ac...
void Line(Vector3 a, Vector3 b)
Color color
Calls the setColor delegate.
void DrawWireArc(Vector3 center, Vector3 normal, Vector3 radialStartDirection, float radius, float fractionOfCircleToDraw, int numCircleSegments=16)
void PushMatrix()
Saves the current gizmo matrix to the gizmo matrix stack.
void PopMatrix()
Restores the current gizmo matrix from the gizmo matrix stack.
Matrix4x4 matrix
Sets or gets the matrix used to transform all gizmos.
UnityEngine.Rect UnityRect
CirclePointEnumerator(Circle circle, int numPoints)
Vector3 startRadiusVector
CirclePointEnumerator GetEnumerator()
CircleSegmentEnumerator GetEnumerator()
CirclePointEnumerator points
CircleSegmentEnumerator(Circle circle, int numLines)
Vector3? lastPointReturned
Circle(Vector3 center=default(Vector3), Direction3 direction=default(Direction3), float radius=0.5f, Matrix4x4? overrideMatrix=null)
Circle(LocalCircle localCircle, Transform withTransform)
void DrawLines(Action< Vector3, Vector3 > lineDrawingFunc)
void Draw(Drawer drawer, Color? color=null)
Circle(float radius=0.5f, Component transformSource=null)
CirclePointEnumerator Points(int numPoints)
Vector3 position
The world position of the center of this Circle (read only). This is dependent on the state of its Tr...
Matrix4x4 matrix
Local-to-world matrix for this Circle.
CircleSegmentEnumerator Segments(int numLines)
Circle(Vector3 center=default(Vector3), Direction3 direction=default(Direction3), float radius=0.5f, Transform transform=null)
void DrawRuntimeGizmos(RuntimeGizmoDrawer drawer)
Circle(Vector3 center=default(Vector3), Direction3 direction=default(Direction3), float radius=0.5f, Component transformSource=null)
Matrix4x4? overrideMatrix
static void DrawWireArc(Vector3 center, Vector3 normal, float radius, int numCircleSegments, Action< Vector3, Vector3 > lineDrawingFunc, float fractionOfCircleToDraw=1.0f, Matrix4x4? matrix=null, Vector3? radialStartDirection=null)
A struct very similar to Vector3, but that prevents itself from ever being converted to Vector3....
Vector3 Vec()
Explicitly converts this Direction3 to a Vector3.