Beispiel #1
0
 public GisLinePair(GisLine positive, GisLine opposite)
 {
     this.m_PositiveLine = positive;
     this.m_OppositeLine = opposite;
 }
 private GeoPolygonRegion CreateRegion(GisLine line)
 {
     GeoPolygonRegion region = new GeoPolygonRegion(true, PolygonCreationType.Union);
     GeoPolygon geoPolygon = new GeoPolygon();
     double num = Math.Atan(line.Slope);
     double num2 = ((1.5707963267948966 + num) * 3.1415926535897931) / 180.0;
     for (int i = 0; i < 8; i++)
     {
         double a = num2 + (i * 0.39269908169872414);
         double num5 = (Math.Sin(a) * this.m_WidthOfStrip) / 2.0;
         double num6 = (Math.Cos(a) * this.m_WidthOfStrip) / 2.0;
         double x = line.StandardPt.X - num5;
         double y = line.StandardPt.Y - num6;
         geoPolygon.Points.Add(new GeoXYPoint(x, y));
     }
     region.AddGeoPolygon(geoPolygon);
     return region;
 }
 private void CreateTailPolygon()
 {
     int indexRef = 0;
     int num2 = 0;
     GeoPolygon item = new GeoPolygon();
     int count = this.m_SourceLine.Points.Count;
     this.GetSlopeFromLinePair(count - 2, true, ref indexRef);
     double slope = this.CreateGisLine(this.m_SourceLine.Points[count - 1], this.m_SourceLine.Points[indexRef]).Slope;
     double num5 = (slope == 0.0) ? 1000.0 : (-1.0 / slope);
     GisLine line2 = this.GetPositionLine(this.m_SourceLine.Points[count - 1], this.m_SourceLine.Points[indexRef], slope, this.m_WidthOfStrip / 2.0);
     GeoXYPoint jointPt = line2.GetJointPt(this.GetSlopeFromLinePair(count - 2, true, ref indexRef).PositiveLine);
     GeoXYPoint point2 = line2.GetJointPt(this.GetSlopeFromLinePair(count - 2, true, ref indexRef).OppositeLine);
     item.Points.Add(jointPt);
     item.Points.Add(point2);
     double d = this.GetSlopeFromLinePair(count - 2, true, ref indexRef).PositiveLine.Slope;
     double num7 = this.GetSlopeFromLinePair(count - 3, true, ref num2).PositiveLine.Slope;
     double num8 = Math.Tan((Math.Atan(d) + Math.Atan(num7)) / 2.0);
     if (this.IsSlopeNeedTransform(this.m_SourceLine.Points[num2 + 1], this.m_SourceLine.Points[num2], this.m_SourceLine.Points[indexRef], this.m_SourceLine.Points[indexRef + 1]))
     {
         num8 = -1.0 / num8;
     }
     if (!(this.IsSlopeNeedTransform(this.m_SourceLine.Points[num2 + 1], this.m_SourceLine.Points[num2], this.m_SourceLine.Points[indexRef], this.m_SourceLine.Points[indexRef + 1]) || (Math.Abs((double) (Math.Atan(d) - Math.Atan(num7))) >= 0.8)))
     {
         num8 = -1.0 / num8;
     }
     if (num8 == double.NegativeInfinity)
     {
         num8 = 1000.0;
     }
     line2 = new GisLine(this.m_SourceLine.Points[indexRef], num8);
     this.m_PositivePt = line2.GetJointPt(this.GetSlopeFromLinePair(count - 2, true, ref indexRef).PositiveLine);
     this.m_OppositePt = line2.GetJointPt(this.GetSlopeFromLinePair(count - 2, true, ref indexRef).OppositeLine);
     item.Points.Add(this.m_OppositePt);
     item.Points.Add(this.m_PositivePt);
     this.m_PolyList.Add(item);
 }
 private double CalcPtDistanceToLine(GeoXYPoint pt, GisLine gisLine)
 {
     GeoXYPoint jointPt = new GisLine(pt, -1.0 / gisLine.Slope).GetJointPt(gisLine);
     return Math.Sqrt(Math.Pow(pt.X - jointPt.X, 2.0) + Math.Pow(pt.Y - jointPt.Y, 2.0));
 }