1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-05-21 10:55:33 +03:00

219 lines
5.2 KiB
Java

// Copyright (c) 2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
package com.opencascade.jnisample;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView;
//! Wrapper for C++ OCCT viewer.
public class OcctJniRenderer implements GLSurfaceView.Renderer
{
//! Wrapper for V3d_TypeOfOrientation
enum TypeOfOrientation
{
Xpos, // front
Ypos, // left
Zpos, // top
Xneg, // back
Yneg, // right
Zneg // bottom
};
//! Empty constructor.
OcctJniRenderer()
{
if (OcctJniActivity.areNativeLoaded)
{
myCppViewer = cppCreate();
}
}
//! Open file.
public void open (String thePath)
{
if (myCppViewer != 0)
{
cppOpen (myCppViewer, thePath);
}
}
//! Update viewer.
public void onDrawFrame (GL10 theGl)
{
if (myCppViewer != 0)
{
cppRedraw (myCppViewer);
}
}
//! (re)initialize viewer.
public void onSurfaceChanged (GL10 theGl, int theWidth, int theHeight)
{
if (myCppViewer != 0)
{
cppResize (myCppViewer, theWidth, theHeight);
}
}
public void onSurfaceCreated (GL10 theGl, EGLConfig theEglConfig)
{
if (myCppViewer != 0)
{
cppInit (myCppViewer);
}
}
//! Initialize rotation (remember first point position)
public void onStartRotation (int theStartX, int theStartY)
{
if (myCppViewer != 0)
{
cppStartRotation (myCppViewer, theStartX, theStartY);
}
}
//! Perform rotation (relative to first point)
public void onRotation (int theX, int theY)
{
if (myCppViewer != 0)
{
cppOnRotation (myCppViewer, theX, theY);
}
}
//! Perform panning
public void onPanning (int theDX, int theDY)
{
if (myCppViewer != 0)
{
cppOnPanning (myCppViewer, theDX, theDY);
}
}
//! Perform selection
public void onClick (int theX, int theY)
{
if (myCppViewer != 0)
{
cppOnClick (myCppViewer, theX, theY);
}
}
//! Stop previously active action (e.g. discard first rotation point)
public void onStopAction()
{
if (myCppViewer != 0)
{
cppStopAction (myCppViewer);
}
}
//! Fit All
public void fitAll()
{
if (myCppViewer != 0)
{
cppFitAll (myCppViewer);
}
}
//! Move camera
public void setProj (TypeOfOrientation theProj)
{
if (myCppViewer == 0)
{
return;
}
switch (theProj)
{
case Xpos: cppSetXposProj (myCppViewer); break;
case Ypos: cppSetYposProj (myCppViewer); break;
case Zpos: cppSetZposProj (myCppViewer); break;
case Xneg: cppSetXnegProj (myCppViewer); break;
case Yneg: cppSetYnegProj (myCppViewer); break;
case Zneg: cppSetZnegProj (myCppViewer); break;
}
}
//! Post message to the text view.
public void postMessage (String theText)
{
OcctJniLogger.postMessage (theText);
}
//! Create instance of C++ class
private native long cppCreate();
//! Destroy instance of C++ class
private native void cppDestroy (long theCppPtr);
//! Initialize OCCT viewer (steal OpenGL ES context bound to this thread)
private native void cppInit (long theCppPtr);
//! Resize OCCT viewer
private native void cppResize (long theCppPtr, int theWidth, int theHeight);
//! Open CAD file
private native void cppOpen (long theCppPtr, String thePath);
//! Handle detection in the viewer
private native void cppMoveTo (long theCppPtr, int theX, int theY);
//! Redraw OCCT viewer
private native void cppRedraw (long theCppPtr);
//! Fit All
private native void cppFitAll (long theCppPtr);
//! Move camera
private native void cppSetXposProj (long theCppPtr);
//! Move camera
private native void cppSetYposProj (long theCppPtr);
//! Move camera
private native void cppSetZposProj (long theCppPtr);
//! Move camera
private native void cppSetXnegProj (long theCppPtr);
//! Move camera
private native void cppSetYnegProj (long theCppPtr);
//! Move camera
private native void cppSetZnegProj (long theCppPtr);
//! Initialize rotation
private native void cppStartRotation (long theCppPtr, int theStartX, int theStartY);
//! Perform rotation
private native void cppOnRotation (long theCppPtr, int theX, int theY);
//! Perform panning
private native void cppOnPanning (long theCppPtr, int theDX, int theDY);
//! Perform selection
private native void cppOnClick (long theCppPtr, int theX, int theY);
//! Stop action (rotation / panning / scaling)
private native void cppStopAction (long theCppPtr);
private long myCppViewer = 0; //!< pointer to c++ class instance
}