Example #1
0
        private double GetDiameter(IPoint point, I3DItem item)
        {
            ISpatialFilter spatialFilter = new SpatialFilterClass();
            spatialFilter.Geometry = point;
            spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
            IFeatureCursor featureCursor = item.LineLayerInfo.FeatureClass.Search(spatialFilter, false);
            IFeature lineFeature;
            double maxDiameter = 0;
            while ((lineFeature = featureCursor.NextFeature()) != null)
            {
                string gg = ConvertToString(lineFeature.Value[item.IdxGjField]); if (string.IsNullOrEmpty(gg) || gg == "<空>")
                    gg = "50";
                if (gg.Contains("*"))
                {
                    gg = gg.Split('*')[0];
                }
                double diameter;
                if (double.TryParse(gg, out diameter) == false)
                    diameter = 0;
                diameter = diameter / 1000;

                if (maxDiameter < diameter)
                    maxDiameter = diameter;
            }
            return maxDiameter;
        }
Example #2
0
 private void checkedListBoxPipelineLayers_SelectedIndexChanged(object sender, EventArgs e)
 {
     _currentItem = checkedListBoxPipelineLayers.SelectedItem as I3DItem;
     if (_currentItem == null)
     {
         return;
     }
     InitFields(_currentItem);
 }
Example #3
0
        public List <string> GetCheckPipeline()
        {
            List <string> list = new List <string>();

            foreach (object checkedItem in this.checkedListBoxPipelineLayers.CheckedItems)
            {
                I3DItem pipelineLayer = checkedItem as I3DItem;
                if (pipelineLayer == null)
                {
                    continue;
                }
                list.Add(pipelineLayer.Name);
            }
            return(list);
        }
Example #4
0
        public CustomPipeline(IFeature feature, I3DItem builderItem)
        {
            _builderItem = builderItem;
            _polyline    = feature.ShapeCopy as IPolyline;

            _qdgc = ConvertToDouble(feature.Value[_builderItem.IdxQdgcField]);
            _zdgc = ConvertToDouble(feature.Value[_builderItem.IdxZdgcField]);

            if (Math.Abs(_qdgc) < 0.001 || double.IsNaN(_qdgc))
            {
                _qdgc = _zdgc;
            }
            if (Math.Abs(_zdgc) < 0.001 || double.IsNaN(_zdgc))
            {
                _zdgc = _qdgc;
            }

            _standard = feature.get_Value(_builderItem.IdxGjField).ToString().Replace(" ", "");
            GetStandardList();
        }
