Revision 1853

View differences:

trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/dwg/DwgMemoryDriver.java
281 281
				int[] lastVertexHandle = (int[])data.getValue();
282 282
				data = entity.getDwgObjectSpecificDataItem("SEQEND_HANDLE");
283 283
				int[] seqendHandle = (int[])data.getValue();
284
				if (firstVertexHandle.length==4) {
285
					//System.out.println("firstVertexHandle[3] = " + firstVertexHandle[3]);
286
					//System.out.println("lastVertexHandle[3] = " + lastVertexHandle[3]);
287
				} else if (firstVertexHandle.length==3) {
288
					//System.out.println("firstVertexHandle[2] = " + firstVertexHandle[2]);
289
					//System.out.println("lastVertexHandle[2] = " + lastVertexHandle[2]);
290
				}
291 284
				//int vertexNumber = (lastVertexHandle-firstVertexHandle)+1;
292 285
				int vertexNumber = calculateVertexNumber(firstVertexHandle, lastVertexHandle);
293
				// Este if es para evitar algunas poil?neas raras. Luego habr? que
294
				// quitarlo y afrontar el problema ...
295
				if (vertexNumber>0) {
296
					System.out.println("vertexNumber = " + vertexNumber);
297
					Point2D[] pts = new Point2D[vertexNumber];
298
					double[] pt = new double[2];
299
					
300
					// Buscando el primer v?rtice ...
301
					for (int j=0;j<dwgObjects.size();j++) {
302
						DwgObject obj = (DwgObject)dwgObjects.get(j);
303
						Vector handle = obj.getHandle();
304
						if (handle.size()==firstVertexHandle.length) {
305
							if (handle.size()==3) {
306
								if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2]) {
307
									for (int k=0; k<vertexNumber; k++) {
308
										DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
309
										data = vertex.getDwgObjectSpecificDataItem("POINT");
310
										pt = (double[])data.getValue();
311
										// Este if es para evitar algunas poil?neas raras. Luego habr? que
312
										// quitarlo y afrontar el problema ...
313
										/*if (data==null) {
314
											pt = new double[]{0.0, 0.0};
315
										} else {
316
											pt = (double[])data.getValue();
317
										}*/
318
										pts[k] = new Point2D.Double(pt[0], pt[1]);
319
									}
286
				//System.out.println("vertexNumber = " + vertexNumber);
287
				Point2D[] pts = new Point2D[vertexNumber];
288
				double[] pt = new double[2];
289
				
290
				// Buscando el primer v?rtice ...
291
				for (int j=0;j<dwgObjects.size();j++) {
292
					DwgObject obj = (DwgObject)dwgObjects.get(j);
293
					Vector handle = obj.getHandle();
294
					if (handle.size()==firstVertexHandle.length) {
295
						if (((Integer)handle.get(handle.size()-2)).intValue()==firstVertexHandle[handle.size()-2] && ((Integer)handle.get(handle.size()-1)).intValue()==firstVertexHandle[handle.size()-1]) {
296
							for (int k=0; k<vertexNumber; k++) {
297
								DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
298
								data = vertex.getDwgObjectSpecificDataItem("POINT");
299
								pt = (double[])data.getValue();
300
								pts[k] = new Point2D.Double(pt[0], pt[1]);
301
							}
302
						}
303
					}
304
					/*if (handle.size()==firstVertexHandle.length) {
305
						if (handle.size()==3) {
306
							if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2]) {
307
								for (int k=0; k<vertexNumber; k++) {
308
									DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
309
									data = vertex.getDwgObjectSpecificDataItem("POINT");
310
									pt = (double[])data.getValue();
311
									pts[k] = new Point2D.Double(pt[0], pt[1]);
320 312
								}
321
							} else if (handle.size()==4) {
322
								if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2] && ((Integer)handle.get(3)).intValue()==firstVertexHandle[3]) {
323
									for (int k=0; k<vertexNumber; k++) {
324
										DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
325
										data = vertex.getDwgObjectSpecificDataItem("POINT");
326
										pt = (double[])data.getValue();
327
										// Este if es para evitar algunas poil?neas raras. Luego habr? que
328
										// quitarlo y afrontar el problema ...
329
										/*if (data==null) {
330
											pt = new double[]{0.0, 0.0};
331
										} else {
332
											pt = (double[])data.getValue();
333
										}*/
334
										pts[k] = new Point2D.Double(pt[0], pt[1]);
335
									}
313
							}
314
						} else if (handle.size()==4) {
315
							if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2] && ((Integer)handle.get(3)).intValue()==firstVertexHandle[3]) {
316
								for (int k=0; k<vertexNumber; k++) {
317
									DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
318
									data = vertex.getDwgObjectSpecificDataItem("POINT");
319
									pt = (double[])data.getValue();
320
									pts[k] = new Point2D.Double(pt[0], pt[1]);
336 321
								}
337
							} else {
338
								//
339 322
							}
