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

View differences:

DwgArc.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.dwg.IDwgExtrusionable;
47 50
import com.iver.cit.jdwglib.util.AcadExtrusionCalculator;
48 51
import com.iver.cit.jdwglib.util.FMapUtil;
......
54 57
 * @author jmorell
55 58
 */
56 59
public class DwgArc extends DwgObject 
57
	implements IDwgExtrusionable, IDwg3DTestable, IDwg2FMap {
60
	implements IDwgExtrusionable, IDwg3DTestable, IDwg2FMap, IDwgBlockMember {
58 61
	
59 62
	private double[] center;
60 63
	private double radius;
......
301 304
	public double getZ() {
302 305
		return getCenter()[2];
303 306
	}
307

  
308
	public void transform2Block(double[] bPoint, Point2D insPoint, double[] scale, double rot, List dwgObjectsWithoutBlocks, DwgFile callBack) {
309
		double[] center = getCenter();
310
		Point2D pointAux = new Point2D.Double(center[0] - bPoint[0], 
311
											center[1] - bPoint[1]);
312
		double laX = insPoint.getX() + 
313
			((pointAux.getX()*scale[0])*Math.cos(rot) + 
314
		    (pointAux.getY()*scale[1])*(-1)*Math.sin(rot));
315
		double laY = insPoint.getY() + 
316
			((pointAux.getX()*scale[0])*Math.sin(rot) + 
317
					(pointAux.getY()*scale[1])*Math.cos(rot));
318
		double laZ = center[2] * scale[2];
319
		double[] transformedCenter = new double[]{laX, laY, laZ};
320
		
321
		double radius = getRadius();         
322
		double transformedRadius = radius * scale[0];
323
		double initAngle = getInitAngle();
324
		double endAngle = getEndAngle();
325
        double transformedInitAngle = initAngle + rot;
326
        if (transformedInitAngle<0) {
327
            transformedInitAngle = transformedInitAngle + (2*Math.PI);
328
        } else if (transformedInitAngle>(2*Math.PI)) {
329
            transformedInitAngle = transformedInitAngle - (2*Math.PI);
330
        }
331
        double transformedEndAngle = endAngle + rot;
332
        if (transformedEndAngle<0) {
333
            transformedEndAngle = transformedEndAngle + (2*Math.PI);
334
        } else if (transformedEndAngle>(2*Math.PI)) {
335
            transformedEndAngle = transformedEndAngle - (2*Math.PI);
336
        }
337
        
338
		setCenter(transformedCenter);
339
		setRadius(transformedRadius);
340
		setInitAngle(transformedInitAngle);
341
		setEndAngle(transformedEndAngle);
342
		dwgObjectsWithoutBlocks.add(this);
343
		
344
	}
304 345
}

Also available in: Unified diff