Beispiel #1
0
        /// <summary>
        /// 对象选择事件。
        /// GeometrySelectedEvent
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void m_mapControl_GeometrySelected(Object sender, SuperMap.UI.GeometrySelectedEventArgs e)
        {
            if (m_selectMode != SelectMode.SelectBarrier)
            {
                return;
            }
            Selection selection = m_layerPoint.Selection;

            if (selection.Count <= 0)
            {
                selection = m_layerLine.Selection;
            }
            GeoStyle style = new GeoStyle();

            style.LineColor = Color.Red;
            Recordset recordset = selection.ToRecordset();

            try
            {
                Geometry geometry = recordset.GetGeometry();

                // 捕捉到点时,将捕捉到的点添加到障碍点列表中
                // If a point is snapped, the point is added to the barrier list
                if (geometry.Type == GeometryType.GeoPoint)
                {
                    GeoPoint geoPoint = (GeoPoint)geometry;
                    int      id       = recordset.GetID();
                    m_barrierNodes.Add(id);
                    style.MarkerSize = new Size2D(4, 4);
                    geoPoint.Style   = style;
                    m_trackingLayer.Add(geoPoint, "barrierNode");
                }

                // 捕捉到线时,将线对象添加到障碍线列表中
                // If a line is snapped, the line is added to the barrier list
                if (geometry.Type == GeometryType.GeoLine)
                {
                    GeoLine geoLine = (GeoLine)geometry;
                    int     id      = recordset.GetID();
                    m_barrierEdges.Add(id);

                    style.LineWidth = 0.6;
                    geoLine.Style   = style;
                    m_trackingLayer.Add(geoLine, "barrierEdge");
                }
                m_mapControl.Map.Refresh();
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
            finally
            {
                recordset.Dispose();
            }
        }
Beispiel #2
0
        private void cmbDeviceType_SelectedIndexChanged(object sender, EventArgs e)
        {
            Recordset objRt = null;

            try
            {
                if (cmbDeviceType.SelectedItem == null)
                {
                    return;
                }
                ResourceTypeData data = cmbDeviceType.SelectedItem as ResourceTypeData;
                if (!m_Application.Workspace.Datasources["Resource"].Datasets.Contains(data.DatasetName))
                {
                    return;
                }
                dg_Data.Rows.Clear();
                objRt = (m_Application.Workspace.Datasources["Resource"].Datasets[data.DatasetName] as DatasetVector).GetRecordset(false, CursorType.Static);
                objRt.MoveFirst();
                while (!objRt.IsEOF)
                {
                    DataGridViewRow         row   = new DataGridViewRow();
                    DataGridViewTextBoxCell cell1 = new DataGridViewTextBoxCell
                    {
                        Value = Convert.ToString(objRt.GetFieldValue(data.FieldID))
                    };
                    row.Cells.Add(cell1);

                    int isSet = 0;
                    if (objRt.GetFieldValue("Heading") == null && objRt.GetFieldValue("Altitude") == null)
                    {
                        isSet = 0;
                    }
                    else
                    {
                        isSet = 1;
                    }
                    DataGridViewCheckBoxCell cell2 = new DataGridViewCheckBoxCell
                    {
                        Value = isSet
                    };
                    row.Cells.Add(cell2);
                    row.Tag = objRt.GetID();
                    dg_Data.Rows.Add(row);

                    objRt.MoveNext();
                }
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }
Beispiel #3
0
        private void DangerResourceLocationControl_Load(object sender, EventArgs e)
        {
            if (m_Application.MainForm.FormManager.ActiveForm is IFormScene formScene)
            {
                m_SceneControl = formScene.SceneControl;
            }

            Recordset objRt = null;

            try
            {
                dg_Data.Rows.Clear();
                objRt = (m_Application.Workspace.Datasources["Resource"].Datasets["DangerResource"] as DatasetVector).GetRecordset(false, CursorType.Static);
                objRt.MoveFirst();
                while (!objRt.IsEOF)
                {
                    DataGridViewRow         row   = new DataGridViewRow();
                    DataGridViewTextBoxCell cell1 = new DataGridViewTextBoxCell
                    {
                        Value = Convert.ToString(objRt.GetFieldValue("ResourceID"))
                    };
                    row.Cells.Add(cell1);

                    int isSet = 0;
                    if (objRt.GetFieldValue("Heading") == null && objRt.GetFieldValue("Altitude") == null)
                    {
                        isSet = 0;
                    }
                    else
                    {
                        isSet = 1;
                    }
                    DataGridViewCheckBoxCell cell2 = new DataGridViewCheckBoxCell
                    {
                        Value = isSet
                    };
                    row.Cells.Add(cell2);
                    row.Tag = objRt.GetID();
                    dg_Data.Rows.Add(row);

                    objRt.MoveNext();
                }
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }
        public void BufferQuery()
        {
            try
            {
                Datasource    datasource      = mUseData.DataSource;
                DatasetVector mRegionDatasets = datasource.Datasets["New_Model"] as DatasetVector;
                mRegionDatasets.PrjCoordSys = datasource.Datasets[0].PrjCoordSys;
                String bufferName = "bufferModel";
                if (datasource.Datasets.Contains(bufferName))
                {
                    datasource.Datasets.Delete(bufferName);
                }
                mBufferDataset = (DatasetVector)datasource.Datasets.CreateFromTemplate(bufferName, mRegionDatasets);


                #region 设置矢量面初始样式

                GeoStyle3D style3D = new GeoStyle3D();

                style3D.AltitudeMode  = AltitudeMode.ClampToGround;
                style3D.FillForeColor = Color.White;
                style3D.FillMode      = FillMode3D.LineAndFill;

                Layer3DSettingVector layer3DSetting = new Layer3DSettingVector();
                layer3DSetting.Style = style3D;
                Layer3DDataset m_layerRegion = mSceneControl.Scene.Layers.Add(mRegionDatasets, layer3DSetting, true);
                #endregion



                QueryParameter para = new QueryParameter();
                para.SpatialQueryMode   = SpatialQueryMode.Intersect;
                para.SpatialQueryObject = mBufferDataset;

                Recordset recordset = mRegionDatasets.Query(para);

                List <Int32> ids = new List <int>(recordset.RecordCount);

                while (!recordset.IsEOF)
                {
                    ids.Add(recordset.GetID());
                    recordset.MoveNext();
                }
                m_layerRegion.Selection.AddRange(ids.ToArray());
                m_layerRegion.Selection.UpdateData();

                m_layerRegion.Selection.Style.FillForeColor = Color.FromArgb(180, 100, 100, 255);
                mSceneControl.Scene.Refresh();

                recordset.Dispose();
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }
Beispiel #5
0
        private void GetData()
        {
            Recordset objRt = null;

            try
            {
                dg_Data.Rows.Clear();
                dg_Data.Columns.Clear();
                if (chkTheme.SelectedItem == null)
                {
                    m_Application.MessageBox.Show(Message);
                    return;
                }
                Layer3DDataset layer3DDataset = (chkTheme.SelectedItem as Label).Tag as Layer3DDataset;
                objRt = (layer3DDataset.Dataset as DatasetVector).GetRecordset(false, CursorType.Static);
                for (int i = 0; i < objRt.FieldCount; i++)
                {
                    FieldInfo fieldInfo = objRt.GetFieldInfos()[i];
                    if (fieldInfo.Caption.ToLower().Contains("sm"))
                    {
                        continue;
                    }
                    dg_Data.Columns.Add(fieldInfo.Name, fieldInfo.Caption);
                }

                objRt.MoveFirst();
                while (!objRt.IsEOF)
                {
                    DataGridViewRow row = new DataGridViewRow();
                    row.HeaderCell.Value = objRt.GetID().ToString();
                    for (int j = 0; j < dg_Data.ColumnCount; j++)
                    {
                        DataGridViewTextBoxCell textBoxCell = new DataGridViewTextBoxCell
                        {
                            Value = Convert.ToString(objRt.GetFieldValue(dg_Data.Columns[j].Name))
                        };
                        row.Cells.Add(textBoxCell);
                    }
                    dg_Data.Rows.Add(row);

                    objRt.MoveNext();
                }
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// 找出横断面线与管线相交的断点
        /// </summary>
        public void CrossSecLine()
        {
            try
            {
                Layer3Ds m_layer = mSceneControl.Scene.Layers;
                foreach (Layer3D mlayer in m_layer)
                {
                    if (mlayer.Selection != null)
                    {
                        mlayer.Selection.Clear();
                    }
                }

                QueryParameter para = new QueryParameter();
                para.HasGeometry        = true;
                para.SpatialQueryMode   = SpatialQueryMode.Intersect;
                para.SpatialQueryObject = mRec2D;
                Recordset      recordset = null;
                Layer3DDataset layer     = null;

                switch (mPipeType[0].ToString())
                {
                case "排水管网":
                    recordset = mUseData.OutWaterNetWork.Query(para);
                    layer     = mUseData.OutWaterLines;
                    break;

                case "给水管网":
                    recordset = mUseData.SupplyWaterNetWork.Query(para);
                    layer     = mUseData.SupplyWaterLines;
                    break;

                case "电力管网":
                    recordset = mUseData.ElectricNetWork.Query(para);
                    layer     = mUseData.ElectricLayer;
                    break;
                }

                List <Int32> ids = new List <int>(recordset.RecordCount);
                while (!recordset.IsEOF)
                {
                    ids.Add(recordset.GetID());
                    recordset.MoveNext();
                }
                layer.Selection.AddRange(ids.ToArray());
                layer.Selection.UpdateData();
                layer.Selection.Style.LineColor = Color.GreenYellow;
                mSceneControl.Scene.Refresh();
            }
            catch (Exception ex)
            {
                Trace.Write(ex.Message);
            }
        }
Beispiel #7
0
        private void M_SceneControl_ObjectAdded(object sender, ObjectAddedEventArgs e)
        {
            Recordset objRt = null;

            try
            {
                if (chkTheme.SelectedItem == null)
                {
                    m_Application.MessageBox.Show(Message);
                    return;
                }
                dg_Data.Rows.Clear();
                Layer3DDataset layer3DDataset = (chkTheme.SelectedItem as Label).Tag as Layer3DDataset;
                objRt = (layer3DDataset.Dataset as DatasetVector).GetRecordset(false, CursorType.Static);
                if (objRt.SeekID(e.ID))
                {
                    DataGridViewRow row = new DataGridViewRow();
                    row.HeaderCell.Value = objRt.GetID().ToString();
                    for (int j = 0; j < dg_Data.ColumnCount; j++)
                    {
                        DataGridViewTextBoxCell textBoxCell = new DataGridViewTextBoxCell();
                        textBoxCell.Value = Convert.ToString(objRt.GetFieldValue(dg_Data.Columns[j].Name));
                        row.Cells.Add(textBoxCell);
                    }
                    dg_Data.Rows.Add(row);
                }
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }
Beispiel #8
0
 /// <summary>
 /// 选择设施点。
 /// Select facility
 /// </summary>
 public void FindFacilityNodes()
 {
     try
     {
         Recordset recordset = m_layerPoint.Selection.ToRecordset();
         Geometry  geometry  = recordset.GetGeometry();
         m_selectFacilityNode = true;
         m_selectBarrier      = false;
         m_selectEventNode    = false;
         int id = m_recordset.GetID();
         if (geometry.Type == GeometryType.GeoPoint)
         {
             m_nodesList.Add(m_recordset.GetID());
             m_trackingLayer.Add(m_geoPoint, "FacilityNode" + id);
         }
     }
     catch (Exception ex)
     {
         Trace.WriteLine(ex.Message);
     }
 }
        public void LineInsertQuery()
        {
            Layer3Ds m_layer = mSceneControl.Scene.Layers;

            foreach (Layer3D mlayer in m_layer)
            {
                if (mlayer.Selection != null)
                {
                    mlayer.Selection.Clear();
                }
            }

            QueryParameter para = new QueryParameter();

            para.HasGeometry        = true;
            para.SpatialQueryMode   = SpatialQueryMode.Intersect;
            para.SpatialQueryObject = mRec2D;

            Recordset      recordset        = null;
            Layer3DDataset layer            = null;
            String         m_textID         = String.Empty;
            String         m_textName       = String.Empty;
            String         m_textDepth      = String.Empty;
            String         m_textDiameter   = String.Empty;
            String         m_InfomationText = String.Empty;

            for (int i = 0; i < 3; i++)
            {
                if (i == 0)
                {
                    recordset = mUseData.OutWaterNetWork.Query(para);
                    layer     = mUseData.OutWaterLines;
                }
                else if (i == 1)
                {
                    recordset = mUseData.SupplyWaterNetWork.Query(para);
                    layer     = mUseData.SupplyWaterLines;
                }
                else if (i == 2)
                {
                    recordset = mUseData.ElectricNetWork.Query(para);
                    layer     = mUseData.ElectricLayer;
                }


                List <Int32> ids = new List <int>(recordset.RecordCount);
                while (!recordset.IsEOF)
                {
                    m_textID          = System.Convert.ToString(recordset.GetFieldValue("SmID"));
                    m_textName        = System.Convert.ToString(recordset.GetFieldValue("Name"));
                    m_textDepth       = System.Convert.ToString(recordset.GetFieldValue("BottomAltitude"));
                    m_textDiameter    = System.Convert.ToString(recordset.GetFieldValue("PipeDiameter"));
                    m_InfomationText += m_textID + "      " + m_textName + "    " + m_textDepth + "            " + m_textDiameter + "\n";
                    ids.Add(recordset.GetID());
                    recordset.MoveNext();
                }
                layer.Selection.AddRange(ids.ToArray());
                layer.Selection.UpdateData();
                layer.Selection.Style.LineColor = Color.GreenYellow;
                mSceneControl.Scene.Refresh();
            }

            //进行文本标注
            String m_text = "编号" + "  " + "管线类别" + "  " + "埋设深度" + "  " + "管径" + "\n";

            m_text += m_InfomationText;
            TextPart3D mText1 = new TextPart3D();

            mText1.Text        = m_text;
            mText1.AnchorPoint = mAnchorPoint3D;
            TextStyle mTextStyle1 = new TextStyle();

            mTextStyle1.FontName    = "微软雅黑";
            mTextStyle1.ForeColor   = Color.Red;
            mTextStyle1.FontHeight  = 7;
            mTextStyle1.IsSizeFixed = false;
            mTextStyle1.Alignment   = TextAlignment.MiddleCenter;
            GeoText3D  geoText_1  = new GeoText3D(mText1, mTextStyle1);
            GeoStyle3D geostyle_1 = new GeoStyle3D();

            geostyle_1.AltitudeMode = AltitudeMode.RelativeToGround;
            geoText_1.Style3D       = geostyle_1;
            TrackingLayer3D trackinglayer = mSceneControl.Scene.TrackingLayer;

            trackinglayer.IsEditable = true;
            trackinglayer.IsVisible  = true;
            trackinglayer.Add(geoText_1, "PullFlatLabel");
        }
Beispiel #10
0
        public void ContainQuery()
        {
            try
            {
                this.mDataGridView.Rows.Clear();
                this.mDataGridView.Columns.Clear();
                Layer3Ds m_layer = mSceneControl.Scene.Layers;
                foreach (Layer3D mlayer in m_layer)
                {
                    if (mlayer.Selection != null)
                    {
                        mlayer.Selection.Clear();
                    }
                }

                QueryParameter para = new QueryParameter();
                para.HasGeometry        = true;
                para.SpatialQueryMode   = SpatialQueryMode.Contain;
                para.SpatialQueryObject = m_rec;
                Recordset      recordset = null;
                Layer3DDataset layer     = null;
                for (int i = 0; i < 3; i++)
                {
                    if (i == 0)
                    {
                        recordset = mUseData.OutWaterNetWork.Query(para);
                        layer     = mUseData.OutWaterLines;
                    }
                    else if (i == 1)
                    {
                        recordset = mUseData.SupplyWaterNetWork.Query(para);
                        layer     = mUseData.SupplyWaterLines;
                    }
                    else if (i == 2)
                    {
                        recordset = mUseData.ElectricNetWork.Query(para);
                        layer     = mUseData.ElectricLayer;
                    }
                    List <Int32> ids = new List <int>(recordset.RecordCount);
                    while (!recordset.IsEOF)
                    {
                        ids.Add(recordset.GetID());
                        recordset.MoveNext();
                    }
                    layer.Selection.AddRange(ids.ToArray());
                    layer.Selection.UpdateData();
                    layer.Selection.Style.LineColor = Color.GreenYellow;
                    mSceneControl.Scene.Refresh();

                    //在DataGrid中显示表
                    recordset.MoveFirst();
                    FieldInfos fieldinfos = recordset.GetFieldInfos();
                    foreach (FieldInfo fieldInfo in fieldinfos)
                    {
                        if (i >= 1)
                        {
                            break;
                        }
                        if (!fieldInfo.IsSystemField)
                        {
                            if (fieldInfo.Name == "SmPPoint" || fieldInfo.Name == "SmNPoint")
                            {
                                continue;
                            }
                            string mCaption = fieldInfo.Caption;
                            this.mDataGridView.Columns.Add(mCaption, mCaption);
                        }
                    }
                    //初始化行
                    DataGridViewRow dataGridViewRow;
                    recordset.MoveFirst();

                    //根据选中的个数将对象的信息添加到列表中
                    while (!recordset.IsEOF)
                    {
                        dataGridViewRow = new DataGridViewRow();
                        for (int a = 0; a < recordset.FieldCount; a++)
                        {
                            if (!recordset.GetFieldInfos()[a].IsSystemField)
                            {
                                if (recordset.GetFieldInfos()[a].Name == "SmPPoint" || recordset.GetFieldInfos()[a].Name == "SmNPoint")
                                {
                                    continue;
                                }
                                //定义并获取字段值
                                object filevalue = recordset.GetFieldValue(a);

                                //添加到相应的位置
                                DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();
                                if (filevalue != null)
                                {
                                    cell.ValueType = filevalue.GetType();
                                    cell.Value     = filevalue;
                                }
                                dataGridViewRow.Cells.Add(cell);
                            }
                        }
                        this.mDataGridView.Rows.Add(dataGridViewRow);
                        recordset.MoveNext();
                    }
                    this.mDataGridView.Update();
                    recordset.Dispose();
                }
                mSceneControl.Action = Action3D.Pan2;
                mSceneControl.Scene.Refresh();
            }
            catch (System.Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }
Beispiel #11
0
        //Buffer查询
        public void BufferQuery()
        {
            try
            {
                //清除已有查询结果
                if (m_layerResultDataset != null)
                {
                    this.ClearResult();
                }
                //创建结果面数据集
                String bufferName = "bufferRegionDataset";
                if (m_workspace.Datasources[0].Datasets.Contains(bufferName))
                {
                    m_workspace.Datasources[0].Datasets.Delete(bufferName);
                }
                DatasetVector bufferDataset = (DatasetVector)m_workspace.Datasources[0].Datasets.CreateFromTemplate(bufferName, m_srcDatasetVector);

                BufferAnalystParameter bufferAnalystParam = new BufferAnalystParameter();
                bufferAnalystParam.EndType      = BufferEndType.Round;
                bufferAnalystParam.LeftDistance = m_bufferRadius;

                Boolean isTrue = SuperMap.Analyst.SpatialAnalyst.BufferAnalyst.CreateBuffer(m_selectRegion, bufferDataset, bufferAnalystParam, false, true);

                m_layerBufferDataset = this.AddResultToScene(bufferDataset, Color.FromArgb(100, 255, 255, 0)) as Layer3DDataset;

                //进行叠加分析
                QueryParameter para = new QueryParameter();
                para.SpatialQueryMode   = SpatialQueryMode.Intersect;
                para.SpatialQueryObject = bufferDataset;

                Recordset recordset = m_srcDatasetVector.Query(para);

                List <Int32> ids = new List <int>(recordset.RecordCount);

                while (!recordset.IsEOF)
                {
                    ids.Add(recordset.GetID());
                    recordset.MoveNext();
                }

                String resultName = "BufferResult";
                if (m_workspace.Datasources[0].Datasets.Contains(resultName))
                {
                    m_workspace.Datasources[0].Datasets.Delete(resultName);
                }
                DatasetVector dataset_result = (DatasetVector)m_workspace.Datasources[0].Datasets.CreateFromTemplate(resultName, m_srcDatasetVector);
                Console.Write(isTrue);


                // 将空间查询结果追加到新建的数据集中
                dataset_result.Append(recordset);

                m_layerSrcRegion.IsVisible = false;
                //将结果数据集添加到场景中

                Color color = Color.FromArgb(200, 0, 233, 0);
                m_layerResultDataset = this.AddResultToScene(dataset_result, color) as Layer3DDataset;

                //如果场景中有osgb图层,设置osgb图层可见
                Layer3Ds layer3ds = m_sceneControl.Scene.Layers;
                for (int i = 0; i < layer3ds.Count; i++)
                {
                    Layer3D layer = layer3ds[i];
                    if (layer.Type == Layer3DType.OSGB)
                    {
                        layer.IsVisible = true;
                    }
                }

                recordset.Dispose();
                m_selectRegion.Dispose();
                m_selectRegion = null;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// 加载地下管道线
        /// </summary>
        public void LoadPipeLine3D()
        {
            try
            {
                m_SelectedGeoNetwork = new List <NetworkGeometry>();
                DatasetVector dataset_PipeLine  = m_workspace.Datasources["Pipeline3D"].Datasets["PipeLine3D"] as DatasetVector;
                DatasetVector dataset_PipePoint = m_workspace.Datasources["Pipeline3D"].Datasets["PipePoint3D"] as DatasetVector;

                Layer3DSettingVector setvetor = new Layer3DSettingVector();
                setvetor.Style.AltitudeMode = AltitudeMode.RelativeToGround;
                setvetor.Style.LineSymbolID = 962048;
                setvetor.Style.LineWidth    = 0.35;


                Layer3DDataset layer_ditie     = m_sceneControl.Scene.Layers.Add(dataset_PipeLine, setvetor, true, "PipeLine3D");
                Layer3DDataset layer_pipepoint = m_sceneControl.Scene.Layers.Add(dataset_PipePoint, setvetor, true, "PipePoint3D");

                if (dataset_PipePoint != null)
                {
                    Theme3DUnique theme = new Theme3DUnique();
                    theme.UniqueExpression = "SmID";
                    GeoStyle3D style3D = new GeoStyle3D();
                    style3D.AltitudeMode   = AltitudeMode.RelativeToGround;
                    style3D.Marker3DScaleX = 2.2;
                    style3D.Marker3DScaleY = 2.2;
                    style3D.Marker3DScaleZ = 2.2;

                    style3D.IsMarker3D = true;
                    theme.DefaultStyle = style3D;
                    Recordset rs = dataset_PipePoint.Query("", CursorType.Static);
                    rs.MoveFirst();
                    while (!rs.IsEOF)
                    {
                        Theme3DUniqueItem item = new Theme3DUniqueItem();
                        item.Unique = rs.GetID().ToString();
                        item.IsModellingStyleEnabled = true;
                        GeoStyle3D tempStyle = new GeoStyle3D(style3D);
                        PickNodeToLine(rs.GetID());
                        GeoPoint3D geoPoint3D = rs.GetGeometry() as GeoPoint3D;

                        List <Vector3d> arrVector3d = new List <Vector3d>();
                        for (Int32 curIndex = 0; curIndex < m_SelectedGeoNetwork.Count; curIndex++)
                        {
                            NetworkGeometry geoNetWork = m_SelectedGeoNetwork[curIndex];

                            if (geoNetWork != null)
                            {
                                Vector3d  vec     = new Vector3d();
                                GeoLine3D geoLine = geoNetWork.geometry as GeoLine3D;
                                if (geoNetWork.bIsIn)
                                {
                                    if (geoLine != null)
                                    {
                                        Point3Ds point3D  = geoLine[0];
                                        Point3D  pntTNode = point3D[1];
                                        Point3D  pntFNode = point3D[0];
                                        Vector3d vecTNode = SphericalToCartesian(pntTNode.X * DTOR, pntTNode.Y * DTOR, pntTNode.Z);
                                        Vector3d vecFNode = SphericalToCartesian(pntFNode.X * DTOR, pntFNode.Y * DTOR, pntFNode.Z);

                                        vec = new Vector3d(vecFNode.x - vecTNode.x, vecFNode.y - vecTNode.y, vecFNode.z - vecTNode.z);
                                        vec.Normalize();
                                    }
                                }
                                else
                                {
                                    if (geoLine != null)
                                    {
                                        Point3Ds point3D  = geoLine[0];
                                        Point3D  pntFNode = point3D[0];
                                        Point3D  pntTNode = point3D[1];
                                        Vector3d vecTNode = SphericalToCartesian(pntTNode.X * DTOR, pntTNode.Y * DTOR, pntTNode.Z);
                                        Vector3d vecFNode = SphericalToCartesian(pntFNode.X * DTOR, pntFNode.Y * DTOR, pntFNode.Z);

                                        vec = new Vector3d(vecTNode.x - vecFNode.x, vecTNode.y - vecFNode.y, vecTNode.z - vecFNode.z);
                                        vec.Normalize();
                                    }
                                }

                                vec = FromAngleAxis(vec, -geoPoint3D.X * DTOR, new Vector3d(0, 1, 0));
                                vec = FromAngleAxis(vec, geoPoint3D.Y * DTOR, new Vector3d(1, 0, 0));
                                vec.Normalize();
                                arrVector3d.Add(vec);
                            }
                        }

                        Vector3d vecX = new Vector3d();
                        Vector3d vecY = new Vector3d();
                        Vector3d vecZ = new Vector3d();
                        switch (m_SelectedGeoNetwork.Count)
                        {
                        case 2:    //弯头或阀门
                        {
                            if (arrVector3d.Count == 2)
                            {
                                vecX = arrVector3d[0].Normalize().Sub();
                                vecY = arrVector3d[1].Normalize();
                            }

                            double dAngle1_2 = vecX.DotProduct(vecY);
                            if (Math.Abs(dAngle1_2) < 0.3)
                            {
                                tempStyle.MarkerSymbolID = 54441;
                            }
                            else if (-1 < dAngle1_2 && dAngle1_2 < 0.7)
                            {
                                tempStyle.MarkerSymbolID = 54442;
                            }
                            else
                            {
                                vecY.z = 0;
                                Vector3d vec = new Vector3d(0, 0, 1);
                                vecX = vecY.CrossProduct(vec);
                                tempStyle.MarkerSymbolID = 54435;
                            }
                        }
                        break;

                        case 3:    //三通
                        {
                            tempStyle.MarkerSymbolID = 54437;

                            if (arrVector3d.Count == 3)
                            {
                                Vector3d vec1 = arrVector3d[0];
                                Vector3d vec2 = arrVector3d[1];
                                Vector3d vec3 = arrVector3d[2];

                                double dAngle1_2 = vec1.DotProduct(vec2);
                                double dAngle1_3 = vec1.DotProduct(vec3);
                                double dAngle2_3 = vec2.DotProduct(vec3);
                                if (Math.Abs(dAngle1_2) < 0.3)
                                {
                                    if (Math.Abs(dAngle1_3) < 0.3)
                                    {
                                        vecX = vec1.Normalize().Sub();
                                        vecY = vec2.Normalize();
                                    }
                                    else
                                    {
                                        vecX = vec2.Normalize().Sub();
                                        vecY = vec1.Normalize();
                                    }
                                }
                                else
                                {
                                    vecX = vec3.Normalize().Sub();
                                    vecY = vec1.Normalize();
                                }
                            }
                        }
                        break;

                        case 4:    //四通
                        {
                            tempStyle.MarkerSymbolID = 54438;
                            if (arrVector3d.Count == 4)
                            {
                                Vector3d vec1 = arrVector3d[0];
                                Vector3d vec2 = arrVector3d[1];
                                Vector3d vec3 = arrVector3d[2];

                                double dAngle1_2 = vec1.DotProduct(vec2);
                                double dAngle1_3 = vec1.DotProduct(vec3);

                                vecX = vec1;
                                if (Math.Abs(dAngle1_2) < 0.3)
                                {
                                    vecY = vec2.Normalize();
                                }
                                else
                                {
                                    vecY = vec3.Normalize();
                                }
                            }
                        }
                        break;

                        default:    //结点
                        {
                            tempStyle.MarkerSymbolID = 330101;
                        }
                        break;
                        }

                        if (m_SelectedGeoNetwork.Count > 1)
                        {
                            vecZ = vecX.CrossProduct(vecY);
                            vecZ.Normalize();

                            Vector3d vecRotate = ToEulerAnglesXYZ(vecX, vecY, vecZ);

                            tempStyle.Marker3DRotateX = -vecRotate.x * RTOD;
                            tempStyle.Marker3DRotateY = -vecRotate.y * RTOD;
                            tempStyle.Marker3DRotateZ = -vecRotate.z * RTOD;
                        }
                        item.Style = tempStyle;
                        theme.Add(item);
                        rs.MoveNext();
                    }
                    rs.Dispose();
                    Layer3D layer_theme = m_sceneControl.Scene.Layers.Add(dataset_PipePoint, theme, true, "underPipeLine3D");
                    layer_theme.IsSelectable = false;
                    if (m_sceneControl.Scene.Layers.Contains("PipePoint3D"))
                    {
                        m_sceneControl.Scene.Layers.Remove("PipePoint3D");
                    }

                    Camera camera = m_sceneControl.Scene.Camera;
                    camera.AltitudeMode = AltitudeMode.RelativeToGround;
                    camera.Altitude     = 26.978640816174448;
                    camera.Latitude     = 39.992608337161023;
                    camera.Longitude    = 116.3898561529368;
                    camera.Tilt         = 59.567389444384283;
                    camera.Heading      = 300.19323029928478;
                    m_sceneControl.Scene.Fly(camera, 1);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Beispiel #13
0
        private void Button_Query_Click(object sender, EventArgs e)
        {
            try
            {
                this.mDataGridView.Rows.Clear();
                this.mDataGridView.Columns.Clear();
                //每次查询都要先获取图层上的选择集并清除
                Selection3D[] selection1 = mScenecontrol.Scene.FindSelection(true);
                if (selection1 != null)
                {
                    for (int i = 0; i < selection1.Length; i++)
                    {
                        selection1[i].Clear();
                    }
                }
                //进行分析的数据集
                DatasetVector dtvQuery = mData;

                //设置分析参数
                QueryParameter parameter = new QueryParameter();
                parameter.HasGeometry     = false;
                parameter.AttributeFilter = txtQueryFilter.Text;
                string[] resultfields = new string[dtvQuery.GetRecordset(false, CursorType.Static).GetFieldInfos().Count];
                if (txtQueryFields.Text == "*")
                {
                    Recordset  recordset  = dtvQuery.GetRecordset(false, CursorType.Static);
                    FieldInfos fieldInfos = recordset.GetFieldInfos();
                    for (int i = 0; i < fieldInfos.Count; i++)
                    {
                        resultfields[i] = fieldInfos[i].Name;
                    }
                    recordset.Dispose();
                }
                else if (txtQueryFields.Text.Length == 0)
                {
                    MessageBox.Show("查询字段不能为空!");
                    return;
                }
                else
                {
                    resultfields = txtQueryFields.Text.Split(new char[] { ',' });
                }
                parameter.ResultFields = resultfields;
                parameter.CursorType   = CursorType.Static;
                parameter.HasGeometry  = true;

                //进行查询显示
                mRec = dtvQuery.Query(parameter);

                if (mRec.RecordCount != 0)
                {
                    mRec.MoveFirst();
                    Geometry     geo = mRec.GetGeometry();
                    GeometryType typ = geo.Type;

                    //进行显示,把查询结果放入到选择集中,设置查询结果的风格,在场景中高亮出来
                    int            layerindex = mScenecontrol.Scene.Layers.IndexOf(mLayername);
                    Layer3DDataset layer3d    = mScenecontrol.Scene.Layers[layerindex] as Layer3DDataset;
                    List <Int32>   ids        = new List <int>(mRec.RecordCount);
                    // Selection3D selection = layer3d.Selection;
                    while (!mRec.IsEOF)
                    {
                        ids.Add(mRec.GetID());
                        mRec.MoveNext();
                    }
                    layer3d.Selection.AddRange(ids.ToArray());
                    layer3d.Selection.Style.LineColor     = Color.GreenYellow;
                    layer3d.Selection.Style.FillForeColor = Color.GreenYellow;
                    layer3d.Selection.Style.FillMode      = FillMode3D.Line;
                    layer3d.Selection.UpdateData();
                    mScenecontrol.Scene.Refresh();
                }
                else
                {
                    MessageBox.Show("没有查询结果!");
                    return;
                }
                this.Close();
                //在DataGriw显示属性表,以表格的形式显示
                mRec.MoveFirst();
                FieldInfos fieldinfos = mRec.GetFieldInfos();

                foreach (FieldInfo fieldInfo in fieldinfos)
                {
                    if (!fieldInfo.IsSystemField)
                    {
                        if (fieldInfo.Name == "SmPPoint" || fieldInfo.Name == "SmNPoint")
                        {
                            continue;
                        }
                        // string name = fieldInfo.Name;
                        string mCaption = fieldInfo.Caption;
                        this.mDataGridView.Columns.Add(mCaption, mCaption);
                    }
                }
                //初始化行
                DataGridViewRow dataGridViewRow;
                mRec.MoveFirst();

                //根据选中的个数将对象的信息添加到列表中
                while (!mRec.IsEOF)
                {
                    dataGridViewRow = new DataGridViewRow();
                    for (int a = 0; a < mRec.FieldCount; a++)
                    {
                        if (!mRec.GetFieldInfos()[a].IsSystemField)
                        {
                            if (mRec.GetFieldInfos()[a].Name == "SmPPoint" || mRec.GetFieldInfos()[a].Name == "SmNPoint")
                            {
                                continue;
                            }
                            //定义并获取字段值
                            object filevalue = mRec.GetFieldValue(a);

                            //添加到相应的位置
                            DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();
                            if (filevalue != null)
                            {
                                cell.ValueType = filevalue.GetType();
                                cell.Value     = filevalue;
                            }
                            dataGridViewRow.Cells.Add(cell);
                        }
                    }
                    this.mDataGridView.Rows.Add(dataGridViewRow);
                    mRec.MoveNext();
                }
                this.mDataGridView.Update();
                mScenecontrol.Action = Action3D.Pan2;
                mScenecontrol.Scene.Refresh();
                mRec.Dispose();
            }
            catch (Exception ex)
            {
            }
        }
Beispiel #14
0
        private void cmbDeviceType_SelectedIndexChanged(object sender, EventArgs e)
        {
            Recordset objRtType = null;
            Recordset objRtData = null;

            try
            {
                //获取类型信息
                dgv_TypeData.Rows.Clear();
                m_lstTypeData.Clear();
                if (cmbDeviceType.SelectedItem == null)
                {
                    return;
                }
                ResourceTypeData typeData           = cmbDeviceType.SelectedItem as ResourceTypeData;
                string           strDatasetTypeName = typeData.DatasetName + "Type";
                if (!m_Application.Workspace.Datasources["Resource"].Datasets.Contains(strDatasetTypeName))
                {
                    return;
                }
                objRtType = (m_Application.Workspace.Datasources["Resource"].Datasets[strDatasetTypeName] as DatasetVector).GetRecordset(false, CursorType.Static);
                objRtType.MoveFirst();
                while (!objRtType.IsEOF)
                {
                    DataGridViewRow row = new DataGridViewRow();
                    row.Cells.Add(new DataGridViewTextBoxCell {
                        Value = Convert.ToString(objRtType.GetFieldValue("TypeName"))
                    });
                    dgv_TypeData.Rows.Add(row);

                    m_lstTypeData.Add(new Label {
                        Text = Convert.ToString(objRtType.GetFieldValue("TypeName")), Tag = Convert.ToString(objRtType.GetFieldValue("TypeID"))
                    });

                    objRtType.MoveNext();
                }

                cmbSetDeviceType.DataSource    = null;
                cmbSetDeviceType.DataSource    = m_lstTypeData;
                cmbSetDeviceType.DisplayMember = "Text";
                if (cmbSetDeviceType.Items.Count > 0)
                {
                    cmbSetDeviceType.SelectedIndex = 0;
                }

                //获取设备信息
                dgv_Data.Rows.Clear();
                if (m_Application.Workspace.Datasources["Resource"].Datasets[typeData.DatasetName] == null)
                {
                    return;
                }
                objRtData = (m_Application.Workspace.Datasources["Resource"].Datasets[typeData.DatasetName] as DatasetVector).GetRecordset(false, CursorType.Static);
                objRtData.MoveFirst();
                while (!objRtData.IsEOF)
                {
                    DataGridViewRow row = new DataGridViewRow();
                    row.Cells.Add(new DataGridViewCheckBoxCell());
                    row.Cells.Add(new DataGridViewTextBoxCell {
                        Value = Convert.ToString(objRtData.GetFieldValue(typeData.FieldID))
                    });
                    row.Cells.Add(new DataGridViewTextBoxCell {
                        Value = Convert.ToString(objRtData.GetFieldValue(typeData.FieldName))
                    });
                    //if (objRtData.GetFieldValue("TypeID") != null)
                    //{
                    //    row.Cells.Add(new DataGridViewTextBoxCell { Value = Convert.ToString(objRtData.GetFieldValue("TypeID")) });
                    //}
                    row.Tag = objRtData.GetID();
                    dgv_Data.Rows.Add(row);

                    objRtData.MoveNext();
                }
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRtType != null)
                {
                    objRtType.Close();
                    objRtType.Dispose();
                }
                if (objRtData != null)
                {
                    objRtData.Close();
                    objRtData.Dispose();
                }
            }
        }
Beispiel #15
0
        private void btn_Refresh_Click(object sender, EventArgs e)
        {
            Recordset objRt = null;

            try
            {
                Layer3DDataset layer = m_SceneControl.Scene.Layers[txt_Name.Text.Trim() + "@SpaceData"] as Layer3DDataset;
                GeoStyle3D     style = new GeoStyle3D
                {
                    LineSymbolID = Convert.ToInt32(btn_SelectColor.Tag)
                };

                Theme3DUnique theme = layer.Theme as Theme3DUnique;
                theme.UniqueExpression = "SmID";
                theme.DefaultStyle     = style;
                theme.Clear();

                m_lstItems.Clear();
                objRt = (m_Application.Workspace.Datasources["SpaceData"].Datasets[txt_Name.Text.Trim()] as DatasetVector).GetRecordset(false, CursorType.Static);
                objRt.MoveFirst();
                while (!objRt.IsEOF)
                {
                    Dictionary <string, object> dic = new Dictionary <string, object>
                    {
                        { "lon", objRt.GetFieldValue("Longitude") },
                        { "lat", objRt.GetFieldValue("Latitude") },
                        { "alt", objRt.GetFieldValue("Altitude") },
                        { "tilt", objRt.GetFieldValue("Tilt") },
                        { "heading", objRt.GetFieldValue("Heading") },
                        { "geo", objRt.GetGeometry() }
                    };
                    bool flag = false;
                    if (objRt.GetFieldValue("Longitude") == null)
                    {
                        flag = true;
                    }
                    Label lbl = new Label
                    {
                        Text = flag ? "第【" + objRt.GetID() + "】分段(无视角)" : "第【" + objRt.GetID() + "】分段",
                        Tag  = objRt.GetID()
                    };
                    m_lstItems.Add(lbl);

                    Theme3DUniqueItem item = new Theme3DUniqueItem
                    {
                        Caption   = objRt.GetID().ToString(),
                        Style     = style,
                        IsVisible = true,
                        Unique    = objRt.GetID().ToString()
                    };
                    theme.Add(item);

                    objRt.MoveNext();
                }

                lst_Items.DataSource    = null;
                lst_Items.DataSource    = m_lstItems;
                lst_Items.DisplayMember = "Text";
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }
Beispiel #16
0
        private void LoadData()
        {
            Recordset objRt = null;

            try
            {
                if (m_Type == WorkflowEditType.New)
                {
                    return;
                }
                if (cmb_Workflow.SelectedItem == null)
                {
                    return;
                }
                string id = (cmb_Workflow.SelectedItem as Label).Tag.ToString();
                objRt = (m_Application.Workspace.Datasources["Resource"].Datasets["ArtCraftTable"] as DatasetVector).Query("CraftID='" + id + "'", CursorType.Static);
                if (objRt.RecordCount > 0)
                {
                    txt_Name.Text        = Convert.ToString(objRt.GetFieldValue("CraftName"));
                    rtb_Description.Text = Convert.ToString(objRt.GetFieldValue("Note"));
                    txt_PlaySpeed.Text   = Convert.ToString(objRt.GetFieldValue("PlaySpeed"));
                    btn_SelectColor.Text = Convert.ToString(objRt.GetFieldValue("Symbol")).Split(',')[0];
                    btn_SelectColor.Tag  = Convert.ToString(objRt.GetFieldValue("Symbol")).Split(',')[1];

                    objRt.Close();
                    objRt.Dispose();

                    m_lstItems.Clear();
                    objRt = (m_Application.Workspace.Datasources["SpaceData"].Datasets[txt_Name.Text.Trim()] as DatasetVector).GetRecordset(false, CursorType.Static);
                    objRt.MoveFirst();
                    while (!objRt.IsEOF)
                    {
                        Dictionary <string, object> dic = new Dictionary <string, object>
                        {
                            { "lon", objRt.GetFieldValue("Longitude") },
                            { "lat", objRt.GetFieldValue("Latitude") },
                            { "alt", objRt.GetFieldValue("Altitude") },
                            { "tilt", objRt.GetFieldValue("Tilt") },
                            { "heading", objRt.GetFieldValue("Heading") },
                            { "geo", objRt.GetGeometry() }
                        };
                        bool flag = false;
                        if (objRt.GetFieldValue("Longitude") == null)
                        {
                            flag = true;
                        }
                        Label lbl = new Label
                        {
                            Text = flag ? "第【" + objRt.GetID() + "】分段(无视角)" : "第【" + objRt.GetID() + "】分段",
                            Tag  = objRt.GetID()
                        };
                        m_lstItems.Add(lbl);

                        objRt.MoveNext();
                    }

                    lst_Items.DataSource    = null;
                    lst_Items.DataSource    = m_lstItems;
                    lst_Items.DisplayMember = "Text";
                }
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }