Revision 15047 import/ext3D/trunk/ext3D/src/com/iver/ai2/gvsig3d/map3d/layers/FLayers3D.java

View differences:

FLayers3D.java
13 13
import com.iver.ai2.gvsig3d.cacheservices.VectorCacheService;
14 14
import com.iver.ai2.gvsig3d.gui.VectorTest;
15 15
import com.iver.ai2.gvsig3d.map3d.MapContext3D;
16
import com.iver.ai2.gvsig3d.utils.UtilCoord;
16 17
import com.iver.cit.gvsig.fmap.DriverException;
17 18
import com.iver.cit.gvsig.fmap.MapContext;
18 19
import com.iver.cit.gvsig.fmap.ViewPort;
......
166 167
			legendLyr.addLegendListener((LegendListener) this);
167 168
		}
168 169
		layer.addLayerListener((LayerListener) this);
169
		
170
		if (layer instanceof FLyrWMS) {
171
			FLyrWMS wmsLayer = (FLyrWMS) layer;
172
			wmsLayer.setSRS("EPSG:4326");
173
		}
174 170

  
171
		// if (layer instanceof FLyrWMS) {
172
		// FLyrWMS wmsLayer = (FLyrWMS) layer;
173
		// wmsLayer.setSRS("EPSG:4326");
174
		// }
175

  
175 176
		int order = addLayerByType(layer);
176 177
		Layer3DProps props3D = getLayer3DProps(layer);
177 178

  
......
343 344
					+ m_planet.getPlanetName() + "/" + props.getCacheName();
344 345
			removeCache(layerCacheDir);
345 346
		}
346
		
347

  
347 348
		// refresh layer in planet
348 349

  
349 350
		int type = props.getType();
......
524 525
		double cenLon = geoExtent.getCenterX();
525 526
		double cenLat = geoExtent.getCenterY();
526 527
		boolean gazetteer = false;
527
		
528

  
528 529
		// search for Gazetteer
