mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
ParaView-5.0.1: Added the source-tree to ThirdParty-dev and patched as described in the README file
Resolves bug-report http://bugs.openfoam.org/view.php?id=2098
This commit is contained in:
225
ParaView-5.0.1/VTK/Examples/Android/JavaVTK/jni/main.cxx
Normal file
225
ParaView-5.0.1/VTK/Examples/Android/JavaVTK/jni/main.cxx
Normal file
@ -0,0 +1,225 @@
|
||||
/*=========================================================================
|
||||
|
||||
Program: Visualization Toolkit
|
||||
|
||||
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <jni.h>
|
||||
#include <errno.h>
|
||||
#include <sstream>
|
||||
|
||||
#include "vtkNew.h"
|
||||
|
||||
#include "vtkActor.h"
|
||||
#include "vtkCamera.h"
|
||||
#include "vtkConeSource.h"
|
||||
#include "vtkDebugLeaks.h"
|
||||
#include "vtkGlyph3D.h"
|
||||
#include "vtkPolyData.h"
|
||||
#include "vtkPolyDataMapper.h"
|
||||
#include "vtkRenderWindow.h"
|
||||
#include "vtkRenderer.h"
|
||||
#include "vtkSphereSource.h"
|
||||
#include "vtkTextActor.h"
|
||||
#include "vtkTextProperty.h"
|
||||
|
||||
#include "vtkAndroidRenderWindowInteractor.h"
|
||||
#include "vtkCommand.h"
|
||||
|
||||
#include <android/log.h>
|
||||
|
||||
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "NativeVTK", __VA_ARGS__))
|
||||
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "NativeVTK", __VA_ARGS__))
|
||||
|
||||
extern "C" {
|
||||
JNIEXPORT jlong JNICALL Java_com_kitware_JavaVTK_JavaVTKLib_init(JNIEnv * env, jobject obj, jint width, jint height);
|
||||
JNIEXPORT void JNICALL Java_com_kitware_JavaVTK_JavaVTKLib_render(JNIEnv * env, jobject obj, jlong renWinP);
|
||||
JNIEXPORT void JNICALL Java_com_kitware_JavaVTK_JavaVTKLib_onKeyEvent(JNIEnv * env, jobject obj, jlong udp,
|
||||
jboolean down, jint keyCode, jint metaState, jint repeatCount
|
||||
);
|
||||
JNIEXPORT void JNICALL Java_com_kitware_JavaVTK_JavaVTKLib_onMotionEvent(JNIEnv * env, jobject obj, jlong udp,
|
||||
jint action,
|
||||
jint eventPointer,
|
||||
jint numPtrs,
|
||||
jfloatArray xPos, jfloatArray yPos,
|
||||
jintArray ids, jint metaState);
|
||||
};
|
||||
|
||||
struct userData
|
||||
{
|
||||
vtkRenderWindow *RenderWindow;
|
||||
vtkRenderer *Renderer;
|
||||
vtkAndroidRenderWindowInteractor *Interactor;
|
||||
};
|
||||
|
||||
// Example of updating text as we go
|
||||
class vtkExampleCallback : public vtkCommand
|
||||
{
|
||||
public:
|
||||
static vtkExampleCallback *New()
|
||||
{ return new vtkExampleCallback; }
|
||||
virtual void Execute( vtkObject *caller, unsigned long, void* )
|
||||
{
|
||||
// Update cardinality of selection
|
||||
double *pos = this->Camera->GetPosition();
|
||||
std::ostringstream txt;
|
||||
txt << "Camera positioned at: "
|
||||
<< std::fixed
|
||||
<< std::setprecision( 2 )
|
||||
<< std::setw( 6 )
|
||||
<< pos[0] << ", "
|
||||
<< std::setw( 6 )
|
||||
<< pos[1] << ", "
|
||||
<< std::setw( 6 )
|
||||
<< pos[2];
|
||||
this->Text->SetInput( txt.str().c_str() );
|
||||
}
|
||||
|
||||
vtkExampleCallback()
|
||||
{
|
||||
this->Camera = 0;
|
||||
this->Text = 0;
|
||||
}
|
||||
|
||||
vtkCamera *Camera;
|
||||
vtkTextActor* Text;
|
||||
};
|
||||
|
||||
/*
|
||||
* Here is where you would setup your pipeline and other normal VTK logic
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_com_kitware_JavaVTK_JavaVTKLib_init(JNIEnv * env, jobject obj, jint width, jint height)
|
||||
{
|
||||
vtkRenderWindow *renWin = vtkRenderWindow::New();
|
||||
char jniS[4] = {'j','n','i',0};
|
||||
renWin->SetWindowInfo(jniS); // tell the system that jni owns the window not us
|
||||
renWin->SetSize(width,height);
|
||||
vtkNew<vtkRenderer> renderer;
|
||||
renWin->AddRenderer(renderer.Get());
|
||||
|
||||
vtkNew<vtkAndroidRenderWindowInteractor> iren;
|
||||
iren->SetRenderWindow(renWin);
|
||||
|
||||
vtkNew<vtkSphereSource> sphere;
|
||||
sphere->SetThetaResolution(8);
|
||||
sphere->SetPhiResolution(8);
|
||||
|
||||
vtkNew<vtkPolyDataMapper> sphereMapper;
|
||||
sphereMapper->SetInputConnection(sphere->GetOutputPort());
|
||||
vtkNew<vtkActor> sphereActor;
|
||||
sphereActor->SetMapper(sphereMapper.Get());
|
||||
|
||||
vtkNew<vtkConeSource> cone;
|
||||
cone->SetResolution(6);
|
||||
|
||||
vtkNew<vtkGlyph3D> glyph;
|
||||
glyph->SetInputConnection(sphere->GetOutputPort());
|
||||
glyph->SetSourceConnection(cone->GetOutputPort());
|
||||
glyph->SetVectorModeToUseNormal();
|
||||
glyph->SetScaleModeToScaleByVector();
|
||||
glyph->SetScaleFactor(0.25);
|
||||
|
||||
vtkNew<vtkPolyDataMapper> spikeMapper;
|
||||
spikeMapper->SetInputConnection(glyph->GetOutputPort());
|
||||
|
||||
vtkNew<vtkActor> spikeActor;
|
||||
spikeActor->SetMapper(spikeMapper.Get());
|
||||
|
||||
renderer->AddActor(sphereActor.Get());
|
||||
renderer->AddActor(spikeActor.Get());
|
||||
renderer->SetBackground(0.4,0.5,0.6);
|
||||
|
||||
vtkNew<vtkTextActor> ta;
|
||||
ta->SetInput("Droids Rock");
|
||||
ta->GetTextProperty()->SetColor( 0.5, 1.0, 0.0 );
|
||||
ta->SetDisplayPosition(50,50);
|
||||
ta->GetTextProperty()->SetFontSize(32);
|
||||
renderer->AddActor(ta.Get());
|
||||
|
||||
vtkNew<vtkExampleCallback> cb;
|
||||
cb->Camera = renderer->GetActiveCamera();
|
||||
cb->Text = ta.Get();
|
||||
iren->AddObserver( vtkCommand::InteractionEvent, cb.Get() );
|
||||
|
||||
struct userData *foo = new struct userData();
|
||||
foo->RenderWindow = renWin;
|
||||
foo->Renderer = renderer.Get();
|
||||
foo->Interactor = iren.Get();
|
||||
|
||||
return (jlong)foo;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_kitware_JavaVTK_JavaVTKLib_render(JNIEnv * env, jobject obj, jlong udp)
|
||||
{
|
||||
struct userData *foo = (userData *)(udp);
|
||||
foo->RenderWindow->SwapBuffersOff(); // android does it
|
||||
foo->RenderWindow->Render();
|
||||
foo->RenderWindow->SwapBuffersOn(); // reset
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_kitware_JavaVTK_JavaVTKLib_onKeyEvent(JNIEnv * env, jobject obj, jlong udp,
|
||||
jboolean down, jint keyCode, jint metaState, jint repeatCount)
|
||||
{
|
||||
struct userData *foo = (userData *)(udp);
|
||||
foo->Interactor->HandleKeyEvent(down, keyCode, metaState, repeatCount);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_kitware_JavaVTK_JavaVTKLib_onMotionEvent(JNIEnv * env, jobject obj, jlong udp,
|
||||
jint action,
|
||||
jint eventPointer,
|
||||
jint numPtrs,
|
||||
jfloatArray xPos, jfloatArray yPos,
|
||||
jintArray ids, jint metaState)
|
||||
{
|
||||
struct userData *foo = (userData *)(udp);
|
||||
|
||||
int xPtr[VTKI_MAX_POINTERS];
|
||||
int yPtr[VTKI_MAX_POINTERS];
|
||||
int idPtr[VTKI_MAX_POINTERS];
|
||||
|
||||
// only allow VTKI_MAX_POINTERS touches right now
|
||||
if (numPtrs > VTKI_MAX_POINTERS)
|
||||
{
|
||||
numPtrs = VTKI_MAX_POINTERS;
|
||||
}
|
||||
|
||||
// fill in the arrays
|
||||
jfloat *xJPtr = env->GetFloatArrayElements(xPos, 0);
|
||||
jfloat *yJPtr = env->GetFloatArrayElements(yPos, 0);
|
||||
jint *idJPtr = env->GetIntArrayElements(ids, 0);
|
||||
for (int i = 0; i < numPtrs; ++i)
|
||||
{
|
||||
xPtr[i] = (int)xJPtr[i];
|
||||
yPtr[i] = (int)yJPtr[i];
|
||||
idPtr[i] = idJPtr[i];
|
||||
}
|
||||
env->ReleaseIntArrayElements(ids, idJPtr, 0);
|
||||
env->ReleaseFloatArrayElements(xPos, xJPtr, 0);
|
||||
env->ReleaseFloatArrayElements(yPos, yJPtr, 0);
|
||||
|
||||
foo->Interactor->HandleMotionEvent(action, eventPointer, numPtrs, xPtr, yPtr, idPtr, metaState);
|
||||
}
|
||||
Reference in New Issue
Block a user