/// <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(); } }
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(); } } }
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); } }
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(); } } }
/// <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); } }
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(); } } }
/// <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"); }
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); } }
//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); } }
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) { } }
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(); } } }
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(); } } }
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(); } } }