529 530
		if ((geoExtent.getHeight() == 0) && (geoExtent.getWidth() == 0)) {
530 531
			cenLon = geoExtent.getX();
......
532 533
			gazetteer = true;
533 534
			// TODO: Insercion de un simbolo para situar al objeto buscado en
534 535
			// Nomenglator
535
			Vec3 posI = new Vec3(cenLat, cenLon, 0);
536
			Vec3 posE = new Vec3(cenLat, cenLon, 16000);
537
			Vec3 posT = new Vec3(cenLat, cenLon, 16100);
536

  
537
			Vec3 posI = null, posE = null, posT = null;
538
			Vec3 posIni = null, posEnd = null, posText = null;
539

  
540
			if (m_planet.getType() == Planet.PlanetType.SPHERICAL_MODE) {
541
				posI = new Vec3(cenLat, cenLon, 0);
542
				posE = new Vec3(cenLat, cenLon, 16000);
543
				posT = new Vec3(cenLat, cenLon, 16100);
544

  
545
				posIni = m_planet.convertLatLongHeightToXYZ(posI);
546
				posEnd = m_planet.convertLatLongHeightToXYZ(posE);
547
				posText = m_planet.convertLatLongHeightToXYZ(posT);
548

  
549
			} else if (m_planet.getType() == Planet.PlanetType.PLANE_MODE) {
550
				posIni = new Vec3(cenLon, cenLat, 0);
551
				posEnd = new Vec3(cenLon, cenLat, 100000);
552
				posText = new Vec3(cenLon, cenLat, 100000);
553

  
554
				System.out.println("posicion del zoom plano, longitud: "
555
						+ cenLon + "latitud: " + cenLat);
556
			}
557

  
558
			Polyline line = (Polyline) VectorTest.insertLineS(posIni, posEnd,
559
					new Vec4(1.0, 1.0, 1.0, 1.0), 0);
560
			// Text text = (Text) VectorTest.insertTextoS("Gazetteer", posText);
561
			Text text = (Text) VectorTest.insertTextoS(" Gazetteer", posText,
562
					new Vec4(1.0, 1.0, 1.0, 1.0), 3000);
563

  
538 564
			Group grupo = (Group) this.m_canvas3d.getSpecialNode(0);
539
			
540
			Vec3 posIni = m_planet.convertLatLongHeightToXYZ(posI);
541
			Vec3 posEnd = m_planet.convertLatLongHeightToXYZ(posE);
542
			
543
			Polyline line = (Polyline) VectorTest.insertLineS(posIni, posEnd, new Vec4(1.0,1.0,1.0,1.0), 0);
544
			Vec3 posText = m_planet.convertLatLongHeightToXYZ(posT);
545
//			Text text = (Text) VectorTest.insertTextoS("Gazetteer", posText);
546
			Text text = (Text) VectorTest.insertTextoS(" Gazetteer", posText, new Vec4(1.0,1.0,1.0,1.0),3000);
547
			
548 565
			grupo.addChild(line);
549 566
			grupo.addChild(text);
550
//			PositionAttitudeTransform nodeTransform = new PositionAttitudeTransform();
551
//			nodeTransform.setPosition(m_planet.convertLatLongHeightToXYZ(pos));
552
//			nodeTransform.setScale(new Vec3(1.5, 1.5, 1.5));
553
//
554
//			Vec3 posO = new Vec3(0.0, 0.0, 0.0);
555
//			nodeTransform.addChild(VectorTest.insertTextoS("O", posO));
556
//			nodeTransform.addChild(VectorTest.insertPointS(pos, new Vec4(1.0f,
557
//					1.0f, 1.0f, 1.0f), 10000));
558
//			// nodeTransform.addChild(m_canvas3d.readNodeFile("c:/modelos3d/cow.osg"));
559
//			grupo.addChild(nodeTransform);
567
			// PositionAttitudeTransform nodeTransform = new
568
			// PositionAttitudeTransform();
569
			// nodeTransform.setPosition(m_planet.convertLatLongHeightToXYZ(pos));
570
			// nodeTransform.setScale(new Vec3(1.5, 1.5, 1.5));
571
			//
572
			// Vec3 posO = new Vec3(0.0, 0.0, 0.0);
573
			// nodeTransform.addChild(VectorTest.insertTextoS("O", posO));
574
			// nodeTransform.addChild(VectorTest.insertPointS(pos, new
575
			// Vec4(1.0f,
576
			// 1.0f, 1.0f, 1.0f), 10000));
577
			// //
578
			// nodeTransform.addChild(m_canvas3d.readNodeFile("c:/modelos3d/cow.osg"));
579
			// grupo.addChild(nodeTransform);
560 580
		}
561 581
		double elevation = 0;
562
		if (gazetteer){
582
		if (gazetteer) {
563 583
			elevation = 35000;
564
		}else{
565
			
584
		} else {
585

  
566 586
			// calculate altitude
567 587
			double avLat = 0;
568 588
			if (minLat > 0.0 || maxLat < 0.0)
569 589
				avLat = Math.min(Math.abs(minLat), Math.abs(maxLat));
570 590
			double avLon = Math.min(180.0, geoExtent.getWidth());
571
			
591

  
572 592
			double planetRadius = m_planet.getRadiusEquatorial();
573 593
			double radiusLat = planetRadius * Math.cos(Math.toRadians(avLat));
574 594
			double deltaLon = Math.sqrt(2 * radiusLat * radiusLat
575 595
					* (1 - Math.cos(Math.toRadians(avLon))));
576 596
			double deltaLat = Math.sqrt(2 * planetRadius * planetRadius
577 597
					* (1 - Math.cos(Math.toRadians(geoExtent.getHeight()))));
578
			
598

  
579 599
			double zoomFactor = 1.0;
580
			elevation = (Math.max(deltaLon, deltaLat) * zoomFactor)
581
			+ maxHeight;
600
			elevation = (Math.max(deltaLon, deltaLat) * zoomFactor) + maxHeight;
582 601
		}
583 602

  
584 603
		// Calculate XYZ positions for camera. TODO: define utilities
......
600 619
			double height;
601 620
			height = Math.sqrt(difx * difx + dify * dify);
602 621

  
622
			// TESTING FOR PLANE MODE
623

  
603 624
			// EYE
604 625
			eye.setX(cenLon);
605 626
			eye.setY(cenLat);
606
			eye.setZ(height);
627
			// eye.setZ(height);
628
			eye.setZ(5000000 * 4.6);
607 629
			// CENTER
608 630
			center.setX(cenLon);
609 631
			center.setY(cenLat);
......
620 642
			// cenLat);
621 643
			Vec3 aux = new Vec3(cenLat, cenLon, elevation);
622 644
			eye = m_planet.convertLatLongHeightToXYZ(aux);
623
//			Vec3 aux1 = new Vec3((planetRadius + elevation), cenLon, cenLat);
624
//			eye = UtilCoord.GeoToCarte(aux1);
645
			// Vec3 aux1 = new Vec3((planetRadius + elevation), cenLon, cenLat);
646
			// eye = UtilCoord.GeoToCarte(aux1);
625 647
			// CENTER
626 648
			center.setX(0.0);
627 649
			center.setY(0.0);
......
633 655
		}
