About the Create camera flyby from path Sample
[C#]
frmCameraPath.cs
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using CameraFlybyFromPath;
using ESRI.ArcGIS.Analyst3D;
using ESRI.ArcGIS.GlobeCore;
using ESRI.ArcGIS.Animation;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
namespace cameraflybyfrompath
{
/// <summary>
/// Summary description for frmCameraPath.
/// </summary>
public class frmCameraPath : System.Windows.Forms.Form
{
private System.Windows.Forms.GroupBox groupBox_PathSource;
private System.Windows.Forms.RadioButton radiobutton_Sel_line_feat;
private System.Windows.Forms.CheckBox checkBox_ReverseOrder;
private System.Windows.Forms.Label label_VertOffset;
private System.Windows.Forms.TextBox textBox_VertOffset;
private System.Windows.Forms.Label label_Simp_Factor;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.GroupBox groupBox_PathDest;
private System.Windows.Forms.RadioButton radioButton_flyby;
private System.Windows.Forms.RadioButton radioButton_currentTarget;
private System.Windows.Forms.RadioButton radioButton_currentObserver;
private System.Windows.Forms.Label label_TrackName;
private System.Windows.Forms.TextBox textBox_TrackName;
private System.Windows.Forms.Button button_Import;
private System.Windows.Forms.Button button_Cancel;
private System.Windows.Forms.GroupBox groupBox_TrackProps;
private System.Windows.Forms.CheckBox checkBox_Overwrite;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
private System.Windows.Forms.TrackBar trackBarSimplificationFactor;
private System.Windows.Forms.ComboBox comboBoxLayers;
private IGlobe globe;
private IArray layerArray = new ArrayClass();
public frmCameraPath()
{
//
// 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()
{
this.groupBox_PathSource = new System.Windows.Forms.GroupBox();
this.comboBoxLayers = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label_Simp_Factor = new System.Windows.Forms.Label();
this.textBox_VertOffset = new System.Windows.Forms.TextBox();
this.label_VertOffset = new System.Windows.Forms.Label();
this.checkBox_ReverseOrder = new System.Windows.Forms.CheckBox();
this.radiobutton_Sel_line_feat = new System.Windows.Forms.RadioButton();
this.trackBarSimplificationFactor = new System.Windows.Forms.TrackBar();
this.groupBox_PathDest = new System.Windows.Forms.GroupBox();
this.radioButton_currentObserver = new System.Windows.Forms.RadioButton();
this.radioButton_currentTarget = new System.Windows.Forms.RadioButton();
this.radioButton_flyby = new System.Windows.Forms.RadioButton();
this.label_TrackName = new System.Windows.Forms.Label();
this.textBox_TrackName = new System.Windows.Forms.TextBox();
this.button_Import = new System.Windows.Forms.Button();
this.button_Cancel = new System.Windows.Forms.Button();
this.checkBox_Overwrite = new System.Windows.Forms.CheckBox();
this.groupBox_TrackProps = new System.Windows.Forms.GroupBox();
this.groupBox_PathSource.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.trackBarSimplificationFactor)).BeginInit();
this.groupBox_PathDest.SuspendLayout();
this.groupBox_TrackProps.SuspendLayout();
this.SuspendLayout();
//
// groupBox_PathSource
//
this.groupBox_PathSource.Controls.Add(this.comboBoxLayers);
this.groupBox_PathSource.Controls.Add(this.label1);
this.groupBox_PathSource.Controls.Add(this.label2);
this.groupBox_PathSource.Controls.Add(this.label_Simp_Factor);
this.groupBox_PathSource.Controls.Add(this.textBox_VertOffset);
this.groupBox_PathSource.Controls.Add(this.label_VertOffset);
this.groupBox_PathSource.Controls.Add(this.checkBox_ReverseOrder);
this.groupBox_PathSource.Controls.Add(this.radiobutton_Sel_line_feat);
this.groupBox_PathSource.Controls.Add(this.trackBarSimplificationFactor);
this.groupBox_PathSource.Location = new System.Drawing.Point(8, 8);
this.groupBox_PathSource.Name = "groupBox_PathSource";
this.groupBox_PathSource.Size = new System.Drawing.Size(296, 160);
this.groupBox_PathSource.TabIndex = 0;
this.groupBox_PathSource.TabStop = false;
this.groupBox_PathSource.Text = "Path source";
//
// comboBoxLayers
//
this.comboBoxLayers.Location = new System.Drawing.Point(152, 24);
this.comboBoxLayers.Name = "comboBoxLayers";
this.comboBoxLayers.Size = new System.Drawing.Size(136, 21);
this.comboBoxLayers.TabIndex = 8;
//
// label1
//
this.label1.Location = new System.Drawing.Point(258, 137);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(30, 16);
this.label1.TabIndex = 6;
this.label1.Text = "High";
//
// label2
//
this.label2.Location = new System.Drawing.Point(117, 137);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(32, 16);
this.label2.TabIndex = 7;
this.label2.Text = "Low";
//
// label_Simp_Factor
//
this.label_Simp_Factor.Location = new System.Drawing.Point(16, 112);
this.label_Simp_Factor.Name = "label_Simp_Factor";
this.label_Simp_Factor.Size = new System.Drawing.Size(104, 24);
this.label_Simp_Factor.TabIndex = 5;
this.label_Simp_Factor.Text = "Simplification factor";
//
// textBox_VertOffset
//
this.textBox_VertOffset.Location = new System.Drawing.Point(88, 72);
this.textBox_VertOffset.Name = "textBox_VertOffset";
this.textBox_VertOffset.Size = new System.Drawing.Size(56, 20);
this.textBox_VertOffset.TabIndex = 3;
this.textBox_VertOffset.Text = "0.0";
this.textBox_VertOffset.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// label_VertOffset
//
this.label_VertOffset.Location = new System.Drawing.Point(16, 80);
this.label_VertOffset.Name = "label_VertOffset";
this.label_VertOffset.Size = new System.Drawing.Size(88, 16);
this.label_VertOffset.TabIndex = 2;
this.label_VertOffset.Text = "Vertical offset";
//
// checkBox_ReverseOrder
//
this.checkBox_ReverseOrder.Location = new System.Drawing.Point(16, 48);
this.checkBox_ReverseOrder.Name = "checkBox_ReverseOrder";
this.checkBox_ReverseOrder.Size = new System.Drawing.Size(144, 24);
this.checkBox_ReverseOrder.TabIndex = 1;
this.checkBox_ReverseOrder.Text = "Apply in reverse order";
//
// radiobutton_Sel_line_feat
//
this.radiobutton_Sel_line_feat.Checked = true;
this.radiobutton_Sel_line_feat.Location = new System.Drawing.Point(16, 24);
this.radiobutton_Sel_line_feat.Name = "radiobutton_Sel_line_feat";
this.radiobutton_Sel_line_feat.Size = new System.Drawing.Size(144, 24);
this.radiobutton_Sel_line_feat.TabIndex = 0;
this.radiobutton_Sel_line_feat.TabStop = true;
this.radiobutton_Sel_line_feat.Text = "Selected line feature in";
//
// trackBarSimplificationFactor
//
this.trackBarSimplificationFactor.Cursor = System.Windows.Forms.Cursors.Hand;
this.trackBarSimplificationFactor.Location = new System.Drawing.Point(120, 108);
this.trackBarSimplificationFactor.Maximum = 100;
this.trackBarSimplificationFactor.Name = "trackBarSimplificationFactor";
this.trackBarSimplificationFactor.Size = new System.Drawing.Size(168, 45);
this.trackBarSimplificationFactor.TabIndex = 4;
this.trackBarSimplificationFactor.Value = 5;
//
// groupBox_PathDest
//
this.groupBox_PathDest.Controls.Add(this.radioButton_currentObserver);
this.groupBox_PathDest.Controls.Add(this.radioButton_currentTarget);
this.groupBox_PathDest.Controls.Add(this.radioButton_flyby);
this.groupBox_PathDest.Location = new System.Drawing.Point(8, 176);
this.groupBox_PathDest.Name = "groupBox_PathDest";
this.groupBox_PathDest.Size = new System.Drawing.Size(296, 104);
this.groupBox_PathDest.TabIndex = 1;
this.groupBox_PathDest.TabStop = false;
this.groupBox_PathDest.Text = "Path destination";
//
// radioButton_currentObserver
//
this.radioButton_currentObserver.Location = new System.Drawing.Point(16, 72);
this.radioButton_currentObserver.Name = "radioButton_currentObserver";
this.radioButton_currentObserver.Size = new System.Drawing.Size(272, 16);
this.radioButton_currentObserver.TabIndex = 2;
this.radioButton_currentObserver.Text = "Move target along path with current observer";
//
// radioButton_currentTarget
//
this.radioButton_currentTarget.Location = new System.Drawing.Point(16, 48);
this.radioButton_currentTarget.Name = "radioButton_currentTarget";
this.radioButton_currentTarget.Size = new System.Drawing.Size(272, 16);
this.radioButton_currentTarget.TabIndex = 1;
this.radioButton_currentTarget.Text = "Move observer along path with current target";
//
// radioButton_flyby
//
this.radioButton_flyby.Checked = true;
this.radioButton_flyby.Location = new System.Drawing.Point(16, 24);
this.radioButton_flyby.Name = "radioButton_flyby";
this.radioButton_flyby.Size = new System.Drawing.Size(272, 16);
this.radioButton_flyby.TabIndex = 0;
this.radioButton_flyby.TabStop = true;
this.radioButton_flyby.Text = "Move both observer and target along path (fly by)";
//
// label_TrackName
//
this.label_TrackName.Location = new System.Drawing.Point(16, 24);
this.label_TrackName.Name = "label_TrackName";
this.label_TrackName.Size = new System.Drawing.Size(88, 16);
this.label_TrackName.TabIndex = 2;
this.label_TrackName.Text = "Track name:";
//
// textBox_TrackName
//
this.textBox_TrackName.Location = new System.Drawing.Point(96, 23);
this.textBox_TrackName.Name = "textBox_TrackName";
this.textBox_TrackName.Size = new System.Drawing.Size(192, 20);
this.textBox_TrackName.TabIndex = 3;
this.textBox_TrackName.Text = "Track from path";
//
// button_Import
//
this.button_Import.Location = new System.Drawing.Point(144, 368);
this.button_Import.Name = "button_Import";
this.button_Import.Size = new System.Drawing.Size(80, 24);
this.button_Import.TabIndex = 4;
this.button_Import.Text = "Import";
this.button_Import.Click += new System.EventHandler(this.button_Import_Click);
//
// button_Cancel
//
this.button_Cancel.Location = new System.Drawing.Point(232, 368);
this.button_Cancel.Name = "button_Cancel";
this.button_Cancel.Size = new System.Drawing.Size(72, 24);
this.button_Cancel.TabIndex = 5;
this.button_Cancel.Text = "Cancel";
this.button_Cancel.Click += new System.EventHandler(this.button_Cancel_Click);
//
// checkBox_Overwrite
//
this.checkBox_Overwrite.Checked = true;
this.checkBox_Overwrite.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBox_Overwrite.Enabled = false;
this.checkBox_Overwrite.Location = new System.Drawing.Point(16, 48);
this.checkBox_Overwrite.Name = "checkBox_Overwrite";
this.checkBox_Overwrite.Size = new System.Drawing.Size(184, 16);
this.checkBox_Overwrite.TabIndex = 7;
this.checkBox_Overwrite.Text = "Overwrite last imported track";
//
// groupBox_TrackProps
//
this.groupBox_TrackProps.Controls.Add(this.textBox_TrackName);
this.groupBox_TrackProps.Controls.Add(this.label_TrackName);
this.groupBox_TrackProps.Controls.Add(this.checkBox_Overwrite);
this.groupBox_TrackProps.Location = new System.Drawing.Point(8, 288);
this.groupBox_TrackProps.Name = "groupBox_TrackProps";
this.groupBox_TrackProps.Size = new System.Drawing.Size(296, 72);
this.groupBox_TrackProps.TabIndex = 8;
this.groupBox_TrackProps.TabStop = false;
this.groupBox_TrackProps.Text = "Animation track properties";
//
// frmCameraPath
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(312, 398);
this.Controls.Add(this.groupBox_TrackProps);
this.Controls.Add(this.button_Cancel);
this.Controls.Add(this.button_Import);
this.Controls.Add(this.groupBox_PathDest);
this.Controls.Add(this.groupBox_PathSource);
this.Name = "frmCameraPath";
this.Text = "Camera flyby from path";
this.Load += new System.EventHandler(this.frmCameraPath_Load);
this.groupBox_PathSource.ResumeLayout(false);
this.groupBox_PathSource.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.trackBarSimplificationFactor)).EndInit();
this.groupBox_PathDest.ResumeLayout(false);
this.groupBox_TrackProps.ResumeLayout(false);
this.groupBox_TrackProps.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private void frmCameraPath_Load(object sender, System.EventArgs e)
{
IScene scene = globe.GlobeDisplay.Scene;
//check
IEnumLayer enumFtrLayers = scene.get_Layers(null, true);
enumFtrLayers.Reset();
ILayer lyr = null;
IFeatureLayer fLayer = null;
lyr = enumFtrLayers.Next();
do
{
if (lyr is IFeatureLayer)
{
fLayer = lyr as IFeatureLayer;
break;
}
lyr = enumFtrLayers.Next();
} while (lyr != null);
if (fLayer != null)
{
UID uid = new UIDClass();
uid.Value = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}";
IEnumLayer enumLayers = scene.get_Layers(uid, true);
enumLayers.Reset();
fLayer = (IFeatureLayer)enumLayers.Next();
while (fLayer != null)
{
if (fLayer.FeatureClass.ShapeType.ToString() == esriGeometryType.esriGeometryPolyline.ToString() || fLayer.FeatureClass.ShapeType.ToString() == esriGeometryType.esriGeometryLine.ToString())
{
comboBoxLayers.Items.Add(fLayer.Name);
}
layerArray.Add(fLayer);
fLayer = (IFeatureLayer)enumLayers.Next();
}
}
else
{
MessageBox.Show("You don't have any line feature layers in your document");
}
}
private void button_Cancel_Click(object sender, System.EventArgs e)
{
this.Close();
}
private void button_Import_Click(object sender, System.EventArgs e)
{
// point to the first selected feature:
ESRI.ArcGIS.Animation.IAGImportPathOptions AGImportPathOptionsCls = new ESRI.ArcGIS.Animation.AGImportPathOptionsClass();
// Set properties for AGImportPathOptions
AGImportPathOptionsCls.BasicMap = (ESRI.ArcGIS.Carto.IBasicMap)globe; // Explicit Cast
AGImportPathOptionsCls.AnimationTracks = (ESRI.ArcGIS.Animation.IAGAnimationTracks)globe; // Explicit Cast
AGImportPathOptionsCls.AnimationType = new ESRI.ArcGIS.GlobeCore.AnimationTypeGlobeCameraClass();
AGImportPathOptionsCls.AnimatedObject = globe.GlobeDisplay.ActiveViewer.Camera;
if (this.radioButton_flyby.Checked == true)
{
AGImportPathOptionsCls.ConversionType = esriFlyFromPathType.esriFlyFromPathObsAndTarget;
AGImportPathOptionsCls.PutAngleCalculationMethods(esriPathAngleCalculation.esriAngleAddRelative, esriPathAngleCalculation.esriAngleAddRelative, esriPathAngleCalculation.esriAngleAddRelative);
AGImportPathOptionsCls.PutAngleCalculationValues(0.0, 0.0, 0.0);
}
else if (this.radioButton_currentTarget.Checked == true)
{
AGImportPathOptionsCls.ConversionType = esriFlyFromPathType.esriFlyFromPathObserver;
}
else if (this.radioButton_currentObserver.Checked == true)
{
AGImportPathOptionsCls.ConversionType = esriFlyFromPathType.esriFlyFromPathTarget;
}
double pAzimuth, pInclination, pRollVal;
AGImportPathOptionsCls.GetAngleCalculationValues(out pAzimuth, out pInclination, out pRollVal);
AGImportPathOptionsCls.LookaheadFactor = this.trackBarSimplificationFactor.Value/100;
AGImportPathOptionsCls.TrackName = this.textBox_TrackName.Text;
AGImportPathOptionsCls.OverwriteExisting = Convert.ToBoolean(this.checkBox_Overwrite.CheckState);
AGImportPathOptionsCls.VerticalOffset = Convert.ToDouble(this.textBox_VertOffset.Text);
AGImportPathOptionsCls.ReversePath = Convert.ToBoolean(this.checkBox_ReverseOrder.CheckState);
// get the layer selected in the combo box
if (this.comboBoxLayers.SelectedIndex == -1)
{
MessageBox.Show("Please select a layer before you proceed");
}
else
{
//set the layer based on the item selected in the combo box
ESRI.ArcGIS.Carto.ILayer layer = (ESRI.ArcGIS.Carto.ILayer) layerArray.get_Element(this.comboBoxLayers.SelectedIndex); // Explicit Cast
// Get the line feature selected in the layer
ESRI.ArcGIS.Carto.IFeatureLayer featureLayer = (ESRI.ArcGIS.Carto.IFeatureLayer)layer; // Explicit Cast
ESRI.ArcGIS.Carto.IFeatureSelection featureSelection = (ESRI.ArcGIS.Carto.IFeatureSelection)layer; // Explicit Cast
ESRI.ArcGIS.Geodatabase.ISelectionSet selectionSet = featureSelection.SelectionSet;
ESRI.ArcGIS.Geodatabase.IFeatureClass featureClass = featureLayer.FeatureClass;
string shapeField = featureClass.ShapeFieldName;
ESRI.ArcGIS.Geodatabase.ISpatialFilter spatialFilterCls = new ESRI.ArcGIS.Geodatabase.SpatialFilterClass();
IScene scene = globe.GlobeDisplay.Scene;
ESRI.ArcGIS.Geometry.ISpatialReference spatialReference = scene.SpatialReference;
spatialFilterCls.GeometryField = shapeField;
spatialFilterCls.set_OutputSpatialReference(shapeField, spatialReference);
ESRI.ArcGIS.Geodatabase.ICursor cursor;
selectionSet.Search(spatialFilterCls, true, out cursor);
ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = (ESRI.ArcGIS.Geodatabase.IFeatureCursor)cursor; // Explicit Cast
ESRI.ArcGIS.Geodatabase.IFeature lineFeature;
lineFeature = featureCursor.NextFeature();
if (lineFeature == null)
{
MessageBox.Show("Please select a feature in the feature layer selected");
}
else
{
CreateFlybyFromPathAnimation(globe, lineFeature, AGImportPathOptionsCls);
}
}
this.Close();
}
public void SetVariables(IGlobe pGlobe)
{
globe = pGlobe;
}
private void CreateFlybyFromPathAnimation(ESRI.ArcGIS.GlobeCore.IGlobe globe, ESRI.ArcGIS.Geodatabase.IFeature lineFeature, ESRI.ArcGIS.Animation.IAGImportPathOptions AGImportPathOptionsCls)
{
ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay = globe.GlobeDisplay;
ESRI.ArcGIS.Analyst3D.IScene scene = globeDisplay.Scene;
// Get a handle to the animation extension
ESRI.ArcGIS.Analyst3D.IBasicScene2 basicScene2 = (ESRI.ArcGIS.Analyst3D.IBasicScene2)scene; // Explicit Cast
ESRI.ArcGIS.Animation.IAnimationExtension animationExtension = basicScene2.AnimationExtension;
// Get the geometry of the line feature
ESRI.ArcGIS.Geometry.IGeometry geometry = lineFeature.Shape;
// Create AGAnimationUtils and AGImportPathOptions objects
ESRI.ArcGIS.Animation.IAGAnimationUtils AGAnimationUtilsCls = new ESRI.ArcGIS.Animation.AGAnimationUtilsClass();
AGImportPathOptionsCls.PathGeometry = geometry;
AGImportPathOptionsCls.AnimationEnvironment = animationExtension.AnimationEnvironment;
ESRI.ArcGIS.Animation.IAGAnimationContainer AGAnimationContainer = animationExtension.AnimationTracks.AnimationObjectContainer;
// Call "CreateFlybyFromPath" method
AGAnimationUtilsCls.CreateFlybyFromPath(AGAnimationContainer, AGImportPathOptionsCls);
}
}
}
[Visual Basic .NET]
frmCameraPath.vb
Imports Microsoft.VisualBasic
Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports CameraFlybyFromPath
Imports ESRI.ArcGIS.Analyst3D
Imports ESRI.ArcGIS.GlobeCore
Imports ESRI.ArcGIS.Animation
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Display
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Geodatabase
Namespace CameraFlybyFromPath
''' <summary>
''' Summary description for frmCameraPath.
''' </summary>
Public Class frmCameraPath : Inherits System.Windows.Forms.Form
Private groupBox_PathSource As System.Windows.Forms.GroupBox
Private radiobutton_Sel_line_feat As System.Windows.Forms.RadioButton
Private checkBox_ReverseOrder As System.Windows.Forms.CheckBox
Private label_VertOffset As System.Windows.Forms.Label
Private textBox_VertOffset As System.Windows.Forms.TextBox
Private label_Simp_Factor As System.Windows.Forms.Label
Private label1 As System.Windows.Forms.Label
Private label2 As System.Windows.Forms.Label
Private groupBox_PathDest As System.Windows.Forms.GroupBox
Private radioButton_flyby As System.Windows.Forms.RadioButton
Private radioButton_currentTarget As System.Windows.Forms.RadioButton
Private radioButton_currentObserver As System.Windows.Forms.RadioButton
Private label_TrackName As System.Windows.Forms.Label
Private textBox_TrackName As System.Windows.Forms.TextBox
Private WithEvents button_Import As System.Windows.Forms.Button
Private WithEvents button_Cancel As System.Windows.Forms.Button
Private groupBox_TrackProps As System.Windows.Forms.GroupBox
Private checkBox_Overwrite As System.Windows.Forms.CheckBox
''' <summary>
''' Required designer variable.
''' </summary>
Private components As System.ComponentModel.Container = Nothing
Private trackBarSimplificationFactor As System.Windows.Forms.TrackBar
Private comboBoxLayers As System.Windows.Forms.ComboBox
Private globe As IGlobe
Private layerArray As IArray = New ArrayClass()
Public Sub New()
'
' Required for Windows Form Designer support
'
InitializeComponent()
'
' TODO: Add any constructor code after InitializeComponent call
''
End Sub
''' <summary>
''' Clean up any resources being used.
''' </summary>
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not components Is Nothing Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
#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 Sub InitializeComponent()
Me.groupBox_PathSource = New System.Windows.Forms.GroupBox()
Me.comboBoxLayers = New System.Windows.Forms.ComboBox()
Me.label1 = New System.Windows.Forms.Label()
Me.label2 = New System.Windows.Forms.Label()
Me.label_Simp_Factor = New System.Windows.Forms.Label()
Me.textBox_VertOffset = New System.Windows.Forms.TextBox()
Me.label_VertOffset = New System.Windows.Forms.Label()
Me.checkBox_ReverseOrder = New System.Windows.Forms.CheckBox()
Me.radiobutton_Sel_line_feat = New System.Windows.Forms.RadioButton()
Me.trackBarSimplificationFactor = New System.Windows.Forms.TrackBar()
Me.groupBox_PathDest = New System.Windows.Forms.GroupBox()
Me.radioButton_currentObserver = New System.Windows.Forms.RadioButton()
Me.radioButton_currentTarget = New System.Windows.Forms.RadioButton()
Me.radioButton_flyby = New System.Windows.Forms.RadioButton()
Me.label_TrackName = New System.Windows.Forms.Label()
Me.textBox_TrackName = New System.Windows.Forms.TextBox()
Me.button_Import = New System.Windows.Forms.Button()
Me.button_Cancel = New System.Windows.Forms.Button()
Me.checkBox_Overwrite = New System.Windows.Forms.CheckBox()
Me.groupBox_TrackProps = New System.Windows.Forms.GroupBox()
Me.groupBox_PathSource.SuspendLayout()
CType(Me.trackBarSimplificationFactor, System.ComponentModel.ISupportInitialize).BeginInit()
Me.groupBox_PathDest.SuspendLayout()
Me.groupBox_TrackProps.SuspendLayout()
Me.SuspendLayout()
'
' groupBox_PathSource
'
Me.groupBox_PathSource.Controls.Add(Me.comboBoxLayers)
Me.groupBox_PathSource.Controls.Add(Me.label1)
Me.groupBox_PathSource.Controls.Add(Me.label2)
Me.groupBox_PathSource.Controls.Add(Me.label_Simp_Factor)
Me.groupBox_PathSource.Controls.Add(Me.textBox_VertOffset)
Me.groupBox_PathSource.Controls.Add(Me.label_VertOffset)
Me.groupBox_PathSource.Controls.Add(Me.checkBox_ReverseOrder)
Me.groupBox_PathSource.Controls.Add(Me.radiobutton_Sel_line_feat)
Me.groupBox_PathSource.Controls.Add(Me.trackBarSimplificationFactor)
Me.groupBox_PathSource.Location = New System.Drawing.Point(8, 8)
Me.groupBox_PathSource.Name = "groupBox_PathSource"
Me.groupBox_PathSource.Size = New System.Drawing.Size(296, 160)
Me.groupBox_PathSource.TabIndex = 0
Me.groupBox_PathSource.TabStop = False
Me.groupBox_PathSource.Text = "Path source"
'
' comboBoxLayers
'
Me.comboBoxLayers.Location = New System.Drawing.Point(152, 24)
Me.comboBoxLayers.Name = "comboBoxLayers"
Me.comboBoxLayers.Size = New System.Drawing.Size(136, 21)
Me.comboBoxLayers.TabIndex = 8
'
' label1
'
Me.label1.Location = New System.Drawing.Point(258, 137)
Me.label1.Name = "label1"
Me.label1.Size = New System.Drawing.Size(30, 16)
Me.label1.TabIndex = 6
Me.label1.Text = "High"
'
' label2
'
Me.label2.Location = New System.Drawing.Point(117, 137)
Me.label2.Name = "label2"
Me.label2.Size = New System.Drawing.Size(32, 16)
Me.label2.TabIndex = 7
Me.label2.Text = "Low"
'
' label_Simp_Factor
'
Me.label_Simp_Factor.Location = New System.Drawing.Point(16, 112)
Me.label_Simp_Factor.Name = "label_Simp_Factor"
Me.label_Simp_Factor.Size = New System.Drawing.Size(104, 24)
Me.label_Simp_Factor.TabIndex = 5
Me.label_Simp_Factor.Text = "Simplification factor"
'
' textBox_VertOffset
'
Me.textBox_VertOffset.Location = New System.Drawing.Point(88, 72)
Me.textBox_VertOffset.Name = "textBox_VertOffset"
Me.textBox_VertOffset.Size = New System.Drawing.Size(56, 20)
Me.textBox_VertOffset.TabIndex = 3
Me.textBox_VertOffset.Text = "0.0"
Me.textBox_VertOffset.TextAlign = System.Windows.Forms.HorizontalAlignment.Right
'
' label_VertOffset
'
Me.label_VertOffset.Location = New System.Drawing.Point(16, 80)
Me.label_VertOffset.Name = "label_VertOffset"
Me.label_VertOffset.Size = New System.Drawing.Size(88, 16)
Me.label_VertOffset.TabIndex = 2
Me.label_VertOffset.Text = "Vertical offset"
'
' checkBox_ReverseOrder
'
Me.checkBox_ReverseOrder.Location = New System.Drawing.Point(16, 48)
Me.checkBox_ReverseOrder.Name = "checkBox_ReverseOrder"
Me.checkBox_ReverseOrder.Size = New System.Drawing.Size(144, 24)
Me.checkBox_ReverseOrder.TabIndex = 1
Me.checkBox_ReverseOrder.Text = "Apply in reverse order"
'
' radiobutton_Sel_line_feat
'
Me.radiobutton_Sel_line_feat.Checked = True
Me.radiobutton_Sel_line_feat.Location = New System.Drawing.Point(16, 24)
Me.radiobutton_Sel_line_feat.Name = "radiobutton_Sel_line_feat"
Me.radiobutton_Sel_line_feat.Size = New System.Drawing.Size(144, 24)
Me.radiobutton_Sel_line_feat.TabIndex = 0
Me.radiobutton_Sel_line_feat.TabStop = True
Me.radiobutton_Sel_line_feat.Text = "Selected line feature in"
'
' trackBarSimplificationFactor
'
Me.trackBarSimplificationFactor.Cursor = System.Windows.Forms.Cursors.Hand
Me.trackBarSimplificationFactor.Location = New System.Drawing.Point(120, 108)
Me.trackBarSimplificationFactor.Maximum = 100
Me.trackBarSimplificationFactor.Name = "trackBarSimplificationFactor"
Me.trackBarSimplificationFactor.Size = New System.Drawing.Size(168, 45)
Me.trackBarSimplificationFactor.TabIndex = 4
Me.trackBarSimplificationFactor.Value = 5
'
' groupBox_PathDest
'
Me.groupBox_PathDest.Controls.Add(Me.radioButton_currentObserver)
Me.groupBox_PathDest.Controls.Add(Me.radioButton_currentTarget)
Me.groupBox_PathDest.Controls.Add(Me.radioButton_flyby)
Me.groupBox_PathDest.Location = New System.Drawing.Point(8, 176)
Me.groupBox_PathDest.Name = "groupBox_PathDest"
Me.groupBox_PathDest.Size = New System.Drawing.Size(296, 104)
Me.groupBox_PathDest.TabIndex = 1
Me.groupBox_PathDest.TabStop = False
Me.groupBox_PathDest.Text = "Path destination"
'
' radioButton_currentObserver
'
Me.radioButton_currentObserver.Location = New System.Drawing.Point(16, 72)
Me.radioButton_currentObserver.Name = "radioButton_currentObserver"
Me.radioButton_currentObserver.Size = New System.Drawing.Size(272, 16)
Me.radioButton_currentObserver.TabIndex = 2
Me.radioButton_currentObserver.Text = "Move target along path with current observer"
'
' radioButton_currentTarget
'
Me.radioButton_currentTarget.Location = New System.Drawing.Point(16, 48)
Me.radioButton_currentTarget.Name = "radioButton_currentTarget"
Me.radioButton_currentTarget.Size = New System.Drawing.Size(272, 16)
Me.radioButton_currentTarget.TabIndex = 1
Me.radioButton_currentTarget.Text = "Move observer along path with current target"
'
' radioButton_flyby
'
Me.radioButton_flyby.Checked = True
Me.radioButton_flyby.Location = New System.Drawing.Point(16, 24)
Me.radioButton_flyby.Name = "radioButton_flyby"
Me.radioButton_flyby.Size = New System.Drawing.Size(272, 16)
Me.radioButton_flyby.TabIndex = 0
Me.radioButton_flyby.TabStop = True
Me.radioButton_flyby.Text = "Move both observer and target along path (fly by)"
'
' label_TrackName
'
Me.label_TrackName.Location = New System.Drawing.Point(16, 24)
Me.label_TrackName.Name = "label_TrackName"
Me.label_TrackName.Size = New System.Drawing.Size(88, 16)
Me.label_TrackName.TabIndex = 2
Me.label_TrackName.Text = "Track name:"
'
' textBox_TrackName
'
Me.textBox_TrackName.Location = New System.Drawing.Point(96, 23)
Me.textBox_TrackName.Name = "textBox_TrackName"
Me.textBox_TrackName.Size = New System.Drawing.Size(192, 20)
Me.textBox_TrackName.TabIndex = 3
Me.textBox_TrackName.Text = "Track from path"
'
' button_Import
'
Me.button_Import.Location = New System.Drawing.Point(144, 368)
Me.button_Import.Name = "button_Import"
Me.button_Import.Size = New System.Drawing.Size(80, 24)
Me.button_Import.TabIndex = 4
Me.button_Import.Text = "Import"
' Me.button_Import.Click += New System.EventHandler(Me.button_Import_Click);
'
' button_Cancel
'
Me.button_Cancel.Location = New System.Drawing.Point(232, 368)
Me.button_Cancel.Name = "button_Cancel"
Me.button_Cancel.Size = New System.Drawing.Size(72, 24)
Me.button_Cancel.TabIndex = 5
Me.button_Cancel.Text = "Cancel"
' Me.button_Cancel.Click += New System.EventHandler(Me.button_Cancel_Click);
'
' checkBox_Overwrite
'
Me.checkBox_Overwrite.Checked = True
Me.checkBox_Overwrite.CheckState = System.Windows.Forms.CheckState.Checked
Me.checkBox_Overwrite.Enabled = False
Me.checkBox_Overwrite.Location = New System.Drawing.Point(16, 48)
Me.checkBox_Overwrite.Name = "checkBox_Overwrite"
Me.checkBox_Overwrite.Size = New System.Drawing.Size(184, 16)
Me.checkBox_Overwrite.TabIndex = 7
Me.checkBox_Overwrite.Text = "Overwrite last imported track"
'
' groupBox_TrackProps
'
Me.groupBox_TrackProps.Controls.Add(Me.textBox_TrackName)
Me.groupBox_TrackProps.Controls.Add(Me.label_TrackName)
Me.groupBox_TrackProps.Controls.Add(Me.checkBox_Overwrite)
Me.groupBox_TrackProps.Location = New System.Drawing.Point(8, 288)
Me.groupBox_TrackProps.Name = "groupBox_TrackProps"
Me.groupBox_TrackProps.Size = New System.Drawing.Size(296, 72)
Me.groupBox_TrackProps.TabIndex = 8
Me.groupBox_TrackProps.TabStop = False
Me.groupBox_TrackProps.Text = "Animation track properties"
'
' frmCameraPath
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(312, 398)
Me.Controls.Add(Me.groupBox_TrackProps)
Me.Controls.Add(Me.button_Cancel)
Me.Controls.Add(Me.button_Import)
Me.Controls.Add(Me.groupBox_PathDest)
Me.Controls.Add(Me.groupBox_PathSource)
Me.Name = "frmCameraPath"
Me.Text = "Camera flyby from path"
' Me.Load += New System.EventHandler(Me.frmCameraPath_Load);
Me.groupBox_PathSource.ResumeLayout(False)
Me.groupBox_PathSource.PerformLayout()
CType(Me.trackBarSimplificationFactor, System.ComponentModel.ISupportInitialize).EndInit()
Me.groupBox_PathDest.ResumeLayout(False)
Me.groupBox_TrackProps.ResumeLayout(False)
Me.groupBox_TrackProps.PerformLayout()
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub frmCameraPath_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim scene As IScene = globe.GlobeDisplay.Scene
'check
Dim enumFtrLayers As IEnumLayer = scene.Layers(Nothing, True)
enumFtrLayers.Reset()
Dim lyr As ILayer = Nothing
Dim fLayer As IFeatureLayer = Nothing
lyr = enumFtrLayers.Next()
Do
If TypeOf lyr Is IFeatureLayer Then
fLayer = TryCast(lyr, IFeatureLayer)
Exit Do
End If
lyr = enumFtrLayers.Next()
Loop While Not lyr Is Nothing
If Not fLayer Is Nothing Then
Dim uid As UID = New UIDClass()
uid.Value = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}"
Dim enumLayers As IEnumLayer = scene.Layers(uid, True)
enumLayers.Reset()
fLayer = CType(enumLayers.Next(), IFeatureLayer)
Do While Not fLayer Is Nothing
If fLayer.FeatureClass.ShapeType.ToString() = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline.ToString() OrElse fLayer.FeatureClass.ShapeType.ToString() = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryLine.ToString() Then
comboBoxLayers.Items.Add(fLayer.Name)
End If
layerArray.Add(fLayer)
fLayer = CType(enumLayers.Next(), IFeatureLayer)
Loop
Else
MessageBox.Show("You don't have any line feature layers in your document")
End If
End Sub
Private Sub button_Cancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button_Cancel.Click
Me.Close()
End Sub
Private Sub button_Import_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button_Import.Click
' point to the first selected feature:
Dim AGImportPathOptionsCls As ESRI.ArcGIS.Animation.IAGImportPathOptions = New ESRI.ArcGIS.Animation.AGImportPathOptionsClass()
' Set properties for AGImportPathOptions
AGImportPathOptionsCls.BasicMap = CType(globe, ESRI.ArcGIS.Carto.IBasicMap) ' Explicit Cast
AGImportPathOptionsCls.AnimationTracks = CType(globe, ESRI.ArcGIS.Animation.IAGAnimationTracks) ' Explicit Cast
AGImportPathOptionsCls.AnimationType = New ESRI.ArcGIS.GlobeCore.AnimationTypeGlobeCameraClass()
AGImportPathOptionsCls.AnimatedObject = globe.GlobeDisplay.ActiveViewer.Camera
If Me.radioButton_flyby.Checked = True Then
AGImportPathOptionsCls.ConversionType = esriFlyFromPathType.esriFlyFromPathObsAndTarget
AGImportPathOptionsCls.PutAngleCalculationMethods(esriPathAngleCalculation.esriAngleAddRelative, esriPathAngleCalculation.esriAngleAddRelative, esriPathAngleCalculation.esriAngleAddRelative)
AGImportPathOptionsCls.PutAngleCalculationValues(0.0, 0.0, 0.0)
ElseIf Me.radioButton_currentTarget.Checked = True Then
AGImportPathOptionsCls.ConversionType = esriFlyFromPathType.esriFlyFromPathObserver
ElseIf Me.radioButton_currentObserver.Checked = True Then
AGImportPathOptionsCls.ConversionType = esriFlyFromPathType.esriFlyFromPathTarget
End If
Dim pAzimuth, pInclination, pRollVal As Double
AGImportPathOptionsCls.GetAngleCalculationValues(pAzimuth, pInclination, pRollVal)
AGImportPathOptionsCls.LookaheadFactor = Me.trackBarSimplificationFactor.Value / 100
AGImportPathOptionsCls.TrackName = Me.textBox_TrackName.Text
AGImportPathOptionsCls.OverwriteExisting = Convert.ToBoolean(Me.checkBox_Overwrite.CheckState)
AGImportPathOptionsCls.VerticalOffset = Convert.ToDouble(Me.textBox_VertOffset.Text)
AGImportPathOptionsCls.ReversePath = Convert.ToBoolean(Me.checkBox_ReverseOrder.CheckState)
' get the layer selected in the combo box
If Me.comboBoxLayers.SelectedIndex = -1 Then
MessageBox.Show("Please select a layer before you proceed")
Else
'set the layer based on the item selected in the combo box
Dim layer As ESRI.ArcGIS.Carto.ILayer = CType(layerArray.Element(Me.comboBoxLayers.SelectedIndex), ESRI.ArcGIS.Carto.ILayer) ' Explicit Cast
' Get the line feature selected in the layer
Dim featureLayer As ESRI.ArcGIS.Carto.IFeatureLayer = CType(layer, ESRI.ArcGIS.Carto.IFeatureLayer) ' Explicit Cast
Dim featureSelection As ESRI.ArcGIS.Carto.IFeatureSelection = CType(layer, ESRI.ArcGIS.Carto.IFeatureSelection) ' Explicit Cast
Dim selectionSet As ESRI.ArcGIS.Geodatabase.ISelectionSet = featureSelection.SelectionSet
Dim featureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass = featureLayer.FeatureClass
Dim shapeField As String = featureClass.ShapeFieldName
Dim spatialFilterCls As ESRI.ArcGIS.Geodatabase.ISpatialFilter = New ESRI.ArcGIS.Geodatabase.SpatialFilterClass()
Dim scene As IScene = globe.GlobeDisplay.Scene
Dim spatialReference As ESRI.ArcGIS.Geometry.ISpatialReference = scene.SpatialReference
spatialFilterCls.GeometryField = shapeField
spatialReference = spatialFilterCls.OutputSpatialReference(shapeField)
Dim cursor As ESRI.ArcGIS.Geodatabase.ICursor
cursor = Nothing
selectionSet.Search(spatialFilterCls, True, cursor)
Dim featureCursor As ESRI.ArcGIS.Geodatabase.IFeatureCursor = CType(cursor, ESRI.ArcGIS.Geodatabase.IFeatureCursor) ' Explicit Cast
Dim lineFeature As ESRI.ArcGIS.Geodatabase.IFeature
lineFeature = featureCursor.NextFeature()
If lineFeature Is Nothing Then
MessageBox.Show("Please select a feature in the selected layer")
Else
CreateFlybyFromPathAnimation(globe, lineFeature, AGImportPathOptionsCls)
End If
End If
Me.Close()
End Sub
Public Sub SetVariables(ByVal pGlobe As IGlobe)
globe = pGlobe
End Sub
Private Sub CreateFlybyFromPathAnimation(ByVal globe As ESRI.ArcGIS.GlobeCore.IGlobe, ByVal lineFeature As ESRI.ArcGIS.Geodatabase.IFeature, ByVal AGImportPathOptionsCls As ESRI.ArcGIS.Animation.IAGImportPathOptions)
Dim globeDisplay As ESRI.ArcGIS.GlobeCore.IGlobeDisplay = globe.GlobeDisplay
Dim scene As ESRI.ArcGIS.Analyst3D.IScene = globeDisplay.Scene
' Get a handle to the animation extension
Dim basicScene2 As ESRI.ArcGIS.Analyst3D.IBasicScene2 = CType(scene, ESRI.ArcGIS.Analyst3D.IBasicScene2) ' Explicit Cast
Dim animationExtension As ESRI.ArcGIS.Animation.IAnimationExtension = basicScene2.AnimationExtension
' Get the geometry of the line feature
Dim geometry As ESRI.ArcGIS.Geometry.IGeometry = lineFeature.Shape
' Create AGAnimationUtils and AGImportPathOptions objects
Dim AGAnimationUtilsCls As ESRI.ArcGIS.Animation.IAGAnimationUtils = New ESRI.ArcGIS.Animation.AGAnimationUtilsClass()
AGImportPathOptionsCls.PathGeometry = geometry
AGImportPathOptionsCls.AnimationEnvironment = animationExtension.AnimationEnvironment
Dim AGAnimationContainer As ESRI.ArcGIS.Animation.IAGAnimationContainer = animationExtension.AnimationTracks.AnimationObjectContainer
' Call "CreateFlybyFromPath" method
AGAnimationUtilsCls.CreateFlybyFromPath(AGAnimationContainer, AGImportPathOptionsCls)
End Sub
End Class
End Namespace