323
						} else {
324
							//
340 325
						}
326
					}*/
327
				}
328
				Point2D[] newPts = new Point2D[pts.length];
329
				if (flags==0 || flags==2 || flags==4 || flags==8 || flags==16 || flags==32 || flags==64 || flags==128) {
330
					newPts = pts;
331
				} else if (flags==1 || flags==3 || flags==5 || flags==9 || flags==17 || flags==33 || flags==65 || flags==129) {
332
					newPts = new Point2D[pts.length+1];
333
					for (int j=0;j<pts.length;j++) {
334
						newPts[j] = pts[j];
341 335
					}
342
					Point2D[] newPts = new Point2D[pts.length];
343
					if (flags==0 || flags==2 || flags==4 || flags==8 || flags==16 || flags==32 || flags==64 || flags==128) {
344
						newPts = pts;
345
					} else if (flags==1 || flags==3 || flags==5 || flags==9 || flags==17 || flags==33 || flags==65 || flags==129) {
346
						newPts = new Point2D[pts.length+1];
347
						for (int j=0;j<pts.length;j++) {
348
							newPts[j] = pts[j];
349
						}
350
						newPts[pts.length] = pts[0];
351
					}
352
					FPolyline2D pline = createPolyline2D(newPts);
353
					//pto = (Point2D.Double)point.get(0);
354
					//FShape nuevoShp;
355
	                auxRow[ID_FIELD_ID] = ValueFactory.createValue(i);
356
	                auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("dxfEntity"));
357
	                auxRow[ID_FIELD_LAYER] = ValueFactory.createValue(new String("layer"));
358
	                auxRow[ID_FIELD_COLOR] = ValueFactory.createValue(0);
359
	            	auxRow[ID_FIELD_ELEVATION] = ValueFactory.createValue(0.0);
360
	            	auxRow[ID_FIELD_THICKNESS] = ValueFactory.createValue(0.0);
361
	            	// Attributes
362
	            	/*for (int j=0;j<nAtt;j++) {
363
	    				String[] attributes = new String[2];
364
	    				attributes = (String[])featureMaker.getAttributes().get(j);
365
	                	auxRow[9+j] = ValueFactory.createValue(new String((String)attributes[1]));
366
	                	if (!fea.getProp(attributes[0]).equals(attributes[1])) {
367
	                		auxRow[9+j] = ValueFactory.createValue(new String(fea.getProp(attributes[0])));
368
	                	}
369
	            	}*/
370
					addShape(pline, auxRow);
336
					newPts[pts.length] = pts[0];
371 337
				}
338
				FPolyline2D pline = createPolyline2D(newPts);
339
				//pto = (Point2D.Double)point.get(0);
340
				//FShape nuevoShp;
341
                auxRow[ID_FIELD_ID] = ValueFactory.createValue(i);
342
                auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("dxfEntity"));
343
                auxRow[ID_FIELD_LAYER] = ValueFactory.createValue(new String("layer"));
344
                auxRow[ID_FIELD_COLOR] = ValueFactory.createValue(0);
345
            	auxRow[ID_FIELD_ELEVATION] = ValueFactory.createValue(0.0);
346
            	auxRow[ID_FIELD_THICKNESS] = ValueFactory.createValue(0.0);
347
            	// Attributes
348
            	/*for (int j=0;j<nAtt;j++) {
349
    				String[] attributes = new String[2];
350
    				attributes = (String[])featureMaker.getAttributes().get(j);
351
                	auxRow[9+j] = ValueFactory.createValue(new String((String)attributes[1]));
352
                	if (!fea.getProp(attributes[0]).equals(attributes[1])) {
353
                		auxRow[9+j] = ValueFactory.createValue(new String(fea.getProp(attributes[0])));
354
                	}
355
            	}*/
356
				addShape(pline, auxRow);
