?? mapcontentmanager.java
字號:
// **********************************************************************//// <copyright>//// BBN Technologies// 10 Moulton Street// Cambridge, MA 02138// (617) 873-8000//// Copyright (C) BBNT Solutions LLC. All rights reserved.//// </copyright>// **********************************************************************//// $Source: /cvs/distapps/openmap/src/j3d/com/bbn/openmap/tools/j3d/MapContentManager.java,v $// $RCSfile: MapContentManager.java,v $// $Revision: 1.3.2.3 $// $Date: 2005/08/11 21:36:12 $// $Author: dietrick $//// **********************************************************************package com.bbn.openmap.tools.j3d;import java.awt.BorderLayout;import javax.media.j3d.AmbientLight;import javax.media.j3d.Background;import javax.media.j3d.Behavior;import javax.media.j3d.BoundingSphere;import javax.media.j3d.BranchGroup;import javax.media.j3d.Group;import javax.media.j3d.TransformGroup;import javax.swing.JFrame;import com.bbn.openmap.MapBean;import com.bbn.openmap.MapHandler;import com.bbn.openmap.proj.Projection;import com.bbn.openmap.util.Debug;/** * The 3D manager that takes an OpenMap MapHandler, and creates a 3D * world from the layers in it. The layer's OMGraphics are converted * to 3D objects. * * @author dietrick */public class MapContentManager extends OM3DManager { protected MapContentManager() { super.init(); } /** * @param mapHandler the OpenMap MapHandler. */ public MapContentManager(MapHandler mapHandler, int contentMask) { this(mapHandler, new Background(0f, 0f, 0f), contentMask); } /** * @param mapHandler the OpenMap MapHandler. * @param background the background object to use for the 3D * scene. Use this to change the sky color, for instance. */ public MapContentManager(MapHandler mapHandler, Background background, int contentMask) { super.init(); createWorld(mapHandler, background, contentMask); } protected void createWorld(MapHandler mapHandler, Background background, int contentMask) { setSceneBackground(background); // objRootBG gets created in super class addMapContent(mapHandler, objRootBG, contentMask); } /** * IMPORTANT! You need to call this to compile the universe after * everything is set. */ public void compileUniverse() { // Important!! Compiles the universe ((UniverseManager) universe).makeLive(); } public void addBehavior(Behavior behavior) { objRootBG.addChild(behavior); } /** * This is the main function that gets called when the * MapContentViewer is created, to create the world objects in the * universe. It builds the objects to put in the J3D world from * the objects contained within the MapHandler. This method calls * setCameraLocation(), so you can modify where the camera is * placed there, and then calls createMapContent() to have a * BranchGroup created with 3D objects. You can modify those * methods to adjust how things get created. * * @param mapHandler The feature to be added to the MapContent * attribute * @param worldGroup The feature to be added to the MapContent * attribute */ protected void addMapContent(MapHandler mapHandler, BranchGroup worldGroup, int contentMask) { Projection projection = null; if (mapHandler != null) { MapBean mapBean = (MapBean) mapHandler.get("com.bbn.openmap.MapBean"); if (mapBean != null) { projection = mapBean.getProjection(); } TransformGroup mapTransformGroup = new TransformGroup(); mapTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); mapTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); Debug.message("3d", "OM3DViewer: adding map content"); BoundingSphere bs = new BoundingSphere(ORIGIN, boundsDimension); //BoundingLeaf boundingLeaf = new BoundingLeaf(bs); background.setApplicationBounds(bs); mapTransformGroup.addChild(background); createMapContent(mapTransformGroup, mapHandler, contentMask); // Lights up the whole world. If this isn't added, the // land is black AmbientLight ambientLight = new AmbientLight(); ambientLight.setInfluencingBounds(bs); worldGroup.addChild(ambientLight); // /////// Behavior beh = getMotionBehavior((TransformGroup) getCamera().getNode(), projection); beh.setSchedulingBounds(bs); worldGroup.addChild(beh); // /////// worldGroup.addChild(mapTransformGroup); } } protected void createMapContent(TransformGroup mapTransformGroup, MapHandler mapHandler, int contentMask) { if ((contentMask & CONTENT_MASK_OMGRAPHICHANDLERLAYERS) != 0) { mapTransformGroup.addChild(createLayerMapContent(mapHandler)); } mapTransformGroup.addChild(createMapContent(mapHandler, contentMask)); } /** * Called from addMapContent. Create a BranchGroup, and put your * 3D objects in it. The MapBean in the MapHandler has a * projection that can be used to lay things out, and the layers * have objects to render. * * @param mapHandler Description of the Parameter * @return Description of the Return Value */ protected Group createLayerMapContent(MapHandler mapHandler) { return new LayerMapContent(mapHandler); } /** * @param mapHandler Description of the Parameter * @return Description of the Return Value */ protected Group createMapContent(MapHandler mapHandler, int contentMask) { return new MapContent(mapHandler, contentMask); } /** * Called from addMapContent(), to set up the Transforms for * motion. The projection is provided in case you want to locate * the camera or map in a certain geographical location. * * @param cameraTransform Description of the Parameter * @param projection Description of the Parameter * @return The motionBehavior value */ public Behavior getMotionBehavior(TransformGroup cameraTransform, Projection projection) { return new OMKeyBehavior(cameraTransform, projection); } public static JFrame getFrame(String title, int width, int height, MapHandler mapHandler, Background background, int contentMask) { JFrame frame = new JFrame(title); frame.setSize(width, height); frame.getContentPane().setLayout(new BorderLayout()); MapContentManager mc3d = new MapContentManager(mapHandler, background, contentMask); mc3d.compileUniverse(); frame.getContentPane().add("Center", mc3d.getCanvas()); return frame; }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -