Revision 10820 trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgMeshPolyline.java

View differences:

DwgMeshPolyline.java
45 45
*
46 46
* $Id$
47 47
* $Log$
48
* Revision 1.3  2007-03-06 19:39:38  azabala
48
* Revision 1.4  2007-03-20 19:57:08  azabala
49
* source code cleaning
50
*
51
* Revision 1.3  2007/03/06 19:39:38  azabala
49 52
* Changes to adapt dwg 12 to general architecture
50 53
*
51 54
* Revision 1.2  2007/03/02 20:31:22  azabala
......
68 71
import java.awt.geom.Point2D;
69 72
import java.util.ArrayList;
70 73
import java.util.List;
74
import java.util.Map;
71 75

  
72
import com.iver.cit.gvsig.fmap.core.FShape;
76
import com.iver.cit.gvsig.fmap.core.IGeometry;
73 77
import com.iver.cit.jdwglib.dwg.DwgFile;
74 78
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
75 79
import com.iver.cit.jdwglib.dwg.DwgObject;
76 80
import com.iver.cit.jdwglib.dwg.IDwg2FMap;
81
import com.iver.cit.jdwglib.dwg.IDwgBlockMember;
77 82
import com.iver.cit.jdwglib.dwg.IDwgPolyline;
78 83
import com.iver.cit.jdwglib.dwg.IDwgVertex;
79
import com.iver.cit.jdwglib.util.GisModelCurveCalculator;
80 84

  
81 85
/**
82 86
 * This class is a Mesh (polyline mesh), what is different of
......
85 89
 * 
86 90
 * */
