示例#1
0
 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;
     }
 }
示例#2
0
        /// <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;
                    }
                }
            }
        }
示例#3
0
        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;
            }
        }
示例#4
0
文件: MainForm.cs 项目: batuZ/Samples
        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();
                }
            }
        }
示例#5
0
        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;
                }
            }
        }
示例#6
0
文件: MainForm.cs 项目: batuZ/Samples
        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;
                }
            }
        }
示例#7
0
        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;
                }
            }
        }
示例#8
0
        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;
            }
        }
示例#9
0
        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错误");
            }
        }
示例#10
0
        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;
            }
        }
示例#11
0
        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);
            }
        }
示例#13
0
 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;
 }
示例#14
0
        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)"
                }
            }
        }
示例#15
0
        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;
                }
            }
        }
示例#16
0
        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));
                }
            }
        }
示例#17
0
 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);
 }
示例#18
0
        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);
            }
        }
示例#20
0
        /// <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;
        }
示例#21
0
文件: MainForm.cs 项目: batuZ/Samples
        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";
            }
        }
示例#22
0
        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;
            }
        }
示例#23
0
        // 公共方法
        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;
                //}
            }
        }
示例#24
0
        // 公共方法
        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;
                }
            }
        }
示例#25
0
        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";
            }
        }
示例#26
0
        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
            {
            }
        }
示例#27
0
        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
            {
            }
        }
示例#28
0
文件: MainForm.cs 项目: batuZ/Samples
        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";
            }
        }
示例#29
0
        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();
            }
        }
示例#30
0
        /// <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);
        }