Example #5
0
        private void InitFields(I3DItem item)
        {
            if (item.HeightType == enumPipelineHeightType.Top)
            {
                cmbHeightType.SelectedItem = "管顶";
            }
            else if (item.HeightType == enumPipelineHeightType.Middle)
            {
                cmbHeightType.SelectedItem = "管中";
            }
            else if (item.HeightType == enumPipelineHeightType.Bottom)
            {
                cmbHeightType.SelectedItem = "管底";
            }
            else
            {
                cmbHeightType.SelectedItem = null;
            }

            if (item.SectionType == enumPipeSectionType.HeightAndWidth)
            {
                cmbSectionType.SelectedItem = "高*宽";
            }
            else if (item.SectionType == enumPipeSectionType.WidthAndHeight)
            {
                cmbSectionType.SelectedItem = "宽*高";
            }
            else
            {
                cmbSectionType.SelectedItem = null;
            }

            if (item.RotationAngleType == enumRotationAngleType.Angle)
            {
                cmbRotationAngleType.SelectedItem = "角度";
            }
            else if (item.RotationAngleType == enumRotationAngleType.Radian)
            {
                cmbRotationAngleType.SelectedItem = "弧度";
            }
            else
            {
                cmbRotationAngleType.SelectedItem = null;
            }

            AddItemsFromFields(item.PointLayerInfo.FeatureClass.Fields, cmbDmgcField,
                               string.IsNullOrEmpty(item.DmgcFieldName)
                    ? item.PointLayerInfo.GetFieldName(PipeConfigWordHelper.PointWords.DMGC)
                    : item.DmgcFieldName);
            AddItemsFromFields(item.PointLayerInfo.FeatureClass.Fields, cmbJgggField,
                               string.IsNullOrEmpty(item.JgggFieldName)
                    ? item.PointLayerInfo.GetFieldName(PipeConfigWordHelper.PointWords.JGGG)
                    : item.JgggFieldName);
            AddItemsFromFields(item.PointLayerInfo.FeatureClass.Fields, cmbJdsdField,
                               string.IsNullOrEmpty(item.JdsdFieldName)
                    ? item.PointLayerInfo.GetFieldName(PipeConfigWordHelper.PointWords.JDSD)
                    : item.JdsdFieldName);
            AddItemsFromFields(item.PointLayerInfo.FeatureClass.Fields, cmbXzjdField,
                               string.IsNullOrEmpty(item.XzjdFieldName)
                    ? item.PointLayerInfo.GetFieldName(PipeConfigWordHelper.PointWords.XZJD)
                    : item.XzjdFieldName);
            AddItemsFromFields(item.PointLayerInfo.FeatureClass.Fields, cmbFswField,
                               string.IsNullOrEmpty(item.FswFieldName)
                    ? item.PointLayerInfo.GetFieldName(PipeConfigWordHelper.PointWords.FSW)
                    : item.FswFieldName);

            AddItemsFromFields(item.LineLayerInfo.FeatureClass.Fields, cmbQdgcField,
                               string.IsNullOrEmpty(item.QdgcFieldName)
                    ? item.LineLayerInfo.GetFieldName(PipeConfigWordHelper.LineWords.QDGC)
                    : item.QdgcFieldName);
            AddItemsFromFields(item.LineLayerInfo.FeatureClass.Fields, cmbZdgcField,
                               string.IsNullOrEmpty(item.ZdgcFieldName)
                    ? item.LineLayerInfo.GetFieldName(PipeConfigWordHelper.LineWords.ZDGC)
                    : item.ZdgcFieldName);
            AddItemsFromFields(item.LineLayerInfo.FeatureClass.Fields, cmbQdmsField,
                               string.IsNullOrEmpty(item.QdmsFieldName)
                    ? item.LineLayerInfo.GetFieldName(PipeConfigWordHelper.LineWords.QDMS)
                    : item.QdmsFieldName);
            AddItemsFromFields(item.LineLayerInfo.FeatureClass.Fields, cmbZdmsField,
                               string.IsNullOrEmpty(item.ZdmsFieldName)
                    ? item.LineLayerInfo.GetFieldName(PipeConfigWordHelper.LineWords.ZDMS)
                    : item.ZdmsFieldName);
            AddItemsFromFields(item.LineLayerInfo.FeatureClass.Fields, cmbGjField,
                               string.IsNullOrEmpty(item.GjFieldName)
                    ? item.LineLayerInfo.GetFieldName(PipeConfigWordHelper.LineWords.GJ)
                    : item.GjFieldName);
            AddItemsFromFields(item.LineLayerInfo.FeatureClass.Fields, cmbMsfsField,
                               string.IsNullOrEmpty(item.MsfsFieldName)
                    ? item.LineLayerInfo.GetFieldName(PipeConfigWordHelper.LineWords.MSFS)
                    : item.MsfsFieldName);
            AddItemsFromFields(item.LineLayerInfo.FeatureClass.Fields, cmbGgField,
                               string.IsNullOrEmpty(item.GgFieldName)
                    ? item.LineLayerInfo.GetFieldName(PipeConfigWordHelper.LineWords.GG)
                    : item.GgFieldName);

            txtCylinderSubs.Text  = string.Join(";", item.CylinderSubs);
            txtSquareSubs.Text    = string.Join(";", item.SquareSubs);
            txtSphereSubs.Text    = string.Join(";", item.SphereSubs);
            txtLCylinderSubs.Text = string.Join(";", item.LCylinderSubs);
            txtLSquareSubs.Text   = string.Join(";", item.LSquareSubs);
        }
