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
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
|
|
|
|
}
|