⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draggingconformingshapes.java

📁 world wind java sdk 源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                }} );            JCheckBox bdyCB = new JCheckBox("Draw shape boundaries", drawShapeBoundary);            controlPanel.add(bdyCB);            bdyCB.addActionListener( new ActionListener() {                public void actionPerformed(ActionEvent e)                {                    drawShapeBoundary = !drawShapeBoundary;                    for (Renderable r : rLayer.getRenderables())                        if (r instanceof ConformingShape)                            ((ConformingShape)r).setDrawBorder(drawShapeBoundary);                        else                            ((AbstractSurfaceShape)r).getAttributes().setDrawOutline(drawShapeBoundary);                    AppFrame.this.getWwd().redraw();                }} );            JCheckBox extCB = new JCheckBox("Show wireframe exterior", drawWireframeExterior);            if (drawWireframeExterior) this.getWwd().getModel().setShowWireframeExterior(true);            controlPanel.add(extCB);            extCB.addActionListener( new ActionListener() {                public void actionPerformed(ActionEvent e)                {                    drawWireframeExterior = !drawWireframeExterior;                    WorldWindowGLCanvas wwd = AppFrame.this.getWwd();                    wwd.getModel().setShowWireframeExterior(drawWireframeExterior);                    wwd.redraw();                }} );            JCheckBox intCB = new JCheckBox("Show wireframe interior", drawWireframeInterior);            if (drawWireframeInterior) this.getWwd().getModel().setShowWireframeInterior(true);            controlPanel.add(intCB);            intCB.addActionListener( new ActionListener() {                public void actionPerformed(ActionEvent e)                {                    drawWireframeInterior = !drawWireframeInterior;                    WorldWindowGLCanvas wwd = AppFrame.this.getWwd();                    wwd.getModel().setShowWireframeInterior(drawWireframeInterior);                    wwd.redraw();                }} );            lp.add(controlPanel,BorderLayout.SOUTH);        }        private Font makeToolTipFont()        {            HashMap<TextAttribute, Object> fontAttributes = new HashMap<TextAttribute, Object>();            fontAttributes.put(TextAttribute.BACKGROUND, new java.awt.Color(0.4f, 0.4f, 0.4f, 1f));            return Font.decode("Arial-BOLD-14").deriveFont(fontAttributes);        }        private void rebuildRenderableShapeLayer(Globe g)        {            if (numShapesInLayer > 0)                buildRandomShapes(g);            else                buildDemoShapes(g);        }        private void buildDemoShapes(Globe g)        {            // a triangle over the Rockies.            ArrayList<LatLon> v1 = new ArrayList<LatLon>();            v1.add(new LatLon(Angle.fromDegrees(35),Angle.fromDegrees(-115)));            v1.add(new LatLon(Angle.fromDegrees(35),Angle.fromDegrees(-105)));            v1.add(new LatLon(Angle.fromDegrees(40),Angle.fromDegrees(-110)));            v1.add(new LatLon(Angle.fromDegrees(35),Angle.fromDegrees(-115)));            Color c1B = new Color(1.0f,0.0f,1.0f,1.0f);            Color c1F = new Color(0.8f,0.0f,0.0f,0.3f);            ConformingShape s1 = new ConformingPolygon(g,v1,c1F,c1B);            s1.setBorderWidth(3.0);            s1.setDrawBorder(drawShapeBoundary); s1.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(s1);            // a concave shape over the eastern half of the U.S.            ArrayList<LatLon> v2 = new ArrayList<LatLon>();            v2.add(new LatLon(Angle.fromDegrees(30),Angle.fromDegrees(-80)));            v2.add(new LatLon(Angle.fromDegrees(32),Angle.fromDegrees(-78)));            v2.add(new LatLon(Angle.fromDegrees(34),Angle.fromDegrees(-72)));            v2.add(new LatLon(Angle.fromDegrees(34),Angle.fromDegrees(-76)));            v2.add(new LatLon(Angle.fromDegrees(38),Angle.fromDegrees(-72)));            v2.add(new LatLon(Angle.fromDegrees(36),Angle.fromDegrees(-76)));            v2.add(new LatLon(Angle.fromDegrees(40),Angle.fromDegrees(-80)));            v2.add(new LatLon(Angle.fromDegrees(30),Angle.fromDegrees(-80)));            ConformingShape s2 = new ConformingPolygon(g,v2);            s2.setBorderWidth(2.0);            s2.setDrawBorder(drawShapeBoundary); s2.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(s2);            // a pentagon approximately over Washington D.C.            ConformingEllipticalPolygon s3 = new ConformingEllipticalPolygon(g,                    new LatLon(Angle.fromDegrees(39),Angle.fromDegrees(-77)),                    1.1e5,1.1e5, Angle.ZERO, 5);            s3.setDrawBorder(drawShapeBoundary); s3.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(s3);            // a hexagon inscribed in an ellipse in southern Minnesota            ConformingEllipticalPolygon s4 = new ConformingEllipticalPolygon(g,                    new LatLon(Angle.fromDegrees(44),Angle.fromDegrees(-96)),                    3.75e5,2.0e5, Angle.ZERO, 6);            s4.setDrawBorder(drawShapeBoundary); s4.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(s4);            // a rectangle in Oregon            ConformingQuad s5 = new ConformingQuad(g,                    new LatLon(Angle.fromDegrees(43.75),Angle.fromDegrees(-121)),                    1.5e5,8e4,Angle.ZERO);            s5.setDrawBorder(drawShapeBoundary); s5.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(s5);            // another rectangle in the southeast            ConformingQuad s6 = new ConformingQuad(g,                    new LatLon(Angle.fromDegrees(25),Angle.fromDegrees(-90)),                    4.5e5,3e4,Angle.ZERO);            s6.setDrawBorder(drawShapeBoundary); s6.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(s6);            // a hexagon straddling the international date line            ConformingEllipticalPolygon s7 = new ConformingEllipticalPolygon(g,                    new LatLon(Angle.fromDegrees(20),Angle.fromDegrees(179)),                    4.25e5,2.0e5, Angle.ZERO, 6);            s7.setDrawBorder(drawShapeBoundary); s7.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(s7);            // a triangle straddling the date line            ArrayList<LatLon> v8 = new ArrayList<LatLon>();            v8.add(new LatLon(Angle.fromDegrees(-35),Angle.fromDegrees(170)));            v8.add(new LatLon(Angle.fromDegrees(-35),Angle.fromDegrees(-170)));            v8.add(new LatLon(Angle.fromDegrees(-20),Angle.fromDegrees(-175)));            v8.add(new LatLon(Angle.fromDegrees(-35),Angle.fromDegrees(170)));            Color c8B = new Color(1.0f,0.0f,1.0f,1.0f);            Color c8F = new Color(0.8f,0.0f,0.0f,0.3f);            ConformingShape s8 = new ConformingPolygon(g,v8,c8F,c8B);            s8.setBorderWidth(2.0);            s8.setDrawBorder(drawShapeBoundary); s8.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(s8);            // another triangle straddling the date line            ArrayList<LatLon> v9 = new ArrayList<LatLon>();            v9.add(new LatLon(Angle.fromDegrees(-15),Angle.fromDegrees(170)));            v9.add(new LatLon(Angle.fromDegrees(-15),Angle.fromDegrees(-170)));            v9.add(new LatLon(Angle.fromDegrees(  0),Angle.fromDegrees(170)));            v9.add(new LatLon(Angle.fromDegrees(-15),Angle.fromDegrees(170)));            Color c9B = new Color(1.0f,0.0f,1.0f,1.0f);            Color c9F = new Color(0.8f,0.0f,0.0f,0.3f);            ConformingShape s9 = new ConformingPolygon(g,v9,c9F,c9B);            s9.setBorderWidth(2.0);            s9.setDrawBorder(drawShapeBoundary); s9.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(s9);            // new Circle and ellipse shapes            ConformingShape n1 = new ConformingEllipse(new LatLon(Angle.fromDegrees(20),Angle.fromDegrees(-100)),                3.75e5,2.0e5, null);            n1.setDrawBorder(drawShapeBoundary); n1.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(n1);            ConformingShape n2 = new ConformingCircle(new LatLon(Angle.fromDegrees(30),Angle.fromDegrees(-100)),                3.75e5);            n2.setDrawBorder(drawShapeBoundary); n2.setDrawInterior(drawShapeInterior);            rLayer.addRenderable(n2);        }        private void buildRandomShapes(Globe g)        {            int[] c1Int = { 3, 4, 5, 6, 7, 8 };            Color[] c1B = { new Color(1.0f,0.0f,0.0f,1.0f),                            new Color(0.0f,1.0f,0.0f,1.0f),                            new Color(0.0f,0.0f,1.0f,1.0f),                            new Color(0.0f,1.0f,1.0f,1.0f),                            new Color(1.0f,0.0f,1.0f,1.0f),                            new Color(1.0f,1.0f,0.0f,1.0f) };            float fillAlpha = 0.3f;            float brighten  = 0.3f;            Color[] c1F = { new Color(1.0f,brighten,brighten,fillAlpha),                            new Color(brighten,1.0f,brighten,fillAlpha),                            new Color(brighten,brighten,1.0f,fillAlpha),                            new Color(brighten,1.0f,1.0f,fillAlpha),                            new Color(1.0f,brighten,1.0f,fillAlpha),                            new Color(1.0f,1.0f,brighten,fillAlpha) };            double latMin = 0.0, latMax = 80.0;            double lonMin = -170, lonMax = 0.0;            for (int i=0 ; i<numShapesInLayer ; i++)            {                // randomly choose center                int j = i%c1Int.length;                double cLat = latMin + Math.random()*(latMax - latMin);                double cLon = lonMin + Math.random()*(lonMax - lonMin);                if (buildConformingShapes)                {                    ConformingEllipticalPolygon ceShape = new ConformingEllipticalPolygon(g,                        new LatLon(Angle.fromDegrees(cLat),Angle.fromDegrees(cLon)),                        1.75e5,1.0e5, Angle.ZERO, c1Int[j], c1F[j], c1B[j]);                    ceShape.setDrawBorder(drawShapeBoundary);                    ceShape.setDrawInterior(drawShapeInterior);                    rLayer.addRenderable(ceShape);                }                else                {                    SurfaceEllipse seShape = new SurfaceEllipse(                        new LatLon(Angle.fromDegrees(cLat),Angle.fromDegrees(cLon)),                        1.75e5, 1.0e5, Angle.ZERO);                    seShape.getAttributes().setDrawInterior(drawShapeInterior);                    seShape.getAttributes().setDrawOutline(drawShapeBoundary);                    seShape.getAttributes().setInteriorMaterial(new Material(c1F[j]));                    seShape.getAttributes().setOutlineMaterial(new Material(c1B[j]));                    seShape.getAttributes().setInteriorOpacity(c1F[j].getAlpha() / 255.0);                    seShape.getAttributes().setOutlineOpacity(c1B[j].getAlpha() / 255.0);                    rLayer.addRenderable(seShape);                }            }        }    }    public static void main(String[] args)    {        ApplicationTemplate.start("Conforming Surface Shape Dragging", AppFrame.class);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -