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

📄 batchconsole.java

📁 基于java的3d开发库。对坐java3d的朋友有很大的帮助。
💻 JAVA
字号:
//===========================================================================//= A 3D Search Engine based on Vitral SDK toolkit platform                 =//=-------------------------------------------------------------------------=//= Oscar Chavarro, May 23 2007                                             =//=-------------------------------------------------------------------------=//= References:                                                             =//= [FUNK2003], Funkhouser, Thomas.  Min, Patrick. Kazhdan, Michael. Chen,  =//=     Joyce. Halderman, Alex. Dobkin, David. Jacobs, David. "A Search     =//=     Engine for 3D Models", ACM Transactions on Graphics, Vol 22. No1.   =//=     January 2003. Pp. 83-105                                            =//===========================================================================// Java basic classesimport java.util.ArrayList;import java.util.Collections;// Awt / swing classesimport java.awt.BorderLayout;import java.awt.Dimension;import javax.swing.JFrame;// JOGL classesimport javax.media.opengl.GL;import javax.media.opengl.GLCanvas;import javax.media.opengl.GLEventListener;import javax.media.opengl.GLAutoDrawable;// VSDK Classesimport vsdk.toolkit.media.GeometryMetadata;import vsdk.framework.shapeMatching.JoglShapeMatchingOfflineRenderer;import vsdk.framework.shapeMatching.JoglShapeMatchingOfflineRenderable;import vsdk.framework.shapeMatching.JoglProjectedViewRenderer;/**Current application provides a batch (command line) oriented management controlfor the testing of the VitralSDK implementation of a search engine for3d models, as the one defined in [FUNK2003].The application provides basic operations, useful for testing and benchmarking.Current class is responsible of handling user requests, and managing graphicscontexts for OpenGL.  This console application has two graphics operationmodes:  - A true 100% offline renderer that enables hardware accelerated rendering    using pbuffers.  - A software renderer that lies upon a valid and visible window.*/public class BatchConsole extends JoglShapeMatchingOfflineRenderable implements GLEventListener{    // Graphical contexts for indexing    private GLCanvas canvas;    private JoglShapeMatchingOfflineRenderer offlineRenderer = null;    private JoglProjectedViewRenderer projectedViewRenderer = null;    private int renderPreviewXSize = 640;    private int renderPreviewYSize = 480;    // Search engine and its configuration    private SearchEngine searchEngine;    private ShapeDatabaseFile shapeDatabase;    private String command[];    private int distanceFieldSide = 64;    private BatchConsole(String command[])    {        this.command = command;        projectedViewRenderer = new JoglProjectedViewRenderer(distanceFieldSide, distanceFieldSide, false);        offlineRenderer = new JoglShapeMatchingOfflineRenderer(renderPreviewXSize, renderPreviewYSize, this);        searchEngine = new SearchEngine();        canvas = null;        shapeDatabase = new ShapeDatabaseFile("etc/metadata.bin");    }    private void reportResults(ArrayList <Result> similarModels)    {        int i;        //- Sort report ---------------------------------------------------        Collections.sort(similarModels);        //- Print report --------------------------------------------------        System.out.println("= SIMILAR MODELS REPORT ===================================================");        System.out.println("Founded " + similarModels.size() +            " similar objects:");        for ( i = 0; i < similarModels.size(); i++ ) {            System.out.println("  - " + similarModels.get(i));        }    }    public void executeRendering(GL gl)    {        //-----------------------------------------------------------------        ArrayList <Result> similarModels;        searchEngine.readDatabase(shapeDatabase);        similarModels = searchEngine.runCommand(gl, offlineRenderer, canvas, projectedViewRenderer, command, shapeDatabase, distanceFieldSide);        if ( similarModels != null ) {            reportResults(similarModels);        }        searchEngine.reportTimers();        //- Free unused references for garbage collection -----------------        shapeDatabase = null;    }    /** Not used method, but needed to instanciate GLEventListener */    public void init(GLAutoDrawable drawable) {        ;    }    /** Not used method, but needed to instanciate GLEventListener */    public void displayChanged(GLAutoDrawable drawable, boolean a, boolean b) {        ;    }    /** Called to indicate the drawing surface has been moved and/or resized */    public void reshape (GLAutoDrawable drawable,                         int x,                         int y,                         int width,                         int height) {        GL gl = drawable.getGL();        gl.glViewport(0, 0, width, height);     }       /** Called by drawable to initiate drawing */    public void display(GLAutoDrawable drawable) {        GL gl = drawable.getGL();        executeRendering(gl);        System.exit(1);    }    public static void main(String args[])    {        if ( args.length < 1 ) {            System.err.println("Usage: java BatchConsole command files...");            System.err.println("Commands are: add, addList, searchModel, searchSketch, searchDistanceField, exportDatabase, exportPreviews");            System.exit(0);        }        BatchConsole instance = new BatchConsole(args);        if ( instance.offlineRenderer.isPbufferSupported() ||             (args.length > 0 &&               !( args[0].equals("add") || args[0].equals("addList") )) ) {            if ( instance.offlineRenderer.isPbufferSupported() ) {                instance.offlineRenderer.execute();                instance.offlineRenderer.waitForMe();            }            else {                instance.executeRendering(null);            }        }        else if ( args.length > 0 &&                 ( args[0].equals("add") || args[0].equals("addList") ) ) {            // Create application based GUI            JFrame frame;            Dimension size;            instance.canvas = new GLCanvas();            instance.canvas.addGLEventListener(instance);            frame = new JFrame("VITRAL offline renderer window - do not hide");            frame.add(instance.canvas, BorderLayout.CENTER);            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            size = new Dimension(instance.renderPreviewXSize+40, instance.renderPreviewYSize+60);            frame.setMinimumSize(size);            frame.setSize(size);            frame.setVisible(true);        }    }}//===========================================================================//= EOF                                                                     =//===========================================================================

⌨️ 快捷键说明

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