基本信息
源码名称:STKX开发(入门级示例)
源码大小:0.14M
文件格式:.rar
开发语言:C#
更新时间:2019-10-25
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
STKX开发,需要STKX组件支持

STKX开发

//-------------------------------------------------------------------------
//
//  This is part of the STK 8 Object Model Examples
//  Copyright (C) 2006 Analytical Graphics, Inc.
//
//  This source code is intended as a reference to users of the
//	STK 8 Object Model.
//
//  File: Form1.cs
//  DataProviders
//
//
//  The features used in this example show how to hook event notification
//  up to STK through C# so that you can listen to events such as animation
//  and object creation.
//
//--------------------------------------------------------------------------
using System;
using System.Drawing;
using System.Collections;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace DataProviders
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.Button GraphButton;
		private System.Windows.Forms.GroupBox groupBox1;
		private System.Windows.Forms.GroupBox groupBox2;
		private System.Windows.Forms.ComboBox comboBox1;
		private System.Windows.Forms.Label label1;
		private AGI.STKObjects.AgStkObjectRootClass objModelRoot;

		private AGI.STKObjects.AgSatelliteClass Satellite = null;
		private AGI.STKObjects.AgFacilityClass Facility = null;
		private AGI.STKObjects.IAgStkAccess Access = null;
		private System.Windows.Forms.GroupBox groupBox3;
		private System.Windows.Forms.Button ComputeButton;
		private System.Windows.Forms.Label label2;
		private System.Windows.Forms.Button MarkerColorButton;
		private System.Windows.Forms.CheckBox checkBox1;

		private bool IsPlacingFacility = false;
		private System.Windows.Forms.Button PlaceFacilityButton;
		private System.Windows.Forms.Label placetext;
		private System.Windows.Forms.Label label3;
		private System.Windows.Forms.Label label4;
		private System.Windows.Forms.Button MarkerColorButton2;
		private AxAGI.STKX.AxAgUiAx2DCntrl axAgUiAx2DCntrl1;

		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
			this.GraphButton = new System.Windows.Forms.Button();
			this.groupBox1 = new System.Windows.Forms.GroupBox();
			this.checkBox1 = new System.Windows.Forms.CheckBox();
			this.MarkerColorButton = new System.Windows.Forms.Button();
			this.label2 = new System.Windows.Forms.Label();
			this.label1 = new System.Windows.Forms.Label();
			this.comboBox1 = new System.Windows.Forms.ComboBox();
			this.groupBox2 = new System.Windows.Forms.GroupBox();
			this.MarkerColorButton2 = new System.Windows.Forms.Button();
			this.label4 = new System.Windows.Forms.Label();
			this.label3 = new System.Windows.Forms.Label();
			this.placetext = new System.Windows.Forms.Label();
			this.PlaceFacilityButton = new System.Windows.Forms.Button();
			this.groupBox3 = new System.Windows.Forms.GroupBox();
			this.ComputeButton = new System.Windows.Forms.Button();
			this.axAgUiAx2DCntrl1 = new AxAGI.STKX.AxAgUiAx2DCntrl();
			this.groupBox1.SuspendLayout();
			this.groupBox2.SuspendLayout();
			this.groupBox3.SuspendLayout();
			((System.ComponentModel.ISupportInitialize)(this.axAgUiAx2DCntrl1)).BeginInit();
			this.SuspendLayout();
			// 
			// GraphButton
			// 
			this.GraphButton.Enabled = false;
			this.GraphButton.Location = new System.Drawing.Point(25, 85);
			this.GraphButton.Name = "GraphButton";
			this.GraphButton.Size = new System.Drawing.Size(96, 37);
			this.GraphButton.TabIndex = 0;
			this.GraphButton.Text = "Graph";
			this.GraphButton.Click  = new System.EventHandler(this.GraphButton_Click);
			// 
			// groupBox1
			// 
			this.groupBox1.Controls.Add(this.checkBox1);
			this.groupBox1.Controls.Add(this.MarkerColorButton);
			this.groupBox1.Controls.Add(this.label2);
			this.groupBox1.Controls.Add(this.label1);
			this.groupBox1.Controls.Add(this.comboBox1);
			this.groupBox1.Location = new System.Drawing.Point(10, 471);
			this.groupBox1.Name = "groupBox1";
			this.groupBox1.Size = new System.Drawing.Size(288, 147);
			this.groupBox1.TabIndex = 2;
			this.groupBox1.TabStop = false;
			this.groupBox1.Text = "Satellite Setup";
			// 
			// checkBox1
			// 
			this.checkBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.checkBox1.Location = new System.Drawing.Point(48, 106);
			this.checkBox1.Name = "checkBox1";
			this.checkBox1.Size = new System.Drawing.Size(182, 28);
			this.checkBox1.TabIndex = 5;
			this.checkBox1.Text = "Use Elevation Contours";
			this.checkBox1.CheckedChanged  = new System.EventHandler(this.checkBox1_CheckedChanged);
			// 
			// MarkerColorButton
			// 
			this.MarkerColorButton.BackColor = System.Drawing.Color.IndianRed;
			this.MarkerColorButton.Cursor = System.Windows.Forms.Cursors.Hand;
			this.MarkerColorButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
			this.MarkerColorButton.Location = new System.Drawing.Point(125, 65);
			this.MarkerColorButton.Name = "MarkerColorButton";
			this.MarkerColorButton.Size = new System.Drawing.Size(105, 27);
			this.MarkerColorButton.TabIndex = 4;
			this.MarkerColorButton.Click  = new System.EventHandler(this.MarkerColorButton_Click);
			// 
			// label2
			// 
			this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.label2.Location = new System.Drawing.Point(11, 70);
			this.label2.Name = "label2";
			this.label2.Size = new System.Drawing.Size(96, 19);
			this.label2.TabIndex = 3;
			this.label2.Text = "MarkerColor:";
			// 
			// label1
			// 
			this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.label1.Location = new System.Drawing.Point(10, 31);
			this.label1.Name = "label1";
			this.label1.Size = new System.Drawing.Size(96, 19);
			this.label1.TabIndex = 2;
			this.label1.Text = "Propagator:";
			// 
			// comboBox1
			// 
			this.comboBox1.Location = new System.Drawing.Point(106, 28);
			this.comboBox1.Name = "comboBox1";
			this.comboBox1.Size = new System.Drawing.Size(153, 24);
			this.comboBox1.TabIndex = 1;
			this.comboBox1.Text = "comboBox1";
			this.comboBox1.SelectedIndexChanged  = new System.EventHandler(this.comboBox1_SelectedIndexChanged);
			// 
			// groupBox2
			// 
			this.groupBox2.Controls.Add(this.MarkerColorButton2);
			this.groupBox2.Controls.Add(this.label4);
			this.groupBox2.Controls.Add(this.label3);
			this.groupBox2.Controls.Add(this.placetext);
			this.groupBox2.Controls.Add(this.PlaceFacilityButton);
			this.groupBox2.Location = new System.Drawing.Point(307, 471);
			this.groupBox2.Name = "groupBox2";
			this.groupBox2.Size = new System.Drawing.Size(288, 147);
			this.groupBox2.TabIndex = 3;
			this.groupBox2.TabStop = false;
			this.groupBox2.Text = "Facility Setup";
			// 
			// MarkerColorButton2
			// 
			this.MarkerColorButton2.BackColor = System.Drawing.Color.Snow;
			this.MarkerColorButton2.Cursor = System.Windows.Forms.Cursors.Hand;
			this.MarkerColorButton2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
			this.MarkerColorButton2.Location = new System.Drawing.Point(134, 65);
			this.MarkerColorButton2.Name = "MarkerColorButton2";
			this.MarkerColorButton2.Size = new System.Drawing.Size(106, 27);
			this.MarkerColorButton2.TabIndex = 6;
			this.MarkerColorButton2.Click  = new System.EventHandler(this.MarkerColorButton2_Click);
			// 
			// label4
			// 
			this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.label4.Location = new System.Drawing.Point(29, 70);
			this.label4.Name = "label4";
			this.label4.Size = new System.Drawing.Size(96, 19);
			this.label4.TabIndex = 5;
			this.label4.Text = "LabelColor:";
			// 
			// label3
			// 
			this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.label3.Location = new System.Drawing.Point(19, 31);
			this.label3.Name = "label3";
			this.label3.Size = new System.Drawing.Size(67, 19);
			this.label3.TabIndex = 3;
			this.label3.Text = "Location:";
			// 
			// placetext
			// 
			this.placetext.Location = new System.Drawing.Point(29, 103);
			this.placetext.Name = "placetext";
			this.placetext.Size = new System.Drawing.Size(240, 37);
			this.placetext.TabIndex = 1;
			this.placetext.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
			// 
			// PlaceFacilityButton
			// 
			this.PlaceFacilityButton.Cursor = System.Windows.Forms.Cursors.Hand;
			this.PlaceFacilityButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
			this.PlaceFacilityButton.Location = new System.Drawing.Point(106, 28);
			this.PlaceFacilityButton.Name = "PlaceFacilityButton";
			this.PlaceFacilityButton.Size = new System.Drawing.Size(163, 24);
			this.PlaceFacilityButton.TabIndex = 0;
			this.PlaceFacilityButton.Text = "Place Facility On Map";
			this.PlaceFacilityButton.Click  = new System.EventHandler(this.PlaceFacilityButton_Click);
			// 
			// groupBox3
			// 
			this.groupBox3.Controls.Add(this.ComputeButton);
			this.groupBox3.Controls.Add(this.GraphButton);
			this.groupBox3.Location = new System.Drawing.Point(605, 471);
			this.groupBox3.Name = "groupBox3";
			this.groupBox3.Size = new System.Drawing.Size(144, 147);
			this.groupBox3.TabIndex = 4;
			this.groupBox3.TabStop = false;
			this.groupBox3.Text = "Access";
			// 
			// ComputeButton
			// 
			this.ComputeButton.Location = new System.Drawing.Point(26, 33);
			this.ComputeButton.Name = "ComputeButton";
			this.ComputeButton.Size = new System.Drawing.Size(96, 37);
			this.ComputeButton.TabIndex = 1;
			this.ComputeButton.Text = "Compute";
			this.ComputeButton.Click  = new System.EventHandler(this.ComputeButton_Click);
			// 
			// axAgUiAx2DCntrl1
			// 
			this.axAgUiAx2DCntrl1.Enabled = true;
			this.axAgUiAx2DCntrl1.Location = new System.Drawing.Point(0, 0);
			this.axAgUiAx2DCntrl1.Name = "axAgUiAx2DCntrl1";
			this.axAgUiAx2DCntrl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axAgUiAx2DCntrl1.OcxState")));
			this.axAgUiAx2DCntrl1.Size = new System.Drawing.Size(776, 464);
			this.axAgUiAx2DCntrl1.TabIndex = 5;
			this.axAgUiAx2DCntrl1.MouseDownEvent  = new AxAGI.STKX.IAgUiAx2DCntrlEvents_MouseDownEventHandler(this.axAgUiAx2DCntrl1_MouseDownEvent);
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
			this.ClientSize = new System.Drawing.Size(774, 622);
			this.Controls.Add(this.axAgUiAx2DCntrl1);
			this.Controls.Add(this.groupBox1);
			this.Controls.Add(this.groupBox2);
			this.Controls.Add(this.groupBox3);
			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
			this.MaximumSize = new System.Drawing.Size(784, 664);
			this.MinimumSize = new System.Drawing.Size(784, 664);
			this.Name = "Form1";
			this.Text = "Form1";
			this.Load  = new System.EventHandler(this.Form1_Load);
			this.groupBox1.ResumeLayout(false);
			this.groupBox2.ResumeLayout(false);
			this.groupBox3.ResumeLayout(false);
			((System.ComponentModel.ISupportInitialize)(this.axAgUiAx2DCntrl1)).EndInit();
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		/// <summary>
		/// Creates a new scenario, adds a Facility and a Satellite and changes some basic properties
		/// </summary>
		private void Form1_Load(object sender, System.EventArgs e)
		{
			objModelRoot = new AGI.STKObjects.AgStkObjectRootClass();
			objModelRoot.NewScenario("AccessTest");
			Satellite = (AGI.STKObjects.AgSatelliteClass)objModelRoot.CurrentScenario.Children.New(
				AGI.STKObjects.AgESTKObjectType.eSatellite, "AccSat");
			SetSatelliteColor(MarkerColorButton.BackColor);
			Facility = (AGI.STKObjects.AgFacilityClass)objModelRoot.CurrentScenario.Children.New(
				AGI.STKObjects.AgESTKObjectType.eFacility, "AccFac");
			SetFacilityColor(MarkerColorButton2.BackColor);
			UpdateFacPositionText();

			comboBox1.Items.AddRange(new object[] {"TwoBody","J2Perturbation","J4Perturbation","SGP4","HPOP"});
			comboBox1.Text = "TwoBody";
		}
		/// <summary>
		/// Setting the satellite's color
		/// </summary>
		private void SetSatelliteColor(Color _color)
		{
			
			Satellite.Graphics.SetAttributesType(AGI.STKObjects.AgEVeGfxAttributes.eAttributesBasic);
			AGI.STKObjects.IAgVeGfxAttributesBasic gfx = (AGI.STKObjects.IAgVeGfxAttributesBasic)Satellite.Graphics.Attributes;
			gfx.Inherit = false;
			gfx.IsVisible = true;
			gfx.Color = ToOMColor(_color);
		}

		/// <summary>
		/// Setting the facility's color
		/// </summary>
		private void SetFacilityColor(Color _color)
		{
			Facility.Graphics.InheritFromScenario = false;
			Facility.Graphics.LabelVisible = true;
			Facility.Graphics.LabelColor = ToOMColor(_color);
		}

		/// <summary>
		/// Updates the facilities text to indicate where the facility is located
		/// </summary>
		private void UpdateFacPositionText()
		{
			AGI.STKObjects.IAgGeodetic pos = (AGI.STKObjects.IAgGeodetic)Facility.Position.ConvertTo(
				AGI.STKObjects.AgEPositionType.eGeodetic);
			placetext.Text = "Lat: "   pos.Lat   "\n Lon: "   pos.Lon;
		}

		/// <summary>
		/// Helper function for setting colors.
		/// </summary>
		private uint ToOMColor(Color _color)
		{
			return System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(_color));
		}

		/// <summary>
		/// Shows a graph of the data
		/// </summary>
		private void GraphButton_Click(object sender, System.EventArgs e)
		{
			ArrayList xaxis = new ArrayList();
			ArrayList yaxis = new ArrayList();

			AGI.STKObjects.IAgScenario sc = (AGI.STKObjects.IAgScenario)objModelRoot.CurrentScenario;

			System.Array cols = new object[] { "Start Time", "Duration" };
			AGI.STKObjects.IAgDataProvider dpInfo = (AGI.STKObjects.IAgDataProvider)Access.DataProviders["Access Data"];
			AGI.STKObjects.IAgDrResult	  resInfo = ((AGI.STKObjects.IAgDataPrvInterval)dpInfo).ExecElements(
				sc.StartTime,
				sc.StopTime,
				ref cols);

			if (resInfo.Intervals.Count > 0)
			{
				foreach(AGI.STKObjects.IAgDrInterval interval in resInfo.Intervals)
				{
					foreach(double value in interval.DataSets[0].GetValues())
					{
						xaxis.Add(value / 180 );
					}
					foreach(double value in interval.DataSets[1].GetValues())
					{
						yaxis.Add(value / 5 );
					}
				}
			}

			GraphForm graphform = new GraphForm(Satellite.InstanceName   " Access to "   Facility.InstanceName,
								"Date", "Duration", xaxis,yaxis) ;
			graphform.Show();
			graphform.Focus();
		}

		/// <summary>
		/// Sets the satellite's propagator type and propagates it.
		/// </summary>
		private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
		{
			if(comboBox1.SelectedIndex == 0)
			{
				Satellite.SetPropagatorType(AGI.STKObjects.AgEVePropagatorType.ePropagatorTwoBody);
				AGI.STKObjects.IAgVePropagatorTwoBody prop = (AGI.STKObjects.IAgVePropagatorTwoBody)Satellite.Propagator;
				prop.Propagate();
			}
			else if(comboBox1.SelectedIndex == 1)
			{
				Satellite.SetPropagatorType(AGI.STKObjects.AgEVePropagatorType.ePropagatorJ2Perturbation);
				AGI.STKObjects.IAgVePropagatorJ2Perturbation prop = (AGI.STKObjects.IAgVePropagatorJ2Perturbation)Satellite.Propagator;
				prop.Propagate();
			}
			else if(comboBox1.SelectedIndex == 2)
			{
				Satellite.SetPropagatorType(AGI.STKObjects.AgEVePropagatorType.ePropagatorJ4Perturbation);
				AGI.STKObjects.IAgVePropagatorJ4Perturbation prop = (AGI.STKObjects.IAgVePropagatorJ4Perturbation)Satellite.Propagator;
				prop.Propagate();
			}
			else if(comboBox1.SelectedIndex == 3)
			{
				Satellite.SetPropagatorType(AGI.STKObjects.AgEVePropagatorType.ePropagatorSGP4);
				AGI.STKObjects.IAgVePropagatorSGP4 prop = (AGI.STKObjects.IAgVePropagatorSGP4)Satellite.Propagator;
				prop.Propagate();
			}
			else if(comboBox1.SelectedIndex == 4)
			{
				Satellite.SetPropagatorType(AGI.STKObjects.AgEVePropagatorType.ePropagatorHPOP);
				AGI.STKObjects.IAgVePropagatorHPOP prop = (AGI.STKObjects.IAgVePropagatorHPOP)Satellite.Propagator;
				prop.Propagate();
			}
		}

		/// <summary>
		/// Sets the satellite's color with the chosen type.
		/// </summary>
		private void MarkerColorButton_Click(object sender, System.EventArgs e)
		{
			ColorDialog colordial = new ColorDialog();
			colordial.AllowFullOpen = false ;
			colordial.ShowHelp = true ;
			colordial.Color = MarkerColorButton.BackColor;
			if (colordial.ShowDialog() == DialogResult.OK)
			{
				MarkerColorButton.BackColor =  colordial.Color;
				SetSatelliteColor(MarkerColorButton.BackColor);
			}
		}

		/// <summary>
		/// Changes the satellite's elevation contours visible and fillvisible properties.
		/// </summary>
		private void checkBox1_CheckedChanged(object sender, System.EventArgs e)
		{
			if (checkBox1.Checked)
			{
				Satellite.Graphics.ElevContours.IsVisible = true;
				Satellite.Graphics.ElevContours.IsFillVisible = true;
			}
			else
			{
				Satellite.Graphics.ElevContours.IsFillVisible = false;
				Satellite.Graphics.ElevContours.IsVisible = false;
			}
		}

		/// <summary>
		/// Uses the mouse down event in STKX to position the facility
		/// </summary>
		private void PlaceFacilityButton_Click(object sender, System.EventArgs e)
		{
			Cursor.Current = PlaceFacilityButton.Cursor;
			IsPlacingFacility = true;
			placetext.Text = "Click on the 2D Map to set position.";
			PlaceFacilityButton.Enabled = false;
		}

		/// <summary>
		/// Moves the facility to the mouse's coordinates.
		/// </summary>
		private void axAgUiAx2DCntrl1_MouseDownEvent(object sender, AxAGI.STKX.IAgUiAx2DCntrlEvents_MouseDownEvent e)
		{
			if (IsPlacingFacility)
			{
				AGI.STKX.IAgPickInfoData pickInfoData = axAgUiAx2DCntrl1.PickInfo(e.x, e.y);
				AGI.STKObjects.IAgGeodetic pos = (AGI.STKObjects.IAgGeodetic)Facility.Position.ConvertTo(
					AGI.STKObjects.AgEPositionType.eGeodetic);
				
				pos.Lat = pickInfoData.Lat;
				pos.Lon = pickInfoData.Lon;
				pos.Alt = pickInfoData.Alt;
				Facility.Position.Assign(pos);
				
				UpdateFacPositionText();
				IsPlacingFacility = false;
				PlaceFacilityButton.Enabled = true;
			}
		}

		/// <summary>
		/// Changes the facilities color with the given value.
		/// </summary>
		private void MarkerColorButton2_Click(object sender, System.EventArgs e)
		{
			ColorDialog colordial = new ColorDialog();
			colordial.AllowFullOpen = false ;
			colordial.ShowHelp = true ;
			colordial.Color = MarkerColorButton.BackColor;
			if (colordial.ShowDialog() == DialogResult.OK)
			{
				MarkerColorButton2.BackColor =  colordial.Color;
				SetFacilityColor(MarkerColorButton2.BackColor);
			}
		}

		/// <summary>
		/// Computes access between a satellite and a facility. 
		/// </summary>
		private void ComputeButton_Click(object sender, System.EventArgs e)
		{
			objModelRoot.UnitPreferences.SetCurrentUnit("DateFormat", "EpSec");

			Access = (AGI.STKObjects.IAgStkAccess)Satellite.GetAccessToObject(Facility);
			Access.AccessTimePeriod = AGI.STKObjects.AgEAccessTimeType.eScenarioAccessTime;
			Access.ComputeAccess();
			SetFacilityColor(MarkerColorButton2.BackColor);
			ComputeButton.Enabled = false;
			GraphButton.Enabled = true;
		}
	}
}