87 91
public class DwgMeshPolyline extends DwgObject
88
		implements IDwgPolyline, IDwg2FMap{
92
		implements IDwgPolyline, IDwg2FMap, IDwgBlockMember{
89 93

  
90 94
	private int flags;
91 95
	/**
......
135 139
	 * */
136 140
	private List vertices;
137 141
	
138
	
139
	
140
	
141 142
	/**
142 143
	 * Constructor 
143 144
	 * */
......
223 224
	}
224 225

  
225 226
	public void calculateGisModel(DwgFile dwgFile) {
226
	/*
227
	 int flags = getFlags();
228
//		En estas dos lineas de abajo y en el resto del metodo
229
//		se mantiene el mecanismo anterior al refactoring.
230
//		TODO: Pensar si deberiamos coger el handle completo.
231
//		Tal vez deberiamos tomar el handle completo y evaluar
232
//		a donde apuntan (pueden haber 2 handles con codigo y offset
233
//		distintos y que, sin embargo apunten al mismo objeto).
234
		int firstHandle = getFirstVertexHandle().getOffset();
235
		int lastHandle = getLastVertexHandle().getOffset();
236
		ArrayList pts = new ArrayList();
237
		ArrayList bulges = new ArrayList();
238
		double[] pt = new double[3];
239
		double bulge = 0d;
240
		
241
		DwgObject first = dwgFile.getDwgObjectFromHandle(firstHandle);
242
		DwgObject last = dwgFile.getDwgObjectFromHandle(lastHandle);
243
		if(first == null || last == null){
244
			System.out.println("Polyline2D con vertices inicial o final a null");
245
			return;
246
		}
247
		
248
		if(!(first instanceof DwgVertex2D)){
249
			System.out.println("El primer vertice de Polyline2D es "+
250
							first.getClass().getName());
251
			return;
252
		}
253
		
254
		if(!(last instanceof DwgVertex2D)){
255
			System.out.println("El primer vertice de Polyline2D es "+
256
							first.getClass().getName());
257
			return;
258
		}
259
		
260
		 int firstObjIdx = dwgFile.getIndexOf(first);
261
		 int lastObjIdx =  dwgFile.getIndexOf(last);
262
		 if(firstObjIdx == -1 || lastObjIdx == -1){
263
			 System.out.println("Calculate GIS Model: Problemas en la LinkedList: 1?="+firstObjIdx+",Ultimo="+lastObjIdx);
264
			 return;
265
		 }
266
		 
267
//		 pt = ((DwgVertex2D)first).getPoint();
268
//		 pts.add(new Point2D.Double(pt[0], pt[1]));
269
//		 bulge = ((DwgVertex2D)first).getBulge();
270
//		 bulges.add(new Double(bulge));
271
		 
272
		 for(int i = firstObjIdx; i <= lastObjIdx; i++){
273
			 DwgObject obj = dwgFile.getDwgObject(i);
274
			 if(obj instanceof DwgVertex2D){
275
			 	DwgVertex2D vertex = (DwgVertex2D) obj;
276
			 	pt = vertex.getPoint();
277
				pts.add(new Point2D.Double(pt[0], pt[1]));
278
				bulge = vertex.getBulge();
279
				bulges.add(new Double(bulge));
280
			 }else{
281
			 	System.out.println("Encontrado "+obj.getClass().getName()+" en la lista de vertices de Polyline2D");
282
			 }
283
		 }//for
284
		 
285
		if (pts.size()>0) {
286
			Point2D[] newPts = new Point2D[pts.size()];
287
			if ((flags & 0x1)==0x1) {
288
				newPts = new Point2D[pts.size()+1];
289
				for (int j=0;j<pts.size();j++) {
290
					newPts[j] = (Point2D)pts.get(j);
291
				}
292
				newPts[pts.size()] = (Point2D)pts.get(0);
293
				bulges.add(new Double(0));
294
			} else {
295
				for (int j=0;j<pts.size();j++) {
296
					newPts[j] = (Point2D)pts.get(j);
297
				}
298
			}
299
			double[] bs = new double[bulges.size()];
300
			for (int j=0;j<bulges.size();j++) {
301
				bs[j] = ((Double)bulges.get(j)).doubleValue();
302
			}
303
			setBulges(bs);
304
			Point2D[] points = GisModelCurveCalculator.
305
					calculateGisModelBulge(newPts, bs);
306
			setPts(points);
307
		} else {
308
			System.out.println("Encontrada polil?nea sin puntos ...");
309
			// TODO: No se debe mandar nunca una polil?nea sin puntos, si esto
310
			// ocurre es porque existe un error que hay que corregir ...
311
		} 
312
	  
313
	 **/
314
	
315
	
316
	
317 227
	}
318 228

  
319
	public FShape toFMapGeometry(boolean is3DFile) {
320
		
229
	 /*
230
     * By the moment, we consideer that PFacePolyline
231
     * is a Polyline3D TODO Implement real conversion
232
     * from a polyface mesh to a FMap geometry
233
     * */
234
	public IGeometry toFMapGeometry(boolean is3DFile) {
235
		//TODO Implementar la conversion de DWG Mesh a
236
		//FMap (coleccion de poligonos??)
321 237
		return null;
322 238
	}
323

  
239
	/* (non-Javadoc)
240
	 * @see com.iver.cit.jdwglib.dwg.IDwg2FMap#toFMapString(boolean)
241
	 */
324 242
	public String toFMapString(boolean is3DFile) {
325
		return "Polyline MESH";
243
		if(is3DFile)
244
			return "FPolyline3D";
245
		else
246
			return "FPolyline2D";
326 247
	}
248
	
249
	public String toString(){
250
		return "MeshPolyline";
251
	}
327 252

  
328 253
	public List getVertices() {
329 254
		return vertices;
......
350 275
	}
351 276

  
352 277
	public void setMDensity(int density) {
353
		// TODO Auto-generated method stub
354
		
278
		this.mVerticies = density;
355 279
	}
356 280

  
357 281
	public void setNDensity(int density) {
358
		// TODO Auto-generated method stub
359
		
282
		this.nVerticies = density;
360 283
	}
361 284

  
362 285
	public void addVertex(IDwgVertex vertex) {
......
364 287
		
365 288
	}
366 289

  
290
	public void transform2Block(double[] bPoint, Point2D insPoint, 
291
			double[] scale, double rot, 
292
			List dwgObjectsWithoutBlocks, 
293
			Map handleObjWithoutBlocks, DwgFile callBack) {
294
		
295
		DwgPolyline3D transformedEntity = null;
296
		List vertices = this.getVertices();
297
		
298
		if (vertices != null) {
299
		    List transformedVertices = new ArrayList();
300
			for (int i=0;i < vertices.size();i++) {
301
				double[] pointAux = null;
302
			    pointAux = new double[]{((double[]) vertices.get(i))[0] - bPoint[0],
303
			    		((double[]) vertices.get(i))[1] - bPoint[1]};
304
			    
305
				double laX = insPoint.getX() + ((pointAux[0] * scale[0])*Math.cos(rot) + (pointAux[1]*scale[1])*(-1)*Math.sin(rot));
306
				double laY = insPoint.getY() + ((pointAux[0]*scale[0])*Math.sin(rot) + (pointAux[1]*scale[1])*Math.cos(rot));
307
				double laZ = ((double[]) vertices.get(i))[2] - bPoint[2];
308
				transformedVertices.add(new double[]{laX, laY, laZ});
309
			}//for
310
			transformedEntity = (DwgPolyline3D)this.clone();
311
			transformedEntity.setPts(transformedVertices);
312
			dwgObjectsWithoutBlocks.add(transformedEntity);
313
			handleObjWithoutBlocks.put(new Integer(transformedEntity.getHandle().getOffset()), transformedEntity);
314
		}
315
	}
367 316
}
368 317

  

Also available in: Unified diff