Revision 15047 import/ext3D/trunk/ext3D/src/com/iver/ai2/gvsig3d/map3d/layers/FLayers3D.java
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