/* * @(#)LongTransform.java * * Copyright 2002 EGANTT LLP. All rights reserved. * PROPRIETARY/QPL. Use is subject to license terms. */ package com.egantt.model.drawing.transform; import java.math.BigDecimal; import java.math.MathContext; import com.egantt.model.drawing.DrawingTransform; public class LongTransform implements DrawingTransform { private static final BigDecimal MAX_VALUE = new BigDecimal(Integer.toString(Integer.MAX_VALUE)); private static final BigDecimal MIN_VALUE = new BigDecimal(Integer.toString(Integer.MIN_VALUE)); protected long offset; protected long range; public LongTransform(long offset, long range) { this.offset = offset; this.range = range; } // __________________________________________________________________________ public int transform(Object v, long pixels) { BigDecimal ppm = new BigDecimal(Long.toString(pixels), MathContext.DECIMAL128); ppm = ppm.divide(new BigDecimal(Long.toString(range), MathContext.DECIMAL128), MathContext.DECIMAL128); BigDecimal value = new BigDecimal(((Long) v).toString(), MathContext.DECIMAL128); // an assert value = value.subtract(new BigDecimal(Long.toString(offset), MathContext.DECIMAL128), MathContext.DECIMAL128); value = value.multiply(ppm, MathContext.DECIMAL128); if (value.compareTo(LongTransform.MIN_VALUE) < 0) return Integer.MIN_VALUE; if (value.compareTo(LongTransform.MAX_VALUE) > 0) return Integer.MAX_VALUE; return value.intValue(); } public Object inverseTransform(long pixel, long pixels) { BigDecimal ppm = new BigDecimal(Long.toString(pixels), MathContext.DECIMAL128); ppm = ppm.divide(new BigDecimal(Long.toString(range), MathContext.DECIMAL128), MathContext.DECIMAL128); BigDecimal value = new BigDecimal(Long.toString(pixel), MathContext.DECIMAL128); value = value.divide(ppm, MathContext.DECIMAL128); value = value.add(new BigDecimal(Long.toString(offset), MathContext.DECIMAL128), MathContext.DECIMAL128); return new Long(value.longValue()); } }