예제 #1
0
        private FacStyleClass GetFacStyleByID(string styleId)
        {
            if (DF3DPipeCreateApp.App.TemplateLib == null)
            {
                return(null);
            }
            IFdeCursor cursor = null;
            IRowBuffer row    = null;

            try
            {
                IFeatureDataSet fds = DF3DPipeCreateApp.App.TemplateLib.OpenFeatureDataset("DataSet_BIZ");
                if (fds == null)
                {
                    return(null);
                }
                IObjectClass oc = fds.OpenObjectClass("OC_FacilityStyle");
                if (oc == null)
                {
                    return(null);
                }

                IQueryFilter filter = new QueryFilterClass
                {
                    WhereClause = string.Format("ObjectId = '{0}'", styleId)
                };
                cursor = oc.Search(filter, true);
                List <FacStyleClass> list = new List <FacStyleClass>();
                while ((row = cursor.NextRow()) != null)
                {
                    StyleType     type;
                    FacStyleClass fs = null;
                    if (row.FieldIndex("StyleType") >= 0 && Enum.TryParse <StyleType>(row.GetValue(row.FieldIndex("StyleType")).ToString(), out type))
                    {
                        Dictionary <string, string> dictionary = null;
                        if (row.FieldIndex("StyleInfo") >= 0)
                        {
                            object obj = row.GetValue(row.FieldIndex("StyleInfo"));
                            if (obj != null)
                            {
                                IBinaryBuffer buffer2 = row.GetValue(row.FieldIndex("StyleInfo")) as IBinaryBuffer;
                                if (buffer2 != null)
                                {
                                    dictionary = JsonTool.JsonToObject <Dictionary <string, string> >(Encoding.UTF8.GetString(buffer2.AsByteArray()));
                                }
                            }
                        }
                        switch (type)
                        {
                        case StyleType.PipeNodeStyle:
                            fs = new PipeNodeStyleClass(dictionary);
                            break;

                        case StyleType.PipeLineStyle:
                            fs = new PipeLineStyleClass(dictionary);
                            break;

                        case StyleType.PipeBuildStyle:
                            fs = new PipeBuildStyleClass(dictionary);
                            break;
                        }
                    }
                    if (fs == null)
                    {
                        continue;
                    }
                    if (row.FieldIndex("oid") >= 0)
                    {
                        object obj = row.GetValue(row.FieldIndex("oid"));
                        if (obj != null)
                        {
                            fs.Id = int.Parse(obj.ToString());
                        }
                    }
                    if (row.FieldIndex("ObjectId") >= 0)
                    {
                        object obj = row.GetValue(row.FieldIndex("ObjectId"));
                        if (obj != null)
                        {
                            fs.ObjectId = obj.ToString();
                        }
                    }
                    if (row.FieldIndex("FacClassCode") >= 0)
                    {
                        object obj = row.GetValue(row.FieldIndex("FacClassCode"));
                        if (obj != null)
                        {
                            fs.FacClassCode = obj.ToString();
                        }
                    }
                    if (row.FieldIndex("Name") >= 0)
                    {
                        object obj = row.GetValue(row.FieldIndex("Name"));
                        if (obj != null)
                        {
                            fs.Name = obj.ToString();
                        }
                    }
                    int index = row.FieldIndex("Thumbnail");
                    if (index != -1 && !row.IsNull(index))
                    {
                        IBinaryBuffer b = row.GetValue(index) as IBinaryBuffer;
                        if (row != null)
                        {
                            MemoryStream stream = new MemoryStream(b.AsByteArray());
                            fs.Thumbnail = Image.FromStream(stream);
                        }
                    }
                    return(fs);
                }
                return(null);
            }
            catch (Exception exception)
            {
                return(null);
            }
            finally
            {
                if (cursor != null)
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor);
                    cursor = null;
                }
                if (row != null)
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(row);
                    row = null;
                }
            }
        }
