Example #1
0
 private bool ImportOsg(string modelName, string filePath)
 {
     try
     {
         IImage       property = null;
         IMatrix      mat      = null;
         IPropertySet images   = null;
         IModel       smodel   = null;
         IModel       fmodel   = null;
         bool         bRes     = this.OpenOsgModel(filePath, out fmodel, out smodel, out images, out mat);
         if (!bRes)
         {
             return(false);
         }
         DF3DFeatureClass dffc = CommonUtils.Instance().CurEditLayer;
         if (dffc != null)
         {
             IFeatureClass fc = dffc.GetFeatureClass();
             if (fc != null)
             {
                 IResourceManager resManager = fc.FeatureDataSet as IResourceManager;
                 if ((images != null) && (images.Count > 0))
                 {
                     foreach (string str in images.GetAllKeys())
                     {
                         if (!resManager.ImageExist(str))
                         {
                             property = images.GetProperty(str) as IImage;
                             bRes     = resManager.AddImage(str, property);
                             if (!bRes)
                             {
                                 return(false);
                             }
                         }
                     }
                 }
                 bRes = resManager.AddModel(modelName, fmodel, smodel);
                 if (!bRes)
                 {
                     return(false);
                 }
             }
         }
         return(true);
     }
     catch (Exception ex)
     {
         return(false);
     }
 }
