picksupport.java
来自「world wind java sdk 源码」· Java 代码 · 共 125 行
JAVA
125 行
/*Copyright (C) 2001, 2006 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.pick;import com.sun.opengl.util.BufferUtil;import gov.nasa.worldwind.geom.Position;import gov.nasa.worldwind.layers.Layer;import gov.nasa.worldwind.render.DrawContext;import gov.nasa.worldwind.util.Logging;import javax.media.opengl.GL;import java.util.*;/** * @author tag * @version $Id: PickSupport.java 6264 2008-08-27 22:57:49Z tgaskins $ */public class PickSupport{ protected Map<Integer, PickedObject> pickableObjects = new HashMap<Integer, PickedObject>(); public void clearPickList() { this.getPickableObjects().clear(); } public void addPickableObject(int colorCode, Object o, Position position, boolean isTerrain) { this.getPickableObjects().put(colorCode, new PickedObject(colorCode, o, position, isTerrain)); } public void addPickableObject(int colorCode, Object o) { this.getPickableObjects().put(colorCode, new PickedObject(colorCode, o)); } public void addPickableObject(PickedObject po) { this.getPickableObjects().put(po.getColorCode(), po); } public PickedObject getTopObject(DrawContext dc, java.awt.Point pickPoint) { if (this.getPickableObjects().isEmpty()) return null; int colorCode = this.getTopColor(dc, pickPoint); if (colorCode == dc.getClearColor().getRGB()) return null; PickedObject pickedObject = getPickableObjects().get(colorCode); if (pickedObject == null) return null; return pickedObject; } public PickedObject resolvePick(DrawContext dc, java.awt.Point pickPoint, Layer layer) { PickedObject pickedObject = this.getTopObject(dc, pickPoint); if (pickedObject != null) { if (layer != null) pickedObject.setParentLayer(layer); dc.addPickedObject(pickedObject); } this.clearPickList(); return pickedObject; } public int getTopColor(DrawContext dc, java.awt.Point pickPoint) { GL gl = dc.getGL(); int[] viewport = new int[4]; gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0); java.nio.ByteBuffer pixel = BufferUtil.newByteBuffer(3); gl.glReadPixels(pickPoint.x, viewport[3] - pickPoint.y, 1, 1, javax.media.opengl.GL.GL_RGB, GL.GL_UNSIGNED_BYTE, pixel); java.awt.Color topColor = null; try { topColor = new java.awt.Color(pixel.get(0) & 0xff, pixel.get(1) & 0xff, pixel.get(2) & 0xff, 0); } catch (Exception e) { Logging.logger().severe("layers.InvalidPickColorRead"); } return topColor != null ? topColor.getRGB() : 0; } public void beginPicking(DrawContext dc) { javax.media.opengl.GL gl = dc.getGL(); gl.glPushAttrib(GL.GL_ENABLE_BIT); gl.glDisable(GL.GL_DITHER); gl.glDisable(GL.GL_LIGHTING); gl.glDisable(GL.GL_FOG); gl.glDisable(GL.GL_BLEND); gl.glDisable(GL.GL_TEXTURE_2D); } public void endPicking(DrawContext dc) { dc.getGL().glPopAttrib(); } protected Map<Integer, PickedObject> getPickableObjects() { return this.pickableObjects; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?