
Incorporate Sensor Plots
Reticle on Sphere
using UnityEngine;
using System.Collections;
using ProceduralToolkit;
public class Vertical_Plot : MonoBehaviour
{
MicrophoneInput micInput;
Mesh mesh;
//[SerializeField]
//Material _material;
//MaterialPropertyBlock _block;
public int numPlotLines = 1024;
[Range(1f, 200f)]
public float scale_plot;
Vector3 vRight, vUp,v0,v1,v2,v3;
float xScale;//scale amp to plot
public Color graphColor;
private MeshDraft mDraft;
public MeshDraft MDraft
{
get { return mDraft; }
}
void Start()
{
MeshFilter mf = GetComponent<MeshFilter>();
if (mf.mesh == null)
mf.mesh = new Mesh();
mesh = mf.mesh;
mDraft = new MeshDraft();
//_block = new MaterialPropertyBlock();
micInput = GetComponent<MicrophoneInput>();
xScale = 450f;
vRight = transform.right;
vUp = transform.up;
initPlot();
ToMeshInternal();
}
float accumTime = 0f;
private void ToMeshInternal()
{
mesh.Clear();
mesh.vertices = mDraft.vertices.ToArray();
mesh.triangles = mDraft.triangles.ToArray();
mesh.normals = mDraft.normals.ToArray();
mesh.uv = mDraft.uv.ToArray();
mesh.colors = mDraft.colors.ToArray();
}
//951
//581
//1532
//x extent 475
//x abs 450;
private void initPlot()
{
float dy = 1532f/numPlotLines;
Vector3 vDeltY = new Vector3(0, dy, 0);
Vector3 vDeltYHalf = vDeltY / 2;
float phiRatio = 391f / 1024f;
int cycleOnce = (int)(phiRatio * numPlotLines);
float sampAmp = 0;
Vector3 posRideY = Vector3.zero + vDeltY/2f;
int count = 0;
while(count < numPlotLines)
{
sampAmp = 0.5f + 0.5f * Mathf.Sin(2f*Mathf.PI*(float)count / (float)numPlotLines);//test
v0 = posRideY - sampAmp * xScale * vRight - vDeltYHalf;
v1 = posRideY - sampAmp * xScale * vRight + vDeltYHalf;
v2 = posRideY + sampAmp * xScale * vRight + vDeltYHalf;
v3 = posRideY + sampAmp * xScale * vRight - vDeltYHalf;
AddQuad(v0, v1, v2, v3, graphColor);
if (++count == cycleOnce) posRideY -= vDeltY * numPlotLines;
posRideY += vDeltY;
}
}
void setBucketQuad(int idx, float val)
{
if (idx < MDraft.vertices.Count - 4)
{
int id4 = idx * 4;
v0 = mDraft.vertices[id4];
v1 = mDraft.vertices[id4 + 1];
v2 = mDraft.vertices[id4 + 2];
v3 = mDraft.vertices[id4 + 3];
v0.x = v1.x = -val * xScale* scale_plot;
v2.x = v3.x = val * xScale * scale_plot;
mDraft.vertices[id4] = v0;
mDraft.vertices[id4 + 1] = v1;
mDraft.vertices[id4 + 2] = v2;
mDraft.vertices[id4 + 3] = v3;
}
}
// 1 2
// 0 3
void Update()
{
accumTime += Time.deltaTime;
int numSampsDisplay = (int)(micInput.echoTime*micInput.globalSampleRate*2f);
int sampsPerBucket = (int)((float)numSampsDisplay / (float)numPlotLines);
int n = 0;
int nScan = micInput.Record_Head;
float accumSamp = 0f;
float bucketVal;
int bIdx = 0;
while(n < numSampsDisplay-1)
{
for (int i = 0; i < sampsPerBucket; i++)
{
accumSamp += Mathf.Abs(micInput.EchoBuffer[nScan]);
n++;
if (--nScan < 0) nScan = micInput.EchoBuffer.Length - 1;
}
bucketVal = accumSamp / (float)sampsPerBucket;
accumSamp = 0f;
setBucketQuad(bIdx, bucketVal);
if (++bIdx > numPlotLines - 1) break;
}
ToMeshInternal();
//ToMeshInternal();
//Vector3 vH0 = a12horns.v12HORN_Norms[0];
//Quaternion q;
//for (int i = 0; i < 12; i++)
//{
// //q = Quaternion.FromToRotation(vH0, a12horns.v12HORN_Norms[i]);
// q = Quaternion.LookRotation(a12horns.v12HORN_Norms[i]);
// //print(q.ToString());
// Graphics.DrawMesh(GetComponent<MeshFilter>().mesh, Vector3.zero, q, _material, gameObject.layer, null, 0, _block);
//}
}
public int GetNumVertices()
{
return mDraft.vertices.Count;
}
public Vector3 GetVertex(int i)
{
return mDraft.vertices[i];
}
public void SetVertex(int i, Vector3 v)
{
mDraft.vertices[i] = v;
}
public void MeshDraft_ToMesh()
{
if (mDraft != null)
{
GetComponent<MeshFilter>().mesh = mDraft.ToMesh();
}
}
public void initAddMeshDraft(MeshDraft md)
{
MeshFilter mf = GetComponent<MeshFilter>();
if (mf.mesh == null)
mf.mesh = new Mesh();
mesh = mf.mesh;
mDraft = new ArgosMeshDraft();
if (mDraft != null)
{
mDraft.Add(md);
GetComponent<MeshFilter>().mesh = mDraft.ToMesh();
}
}
public void AddMeshDraft(MeshDraft md)
{
if (mDraft != null)
{
mDraft.Add(md);
GetComponent<MeshFilter>().mesh = mDraft.ToMesh();
}
}
public void AddMeshDraft_Only(MeshDraft md)
{
if (mDraft != null)
{
mDraft.Add(md);
}
}
public void AddQuad(Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3)
{
if (mDraft != null)
{
mDraft.Add(MeshDraft.Quad(v0, v1, v2, v3));
}
}
public void AddQuad(Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3, Color col)
{
if (mDraft != null)
{
mDraft.Add(MeshDraft.Quad(v0, v1, v2, v3, col));
}
}
}