Example #6
0
        private void ImportPipeClassToPointPatch(IWorkspace outWorkspace, I3DItem builderItem, IGeometry boundary = null)
        {
            try
            {
                if (builderItem.PointLayerInfo == null)
                    return;
                IWorkspaceEdit workspaceEdit = outWorkspace as IWorkspaceEdit;
                workspaceEdit.StartEditing(false);
                workspaceEdit.StartEditOperation();

                IFeatureCursor pCursor = null;
                if (boundary == null || boundary.IsEmpty == true)
                {
                    pCursor = builderItem.PointLayerInfo.FeatureClass.Search(null, false);
                }
                else
                {
                    ISpatialFilter pFilter = new SpatialFilterClass();
                    pFilter.Geometry = boundary;
                    pFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                    pCursor = builderItem.PointLayerInfo.FeatureClass.Search((IQueryFilter)pFilter, false);
                }
                IFeature sFeature = null;
                IFeatureCursor insertCursor = builderItem.PointPatchClass.Insert(true);
                IFeatureBuffer featureBuffer = builderItem.PointPatchClass.CreateFeatureBuffer();
                int count = 0;
                while ((sFeature = pCursor.NextFeature()) != null)
                {
                    try
                    {
                        //开始读取原始数据
                        IGeometry pShape = sFeature.Shape;
                        if (pShape.IsEmpty) continue;
                        IGeometry patchGeometry = CreatePointPatch(sFeature, builderItem);
                        if (patchGeometry == null)
                            continue;
                        featureBuffer.Shape = patchGeometry;
                        featureBuffer.Value[builderItem.IdxPointLinkField] = sFeature.OID;

                        insertCursor.InsertFeature(featureBuffer);
                        count++;
                        if (count >= 1000)
                        {
                            count = 0;
                            insertCursor.Flush();
                            Marshal.ReleaseComObject(insertCursor);
                            insertCursor = builderItem.PointPatchClass.Insert(true);
                            featureBuffer = builderItem.PointPatchClass.CreateFeatureBuffer();
                        }
                    }
                    catch (Exception e)
                    {
                        throw new Exception(string.Format("OBJECTID:{0}\r\n{1}", sFeature.OID, e.Message));
                    }
                }
                insertCursor.Flush();
                Marshal.ReleaseComObject(insertCursor);
                Marshal.ReleaseComObject(pCursor);
                workspaceEdit.StopEditOperation();
                workspaceEdit.StopEditing(true);
            }
            catch (Exception e)
            {
                throw new Exception(string.Format("{0}\r\n{1}", builderItem.PointLayerInfo.AliasName, e.Message));
            }
        }
