using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using GeoScene.Globe; using GeoScene.Data; using System.Collections; using System.IO; namespace Cyberpipe { public partial class FrmBoosterValvers : DevComponents.DotNetBar.Office2007Form { GSOGlobeControl globeControl1; GSOFeatures m_BoosterValvesAnalyResFeatures; ArrayList m_BoosterValvesList; private static FrmBoosterValvers form = null; GSOFeatures m_AffectedPipeLines; public static FrmBoosterValvers getForm(GSOGlobeControl globe, GSOFeatures features, ArrayList list, GSOFeatures m_AffectedPipeLines1) { if (form == null) { form = new FrmBoosterValvers(globe, features, list, m_AffectedPipeLines1); } else { form.m_BoosterValvesAnalyResFeatures = features; form.m_BoosterValvesList = list; form.m_AffectedPipeLines = m_AffectedPipeLines1; } return form; } public FrmBoosterValvers(GSOGlobeControl globe, GSOFeatures features, ArrayList list,GSOFeatures m_AffectedPipeLines1) { InitializeComponent(); globeControl1 = globe; m_BoosterValvesAnalyResFeatures = features; m_BoosterValvesList = list; m_AffectedPipeLines = m_AffectedPipeLines1; } private void ClearAffectedPipeLine() { if (m_AffectedPipeLines != null) { int nCount = m_AffectedPipeLines.Length; for (int i = 0; i < nCount; i++) { m_AffectedPipeLines[i].HighLight = false; } m_AffectedPipeLines = null; } } public void setLstValvesName() { lstValvesName.Items.Clear(); int ncount = m_BoosterValvesAnalyResFeatures.Length; if (ncount > 0) { for (int i = 0; i < ncount; i++) { lstValvesName.Items.Add(m_BoosterValvesAnalyResFeatures[i].Name); } } } /// <summary> /// 列表项双击事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lstValvesName_MouseDoubleClick(object sender, MouseEventArgs e) { int i = this.lstValvesName.SelectedIndex; if (i < 0) { return; } GSOFeature m_BoosterValvesAnalyResFeature = m_BoosterValvesAnalyResFeatures[i]; globeControl1.Globe.FlyToFeature(m_BoosterValvesAnalyResFeature, 0, 45, 3); GSOLabel newLabel = new GSOLabel(); newLabel.Text = "关闭此阀门"; newLabel.Style = new GSOLabelStyle(); newLabel.Style.Opaque = 0.8; newLabel.Style.OutlineColor = Color.Red; //newLabel.Style.TractionLineEndPos = new GSOPoint2d(150, 120); newLabel.Style.OutlineWidth = 1; newLabel.Style.TracktionLineWidth = 1; newLabel.Style.BackBeginColor = Color.Orange; newLabel.Style.BackEndColor = Color.PaleGreen; m_BoosterValvesAnalyResFeature.Label = newLabel; m_BoosterValvesList.Add(m_BoosterValvesAnalyResFeature); globeControl1.Refresh(); } /// <summary> /// 清除阀门结果 /// </summary> private void ClearBoosterValvesAnalysis()//清楚阀门分析结果 { if (m_BoosterValvesAnalyResFeatures != null) { for (int i = 0; i < m_BoosterValvesList.Count; i++) { GSOFeature feature = m_BoosterValvesList[i] as GSOFeature; feature.Label.Text = ""; } globeControl1.Refresh(); m_BoosterValvesAnalyResFeatures = null; m_BoosterValvesList = new ArrayList(); } } /// <summary> /// 窗体关闭事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmBoosterValvers_FormClosing(object sender, FormClosingEventArgs e) { ClearBoosterValvesAnalysis(); ClearAffectedPipeLine(); form = null; } /// <summary> /// 右键飞行按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FlyToMenu_Click(object sender, EventArgs e) { int i = this.lstValvesName.SelectedIndex; if (i < 0) { return; } GSOFeature m_BoosterValvesAnalyresFeature = m_BoosterValvesAnalyResFeatures[i]; globeControl1.Globe.FlyToFeature(m_BoosterValvesAnalyresFeature, 0, 45, 3); LightMenu_Click(sender, e); GSOLabel newLabel = new GSOLabel(); newLabel.Text = "关闭此阀门"; newLabel.Style = new GSOLabelStyle(); newLabel.Style.Opaque = 0.8; newLabel.Style.OutlineColor = Color.Red; //newLabel.Style.TractionLineEndPos = new GSOPoint2d(150, 120); newLabel.Style.OutlineWidth = 1; newLabel.Style.TracktionLineWidth = 1; newLabel.Style.BackBeginColor = Color.Orange; newLabel.Style.BackEndColor = Color.PaleGreen; m_BoosterValvesAnalyresFeature.Label = newLabel; m_BoosterValvesList.Add(m_BoosterValvesAnalyresFeature); globeControl1.Refresh(); } string flashflag = ""; /// <summary> /// 右键高亮按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LightMenu_Click(object sender, EventArgs e) { flashflag = "single"; timer1.Start(); } /// <summary> /// 列表项右键单击事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lstValvesName_MouseDown(object sender, MouseEventArgs e) { int i = this.lstValvesName.SelectedIndex; if (i < 0) { return; } if (e.Button == MouseButtons.Right) { lstValvesName.ContextMenuStrip = contextMenuStrip1; foreach (ToolStripItem item in contextMenuStrip1.Items) { item.Visible = true; } } } int count=0; /// <summary> /// 定时器事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer1_Tick(object sender, EventArgs e) { int i = this.lstValvesName.SelectedIndex; if (i < 0) { return; } GSOFeature m_feature = m_BoosterValvesAnalyResFeatures[i]; if (count < 40) { count++; if (flashflag == "single") { if (m_feature != null) { if (count % 2 != 0) { m_feature.HighLight = true; globeControl1.Refresh(); } else { m_feature.HighLight = false; globeControl1.Refresh(); } } } else if (flashflag == "all") { } } else { timer1.Stop(); count = 0; } } /// <summary> /// 添加火苗 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="z"></param> /// <returns></returns> private GSOFeature AddFire(double x,double y,double z) { // 烟火示例 string strResPath = Application.StartupPath + "/Resource"; // 烟火粒子示例,由三个发射器构成 GSOGeoParticle geoParticle = new GSOGeoParticle(); geoParticle.SetPosition(x, y, z); // 添加到这个经纬度位置 geoParticle.AltitudeMode = EnumAltitudeMode.RelativeToGround; GSORingParticleEmitter emitter = new GSORingParticleEmitter(); emitter.TexturePath = strResPath + "/ParticleImage/flare.png"; emitter.SetSizeFix(1, 1); emitter.VelFix = 1; emitter.VelRnd = 5; emitter.AngleXYFix = 0; emitter.AngleXYRnd = 180; emitter.AngleXZFix = 90; emitter.AngleXZRnd = 0; emitter.LifeFix = 0.5f; emitter.LifeRnd = 0.0f; emitter.RotFix = 0; emitter.RotRnd = 0; emitter.RotVelFix = 0; emitter.RotVelRnd = 0; emitter.EmitPerSec = 100; // 采用线性插值生成粒子的初始颜色 emitter.ColorRndStart = Color.White; emitter.ColorRndEnd = Color.Red; GSOColorParticleEffector effector2 = new GSOColorParticleEffector(); effector2.SetColorChanged(0, -1, -1, 0); effector2.StartTime = 0.0f; effector2.EndTime = -1.0f; emitter.AddEffector(effector2); // 将三个发射器添加到粒子对象中 geoParticle.AddEmitter(emitter); geoParticle.Play(); GSOFeature feature = new GSOFeature(); feature.Geometry = geoParticle; globeControl1.Globe.MemoryLayer.AddFeature(feature); return feature; } /// <summary> /// 添加喷泉 /// </summary> /// <returns></returns> private GSOFeature AddFountain() { string strResPath = Application.StartupPath + "/Resource"; GSOGeoParticle geoParticle = new GSOGeoParticle(); geoParticle.SetPosition(116.314, 39.84, 0); // 添加到这个经纬度位置 GSOPointParticleEmitter emitter = new GSOPointParticleEmitter(); emitter.TexturePath = strResPath + "/ParticleImage/test.png"; emitter.SetSizeFix(0.5f, 2); emitter.VelFix = 10; emitter.VelRnd = 2; emitter.GravityAcc = 9.8f; emitter.AngleXYFix = 0; emitter.AngleXYRnd = 180; emitter.AngleXZFix = 88; emitter.AngleXZRnd = 2; //emitter.InnerRadius = 0; // emitter.OuterRadius = 0.03f; emitter.LifeFix = 5.0f; emitter.LifeRnd = 1.0f; emitter.RotFix = 0; emitter.RotRnd = 0; emitter.RotVelFix = 0; emitter.RotVelRnd = 0; emitter.EmitPerSec = 1000; emitter.ColorRndStart = Color.FromArgb(33, 255, 255, 255); emitter.ColorRndEnd = Color.FromArgb(11, 255, 255, 255); emitter.IsLumAdded = false; // 将三个发射器添加到粒子对象中 geoParticle.AddEmitter(emitter); geoParticle.Play(); GSOFeature feature = new GSOFeature(); feature.Geometry = geoParticle; //globeControl1.Globe.MemoryLayer.AddFeature(feature); globeControl1.Globe.FlyToFeature(feature); return feature; } /// <summary> /// 添加水柱 /// </summary> /// <returns></returns> private GSOFeature AddWaterLine() { string strResPath = Application.StartupPath + "/Resource"; GSOGeoParticle geoParticle = new GSOGeoParticle(); geoParticle.SetPosition(116.308, 39.84, 0); // 添加到这个经纬度位置 GSOPointParticleEmitter emitter = new GSOPointParticleEmitter(); emitter.TexturePath = strResPath + "/ParticleImage/drop3.png"; geoParticle.TimerInterval = 1; emitter.SetSizeFix(2.0f, 2.0f); emitter.VelFix = 50; emitter.VelRnd = 2; // emitter.IsLumAdded = false; emitter.GravityAcc = 9.8f; emitter.AngleXYFix = 0; emitter.AngleXYRnd = 2; emitter.AngleXZFix = 60; emitter.AngleXZRnd = 2; //emitter.InnerRadius = 0; // emitter.OuterRadius = 0.1f; emitter.LifeFix = 5.0f; emitter.LifeRnd = 1.0f; emitter.RotFix = 0; emitter.RotRnd = 0; emitter.RotVelFix = 0; emitter.RotVelRnd = 0; emitter.EmitPerSec = 1500; emitter.ColorRndStart = Color.FromArgb(100, 222, 222, 222); emitter.ColorRndEnd = Color.FromArgb(50, 222, 222, 222); /* GSOScaleParticleEffector effector1 = new GSOScaleParticleEffector(); effector1.SetScale(0.2f, 0.2f); effector1.StartTime = 0; effector1.EndTime = -1; // 负数表示整个粒子生命结束 emitter.AddEffector(effector1); */ // 将三个发射器添加到粒子对象中 geoParticle.AddEmitter(emitter); geoParticle.Play(); GSOFeature feature = new GSOFeature(); feature.Geometry = geoParticle; //globeControl1.Globe.MemoryLayer.AddFeature(feature); globeControl1.Globe.FlyToFeature(feature); return feature; } } }