예제 #2
0
        public override void Init()
        {
            try
            {
                base.Init();

                FacilityClass fac = this._facClassReg.FacilityType;
                if (fac == null)
                {
                    return;
                }
                #region 设置管径
                bool bHaveDia1 = false;
                bool bHaveDia2 = false;
                bool bHaveDia  = false;
                DFDataConfig.Class.FieldInfo fiDiameter1 = fac.GetFieldInfoBySystemName("Diameter1");
                if (fiDiameter1 != null)
                {
                    int indexDiameter1 = this._rowInfo.FieldIndex(fiDiameter1.Name);
                    if (indexDiameter1 != -1)
                    {
                        string diaInfo1 = "";
                        if (!this._rowInfo.IsNull(indexDiameter1) && !string.IsNullOrEmpty(diaInfo1 = this._rowInfo.GetValue(indexDiameter1).ToString()))
                        {
                            this._dia1 = double.Parse(diaInfo1) * 0.001;
                            bHaveDia1  = true;
                        }
                    }
                }
                DFDataConfig.Class.FieldInfo fiDiameter2 = fac.GetFieldInfoBySystemName("Diameter2");
                if (fiDiameter2 != null)
                {
                    int indexDiameter2 = this._rowInfo.FieldIndex(fiDiameter2.Name);
                    if (indexDiameter2 != -1)
                    {
                        string diaInfo2 = "";
                        if (!this._rowInfo.IsNull(indexDiameter2) && !string.IsNullOrEmpty(diaInfo2 = this._rowInfo.GetValue(indexDiameter2).ToString()))
                        {
                            this._dia2 = double.Parse(diaInfo2) * 0.001;
                            bHaveDia2  = true;
                        }
                    }
                }
                if (bHaveDia1 && bHaveDia2)
                {
                    bHaveDia = true;
                }
                else
                {
                    DFDataConfig.Class.FieldInfo fiDiameter = fac.GetFieldInfoBySystemName("Diameter");
                    if (fiDiameter != null)
                    {
                        int indexDiameter = this._rowInfo.FieldIndex(fiDiameter.Name);
                        if (indexDiameter != -1)
                        {
                            string diaInfo    = "";
                            string coverstyle = "";
                            if (!this._rowInfo.IsNull(indexDiameter) && !string.IsNullOrEmpty(diaInfo = this._rowInfo.GetValue(indexDiameter).ToString()))
                            {
                                DFDataConfig.Class.FieldInfo fiCoverStyle = fac.GetFieldInfoBySystemName("CoverStyle");
                                if (fiCoverStyle != null)
                                {
                                    int indexCoverStyle = this._rowInfo.FieldIndex(fiCoverStyle.Name);
                                    if (indexCoverStyle != -1 && !this._rowInfo.IsNull(indexCoverStyle))
                                    {
                                        coverstyle = this._rowInfo.GetValue(indexCoverStyle).ToString();
                                    }
                                }
                                SplitDiameter(diaInfo, coverstyle, out this._dia1, out this._dia2);
                                if (this._rowInfo.FieldIndex(fiDiameter.Name + "1") != -1)
                                {
                                    this._rowInfo.SetValue(this._rowInfo.FieldIndex(fiDiameter.Name + "1"), this._dia1);
                                }
                                if (this._rowInfo.FieldIndex(fiDiameter.Name + "2") != -1)
                                {
                                    this._rowInfo.SetValue(this._rowInfo.FieldIndex(fiDiameter.Name + "2"), this._dia1);
                                }
                                bHaveDia    = true;
                                this._dia1 *= 0.001;
                                this._dia2 *= 0.001;
                            }
                        }
                    }
                }
                if (!bHaveDia || (this._dia1 < 0.000001 && this._dia2 < 0.000001))
                {
                    this._dia1 = 0.05;
                    this._dia2 = 0.0;
                }
                this._segtype = GetSegType(this._dia1, this._dia2);
                #endregion

                // 设置管线对象二维Shape数据-顶点坐标\高程信息
                IPolyline route = null;
                if ((this._style != null) && (this._style is PipeLineStyleClass))
                {
                    PipeLineStyleClass style = this._style as PipeLineStyleClass;
                    switch (style.HeightParam)
                    {
                    case HeightParam.PipeHeight:
                        DFDataConfig.Class.FieldInfo fiStartHeight = fac.GetFieldInfoBySystemName("StartHeight");
                        if (fiStartHeight != null)
                        {
                            int indexStartHeight = this._rowInfo.FieldIndex(fiStartHeight.Name);
                            if (indexStartHeight != -1)
                            {
                                this._sheight = Fac.GetDouble(base._rowInfo, indexStartHeight);
                                if (double.IsNaN(this._sheight))
                                {
                                    this._sheight = 0.0;
                                }
                            }
                        }
                        DFDataConfig.Class.FieldInfo fiEndHeight = fac.GetFieldInfoBySystemName("EndHeight");
                        if (fiEndHeight != null)
                        {
                            int indexEndHeight = this._rowInfo.FieldIndex(fiEndHeight.Name);
                            if (indexEndHeight != -1)
                            {
                                this._eheight = Fac.GetDouble(base._rowInfo, indexEndHeight);
                            }
                            if (double.IsNaN(this._eheight))
                            {
                                this._eheight = 0.0;
                            }
                        }
                        // 根据管线起始点高程计算中间点高程,并替换设施对象中Shape二维数据

                        if (this.GetPipeLineVertexs(base._geoGroup[2], this._sheight, this._eheight, out route))
                        {
                            base._geoGroup[1] = route;
                            base.SetValue("Shape", base._geoGroup[1]);
                        }
                        break;

                    case HeightParam.LineSurfH2Deep:
                        DFDataConfig.Class.FieldInfo fiStartSurfHeight = fac.GetFieldInfoBySystemName("StartSurfHeight");
                        if (fiStartSurfHeight != null)
                        {
                            int indexStartSurfHeight = this._rowInfo.FieldIndex(fiStartSurfHeight.Name);
                            if (indexStartSurfHeight != -1)
                            {
                                this._ssurfh = Fac.GetDouble(base._rowInfo, indexStartSurfHeight);
                                if (double.IsNaN(this._ssurfh))
                                {
                                    this._ssurfh = 0.0;
                                }
                            }
                        }
                        DFDataConfig.Class.FieldInfo fiStartDepth = fac.GetFieldInfoBySystemName("StartDepth");
                        if (fiStartDepth != null)
                        {
                            int indexStartDepth = this._rowInfo.FieldIndex(fiStartDepth.Name);
                            if (indexStartDepth != -1)
                            {
                                this._sdeep = Fac.GetDouble(base._rowInfo, indexStartDepth);
                                if (double.IsNaN(this._sdeep))
                                {
                                    this._sdeep = 0.0;
                                }
                            }
                        }
                        DFDataConfig.Class.FieldInfo fiEndSurfHeight = fac.GetFieldInfoBySystemName("EndSurfHeight");
                        if (fiEndSurfHeight != null)
                        {
                            int indexEndSurfHeight = this._rowInfo.FieldIndex(fiEndSurfHeight.Name);
                            if (indexEndSurfHeight != -1)
                            {
                                this._esurfh = Fac.GetDouble(base._rowInfo, indexEndSurfHeight);
                                if (double.IsNaN(this._esurfh))
                                {
                                    this._esurfh = 0.0;
                                }
                            }
                        }
                        DFDataConfig.Class.FieldInfo fiEndDepth = fac.GetFieldInfoBySystemName("EndDepth");
                        if (fiEndDepth != null)
                        {
                            int indexEndDepth = this._rowInfo.FieldIndex(fiEndDepth.Name);
                            if (indexEndDepth != -1)
                            {
                                this._edeep = Fac.GetDouble(base._rowInfo, indexEndDepth);
                                if (double.IsNaN(this._edeep))
                                {
                                    this._edeep = 0.0;
                                }
                            }
                        }
                        this._sheight = this._ssurfh - this._sdeep;
                        this._eheight = this._esurfh - this._edeep;
                        // 根据管线起始点高程计算中间点高程,并替换设施对象中Shape二维数据
                        if (this.GetPipeLineVertexs(base._geoGroup[2], this._sheight, this._eheight, out route))
                        {
                            base._geoGroup[1] = route;
                            base.SetValue("Shape", base._geoGroup[1]);
                        }
                        break;

                    case HeightParam.PipeVertexHeight:
                        this.GetPipeLineVertexs(base._geoGroup[1], out route);
                        this._sheight = double.IsNaN(route.StartPoint.Z) ? 0.0 : route.StartPoint.Z;
                        this._eheight = double.IsNaN(route.EndPoint.Z) ? 0.0 : route.EndPoint.Z;
                        // 替换设施对象中缓存行\Shape二维数据
                        base._geoGroup[1] = route;
                        base.SetValue("Shape", route);
                        break;

                    case HeightParam.Unkown:
                        this._sheight = double.IsNaN(route.StartPoint.Z) ? 0.0 : route.StartPoint.Z;
                        this._eheight = double.IsNaN(route.EndPoint.Z) ? 0.0 : route.EndPoint.Z;
                        this.SimplifyPolyline(base._geoGroup[1], out route);
                        // 替换设施对象中缓存行\Shape二维数据
                        base._geoGroup[1] = route;
                        base.SetValue("Shape", route);
                        break;
                    }
                    switch (style.HeightMode)
                    {
                    case HeightMode.Top:
                        this._vPos = VerticalPos.Top;
                        break;

                    case HeightMode.Bottom:
                        this._vPos = VerticalPos.Bottom;
                        break;

                    default:
                        this._vPos = VerticalPos.Center;
                        break;
                    }

                    // 重新设置高程选项,针对同类管线中高程设置不一致的情况
                    DFDataConfig.Class.FieldInfo fiHLB = fac.GetFieldInfoBySystemName("HLB");
                    if (fiHLB != null)
                    {
                        int indexHLB = this._rowInfo.FieldIndex(fiHLB.Name);
                        if (indexHLB != -1)
                        {
                            string hlb = base._rowInfo.GetValue(indexHLB).ToString();
                            if (hlb.Contains("内"))
                            {
                                this._vPos = VerticalPos.Bottom;
                            }
                            else if (hlb.Contains("外"))
                            {
                                this._vPos = VerticalPos.Top;
                            }
                            else
                            {
                                this._vPos = VerticalPos.Center;
                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
            }
        }