Example #7
0
        private IGeometry CreatePointPatch(IFeature pFeature, I3DItem builderItem)
        {
            try
            {
                IPoint oPoint = pFeature.Shape as IPoint;
                if (oPoint == null)
                    return null;
                double z = ConvertToDouble(pFeature.Value[builderItem.IdxDmgcField]);
                if (double.IsNaN(z))
                    z = 0;
                double depth = ConvertToDouble(pFeature.Value[builderItem.IdxJdsdField]);
                if (double.IsNaN(depth))
                    depth = 0.01;

                string gg = ConvertToString(pFeature.Value[builderItem.IdxJgggField]);

                string fsw = ConvertToString(pFeature.Value[builderItem.IdxFswField]).Trim();
                if (builderItem.CylinderSubs.Contains(fsw))
                {
                    if (string.IsNullOrEmpty(gg) || gg == "<空>")
                        gg = "50";
                    if (gg.Contains("*"))
                    {
                        gg = gg.Split('*')[0];
                    }
                    double diameter;
                    if (double.TryParse(gg, out diameter) == false)
                        return null;
                    diameter = diameter / 100;
                    return new Point3DCylinder(oPoint.X, oPoint.Y, z, depth, diameter, _3DBuilder.Division).CreateGeometry();
                }
                else if (builderItem.SquareSubs.Contains(fsw))
                {
                    if (string.IsNullOrEmpty(gg) || gg == "<空>")
                        gg = "50*50";
                    double length, width;
                    if (gg.Split('*').Length <= 0)
                        return null;
                    if (double.TryParse(gg.Split('*')[0], out length) == false)
                        return null;
                    if (gg.Split('*').Length == 1)
                        width = length;
                    else if (double.TryParse(gg.Split('*')[1], out width) == false)
                        return null;
                    length /= 100;
                    width /= 100;
                    double angle = ConvertToDouble(pFeature.Value[builderItem.IdxXzjdField]);
                    if (double.IsNaN(angle))
                        angle = 0;

                    if (builderItem.RotationAngleType == enumRotationAngleType.Angle)
                    {
                        angle = angle * Math.PI / 180;
                    }

                    return new Point3DSquare(oPoint.X, oPoint.Y, z, depth, length, width, angle, _3DBuilder.Division).CreateGeometry();
                }
                if (builderItem.SphereSubs.Contains(fsw))
                {
                    double maxDiameter = GetDiameter(oPoint, builderItem);
                    return new Point3DSphere(oPoint.X, oPoint.Y, z, depth, maxDiameter, _3DBuilder.Division).CreateGeometry();
                }
                return null;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
Example #8
0
        private List<IGeometry> CreateLinePatch(IFeature feature, I3DItem builderItem)
        {
            List<IGeometry> list = new List<IGeometry>();
            try
            {
                IPolyline polyline = feature.Shape as IPolyline;
                if (polyline == null || polyline.IsEmpty)
                    return list;

                double qdgc = ConvertToDouble(feature.Value[builderItem.IdxQdgcField]);
                double zdgc = ConvertToDouble(feature.Value[builderItem.IdxZdgcField]);

                if (Math.Abs(qdgc) < 0.01 || double.IsNaN(qdgc))
                    qdgc = zdgc;
                if (Math.Abs(zdgc) < 0.01 || double.IsNaN(zdgc))
                    zdgc = qdgc;

                string msfs = ConvertToString(feature.Value[builderItem.IdxMsfsField]).Trim();
                if (builderItem.LCylinderSubs.Contains(msfs))
                {
                    string standard = ConvertToString(feature.Value[builderItem.IdxGjField]).Replace(" ", "");
                    List<string> standardList = GetStandardList(standard);

                    string[] standards = standardList[0].Split('*');

                    if (string.IsNullOrEmpty(standards[0]))
                        standards[0] = "100";
                    double diameter = ConvertToDouble(standards[0]) / 1000;
                    switch (builderItem.LineLayerInfo.HeightType)
                    {
                        case enumPipelineHeightType.Top:
                            qdgc = qdgc - diameter / 2;
                            zdgc = zdgc - diameter / 2;
                            break;
                        case enumPipelineHeightType.Bottom:
                            qdgc = qdgc + diameter / 2;
                            zdgc = zdgc + diameter / 2;
                            break;
                    }
                    I3DLine line = new Line3DCylinder(polyline, qdgc, zdgc, diameter, builderItem.Builder.Division);
                    list.Add(line.CreateGeometry());
                    list.Add(line.CreateStartSphere());
                    list.Add(line.CreateEndSphere());

                }
                else if (builderItem.LSquareSubs.Contains(msfs))
                {
                    string standard = ConvertToString(feature.Value[builderItem.IdxGgField]).Replace(" ", "");
                    List<string> standardList = GetStandardList(standard);

                    string[] standards = standardList[0].Split('*');

                    double height = 0, width = 0;
                    switch (builderItem.LineLayerInfo.SectionType)
                    {
                        case enumPipeSectionType.HeightAndWidth:
                            height = ConvertToDouble(standards[0]) / 100;
                            width = ConvertToDouble(standards[1]) / 100;
                            break;
                        case enumPipeSectionType.WidthAndHeight:
                            width = ConvertToDouble(standards[0]) / 100;
                            height = ConvertToDouble(standards[1]) / 100;
                            break;
                    }

                    switch (builderItem.LineLayerInfo.HeightType)
                    {
                        case enumPipelineHeightType.Top:
                            qdgc = qdgc - height / 2;
                            zdgc = zdgc - height / 2;
                            break;
                        case enumPipelineHeightType.Bottom:
                            qdgc = qdgc + height / 2;
                            zdgc = zdgc + height / 2;
                            break;
                    }
                    I3DLine line = new Line3DSquare(polyline, qdgc, zdgc, width, height, builderItem.Builder.Division);
                    list.Add(line.CreateGeometry());
                }
                return list;
            }
            catch (Exception)
            {
                return list;
            }
        }