634 656
		Camera cam = new Camera();
635 657
		cam.setViewByLookAt(eye, center, up);
658

  
659
		UtilCoord.imprimeCamara(cam);
660

  
636 661
		m_canvas3d.setCamera(cam);
637 662
		// REPAINTING VIEWER
638 663
		if (m_canvas3d != null)
......
650 675
			Layer3DProps props3D = getLayer3DProps(lyr);
651 676
			int dataType = props3D.getType();
652 677

  
653
			if (dataType == Layer3DProps.layer3DVector)
654
				continue;
678
			if (lyr.isVisible()) {
679
				// if (true) {
680
				if (dataType == Layer3DProps.layer3DVector)
681
					continue;
655 682

  
656
			// get/create cache service
657
			FLayerCacheService cacheService = (FLayerCacheService) props3D
658
					.getCacheService();
659
			if (cacheService == null) {
660
				cacheService = new FLayerCacheService(m_planet, props3D
661
						.getCacheName(), lyr, m_viewProjection);
662
				cacheService.setCacheRootDir(Layer3DProps.m_cacheDir);
663
				props3D.setCacheService(cacheService);
664
			}
683
				// get/create cache service
684
				FLayerCacheService cacheService = (FLayerCacheService) props3D
685
						.getCacheService();
686
				if (cacheService == null) {
687
					cacheService = new FLayerCacheService(m_planet, props3D
688
							.getCacheName(), lyr, m_viewProjection);
689
					cacheService.setCacheRootDir(Layer3DProps.m_cacheDir);
690
					props3D.setCacheService(cacheService);
691
				}
665 692

  
666
			Point tileIndices = new Point(evt.getX(), evt.getY());
667
			TileNum tileNum = new TileNum(evt.getLevel(), tileIndices);
693
				Point tileIndices = new Point(evt.getX(), evt.getY());
694
				TileNum tileNum = new TileNum(evt.getLevel(), tileIndices);
668 695

  
669
			String tileFileName;
696
				String tileFileName;
670 697

  
671
			if (cacheService.intersectsLayer(tileNum)) { // extent test
672
				try {
673
					tileFileName = cacheService.getTileAsFName(tileNum);
674
				} catch (CacheServiceException e) {
675
					return;
676
				}
698
				if (cacheService.intersectsLayer(tileNum)) { // extent test
699
					try {
700
						tileFileName = cacheService.getTileAsFName(tileNum);
701
					} catch (CacheServiceException e) {
702
						return;
703
					}
677 704

  
678
				if (dataType == Layer3DProps.layer3DImage) {
679
					// float opacity = 1.0f;
680
					String fileExtension = "png";
681
					evt.getTilePagedLod().setTexture(tileFileName,
682
							fileExtension, textureStage);
683
					m_planet
684
							.setTextureOpacity(textureStage, props3D.getOpacity());
685
					textureStage++;
686
				} else {
687
					String fileExtension = "tif";
688
					evt.getTilePagedLod().setHeightField(tileFileName,
689
							fileExtension,0);
705
					if (dataType == Layer3DProps.layer3DImage) {
706
						// float opacity = 1.0f;
707
						String fileExtension = "png";
708
						evt.getTilePagedLod().setTexture(tileFileName,
709
								fileExtension, textureStage);
710
						m_planet.setTextureOpacity(textureStage, props3D
711
								.getOpacity());
712
						textureStage++;
713
					} else {
714
						String fileExtension = "tif";
715
						evt.getTilePagedLod().setHeightField(tileFileName,
716
								fileExtension, 0);
717
					}
718
				} else { // no intersection
719
					if (dataType == Layer3DProps.layer3DImage) {
720
						evt.getTilePagedLod().setTexture("", "", textureStage++);
721
					}
690 722
				}
691
			} else { // no intersection
692
				if (dataType == Layer3DProps.layer3DImage) {
693
					evt.getTilePagedLod().setTexture("", "", textureStage++);
694
				}
723
			} else {
724
				textureStage++;
695 725
			}
726

  
696 727
			// REPAINTING VIEWER
697 728
			if (m_canvas3d != null)
698 729
				m_canvas3d.repaint();
......
701 732

  
702 733
	}
703 734

  
704
	public void requestMDTLayer(TileEvent arg0) {
735
	public void requestMDTLayer(TileEvent evt) {
705 736

  
737
		
738
		// TODO : All this method are not tested
706 739
		// ignore for now
740
		
741
		
742
		/* ********** UNCOMENT FOR TEST IT ****************************
743
		int order = evt.getRequestedLayer();
744
		ArrayList imageLayers = (ArrayList) m_layerLists
745
				.get(Layer3DProps.layer3DElevation);
746
		FLayer layer = (FLayer) imageLayers.get(order);
747
		if ((layer == null) || (!layer.isVisible()))
748
			return;
749
		
750
		
751
		Layer3DProps props3D = getLayer3DProps(layer);
752
		// get/create cache service
753
		FLayerCacheService cacheService = (FLayerCacheService) props3D
754
				.getCacheService();
755
		if (cacheService == null) {
756
			cacheService = new FLayerCacheService(m_planet, props3D
757
					.getCacheName(), layer, m_viewProjection);
758
			cacheService.setCacheRootDir(Layer3DProps.m_cacheDir);
759
			props3D.setCacheService(cacheService);
760
		}
761

  
762
		int dataType = props3D.getType();
763
		Point tileIndices = new Point(evt.getX(), evt.getY());
764
		TileNum tileNum = new TileNum(evt.getLevel(), tileIndices);
765

  
766
		String tileFileName;
767

  
768
		if (cacheService.intersectsLayer(tileNum)) { // extent test
769
			try {
770
				tileFileName = cacheService.getTileAsFName(tileNum);
771
			} catch (CacheServiceException e) {
772
				return;
773
			}
774

  
775
			if (dataType == Layer3DProps.layer3DElevation) {
776
				// float opacity = 1.0f;
777
				String fileExtension = "tif";
778
				evt.getTilePagedLod().setHeightField(tileFileName,
779
						fileExtension, 0);
780
			}			
781
		} else { // no intersection for elevation layer
782
			// This code are not correctly for elevation layer
783
			if (dataType == Layer3DProps.layer3DImage) {
784
				evt.getTilePagedLod().setHeightField("", "", 0);
785
			}
786
		}
787

  
788
		// REPAINTING VIEWWER
789
		if (m_canvas3d != null)
790
			m_canvas3d.repaint();
791
			
792
			***************************************************/
707 793
	}
708 794

  
709 795
	public void requestTextureLayer(TileEvent evt) {
......
712 798
		ArrayList imageLayers = (ArrayList) m_layerLists
713 799
				.get(Layer3DProps.layer3DImage);
714 800
		FLayer layer = (FLayer) imageLayers.get(order);
715
		if (layer == null)
801
		if ((layer == null) || (!layer.isVisible()))
716 802
			return;
717

  
803
		
804
		
718 805
		Layer3DProps props3D = getLayer3DProps(layer);
719 806
		// get/create cache service
720 807
		FLayerCacheService cacheService = (FLayerCacheService) props3D

Also available in: Unified diff