/// <summary> /// 模型替换 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_ReplaceModel_Click(object sender, EventArgs e) { if (_trackPressPolygon.Count < 1) { MessageBox.Show("请先绘制压平模型。"); return; } foreach (var trackPolygon in _trackPressPolygon) { //创建模型 GSOGeoModel model = new GSOGeoModel(); //给定模型路径 model.FilePath = _modelPath; //模型加载 model.Load(); //模型位置 model.Position = trackPolygon.GeoCenterPoint; //将模型放置于模型表面 model.AltitudeMode = EnumAltitudeMode.ClampToModel; //把几何体放到表面上 GSOFeature f = new GSOFeature(); //创建几何要素 f.Geometry = model; f.Name = "模型 01"; //把几何要素添加到内存图层中 GSOFeature newFeature = _glbControl.Globe.MemoryLayer.AddFeature(f); _glbControl.Refresh(); //刷新场景 } }
private void AddModel() { GSOGeoModel model = new GSOGeoModel(); //创建模型 GSOPoint3d pt = new GSOPoint3d(); //创建点 pt.X = 116.6; pt.Y = 39.9; pt.Z = 0; //模型可以是3ds、obj、gse、gsez格式的三维模型 //模型所在路径,用户可根据实际情况进行设置 string filepath = Application.StartupPath + "\\Model\\坦克.3ds"; //设置模型 model.FilePath = filepath; model.Position = pt; model.AltitudeMode = EnumAltitudeMode.ClampToGround; //把几何体放到地面上 GSOFeature feaf = new GSOFeature(); //创建几何要素 feaf.Geometry = model; feaf.Name = "模型 01"; feaf.Description = "模型 01"; //设置feature description的值,这个值将在tooltip上显示 //把几何要素添加到内存图层中 globeControl1.Globe.MemoryLayer.AddFeature(feaf); }
/// <summary> /// 创建模型 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAddModel_Click(object sender, EventArgs e) { GSOGeoModel model = new GSOGeoModel(); //创建模型 GSOPoint3d pt = new GSOPoint3d(); //创建点 pt.X = 116.6; pt.Y = 39.9; pt.Z = 0; GSOModelPointStyle3D style = new GSOModelPointStyle3D(); //创建模型的风格 model.Style = style; //模型可以是3ds、obj、gse、gsez格式的三维模型 //模型所在路径,用户可根据实际情况进行设置 string filepath = Application.StartupPath + "\\Model\\坦克.3ds"; //设置模型 model.FilePath = filepath; model.Position = pt; model.AltitudeMode = EnumAltitudeMode.ClampToGround; //把几何体放到地面上 GSOFeature f = new GSOFeature(); //创建几何要素 f.Geometry = model; f.Name = "模型 01"; f.Description = "模型 01"; //设置feature description的值,这个值将在tooltip上显示 //把几何要素添加到内存图层中 globeControl1.Globe.MemoryLayer.AddFeature(f); //飞行到模型所在的位置 globeControl1.Globe.FlyToFeature(f); }
private void btn_Model_Click(object sender, EventArgs e) { GSOGeoModel model = new GSOGeoModel(); //创建模型 GSOPoint3d pt = new GSOPoint3d(); //创建点 pt.X = 120; pt.Y = 30; pt.Z = 0; GSOModelPointStyle3D style = new GSOModelPointStyle3D(); //创建模型的风格 model.Style = style; //设置模型 model.FilePath = _modelPath; model.Position = pt; model.AltitudeMode = EnumAltitudeMode.ClampToGround; //把几何体放到地面上 GSOFeature f = new GSOFeature(); //创建几何要素 f.Geometry = model; f.Name = "模型 01"; f.Description = "模型 01"; //设置feature description的值,这个值将在tooltip上显示 //把几何要素添加到内存图层中 GSOFeature newFeature = _glbControl.Globe.MemoryLayer.AddFeature(f); _glbControl.Globe.FlyToFeature(f); //飞行到模型所在的位置 _glbControl.Refresh(); //刷新场景 }
private void MoveEachFeature(GSOFeatureFolder folder, double height) { GSOFeatures features = folder.Features; for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature is GSOFeatureFolder) { MoveEachFeature(feature as GSOFeatureFolder, height); } else { GSOGeoModel model = feature.Geometry as GSOGeoModel; if (model != null) { GSOPoint3d pt = model.Position; if (model.AltitudeMode == EnumAltitudeMode.ClampToGround) { model.AltitudeMode = EnumAltitudeMode.RelativeToGround; } pt.Z += height; model.Position = pt; } } } }
private void buttonOk_Click(object sender, EventArgs e)//确定 { if (comboBox1.Text.Trim() == "") { MessageBox.Show("图层不能为空"); return; } if (txtPath.Text.Trim() == "") { MessageBox.Show("模型路径不能为空"); return; } if (textBoxLayerPath.Text.Trim() == "") { MessageBox.Show("图层保存路径不能为空"); return; } GSOLayer newlayer = globeControl1.Globe.Layers.Add(textBoxLayerPath.Text.Trim()); newlayer.Caption = Path.GetFileNameWithoutExtension(txtPath.Text.Trim()); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(comboBox1.Text.Trim()); if (layer != null) { GSOFeatures features = layer.GetAllFeatures(); if (features.Length > 0) { for (int i = 0; i < features.Length; i++) { if (features[i] != null && features[i].Geometry != null) { if (features[i].Geometry.Type == EnumGeometryType.GeoPoint3D) { GSOFeature feature = new GSOFeature(); GSOGeoPoint3D point3d = features[i].Geometry as GSOGeoPoint3D; if (point3d != null) { GSOGeoModel model = new GSOGeoModel(); model.FilePath = txtPath.Text.Trim(); model.Position = point3d.Position; feature.Geometry = model; newlayer.AddFeature(feature); } } } } globeControl1.Globe.Refresh(); } } this.Close(); }
private void CtrlModelPathPage_Load(object sender, EventArgs e) { if (m_Feature != null) { GSOGeoModel geoModel = m_Feature.Geometry as GSOGeoModel; if (geoModel != null) { textBoxModelPath.Text = geoModel.FilePath; } } }
// 沿线运动对象 private void btn_MoveObj_Click(object sender, EventArgs e) { //创建路线(也可以通过获取) GSOGeoPolyline3D polyLine = new GSOGeoPolyline3D(); GSOPoint3ds pnts = new GSOPoint3ds(); //创建节点对象 //把各节点添加到节点对象上 pnts.Add(new GSOPoint3d(120.4, 31.3, 0)); pnts.Add(new GSOPoint3d(120.41, 31.31, 0)); pnts.Add(new GSOPoint3d(120.42, 31.32, 0)); pnts.Add(new GSOPoint3d(120.43, 31.30, 0)); pnts.Add(new GSOPoint3d(120.44, 31.34, 0)); polyLine.AddPart(pnts); GSORoute route = new GSORoute(); //创建路径 for (int i = 0; i < polyLine[0].Count; i++) { route.Add(polyLine[0][i]); } // 设置路径属性 route.CircleRoute = true; //路径是否闭合 route.Speed = 10; //沿线运动速度 route.SpeedAcceleration = 1; //加速度 route.RotateSpeed = 10; //拐弯速度 //加载模型 GSOGeoModel model = new GSOGeoModel(); model.FilePath = _modelPath; //3D模型路径 //创建沿线运动模型要素 GSOGeoDynamicRoute dynamicRoute = new GSOGeoDynamicRoute(); dynamicRoute.ActorGeometry = model; //添加模型到沿线运动模型上 dynamicRoute.Route = route; //赋路线 dynamicRoute.Play(); //播放运动 dynamicRoute.TimerInterval = 20; //播放时间间隔 GSOFeature feature = new GSOFeature(); feature.Geometry = dynamicRoute; GSOFeature polylineFeature = new GSOFeature(); polylineFeature.Geometry = polyLine; _glbControl.Globe.MemoryLayer.AddFeature(feature); _glbControl.Globe.MemoryLayer.AddFeature(polylineFeature); _glbControl.Globe.FlyToFeature(polylineFeature); }
void mGlobeControl_MouseUp(object sender, MouseEventArgs e)//单击添加模型 { if (e.Button == MouseButtons.Left) { GSOPoint3d newpoint; GSOLayer templayer; GSOFeature feature1 = mGlobeControl.Globe.HitTest(e.X, e.Y, out templayer, out newpoint, false, true, 0); if (newpoint.X == 0 && newpoint.Y == 0 && newpoint.Z == 0) { newpoint = mGlobeControl.Globe.ScreenToScene(e.X, e.Y); } if (newpoint == point) { GSOPoint3d pt = new GSOPoint3d(); pt.X = newpoint.X; pt.Y = newpoint.Y; pt.Z = newpoint.Z; if (filePath != null && filePath != "") { if (mGlobeControl.Globe.Action == EnumAction3D.SelectObject) { GSOFeature newfeature = null; if (mGlobeControl.Globe.DestLayerFeatureAdd.Dataset != null && mGlobeControl.Globe.DestLayerFeatureAdd.Dataset.IsFeatureDataset == true) { GSOFeatureDataset featureDataset = mGlobeControl.Globe.DestLayerFeatureAdd.Dataset as GSOFeatureDataset; newfeature = featureDataset.CreateFeature(); } else { newfeature = new GSOFeature(); } newfeature.Name = Path.GetFileNameWithoutExtension(filePath) + "_" + iModelCount.ToString(); GSOGeoModel model = new GSOGeoModel(); model.FilePath = filePath; model.Position = pt; newfeature.Geometry = model; mGlobeControl.Globe.DestLayerFeatureAdd.AddFeature(newfeature); iModelCount++; } } } } }
private void listView1_SelectedIndexChanged_1(object sender, EventArgs e)//单击listView的项并在控件中预览 { if (listView1.SelectedItems.Count > 0) { plane3DControl.Plane3DScene.RemoveAllFeature(); GSOFeature feature = new GSOFeature(); GSOGeoModel model = new GSOGeoModel(); model.FilePath = dictionary[listView1.SelectedItems[0].Index]; model.SetPosition(0, 0, 0); feature.Geometry = model; feature.Geometry.HighLight = false; feature.Geometry.LatLonCoord = false; plane3DControl.Plane3DScene.AddFeature(feature); filePath = dictionary[listView1.SelectedItems[0].Index]; } }
private void btnAdd_Click(object sender, EventArgs e) { if (feature != null) { GSOPoint3d pt = new GSOPoint3d(); pt.X = point.X; pt.Y = point.Y; pt.Z = point.Z; GSOGeoModel model = new GSOGeoModel(); model.FilePath = modelPath; model.Position = pt; model.AltitudeMode = EnumAltitudeMode.Absolute; feature = new GSOFeature(); feature.Geometry = model; layer.AddFeature(feature); globeControl1.Refresh(); } this.Close(); }
private void listBoxSize_SelectedIndexChanged(object sender, EventArgs e) { if (listBoxSize.SelectedIndex != -1) { string path = Application.StartupPath + @"\管道配件gcm\" + listBoxType.SelectedItem.ToString() + "\\" + list[listBoxSize.SelectedIndex]; GSOGeoModel model = new GSOGeoModel(); model.FilePath = path; modelPath = path; model.SetPosition(0, 0, 0); feature = new GSOFeature(); feature.Geometry = model; feature.Geometry.LatLonCoord = false; feature.HighLight = false; this.plane3DControl.Plane3DScene.RemoveAllFeature(); this.plane3DControl.Plane3DScene.AddFeature(feature); } else { } }
private void buttonOK_Click(object sender, EventArgs e) { if (listBoxLayerNames.SelectedItems.Count <= 0) { MessageBox.Show("请选中要修改图层的名称!", "提示"); return; } string modelPath = textBoxModelPath.Text.Trim(); if (modelPath == "") { MessageBox.Show("请选择一个模型!", "提示"); return; } for (int i = 0; i < listBoxLayerNames.SelectedItems.Count; i++) { string layerName = listBoxLayerNames.SelectedItems[i].ToString().Trim(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerName); if (layer != null && layer is GSOFeatureLayer) { for (int j = 0; j < layer.GetAllFeatures().Length; j++) { GSOFeature feature = layer.GetAt(j); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoModel) { GSOGeoModel model = feature.Geometry as GSOGeoModel; GSOGeoModel modelnew = new GSOGeoModel(); modelnew.FilePath = modelPath; modelnew.Position = model.Position; feature.Geometry = modelnew; } } layer.Save(); } } globeControl1.Globe.Refresh(); MessageBox.Show("修改成功!", "提示"); this.Close(); }
private void buttonOK_Click(object sender, EventArgs e) { if (listBoxLayerNames.SelectedItems.Count <= 0) { MessageBox.Show("请选中要修改图层的名称!","提示"); return; } string modelPath = textBoxModelPath.Text.Trim(); if (modelPath == "") { MessageBox.Show("请选择一个模型!", "提示"); return; } for (int i = 0; i < listBoxLayerNames.SelectedItems.Count; i++) { string layerName = listBoxLayerNames.SelectedItems[i].ToString().Trim(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerName); if (layer != null && layer is GSOFeatureLayer) { for (int j = 0; j < layer.GetAllFeatures().Length; j++) { GSOFeature feature = layer.GetAt(j); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoModel) { GSOGeoModel model = feature.Geometry as GSOGeoModel; GSOGeoModel modelnew = new GSOGeoModel(); modelnew.FilePath = modelPath; modelnew.Position = model.Position; feature.Geometry = modelnew; } } layer.Save(); } } globeControl1.Globe.Refresh(); MessageBox.Show("修改成功!","提示"); this.Close(); }
private GSOFeatures getFeatures() { try { GSOFeatures feats = new GSOFeatures(); double min = double.Parse(textBox1.Text); double max = double.Parse(textBox2.Text); for (int i = 0; i < treeView1.Nodes.Count; i++) { if (treeView1.Nodes[i].Checked) { GSOLayer layer = treeView1.Nodes[i].Tag as GSOLayer; GSOFeatures fs = layer.GetAllFeatures(); for (int j = 0; j < fs.Length; j++) { GSOFeature f = fs[j]; double z = f.Geometry.GeoCenterPoint.Z; if (f != null && f.Geometry != null && f.Geometry.Type == EnumGeometryType.GeoModel) { GSOGeoModel model = f.Geometry as GSOGeoModel; z = model.PositionZ; } if (z >= min && z <= max) { feats.Add(f); } } } } return(feats); } catch (Exception exp) { exp.GetType(); } return(null); }
private void AddMultiModeMenuItem_Click(object sender, EventArgs e) { FrmAddMultiModel dlg = new FrmAddMultiModel(); if (dlg.ShowDialog() == DialogResult.OK) { TreeNode featureAddLayerTreeNode = GetDestLayerFeatureAddTreeNode(); if (featureAddLayerTreeNode != null) { GSOLayer featureAddLayer = (GSOLayer)featureAddLayerTreeNode.Tag; int nSelFileNum = dlg.m_arryFileSel.Count; for (int i = 0; i < nSelFileNum; i++) { string strFilePath = dlg.m_arryFileSel[i].ToString(); string strFileExt = Path.GetExtension(strFilePath).ToLower(); string strFileName = Path.GetFileName(strFilePath); int nIndex = strFileName.LastIndexOf('.'); string strTitle = strFileName.Substring(0, nIndex); GSOFeature f = new GSOFeature(); GSOGeoModel model = new GSOGeoModel(); model.FilePath = strFilePath; if (strFileExt == ".gcm") // 如果是gcm需要提前加载坐标信息 { model.LoadGCMCoordInfo(); if (!model.IsCoordInfoValid()) { GSOPoint3d pt = new GSOPoint3d(); pt.X = globeControl1.Globe.CameraState.Longitude; pt.Y = globeControl1.Globe.CameraState.Latitude; pt.Z = model.Position.Z; // 注意z值还是要保留下来的 model.Position = pt; } model.AltitudeMode = EnumAltitudeMode.RelativeToGround; } else { GSOPoint3d pt = new GSOPoint3d(); pt.X = globeControl1.Globe.CameraState.Longitude; pt.Y = globeControl1.Globe.CameraState.Latitude; pt.Z = 0; model.Position = pt; model.AltitudeMode = EnumAltitudeMode.ClampToGround; } f.Geometry = model; f.Name = strTitle; featureAddLayer.AddFeature(f); } RefreshTreeNodeLayerFeatureList(featureAddLayerTreeNode); globeControl1.Globe.Refresh(); } } }
private void button3_Click(object sender, EventArgs e) { if (comboBoxDataSourceList.SelectedItem == null) { MessageBox.Show("请选择一个目标数据源!", "提示"); return; } GSODataSource ds = Utility.getDataSourceByFullName(globeControl1, comboBoxDataSourceList.SelectedItem.ToString().Trim()); if (ds == null) { MessageBox.Show("选择的目标数据源为空!", "提示"); return; } if (textBoxModelFolder.Text == "") { return; } if (comboBoxShpLayerList.SelectedIndex < 0) { return; } try { Regex regNum = new Regex("^[0-9]"); DirectoryInfo theFolder = new DirectoryInfo(textBoxModelFolder.Text); foreach (FileInfo nextFile in theFolder.GetFiles()) { if (nextFile.Name.ToLower().IndexOf("3ds") > -1 || nextFile.Name.ToLower().IndexOf("gcm") > -1) { files.Add(nextFile.Name); string temp = nextFile.Name.Substring(nextFile.Name.IndexOf("-") + 1, nextFile.Name.LastIndexOf(".") - nextFile.Name.IndexOf("-") - 1); string modeltype = nextFile.Name.Substring(0, nextFile.Name.IndexOf("-")); modeltypes.Add(modeltype); double Num; bool isNum = double.TryParse(temp, out Num); if (isNum) { deeps.Add(Convert.ToDouble(temp)); } } } GSODataset dataset = ds.GetDatasetByName(textBoxNewLayerName.Text.Trim()); GSOFeatureDataset featdataset; if (dataset != null) { DialogResult result = MessageBox.Show("工井图层名称在数据库中已存在!是否向该表追加", "提示", MessageBoxButtons.YesNo); if (result == DialogResult.No) { return; } else if (result == DialogResult.Yes) { featdataset = dataset as GSOFeatureDataset; } else { return; } } else { featdataset = CreateDBFeatureDataset(textBoxNewLayerName.Text.Trim()); } if (featdataset == null) { return; } featdataset.Open(); GSOLayer shpLayer = globeControl1.Globe.Layers.GetLayerByCaption(comboBoxShpLayerList.SelectedItem.ToString().Trim()); if (shpLayer == null) { return; } GSOFeatures features = shpLayer.GetAllFeatures(true); string message = ""; for (int j = 0; j < features.Length; j++) { GSOFeature f = features[j]; GSOGeoPoint3D shpPoint = f.Geometry as GSOGeoPoint3D; double x; double y; double rotateAngle = 0; string currentModelType = f.GetValue(combCode.SelectedItem.ToString()).ToString(); double z = Convert.ToDouble(txtUpGround.Text); double deep = f.GetFieldAsDouble(combDeep.SelectedItem.ToString()); int index = -1; double diff = double.MaxValue; for (int i = 0; i < deeps.Count; i++) { double tempdeep = Convert.ToDouble(deeps[i]); string modeltype = modeltypes[i].ToString(); if (modeltype != currentModelType) { continue; } if (tempdeep > deep) { double chazhi = tempdeep - deep; if (diff > chazhi) { diff = chazhi; index = i; } } } if (index < 0) { message += "ID为" + f.ID + "的对象没有找到符合井深的工井模型\r\n"; continue; } GSOFeature feature = featdataset.CreateFeature(); GSOGeoModel model = new GSOGeoModel(); GSOPoint3d pt = new GSOPoint3d(); pt.X = shpPoint.X; pt.Y = shpPoint.Y; pt.Z = z; model.Position = pt; model.Align = EnumEntityAlign.TopCenter; //接口已修复作用 model.AltitudeMode = EnumAltitudeMode.RelativeToGround; model.RotateZ = 0 - rotateAngle * 180 / Math.PI + 90; model.FilePath = textBoxModelFolder.Text + "\\" + files[index]; model.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Geometry = model; for (int i = 0; i < f.GetFieldCount(); i++) { GeoScene.Data.GSOFieldDefn fielddef = (GeoScene.Data.GSOFieldDefn)(f.GetFieldDefn(i)); if (fielddef == null) { continue; } if (!gj_cns.ContainsKey(fielddef.Name)) { continue; } object obu = f.GetValue(fielddef.Name); if (obu != null) { string fieldName = gj_cns.ContainsKey(fielddef.Name) == true ? gj_cns[fielddef.Name].ToString() : fielddef.Name; feature.SetValue(fieldName, obu); } } featdataset.AddFeature(feature); } featdataset.Save(); featdataset.Close(); string strMessage = "shp文件中共" + features.Length + "个对象,实际入库" + featdataset.GetAllFeatures().Length + "个对象!\r\n"; if (message == "") { MessageBox.Show(strMessage, "提示"); } else { FrmMessageShow frm = new FrmMessageShow(strMessage + message); frm.ShowDialog(); } this.Close(); } catch (Exception ex) { Log.PublishTxt(ex); MessageBox.Show(ex.Message); } }
private void btnApply_Click(object sender, EventArgs e) { GSOLayer layer = ctl.Globe.Layers.GetLayerByCaption(cmbLayers.Text.Trim()); if (layer == null) { MessageBox.Show("请选择图层", "提示"); return; } if (layer.Type != EnumLayerType.FeatureLayer) { MessageBox.Show("当前选中的图层不是模型图层!", "提示"); return; } GSOFeatureLayer flayer = layer as GSOFeatureLayer; GSOFeatures features = new GSOFeatures(); if (radioButtonElevateAllFeature.Checked == true) { features = flayer.GetAllFeatures(); } else if (radioButtonElevatePartFeature.Checked == true) { string fieldName = comboBoxFieldNames.Text.Trim(); if (fieldName == "") { MessageBox.Show("请选择字段名称!", "提示"); return; } if (listViewFieldValues.SelectedItems.Count <= 0) { MessageBox.Show("请选中一个字段值!", "提示"); return; } string fieldValue = listViewFieldValues.SelectedItems[0].Text.Trim(); features = flayer.GetFeatureByFieldValue(fieldName, fieldValue, true); } string elevateHeight = txtHeight.Text.Trim(); double height = 0; if (txtHeight.Text == "" || double.TryParse(elevateHeight, out height) == false) { MessageBox.Show("请输入正确的调整高度", "提示"); return; } for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature is GSOFeatureFolder) { MoveEachFeature(feature as GSOFeatureFolder, height); } else if (feature.Geometry is GSOGeoModel) { GSOGeoModel model = feature.Geometry as GSOGeoModel; if (model != null) { GSOPoint3d pt = model.Position; pt.Z += height; model.Position = pt; } } else if (feature.Geometry is GSOGeoPolyline3D) { GSOGeoPolyline3D templine = feature.Geometry as GSOGeoPolyline3D; if (templine != null) { templine.MoveZ(height); feature.Geometry = templine; } } } ctl.Refresh(); MessageBox.Show("抬升成功", "提示"); }
//沿线运动对象 private void addRouteObjectMenuItem_Click(object sender, EventArgs e) { if (globeControl1.Globe.SelectedObject==null) { MessageBox.Show("请先选择一条线!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } GSOFeature lineFeature=globeControl1.Globe.SelectedObject; if(lineFeature.Geometry==null || lineFeature.Geometry.Type!=EnumGeometryType.GeoPolyline3D) { MessageBox.Show("请先选择一条线!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "*.3ds|*.3ds|*.gcm|*.gcm|*.gse|*.gse|*.obj|*.obj||"; if (dlg.ShowDialog() == DialogResult.OK) { GSOGeoModel model=new GSOGeoModel(); model.FilePath = dlg.FileName; GSOGeoDynamicRoute dynamicRoute = new GSOGeoDynamicRoute(); dynamicRoute.ActorGeometry = model; GSORoute route = new GSORoute(); GSOGeoPolyline3D geoline = (GSOGeoPolyline3D)lineFeature.Geometry; for (int i = 0; i < geoline[0].Count; i++) { route.Add(geoline[0][i]); } route.CircleRoute = false; route.Speed = 30; route.RotateSpeed = 50; route.AltitudeMode = geoline.AltitudeMode; dynamicRoute.Route = route; GSOFeature feature = new GSOFeature(); dynamicRoute.Play(); feature.Geometry = dynamicRoute; GSOLabel gsoLabel = new GSOLabel(); gsoLabel.Text = "模型测试"; feature.Label = gsoLabel; globeControl1.Globe.MinModelVisibleSize = 0; globeControl1.Globe.MemoryLayer.AddFeature(feature); globeControl1.Globe.Refresh(); } }
//修改模型路径 private void updateModelPath(string modelPath) { if (m_Feature == null) { return; } GSOGeoModel geoOldModel = m_Feature.Geometry as GSOGeoModel; GSOGeoModel geoModel = new GSOGeoModel(); geoModel.FilePath = modelPath; String strFilePath = modelPath; string strFileExt = Path.GetExtension(strFilePath); string strFileName = Path.GetFileName(strFilePath); int nIndex = strFileName.LastIndexOf('.'); string strTitle = strFileName.Substring(0, nIndex); // 采用立即加载的模式,而非异步加载,这样能很快看到预览效果 geoModel.IsAsynLoaded = false; if (geoOldModel != null) { geoModel.Align = geoOldModel.Align; } // gcm含有坐标信息,需要单独处理一下 if (strFileExt == ".gcm") // 如果是gcm需要提前加载坐标信息 { //geoModel.LoadGCMCoordInfo(); // 下面这个表示GCM中是否存在投影坐标,即X、Y值是否已经通过投影转换自动生成了 // 如果没有自动生成则做如下处理 if (!geoModel.IsCoordInfoValid()) { if (geoOldModel != null) { // 如果以前模型存在,就把以前模型的坐标赋给它吧 geoModel.Position = geoOldModel.Position; } else { // 只赋予X和Y的值,对于GCM来说GCM文件中保存的Z值一般都是有用的,所以z值就不赋予0值了 geoModel.PositionX = m_GlobeControl.Globe.CameraState.Longitude; geoModel.PositionY = m_GlobeControl.Globe.CameraState.Latitude; } } // GCM的Z值一般都会有用,所以设置为RelativeToGround模型 geoModel.AltitudeMode = EnumAltitudeMode.RelativeToGround; } else { if (geoOldModel != null) { // 如果以前模型存在,就把以前模型的坐标赋给它吧 geoModel.Position = geoOldModel.Position; } else { geoModel.PositionX = m_GlobeControl.Globe.CameraState.Longitude; geoModel.PositionY = m_GlobeControl.Globe.CameraState.Latitude; geoModel.PositionZ = 0; // 这里赋予0值吧 } } // 将新模型赋值给他,注意只能通过这种方式,如果改变原来模型的FilePath的方法可能有问题 m_Feature.Geometry = geoModel; if (m_SpaceCtrl != null) { m_SpaceCtrl.UpdateControls(); } if (m_GlobeControl != null) { m_GlobeControl.Refresh(); } }
//确定 private void buttonOk_Click(object sender, EventArgs e) { if (comboBox1.Text.Trim() == "") { MessageBox.Show("图层不能为空"); return; } if (txtPath.Text.Trim() == "") { MessageBox.Show("模型路径不能为空"); return; } if (textBoxLayerPath.Text.Trim() == "") { MessageBox.Show("图层保存路径不能为空"); return; } GSOLayer newlayer = globeControl1.Globe.Layers.Add(textBoxLayerPath.Text.Trim()); newlayer.Caption = Path.GetFileNameWithoutExtension(txtPath.Text.Trim()); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(comboBox1.Text.Trim()); if (layer != null) { GSOFeatures features = layer.GetAllFeatures(); if (features.Length > 0) { for (int i = 0; i < features.Length; i++) { if (features[i] != null && features[i].Geometry != null) { if (features[i].Geometry.Type == EnumGeometryType.GeoPoint3D) { GSOFeature feature = new GSOFeature(); GSOGeoPoint3D point3d = features[i].Geometry as GSOGeoPoint3D; if (point3d != null) { GSOGeoModel model = new GSOGeoModel(); model.FilePath = txtPath.Text.Trim(); model.Position = point3d.Position; feature.Geometry = model; newlayer.AddFeature(feature); } } } } globeControl1.Globe.Refresh(); } } this.Close(); }
private void DynamicCarMenuItem_Click(object sender, EventArgs e) { GSORoute route = new GSORoute(); route.Add(116.601, 39.901, 0); route.Add(116.602, 39.901, 0); route.Add(116.603, 39.901, 0); route.Add(116.603, 39.902, 0); route.Add(116.603, 39.903, 0); route.Add(116.603, 39.904, 0); route.Speed = 50; route.RotateSpeed = 50; route.AltitudeMode = EnumAltitudeMode.ClampToGround; GSOGeoModel geoModel = new GSOGeoModel(); geoModel.FilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/model/tank.3ds"; GSOGeoDynamicRoute geoDynamicRoute = new GSOGeoDynamicRoute(); geoDynamicRoute.TimerInterval = 20; geoDynamicRoute.Route = route; geoDynamicRoute.ActorGeometry = geoModel; geoDynamicRoute.Play(); GSOFeature feature = new GSOFeature(); feature.Geometry = geoDynamicRoute; GSOLabel gsoLabel = new GSOLabel(); gsoLabel.Text = "中-59"; feature.Label = gsoLabel; globeControl1.Globe.MemoryLayer.AddFeature(feature); GSOCameraState cameraState = new GSOCameraState(); cameraState.Longitude = 116.601; cameraState.Latitude = 39.901; cameraState.Altitude = 900; cameraState.Tilt = 0; cameraState.Heading = 0; globeControl1.Globe.FlyToCameraState(cameraState); }
private void button3_Click(object sender, EventArgs e) { if (txtFolder.Text == "") { return; } if (cmbLayer.SelectedIndex < 0) { return; } try { Regex regNum = new Regex("^[0-9]"); DirectoryInfo theFolder = new DirectoryInfo(txtFolder.Text); foreach (FileInfo nextFile in theFolder.GetFiles()) { if (nextFile.Name.ToLower().IndexOf("3ds") > -1 || nextFile.Name.ToLower().IndexOf("gcm") > -1) { files.Add(nextFile.Name); string temp = nextFile.Name.Substring(nextFile.Name.IndexOf("-") + 1, nextFile.Name.LastIndexOf(".") - nextFile.Name.IndexOf("-") - 1); string modeltype = nextFile.Name.Substring(0, nextFile.Name.IndexOf("-")); modeltypes.Add(modeltype); double Num; bool isNum = double.TryParse(temp, out Num); if (isNum) { deeps.Add(Convert.ToDouble(temp)); } } } GSOFeatureDataset featdataset = CreateDBFeatureDataset(txtLayerName.Text); featdataset.Open(); GSOLayer shpLayer = globeControl1.Globe.Layers[cmbLayer.SelectedIndex]; if (shpLayer == null) { return; } GSOFeatures features = shpLayer.GetAllFeatures(true); for (int j = 0; j < features.Length; j++) { GSOFeature f = features[j]; GSOGeoPoint3D shpPoint = f.Geometry as GSOGeoPoint3D; double x; double y; double rotateAngle = 0; rotateAngle = (double)f.GetValue(combAngle.SelectedItem.ToString()); string currentModelType = f.GetValue(combCode.SelectedItem.ToString()).ToString(); double z = Convert.ToDouble(txtUpGround.Text); double deep = f.GetFieldAsDouble(combDeep.SelectedItem.ToString()); int index = -1; double diff = double.MaxValue; for (int i = 0; i < deeps.Count; i++) { double tempdeep = Convert.ToDouble(deeps[i]); string modeltype = modeltypes[i].ToString(); if (modeltype != currentModelType) { continue; } if (tempdeep > deep) { double chazhi = tempdeep - deep; if (diff > chazhi) { diff = chazhi; index = i; } } } if (index < 0) { continue; } GSOFeature feature = featdataset.CreateFeature(); GSOGeoModel model = new GSOGeoModel(); GSOPoint3d pt = new GSOPoint3d(); pt.X = shpPoint.X; pt.Y = shpPoint.Y; pt.Z = z; model.Position = pt; model.Align = EnumEntityAlign.TopCenter; //接口已修复作用 model.AltitudeMode = EnumAltitudeMode.RelativeToGround; model.RotateZ = 0 - rotateAngle * 180 / Math.PI + 90; model.FilePath = txtFolder.Text + "\\" + files[index]; model.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Geometry = model; for (int i = 0; i < feature.GetFieldCount(); i++) { GeoScene.Data.GSOFieldDefn fielddef = (GeoScene.Data.GSOFieldDefn)(f.GetFieldDefn(i)); //if (!en_cns.ContainsKey(fielddef.Name)) // continue; // object fieldvalue = convertFieldValue(fielddef.Name, f.GetValue(fielddef.Name)); if (fielddef == null) { continue; } feature.SetValue(fielddef.Name, f.GetValue(fielddef.Name)); } featdataset.AddFeature(feature); } featdataset.Save(); this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void button3_Click(object sender, EventArgs e) { if (comboBoxDataSourceList.SelectedItem == null) { MessageBox.Show("请选择一个目标数据源!", "提示"); return; } GSODataSource ds = Utility.getDataSourceByFullName(globeControl1, comboBoxDataSourceList.SelectedItem.ToString().Trim()); if (ds == null) { MessageBox.Show("选择的目标数据源为空!", "提示"); return; } if (comboBoxShpLayerList.SelectedIndex<0) { return; } try { if (valiValvedata()) { GSOFeatureDataset featdataset = CreateDBFeatureDataset(textBoxNewLayerName.Text); if (featdataset == null) { return; } featdataset.Open(); GSOLayer shpLayer = globeControl1.Globe.Layers[comboBoxShpLayerList.SelectedIndex]; if (shpLayer == null) { return; } GSOFeatures features = shpLayer.GetAllFeatures(true); string message = ""; for (int j = 0; j < features.Length; j++) { GSOFeature f = features[j]; GSOGeoPoint3D shpPoint = f.Geometry as GSOGeoPoint3D; double z = f.GetFieldAsDouble(combZ.SelectedItem.ToString()); double deep = f.GetFieldAsDouble(combZ.SelectedItem.ToString()); GSOFeature feature = featdataset.CreateFeature(); GSOGeoModel model = new GSOGeoModel(); GSOPoint3d pt = new GSOPoint3d(); pt.X = shpPoint.X; pt.Y = shpPoint.Y; pt.Z = z; model.Position = pt; model.AltitudeMode = EnumAltitudeMode.RelativeToGround; string modelPath = f.GetFieldAsString(combPath.SelectedItem.ToString()); model.FilePath = Application.StartupPath + "\\" + modelPath; model.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Geometry = model; for (int i = 0; i < f.GetFieldCount(); i++) { GeoScene.Data.GSOFieldDefn fielddef = (GeoScene.Data.GSOFieldDefn)(f.GetFieldDefn(i)); if (fielddef == null) { continue; } if (!fm_cns.ContainsKey(fielddef.Name)) { continue; } object obu = f.GetValue(fielddef.Name); if (obu != null) { string fieldName = fm_cns.ContainsKey(fielddef.Name) == true ? fm_cns[fielddef.Name].ToString() : fielddef.Name; feature.SetValue(fieldName, obu); } } featdataset.AddFeature(feature); } featdataset.Save(); string strMessage = "shp文件中共" + features.Length + "个对象,实际入库" + featdataset.GetAllFeatures().Length + "个对象!\r\n"; if (message == "") { MessageBox.Show(strMessage, "提示"); } else { FrmMessageShow frm = new FrmMessageShow(strMessage + message); frm.ShowDialog(); } this.Close(); } } catch (Exception ex) { Log.PublishTxt(ex); MessageBox.Show(ex.Message); } }
private void button3_Click(object sender, EventArgs e) { if (txtFolder.Text == "") return; if (cmbLayer.SelectedIndex<0) return; try { Regex regNum = new Regex("^[0-9]"); DirectoryInfo theFolder = new DirectoryInfo(txtFolder.Text); foreach (FileInfo nextFile in theFolder.GetFiles()) { if (nextFile.Name.ToLower().IndexOf("3ds") > -1 || nextFile.Name.ToLower().IndexOf("gcm") > -1) { files.Add(nextFile.Name); string temp = nextFile.Name.Substring(nextFile.Name.IndexOf("-") + 1, nextFile.Name.LastIndexOf(".") - nextFile.Name.IndexOf("-") - 1); string modeltype = nextFile.Name.Substring(0, nextFile.Name.IndexOf("-")); modeltypes.Add(modeltype); double Num; bool isNum = double.TryParse(temp, out Num); if (isNum) { deeps.Add(Convert.ToDouble(temp)); } } } GSOFeatureDataset featdataset = CreateDBFeatureDataset(txtLayerName.Text); featdataset.Open(); GSOLayer shpLayer = globeControl1.Globe.Layers[cmbLayer.SelectedIndex]; if (shpLayer == null) return; GSOFeatures features = shpLayer.GetAllFeatures(true); for (int j = 0; j < features.Length; j++) { GSOFeature f = features[j]; GSOGeoPoint3D shpPoint = f.Geometry as GSOGeoPoint3D; double x; double y; double rotateAngle = 0; rotateAngle = (double)f.GetValue(combAngle.SelectedItem.ToString()); string currentModelType = f.GetValue(combCode.SelectedItem.ToString()).ToString(); double z = Convert.ToDouble(txtUpGround.Text); double deep=f.GetFieldAsDouble(combDeep.SelectedItem.ToString()); int index = -1; double diff = double.MaxValue; for (int i = 0; i < deeps.Count; i++) { double tempdeep = Convert.ToDouble(deeps[i]); string modeltype = modeltypes[i].ToString(); if (modeltype != currentModelType) { continue; } if (tempdeep > deep) { double chazhi = tempdeep - deep; if (diff > chazhi) { diff = chazhi; index = i; } } } if (index < 0) { continue; } GSOFeature feature = featdataset.CreateFeature(); GSOGeoModel model = new GSOGeoModel(); GSOPoint3d pt = new GSOPoint3d(); pt.X = shpPoint.X; pt.Y = shpPoint.Y; pt.Z = z; model.Position = pt; model.Align = EnumEntityAlign.TopCenter; //接口已修复作用 model.AltitudeMode = EnumAltitudeMode.RelativeToGround; model.RotateZ = 0 - rotateAngle * 180 / Math.PI + 90; model.FilePath = txtFolder.Text + "\\" + files[index]; model.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Geometry = model; for (int i = 0; i < feature.GetFieldCount(); i++) { GeoScene.Data.GSOFieldDefn fielddef = (GeoScene.Data.GSOFieldDefn)(f.GetFieldDefn(i)); //if (!en_cns.ContainsKey(fielddef.Name)) // continue; // object fieldvalue = convertFieldValue(fielddef.Name, f.GetValue(fielddef.Name)); if (fielddef == null) continue; feature.SetValue(fielddef.Name, f.GetValue(fielddef.Name)); } featdataset.AddFeature(feature); } featdataset.Save(); this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void button3_Click(object sender, EventArgs e) { if (comboBoxDataSourceList.SelectedItem == null) { MessageBox.Show("请选择一个目标数据源!", "提示"); return; } GSODataSource ds = Utility.getDataSourceByFullName(globeControl1, comboBoxDataSourceList.SelectedItem.ToString().Trim()); if (ds == null) { MessageBox.Show("选择的目标数据源为空!", "提示"); return; } if (comboBoxShpLayerList.SelectedIndex < 0) { return; } try { if (valiValvedata()) { GSOFeatureDataset featdataset = CreateDBFeatureDataset(textBoxNewLayerName.Text); if (featdataset == null) { return; } featdataset.Open(); GSOLayer shpLayer = globeControl1.Globe.Layers[comboBoxShpLayerList.SelectedIndex]; if (shpLayer == null) { return; } GSOFeatures features = shpLayer.GetAllFeatures(true); string message = ""; for (int j = 0; j < features.Length; j++) { GSOFeature f = features[j]; GSOGeoPoint3D shpPoint = f.Geometry as GSOGeoPoint3D; double z = f.GetFieldAsDouble(combZ.SelectedItem.ToString()); double deep = f.GetFieldAsDouble(combZ.SelectedItem.ToString()); GSOFeature feature = featdataset.CreateFeature(); GSOGeoModel model = new GSOGeoModel(); GSOPoint3d pt = new GSOPoint3d(); pt.X = shpPoint.X; pt.Y = shpPoint.Y; pt.Z = z; model.Position = pt; model.AltitudeMode = EnumAltitudeMode.RelativeToGround; string modelPath = f.GetFieldAsString(combPath.SelectedItem.ToString()); model.FilePath = Application.StartupPath + "\\" + modelPath; model.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Geometry = model; for (int i = 0; i < f.GetFieldCount(); i++) { GeoScene.Data.GSOFieldDefn fielddef = (GeoScene.Data.GSOFieldDefn)(f.GetFieldDefn(i)); if (fielddef == null) { continue; } if (!fm_cns.ContainsKey(fielddef.Name)) { continue; } object obu = f.GetValue(fielddef.Name); if (obu != null) { string fieldName = fm_cns.ContainsKey(fielddef.Name) == true ? fm_cns[fielddef.Name].ToString() : fielddef.Name; feature.SetValue(fieldName, obu); } } featdataset.AddFeature(feature); } featdataset.Save(); string strMessage = "shp文件中共" + features.Length + "个对象,实际入库" + featdataset.GetAllFeatures().Length + "个对象!\r\n"; if (message == "") { MessageBox.Show(strMessage, "提示"); } else { FrmMessageShow frm = new FrmMessageShow(strMessage + message); frm.ShowDialog(); } this.Close(); } } catch (Exception ex) { Log.PublishTxt(ex); MessageBox.Show(ex.Message); } }
//单击添加模型 void mGlobeControl_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { GSOPoint3d newpoint; GSOLayer templayer; GSOFeature feature1 = mGlobeControl.Globe.HitTest(e.X, e.Y, out templayer, out newpoint, false, true, 0); if (newpoint.X == 0 && newpoint.Y == 0 && newpoint.Z == 0) { newpoint = mGlobeControl.Globe.ScreenToScene(e.X, e.Y); } if (newpoint == point) { GSOPoint3d pt = new GSOPoint3d(); pt.X = newpoint.X; pt.Y = newpoint.Y; pt.Z = newpoint.Z; if (filePath != null && filePath != "") { if (mGlobeControl.Globe.Action == EnumAction3D.SelectObject) { GSOFeature newfeature = null; if (mGlobeControl.Globe.DestLayerFeatureAdd.Dataset != null && mGlobeControl.Globe.DestLayerFeatureAdd.Dataset.IsFeatureDataset == true) { GSOFeatureDataset featureDataset = mGlobeControl.Globe.DestLayerFeatureAdd.Dataset as GSOFeatureDataset; newfeature = featureDataset.CreateFeature(); } else { newfeature = new GSOFeature(); } newfeature.Name = Path.GetFileNameWithoutExtension(filePath) + "_" + iModelCount.ToString(); GSOGeoModel model = new GSOGeoModel(); model.FilePath = filePath; model.Position = pt; newfeature.Geometry = model; mGlobeControl.Globe.DestLayerFeatureAdd.AddFeature(newfeature); iModelCount++; } } } } }
private void CopterMenuItem_Click(object sender, EventArgs e) { GSORoute route = new GSORoute(); route.Add(116.601, 39.901, 1000); route.Add(116.603, 39.901, 1000); route.Add(116.605, 39.901, 1000); route.Add(116.605, 39.901, 1000); route.Add(116.605, 39.901, 1000); route.Add(116.605, 39.901, 1000); route.Add(116.605, 39.903, 1000); route.Add(116.605, 39.905, 1000); route.Add(116.605, 39.907, 1000); route.Speed = 200; route.RotateSpeed = 50; route.AltitudeMode = EnumAltitudeMode.Absolute; route.CircleRoute = true; GSOGeoModel geoModel = new GSOGeoModel(); geoModel.FilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/model/客机.3ds"; geoModel.RotateZ = -90; geoModel.SetScale(0.1, 0.1, 0.1); GSOGeoDynamicRoute geoDynamicRoute = new GSOGeoDynamicRoute(); geoDynamicRoute.TimerInterval = 20; geoDynamicRoute.Route = route; geoDynamicRoute.ActorGeometry = geoModel; geoDynamicRoute.Play(); GSOFeature feature = new GSOFeature(); feature.Geometry = geoDynamicRoute; GSOLabel gsoLabel = new GSOLabel(); gsoLabel.Text = "国航A9"; feature.Label = gsoLabel; globeControl1.Globe.MemoryLayer.AddFeature(feature); GSOCameraState cameraState = new GSOCameraState(); cameraState.Longitude = 116.601; cameraState.Latitude = 39.901; cameraState.Altitude = 2500; cameraState.Tilt = 0; cameraState.Heading = 0; globeControl1.Globe.FlyToCameraState(cameraState); }
private void AddModelMenu_Click(object sender, EventArgs e) { GSOFeature newFeature = new GSOFeature(); GSOGeoModel model = new GSOGeoModel(); GSOPoint3d pt = new GSOPoint3d(); pt.X = globeControl1.Globe.CameraState.Longitude; pt.Y = globeControl1.Globe.CameraState.Latitude; pt.Z = 0; model.Position = pt; newFeature.Geometry = model; newFeature.Name = "我的模型"; ShowAddFeatureDlg(newFeature); }
private void MissileMenuItem_Click(object sender, EventArgs e) { GSORoute route = new GSORoute(); route.Add(116.601, 39.902, 100); route.Add(116.602, 39.902, 150); route.Add(116.603, 39.902, 200); route.Add(116.603, 39.902, 200); route.Add(116.603, 39.902, 200); route.Add(116.603, 39.902, 200); route.Add(116.604, 39.902, 250); route.Add(116.605, 39.902, 300); route.Add(116.606, 39.902, 250); route.Add(116.607, 39.902, 200); route.Add(116.608, 39.902, 150); route.Add(116.609, 39.902, 100); route.Speed = 500; route.RotateSpeed = 200; route.AltitudeMode = EnumAltitudeMode.Absolute; route.CircleRoute=false; GSOGeoModel geoModel = new GSOGeoModel(); geoModel.FilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/model/aim9.3ds"; geoModel.SetScale(30, 30, 30); GSOGeoDynamicRoute geoDynamicRoute = new GSOGeoDynamicRoute(); geoDynamicRoute.TimerInterval = 20; geoDynamicRoute.Route = route; geoDynamicRoute.ActorGeometry = geoModel; geoDynamicRoute.Play(); GSOFeature feature = new GSOFeature(); feature.Geometry = geoDynamicRoute; GSOLabel gsoLabel = new GSOLabel(); gsoLabel.Text = "爱国者"; feature.Label = gsoLabel; globeControl1.Globe.MemoryLayer.AddFeature(feature); GSOCameraState cameraState = new GSOCameraState(); cameraState.Longitude = 116.605; cameraState.Latitude = 39.902; cameraState.Altitude = 100; cameraState.Tilt = 85; cameraState.Heading = 0; globeControl1.Globe.FlyToCameraState(cameraState); }
//单击listView的项并在控件中预览 private void listView1_SelectedIndexChanged_1(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { plane3DControl.Plane3DScene.RemoveAllFeature(); GSOFeature feature = new GSOFeature(); GSOGeoModel model = new GSOGeoModel(); model.FilePath = dictionary[listView1.SelectedItems[0].Index]; model.SetPosition(0, 0, 0); feature.Geometry = model; feature.Geometry.HighLight = false; feature.Geometry.LatLonCoord = false; plane3DControl.Plane3DScene.AddFeature(feature); filePath = dictionary[listView1.SelectedItems[0].Index]; } }
private void button3_Click(object sender, EventArgs e) { if (comboBoxDataSourceList.SelectedItem == null) { MessageBox.Show("请选择一个目标数据源!", "提示"); return; } GSODataSource ds = Utility.getDataSourceByFullName(globeControl1, comboBoxDataSourceList.SelectedItem.ToString().Trim()); if (ds == null) { MessageBox.Show("选择的目标数据源为空!", "提示"); return; } if (textBoxModelFolder.Text == "") { return; } if (comboBoxShpLayerList.SelectedIndex < 0) { return; } try { Regex regNum = new Regex("^[0-9]"); DirectoryInfo theFolder = new DirectoryInfo(textBoxModelFolder.Text); foreach (FileInfo nextFile in theFolder.GetFiles()) { if (nextFile.Name.ToLower().IndexOf("3ds") > -1 || nextFile.Name.ToLower().IndexOf("gcm") > -1) { files.Add(nextFile.Name); string temp = nextFile.Name.Substring(nextFile.Name.IndexOf("-") + 1, nextFile.Name.LastIndexOf(".") - nextFile.Name.IndexOf("-") - 1); string modeltype = nextFile.Name.Substring(0, nextFile.Name.IndexOf("-")); modeltypes.Add(modeltype); double Num; bool isNum = double.TryParse(temp, out Num); if (isNum) { deeps.Add(Convert.ToDouble(temp)); } } } GSODataset dataset = ds.GetDatasetByName(textBoxNewLayerName.Text.Trim()); GSOFeatureDataset featdataset; if (dataset != null) { DialogResult result = MessageBox.Show("工井图层名称在数据库中已存在!是否向该表追加", "提示", MessageBoxButtons.YesNo); if (result == DialogResult.No) { return; } else if (result == DialogResult.Yes) { featdataset = dataset as GSOFeatureDataset; } else { return; } } else { featdataset = CreateDBFeatureDataset(textBoxNewLayerName.Text.Trim()); } if (featdataset == null) { return; } featdataset.Open(); GSOLayer shpLayer = globeControl1.Globe.Layers.GetLayerByCaption(comboBoxShpLayerList.SelectedItem.ToString().Trim()); if (shpLayer == null) return; GSOFeatures features = shpLayer.GetAllFeatures(true); string message = ""; for (int j = 0; j < features.Length; j++) { GSOFeature f = features[j]; GSOGeoPoint3D shpPoint = f.Geometry as GSOGeoPoint3D; double x; double y; double rotateAngle = 0; string currentModelType = f.GetValue(combCode.SelectedItem.ToString()).ToString(); double z = Convert.ToDouble(txtUpGround.Text); double deep=f.GetFieldAsDouble(combDeep.SelectedItem.ToString()); int index = -1; double diff = double.MaxValue; for (int i = 0; i < deeps.Count; i++) { double tempdeep = Convert.ToDouble(deeps[i]); string modeltype = modeltypes[i].ToString(); if (modeltype != currentModelType) { continue; } if (tempdeep > deep) { double chazhi = tempdeep - deep; if (diff > chazhi) { diff = chazhi; index = i; } } } if (index < 0) { message += "ID为" + f.ID + "的对象没有找到符合井深的工井模型\r\n"; continue; } GSOFeature feature = featdataset.CreateFeature(); GSOGeoModel model = new GSOGeoModel(); GSOPoint3d pt = new GSOPoint3d(); pt.X = shpPoint.X; pt.Y = shpPoint.Y; pt.Z = z; model.Position = pt; model.Align = EnumEntityAlign.TopCenter; //接口已修复作用 model.AltitudeMode = EnumAltitudeMode.RelativeToGround; model.RotateZ = 0 - rotateAngle * 180 / Math.PI + 90; model.FilePath = textBoxModelFolder.Text + "\\" + files[index]; model.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Name = f.GetValue(combModelName.SelectedItem.ToString()).ToString(); feature.Geometry = model; for (int i = 0; i < f.GetFieldCount(); i++) { GeoScene.Data.GSOFieldDefn fielddef = (GeoScene.Data.GSOFieldDefn)(f.GetFieldDefn(i)); if (fielddef == null) { continue; } if (!gj_cns.ContainsKey(fielddef.Name)) continue; object obu = f.GetValue(fielddef.Name); if (obu != null) { string fieldName = gj_cns.ContainsKey(fielddef.Name) == true ? gj_cns[fielddef.Name].ToString() : fielddef.Name; feature.SetValue(fieldName, obu); } } featdataset.AddFeature(feature); } featdataset.Save(); featdataset.Close(); string strMessage = "shp文件中共" + features.Length + "个对象,实际入库" + featdataset.GetAllFeatures().Length + "个对象!\r\n"; if (message == "") { MessageBox.Show(strMessage, "提示"); } else { FrmMessageShow frm = new FrmMessageShow(strMessage + message); frm.ShowDialog(); } this.Close(); } catch (Exception ex) { Log.PublishTxt(ex); MessageBox.Show(ex.Message); } }