372 357
			} else if (entity.getType()==0x10) {
373 358
				DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CLOSED_FLAGS");
374 359
				int flags = ((Integer)data.getValue()).intValue();
......
378 363
				int[] lastVertexHandle = (int[])data.getValue();
379 364
				data = entity.getDwgObjectSpecificDataItem("SEQEND_HANDLE");
380 365
				int[] seqendHandle = (int[])data.getValue();
381
				if (firstVertexHandle.length==4) {
382
					//System.out.println("firstVertexHandle[3] = " + firstVertexHandle[3]);
383
					//System.out.println("lastVertexHandle[3] = " + lastVertexHandle[3]);
384
				} else if (firstVertexHandle.length==3) {
385
					//System.out.println("firstVertexHandle[2] = " + firstVertexHandle[2]);
386
					//System.out.println("lastVertexHandle[2] = " + lastVertexHandle[2]);
387
				}
388 366
				//int vertexNumber = (lastVertexHandle-firstVertexHandle)+1;
389 367
				int vertexNumber = calculateVertexNumber(firstVertexHandle, lastVertexHandle);
390 368
				Point2D[] pts = new Point2D[vertexNumber];
......
394 372
				for (int j=0;j<dwgObjects.size();j++) {
395 373
					DwgObject v = (DwgObject)dwgObjects.get(j);
396 374
					Vector handle = v.getHandle();
397
					if (handle.size()==4) {
375
					if (((Integer)handle.get(handle.size()-2)).intValue()==firstVertexHandle[handle.size()-2] && ((Integer)handle.get(handle.size()-1)).intValue()==firstVertexHandle[handle.size()-1]) {
376
						for (int k=0; k<vertexNumber; k++) {
377
							DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
378
							data = vertex.getDwgObjectSpecificDataItem("POINT");
379
							pt = (double[])data.getValue();
380
							pts[k] = new Point2D.Double(pt[0], pt[1]);
381
						}
382
					}
383
					/*if (handle.size()==4) {
398 384
						if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2] && ((Integer)handle.get(3)).intValue()==firstVertexHandle[3]) {
399 385
							for (int k=0; k<vertexNumber; k++) {
400
								//System.out.println("k = " + k);
401 386
								DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
402 387
								data = vertex.getDwgObjectSpecificDataItem("POINT");
403
								//System.out.println("pt = " + pt);
404
								//System.out.println("data = " + data);
405
								//System.out.println("(double[])data.getValue() = " + (double[])data.getValue());
406 388
								pt = (double[])data.getValue();
407 389
								pts[k] = new Point2D.Double(pt[0], pt[1]);
408 390
							}
......
410 392
					} else if (handle.size()==3) {
411 393
						if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2]) {
412 394
							for (int k=0; k<vertexNumber; k++) {
413
								//System.out.println("k = " + k);
414 395
								DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
415 396
								data = vertex.getDwgObjectSpecificDataItem("POINT");
416
								//System.out.println("pt = " + pt);
417
								//System.out.println("data = " + data);
418
								//System.out.println("(double[])data.getValue() = " + (double[])data.getValue());
419 397
								pt = (double[])data.getValue();
420 398
								pts[k] = new Point2D.Double(pt[0], pt[1]);
421 399
							}
422 400
						}
423
					}
401
					}*/
424 402
				}
425 403
				Point2D[] newPts = new Point2D[pts.length];
426 404
				if (flags==0 || flags==2 || flags==4 || flags==8 || flags==16 || flags==32 || flags==64 || flags==128) {
......
873 851
	}
874 852
	
875 853
	private FPolyline2D createPolyline2D(Point2D[] pts) {
876
		//System.out.println("pts.length = " + pts.length);
877 854
		GeneralPathX genPathX = new GeneralPathX();
878 855
		genPathX.moveTo(pts[0].getX(), pts[0].getY());
879 856
		for (int i=1; i<pts.length; i++) {
880
			//System.out.println("pts[i].getX() = " + pts[i].getX());
881 857
			genPathX.lineTo(pts[i].getX(), pts[i].getY());
882 858
		}
883 859
		return new FPolyline2D(genPathX);
......
894 870
	}
895 871
	
896 872
	private int calculateVertexNumber(int[] firstVertexHandle, int[] lastVertexHandle) {
897
		if (firstVertexHandle.length==3 && lastVertexHandle.length==3) {
873
		/*System.out.println("firstVertexHandle[0]" + firstVertexHandle[0]);
874
		System.out.println("firstVertexHandle[1]" + firstVertexHandle[1]);
875
		System.out.println("firstVertexHandle[2]" + firstVertexHandle[2]);
876
		System.out.println("firstVertexHandle[3]" + firstVertexHandle[3]);
877
		System.out.println("lastVertexHandle[0]" + lastVertexHandle[0]);
878
		System.out.println("lastVertexHandle[1]" + lastVertexHandle[1]);
879
		System.out.println("lastVertexHandle[2]" + lastVertexHandle[2]);
880
		System.out.println("lastVertexHandle[3]" + lastVertexHandle[3]);*/
881
		if (firstVertexHandle.length==lastVertexHandle.length) {
882
			if (firstVertexHandle[firstVertexHandle.length-2]==lastVertexHandle[firstVertexHandle.length-2]) {
883
				return (lastVertexHandle[firstVertexHandle.length-1]-firstVertexHandle[firstVertexHandle.length-1]+1);
884
			} else {
885
				int aux = 255-firstVertexHandle[firstVertexHandle.length-1]+1;
886
				int aux2 = lastVertexHandle[firstVertexHandle.length-1]+1;
887
				int aux3 = (lastVertexHandle[firstVertexHandle.length-2]-firstVertexHandle[firstVertexHandle.length-2]-1)*255;
888
				int vn = aux + aux2 + aux3;
889
				return vn;
890
			}
891
		// Fallar? en polil?neas de m?s de 500 v?rtices ...
892
		} else if (firstVertexHandle.length==(lastVertexHandle.length-1)) {
893
			int aux = 255-firstVertexHandle[firstVertexHandle.length-1]+1;
894
			int aux2 = lastVertexHandle[firstVertexHandle.length]+1;
895
			int vn = aux + aux2;
896
			return vn;
897
		} else {
898
			System.out.println("ERROR: firstVertexHandle y lastVertexHandle tienen tama?os inesperados");
899
			return 0;
900
		}
901
		/*if (firstVertexHandle.length==3 && lastVertexHandle.length==3) {
898 902
			return (lastVertexHandle[2]-firstVertexHandle[2]+1);
899 903
		} else if (firstVertexHandle.length==4 && lastVertexHandle.length==4) {
900 904
			if (firstVertexHandle[2]==lastVertexHandle[2]) {
901
				System.out.println("firstVertexHandle[2]" + firstVertexHandle[2]);
902
				System.out.println("firstVertexHandle[3]" + firstVertexHandle[3]);
903
				System.out.println("lastVertexHandle[2]" + lastVertexHandle[2]);
904
				System.out.println("lastVertexHandle[3]" + lastVertexHandle[3]);
905
				System.out.println("lastVertexHandle[3]-firstVertexHandle[3]+1 = " + (lastVertexHandle[3]-firstVertexHandle[3]+1));
906 905
				return (lastVertexHandle[3]-firstVertexHandle[3]+1);
907 906
			} else {
908 907
				int vn = 0;
909
				int aux = 255-firstVertexHandle[3];
910
				int aux2 = lastVertexHandle[3];
908
				int aux = 255-firstVertexHandle[3]+1;
909
				int aux2 = lastVertexHandle[3]+1;
911 910
				int aux3 = (lastVertexHandle[2]-firstVertexHandle[2]-1)*255;
912 911
				vn = aux + aux2 + aux3;
913
				System.out.println("vn = " + vn);
914
				return vn-1;
912
				return vn;
915 913
			}
916 914
		} else if (firstVertexHandle.length==3 && lastVertexHandle.length==4) {
917 915
			int vn = 0;
918
			int aux = 255-firstVertexHandle[2];
919
			int aux2 = lastVertexHandle[3];
916
			int aux = 255-firstVertexHandle[2]+1;
917
			int aux2 = lastVertexHandle[3]+1;
920 918
			vn = aux + aux2;
921
			return vn-1;
919
			//System.out.println("vn = " + vn);
920
			return vn;
922 921
		} else {
923 922
			System.out.println("ERROR: firstVertexHandle y lastVertexHandle tienen tama?os inesperados");
924 923
			return 0;
925
		}
924
		}*/
926 925
	}
927 926

  
928 927
	/* (non-Javadoc)

Also available in: Unified diff