Example #2
0
        public void ImportModelMdb(IFeatureClass fc, string mdbFile, int groupId)
        {
            try
            {
                //2、获取基本信息
                FileInfo fInfo       = new FileInfo(mdbFile);
                string   strFilePath = fInfo.DirectoryName;

                Gvitech.CityMaker.Resource.IResourceFactory rf = new Gvitech.CityMaker.Resource.ResourceFactory();
                IResourceManager rm = fc.FeatureDataSet as IResourceManager;
                Dictionary <string, IEnvelope> cacheModeInfos = new Dictionary <string, IEnvelope>();
                List <string> cacheImageNames = new List <string>();

                IGeometryFactory geoFactory = new GeometryFactory();
                IResourceFactory symbolFac  = new ResourceFactory();

                IRowBufferCollection fcRows = new RowBufferCollection();
                IRowBuffer           fcRow  = null;

                //4、解析mdb
                string strConn    = _ConnStr + mdbFile + "\'";
                int    index      = 0;
                int    totalCount = 0;
                using (OleDbConnection oleConn = new OleDbConnection(strConn))
                {
                    oleConn.Open();
                    string          strSql      = "select count(*)  from Attribute_Table_CityManager";
                    OleDbCommand    countCmd    = new OleDbCommand(strSql, oleConn);
                    OleDbDataReader countReader = countCmd.ExecuteReader();
                    countReader.Read();
                    totalCount = countReader.GetInt32(0);
                    countReader.Close();

                    OleDbCommand    command   = new OleDbCommand(_QueryModelStr, oleConn);
                    OleDbDataReader reader    = command.ExecuteReader();
                    IModelPoint     modePoint = null;
                    while (reader.Read())
                    {
                        int    percent = ++index * 100 / totalCount;
                        string toolTip = string.Format("已完成{0}条/总共{1}条 {2}%", index, totalCount, percent);
                        CommonEntity.FormEntity.Text = toolTip;

                        double dScaleX = 0.0;
                        double dScaleY = 0.0;
                        double dScaleZ = 0.0;

                        double.TryParse(reader.GetString(9), out dScaleX);
                        double.TryParse(reader.GetString(10), out dScaleY);
                        double.TryParse(reader.GetString(11), out dScaleZ);

                        //if (dScaleX < 0 || dScaleY < 0 || dScaleZ < 0)
                        //    continue;

                        //fc
                        fcRow = fc.CreateRowBuffer();
                        int nPose = fcRow.FieldIndex("name");
                        if (nPose == -1)
                        {
                            continue;
                        }
                        string modelName = reader.GetString(0);
                        fcRow.SetValue(nPose, modelName);

                        nPose = fcRow.FieldIndex("groupId");
                        if (nPose == -1)
                        {
                            continue;
                        }
                        fcRow.SetValue(nPose, groupId);

                        modePoint = (IModelPoint)geoFactory.CreateGeometry(
                            gviGeometryType.gviGeometryModelPoint,
                            gviVertexAttribute.gviVertexAttributeZ);
                        modePoint.ModelName = modelName;

                        double dModePointX = double.Parse(reader.GetString(2)) + 0;  // CoorX = 0
                        double dModePointY = double.Parse(reader.GetString(3)) + 0;  // CoorY = 0
                        double dModePointZ = double.Parse(reader.GetString(4)) + 0;  // CoorZ = 0

                        double dRotationAngle = double.Parse(reader.GetString(5));
                        double dAxisX         = double.Parse(reader.GetString(6));
                        double dAxisY         = double.Parse(reader.GetString(7));
                        double dAxisZ         = double.Parse(reader.GetString(8));

                        double dUTransAngel = double.Parse(reader.GetString(12));
                        double dUTransX     = double.Parse(reader.GetString(13));
                        double dUTransY     = double.Parse(reader.GetString(14));
                        double dUTransZ     = double.Parse(reader.GetString(15));

                        modePoint.X = dModePointX;
                        modePoint.Y = dModePointY;
                        modePoint.Z = dModePointZ;

                        IMatrix matrix = new Matrix();

                        IVector3 pointVec = new Vector3();
                        pointVec.X = dModePointX;
                        pointVec.Y = dModePointY;
                        pointVec.Z = dModePointZ;

                        IVector3 Scale = new Vector3();
                        Scale.X = dScaleX;
                        Scale.Y = dScaleY;
                        Scale.Z = dScaleZ;

                        IVector3 Rotation = new Vector3();
                        Rotation.X = dAxisX;
                        Rotation.Y = dAxisY;
                        Rotation.Z = dAxisZ;

                        IVector3 Shear = new Vector3();
                        Shear.X = dUTransX;
                        Shear.Y = dUTransY;
                        Shear.Z = dUTransZ;

                        matrix.Compose2(pointVec, Scale, dRotationAngle, Rotation, dUTransAngel, Shear);
                        modePoint.FromMatrix(matrix);

                        //mc
                        IPropertySet Images = null;

                        //如果内存中不包含
                        if (!cacheModeInfos.Keys.Contains(modelName))
                        {
                            //数据库中包含
                            if (rm.ModelExist(modelName))
                            {
                                //重名即跳过
                                IEnvelope ev = rm.GetModel(modelName).Envelope;
                                modePoint.ModelEnvelope = ev;
                            }
                            else
                            {
                                IModel  simpleModel = null;
                                string  osgFilePath = strFilePath + "\\" + modelName + ".osg";
                                IModel  fineModel   = null;
                                IMatrix m           = null;
                                symbolFac.CreateModelAndImageFromFileEx(osgFilePath,
                                                                        out Images, out simpleModel, out fineModel, out m);
                                if (fineModel == null || fineModel.GroupCount == 0)
                                {
                                    continue;
                                }

                                cacheModeInfos[modelName] = modePoint.ModelEnvelope = Clone(fineModel.Envelope);

                                rm.AddModel(modelName, fineModel, simpleModel);
                            }
                        }
                        else
                        {
                            modePoint.ModelEnvelope = cacheModeInfos[modelName];
                        }

                        nPose = fcRow.FieldIndex("Geometry");
                        fcRow.SetValue(nPose, modePoint);
                        fcRows.Add(fcRow);

                        //tc
                        if (Images != null)
                        {
                            int nCount = Images.Count;
                            if (nCount > 0)
                            {
                                Hashtable htImages = Images.AsHashtable();
                                foreach (DictionaryEntry item in htImages)
                                {
                                    string imgName = item.Key.ToString();
                                    IImage img     = item.Value as IImage;
                                    if (img == null)
                                    {
                                        continue;
                                    }
                                    if (string.IsNullOrEmpty(imgName))
                                    {
                                        continue;
                                    }

                                    //如果内存中不包含
                                    if (!cacheImageNames.Contains(imgName))
                                    {
                                        //数据库中包含
                                        if (rm.ImageExist(imgName))
                                        {
                                            //重名即跳过
                                        }
                                    }

                                    //如果内存中不包含,数据库中也不包含
                                    if (!rm.ImageExist(imgName) &&
                                        !cacheImageNames.Contains(imgName))
                                    {
                                        cacheImageNames.Add(imgName);
                                        rm.AddImage(imgName, img);
                                    }
                                }
                            }
                        }
                        //end

                        if (fcRows.Count >= 10)
                        {
                            InsertFeatures(fc as IObjectClass, fcRows);
                            fcRows.Clear();
                        }
                    }
                    reader.Close();
                    oleConn.Close();
                }

                if (fcRows.Count > 0)
                {
                    InsertFeatures(fc as IObjectClass, fcRows);
                    fcRows.Clear();
                }
            }
            catch (System.Exception ex)
            {
                if (ex.GetType().Name.Equals("UnauthorizedAccessException"))
                {
                    MessageBox.Show("需要标准runtime授权");
                }
                else
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
Example #3
0
        public void ImportModelXml(IFeatureClass fc, string mdbFile, int groupId, int _nCount)
        {
            try
            {
                //2、获取基本信息
                FileInfo         fInfo       = new FileInfo(mdbFile);
                string           strFilePath = fInfo.DirectoryName;
                IResourceManager rm          = fc.FeatureDataSet as IResourceManager;
                Dictionary <string, IEnvelope> cacheModeInfos = new Dictionary <string, IEnvelope>();
                List <string> cacheImageNames = new List <string>();

                IGeometryFactory geoFactory = new GeometryFactory();
                IResourceFactory symbolFac  = new ResourceFactory();

                IRowBufferCollection fcRows = new RowBufferCollection();
                IRowBuffer           fcRow  = null;

                //4、解析xml
                string      strConn    = "" + mdbFile + "\'";
                int         index      = 0;
                int         totalCount = _nCount;
                IModelPoint modePoint  = null;
                for (int i = 0; i < _nCount; ++i)
                {
                    int    percent = ++index * 100 / totalCount;
                    string toolTip = string.Format("已完成{0}条/总共{1}条 {2}%", index, totalCount, percent);
                    CommonEntity.FormEntity.Text = toolTip;

                    //fc
                    fcRow = fc.CreateRowBuffer();
                    int nPose = fcRow.FieldIndex("name");
                    if (nPose == -1)
                    {
                        continue;
                    }
                    string modelName = _dataTable.Rows[i]["ModelName"].ToString();
                    fcRow.SetValue(nPose, modelName);

                    nPose = fcRow.FieldIndex("groupId");
                    if (nPose == -1)
                    {
                        continue;
                    }
                    fcRow.SetValue(nPose, groupId);

                    modePoint = (IModelPoint)geoFactory.CreateGeometry(
                        gviGeometryType.gviGeometryModelPoint,
                        gviVertexAttribute.gviVertexAttributeZ);
                    modePoint.ModelName = modelName;

                    double dModePointX = double.Parse(_dataTable.Rows[i]["LocationX"].ToString()) + 0;  // CoorX = 0
                    double dModePointY = double.Parse(_dataTable.Rows[i]["LocationY"].ToString()) + 0;  // CoorY = 0
                    double dModePointZ = double.Parse(_dataTable.Rows[i]["LocationZ"].ToString()) + 0;  // CoorZ = 0

                    string  strMatrix = _dataTable.Rows[i]["Matrix3"].ToString();
                    float[] Matrix    = null;
                    if (!string.IsNullOrEmpty(strMatrix))
                    {
                        string[] strArray = strMatrix.Split(',');
                        if (strArray.Length == 9)
                        {
                            Matrix    = new float[9];
                            Matrix[0] = float.Parse(strArray[0]);
                            Matrix[1] = float.Parse(strArray[1]);
                            Matrix[2] = float.Parse(strArray[2]);
                            Matrix[3] = float.Parse(strArray[3]);
                            Matrix[4] = float.Parse(strArray[4]);
                            Matrix[5] = float.Parse(strArray[5]);
                            Matrix[6] = float.Parse(strArray[6]);
                            Matrix[7] = float.Parse(strArray[7]);
                            Matrix[8] = float.Parse(strArray[8]);
                        }
                    }
                    modePoint.X        = dModePointX;
                    modePoint.Y        = dModePointY;
                    modePoint.Z        = dModePointZ;
                    modePoint.Matrix33 = Matrix;


                    //mc
                    IPropertySet Images = null;

                    //如果内存中不包含
                    if (!cacheModeInfos.Keys.Contains(modelName))
                    {
                        //数据库中包含
                        if (rm.ModelExist(modelName))
                        {
                            //重名即跳过
                            IEnvelope ev = rm.GetModel(modelName).Envelope;
                            modePoint.ModelEnvelope = ev;
                        }
                        else
                        {
                            IModel  simpleModel = null;
                            string  osgFilePath = strFilePath + "\\" + modelName + ".osg";
                            IModel  fineModel   = null;
                            IMatrix matrix      = null;
                            symbolFac.CreateModelAndImageFromFileEx(osgFilePath,
                                                                    out Images, out simpleModel, out fineModel, out matrix);
                            if (fineModel == null || fineModel.GroupCount == 0)
                            {
                                continue;
                            }

                            cacheModeInfos[modelName] = modePoint.ModelEnvelope = Clone(fineModel.Envelope);

                            rm.AddModel(modelName, fineModel, simpleModel);
                            //Marshal.ReleaseComObject(simpleModel);
                            //Marshal.ReleaseComObject(fineModel);
                        }
                    }
                    else
                    {
                        modePoint.ModelEnvelope = cacheModeInfos[modelName];
                    }

                    nPose = fcRow.FieldIndex("Geometry");
                    fcRow.SetValue(nPose, modePoint);
                    fcRows.Add(fcRow);

                    //tc
                    int nCount = Images.Count;
                    if (Images != null && nCount > 0)
                    {
                        Hashtable htImages = Images.AsHashtable();
                        foreach (DictionaryEntry item in htImages)
                        {
                            string imgName = item.Key.ToString();
                            IImage img     = item.Value as IImage;
                            if (img == null)
                            {
                                continue;
                            }
                            if (string.IsNullOrEmpty(imgName))
                            {
                                continue;
                            }

                            //如果内存中不包含
                            if (!cacheImageNames.Contains(imgName))
                            {
                                //数据库中包含
                                if (rm.ImageExist(imgName))
                                {
                                    //重名即跳过
                                }
                            }

                            //如果内存中不包含,数据库中也不包含
                            if (!rm.ImageExist(imgName) &&
                                !cacheImageNames.Contains(imgName))
                            {
                                cacheImageNames.Add(imgName);

                                rm.AddImage(imgName, img);
                            }
                        }
                    }
                    //end

                    if (fcRows.Count >= 10)
                    {
                        InsertFeatures(fc as IObjectClass, fcRows);
                        fcRows.Clear();
                    }
                }
                if (fcRows.Count > 0)
                {
                    InsertFeatures(fc as IObjectClass, fcRows);
                    fcRows.Clear();
                }
            }
            catch (System.Exception ex)
            {
                if (ex.GetType().Name.Equals("UnauthorizedAccessException"))
                {
                    MessageBox.Show("需要标准runtime授权");
                }
                else
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
Example #4
0
        public bool ShowFlowDirection(int flowDir, out IRenderModelPoint rpt)
        {
            rpt = null;
            if (base._rowInfo == null)
            {
                return(false);
            }

            string str = Application.StartupPath + @"\..\Resource\Images\FlowDirection";

            if (!Directory.Exists(str))
            {
                return(false);
            }
            IImage _imgFlowImg = DrawGeometry.resFactory.CreateImageFromFile(str);

            _imgFlowImg.FrameInterval = 50;

            IPolyline        path        = null;
            IPipeSection     pipeSection = null;
            string           name        = "FlowDirection";
            IDrawDynamicFlow flow        = null;
            IModelPoint      mp          = null;

            try
            {
                IModel    model;
                IModel    model2;
                IPoint    pointValue = null;
                IPolyline polyline2  = null;
                polyline2 = base._geoGroup[1] as IPolyline;
                if ((polyline2 == null) || (polyline2.PointCount < 2))
                {
                    return(false);
                }
                path = polyline2.Clone() as IPolyline;
                for (int i = 0; i < path.PointCount; i++)
                {
                    pointValue = path.GetPoint(i);
                    if (pointValue != null)
                    {
                        pointValue.Z += this.OffsetZ;
                        path.UpdatePoint(i, pointValue);
                    }
                }

                pipeSection = new PipeSection(this._dia1, this._dia2, HorizontalPos.Center, VerticalPos.Center, 0.02, 0);

                flow = ParamModelFactory.Instance.CreateGeometryDraw(ModelType.DynamicFlow, Guid.NewGuid().ToString()) as IDrawDynamicFlow;
                flow.SetParameter(pipeSection, path, flowDir);
                flow.SetTextureRender(new string[] { name });
                if (!flow.Draw(out mp, out model, out model2))
                {
                    return(false);
                }

                #region 需要runtime授权
                IFeatureDataSet  iFeatureDataSet = DF3DPipeCreateApp.App.TempLib.OpenFeatureDataset("FeatureDataSet");
                IResourceManager manager         = iFeatureDataSet as IResourceManager;
                if (!manager.ModelExist(mp.ModelName))
                {
                    manager.AddModel(mp.ModelName, model, null);
                }
                if (!manager.ImageExist(name))
                {
                    manager.AddImage(name, _imgFlowImg);
                }
                #endregion

                IModelPointSymbol symbol = new ModelPointSymbolClass();
                symbol.SetResourceDataSet(iFeatureDataSet);
                symbol.Color       = uint.MaxValue;
                symbol.EnableColor = true;
                mp.ModelEnvelope   = model.Envelope;
                rpt = DrawGeometry.Ocx.ObjectManager.CreateRenderModelPoint(mp, symbol, DrawGeometry.Ocx.ProjectTree.RootID);

                return(true);
            }
            catch (Exception exception)
            {
                return(false);
            }
        }
Example #5
0
        public bool CopyModelAndImage(MyProgressBar bar, IFeatureDataSet srcFds, IFeatureDataSet tarFds)
        {
            bool flag = true;
            int  num  = 1;

            try
            {
                tarFds.DataSource.StartEditing();
                IResourceManager resourceManager  = srcFds as IResourceManager;
                IResourceManager resourceManager2 = tarFds as IResourceManager;
                EnumResName      modelNames       = resourceManager.GetModelNames();
                int modelCount = resourceManager.GetModelCount();
                while (modelNames.MoveNext())
                {
                    if (num % 100 == 0 || num == modelCount)
                    {
                        lock (bar)
                        {
                            if (bar.CallbackCancel)
                            {
                                bar.labelTooltip.Text = StringParser.Parse("${res:View_Cancling}");
                                bool result = false;
                                return(result);
                            }
                        }
                    }
                    string current = modelNames.Current;
                    Gvitech.CityMaker.Resource.IModel model           = resourceManager.GetModel(current);
                    Gvitech.CityMaker.Resource.IModel simplifiedModel = resourceManager.GetSimplifiedModel(current);
                    if (!resourceManager2.ModelExist(current))
                    {
                        resourceManager2.AddModel(current, model, simplifiedModel);
                        LoggingService.Debug(string.Format("Copy model:{0}", current));
                    }
                    num++;
                }
                System.Runtime.InteropServices.Marshal.ReleaseComObject(modelNames);
                EnumResName imageNames = resourceManager.GetImageNames();
                num = 1;
                resourceManager.GetImageCount();
                while (imageNames.MoveNext())
                {
                    if (num % 100 == 0 || num == modelCount)
                    {
                        lock (bar)
                        {
                            if (bar.CallbackCancel)
                            {
                                bar.labelTooltip.Text = StringParser.Parse("${res:View_Cancling}");
                                bool result = false;
                                return(result);
                            }
                        }
                    }
                    string current2 = imageNames.Current;
                    IImage image    = resourceManager.GetImage(current2);
                    if (image != null && !resourceManager2.ImageExist(current2))
                    {
                        resourceManager2.AddImage(current2, image);
                        LoggingService.Debug(string.Format("Copy model:{0}", current2));
                    }
                    num++;
                }
                System.Runtime.InteropServices.Marshal.ReleaseComObject(imageNames);
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                flag = false;
            }
            catch (System.Exception ex2)
            {
                XtraMessageBox.Show(ex2.Message);
                flag = false;
            }
            finally
            {
                tarFds.DataSource.StopEditing(flag);
            }
            return(flag);
        }
Example #6
0
        private IEnvelope ImportOsg(IFeatureClass fc, string filePath)
        {
            try
            {
                IEnvelope env = null;

                if (fc == null || !File.Exists(filePath))
                {
                    return(env);
                }

                string           modelName       = Path.GetFileNameWithoutExtension(filePath);
                IResourceManager resourceManager = fc.FeatureDataSet as IResourceManager;
                if (resourceManager == null)
                {
                    return(env);
                }
                if (!resourceManager.CheckResourceName(modelName))
                {
                    return(env);
                }
                IResourceFactory resourceFactory = new ResourceFactory();

                System.Collections.Generic.Dictionary <string, IEnvelope> modelInfos = this.GetModelInfos(resourceManager, modelName);
                fc.FeatureDataSet.DataSource.StartEditing();
                if (modelInfos.Keys.Contains(modelName))
                {
                    if (!sameNameDlg.IsApplicatonAll)//非应用于全部
                    {
                        string tipMessage = string.Format("{0}模型已经存在!", modelName);
                        sameNameDlg.TipMessage = tipMessage;
                        sameNameDlg.ShowDialog();
                    }
                    if (sameNameDlg.IsOverWriter)//如果覆盖就先删除
                    {
                        resourceManager.DeleteModel(modelName);
                        modelInfos.Remove(modelName);
                    }
                    else
                    {
                        env = modelInfos[modelName];
                    }
                }
                if (!modelInfos.Keys.Contains(modelName))
                {
                    Gvitech.CityMaker.Resource.IModel simplifiedModel = null;
                    Gvitech.CityMaker.Resource.IModel model           = null;
                    IMatrix      matrix = null;
                    IPropertySet propertySet;
                    resourceFactory.CreateModelAndImageFromFileEx(filePath, out propertySet, out simplifiedModel, out model, out matrix);
                    if (model == null || model.GroupCount == 0)
                    {
                        return(env);
                    }
                    if (!resourceManager.AddModel(modelName, model, simplifiedModel))
                    {
                        return(env);                                                             //向资源中添加
                    }
                    modelInfos[modelName] = model.Envelope;
                    env = modelInfos[modelName];

                    if (propertySet != null && propertySet.Count > 0)
                    {
                        //获得资源的图片
                        System.Collections.Generic.List <string> imageNames = GetImageNames(resourceManager);
                        string[] allKeys = propertySet.GetAllKeys();
                        string[] array   = allKeys;
                        for (int i = 0; i < array.Length; i++)
                        {
                            string text2 = array[i];
                            if (imageNames.Contains(text2))
                            {
                                if (!sameNameDlg.IsApplicatonAll)//非应用于全部
                                {
                                    string tipMessage2 = string.Format("{0}贴图已存在!", text2);
                                    sameNameDlg.TipMessage = tipMessage2;
                                    sameNameDlg.ShowDialog();
                                }
                                if (sameNameDlg.IsOverWriter)//是否覆盖
                                {
                                    resourceManager.DeleteImage(text2);
                                    imageNames.Remove(text2);
                                }
                            }

                            if (!imageNames.Contains(text2))
                            {
                                if (!resourceManager.CheckResourceName(text2))
                                {
                                }
                                else
                                {
                                    imageNames.Add(text2);
                                    Gvitech.CityMaker.Resource.IImage image = propertySet.GetProperty(text2) as Gvitech.CityMaker.Resource.IImage;
                                    resourceManager.AddImage(text2, image);
                                }
                            }
                        }
                    }
                }
                fc.FeatureDataSet.DataSource.StopEditing(true);
                return(env);
            }
            catch (Exception ex)
            {
                fc.FeatureDataSet.DataSource.StopEditing(false);
                return(null);
            }
        }
Example #7
0
        public void ImportModelOsg(IFeatureClass fc, string osgFile, int groupId)
        {
            try
            {
                FileInfo         fInfo       = new FileInfo(osgFile);
                string           strFilePath = fInfo.DirectoryName;
                IResourceManager rm          = fc.FeatureDataSet as IResourceManager;
                IGeometryFactory geoFactory  = new GeometryFactory();
                IResourceFactory symbolFac   = new ResourceFactory();
                IRowBuffer       fcRow       = null;

                //fc
                string modelName = fInfo.Name.Split('.')[0];
                fcRow = fc.CreateRowBuffer();
                int nPose = fcRow.FieldIndex("name");
                if (nPose != -1)
                {
                    fcRow.SetValue(nPose, modelName);
                }
                nPose = fcRow.FieldIndex("groupId");
                if (nPose != -1)
                {
                    fcRow.SetValue(nPose, groupId);
                }

                //mc
                IPropertySet Images      = null;
                IModel       simpleModel = null;
                string       osgFilePath = strFilePath + "\\" + modelName + ".osg";
                IModel       fineModel   = null;
                IMatrix      matrix      = null;
                symbolFac.CreateModelAndImageFromFileEx(osgFilePath,
                                                        out Images, out simpleModel, out fineModel, out matrix);
                if (fineModel == null || fineModel.GroupCount == 0)
                {
                    return;
                }
                rm.AddModel(modelName, fineModel, simpleModel);
                //Marshal.ReleaseComObject(simpleModel);
                //Marshal.ReleaseComObject(fineModel);

                //tc
                int nCount = Images.Count;
                if (Images != null && nCount > 0)
                {
                    Hashtable htImages = Images.AsHashtable();
                    foreach (DictionaryEntry item in htImages)
                    {
                        String imgName = item.Key.ToString();
                        IImage img     = item.Value as IImage;
                        rm.AddImage(imgName, img);
                    }
                }

                //modelpoint
                IModelPoint modePoint = null;
                modePoint = (IModelPoint)geoFactory.CreateGeometry(
                    gviGeometryType.gviGeometryModelPoint,
                    gviVertexAttribute.gviVertexAttributeZ);
                modePoint.FromMatrix(matrix);
                modePoint.ModelName = modelName;
                double dModePointX = 0.0;
                double dModePointY = 0.0;
                double dModePointZ = 0.0;
                modePoint.X += dModePointX;
                modePoint.Y += dModePointY;
                modePoint.Z += dModePointZ;
                nPose        = fcRow.FieldIndex("Geometry");
                fcRow.SetValue(nPose, modePoint);

                if (fc.HasTemporal())
                {
                    ITemporalManager mgr = fc.TemporalManager;
                    mgr.Insert(DateTime.Now, fcRow);
                    //Marshal.ReleaseComObject(mgr);
                }
                else
                {
                    IRowBufferCollection fcRows = new RowBufferCollection();
                    fcRows.Add(fcRow);
                    InsertFeatures(fc as IObjectClass, fcRows);
                    fcRows.Clear();
                }
            }
            catch (System.Exception ex)
            {
                if (ex.GetType().Name.Equals("UnauthorizedAccessException"))
                {
                    MessageBox.Show("需要标准runtime授权");
                }
                else
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }