// This call is required by the Windows Form Designer. public Pach_Mapping_Control() { InitializeComponent(); this.End_Time_Control.Value = CO_TIME.Value; Create_Map(false); Update_Scale(); Octave.SelectedIndex = 0; Instance = this; FC = new ForCall(Step_Forward); TC = new T_Call(Update_T); }
private void Calculate_Click(object sender, System.EventArgs e) { FC = new ForCall(Forw_proc); Polygon_Scene Rm = PachTools.Get_Poly_Scene((double)Rel_Humidity.Value, (double)Air_Temp.Value, (double)Air_Pressure.Value, Atten_Method.SelectedIndex, EdgeFreq.Checked); if (!Rm.Complete) return; if (P == null) P = new WaveConduit(scale, new double[2] { (double)this.Param_Min.Value, (double)this.Param_Max.Value }); Rhino.Geometry.Point3d[] Src = PachTools.GetSource(); Rhino.Geometry.Point3d[] Rec = new Rhino.Geometry.Point3d[0];//PachTools.GetReceivers().ToArray(); if (Src.Length < 1 || Rm == null) Rhino.RhinoApp.WriteLine("Model geometry not specified... Exiting calculation..."); Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type s_type = Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Dirac_Pulse; switch (SourceSelect.Text) { case "Dirac Pulse": s_type = Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Dirac_Pulse; break; case "Sine Wave": s_type = Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Tone; break; case "Sine Pulse": s_type = Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Pulse; break; } Numeric.TimeDomain.Signal_Driver_Compact SD = new Numeric.TimeDomain.Signal_Driver_Compact(s_type, (double)Frequency_Selection.Value, 1, PachTools.GetSource()); Numeric.TimeDomain.Microphone_Compact Mic = new Numeric.TimeDomain.Microphone_Compact(Rec); FDTD = new Numeric.TimeDomain.Acoustic_Compact_FDTD(Rm, ref SD, ref Mic, (double)Freq_Max.Value, (double)CO_TIME.Value); M = new Rhino.Geometry.Mesh[3][] { FDTD.m_templateX, FDTD.m_templateY, FDTD.m_templateZ }; P.SetColorScale(new Pach_Graphics.HSV_colorscale(Param_Scale.Height, Param_Scale.Width, 0, 4.0 / 3.0, 1, 0, 1, 1, false, 12), new double[] { (double)Param_Min.Value, (double)Param_Max.Value }); P.Enabled = true; if (AxisSelect.SelectedIndex == 0) Pos_Select.Maximum = FDTD.xDim - 1; else if (AxisSelect.SelectedIndex == 1) Pos_Select.Maximum = FDTD.yDim - 1; else if (AxisSelect.SelectedIndex == 2) Pos_Select.Maximum = FDTD.zDim - 1; if (Map_Planes.Items.Count == 0) { Pos_Select.Value = Pos_Select.Maximum / 2; AddPlane_Click(new object(), new EventArgs()); } Loop_Click(new object(), new EventArgs()); }
private void Flip_Toggle_Click(object sender, EventArgs e) { Update_Scale(); if (Flip_Toggle.Text == "Flip") { this.Flip_Toggle.Text = "Pause"; FC = new ForCall(Step_Forward); TC = new T_Call(Update_T); System.Threading.ParameterizedThreadStart St = new System.Threading.ParameterizedThreadStart(delegate { Flip_Forward(); }); T = new System.Threading.Thread(St); T.Start(); } else { Flip_Toggle.Text = "Flip"; T.Abort(); } }
private void CalculateSim_Click(object sender, EventArgs e) { FC = new ForCall(Forw_proc); Polygon_Scene Rm = PachTools.Get_Poly_Scene((double)Rel_Humidity.Value, (double)Air_Temp.Value, (double)Air_Pressure.Value, Atten_Method.SelectedIndex, EdgeFreq.Checked); if (!Rm.Complete) { return; } Rhino.Geometry.Point3d[] Src = PachTools.GetSource(); Rhino.Geometry.Point3d[] Rec = PachTools.GetReceivers().ToArray(); if (Src.Length < 1 || Rm == null) { Rhino.RhinoApp.WriteLine("Model geometry not specified... Exiting calculation..."); } Numeric.TimeDomain.Microphone_Compact Mic = new Numeric.TimeDomain.Microphone_Compact(Rec); double fs = 137.8125 * Math.Pow(2, Selected_Extent.SelectedIndex); samplefrequency = fs; double df = 1d / ((double)CO_TIME.Value / 1000); Numeric.TimeDomain.Signal_Driver_Compact SD = new Numeric.TimeDomain.Signal_Driver_Compact(Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Pulse, df, 1, PachTools.GetSource()); FDTD = new Numeric.TimeDomain.Acoustic_Compact_FDTD(Rm, ref SD, ref Mic, fs, (double)CO_TIME.Value); for (double f = df; f < fs; f += df) { FDTD.reset(f, Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Pulse); FDTD.RuntoCompletion(); Frequencies.Items.Add(string.Format("{0} Hz.", f), true); } Receiver_Choice.Text = "0"; result_signals = Mic.Recordings; }
private void Preview_Click(object sender, EventArgs e) { Loop.Enabled = false; ForwButton.Enabled = false; BackButton.Enabled = false; PachydermAc_PlugIn plugin = PachydermAc_PlugIn.Instance; if (PreviewDisplay != null) { PreviewDisplay.Enabled = false; } max = (int)(Frame_Rate.Value * Seconds.Value); Point3d[] SPT; if (!plugin.SourceOrigin(out SPT)) { Rhino.RhinoApp.WriteLine("Model geometry not specified... Exiting calculation..."); return; } if (T != null && T.ThreadState == System.Threading.ThreadState.Running) { T.Abort(); } PreviewDisplay = null; Pach_GetModel_Command Model = Pach_GetModel_Command.Instance; if (object.ReferenceEquals(RoomSelection.SelectedItem, "Use Entire Model")) { Model.Rel_Humidity = 50; //(double)Rel_Humidity.Value; Model.Air_Temp = (double)Air_Temp.Value; Model.Atm_pressure = 1000; //(double)Air_Pressure.Value; Model.Atten_Choice = 0; //Atten_Method.SelectedIndex; Rhino.RhinoApp.RunScript("GetModel", false); } plugin.Source(out Source); if (MeshWave) { for (int i = 0; i < Source.Length; i++) { Source[i] = new GeodesicMeshSource(plugin.GetSourceSWL(i), Source[i].Origin(), (int)RT_Count.Value, i); } } ParticleRays[] RTParticles = new ParticleRays[Source.Length]; List <Point3d> L = new List <Point3d>(); for (int i = 0; i < Source.Length; i++) { L.Add(Source[i].Origin()); } for (int j = 0; j < Source.Length; j++) { if (plugin.Geometry_Spec() == 0) { Model.Ret_NURBS_Scene.partition(L); RTParticles[j] = new ParticleRays(Source[j], Model.Ret_NURBS_Scene, (int)RT_Count.Value, CutOffLength()); } else { Model.Ret_Mesh_Scene.partition(L); RTParticles[j] = new ParticleRays(Source[j], Model.Ret_Mesh_Scene, (int)RT_Count.Value, CutOffLength()); } RTParticles[j].Begin(); } PreviewDisplay = new WaveConduit(RTParticles, scale, new double[2] { (double)Param_Min.Value, (double)Param_Max.Value }, Model.Ret_Mesh_Scene); ForwButton.Enabled = true; BackButton.Enabled = true; Loop.Enabled = true; Loop.Text = "Stop"; FC = new ForCall(Forw_proc); System.Threading.ParameterizedThreadStart St = new System.Threading.ParameterizedThreadStart(delegate { LoopStart((int)(this.Frame_Rate.Value * Seconds.Value)); }); T = new System.Threading.Thread(St); T.Start(); }
private void Calculate_Click(object sender, System.EventArgs e) { FC = new ForCall(Forw_proc); Polygon_Scene Rm = RC_PachTools.Get_Poly_Scene((double)Rel_Humidity.Value, false, (double)Air_Temp.Value, (double)Air_Pressure.Value, Atten_Method.SelectedIndex, EdgeFreq.Checked); if (!Rm.Complete) { return; } if (P == null) { P = new WaveConduit(scale, new double[2] { (double)this.Param_Min.Value, (double)this.Param_Max.Value }); } Hare.Geometry.Point[] Src = RC_PachTools.GetSource(); Hare.Geometry.Point[] Rec = new Hare.Geometry.Point[0];//PachTools.GetReceivers().ToArray(); if (Src.Length < 1 || Rm == null) { Rhino.RhinoApp.WriteLine("Model geometry not specified... Exiting calculation..."); } Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type s_type = Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Dirac_Pulse; switch (SourceSelect.Text) { case "Dirac Pulse": s_type = Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Dirac_Pulse; break; case "Sine Wave": s_type = Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Tone; break; case "Sine Pulse": s_type = Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Pulse; break; } Numeric.TimeDomain.Signal_Driver_Compact SD = new Numeric.TimeDomain.Signal_Driver_Compact(s_type, (double)Frequency_Selection.Value, 1, RC_PachTools.GetSource()); Numeric.TimeDomain.Microphone_Compact Mic = new Numeric.TimeDomain.Microphone_Compact(Rec); FDTD = new Numeric.TimeDomain.Acoustic_Compact_FDTD_RC(Rm, ref SD, ref Mic, (double)Freq_Max.Value, (double)CO_TIME.Value, Numeric.TimeDomain.Acoustic_Compact_FDTD.GridType.Freefield, null, 0, 0, 0); //FDTD = new Numeric.TimeDomain.Acoustic_Compact_FDTD(Rm, ref SD, ref Mic, (double)Freq_Max.Value, (double)CO_TIME.Value, Numeric.TimeDomain.Acoustic_Compact_FDTD.GridType.ScatteringLab, new Hare.Geometry.Point(0,0,0), 8, 6, 5); M = new Rhino.Geometry.Mesh[3][] { FDTD.m_templateX, FDTD.m_templateY, FDTD.m_templateZ }; P.SetColorScale(new Pach_Graphics.HSV_colorscale(Param_Scale.Height, Param_Scale.Width, 0, 4.0 / 3.0, 1, 0, 1, 1, false, 12), new double[] { (double)Param_Min.Value, (double)Param_Max.Value }); P.Enabled = true; if (AxisSelect.SelectedIndex == 0) { Pos_Select.Maximum = FDTD.xDim - 1; } else if (AxisSelect.SelectedIndex == 1) { Pos_Select.Maximum = FDTD.yDim - 1; } else if (AxisSelect.SelectedIndex == 2) { Pos_Select.Maximum = FDTD.zDim - 1; } if (Map_Planes.Items.Count == 0) { Pos_Select.Value = Pos_Select.Maximum / 2; AddPlane_Click(new object(), new EventArgs()); } Loop_Click(new object(), new EventArgs()); }
private void CalculateSim_Click(object sender, EventArgs e) { EigenFrequencies.Items.Clear(); Chosenfreq = 0; FC = new ForCall(Forw_proc); Polygon_Scene Rm = RC_PachTools.Get_Poly_Scene((double)Rel_Humidity.Value, false, (double)Air_Temp.Value, (double)Air_Pressure.Value, Atten_Method.SelectedIndex, EdgeFreq.Checked); if (!Rm.Complete) { return; } Hare.Geometry.Point[] Src = RC_PachTools.GetSource(); List <Hare.Geometry.Point> Rec = RC_PachTools.GetReceivers(); if (Src.Length < 1 || Rm == null) { Rhino.RhinoApp.WriteLine("Model geometry not specified... Exiting calculation..."); } Numeric.TimeDomain.Microphone_Compact Mic = new Numeric.TimeDomain.Microphone_Compact(Rec.ToArray()); double fs = 62.5 * Utilities.Numerics.rt2 * Math.Pow(2, Eigen_Extent.SelectedIndex); //samplefrequency = fs; Numeric.TimeDomain.Signal_Driver_Compact SD = new Numeric.TimeDomain.Signal_Driver_Compact(Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Pulse, 1000, 1, RC_PachTools.GetSource()); FDTD = new Numeric.TimeDomain.Acoustic_Compact_FDTD_RC(Rm, ref SD, ref Mic, fs, (double)CO_TIME.Value, Numeric.TimeDomain.Acoustic_Compact_FDTD.GridType.Freefield, null, 0, 0, 0); FDTD.RuntoCompletion(); samplefrequency = FDTD.SampleFrequency; Mic.reset(); result_signals = Mic.Recordings[0]; //System.Numerics.Complex[] source_response = SD.Frequency_Response(result_signals[0].Length); //double f_limit = 0.8 * fs / samplefrequency * result_signals[0].Length; //double f_top = 1.3 * f_limit; //double dpi = Utilities.Numerics.PiX2 / (f_top - f_limit); //for (int c = 0; c < result_signals.Length; c++) //{ // System.Numerics.Complex[] result_response = Audio.Pach_SP.FFT_General(result_signals[c],0); // Array.Resize(ref result_response, result_response.Length / 2); // for (int s = 0; s < result_response.Length; s++) // { // System.Numerics.Complex mod = source_response[s].Magnitude; // if (s > f_limit) mod /= System.Numerics.Complex.Pow(source_response[s], (.5 * Math.Tanh((s-f_limit) * dpi) + 0.5)); // result_response[s] /= mod.Magnitude; // } // result_signals[c] = Audio.Pach_SP.IFFT_Real_General(Audio.Pach_SP.Mirror_Spectrum(result_response), 0); //} //Find Eigenfrequencies if (EigenFrequencies.Items.Count > 0) { return; } EigenFrequencies.Items.Clear(); Find_EigenFrequencies(); Receiver_Choice.Items.Clear(); for (int i = 0; i < result_signals.Length; i++) { Receiver_Choice.Items.Add(i); } Time = new double[result_signals[0].Length]; for (int i = 0; i < Time.Length; i++) { Time[i] = (double)i / samplefrequency; } Receiver_Choice.SelectedIndex = 0; Receiver_Choice.Update(); }
private void CalculateSim_Click(object sender, EventArgs e) { EigenFrequencies.Items.Clear(); Chosenfreq = 0; FC = new ForCall(Forw_proc); Polygon_Scene Rm = PachTools.Get_Poly_Scene((double)Rel_Humidity.Value, (double)Air_Temp.Value, (double)Air_Pressure.Value, Atten_Method.SelectedIndex, EdgeFreq.Checked); if (!Rm.Complete) return; Rhino.Geometry.Point3d[] Src = PachTools.GetSource(); Rhino.Geometry.Point3d[] Rec = PachTools.GetReceivers().ToArray(); if (Src.Length < 1 || Rm == null) Rhino.RhinoApp.WriteLine("Model geometry not specified... Exiting calculation..."); Numeric.TimeDomain.Microphone_Compact Mic = new Numeric.TimeDomain.Microphone_Compact(Rec); double fs = 62.5 * Utilities.Numerics.rt2 * Math.Pow(2, Selected_Extent.SelectedIndex); //samplefrequency = fs; Numeric.TimeDomain.Signal_Driver_Compact SD = new Numeric.TimeDomain.Signal_Driver_Compact(Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Pulse, 1000, 1, PachTools.GetSource()); FDTD = new Numeric.TimeDomain.Acoustic_Compact_FDTD(Rm, ref SD, ref Mic, fs, (double)CO_TIME.Value); FDTD.RuntoCompletion(); samplefrequency = FDTD.SampleFrequency; Mic.reset(); result_signals = Mic.Recordings[0]; //System.Numerics.Complex[] source_response = SD.Frequency_Response(result_signals[0].Length); //double f_limit = 0.8 * fs / samplefrequency * result_signals[0].Length; //double f_top = 1.3 * f_limit; //double dpi = Utilities.Numerics.PiX2 / (f_top - f_limit); //for (int c = 0; c < result_signals.Length; c++) //{ // System.Numerics.Complex[] result_response = Audio.Pach_SP.FFT_General(result_signals[c],0); // Array.Resize(ref result_response, result_response.Length / 2); // for (int s = 0; s < result_response.Length; s++) // { // System.Numerics.Complex mod = source_response[s].Magnitude; // if (s > f_limit) mod /= System.Numerics.Complex.Pow(source_response[s], (.5 * Math.Tanh((s-f_limit) * dpi) + 0.5)); // result_response[s] /= mod.Magnitude; // } // result_signals[c] = Audio.Pach_SP.IFFT_Real_General(Audio.Pach_SP.Mirror_Spectrum(result_response), 0); //} //Find Eigenfrequencies if (EigenFrequencies.Items.Count > 0) return; EigenFrequencies.Items.Clear(); Find_EigenFrequencies(); Receiver_Choice.Items.Clear(); for (int i = 0; i < result_signals.Length; i++) Receiver_Choice.Items.Add(i); Time = new double[result_signals[0].Length]; for (int i = 0; i < Time.Length; i++) Time[i] = (double)i / samplefrequency; Receiver_Choice.SelectedIndex = 0; Receiver_Choice.Update(); }
private void CalculateSim_Click(object sender, EventArgs e) { FC = new ForCall(Forw_proc); Polygon_Scene Rm = PachTools.Get_Poly_Scene((double)Rel_Humidity.Value, (double)Air_Temp.Value, (double)Air_Pressure.Value, Atten_Method.SelectedIndex, EdgeFreq.Checked); if (!Rm.Complete) return; Rhino.Geometry.Point3d[] Src = PachTools.GetSource(); Rhino.Geometry.Point3d[] Rec = PachTools.GetReceivers().ToArray(); if (Src.Length < 1 || Rm == null) Rhino.RhinoApp.WriteLine("Model geometry not specified... Exiting calculation..."); Numeric.TimeDomain.Microphone_Compact Mic = new Numeric.TimeDomain.Microphone_Compact(Rec); double fs = 137.8125 * Math.Pow(2, Selected_Extent.SelectedIndex); samplefrequency = fs; double df = 1d / ((double)CO_TIME.Value / 1000); Numeric.TimeDomain.Signal_Driver_Compact SD = new Numeric.TimeDomain.Signal_Driver_Compact(Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Pulse, df, 1, PachTools.GetSource()); FDTD = new Numeric.TimeDomain.Acoustic_Compact_FDTD(Rm, ref SD, ref Mic, fs, (double)CO_TIME.Value); for (double f = df; f < fs; f += df) { FDTD.reset(f, Numeric.TimeDomain.Signal_Driver_Compact.Signal_Type.Sine_Pulse); FDTD.RuntoCompletion(); Frequencies.Items.Add(string.Format("{0} Hz.", f), true); } Receiver_Choice.Text = "0"; result_signals = Mic.Recordings; }
private void Preview_Click(object sender, EventArgs e) { Loop.Enabled = false; ForwButton.Enabled = false; BackButton.Enabled = false; PachydermAc_PlugIn plugin = PachydermAc_PlugIn.Instance; if (PreviewDisplay != null) PreviewDisplay.Enabled = false; max = (int)(Frame_Rate.Value * Seconds.Value); Point3d[] SPT; if (!plugin.SourceOrigin(out SPT)) { Rhino.RhinoApp.WriteLine("Model geometry not specified... Exiting calculation..."); return; } if (T != null && T.ThreadState == System.Threading.ThreadState.Running) T.Abort(); PreviewDisplay = null; Pach_GetModel_Command Model = Pach_GetModel_Command.Instance; if (object.ReferenceEquals(RoomSelection.SelectedItem, "Use Entire Model")) { Model.Rel_Humidity = 50;//(double)Rel_Humidity.Value; Model.Air_Temp = (double)Air_Temp.Value; Model.Atm_pressure = 1000;//(double)Air_Pressure.Value; Model.Atten_Choice = 0;//Atten_Method.SelectedIndex; Rhino.RhinoApp.RunScript("GetModel", false); } plugin.Source(out Source); if (MeshWave) { for (int i = 0; i < Source.Length; i++) Source[i] = new GeodesicMeshSource(plugin.GetSourceSWL(i), Source[i].Origin(), (int)RT_Count.Value, i); } ParticleRays[] RTParticles = new ParticleRays[Source.Length]; List<Point3d> L = new List<Point3d>(); for (int i = 0; i < Source.Length; i++) { L.Add(Source[i].Origin()); } for (int j = 0; j < Source.Length; j++) { if (plugin.Geometry_Spec() == 0) { Model.Ret_NURBS_Scene.partition(L); RTParticles[j] = new ParticleRays(Source[j], Model.Ret_NURBS_Scene, (int)RT_Count.Value, CutOffLength()); } else { Model.Ret_Mesh_Scene.partition(L); RTParticles[j] = new ParticleRays(Source[j], Model.Ret_Mesh_Scene, (int)RT_Count.Value, CutOffLength()); } RTParticles[j].Begin(); } PreviewDisplay = new WaveConduit(RTParticles, scale, new double[2] { (double)Param_Min.Value, (double)Param_Max.Value }, Model.Ret_Mesh_Scene); ForwButton.Enabled = true; BackButton.Enabled = true; Loop.Enabled = true; Loop.Text = "Stop"; FC = new ForCall(Forw_proc); System.Threading.ParameterizedThreadStart St = new System.Threading.ParameterizedThreadStart(delegate { LoopStart((int)(this.Frame_Rate.Value * Seconds.Value)); }); T = new System.Threading.Thread(St); T.Start(); }