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)); }