コード例 #1
0
        /// <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();    //刷新场景
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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();             //刷新场景
        }
コード例 #5
0
        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;
                    }
                }
            }
        }
コード例 #6
0
        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();
        }
コード例 #7
0
 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;
         }
     }
 }
コード例 #8
0
        // 沿线运动对象
        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);
        }
コード例 #9
0
        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++;
                        }
                    }
                }
            }
        }
コード例 #10
0
        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];
            }
        }
コード例 #11
0
 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();
 }
コード例 #12
0
 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();
 }
コード例 #13
0
 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
     {
     }
 }
コード例 #14
0
        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();
        }
コード例 #15
0
        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();
        }
コード例 #16
0
 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);
 }
コード例 #17
0
ファイル: MainFrm.cs プロジェクト: StarU/qkKL6Dgf12
        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();
                }
            }
        }
コード例 #18
0
        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);
            }
        }
コード例 #19
0
        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("抬升成功", "提示");
        }
コード例 #20
0
ファイル: MainFrm.cs プロジェクト: StarU/qkKL6Dgf12
        //沿线运动对象
        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();
            }
        }
コード例 #21
0
ファイル: CtrlModelPathPage.cs プロジェクト: StarU/qkKL6Dgf12
        //修改模型路径
        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();

            }
        }
コード例 #22
0
        //确定
        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();
        }
コード例 #23
0
ファイル: MainFrm.cs プロジェクト: StarU/qkKL6Dgf12
        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);
        }
コード例 #24
0
        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);
            }
        }
コード例 #25
0
        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);
            }
        }
コード例 #26
0
ファイル: FrmAddYuBiZiShp.cs プロジェクト: StarU/qkKL6Dgf12
        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);
            }
        }
コード例 #27
0
        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);
            }
        }
コード例 #28
0
ファイル: FrmPlantTrees.cs プロジェクト: StarU/qkKL6Dgf12
        //单击添加模型
        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++;
                        }
                    }
                }
            }
        }
コード例 #29
0
        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
            {

            }
        }
コード例 #30
0
ファイル: MainFrm.cs プロジェクト: StarU/qkKL6Dgf12
        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);
        }
コード例 #31
0
ファイル: MainFrm.cs プロジェクト: StarU/qkKL6Dgf12
 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);
 }
コード例 #32
0
ファイル: MainFrm.cs プロジェクト: StarU/qkKL6Dgf12
        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);
        }
コード例 #33
0
ファイル: FrmPlantTrees.cs プロジェクト: StarU/qkKL6Dgf12
        //单击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];
            }
        }
コード例 #34
0
        //修改模型路径
        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();
            }
        }
コード例 #35
0
        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);
            }
        }