Revision 10632 trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgLwPolyline.java

View differences:

DwgLwPolyline.java
35 35
package com.iver.cit.jdwglib.dwg.objects;
36 36

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

  
......
47 48
import com.iver.cit.jdwglib.dwg.IDwgBlockMember;
48 49
import com.iver.cit.jdwglib.dwg.IDwgExtrusionable;
49 50
import com.iver.cit.jdwglib.dwg.IDwgPolyline;
51
import com.iver.cit.jdwglib.dwg.IDwgVertex;
50 52
import com.iver.cit.jdwglib.util.AcadExtrusionCalculator;
51 53
import com.iver.cit.jdwglib.util.FMapUtil;
52 54
import com.iver.cit.jdwglib.util.GisModelCurveCalculator;
......
59 61
public class DwgLwPolyline extends DwgObject 
60 62
	implements IDwgPolyline, IDwgExtrusionable, 
61 63
	IDwg3DTestable, IDwg2FMap, IDwgBlockMember{
62
	public DwgLwPolyline(int index) {
63
		super(index);
64
		// TODO Auto-generated constructor stub
65
	}
64
	
66 65
	private int flag;
67 66
	private double constWidth;
68 67
	private double elevation;
69 68
	private double thickness;
70 69
	private double[] normal;
71
	private Point2D[] vertices;
70
	private List vertices;
72 71
	/*
73 72
	 *The bulge is the tangent of 1/4 of the included angle for the arc 
74 73
	 *between the selected vertex and the next vertex in the polyline's vertex list. 
......
83 82
	private double[][] widths;
84 83
	
85 84
	
85
	public DwgLwPolyline(int index) {
86
		super(index);
87
		vertices = new ArrayList();
88
	}
86 89
	/**
87 90
	 * @return Returns the bulges.
88 91
	 */
......
110 113
	/**
111 114
	 * @return Returns the vertices.
112 115
	 */
113
	public Point2D[] getVertices() {
116
	public List getVertices() {
114 117
		return vertices;
115 118
	}
116 119
	/**
117 120
	 * @param vertices The vertices to set.
118 121
	 */
119
	public void setVertices(Point2D[] vertices) {
122
	public void setVertices(List vertices) {
120 123
		this.vertices = vertices;
121 124
	}
122 125
    /**
......
215 218
		if (getVertices() == null)
216 219
			return;
217 220
		int flags = getFlag();
218
		Point2D[] pts = getVertices();
221
		List pts = getVertices();
219 222
		double[] bulges = getBulges();
220
		Point2D[] newPts = new Point2D[pts.length];
223
		List newPts = new ArrayList();
221 224
		double[] newBulges = null;
222 225
		if(bulges != null){
223 226
			newBulges = new double[bulges.length];
224 227
			System.arraycopy(bulges, 0, newBulges, 0, bulges.length);
225 228
		}else{
226
			bulges = new double[pts.length ];
229
			bulges = new double[pts.size() ];
227 230
			newBulges = new double[bulges.length];
228 231
			//dwg spec says numVertex (numSegments + 1)
229 232
			//TODO Check this
......
235 238
		// TODO: Aqu? pueden existir casos no contemplados ...
236 239
//        System.out.println("flags = " + flags);
237 240
        if (flags==512 || flags==776 || flags==768) {//closed
238
			newPts = new Point2D[pts.length+1];
239 241
			newBulges = new double[bulges.length+1];
240
			for (int j=0;j<pts.length;j++) {
241
				newPts[j] = (Point2D)pts[j];
242
			for (int j=0;j<pts.size();j++) {
243
				newPts.add(pts.get(j));
242 244
			}
243
			newPts[pts.length] = (Point2D)pts[0];
244
			newBulges[pts.length] = 0;
245
			newPts.add(pts.get(0));
246
			newBulges[pts.size()] = 0;
245 247
		} else {
246
			for (int j=0;j<pts.length;j++) {
247
				newPts[j] = (Point2D)pts[j];
248
			for (int j=0;j<pts.size();j++) {
249
				newPts.add(pts.get(j));
248 250
			}
249 251
		}
250
		if (pts.length>0) {
252
		if (newPts.size() > 0) {
251 253
			setBulges(newBulges);
252
			Point2D[] points = GisModelCurveCalculator.calculateGisModelBulge(newPts, newBulges);
254
			List points = GisModelCurveCalculator.calculateGisModelBulge(newPts, newBulges);
253 255
			setVertices(points);
254
		} else {
255
//			System.out.println("Encontrada polil?nea sin puntos ...");
256
			// TODO: No se debe mandar nunca una polil?nea sin puntos, si esto
257
			// ocurre es porque existe un error que hay que corregir ...
258
		}
256
		} 
257
//		if (pts.size() > 0) {
258
//			setBulges(newBulges);
259
//			List points = GisModelCurveCalculator.calculateGisModelBulge(newPts, newBulges);
260
//			setVertices(points);
261
//		} 
262
//		else {
263
////			System.out.println("Encontrada polil?nea sin puntos ...");
264
//			// TODO: No se debe mandar nunca una polil?nea sin puntos, si esto
265
//			// ocurre es porque existe un error que hay que corregir ...
266
//		}
259 267
	}
260 268
	/* (non-Javadoc)
261 269
	 * @see com.iver.cit.jdwglib.dwg.IDwgExtrusionable#applyExtrussion()
......
263 271
	public void applyExtrussion() {
264 272
		if (getVertices() == null)
265 273
			return;
266
		 Point2D[] vertices = getVertices();
274
		 List vertices = getVertices();
267 275
         double[] lwPolylineExt = getNormal();
268 276
         // Normals and Extrusions aren`t the same
269 277
         if (lwPolylineExt[0]==0 && lwPolylineExt[1]==0 && lwPolylineExt[2]==0) 
270 278
        	 lwPolylineExt[2] = 1.0;
271 279
         
272 280
         double elev = getElevation();
273
         double[][] lwPolylinePoints3D = new double[vertices.length][3];
274
         for (int j=0;j<vertices.length;j++) {
275
             lwPolylinePoints3D[j][0] = vertices[j].getX();
276
             lwPolylinePoints3D[j][1] = vertices[j].getY();
277
             lwPolylinePoints3D[j][2] = elev;
278
             lwPolylinePoints3D[j] = AcadExtrusionCalculator.extrude2(lwPolylinePoints3D[j], lwPolylineExt);
281
         List lwPolylinePoints3D = new ArrayList();
282
         for (int j=0;j<vertices.size();j++) {
283
        	 double[] point = new double[3];
284
             point[0] = ((double[])vertices.get(j))[0];
285
             point[1] = ((double[])vertices.get(j))[1];
286
             point[2] = elev;
287
             lwPolylinePoints3D.add(AcadExtrusionCalculator.
288
            		 extrude2(point, lwPolylineExt));
279 289
         }
280 290
         setElevation(elev);
281
         for (int j=0;j<vertices.length;j++) {
282
             vertices[j] = new Point2D.Double(lwPolylinePoints3D[j][0], lwPolylinePoints3D[j][1]);
291
         List newVertices = new ArrayList();
292
         for (int j=0;j<vertices.size();j++) {
293
        	 double[] point = (double[]) lwPolylinePoints3D.get(j);
294
             newVertices.add(new double[]{point[0], point[1]});
283 295
         }
284
         setVertices(vertices);
296
         setVertices(newVertices);
285 297
	}
286 298
	/* (non-Javadoc)
287 299
	 * @see com.iver.cit.jdwglib.dwg.IDwg3DTestable#has3DData()
......
294 306
	}
295 307
	public FShape toFMapGeometry(boolean is3DFile) {
296 308
		FPolyline2D lwpline = null;
297
		Point2D[] pts = getVertices();
309
		List pts = getVertices();
298 310
		double elev = getElevation();
299
		if (pts != null) {
311
		if (pts != null && pts.size() > 0) {
300 312
			
301 313
			if (is3DFile) {
302
				double[][] pline3D = new double[pts.length][3];
303
				for (int j = 0; j < pts.length; j++) {
304
					pline3D[j][0] = pts[j].getX();
305
					pline3D[j][1] = pts[j].getY();
306
					pline3D[j][2] = elev;
314
				List pline3D = new ArrayList();
315
				for (int j = 0; j < pts.size(); j++) {
316
					double[] pt = new double[3];
317
					pt[0] = ((double[])pts.get(j))[0];
318
					pt[1] = ((double[])pts.get(j))[1];
319
					pt[2] = elev;
320
					pline3D.add(pt);
307 321
				}
308 322
				lwpline = FMapUtil.points3DToFPolyline3D(pline3D);
309 323
			} else {
......
330 344
			List dwgObjectsWithoutBlocks, 
331 345
			Map handleObjWithoutBlocks, DwgFile callBack) {
332 346
		DwgLwPolyline transformedEntity = null;
333
		Point2D[] vertices = this.getVertices();
347
		List vertices = this.getVertices();
334 348
		if (vertices!=null) {
335
		    Point2D[] transformedVertices = new Point2D[vertices.length];
336
			for (int i=0;i<vertices.length;i++) {
337
			    Point2D pointAux = new Point2D.Double(vertices[i].getX() - bPoint[0], vertices[i].getY() - bPoint[1]);
338
				double laX = insPoint.getX() + ((pointAux.getX()*scale[0])*Math.cos(rot) + (pointAux.getY()*scale[1])*(-1)*Math.sin(rot));
339
				double laY = insPoint.getY() + ((pointAux.getX()*scale[0])*Math.sin(rot) + (pointAux.getY()*scale[1])*Math.cos(rot));
340
				transformedVertices[i] = new Point2D.Double(laX, laY);
349
		    List transformedVertices = new ArrayList();
350
			for (int i=0; i< vertices.size(); i++) {
351
				double[] point = (double[]) vertices.get(i);
352
				double[] pointAux = new double[]{point[0] - bPoint[0], 
353
							point[1] - bPoint[1]};
354
				double laX = insPoint.getX() + ((pointAux[0]*scale[0])*Math.cos(rot) + (pointAux[1]*scale[1])*(-1)*Math.sin(rot));
355
				double laY = insPoint.getY() + ((pointAux[0]*scale[0])*Math.sin(rot) + (pointAux[1]*scale[1])*Math.cos(rot));
356
				transformedVertices.add(new double[]{laX, laY});
341 357
			}
342 358
			transformedEntity = (DwgLwPolyline)this.clone();
343 359
			transformedEntity.setVertices(transformedVertices);
......
369 385
		myObj.setWidths(widths);
370 386

  
371 387
	}
388
	public void addVertex(IDwgVertex vertex) {
389
		vertices.add(vertex.getPoint());
390
		
391
	}
372 392

  
373 393
}

Also available in: Unified diff