private void FeatureClassMapToFieldInfor() { try { featureClassMapping = new Dictionary <IFeatureClass, List <string> >(); fieldInfoCollections = new List <IFieldInfoCollection>(); foreach (IFeatureClass fc in featureClasses) { List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); if (fieldinfos != null && fieldinfos.Count > 0) { for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo field = fieldinfos.Get(i); if (field != null && field.GeometryDef != null) { geoNames.Add(field.Name); } } featureClassMapping.Add(fc, geoNames); fieldInfoCollections.Add(fieldinfos); } } } catch (Exception ex) { throw ex; } }
/// <summary> /// 通过modelPoint查找model,修改model顶点,塞回数据源 /// </summary> /// <param name="fdbPath"></param> void editModleNodeCoord(string fdbPath) { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; ci.Database = fdbPath; //获取数据源 IDataSource ds = new DataSourceFactory().OpenDataSource(ci); string[] dataSetNames = ds.GetFeatureDatasetNames(); IFeatureDataSet fds = ds.OpenFeatureDataset("fdsName"); IResourceManager resourceM = (IResourceManager)fds; //获取所有featureClass string[] fcNames = fds.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); for (int fci = 0; fci < fcNames.Length; fci++) { IFeatureClass fc = fds.OpenFeatureClass(fcNames[fci]); IFieldInfoCollection fieldInfos = fc.GetFields(); for (int fieldi = 0; fieldi < fieldInfos.Count; fieldi++) { IFieldInfo finfo = fieldInfos.Get(fieldi); if (finfo.FieldType == gviFieldType.gviFieldGeometry) { //获取fc的几何属性及其索引,索引用于更新模型 aaa(fc, fieldi, resourceM); break; } } } }
private void LoadFcFieldInfo() { IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } if (fieldinfo.FieldType == gviFieldType.gviFieldGeometry || fieldinfo.FieldType == gviFieldType.gviFieldFID) { continue; } int iRowIndex = -1; if (fieldinfo.Domain != null) { iRowIndex = this.dgv_FieldInfo.Rows.Add(new object[] { fieldinfo.Name, ConvertFieldTypeByString(fieldinfo.FieldType), fieldinfo.Domain.Name }); } else { iRowIndex = this.dgv_FieldInfo.Rows.Add(new object[] { fieldinfo.Name, ConvertFieldTypeByString(fieldinfo.FieldType), null }); } this.dgv_FieldInfo.Rows[iRowIndex].Tag = fieldinfo; } }
private void toolStripMenuItemFieldInfo_Click(object sender, EventArgs e) { string fieldinfo_name = selectNode.Text; string fc_name = selectNode.Parent.Text; string set_name = selectNode.Parent.Parent.Text; myTreeNode node = (myTreeNode)selectNode.Parent.Parent.Parent; IConnectionInfo ci = node.con; IDataSource ds = dsFactory.OpenDataSource(ci); IFeatureDataSet dataset = ds.OpenFeatureDataset(set_name); IFeatureClass fc = dataset.OpenFeatureClass(fc_name); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } if (fieldinfo_name == fieldinfo.Name) { FieldInfoForm form = new FieldInfoForm(fieldinfo); form.Show(); } } }
private void CreateFeautureLayer() { bool hasfly = false; foreach (FeatureClass fc in _featureClassMapping.Keys) { List <string> geoNames = _featureClassMapping[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = _axRenderControl.ObjectManager.CreateFeatureLayer(fc, geoName, null, null); featureLayer.MaxVisibleDistance = 500000000; _featureLayerMaps.Add(new FeatureLayerMap(featureLayer, fc)); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } //var angle = SetAngle(0, -20, 0); //SetCameraLookAt(env.Center, 1000, angle); } hasfly = true; } } }
private void viewFieldToolStripMenuItem_Click(object sender, EventArgs e) { string fieldinfo_name = selectNode.Text; string fc_name = selectNode.Parent.Text; string set_name = selectNode.Parent.Parent.Text; myTreeNode node = (myTreeNode)selectNode.Parent.Parent.Parent; IConnectionInfo ci = node.con; IDataSource ds = null; IFeatureDataSet dset = null; IFeatureClass fc = null; try { ds = dsFactory.OpenDataSource(ci); dset = ds.OpenFeatureDataset(set_name); fc = dset.OpenFeatureClass(fc_name); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } if (fieldinfo_name == fieldinfo.Name) { ViewFieldInfoForm form = new ViewFieldInfoForm(fieldinfo); form.Show(); } } } catch (COMException comEx) { System.Diagnostics.Trace.WriteLine(comEx.Message); } catch (System.Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } finally { if (fc != null) { //Marshal.ReleaseComObject(fc); fc = null; } if (dset != null) { //Marshal.ReleaseComObject(dset); dset = null; } if (ds != null) { //Marshal.ReleaseComObject(ds); ds = null; } } }
private void LoadProperty() { DF3DFeatureClass featureClassInfo = CommonUtils.Instance().CurEditLayer; if (featureClassInfo == null) { return; } IFeatureClass fc = featureClassInfo.GetFeatureClass(); if (fc == null) { return; } IFieldInfoCollection fiCol = fc.GetFields(); if (fiCol == null) { return; } for (int i = 0; i < fiCol.Count; i++) { IFieldInfo fi = fiCol.Get(i); if (fi.Name == fc.FidFieldName) { continue; } switch (fi.FieldType) { case gviFieldType.gviFieldBlob: case gviFieldType.gviFieldGeometry: case gviFieldType.gviFieldUnknown: continue; //case gviFieldType.gviFieldFloat: //case gviFieldType.gviFieldDouble: // break; //case gviFieldType.gviFieldFID: //case gviFieldType.gviFieldUUID: //case gviFieldType.gviFieldInt16: //case gviFieldType.gviFieldInt32: //case gviFieldType.gviFieldInt64: // break; //case gviFieldType.gviFieldString: // break; //case gviFieldType.gviFieldDate: default: DataRow dr = this._dt.NewRow(); dr["FN"] = string.IsNullOrEmpty(fi.Alias) ? fi.Name : fi.Alias; dr["FV"] = null; dr["F"] = fi; this._dt.Rows.Add(dr); break; } } }
private void LoadLocalData() { try { ConnectionInfo ci = new ConnectionInfo { ConnectionType = i3dConnectionType.i3dConnectionFireBird2x }; string rootPath = Path.GetFullPath(@"..//..//.."); string tmpFDBPath = Path.Combine(rootPath, "data\\3dm\\1.3DM"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); datasetCRS = dataset.SpatialReference; string[] fcnames = (string[])dataset.GetNamesByType(i3dDataSetType.i3dDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } }
private void FeatureDataSetMapToFeatureClassMap() { try { if (_ci == null) { return; } dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(_ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames == null || setnames.Length == 0) { return; } foreach (string name in setnames) { IFeatureDataSet dataSet = ds.OpenFeatureDataset(name); string[] fcnames = (string[])dataSet.GetNamesByType(i3dDataSetType.i3dDataSetFeatureClassTable); if (fcnames == null || fcnames.Length == 0) { continue; } foreach (string fcname in fcnames) { IFeatureClass fc = dataSet.OpenFeatureClass(fcname); if (fc != null) { List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); if (fieldinfos != null && fieldinfos.Count > 0) { for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo field = fieldinfos.Get(i); if (field != null && field.GeometryDef != null) { geoNames.Add(field.Name); } } _featureClassMapping.Add(fc, geoNames); } } } } } catch (Exception ex) { LoggerHelper.Logger.Error(ex, "执行FeatureDataSetMapToFeatureClassMap错误"); } }
private void SetDomainTree() { if (comboBoxDomains.SelectedIndex < 0 || fieldNamesHasDomain.Count == 0) { return; } string fieldName = fieldNamesHasDomain[comboBoxDomains.SelectedIndex]; int index = fieldinfos.IndexOf(fieldName); IFieldInfo field = fieldinfos.Get(index); IDomain domainSelect = field.Domain; if (domainSelect == null) { return; } nodekeyMap.Clear(); this.treeViewDomain.Nodes.Clear(); if (domainSelect.DomainType == gviDomainType.gviDomainCodedValue) { ICodedValueDomain codedomain = domainSelect as ICodedValueDomain; int nCodes = codedomain.CodeCount; for (int c = 0; c < nCodes; c++) { string codename = codedomain.GetCodeName(c); object codevalue = codedomain.GetCodeValue(c); this.treeViewDomain.Nodes.Add(codevalue.ToString(), codename, 2, 2); nodekeyMap.Add(codename, c); TreeNode pNode = this.treeViewDomain.Nodes.Find(codevalue.ToString(), true)[0]; pNode.Checked = true; } //其它值 { this.treeViewDomain.Nodes.Add("other", "other", 2, 2); nodekeyMap.Add("other", nCodes); TreeNode pNode = this.treeViewDomain.Nodes.Find("other", true)[0]; pNode.Checked = true; } } else { IRangeDomain rangedomain = domainSelect as IRangeDomain; object minValue = rangedomain.MinValue; object maxValue = rangedomain.MaxValue; } }
private object[] GetRegisteredRenderIndexFields(IFeatureClass fc) { ArrayList list = new ArrayList(); IFieldInfoCollection cols = fc.GetFields(); for (int i = 0; i < cols.Count; i++) { IFieldInfo field = cols.Get(i); if (field.RegisteredRenderIndex == true) { list.Add(field.Name); } } return(list.ToArray()); }
/// <summary> /// 添加 FieldInfo 到树节点 /// </summary> /// <param name="featureClass"></param> /// <param name="node"></param> public void AppendFieldInfoToTreeNode(IFeatureClass featureClass, TreeNode node) { // 获取属性字段 IFieldInfoCollection fieldinfos = featureClass.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (fieldinfo == null || fieldinfo.Length == 0) { return; } TreeNode fieldinfoNode = new TreeNode(fieldinfo.Name); node.Nodes.Add(fieldinfoNode); } }
public CreateDBIndexForm(IFieldInfoCollection fields, ListBoxControl lbc) : this() { for (int i = 0; i < fields.Count; i++) { IFieldInfo fieldInfo = fields.Get(i); if (fieldInfo.FieldType == gviFieldType.gviFieldFID) { this.Fid = fieldInfo.Name; } if (fieldInfo.FieldType != gviFieldType.gviFieldGeometry) { this.lbc_FieldsAvailable.Items.Add(fieldInfo.Name); } } this.lbcIndexName = lbc; }
void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { IPickResult pr = PickResult; if (pr == null) { return; } if (EventSender == gviMouseSelectMode.gviMouseSelectClick) { if (pr.Type == gviObjectType.gviObjectFeatureLayer) { // 高亮Polygon this.axRenderControl1.FeatureManager.UnhighlightAll(); IFeatureLayerPickResult flpr = pr as IFeatureLayerPickResult; fid = flpr.FeatureId; IFeatureLayer fl = flpr.FeatureLayer; foreach (IFeatureClass fc in fcMap.Keys) { if (fc.Guid.Equals(fl.FeatureClassId)) { IRowBuffer fdeRow = fc.GetRow(fid); IFieldInfoCollection col = fdeRow.Fields; for (int i = 0; i < col.Count; ++i) { IFieldInfo info = col.Get(i); if (info.GeometryDef != null && info.GeometryDef.GeometryColumnType == gviGeometryColumnType.gviGeometryColumnPolyline) { int nPos = fdeRow.FieldIndex(info.Name); polyline = fdeRow.GetValue(nPos) as IPolyline; this.axRenderControl1.FeatureManager.HighlightFeature(fc, fid, System.Drawing.Color.Yellow); //获取路宽 nPos = fdeRow.FieldIndex("WIDTH"); //width = (double)fdeRow.GetValue(nPos); width = 10; } } } // end " if (fc.Guid.Equals(fl.FeatureClassId))" } // end "foreach (IFeatureClass fc in fcMap.Keys)" } } }
private void CreateFeautureLayer() { bool hasfly = false; foreach (FeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } EulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); if (geoFactory == null) { geoFactory = new GeometryFactory(); } IPoint pos = geoFactory.CreatePoint(i3dVertexAttribute.i3dVertexAttributeZ); pos.SpatialCRS = datasetCRS; pos.Position = env.Center; this.axRenderControl1.Camera.LookAt2(pos, 1000, angle); } hasfly = true; } } }
public CreateDBIndexDlg(IFieldInfoCollection pFields, List <string> existIndexName) { InitializeComponent(); fcFields = pFields; indexNames = existIndexName; for (int k = 0; k < fcFields.Count; k++) { IFieldInfo fcField = fcFields.Get(k); if (fcField.FieldType == gviFieldType.gviFieldFID) { fidField = fcField.Name; } if (fcField.FieldType != gviFieldType.gviFieldGeometry && fcField.FieldType != gviFieldType.gviFieldBlob) { this.lb_Fields.Items.Add(new myFieldInfo(fcField)); } } }
public bool CompareFeatureClass(IFieldInfoCollection fields1, IFieldInfoCollection fields2) { if (fields1.Count != fields2.Count) { return(false); } for (int i = 0; i < fields1.Count; i++) { IFieldInfo fieldInfo = fields1.Get(i); int num = fields2.IndexOf(fieldInfo.Name); if (num == -1) { return(false); } if (!fieldInfo.Equal(fields2.Get(num))) { return(false); } } return(true); }
private void menuLoadData_Click(object sender, EventArgs e) { if (layers.Count > 0) { MessageBox.Show("数据已加载"); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); layers.Add(featureLayer); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } }
private void AddColumnToDataTable(DataTable dt, IFeatureClass fc) { DataColumn dc; if (fc != null) { IFieldInfoCollection fields = fc.GetFields(); for (int i = 0; i < fields.Count; i++) { IFieldInfo fInfo = fields.Get(i); if (fInfo.FieldType == i3dFieldType.i3dFieldGeometry || fInfo.FieldType == i3dFieldType.i3dFieldBlob || fInfo.Name.ToUpper() == "GROUPID") { continue; } dc = new DataColumn { ColumnName = fInfo.Name }; SetDataColumnType(fInfo.FieldType, dc); dt.Columns.Add(dc); } // GroupId dc = new DataColumn("GroupId") { DataType = typeof(int) }; dt.Columns.Add(dc); // GroupName dc = new DataColumn("GroupName") { DataType = typeof(string) }; dt.Columns.Add(dc); } }
/// <summary> /// 初始化 /// </summary> private void init() { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); skybox = this.axRenderControl1.ObjectManager.GetSkyBox(1); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\2_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\2_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\2_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\2_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\2_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\2_UP.jpg"); skybox = this.axRenderControl1.ObjectManager.GetSkyBox(2); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\04_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\04_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\04_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\04_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\04_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\04_UP.jpg"); skybox = this.axRenderControl1.ObjectManager.GetSkyBox(3); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\9_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\9_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\9_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\9_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\9_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\9_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } #region 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\SDKDEMO.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } #endregion 加载FDB场景 { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "HideSelectedArea.html"; } // 注册控件拾取事件 this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); this.axRenderControl1.RcMouseDragSelect += new _IRenderControlEvents_RcMouseDragSelectEventHandler(axRenderControl1_RcMouseDragSelect); this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectFeatureLayer; this.axRenderControl1.InteractMode = gviInteractMode.gviInteractSelect; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick | gviMouseSelectMode.gviMouseSelectDrag; }
void init() { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 注册出图事件 this.axRenderControl1.RcPictureExportBegin += new _IRenderControlEvents_RcPictureExportBeginEventHandler(axRenderControl1_RcPictureExportBegin); this.axRenderControl1.RcPictureExporting += new _IRenderControlEvents_RcPictureExportingEventHandler(axRenderControl1_RcPictureExporting); this.axRenderControl1.RcPictureExportEnd += new _IRenderControlEvents_RcPictureExportEndEventHandler(axRenderControl1_RcPictureExportEnd); // 注册相机“返回”和“前进”事件 this.axRenderControl1.RcCameraUndoRedoStatusChanged += new _IRenderControlEvents_RcCameraUndoRedoStatusChangedEventHandler(axRenderControl1_RcCameraUndoRedoStatusChanged); _rcCameraUndoRedo = new _IRenderControlEvents_RcCameraUndoRedoStatusChangedEventHandler(axRenderControl1_RcCameraUndoRedoStatusChanged); // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\SDKDEMO.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } // 加载动画导航 BindingSource bindingSource1 = new BindingSource(); { string tmpXMLPath = (strMediaPath + @"\xml\CameraTour_1.xml"); tour = this.axRenderControl1.ObjectManager.CreateCameraTour(rootId); if (File.Exists(tmpXMLPath)) { StreamReader sr = new StreamReader(tmpXMLPath); string xmlstring = ""; string line = sr.ReadLine(); while (!string.IsNullOrEmpty(line)) { xmlstring += line; line = sr.ReadLine(); } sr.Close(); tour.FromXml(xmlstring); } bindingSource1.Add(new Knight("CameraTour_1", tour)); } { string tmpXMLPath = (strMediaPath + @"\xml\CameraTour_2.xml"); tour = this.axRenderControl1.ObjectManager.CreateCameraTour(rootId); if (File.Exists(tmpXMLPath)) { StreamReader sr = new StreamReader(tmpXMLPath); string xmlstring = ""; string line = sr.ReadLine(); while (!string.IsNullOrEmpty(line)) { xmlstring += line; line = sr.ReadLine(); } sr.Close(); tour.FromXml(xmlstring); } bindingSource1.Add(new Knight("CameraTour_2", tour)); } dataGridView1.DataSource = bindingSource1; dataGridView1.Columns[1].Visible = false; this.btnPause.Enabled = false; this.btnStop.Enabled = false; this.toolStripComboBoxWeather.SelectedIndex = 0; { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "HelloWorld.html"; } }
private void toolStripSetGeometryRender_Click(object sender, EventArgs e) { string nodeName = selectNode.Text; myListNode node = selectNode as myListNode; IFeatureLayer layer = node.layer; // 获取注册了RenderIndex的字段名集合 IFeatureClass fc = layerFcMap[node.layer] as IFeatureClass; ArrayList fieldNamesWithRegisterRenderIndex = new ArrayList(); fieldNamesWithRegisterRenderIndex.Add(""); IFieldInfoCollection fields = fc.GetFields(); for (int i = 0; i < fields.Count; i++) { if (fields.Get(i).RegisteredRenderIndex) { fieldNamesWithRegisterRenderIndex.Add(fields.Get(i).Name); } } switch (nodeName.Split('_')[0]) { case "ModelPoint": { ModelPointRenderForm trform = new ModelPointRenderForm(node.layer.GetGeometryRender(), fieldNamesWithRegisterRenderIndex.ToArray()); if (trform.ShowDialog() == DialogResult.OK) { node.layer.SetGeometryRender(trform.newRender); this.axRenderControl1.FeatureManager.RefreshFeatureClass(fc); } } break; case "Point": { SelectPointStyleForm selectStyleForm = new SelectPointStyleForm(); if (selectStyleForm.ShowDialog() == DialogResult.OK) { PointRenderForm trform; if (selectStyleForm.radioButtonSimplePoint.Checked) { trform = new PointRenderForm(node.layer.GetGeometryRender(), fieldNamesWithRegisterRenderIndex.ToArray(), true); } else { trform = new PointRenderForm(node.layer.GetGeometryRender(), fieldNamesWithRegisterRenderIndex.ToArray(), false); } if (trform.ShowDialog() == DialogResult.OK) { node.layer.SetGeometryRender(trform.newRender); this.axRenderControl1.FeatureManager.RefreshFeatureClass(fc); } } } break; case "Polyline": { PolylineRenderForm trform = new PolylineRenderForm(node.layer.GetGeometryRender(), fieldNamesWithRegisterRenderIndex.ToArray()); if (trform.ShowDialog() == DialogResult.OK) { node.layer.SetGeometryRender(trform.newRender); this.axRenderControl1.FeatureManager.RefreshFeatureClass(fc); } } break; case "Polygon": { PolygonRenderForm trform = new PolygonRenderForm(node.layer.GetGeometryRender(), fieldNamesWithRegisterRenderIndex.ToArray()); if (trform.ShowDialog() == DialogResult.OK) { node.layer.SetGeometryRender(trform.newRender); this.axRenderControl1.FeatureManager.RefreshFeatureClass(fc); } } break; } }
// 公共方法 void FeatureLayerVisualize(IConnectionInfo ci, bool needfly, string sourceName, ITextRender textRender, IGeometryRender geoRender) { IDataSourceFactory dsFactory = null; IDataSource ds = null; IFeatureDataSet dataset = null; try { dsFactory = new DataSourceFactory(); ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } // CreateFeautureLayer bool hasfly = !needfly; foreach (IFeatureClass fcInMap in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fcInMap]; foreach (string geoName in geoNames) { IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fcInMap, geoName, textRender, geoRender, rootId); // 设置featureLayer组可见 if (!geoRender.RenderGroupField.Equals("")) { SetGroupVisiable(dataset, featureLayer); } // 添加节点到界面控件上 myListNode item = new myListNode(string.Format("{0}_{1}_{2}", sourceName, fcInMap.Name, featureLayer.MaxVisibleDistance.ToString()), featureLayer); item.Checked = true; listView1.Items.Add(item); layerFcMap.Add(featureLayer, fcInMap); IFieldInfoCollection fieldinfos = fcInMap.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; layerEnvelopeMap.Add(featureLayer, env); if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } // 相机飞入 if (!hasfly) { angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } catch (System.Exception e) { System.Diagnostics.Trace.WriteLine(e.Message); return; } finally { if (dsFactory != null) { //Marshal.ReleaseComObject(dsFactory); dsFactory = null; } if (ds != null) { //Marshal.ReleaseComObject(ds); ds = null; } if (dataset != null) { //Marshal.ReleaseComObject(dataset); dataset = null; } //if (fc != null) //{ // //Marshal.ReleaseComObject(fc); // fc = null; //} } }
// 公共方法 void FeatureLayerVisualize(IConnectionInfo ci, bool needfly, string sourceName) { try { IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); _featureClass = fc; // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = !needfly; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } // 相机飞入 if (!hasfly) { IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\PIPE.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } this.axRenderControl1.ObjectManager.CreateFeatureLayer(fc, geoName, null, null, rootId); } } IPoint position = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); position.SetCoords(506308.31579040177, 314272.281405516, 3.2581421811509275, 0, 0); position.SpatialCRS = dataset.SpatialReference; IEulerAngle angle = new EulerAngle(); angle.Set(66.16, -14.2, 0); this.axRenderControl1.Camera.SetCamera2(position, angle, gviSetCameraFlags.gviSetCameraNoFlags); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "DynamicPipe.html"; } }
private void InitialView() { try { IRowBuffer myRow = fc.GetRow(fid); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { int iRowIndex = -1; IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } if (fieldinfo.FieldType == gviFieldType.gviFieldGeometry) { if (myRow.IsNull(i)) { iRowIndex = this.dgv_FieldValue.Rows.Add(new object[] { fieldinfo.Name, null }); continue; } IGeometry geo = myRow.GetValue(i) as IGeometry; string geoValue = null; if (geo != null) { switch (geo.GeometryType) { case gviGeometryType.gviGeometryModelPoint: geoValue = "ModelPoint"; break; case gviGeometryType.gviGeometryPoint: geoValue = "Point"; break; case gviGeometryType.gviGeometryMultiPoint: geoValue = "MultiPoint"; break; case gviGeometryType.gviGeometryPolyline: geoValue = "Polyline"; break; case gviGeometryType.gviGeometryMultiPolyline: geoValue = "MultiPolyline"; break; case gviGeometryType.gviGeometryPolygon: geoValue = "Polygon"; break; case gviGeometryType.gviGeometryMultiPolygon: geoValue = "MultiPolygon"; break; } } iRowIndex = this.dgv_FieldValue.Rows.Add(new object[] { fieldinfo.Name, geoValue }); } else if (fieldinfo.FieldType == gviFieldType.gviFieldFID) { iRowIndex = this.dgv_FieldValue.Rows.Add(new object[] { fieldinfo.Name, myRow.GetValue(i) }); } else { IDomain fieldDomain = fieldinfo.Domain; if (fieldDomain != null && fieldDomain.DomainType == gviDomainType.gviDomainCodedValue) { DataGridViewComboBoxCell comCell = new DataGridViewComboBoxCell(); comCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; comCell.Items.Clear(); comCell.Items.Add(""); Dictionary <object, string> codeValue = this.GetDomainCodeValuePair(fieldDomain); comCell.Items.AddRange(codeValue.Values.ToArray()); iRowIndex = this.dgv_FieldValue.Rows.Add(); DataGridViewRow myViewRow = this.dgv_FieldValue.Rows[iRowIndex]; myViewRow.Cells[1] = comCell; object oCodeValue = myRow.GetValue(i); if (codeValue.ContainsKey(oCodeValue)) { myViewRow.SetValues(new object[] { fieldinfo.Name, codeValue[oCodeValue] }); } else { myViewRow.SetValues(new object[] { fieldinfo.Name, oCodeValue }); } } else { iRowIndex = this.dgv_FieldValue.Rows.Add(new object[] { fieldinfo.Name, myRow.GetValue(i) }); } } this.dgv_FieldValue.Rows[iRowIndex].Tag = new EditField(fieldinfo, i); } this.dgv_FieldValue.Tag = myRow; } catch (COMException comEx) { MessageBox.Show(comEx.Message); } catch (System.Exception ex) { MessageBox.Show(ex.Message); } finally { } }
public override void Run(object sender, EventArgs e) { try { app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } this._geoFact = new GeometryFactory(); Map3DCommandManager.Push(this); DF3DFeatureClass dffc = CommonUtils.Instance().CurEditLayer; if (dffc != null) { this._facType = dffc.GetFacilityClassName(); _strGeometryFieldName = ""; if (this._facType == "PipeLine" || this._facType == "PipeNode" || this._facType == "PipeBuild" || this._facType == "PipeBuild1") { _strGeometryFieldName = "Shape"; } else { IFeatureLayer fl = dffc.GetFeatureLayer(); if (fl != null) { _strGeometryFieldName = fl.GeometryFieldName; } } if (!string.IsNullOrEmpty(_strGeometryFieldName)) { IFeatureClass fc = dffc.GetFeatureClass(); if (fc != null) { IFieldInfoCollection fiCol = fc.GetFields(); int index = fiCol.IndexOf(_strGeometryFieldName); if (index != -1) { IFieldInfo fi = fiCol.Get(index); if (fi.GeometryDef != null) { this._geoType = fi.GeometryDef.GeometryColumnType; } } } switch (this._geoType) { case gviGeometryColumnType.gviGeometryColumnModelPoint: //添加方式:1、鼠标添加;2、文件添加 FrmInsertModel dlg = new FrmInsertModel(); if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string filePath = dlg.FilePath; string ext = Path.GetExtension(filePath); if (File.Exists(filePath)) { int insertType = dlg.InsertType; if (insertType == 0 && ext.ToLower() == ".osg") { this._drawTool = DrawToolService.Instance.CreateDrawTool(DrawType._3DModel); if (this._drawTool != null) { (this._drawTool as Draw3DModel).Set3DModelFilePath(filePath); this._drawTool.OnStartDraw += new OnStartDraw(this.OnStartDraw); this._drawTool.OnFinishedDraw += new OnFinishedDraw(this.OnFinishedDraw); this._drawTool.Start(); } } else if (insertType == 1 && ext.ToLower() == ".xml") { } } } break; case gviGeometryColumnType.gviGeometryColumnPoint: if (this._facType == "PipeNode") { // 添加附属设施或者管点 } else { // 添加点 this._drawTool = DrawToolService.Instance.CreateDrawTool(DrawType.Point); if (this._drawTool != null) { this._drawTool.OnStartDraw += new OnStartDraw(this.OnStartDraw); this._drawTool.OnFinishedDraw += new OnFinishedDraw(this.OnFinishedDraw); this._drawTool.Start(); } } break; case gviGeometryColumnType.gviGeometryColumnPolyline: if (this._facType == "PipeLine" || this._facType == "PipeBuild" || this._facType == "PipeBuild1") { // 选择管线或辅助样式 } else { // 添加线 this._drawTool = DrawToolService.Instance.CreateDrawTool(DrawType.Polyline); if (this._drawTool != null) { this._drawTool.OnStartDraw += new OnStartDraw(this.OnStartDraw); this._drawTool.OnFinishedDraw += new OnFinishedDraw(this.OnFinishedDraw); this._drawTool.Start(); } } break; case gviGeometryColumnType.gviGeometryColumnPolygon: if (this._facType == "PipeBuild" || this._facType == "PipeBuild1") { // 选择管线辅助样式 } else { // 添加面 this._drawTool = DrawToolService.Instance.CreateDrawTool(DrawType.Polygon); if (this._drawTool != null) { this._drawTool.OnStartDraw += new OnStartDraw(this.OnStartDraw); this._drawTool.OnFinishedDraw += new OnFinishedDraw(this.OnFinishedDraw); this._drawTool.Start(); } } break; default: return; } } } } catch (Exception ex) { } finally { } }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\REVIT-ALL2013.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } this.axRenderControl1.ObjectManager.CreateFeatureLayer(fc, geoName, null, null, rootId); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } angle.Set(0, -20, 0); point = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); point.SpatialCRS = fc.FeatureDataSet.SpatialReference; point.SetCoords(env.Center.X, env.Center.Y, env.Center.Z, 0, 0); this.axRenderControl1.Camera.LookAt2(point, 100, angle); } hasfly = true; } } { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "Revit.html"; } }
private void treelist_AfterCheckNode(object sender, NodeEventArgs e) { this.teValue.Text = ""; this.listBoxControlValues.Items.Clear(); if (string.IsNullOrEmpty(this._sysFieldName)) { return; } IFdeCursor cursor = null; IRowBuffer row = null; try { WaitForm.Start("正在加载列表...", "请稍后"); HashSet <string> list = new HashSet <string>(); bool bBreak = false; foreach (TreeListNode node in this.treelist.GetAllCheckedNodes()) { object obj = node.GetValue("NodeObject"); if (obj != null && obj is SubClass) { SubClass sc = obj as SubClass; if (sc.Parent == null) { continue; } string cacheType = sc.Parent.Name + "_" + sc.GroupId + "_3D_" + this._sysFieldName; object objCache = CacheHelper.GetCache(cacheType); if (objCache != null && objCache is HashSet <string> ) { HashSet <string> temphs = objCache as HashSet <string>; foreach (string tempstr in temphs) { list.Add(tempstr); } continue; } HashSet <string> listsc = new HashSet <string>(); string[] arrFc3DId = sc.Parent.Fc3D.Split(';'); if (arrFc3DId == null) { continue; } foreach (string fc3DId in arrFc3DId) { DF3DFeatureClass dffc = DF3DFeatureClassManager.Instance.GetFeatureClassByID(fc3DId); if (dffc == null) { continue; } FacilityClass facClass = dffc.GetFacilityClass(); IFeatureClass fc = dffc.GetFeatureClass(); if (fc == null || facClass == null || facClass.Name != this._facType) { continue; } DFDataConfig.Class.FieldInfo fi = facClass.GetFieldInfoBySystemName(this._sysFieldName); if (fi == null) { continue; } IFieldInfoCollection fiCol = fc.GetFields(); int index = fiCol.IndexOf(fi.Name); if (index < 0) { continue; } Gvitech.CityMaker.FdeCore.FieldInfo gfi = (Gvitech.CityMaker.FdeCore.FieldInfo)fiCol.Get(index); IQueryFilter filter = new QueryFilter(); filter.SubFields = gfi.Name; filter.ResultBeginIndex = 0; filter.ResultLimit = 1; while (true) { string strTempClause = gfi.Name + " is not null and "; string fClause = strTempClause; foreach (string strtemp in listsc) { fClause += gfi.Name + " <> " + strtemp + " and "; } fClause = fClause.Substring(0, fClause.Length - 5); filter.WhereClause = "GroupId = " + sc.GroupId + " and " + fClause; cursor = fc.Search(filter, true); if ((row = cursor.NextRow()) != null) { if (row.IsNull(0)) { break; } object temp = row.GetValue(0); string strtemp = ""; switch (gfi.FieldType) { case gviFieldType.gviFieldFID: case gviFieldType.gviFieldFloat: case gviFieldType.gviFieldDouble: case gviFieldType.gviFieldInt16: case gviFieldType.gviFieldInt32: case gviFieldType.gviFieldInt64: strtemp = temp.ToString(); break; case gviFieldType.gviFieldDate: case gviFieldType.gviFieldString: case gviFieldType.gviFieldUUID: strtemp = "'" + temp.ToString() + "'"; break; case gviFieldType.gviFieldBlob: case gviFieldType.gviFieldGeometry: case gviFieldType.gviFieldUnknown: default: continue; } if (temp != null) { list.Add(strtemp); listsc.Add(strtemp); if (list.Count > 10) { bBreak = true; break;// 列举10个 } } } else { break; } } if (bBreak) { break; } } CacheHelper.SetCache(cacheType, listsc); } if (bBreak) { break; } } foreach (string str2 in list) { //if (!(string.IsNullOrEmpty(str2))) //{ this.listBoxControlValues.Items.Add(str2); //} } } catch (Exception ex) { } finally { if (cursor != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor); cursor = null; } if (row != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(row); row = null; } WaitForm.Stop(); } }
/// <summary> /// 打开FDB数据 /// </summary> /// <param name="filePath"></param> /// <returns></returns> List <IFeatureLayer> openFDB(string filePath) { Hashtable featuerClassList = new Hashtable(); #region 提取数据 //连接器 IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x;//FDB //ci.ConnectionType = gviConnectionType.gviConnectionSQLite3;//SDB ci.Password = null; ci.Database = filePath; //通过连接器打开数据源 IDataSourceFactory dsFac = new DataSourceFactory(); IDataSource ds = dsFac.OpenDataSource(ci); //查找数据源中所有的数据集 string[] featureDataSetNames = ds.GetFeatureDatasetNames(); if (featureDataSetNames.Length == 0) { Console.WriteLine("打开失败!"); return(null); } //获取数据集,一般只有一个,多个时要遍历 IFeatureDataSet dataset = ds.OpenFeatureDataset(featureDataSetNames[0]); //查找数据集中的所有要素类 string[] featureClassNames = dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (featureClassNames.Length == 0) { Console.WriteLine("没有找到要素类!"); return(null); } for (int fci = 0; fci < featureClassNames.Length; fci++) { IFeatureClass fc = dataset.OpenFeatureClass(featureClassNames[fci]); //创建一个容器,放fc的几何属性名称 List <string> geoNames = new List <string>(); //查找要素类中所有属性 IFieldInfoCollection fieldInfos = fc.GetFields(); for (int fieldi = 0; fieldi < fieldInfos.Count; fieldi++) { IFieldInfo fieldinfo = fieldInfos.Get(fieldi); if (fieldinfo == null || fieldinfo.GeometryDef == null) { continue; } geoNames.Add(fieldinfo.Name); } featuerClassList[fc] = geoNames; } #endregion List <IFeatureLayer> fls = new List <IFeatureLayer>(); #region 塞入三维对象 bool hasfly = false; foreach (IFeatureClass fc in featuerClassList.Keys) { List <string> geoNames = (List <string>)featuerClassList[fc]; foreach (string geoName in geoNames) { if (geoName.Equals("Geometry")) { IFeatureLayer fl = axRenderControl.ObjectManager.CreateFeatureLayer(fc, geoName, null, null, Guid.Empty); if (fl != null) { fls.Add(fl); } } //jump once! if (!hasfly) { IFieldInfoCollection fieldInfos = fc.GetFields(); IFieldInfo fieldinfo = fieldInfos.Get(fieldInfos.IndexOf(geoName)); IGeometryDef gd = fieldinfo.GeometryDef; IEnvelope enve = gd.Envelope; if (enve != null) { axRenderControl.Camera.LookAtEnvelope(enve); hasfly = true; } } } } #endregion return(fls); }