Revision 9843 trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgEllipse.java

View differences:

DwgEllipse.java
36 36

  
37 37
import java.awt.geom.Point2D;
38 38
import java.util.ArrayList;
39
import java.util.List;
39 40

  
40 41
import com.iver.cit.gvsig.fmap.core.FPolyline2D;
41 42
import com.iver.cit.gvsig.fmap.core.FShape;
43
import com.iver.cit.jdwglib.dwg.DwgFile;
42 44
import com.iver.cit.jdwglib.dwg.DwgObject;
43 45
import com.iver.cit.jdwglib.dwg.DwgUtil;
44 46
import com.iver.cit.jdwglib.dwg.IDwg2FMap;
45 47
import com.iver.cit.jdwglib.dwg.IDwg3DTestable;
48
import com.iver.cit.jdwglib.dwg.IDwgBlockMember;
46 49
import com.iver.cit.jdwglib.util.FMapUtil;
47 50
import com.iver.cit.jdwglib.util.GisModelCurveCalculator;
48 51

  
......
52 55
 * @author jmorell
53 56
 */
54 57
public class DwgEllipse extends DwgObject 
55
	implements IDwg3DTestable, IDwg2FMap{
58
	implements IDwg3DTestable, IDwg2FMap, IDwgBlockMember{
56 59
	public DwgEllipse(int index) {
57 60
		super(index);
58 61
		// TODO Auto-generated constructor stub
......
276 279
	public String toString(){
277 280
		return "Ellipse";
278 281
	}
282
	public void transform2Block(double[] bPoint, Point2D insPoint, double[] scale, double rot, List dwgObjectsWithoutBlocks, DwgFile callBack) {
283
		double[] center = getCenter();
284
		Point2D pointAux = new Point2D.Double(center[0] - bPoint[0], 
285
											center[1] - bPoint[1]);
286
		double laX = insPoint.getX() + 
287
			((pointAux.getX()*scale[0])*Math.cos(rot) + 
288
				(pointAux.getY()*scale[1])*(-1)*Math.sin(rot));
289
		double laY = insPoint.getY() + 
290
			((pointAux.getX()*scale[0])*Math.sin(rot) +
291
					(pointAux.getY()*scale[1])*Math.cos(rot));
292
		double laZ = center[2] * scale[2];
293
		double[] transformedCenter = new double[]{laX, laY, laZ};
294
		double[] majorAxisVector = getMajorAxisVector();
295
		double[] transformedMajorAxisVector = new double[]{majorAxisVector[0] * scale[0], 
296
				majorAxisVector[1] * scale[1],
297
				majorAxisVector[2] * scale[2]};
298
		//TODO: Rotar un ?ngulo rot el vector majorAxisVector fijado en
299
		// center.
300
		double axisRatio = getAxisRatio();
301
		double transformedAxisRatio = axisRatio;
302
		double initAngle = getInitAngle();
303
		double endAngle = getEndAngle();
304
        double transformedInitAngle = initAngle + rot;
305
        if (transformedInitAngle<0) {
306
            transformedInitAngle = transformedInitAngle + (2*Math.PI);
307
        } else if (transformedInitAngle>(2*Math.PI)) {
308
            transformedInitAngle = transformedInitAngle - (2*Math.PI);
309
        }
310
        double transformedEndAngle = endAngle + rot;
311
        if (transformedEndAngle<0) {
312
            transformedEndAngle = transformedEndAngle + (2*Math.PI);
313
        } else if (transformedEndAngle>(2*Math.PI)) {
314
            transformedEndAngle = transformedEndAngle - (2*Math.PI);
315
        }
316
		setCenter(transformedCenter);
317
		setMajorAxisVector(transformedMajorAxisVector);
318
		setAxisRatio(transformedAxisRatio);
319
		setInitAngle(transformedInitAngle);
320
		setEndAngle(transformedEndAngle);
321
		dwgObjectsWithoutBlocks.add(this);
322
	}
279 323
}

Also available in: Unified diff