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

📄 serverdaemon.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.io.File;import java.io.FileOutputStream;import java.io.BufferedOutputStream;import java.io.PrintWriter;import java.util.ArrayList;import java.util.HashMap;import java.util.Collections;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketTimeoutException;// 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 server (TCP based) 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 ServerDaemon 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;    public String command[];    private int distanceFieldSide = 64;    // Exporter for html file generation & socket control    private FileOutputStream fos;    private BufferedOutputStream writer;    public boolean terminate = false;    private ServerDaemon()    {        projectedViewRenderer = new JoglProjectedViewRenderer(distanceFieldSide, distanceFieldSide, false);        offlineRenderer = new JoglShapeMatchingOfflineRenderer(renderPreviewXSize, renderPreviewYSize, this);        searchEngine = new SearchEngine();        canvas = null;        shapeDatabase = new ShapeDatabaseFile("etc/metadata.bin");        searchEngine.readDatabase(shapeDatabase);    }    private void startWriter()    {        try {            File fd = new File("output.html");            fos = new FileOutputStream(fd);            writer = new BufferedOutputStream(fos);        }        catch ( Exception e ) {            ;        }    }    private void stopWriter()    {        try {            writer.close();            fos.close();        }        catch ( Exception e ) {            ;        }    }    private void exportResults(ArrayList <Result> similarModels, ShapeDatabase shapeDatabase)    {        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));        }        startWriter();        searchEngine.writeResultsAsHtml(new PrintWriter(writer), similarModels, shapeDatabase, "./output", 0, 0, similarModels.size());        stopWriter();    }    public void executeRendering(GL gl)    {        //- Set black screen. Shown in non offline rendering. -------------        gl.glClearColor(0, 0, 0, 1);        gl.glClear(gl.GL_COLOR_BUFFER_BIT);        if ( canvas != null ) {            canvas.swapBuffers();        }        //- Listen for requirements ---------------------------------------        ServerSocket socket = null;        Socket clientSocket;        command = null;        do {            try {                if ( socket == null ) {                    socket = new ServerSocket(1234);                    socket.setSoTimeout(1000);                    System.out.println("Waiting for client connections at port 1234!");                }                clientSocket = socket.accept();                NetworkAttendingThread sonThread;                sonThread = new NetworkAttendingThread(clientSocket, this);                Thread t = new Thread(sonThread);                t.start();            }            catch ( SocketTimeoutException e ) {                System.out.print(".");                if ( command != null ) {                    ArrayList <Result> similarModels;                    similarModels = searchEngine.runCommand(gl, offlineRenderer, canvas, projectedViewRenderer, command, shapeDatabase, distanceFieldSide);                    if ( similarModels != null ) {                        exportResults(similarModels, shapeDatabase);                    }                }                command = null;            }            catch( Exception e ) {                System.err.println("Network error: " + e);                e.printStackTrace();                System.exit(1);            }        } while ( !terminate );        //- 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[])    {        ServerDaemon instance = new ServerDaemon();        if ( instance.offlineRenderer.isPbufferSupported() ) {            // Create offline rendering based application            instance.offlineRenderer.execute();            instance.offlineRenderer.waitForMe();        }        else {            // 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 + -