Beispiel #1
0
        // 架空
        public bool GetPipeNodeParameterOver(int flag, out Vector[] vtxs, out Vector dir, out IPipeSection section, out int FLAG)
        {
            FLAG    = -1;
            vtxs    = null;
            dir     = null;
            section = null;
            IPolyline polyline = null;

            if ((base._geoGroup[1] == null) || ((polyline = base._geoGroup[1] as IPolyline) == null))
            {
                return(false);
            }
            if (polyline.PointCount < 2)
            {
                return(false);
            }
            ISegment seg     = null;
            Vector   vector  = null;
            Vector   vector2 = null;

            vtxs    = new Vector[2];
            section = new PipeSection(this._dia1, this._dia2, HorizontalPos.Center, this._vPos, 0.02, 0);
            if (flag == 0)
            {
                vector  = new Vector(polyline.GetPoint(0));
                vtxs[0] = vector;
                seg     = polyline.GetSegment(0);
                if (Math.Abs(seg.EndPoint.Z - seg.StartPoint.Z) > 0.4)
                {
                    FLAG = 1;
                }
                dir     = new Vector(seg);
                dir     = dir.UnitVector();
                vector2 = vector + ((Vector)((dir * section.Diameter) / 2.0));
                vtxs[1] = vector2;
            }
            else
            {
                vector  = new Vector(polyline.GetPoint(polyline.PointCount - 1));
                vtxs[0] = vector;
                seg     = polyline.GetSegment(polyline.PointCount - 2);
                if (Math.Abs(seg.EndPoint.Z - seg.StartPoint.Z) > 0.4)
                {
                    FLAG = 1;
                }
                dir     = new Vector(seg);
                dir     = (-dir).UnitVector();
                vector2 = vector + ((Vector)((dir * section.Diameter) / 2.0));
                vtxs[1] = vector2;
            }
            return(true);
        }
Beispiel #2
0
        public bool GetPipeLineParameter(double thick, out List <Vector> vtxs, out IPipeSection section)
        {
            vtxs    = null;
            section = null;
            IPolyline polyline = null;

            if ((base._geoGroup[1] == null) || ((polyline = base._geoGroup[1] as IPolyline) == null))
            {
                return(false);
            }
            if (polyline.PointCount < 2)
            {
                return(false);
            }
            IPoint p       = null;
            Vector vector  = null;
            Vector vector2 = null;
            Vector item    = null;

            vtxs    = new List <Vector>();
            section = new PipeSection(this._dia1, this._dia2, HorizontalPos.Center, VerticalPos.Center, thick, 0);
            for (int i = 0; i < polyline.PointCount; i++)
            {
                p = polyline.GetPoint(i);
                if (p != null)
                {
                    vector = new Vector(p);
                    if ((this._dia1 > 1.5) || (this._dia2 > 1.5))
                    {
                        item = vector;
                    }
                    else if (i == 0)
                    {
                        // 增加起点退让判断,并对较短管线做处理 FX 2014.04.08
                        vector2 = new Vector(polyline.GetSegment(i));
                        double length = vector2.Length;
                        vector2 = vector2.UnitVector();
                        if (this._isSBackhind)
                        {
                            if (length > (section.Diameter / 1.8))
                            {
                                item = vector + ((Vector)((vector2 * section.Diameter) / 1.8));
                            }
                            else
                            {
                                item = vector + ((Vector)((vector2 * length) / 1.8));
                            }
                        }
                        else
                        {
                            item = vector;
                        }
                    }
                    else if (i == (polyline.PointCount - 1))
                    {
                        // 增加终点退让判断,并对较短管线做处理 FX 2014.04.08
                        vector2 = new Vector(polyline.GetSegment(i - 1));
                        double length = vector2.Length;
                        vector2 = -vector2.UnitVector();
                        if (this._isEBackhind)
                        {
                            if (length > (section.Diameter / 1.8))
                            {
                                item = vector + ((Vector)((vector2 * section.Diameter) / 1.8));
                            }
                            else
                            {
                                item = vector + ((Vector)((vector2 * length) / 1.8));
                            }
                        }
                        else
                        {
                            item = vector;
                        }
                    }
                    else
                    {
                        item = vector;
                    }
                    item.Z += this.OffsetZ;
                    vtxs.Add(item);
                }
            }
            return(true);
        }
Beispiel #3
0
        // 地下—针对管线较短情况
        public bool GetPipeNodeParameterUnder(int flag, out Vector[] vtxs, out Vector dir, out IPipeSection section)
        {
            vtxs    = null;
            dir     = null;
            section = null;
            IPolyline polyline = null;

            if ((base._geoGroup[1] == null) || ((polyline = base._geoGroup[1] as IPolyline) == null))
            {
                return(false);
            }
            if (polyline.PointCount < 2)
            {
                return(false);
            }
            ISegment seg     = null;
            Vector   vector  = null;
            Vector   vector2 = null;

            vtxs    = new Vector[2];
            section = new PipeSection(this._dia1, this._dia2, HorizontalPos.Center, VerticalPos.Center, 0.02, 0);
            if (flag == 0)
            {
                vector  = new Vector(polyline.GetPoint(0));
                vtxs[0] = new Vector(vector.X, vector.Y, vector.Z + this.OffsetZ);
                seg     = polyline.GetSegment(0);
                dir     = new Vector(seg);
                dir     = dir.UnitVector();
                double length = dir.Length;
                // 针对管线较短情况
                if (length > (section.Diameter / 2))
                {
                    vector2 = vector + ((Vector)((dir * section.Diameter) / 2.0));
                }
                else
                {
                    vector2 = vector + ((Vector)((dir * length) / 2.0));
                }
                vtxs[1] = new Vector(vector2.X, vector2.Y, vector2.Z + this.OffsetZ);
            }
            else
            {
                vector  = new Vector(polyline.GetPoint(polyline.PointCount - 1));
                vtxs[0] = new Vector(vector.X, vector.Y, vector.Z + this.OffsetZ);
                seg     = polyline.GetSegment(polyline.PointCount - 2);
                dir     = new Vector(seg);
                double length = dir.Length;
                dir = -dir.UnitVector();
                // 针对管线较短情况
                if (length > (section.Diameter / 2))
                {
                    vector2 = vector + ((Vector)((dir * section.Diameter) / 2.0));
                }
                else
                {
                    vector2 = vector + ((Vector)((dir * length) / 2.0));
                }
                vtxs[1] = new Vector(vector2.X, vector2.Y, vector2.Z + this.OffsetZ);
            }
            return(true);
        }