Newer
Older
GHFX_REFACTOR / RedLineBuilder.cs
wxn on 9 Nov 2016 4 KB 冗余代码整理
using System;
using System.Drawing;
using GeoScene.Data;
using GeoScene.Engine;
//using ScadaViewer3D.DTO;

namespace Cyberpipe
{
    class RedLineBuilder:IModelBuilder
    {

        public GSOFeatureDataset fetchFeatureDataset(GSODataSource ds, string datasetName, GSOFeature feature)
        {
            GSODataset dataset = ds.GetDatasetByName(datasetName);
            GSOFeatureDataset gsoFeatureDataset;
            if (dataset != null)
            {
                //获取原有的GSOFeatureDataSet
                gsoFeatureDataset = dataset as GSOFeatureDataset;
            }
            else
            {
                //创建新的GSOFeatureDataSet,同时要创建各个feature的字段值
                gsoFeatureDataset = createFeatureDatasetWithFields(ds, datasetName, feature);
            }

            return gsoFeatureDataset;
        }

        public GSOFeatureDataset createFeatureDatasetWithFields(GSODataSource ds, string datasetName, GSOFeature feature)
        {
            GSOFeatureDataset featDs = ds.CreateFeatureDataset(datasetName);

            for (int i = 0; i < feature.GetFieldCount(); i++)
            {
                GSOFieldDefn fielddef = feature.GetFieldDefn(i);
                GSOFieldAttr field = new GSOFieldAttr
                {
                    Name = fielddef.Name
                };
                switch (fielddef.Type)
                {
                    case EnumFieldType.INT32:
                        field.Type = EnumFieldType.INT32;
                        field.Width = 4;
                        break;

                    case EnumFieldType.Double:
                        field.Type = EnumFieldType.Double;
                        field.Width = 8;
                        break;

                    case EnumFieldType.Date:
                        field.Type = EnumFieldType.Date;
                        field.Width = 10;
                        break;

                    case EnumFieldType.Text:
                        field.Type = EnumFieldType.Text;
                        field.Width = 100;
                        break;
                }
                bool res = featDs.AddField(field);
            }
            featDs.Save();
            return featDs;

        }

        public void batchInsert(GSODataSource ds, string datasetName, GSOFeatures features)
        {
            //for (int i = 0; i < features.Length;i++ )
            //{
                GSOFeatureDataset featdataset = fetchFeatureDataset(ds, datasetName, features[0]);
                featdataset.Open();

                for (int j = 0; j < features.Length; j++)
                {
                    //TODO LIST:创建管线对象
                    GSOFeature feature = createFeatureWithModel(features[j], featdataset);
                    featdataset.AddFeature(feature);
                }
                featdataset.Save();
            //}
        }

        private GSOFeature createFeatureWithModel(GSOFeature gsoFeature, GSOFeatureDataset fds)
        {

            GSOFeature newfeature = fds.CreateFeature();

            GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D();
            style.LineWidth = 12;
            style.LineColor = Color.FromArgb(Convert.ToByte(255), Color.Red);

            GSOGeoPolyline3D line = gsoFeature.Geometry.Clone() as GSOGeoPolyline3D;
            GSOPoint3ds pt3ds = line[0];
            for (int n = 0; n < pt3ds.Count; n++)
            {
                GSOPoint3d pt3d = pt3ds[n];
                pt3d.Z = 0;
                pt3ds[n] = pt3d;
            }
            line[0] = pt3ds;
            line.Style = style;
            line.Name = gsoFeature.Dataset.Caption;
            newfeature.Geometry = line;


            for (int i = 0; i < newfeature.GetFieldCount(); i++)
            {
                GSOFieldDefn fielddef = gsoFeature.GetFieldDefn(i);
                object obu = gsoFeature.GetValue(fielddef.Name);
                if (obu != null)
                {
                    newfeature.SetValue(fielddef.Name, obu);
                }
            }

            return newfeature;
        }

    }
}