public PolynomialImageTransformer(RegistrationDefinition registration, InterpolationMode interpolationMode, int polynomialDegree) : base(registration, interpolationMode) { List<PositionAssociation> associationList = registration.GetAssociationList(); TransformationStyle arg_15_0 = registration.warpStyle; int num = associationList.Count; if (num == 2) { num++; } JamaMatrix jamaMatrix = new JamaMatrix(num, 2); JamaMatrix jamaMatrix2 = new JamaMatrix(num, 2); for (int i = 0; i < num; i++) { LatLon latLon = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(associationList[0].sourcePosition.pinPosition.latlon, associationList[1].sourcePosition.pinPosition.latlon, true) : associationList[i].sourcePosition.pinPosition.latlon; jamaMatrix.SetElement(i, 0, latLon.lon); jamaMatrix.SetElement(i, 1, latLon.lat); LatLon latLon2 = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(MercatorCoordinateSystem.LatLonToMercator(associationList[0].globalPosition.pinPosition.latlon), MercatorCoordinateSystem.LatLonToMercator(associationList[1].globalPosition.pinPosition.latlon), false) : MercatorCoordinateSystem.LatLonToMercator(associationList[i].globalPosition.pinPosition.latlon); jamaMatrix2.SetElement(i, 0, latLon2.lon); jamaMatrix2.SetElement(i, 1, latLon2.lat); } this.destMercatorToSourceTransformer = PolynomialImageTransformer.getPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree); this.sourceToDestMercatorTransformer_approximate = PolynomialImageTransformer.getApproximateInverterPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree); DownhillInverterPointTransformer flakyPointTransformer = new DownhillInverterPointTransformer(this.destMercatorToSourceTransformer, this.sourceToDestMercatorTransformer_approximate); IPointTransformer sourceToMercator = new RobustPointTransformer(flakyPointTransformer, this.sourceToDestMercatorTransformer_approximate); this.destLatLonToSourceTransformer = new LatLonToSourceTransform(this.destMercatorToSourceTransformer); this.sourceToDestLatLonTransformer = new SourceToLatLonTransform(sourceToMercator); }
public RegistrationDefinition getWarpedRegistration() { IPointTransformer pointTransformer = this.getSourceToDestLatLonTransformer(); List <PositionAssociation> associationList = this.registration.GetAssociationList(); List <IImageTransformer.QualitySortPair> list = new List <IImageTransformer.QualitySortPair>(); for (int i = 0; i < associationList.Count; i++) { PositionAssociation positionAssociation = associationList[i]; bool invertError; LatLon p = pointTransformer.getTransformedPoint(positionAssociation.sourcePosition.pinPosition.latlon, out invertError); PositionAssociation positionAssociation2 = new PositionAssociation(positionAssociation.associationName, positionAssociation.imagePosition.pinPosition, new LatLonZoom(p.lat, p.lon, positionAssociation.sourcePosition.pinPosition.zoom), positionAssociation.globalPosition.pinPosition, new DirtyEvent()); positionAssociation2.sourcePosition.invertError = invertError; positionAssociation2.sourcePosition.SetErrorPosition(DisplayablePosition.ErrorMarker.AsContributor, positionAssociation.globalPosition.pinPosition.latlon); positionAssociation2.pinId = positionAssociation.pinId; double num = LatLon.DistanceInMeters(p, positionAssociation.globalPosition.pinPosition.latlon); positionAssociation2.qualityMessage = LatLon.PrettyDistance(num); list.Add(new IImageTransformer.QualitySortPair(positionAssociation2, num)); } list.Sort(); RegistrationDefinition registrationDefinition = new RegistrationDefinition(new DirtyEvent()); registrationDefinition.warpStyle = this.registration.warpStyle; foreach (IImageTransformer.QualitySortPair current in list) { registrationDefinition.AddAssociation(current.assoc); } registrationDefinition.isLocked = true; return(registrationDefinition); }
public PolynomialImageTransformer(RegistrationDefinition registration, InterpolationMode interpolationMode, int polynomialDegree) : base(registration, interpolationMode) { List <PositionAssociation> associationList = registration.GetAssociationList(); TransformationStyle arg_15_0 = registration.warpStyle; int num = associationList.Count; if (num == 2) { num++; } JamaMatrix jamaMatrix = new JamaMatrix(num, 2); JamaMatrix jamaMatrix2 = new JamaMatrix(num, 2); for (int i = 0; i < num; i++) { LatLon latLon = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(associationList[0].sourcePosition.pinPosition.latlon, associationList[1].sourcePosition.pinPosition.latlon, true) : associationList[i].sourcePosition.pinPosition.latlon; jamaMatrix.SetElement(i, 0, latLon.lon); jamaMatrix.SetElement(i, 1, latLon.lat); LatLon latLon2 = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(MercatorCoordinateSystem.LatLonToMercator(associationList[0].globalPosition.pinPosition.latlon), MercatorCoordinateSystem.LatLonToMercator(associationList[1].globalPosition.pinPosition.latlon), false) : MercatorCoordinateSystem.LatLonToMercator(associationList[i].globalPosition.pinPosition.latlon); jamaMatrix2.SetElement(i, 0, latLon2.lon); jamaMatrix2.SetElement(i, 1, latLon2.lat); } this.destMercatorToSourceTransformer = PolynomialImageTransformer.getPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree); this.sourceToDestMercatorTransformer_approximate = PolynomialImageTransformer.getApproximateInverterPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree); DownhillInverterPointTransformer flakyPointTransformer = new DownhillInverterPointTransformer(this.destMercatorToSourceTransformer, this.sourceToDestMercatorTransformer_approximate); IPointTransformer sourceToMercator = new RobustPointTransformer(flakyPointTransformer, this.sourceToDestMercatorTransformer_approximate); this.destLatLonToSourceTransformer = new LatLonToSourceTransform(this.destMercatorToSourceTransformer); this.sourceToDestLatLonTransformer = new SourceToLatLonTransform(sourceToMercator); }
public CircleSegment Transform(IPointTransformer transform) { Coordinates newCenter = transform.TransformPoint(center); Coordinates newStartPoint = transform.TransformPoint(center + Coordinates.FromAngle(startAngle) * r); Coordinates newEndPoint = transform.TransformPoint(center + Coordinates.FromAngle(endAngle) * r); return(new CircleSegment(r, newCenter, newStartPoint, newEndPoint, ccw)); }
public Line Transform(IPointTransformer transformer) { if (transformer == null) { throw new ArgumentNullException("transformer"); } return(new Line(transformer.TransformPoint(P0), transformer.TransformPoint(P1))); }
public LineList Transform(IPointTransformer transformer) { LineList ret = new LineList(); ret.Capacity = this.Count; ret.AddRange(transformer.TransformPoints(this)); return(ret); }
public Present Evaluate(Present[] paramList) { D.Assert(paramList.Length == 1); IBoundsProvider boundsProvider = (IBoundsProvider)paramList[0]; RenderRegion renderRegion = boundsProvider.GetRenderRegion(); IPointTransformer robustPointTransform = imageTransformer.getSourceToDestLatLonTransformer(); double num = 0.05; List<LatLon> asLatLonList = renderRegion.GetAsLatLonList(); List<LatLon> list = new List<LatLon>(); for (int i = 0; i < asLatLonList.Count; i++) { int index = (i + 1) % asLatLonList.Count; LatLon source = asLatLonList[i]; LatLon dest = asLatLonList[index]; ParametricLine parametricLine = new ParametricLine(source, dest); int numSteps = (int)Math.Max(1.0, parametricLine.Length() / num); List<LatLon> list2 = parametricLine.Interpolate(numSteps); list.AddRange(list2.ConvertAll<LatLon>((LatLon inp) => robustPointTransform.getTransformedPoint(inp))); } RenderRegion renderRegion2 = new RenderRegion(list, new DirtyEvent()); return new BoundsPresent(renderRegion2); }
public LatLonToSourceTransform(IPointTransformer mercatorToSource) { this.mercatorToSource = mercatorToSource; }
public SourceToLatLonTransform(IPointTransformer sourceToMercator) { this.sourceToMercator = sourceToMercator; }
public Polygon Transform(IPointTransformer transformer) { return(new Polygon(transformer.TransformPoints(this), coordMode)); }
public LineSegment Transform(IPointTransformer transformer) { return(new LineSegment(transformer.TransformPoint(P0), transformer.TransformPoint(P1))); }
public LineSegment Transform(IPointTransformer transformer) { return new LineSegment(transformer.TransformPoint(P0), transformer.TransformPoint(P1)); }
public Circle Transform(IPointTransformer transform) { return(new Circle(r, transform.TransformPoint(center))); }
public void TransformInPlace(IPointTransformer transformer) { transformer.TransformPointsInPlace(this); }
public new LinePath Transform(IPointTransformer transformer) { return(new LinePath(transformer.TransformPoints(this))); }