From 2f62a1a1234a5ef09cc504801c9941eccc477184 Mon Sep 17 00:00:00 2001 From: lod Date: Sat, 28 Jun 2025 12:44:20 +0200 Subject: [PATCH] publish --- Cube_Demo/META-INF/MANIFEST.MF | 8 + Cube_Demo/cube_demo/Axes.java | 36 + Cube_Demo/cube_demo/Axis.java | 99 ++ Cube_Demo/cube_demo/ColoredCube.java | 104 ++ Cube_Demo/cube_demo/CubeApp.java | 465 ++++++++ Cube_Demo/cube_demo/CubeBehavior.java | 36 + Cube_Demo/cube_demo/CubeSide.java | 129 +++ Cube_Demo/cube_demo/Floor.java | 77 ++ Cube_Demo/cube_demo/FloorBack.java | 51 + Cube_Demo/cube_demo/FloorShade.java | 100 ++ Cube_Demo/cube_demo/Lamp.java | 112 ++ Cube_Demo/cube_demo/ReadingThread.java | 62 + Cube_Demo/cube_demo/Stars.java | 51 + Cube_Demo/pics/cube.ico | Bin 0 -> 48654 bytes Cube_Demo/pics/cube_16.png | Bin 0 -> 691 bytes Cube_Demo/pics/cube_32.png | Bin 0 -> 1580 bytes Cube_Demo/pics/cube_64.png | Bin 0 -> 3494 bytes Cube_Demo/pics/halebop.png | Bin 0 -> 8290 bytes Cube_Demo/pics/logo_big.png | Bin 0 -> 26038 bytes Roboter_Demo/META-INF/MANIFEST.MF | 8 + Roboter_Demo/pics/roboter.ico | Bin 0 -> 45405 bytes Roboter_Demo/pics/roboter_16.png | Bin 0 -> 519 bytes Roboter_Demo/pics/roboter_32.png | Bin 0 -> 1067 bytes Roboter_Demo/pics/roboter_64.png | Bin 0 -> 2369 bytes Roboter_Demo/roboter_demo/Base.java | 143 +++ Roboter_Demo/roboter_demo/Floor.java | 77 ++ Roboter_Demo/roboter_demo/ForeArm.java | 129 +++ Roboter_Demo/roboter_demo/Hand.java | 133 +++ Roboter_Demo/roboter_demo/HandBehavior.java | 36 + Roboter_Demo/roboter_demo/ReadingThread.java | 62 + Roboter_Demo/roboter_demo/RoboterApp.java | 281 +++++ Roboter_Demo/roboter_demo/UpperArm.java | 141 +++ Roboter_Demo/roboter_demo/Wrist.java | 110 ++ SC_DLL_Wrapper/META-INF/MANIFEST.MF | 6 + .../spacecontrol/sc/dllwrapper/ScAdvSens.java | 43 + .../sc/dllwrapper/ScAdvancedSettings.java | 147 +++ .../sc/dllwrapper/ScApplNotFoundEx.java | 9 + .../sc/dllwrapper/ScBasicSettings.java | 34 + .../sc/dllwrapper/ScComErrEx.java | 9 + .../spacecontrol/sc/dllwrapper/ScDevInfo.java | 26 + .../spacecontrol/sc/dllwrapper/ScDevPars.java | 164 +++ .../sc/dllwrapper/ScDllWrapper.java | 1028 +++++++++++++++++ .../de/spacecontrol/sc/dllwrapper/ScEx.java | 9 + .../sc/dllwrapper/ScExecCmdErrEx.java | 9 + .../sc/dllwrapper/ScFileIoEx.java | 9 + .../de/spacecontrol/sc/dllwrapper/ScFunc.java | 37 + .../sc/dllwrapper/ScKeyAssignment.java | 208 ++++ .../sc/dllwrapper/ScKeystrokeEx.java | 9 + .../spacecontrol/sc/dllwrapper/ScLogPars.java | 35 + .../sc/dllwrapper/ScNotSupportedEx.java | 9 + .../sc/dllwrapper/ScOneBoolean.java | 17 + .../spacecontrol/sc/dllwrapper/ScOneByte.java | 15 + .../spacecontrol/sc/dllwrapper/ScOneInt.java | 15 + .../sc/dllwrapper/ScOneString.java | 17 + .../sc/dllwrapper/ScParOutOfRangeEx.java | 9 + .../sc/dllwrapper/ScRegistryEx.java | 9 + .../spacecontrol/sc/dllwrapper/ScStatus.java | 11 + .../spacecontrol/sc/dllwrapper/ScStdData.java | 31 + .../sc/dllwrapper/ScThreadErrEx.java | 9 + .../sc/dllwrapper/ScThreeInts.java | 19 + .../sc/dllwrapper/ScThreeStrings.java | 23 + .../spacecontrol/sc/dllwrapper/ScTwoInts.java | 17 + .../sc/dllwrapper/ScTwoStrings.java | 20 + .../sc/dllwrapper/ScWrongDevIdxEx.java | 9 + .../sc/dllwrapper/ScWrongUserEx.java | 9 + .../de/spacecontrol/sc/dllwrapper/Util.java | 65 ++ .../sc/dllwrapper/package-info.java | 9 + 67 files changed, 4545 insertions(+) create mode 100644 Cube_Demo/META-INF/MANIFEST.MF create mode 100644 Cube_Demo/cube_demo/Axes.java create mode 100644 Cube_Demo/cube_demo/Axis.java create mode 100644 Cube_Demo/cube_demo/ColoredCube.java create mode 100644 Cube_Demo/cube_demo/CubeApp.java create mode 100644 Cube_Demo/cube_demo/CubeBehavior.java create mode 100644 Cube_Demo/cube_demo/CubeSide.java create mode 100644 Cube_Demo/cube_demo/Floor.java create mode 100644 Cube_Demo/cube_demo/FloorBack.java create mode 100644 Cube_Demo/cube_demo/FloorShade.java create mode 100644 Cube_Demo/cube_demo/Lamp.java create mode 100644 Cube_Demo/cube_demo/ReadingThread.java create mode 100644 Cube_Demo/cube_demo/Stars.java create mode 100644 Cube_Demo/pics/cube.ico create mode 100644 Cube_Demo/pics/cube_16.png create mode 100644 Cube_Demo/pics/cube_32.png create mode 100644 Cube_Demo/pics/cube_64.png create mode 100644 Cube_Demo/pics/halebop.png create mode 100644 Cube_Demo/pics/logo_big.png create mode 100644 Roboter_Demo/META-INF/MANIFEST.MF create mode 100644 Roboter_Demo/pics/roboter.ico create mode 100644 Roboter_Demo/pics/roboter_16.png create mode 100644 Roboter_Demo/pics/roboter_32.png create mode 100644 Roboter_Demo/pics/roboter_64.png create mode 100644 Roboter_Demo/roboter_demo/Base.java create mode 100644 Roboter_Demo/roboter_demo/Floor.java create mode 100644 Roboter_Demo/roboter_demo/ForeArm.java create mode 100644 Roboter_Demo/roboter_demo/Hand.java create mode 100644 Roboter_Demo/roboter_demo/HandBehavior.java create mode 100644 Roboter_Demo/roboter_demo/ReadingThread.java create mode 100644 Roboter_Demo/roboter_demo/RoboterApp.java create mode 100644 Roboter_Demo/roboter_demo/UpperArm.java create mode 100644 Roboter_Demo/roboter_demo/Wrist.java create mode 100644 SC_DLL_Wrapper/META-INF/MANIFEST.MF create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScAdvSens.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScAdvancedSettings.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScApplNotFoundEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScBasicSettings.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScComErrEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDevInfo.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDevPars.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDllWrapper.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScExecCmdErrEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScFileIoEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScFunc.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScKeyAssignment.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScKeystrokeEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScLogPars.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScNotSupportedEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneBoolean.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneByte.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneInt.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneString.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScParOutOfRangeEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScRegistryEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScStatus.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScStdData.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreadErrEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreeInts.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreeStrings.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScTwoInts.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScTwoStrings.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScWrongDevIdxEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScWrongUserEx.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/Util.java create mode 100644 SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/package-info.java diff --git a/Cube_Demo/META-INF/MANIFEST.MF b/Cube_Demo/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e6cb51a --- /dev/null +++ b/Cube_Demo/META-INF/MANIFEST.MF @@ -0,0 +1,8 @@ +Manifest-Version: 1.0 +Ant-Version: Apache Ant 1.9.7 +Created-By: 1.8.0_172-b11 (Oracle Corporation) +Class-Path: lib/SC_DLL_Wrapper.jar lib/jogamp-fat.jar lib/j3dcore.jar + lib/j3dutils.jar lib/vecmath.jar +X-COMMENT: Main-Class will be added automatically by build +Main-Class: cube_demo.CubeApp + diff --git a/Cube_Demo/cube_demo/Axes.java b/Cube_Demo/cube_demo/Axes.java new file mode 100644 index 0000000..b8e2b21 --- /dev/null +++ b/Cube_Demo/cube_demo/Axes.java @@ -0,0 +1,36 @@ +package cube_demo; + +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Node; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Vector3d; + +class Axes { + private BranchGroup mBrGrp = new BranchGroup(); + + public BranchGroup getBrGrp() { + return this.mBrGrp; + } + + public Axes(double paramDouble1, double paramDouble2, double paramDouble3) { + Axis axis1 = new Axis(0); + Axis axis2 = new Axis(1); + Axis axis3 = new Axis(2); + Vector3d vector3d = new Vector3d(paramDouble1, paramDouble2, paramDouble3); + Transform3D transform3D = new Transform3D(); + TransformGroup transformGroup = new TransformGroup(); + transformGroup.addChild((Node)axis1.getBrGrp()); + transformGroup.addChild((Node)axis2.getBrGrp()); + transformGroup.addChild((Node)axis3.getBrGrp()); + this.mBrGrp.addChild((Node)transformGroup); + transform3D.setTranslation(vector3d); + transformGroup.setTransform(transform3D); + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/Axes.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/Axis.java b/Cube_Demo/cube_demo/Axis.java new file mode 100644 index 0000000..1b03274 --- /dev/null +++ b/Cube_Demo/cube_demo/Axis.java @@ -0,0 +1,99 @@ +package cube_demo; + +import com.sun.j3d.utils.geometry.Cone; +import com.sun.j3d.utils.geometry.Cylinder; +import java.awt.Font; +import javax.media.j3d.Appearance; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Font3D; +import javax.media.j3d.FontExtrusion; +import javax.media.j3d.Geometry; +import javax.media.j3d.Material; +import javax.media.j3d.Node; +import javax.media.j3d.Shape3D; +import javax.media.j3d.Text3D; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Vector3d; + +class Axis { + private BranchGroup mBrGrp = new BranchGroup(); + + public BranchGroup getBrGrp() { + return this.mBrGrp; + } + + public Axis(int paramInt) { + float f = 0.05F; + Cylinder cylinder = new Cylinder(f, 1.0F); + Cone cone = new Cone(f * 2.0F, f * 3.0F); + TransformGroup transformGroup1 = new TransformGroup(); + TransformGroup transformGroup2 = new TransformGroup(); + TransformGroup transformGroup3 = new TransformGroup(); + TransformGroup transformGroup4 = new TransformGroup(); + Vector3d vector3d = new Vector3d(); + Transform3D transform3D1 = new Transform3D(); + Transform3D transform3D2 = new Transform3D(); + Transform3D transform3D3 = new Transform3D(); + Transform3D transform3D4 = new Transform3D(); + Transform3D transform3D5 = new Transform3D(); + Material material1 = new Material(); + Material material2 = new Material(); + Appearance appearance1 = new Appearance(); + Appearance appearance2 = new Appearance(); + Font3D font3D = new Font3D(new Font("Helvetica", 0, 10), new FontExtrusion()); + Text3D text3D = new Text3D(font3D); + Shape3D shape3D = new Shape3D((Geometry)text3D); + transformGroup1.addChild((Node)cylinder); + transformGroup2.addChild((Node)cone); + transformGroup4.addChild((Node)shape3D); + transformGroup3.addChild((Node)transformGroup1); + transformGroup3.addChild((Node)transformGroup2); + transformGroup3.addChild((Node)transformGroup4); + this.mBrGrp.addChild((Node)transformGroup3); + vector3d.set(0.0D, 0.5D, 0.0D); + transform3D1.setTranslation(vector3d); + transformGroup1.setTransform(transform3D1); + vector3d.set(0.0D, 1.0D, 0.0D); + transform3D2.setTranslation(vector3d); + transformGroup2.setTransform(transform3D2); + transform3D5.setIdentity(); + switch (paramInt) { + case 0: + transform3D4.rotZ(-1.5707963267948966D); + transform3D5.rotZ(1.5707963267948966D); + text3D.setString("x"); + break; + case 1: + text3D.setString("y"); + break; + case 2: + transform3D4.rotX(1.5707963267948966D); + transform3D5.rotX(-1.5707963267948966D); + text3D.setString("z"); + break; + } + transform3D3.mul(transform3D5); + transform3D3.setScale(0.05D); + vector3d.set(-0.3D, 1.3D, 0.0D); + transform3D3.setTranslation(vector3d); + transformGroup4.setTransform(transform3D3); + transformGroup3.setTransform(transform3D4); + material1.setDiffuseColor(1.0F, 1.0F, 0.0F); + material1.setShininess(128.0F); + appearance1.setMaterial(material1); + cylinder.setAppearance(appearance1); + material2.setDiffuseColor(1.0F, 1.0F, 0.0F); + material2.setShininess(128.0F); + appearance2.setMaterial(material1); + cone.setAppearance(appearance2); + shape3D.setAppearance(appearance1); + this.mBrGrp.compile(); + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/Axis.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/ColoredCube.java b/Cube_Demo/cube_demo/ColoredCube.java new file mode 100644 index 0000000..f1bf19c --- /dev/null +++ b/Cube_Demo/cube_demo/ColoredCube.java @@ -0,0 +1,104 @@ +package cube_demo; + +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Node; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Vector3d; + +class ColoredCube { + private BranchGroup mBrGrp = new BranchGroup(); + + public BranchGroup getBrGrp() { + return this.mBrGrp; + } + + public ColoredCube(double paramDouble, boolean paramBoolean) { + CubeSide cubeSide1 = new CubeSide(1); + CubeSide cubeSide2 = new CubeSide(2); + CubeSide cubeSide3 = new CubeSide(3); + CubeSide cubeSide4 = new CubeSide(4); + CubeSide cubeSide5 = new CubeSide(5); + CubeSide cubeSide6 = new CubeSide(6); + Transform3D transform3D1 = new Transform3D(); + Transform3D transform3D2 = new Transform3D(); + TransformGroup transformGroup1 = new TransformGroup(); + TransformGroup transformGroup2 = new TransformGroup(); + TransformGroup transformGroup3 = new TransformGroup(); + TransformGroup transformGroup4 = new TransformGroup(); + TransformGroup transformGroup5 = new TransformGroup(); + TransformGroup transformGroup6 = new TransformGroup(); + TransformGroup transformGroup7 = new TransformGroup(); + Vector3d vector3d = new Vector3d(); + transformGroup1.addChild((Node)cubeSide1); + transformGroup2.addChild((Node)cubeSide2); + transformGroup3.addChild((Node)cubeSide3); + transformGroup4.addChild((Node)cubeSide4); + transformGroup5.addChild((Node)cubeSide5); + transformGroup6.addChild((Node)cubeSide6); + this.mBrGrp.addChild((Node)transformGroup1); + this.mBrGrp.addChild((Node)transformGroup2); + this.mBrGrp.addChild((Node)transformGroup3); + this.mBrGrp.addChild((Node)transformGroup4); + this.mBrGrp.addChild((Node)transformGroup5); + this.mBrGrp.addChild((Node)transformGroup6); + vector3d.set(0.0D, 0.0D, paramDouble); + transform3D1.setScale(paramDouble); + transform3D1.setTranslation(vector3d); + transformGroup1.setTransform(transform3D1); + if (paramBoolean) { + transform3D2.rotX(1.5707963267948966D); + transform3D1.rotY(1.5707963267948966D); + transform3D2.mul(transform3D1); + transform3D2.setScale(paramDouble); + vector3d.set(paramDouble, 0.0D, 0.0D); + transform3D2.setTranslation(vector3d); + transformGroup2.setTransform(transform3D2); + transform3D2.rotY(1.5707963267948966D); + transform3D1.rotX(-1.5707963267948966D); + transform3D2.mul(transform3D1); + transform3D2.setScale(paramDouble); + vector3d.set(0.0D, paramDouble, 0.0D); + transform3D2.setTranslation(vector3d); + transformGroup3.setTransform(transform3D2); + transform3D1.rotX(1.5707963267948966D); + transform3D1.setScale(paramDouble); + vector3d.set(0.0D, -paramDouble, 0.0D); + transform3D1.setTranslation(vector3d); + transformGroup4.setTransform(transform3D1); + } else { + transform3D1.rotY(1.5707963267948966D); + transform3D1.setScale(paramDouble); + vector3d.set(paramDouble, 0.0D, 0.0D); + transform3D1.setTranslation(vector3d); + transformGroup2.setTransform(transform3D1); + transform3D1.rotX(1.5707963267948966D); + transform3D1.setScale(paramDouble); + vector3d.set(0.0D, -paramDouble, 0.0D); + transform3D1.setTranslation(vector3d); + transformGroup3.setTransform(transform3D1); + transform3D1.rotX(-1.5707963267948966D); + transform3D1.setScale(paramDouble); + vector3d.set(0.0D, paramDouble, 0.0D); + transform3D1.setTranslation(vector3d); + transformGroup4.setTransform(transform3D1); + } + transform3D1.rotY(-1.5707963267948966D); + transform3D1.setScale(paramDouble); + vector3d.set(-paramDouble, 0.0D, 0.0D); + transform3D1.setTranslation(vector3d); + transformGroup5.setTransform(transform3D1); + transform3D1.rotY(Math.PI); + transform3D1.setScale(paramDouble); + vector3d.set(0.0D, 0.0D, -paramDouble); + transform3D1.setTranslation(vector3d); + transformGroup6.setTransform(transform3D1); + this.mBrGrp.compile(); + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/ColoredCube.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/CubeApp.java b/Cube_Demo/cube_demo/CubeApp.java new file mode 100644 index 0000000..80df3ee --- /dev/null +++ b/Cube_Demo/cube_demo/CubeApp.java @@ -0,0 +1,465 @@ +package cube_demo; + +import com.sun.j3d.utils.behaviors.vp.OrbitBehavior; +import com.sun.j3d.utils.behaviors.vp.ViewPlatformBehavior; +import com.sun.j3d.utils.geometry.Sphere; +import com.sun.j3d.utils.image.TextureLoader; +import com.sun.j3d.utils.universe.SimpleUniverse; +import com.sun.j3d.utils.universe.ViewingPlatform; +import de.spacecontrol.sc.dllwrapper.ScDllWrapper; +import de.spacecontrol.sc.dllwrapper.ScEx; +import de.spacecontrol.sc.dllwrapper.ScStdData; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.GraphicsConfiguration; +import java.awt.Image; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.lang.management.ManagementFactory; +import java.util.ArrayList; +import javax.media.j3d.AmbientLight; +import javax.media.j3d.Appearance; +import javax.media.j3d.Background; +import javax.media.j3d.BoundingSphere; +import javax.media.j3d.Bounds; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Canvas3D; +import javax.media.j3d.Node; +import javax.media.j3d.TextureAttributes; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.vecmath.AxisAngle4d; +import javax.vecmath.Color4f; +import javax.vecmath.Matrix4d; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3d; + +public class CubeApp extends JFrame { + private final int mBoundsRange = 1000; + + private int mSceneNo; + + private double mHandSpan; + + private double mHandAngle; + + private ReadingThread mReadingThread = new ReadingThread(this); + + private int mDevIdx; + + private TransformGroup mCubeTfGrp = new TransformGroup(); + + private TransformGroup mMirrCubeTfGrp = new TransformGroup(); + + private Transform3D mCubeTf = new Transform3D(); + + private Transform3D mCubeInvTf = new Transform3D(); + + private Transform3D mTf = new Transform3D(); + + private Transform3D mRotTf = new Transform3D(); + + private Transform3D mMirrTf = new Transform3D(); + + private Transform3D mMirrXzTf = new Transform3D(); + + private Vector3d mV = new Vector3d(); + + private Matrix4d mMatrix4d = new Matrix4d(); + + private Vector3d mXAxis = new Vector3d(); + + private Vector3d mYAxis = new Vector3d(); + + private Vector3d mZAxis = new Vector3d(); + + private final Vector3d mUx = new Vector3d(1.0D, 0.0D, 0.0D); + + private final Vector3d mUy = new Vector3d(0.0D, 1.0D, 0.0D); + + private final Vector3d mUz = new Vector3d(0.0D, 0.0D, 1.0D); + + private AxisAngle4d mXAxisAngle = new AxisAngle4d(); + + private AxisAngle4d mYAxisAngle = new AxisAngle4d(); + + private AxisAngle4d mZAxisAngle = new AxisAngle4d(); + + private double mX; + + private double mY; + + private double mZ; + + private ViewingPlatform mVp; + + private JPanel mGraphicPanel; + + public int getDevIdx() { + return this.mDevIdx; + } + + public CubeApp() { + GraphicsConfiguration graphicsConfiguration = SimpleUniverse.getPreferredConfiguration(); + Canvas3D canvas3D = new Canvas3D(graphicsConfiguration); + SimpleUniverse simpleUniverse = new SimpleUniverse(canvas3D); + BranchGroup branchGroup = null; + OrbitBehavior orbitBehavior = new OrbitBehavior(canvas3D); + ArrayList arrayList = new ArrayList(); + String str1 = System.getProperty("os.name"); + boolean bool = str1.contains("OS X"); + this.mVp = simpleUniverse.getViewingPlatform(); + Image image1 = getToolkit().getImage(getClass().getResource("/pics/cube_16.png")); + Image image2 = getToolkit().getImage(getClass().getResource("/pics/cube_32.png")); + Image image3 = getToolkit().getImage(getClass().getResource("/pics/cube_64.png")); + arrayList.add(image1); + arrayList.add(image2); + arrayList.add(image3); + setIconImages(arrayList); + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (UnsupportedLookAndFeelException unsupportedLookAndFeelException) { + unsupportedLookAndFeelException.printStackTrace(); + } catch (IllegalAccessException illegalAccessException) { + illegalAccessException.printStackTrace(); + } catch (InstantiationException instantiationException) { + instantiationException.printStackTrace(); + } catch (ClassNotFoundException classNotFoundException) { + classNotFoundException.printStackTrace(); + } + initComponents(); + String str2 = bool ? getClass().getSimpleName() : getTitle(); + this.mGraphicPanel.add("Center", (Component)canvas3D); + simpleUniverse.getViewer().getView().setBackClipDistance(1000.0D); + branchGroup = createCubeSceneGraph(); + setViewPos(this.mVp); + orbitBehavior.setSchedulingBounds((Bounds)new BoundingSphere(new Point3d(), 1000.0D)); + orbitBehavior.setZoomFactor(5.0D); + this.mVp.setViewPlatformBehavior((ViewPlatformBehavior)orbitBehavior); + this.mMatrix4d.setIdentity(); + this.mMatrix4d.setM11(-1.0D); + this.mMirrXzTf.set(this.mMatrix4d); + branchGroup.compile(); + simpleUniverse.addBranchGraph(branchGroup); + this.mGraphicPanel.requestFocus(); + try { + String str3 = ManagementFactory.getRuntimeMXBean().getName(); + int i = str3.indexOf('@'); + String str4 = str3.substring(0, i); + ScDllWrapper.scConnect2(false, str2); + this.mReadingThread.start(); + } catch (ScEx scEx) { + JOptionPane.showMessageDialog(this.mGraphicPanel, "No connection to SpaceControl driver!\nMove the cube with keys 1-6 and shift.", "Connection Error", 0); + } + } + + private void setViewPos(ViewingPlatform paramViewingPlatform) { + TransformGroup transformGroup = paramViewingPlatform.getViewPlatformTransform(); + Transform3D transform3D1 = new Transform3D(); + Transform3D transform3D2 = new Transform3D(); + transformGroup.getTransform(transform3D2); + transform3D2.rotY(Math.toRadians(0.0D)); + transform3D2.rotX(Math.toRadians(-5.0D)); + transform3D1.mul(transform3D2); + transform3D2.setTranslation(new Vector3d(0.0D, 5.0D, 18.0D)); + transform3D1.mul(transform3D2); + transformGroup.setTransform(transform3D1); + } + + private BranchGroup createCubeSceneGraph() { + BranchGroup branchGroup1 = new BranchGroup(); + BranchGroup branchGroup2 = new BranchGroup(); + TransformGroup transformGroup = new TransformGroup(); + Floor floor = new Floor(); + FloorShade floorShade1 = new FloorShade(0, 16.0D, 8.0D, this.mGraphicPanel); + FloorShade floorShade2 = new FloorShade(1, 16.0D, 8.0D, this.mGraphicPanel); + FloorShade floorShade3 = new FloorShade(2, 16.0D, 8.0D, this.mGraphicPanel); + FloorShade floorShade4 = new FloorShade(3, 16.0D, 8.0D, this.mGraphicPanel); + FloorBack floorBack = new FloorBack(16.0D, 16.0D, -8.0D); + AmbientLight ambientLight = new AmbientLight(); + Appearance appearance1 = new Appearance(); + Lamp lamp1 = new Lamp(4.5D, 0.0D, 4.5D, 0.25D, 5.0D, false); + Lamp lamp2 = new Lamp(-4.5D, 0.0D, -4.5D, 0.25D, 5.0D, false); + Lamp lamp3 = new Lamp(-4.5D, 0.0D, -4.5D, 0.25D, 5.0D, true); + Lamp lamp4 = new Lamp(4.5D, 0.0D, 4.5D, 0.25D, 5.0D, true); + Background background = new Background(); + ColoredCube coloredCube1 = new ColoredCube(0.4D, false); + ColoredCube coloredCube2 = new ColoredCube(0.4D, true); + Axes axes = new Axes(-8.0D, 0.2D, -8.0D); + TextureLoader textureLoader = new TextureLoader("src/pics/halebop.png", this); + Appearance appearance2 = new Appearance(); + Sphere sphere = new Sphere(1.0F, 6, 50, appearance2); + branchGroup2.addChild((Node)background); + branchGroup2.addChild((Node)floor); + branchGroup2.addChild((Node)floorShade1); + branchGroup2.addChild((Node)floorShade2); + branchGroup2.addChild((Node)floorShade3); + branchGroup2.addChild((Node)floorShade4); + branchGroup2.addChild((Node)floorBack); + branchGroup2.addChild((Node)lamp1.getBrGrp()); + branchGroup2.addChild((Node)lamp2.getBrGrp()); + branchGroup2.addChild((Node)lamp3.getBrGrp()); + branchGroup2.addChild((Node)lamp4.getBrGrp()); + branchGroup2.addChild((Node)axes.getBrGrp()); + branchGroup2.addChild((Node)this.mCubeTfGrp); + branchGroup2.addChild((Node)this.mMirrCubeTfGrp); + branchGroup2.addChild((Node)ambientLight); + appearance2.setTexture(textureLoader.getTexture()); + appearance2.setTextureAttributes(new TextureAttributes(2, new Transform3D(), new Color4f(), 1)); + branchGroup1.addChild((Node)new Stars()); + branchGroup1.addChild((Node)sphere); + background.setApplicationBounds((Bounds)new BoundingSphere(new Point3d(), 1000.0D)); + background.setGeometry(branchGroup1); + this.mCubeTfGrp.addChild((Node)coloredCube1.getBrGrp()); + this.mMirrCubeTfGrp.addChild((Node)coloredCube2.getBrGrp()); + this.mCubeTfGrp.setCapability(18); + this.mMirrCubeTfGrp.setCapability(18); + ambientLight.setInfluencingBounds((Bounds)new BoundingSphere(new Point3d(0.0D, 0.0D, 0.0D), 20.0D)); + return branchGroup2; + } + + public void repaintDemo(ScStdData paramScStdData) { + double d7 = 500.0D; + if (!isShowing()) + return; + double d1 = paramScStdData.mA / d7; + double d2 = paramScStdData.mB / d7; + double d3 = paramScStdData.mC / d7; + double d4 = paramScStdData.mX / d7; + double d5 = paramScStdData.mY / d7; + double d6 = paramScStdData.mZ / d7; + this.mX += d4; + this.mY += d5; + this.mZ += d6; + calcScreenRotsRelativeToCube(d1, d2, d3); + this.mRotTf.setIdentity(); + this.mTf.setIdentity(); + this.mTf.setRotation(this.mXAxisAngle); + this.mRotTf.mul(this.mTf); + this.mTf.setIdentity(); + this.mTf.setRotation(this.mYAxisAngle); + this.mRotTf.mul(this.mTf); + this.mTf.setIdentity(); + this.mTf.setRotation(this.mZAxisAngle); + this.mRotTf.mul(this.mTf); + this.mCubeTf.mul(this.mRotTf); + if (this.mX > 7.0D) + this.mX = 7.0D; + if (this.mX < -7.0D) + this.mX = -7.0D; + if (this.mZ > 7.0D) + this.mZ = 7.0D; + if (this.mZ < -7.0D) + this.mZ = -7.0D; + if (this.mY > 7.0D) + this.mY = 7.0D; + if (this.mY < 0.4D) + this.mY = 0.4D; + this.mV.set(this.mX, this.mY, this.mZ); + this.mCubeTf.setTranslation(this.mV); + this.mCubeTfGrp.setTransform(this.mCubeTf); + this.mMirrTf.set(this.mMirrXzTf); + this.mMirrTf.mul(this.mCubeTf); + this.mMirrTf.mul(this.mMirrXzTf); + this.mMirrCubeTfGrp.setTransform(this.mMirrTf); + } + + private void calcScreenRotsRelativeToCube(double paramDouble1, double paramDouble2, double paramDouble3) { + this.mCubeInvTf.invert(this.mCubeTf); + this.mCubeInvTf.transform(this.mUx, this.mXAxis); + this.mXAxisAngle.set(this.mXAxis, paramDouble1); + this.mCubeInvTf.transform(this.mUy, this.mYAxis); + this.mYAxisAngle.set(this.mYAxis, paramDouble2); + this.mCubeInvTf.transform(this.mUz, this.mZAxis); + this.mZAxisAngle.set(this.mZAxis, paramDouble3); + } + + public void handleEvent(int paramInt1, int paramInt2) { + switch (paramInt2) { + case 131081: + handleFrontEvent(); + break; + case 131082: + handleRightEvent(); + break; + case 131083: + handleTopEvent(); + break; + case 131094: + handleBackEvent(); + break; + case 131095: + handleLeftEvent(); + break; + case 131096: + handleBottomEvent(); + break; + case 131084: + handleFitEvent(); + break; + default: + System.out.println("*** Event '" + paramInt2 + "' not supported."); + break; + } + } + + private void handleFrontEvent() { + ScStdData scStdData = new ScStdData(); + rotateToFront(); + this.mCubeTfGrp.setTransform(this.mCubeTf); + repaintDemo(scStdData); + } + + private void rotateToFront() { + Transform3D transform3D = new Transform3D(); + Vector3d vector3d = new Vector3d(); + this.mCubeTf.get(vector3d); + transform3D.invert(this.mCubeTf); + this.mCubeTf.mul(transform3D); + this.mCubeTf.setTranslation(vector3d); + } + + private void handleRightEvent() { + Transform3D transform3D = new Transform3D(); + AxisAngle4d axisAngle4d = new AxisAngle4d(0.0D, 1.0D, 0.0D, -1.5707963267948966D); + ScStdData scStdData = new ScStdData(); + rotateToFront(); + transform3D.setRotation(axisAngle4d); + this.mCubeTf.mul(transform3D); + this.mCubeTfGrp.setTransform(this.mCubeTf); + repaintDemo(scStdData); + } + + private void handleTopEvent() { + Transform3D transform3D = new Transform3D(); + AxisAngle4d axisAngle4d = new AxisAngle4d(1.0D, 0.0D, 0.0D, 1.5707963267948966D); + ScStdData scStdData = new ScStdData(); + rotateToFront(); + transform3D.setRotation(axisAngle4d); + this.mCubeTf.mul(transform3D); + this.mCubeTfGrp.setTransform(this.mCubeTf); + repaintDemo(scStdData); + } + + private void handleBackEvent() { + Transform3D transform3D = new Transform3D(); + AxisAngle4d axisAngle4d = new AxisAngle4d(0.0D, 1.0D, 0.0D, Math.PI); + ScStdData scStdData = new ScStdData(); + rotateToFront(); + transform3D.setRotation(axisAngle4d); + this.mCubeTf.mul(transform3D); + this.mCubeTfGrp.setTransform(this.mCubeTf); + repaintDemo(scStdData); + } + + private void handleLeftEvent() { + Transform3D transform3D = new Transform3D(); + AxisAngle4d axisAngle4d = new AxisAngle4d(0.0D, 1.0D, 0.0D, 1.5707963267948966D); + ScStdData scStdData = new ScStdData(); + rotateToFront(); + transform3D.setRotation(axisAngle4d); + this.mCubeTf.mul(transform3D); + this.mCubeTfGrp.setTransform(this.mCubeTf); + repaintDemo(scStdData); + } + + private void handleBottomEvent() { + Transform3D transform3D = new Transform3D(); + AxisAngle4d axisAngle4d = new AxisAngle4d(1.0D, 0.0D, 0.0D, -1.5707963267948966D); + ScStdData scStdData = new ScStdData(); + rotateToFront(); + transform3D.setRotation(axisAngle4d); + this.mCubeTf.mul(transform3D); + this.mCubeTfGrp.setTransform(this.mCubeTf); + repaintDemo(scStdData); + } + + private void handleFitEvent() { + setViewPos(this.mVp); + } + + private void initComponents() { + this.mGraphicPanel = new JPanel(); + setDefaultCloseOperation(3); + setTitle("SC Cube Demo"); + this.mGraphicPanel.setMinimumSize(new Dimension(640, 480)); + this.mGraphicPanel.setPreferredSize(new Dimension(640, 480)); + this.mGraphicPanel.addFocusListener(new FocusAdapter() { + public void focusLost(FocusEvent param1FocusEvent) { + CubeApp.this.mGraphicPanelFocusLost(param1FocusEvent); + } + }); + this.mGraphicPanel.addKeyListener(new KeyAdapter() { + public void keyPressed(KeyEvent param1KeyEvent) { + CubeApp.this.mGraphicPanelKeyPressed(param1KeyEvent); + } + }); + this.mGraphicPanel.setLayout(new BorderLayout()); + getContentPane().add(this.mGraphicPanel, "Center"); + pack(); + } + + private void mGraphicPanelFocusLost(FocusEvent paramFocusEvent) { + String str = System.getProperty("os.name"); + if (str.equals("Linux")) + return; + this.mGraphicPanel.requestFocus(); + } + + private void mGraphicPanelKeyPressed(KeyEvent paramKeyEvent) { + int i = paramKeyEvent.getKeyCode(); + char c = paramKeyEvent.getKeyChar(); + ScStdData scStdData = new ScStdData(); + if (c == '1') { + scStdData.mX = 1000; + } else if (c == '!') { + scStdData.mX = -1000; + } else if (c == '2') { + scStdData.mY = 1000; + } else if (c == '"') { + scStdData.mY = -1000; + } else if (c == '3') { + scStdData.mZ = 1000; + } else if (c == '�') { + scStdData.mZ = -1000; + } else if (c == '4') { + scStdData.mA = 1000; + } else if (c == '$') { + scStdData.mA = -1000; + } else if (c == '5') { + scStdData.mB = 1000; + } else if (c == '%') { + scStdData.mB = -1000; + } else if (c == '6') { + scStdData.mC = 1000; + } else if (c == '&') { + scStdData.mC = -1000; + } + repaintDemo(scStdData); + } + + public static void main(String[] paramArrayOfString) { + EventQueue.invokeLater(new Runnable() { + public void run() { + CubeApp cubeApp = new CubeApp(); + cubeApp.setVisible(true); + cubeApp.repaintDemo(new ScStdData()); + } + }); + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/CubeApp.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/CubeBehavior.java b/Cube_Demo/cube_demo/CubeBehavior.java new file mode 100644 index 0000000..5cb8b08 --- /dev/null +++ b/Cube_Demo/cube_demo/CubeBehavior.java @@ -0,0 +1,36 @@ +package cube_demo; + +import java.util.Enumeration; +import javax.media.j3d.Behavior; +import javax.media.j3d.TransformGroup; +import javax.media.j3d.WakeupCondition; +import javax.media.j3d.WakeupOnTransformChange; + +class CubeBehavior extends Behavior { + private TransformGroup mTfGrp; + + private WakeupOnTransformChange mWakeUp; + + public void setTg(TransformGroup paramTransformGroup) { + this.mTfGrp = paramTransformGroup; + } + + CubeBehavior(TransformGroup paramTransformGroup) { + this.mTfGrp = paramTransformGroup; + } + + public void initialize() { + this.mWakeUp = new WakeupOnTransformChange(this.mTfGrp); + wakeupOn((WakeupCondition)this.mWakeUp); + } + + public void processStimulus(Enumeration paramEnumeration) { + wakeupOn((WakeupCondition)this.mWakeUp); + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/CubeBehavior.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/CubeSide.java b/Cube_Demo/cube_demo/CubeSide.java new file mode 100644 index 0000000..09348df --- /dev/null +++ b/Cube_Demo/cube_demo/CubeSide.java @@ -0,0 +1,129 @@ +package cube_demo; + +import javax.media.j3d.Appearance; +import javax.media.j3d.Geometry; +import javax.media.j3d.Material; +import javax.media.j3d.QuadArray; +import javax.media.j3d.Shape3D; +import javax.vecmath.Color3f; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3f; + +class CubeSide extends Shape3D { + private Geometry mGeom; + + private Appearance mApr; + + public CubeSide(int paramInt) { + this.mGeom = createGeometry(paramInt); + this.mApr = createAppearance(paramInt); + setGeometry(this.mGeom); + setAppearance(this.mApr); + } + + private Geometry createGeometry(int paramInt) { + int i = 7; + int j = i * i * 4; + QuadArray quadArray = new QuadArray(j, 7); + int k = 0; + int m = 0; + Point3d point3d = new Point3d(); + Color3f color3f1 = new Color3f(1.0F, 1.0F, 0.0F); + Color3f color3f2 = new Color3f(0.0F, 0.0F, 0.0F); + Vector3f vector3f = new Vector3f(0.0F, 0.0F, 1.0F); + int n = 0; + double d = 2.0D / i; + while (m < i) { + double d1 = -1.0D + m * d; + while (k < i) { + double d2 = -1.0D + k * d; + Color3f color3f = isEye(paramInt, k, m) ? color3f2 : color3f1; + point3d.set(d2, d1, 0.0D); + quadArray.setColor(n, color3f); + quadArray.setNormal(n, vector3f); + quadArray.setCoordinate(n++, point3d); + point3d.set(d2 + d, d1, 0.0D); + quadArray.setColor(n, color3f); + quadArray.setNormal(n, vector3f); + quadArray.setCoordinate(n++, point3d); + point3d.set(d2 + d, d1 + d, 0.0D); + quadArray.setColor(n, color3f); + quadArray.setNormal(n, vector3f); + quadArray.setCoordinate(n++, point3d); + point3d.set(d2, d1 + d, 0.0D); + quadArray.setColor(n, color3f); + quadArray.setNormal(n, vector3f); + quadArray.setCoordinate(n++, point3d); + k++; + } + k = 0; + m++; + } + return (Geometry)quadArray; + } + + private boolean isEye(int paramInt1, int paramInt2, int paramInt3) { + switch (paramInt1) { + case 1: + if (paramInt2 == 3 && paramInt3 == 3) + return true; + break; + case 2: + if ((paramInt2 == 1 && paramInt3 == 1) || (paramInt2 == 5 && paramInt3 == 5)) + return true; + break; + case 3: + if ((paramInt2 == 1 && paramInt3 == 1) || (paramInt2 == 3 && paramInt3 == 3) || (paramInt2 == 5 && paramInt3 == 5)) + return true; + break; + case 4: + if ((paramInt2 == 1 && paramInt3 == 1) || (paramInt2 == 1 && paramInt3 == 5) || (paramInt2 == 5 && paramInt3 == 1) || (paramInt2 == 5 && paramInt3 == 5)) + return true; + break; + case 5: + if ((paramInt2 == 1 && paramInt3 == 1) || (paramInt2 == 1 && paramInt3 == 5) || (paramInt2 == 3 && paramInt3 == 3) || (paramInt2 == 5 && paramInt3 == 1) || (paramInt2 == 5 && paramInt3 == 5)) + return true; + break; + case 6: + if ((paramInt2 == 1 && paramInt3 == 1) || (paramInt2 == 1 && paramInt3 == 5) || (paramInt2 == 1 && paramInt3 == 3) || (paramInt2 == 5 && paramInt3 == 3) || (paramInt2 == 5 && paramInt3 == 1) || (paramInt2 == 5 && paramInt3 == 5)) + return true; + break; + } + return false; + } + + private Appearance createAppearance(int paramInt) { + Appearance appearance = new Appearance(); + Material material = new Material(); + Color3f color3f = new Color3f(); + switch (paramInt) { + case 1: + color3f.set(0.3F, 0.0F, 0.0F); + break; + case 2: + color3f.set(0.0F, 0.3F, 0.0F); + break; + case 3: + color3f.set(0.0F, 0.0F, 0.3F); + break; + case 4: + color3f.set(0.3F, 0.3F, 0.0F); + break; + case 5: + color3f.set(0.0F, 0.3F, 0.3F); + break; + case 6: + color3f.set(0.3F, 0.0F, 0.3F); + break; + } + material.setAmbientColor(color3f); + appearance.setMaterial(material); + return appearance; + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/CubeSide.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/Floor.java b/Cube_Demo/cube_demo/Floor.java new file mode 100644 index 0000000..608fe32 --- /dev/null +++ b/Cube_Demo/cube_demo/Floor.java @@ -0,0 +1,77 @@ +package cube_demo; + +import javax.media.j3d.Appearance; +import javax.media.j3d.Geometry; +import javax.media.j3d.Material; +import javax.media.j3d.QuadArray; +import javax.media.j3d.Shape3D; +import javax.media.j3d.TransparencyAttributes; +import javax.vecmath.Color4f; +import javax.vecmath.Point3d; +import javax.vecmath.TexCoord2f; + +class Floor extends Shape3D { + private final int mGridNum = 8; + + private Geometry mGeom = createGeometry(); + + private Appearance mApr = createAppearance(); + + public Floor() { + setAppearance(this.mApr); + setGeometry(this.mGeom); + } + + private Geometry createGeometry() { + QuadArray quadArray = new QuadArray(1040, 15); + Point3d point3d = new Point3d(); + TexCoord2f texCoord2f = new TexCoord2f(); + Color4f color4f1 = new Color4f(1.0F, 0.0F, 0.0F, 1.0F); + Color4f color4f2 = new Color4f(0.157F, 0.5F, 1.0F, 0.8F); + Color4f color4f3 = new Color4f(1.0F, 1.0F, 1.0F, 0.8F); + Color4f color4f4 = color4f2; + int i = 0; + float[] arrayOfFloat = new float[3]; + arrayOfFloat[0] = 0.0F; + arrayOfFloat[1] = 1.0F; + arrayOfFloat[2] = 0.0F; + for (int j = -8; j < 8; j++) { + for (int k = -8; k < 8; k++) { + point3d.set(k, 0.0D, j); + quadArray.setCoordinate(i, point3d); + quadArray.setColor(i, color4f4); + quadArray.setNormal(i++, arrayOfFloat); + point3d.set(k, 0.0D, (j + 1)); + quadArray.setCoordinate(i, point3d); + quadArray.setColor(i, color4f4); + quadArray.setNormal(i++, arrayOfFloat); + point3d.set((k + 1), 0.0D, (j + 1)); + quadArray.setCoordinate(i, point3d); + quadArray.setColor(i, color4f4); + quadArray.setNormal(i++, arrayOfFloat); + point3d.set((k + 1), 0.0D, j); + quadArray.setCoordinate(i, point3d); + quadArray.setColor(i, color4f4); + quadArray.setNormal(i++, arrayOfFloat); + color4f4 = (color4f4 == color4f2) ? color4f3 : color4f2; + } + color4f4 = (color4f4 == color4f2) ? color4f3 : color4f2; + } + return (Geometry)quadArray; + } + + private Appearance createAppearance() { + Appearance appearance = new Appearance(); + Material material = new Material(); + TransparencyAttributes transparencyAttributes = new TransparencyAttributes(1, 0.0F); + appearance.setMaterial(material); + appearance.setTransparencyAttributes(transparencyAttributes); + return appearance; + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/Floor.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/FloorBack.java b/Cube_Demo/cube_demo/FloorBack.java new file mode 100644 index 0000000..330acab --- /dev/null +++ b/Cube_Demo/cube_demo/FloorBack.java @@ -0,0 +1,51 @@ +package cube_demo; + +import javax.media.j3d.Appearance; +import javax.media.j3d.Geometry; +import javax.media.j3d.QuadArray; +import javax.media.j3d.Shape3D; +import javax.vecmath.Color3f; +import javax.vecmath.Point3d; + +class FloorBack extends Shape3D { + private Geometry mGeom; + + private Appearance mApr; + + public FloorBack(double paramDouble1, double paramDouble2, double paramDouble3) { + this.mGeom = createGeometry(paramDouble1, paramDouble2, paramDouble3); + this.mApr = createAppearance(); + setAppearance(this.mApr); + setGeometry(this.mGeom); + } + + private Geometry createGeometry(double paramDouble1, double paramDouble2, double paramDouble3) { + QuadArray quadArray = new QuadArray(4, 5); + Point3d point3d = new Point3d(); + Color3f color3f = new Color3f(0.0F, 0.0F, 0.3F); + int i = 0; + point3d.set(-paramDouble1 / 2.0D, paramDouble3, paramDouble1 / 2.0D); + quadArray.setColor(i, color3f); + quadArray.setCoordinate(i++, point3d); + point3d.set(-paramDouble1 / 2.0D, paramDouble3, -paramDouble1 / 2.0D); + quadArray.setColor(i, color3f); + quadArray.setCoordinate(i++, point3d); + point3d.set(paramDouble1 / 2.0D, paramDouble3, -paramDouble1 / 2.0D); + quadArray.setColor(i, color3f); + quadArray.setCoordinate(i++, point3d); + point3d.set(paramDouble1 / 2.0D, paramDouble3, paramDouble1 / 2.0D); + quadArray.setColor(i, color3f); + quadArray.setCoordinate(i++, point3d); + return (Geometry)quadArray; + } + + private Appearance createAppearance() { + return new Appearance(); + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/FloorBack.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/FloorShade.java b/Cube_Demo/cube_demo/FloorShade.java new file mode 100644 index 0000000..94bf10a --- /dev/null +++ b/Cube_Demo/cube_demo/FloorShade.java @@ -0,0 +1,100 @@ +package cube_demo; + +import com.sun.j3d.utils.image.TextureLoader; +import javax.media.j3d.Appearance; +import javax.media.j3d.Geometry; +import javax.media.j3d.ImageComponent2D; +import javax.media.j3d.QuadArray; +import javax.media.j3d.Shape3D; +import javax.media.j3d.Texture; +import javax.media.j3d.Texture2D; +import javax.swing.JPanel; +import javax.vecmath.Point3d; +import javax.vecmath.TexCoord2f; + +class FloorShade extends Shape3D { + private Geometry mGeom; + + private Appearance mApr; + + public FloorShade(int paramInt, double paramDouble1, double paramDouble2, JPanel paramJPanel) { + this.mGeom = createGeometry(paramInt, paramDouble1, paramDouble2); + this.mApr = createAppearance(paramJPanel); + setAppearance(this.mApr); + setGeometry(this.mGeom); + } + + private Geometry createGeometry(int paramInt, double paramDouble1, double paramDouble2) { + QuadArray quadArray = new QuadArray(4, 33); + Point3d point3d = new Point3d(); + int i = 0; + TexCoord2f texCoord2f = new TexCoord2f(); + switch (paramInt) { + case 0: + point3d.set(-paramDouble1 / 2.0D, 0.0D, paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(-paramDouble1 / 2.0D, -paramDouble2, paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(paramDouble1 / 2.0D, -paramDouble2, paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(paramDouble1 / 2.0D, 0.0D, paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + break; + case 1: + point3d.set(paramDouble1 / 2.0D, 0.0D, paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(paramDouble1 / 2.0D, -paramDouble2, paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(paramDouble1 / 2.0D, -paramDouble2, -paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(paramDouble1 / 2.0D, 0.0D, -paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + break; + case 2: + point3d.set(paramDouble1 / 2.0D, 0.0D, -paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(paramDouble1 / 2.0D, -paramDouble2, -paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(-paramDouble1 / 2.0D, -paramDouble2, -paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(-paramDouble1 / 2.0D, 0.0D, -paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + break; + case 3: + point3d.set(-paramDouble1 / 2.0D, 0.0D, -paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(-paramDouble1 / 2.0D, -paramDouble2, -paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(-paramDouble1 / 2.0D, -paramDouble2, paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + point3d.set(-paramDouble1 / 2.0D, 0.0D, paramDouble1 / 2.0D); + quadArray.setCoordinate(i++, point3d); + break; + } + i = 0; + texCoord2f.set(0.0F, 1.0F); + quadArray.setTextureCoordinate(0, i++, texCoord2f); + texCoord2f.set(0.0F, 0.0F); + quadArray.setTextureCoordinate(0, i++, texCoord2f); + texCoord2f.set(1.0F, 0.0F); + quadArray.setTextureCoordinate(0, i++, texCoord2f); + texCoord2f.set(1.0F, 1.0F); + quadArray.setTextureCoordinate(0, i++, texCoord2f); + return (Geometry)quadArray; + } + + private Appearance createAppearance(JPanel paramJPanel) { + Appearance appearance = new Appearance(); + TextureLoader textureLoader = new TextureLoader("src/pics/logo_big.png", paramJPanel); + ImageComponent2D imageComponent2D = textureLoader.getImage(); + Texture2D texture2D = (Texture2D)textureLoader.getTexture(); + appearance.setTexture((Texture)texture2D); + return appearance; + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/FloorShade.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/Lamp.java b/Cube_Demo/cube_demo/Lamp.java new file mode 100644 index 0000000..98f48ed --- /dev/null +++ b/Cube_Demo/cube_demo/Lamp.java @@ -0,0 +1,112 @@ +package cube_demo; + +import com.sun.j3d.utils.geometry.Cone; +import javax.media.j3d.Appearance; +import javax.media.j3d.BoundingSphere; +import javax.media.j3d.Bounds; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.ColoringAttributes; +import javax.media.j3d.Material; +import javax.media.j3d.Node; +import javax.media.j3d.SpotLight; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Matrix4d; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3d; + +class Lamp { + private BranchGroup mBrGrp = new BranchGroup(); + + public BranchGroup getBrGrp() { + return this.mBrGrp; + } + + public Lamp(double paramDouble1, double paramDouble2, double paramDouble3, double paramDouble4, double paramDouble5, boolean paramBoolean) { + Cone cone1 = new Cone((float)paramDouble4, (float)paramDouble5, 1, null); + Cone cone2 = new Cone((float)paramDouble4 * 2.0F, (float)paramDouble4, 1, null); + Cone cone3 = new Cone((float)paramDouble4 * 2.0F, 0.0F, 1, null); + Cone cone4 = new Cone((float)paramDouble4, (float)paramDouble4 / 2.0F, 1, null); + Vector3d vector3d = new Vector3d(paramDouble1, paramDouble2, paramDouble3); + Transform3D transform3D1 = new Transform3D(); + Transform3D transform3D2 = new Transform3D(); + TransformGroup transformGroup1 = new TransformGroup(); + TransformGroup transformGroup2 = new TransformGroup(); + TransformGroup transformGroup3 = new TransformGroup(); + TransformGroup transformGroup4 = new TransformGroup(); + TransformGroup transformGroup5 = new TransformGroup(); + ColoringAttributes coloringAttributes = new ColoringAttributes(); + Appearance appearance1 = new Appearance(); + Appearance appearance2 = new Appearance(); + Appearance appearance3 = new Appearance(); + Appearance appearance4 = new Appearance(); + Material material1 = new Material(); + Material material2 = new Material(); + Material material3 = new Material(); + transformGroup1.addChild((Node)cone1); + transformGroup2.addChild((Node)cone2); + transformGroup3.addChild((Node)cone3); + transformGroup4.addChild((Node)cone4); + transformGroup5.addChild((Node)transformGroup1); + transformGroup5.addChild((Node)transformGroup2); + transformGroup5.addChild((Node)transformGroup3); + transformGroup5.addChild((Node)transformGroup4); + this.mBrGrp.addChild((Node)transformGroup5); + vector3d.set(0.0D, paramDouble5 / 2.0D, 0.0D); + transform3D1.setTranslation(vector3d); + transformGroup1.setTransform(transform3D1); + vector3d.set(0.0D, paramDouble5, 0.0D); + transform3D1.setTranslation(vector3d); + transformGroup2.setTransform(transform3D1); + vector3d.set(0.0D, paramDouble5 - paramDouble4 / 2.0D - 0.01D, 0.0D); + transform3D1.setTranslation(vector3d); + transformGroup3.setTransform(transform3D1); + vector3d.set(0.0D, paramDouble5 - paramDouble5 / 20.0D, 0.0D); + transform3D1.rotX(Math.PI); + transform3D1.setTranslation(vector3d); + transformGroup4.setTransform(transform3D1); + if (!paramBoolean) { + SpotLight spotLight = new SpotLight(); + Point3d point3d = new Point3d(0.0D, (float)(paramDouble5 + paramDouble5 / 10.0D), 0.0D); + spotLight.setPosition((float)point3d.getX(), (float)point3d.getY(), (float)point3d.getZ()); + spotLight.setInfluencingBounds((Bounds)new BoundingSphere(point3d, 20.0D)); + spotLight.setSpreadAngle(1.5707964F); + spotLight.setDirection(0.0F, -1.0F, 0.0F); + spotLight.setConcentration(2.0F); + transformGroup5.addChild((Node)spotLight); + } + vector3d.set(paramDouble1, paramDouble2, paramDouble3); + transform3D1.setIdentity(); + transform3D1.setTranslation(vector3d); + if (paramBoolean) { + Matrix4d matrix4d = new Matrix4d(); + transform3D1.get(matrix4d); + matrix4d.setM11(-matrix4d.getM11()); + transform3D1.set(matrix4d); + } + transformGroup5.setTransform(transform3D1); + material1.setAmbientColor(0.0F, 0.2F, 0.0F); + material1.setDiffuseColor(0.0F, 1.0F, 0.0F); + material1.setShininess(128.0F); + appearance1.setMaterial(material1); + cone1.setAppearance(appearance1); + material2.setAmbientColor(0.2F, 0.0F, 0.0F); + material2.setDiffuseColor(1.0F, 0.0F, 0.0F); + material2.setShininess(128.0F); + appearance2.setMaterial(material2); + cone2.setAppearance(appearance2); + coloringAttributes.setColor(0.8F, 0.0F, 0.0F); + appearance3.setColoringAttributes(coloringAttributes); + cone3.setAppearance(appearance3); + material3.setEmissiveColor(1.0F, 1.0F, 1.0F); + appearance4.setMaterial(material3); + cone4.setAppearance(appearance4); + this.mBrGrp.compile(); + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/Lamp.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/ReadingThread.java b/Cube_Demo/cube_demo/ReadingThread.java new file mode 100644 index 0000000..cde59e7 --- /dev/null +++ b/Cube_Demo/cube_demo/ReadingThread.java @@ -0,0 +1,62 @@ +package cube_demo; + +import de.spacecontrol.sc.dllwrapper.ScDllWrapper; +import de.spacecontrol.sc.dllwrapper.ScEx; +import de.spacecontrol.sc.dllwrapper.ScStdData; + +public class ReadingThread extends Thread { + private CubeApp mApp; + + private int mDevIdx; + + private boolean mIsReading; + + public void setDevIdx(int paramInt) { + this.mDevIdx = paramInt; + } + + public void stopReadingThread() { + this.mIsReading = false; + } + + public ReadingThread(CubeApp paramCubeApp) { + this.mApp = paramCubeApp; + this.mDevIdx = paramCubeApp.getDevIdx(); + } + + public void run() { + boolean bool = true; + int i = 0; + ScStdData scStdData = new ScStdData(); + this.mIsReading = true; + while (this.mIsReading) { + try { + ScDllWrapper.scFetchStdData(this.mDevIdx, scStdData); + if (scStdData.mEvent > -1) { + this.mApp.handleEvent(this.mDevIdx, scStdData.mEvent); + continue; + } + this.mApp.repaintDemo(scStdData); + } catch (ScEx scEx) { + if (bool) { + this.mApp.repaintDemo(scStdData); + if (i++ > 3) { + i = 0; + bool = false; + } + } + } + } + System.out.println("*** Reading thread stopped."); + } + + public void stopp() { + this.mIsReading = false; + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/ReadingThread.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/cube_demo/Stars.java b/Cube_Demo/cube_demo/Stars.java new file mode 100644 index 0000000..dd7f63c --- /dev/null +++ b/Cube_Demo/cube_demo/Stars.java @@ -0,0 +1,51 @@ +package cube_demo; + +import java.util.Random; +import javax.media.j3d.Appearance; +import javax.media.j3d.Geometry; +import javax.media.j3d.PointArray; +import javax.media.j3d.PointAttributes; +import javax.media.j3d.Shape3D; + +class Stars extends Shape3D { + private Geometry mGeom = createGeometry(); + + private Appearance mApr = createAppearance(); + + public Stars() { + setGeometry(this.mGeom); + setAppearance(this.mApr); + } + + private Geometry createGeometry() { + int i = 1000; + PointArray pointArray = new PointArray(i, 5); + float[] arrayOfFloat1 = new float[3]; + float[] arrayOfFloat2 = new float[3]; + Random random = new Random(); + for (int j = 0; j < i; j++) { + arrayOfFloat1[0] = random.nextFloat() - 0.5F; + arrayOfFloat1[1] = random.nextFloat() - 0.5F; + arrayOfFloat1[2] = random.nextFloat() - 0.5F; + pointArray.setCoordinates(j, arrayOfFloat1); + arrayOfFloat2[2] = random.nextFloat() * 0.8F + 0.2F; + arrayOfFloat2[1] = random.nextFloat() * 0.8F + 0.2F; + arrayOfFloat2[0] = random.nextFloat() * 0.8F + 0.2F; + pointArray.setColor(j, arrayOfFloat2); + } + return (Geometry)pointArray; + } + + private Appearance createAppearance() { + PointAttributes pointAttributes = new PointAttributes(2.0F, true); + Appearance appearance = new Appearance(); + appearance.setPointAttributes(pointAttributes); + return appearance; + } +} + + +/* Location: /opt/SpaceControl/Cube_Demo.jar!/cube_demo/Stars.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Cube_Demo/pics/cube.ico b/Cube_Demo/pics/cube.ico new file mode 100644 index 0000000000000000000000000000000000000000..7a10d5b860d4efcabc3069050ab89ad8936cb62d GIT binary patch literal 48654 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 literal 0 HcmV?d00001 diff --git a/Cube_Demo/pics/cube_16.png b/Cube_Demo/pics/cube_16.png new file mode 100644 index 0000000000000000000000000000000000000000..c344ddd1bf13f3d0ff7bacc339995863f6941de4 GIT binary patch literal 691 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7BevLm4Gl~w#w#f3=9nHC7!;n>nFiOQK$9$`RFe)4#S9Tn-X^t3lMBl(3O8+GH<`l5 zYx+`E(@8viYUZ=OQI8(Stbaaduhg63H(D;-VsEzI_`m=E*Y&*8i?)^~vzyxb-aW)r z?P8&GsPhrm^Zk3DOa1RMcyjH6z|kBr!Jo60l|Ab1H`(;wDVTV!C@WMmpyjj!{{pi~ zzwA^d8%%Hgo%w;)#v_|Sv&igAL`_Zq?f7HYn~Q}n)XIJmHZbMr4_d%#GNI+|s~x`INuFUq0s;d_qWaMD}HHW8q>$U{heAX2&H*ID3xuu)= zN;EU)0!QW*d+ukm^fdekkZJi7SUoL6hOtP}dxPdDx5H_?0XJ;_IM>V+U_REcS^iXC zqrK$m?WfXa-I0)3{pMo!{1X?l(-b8bG}}+Do^T_zaZ}owql@uux#E1 z?%yfgB36oj@}|qU9XOizVV?7%BOZ<1`bnyvOxpK9cE0w*DB6u+)Ub_%guz56u3 u!2SE$)vJ$1t;*ip>>l*qNOtL8`*VI@BPafP8^yrDz~JfX=d#Wzp$PyXq%3Oy literal 0 HcmV?d00001 diff --git a/Cube_Demo/pics/cube_32.png b/Cube_Demo/pics/cube_32.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac97018e8905f81964f91c361fc96642d8937a7 GIT binary patch literal 1580 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE)4%caKYZ?lNlHo zI14-?iy0XBNH=O_6ID&oDAl-E))tgFtG0Qba4!cIDB+^bdIR2 z#PNFL-OH=}xLc+gDlZzpp@$_^jUm9(q1()j%=Lhq1&Z0wh<+m-L$?eKV6^G#<{neL`6(M_efM zKH;sPe?W(!+T^gTtU_BSH)q$Q@zDCG1OzZKtp z^jqD^Py4=R=cpz&STut{SHCt@2&mPPECwG#vtjT!!9!+?!$Vw)p~4-4w112V%8^S#xE}1yO90SmECMH zU5qnWE`PRCm{-%zSgpB2D?nJ`w%w-J?T$A~6OXdJ4-t85TdchyY2Eh5`OT)!7=2qh z%??CFw%#r-TyAkq$X51PjjYS}4ZBOvtkB~+a7z53HTNVo?J~2Ji#$D>HFm#y&fC|? z7;vzrk)7>|_>bMcZ~3ecn8Z4n_e9jGudF6HEmyKuL~x&6+UoNncZCMW6|aQ2i89Z{ zpV(EWb~JfeZE~ zEMZ_i-~5I7X~5Sw#qV9)y<0=JFzDxeKYYn$|1~igw`Ii}css-NCvHh($Tq8peIVQV zrc=m#*^E0(U#?7l9y(RY?L|UNIb*|{N5b`!CKmtPYqs$B;k6s&ICiESunmf0O+Nf` zCI5;Q$!_gWqZ_6_Tsm7{#qE~CE78RVCq;azPS9^CJl-(xfc9aZ4Q>oYOK+V#eyl*@ z6~}{Tv-MOM^48xrd*i>cS#Xhae@dgu3hRTjLOt9iANssl>wULGjUy%c!P!X+dww3b z>ea4SoN$}dSz7ToU&mzrD@>Mhy_`}Hi{AKL5PZ-pvQ?CAvU;x4g4YM_ncn3YJU?VR z-9!EnTd{r1&+iYU%zTcXRuoNMy?-00orGY+)=DX!AJ#ogcLf?2aP46>^fY7K{z&0Z zd_sb7Og!^T|Ha=Z;ByT)!9 zw2kFh4)?Q}SEfEZx=X&0`Hc8H-gS?AcCj)n`CEQ;YR{7f6AAlUZ)|-3o)E5L49RJ| z@_4~9_scP}CMyZHp1(Z*?y1W<8`JIHo$6zFI7@2zo3%5~X7%JLEtJw-JL`hULk(|l zi$+n~!Y<93M<4ahI;^s8N9=iryY+R_YIbvacfZ?SWBc>pnvK_1arSOoJZoc#GG|lH z>L%$4?ay|y`x|^r_}@IW;6vyC&lb8I literal 0 HcmV?d00001 diff --git a/Cube_Demo/pics/cube_64.png b/Cube_Demo/pics/cube_64.png new file mode 100644 index 0000000000000000000000000000000000000000..4bb7a2444770b3ebe86a859b850f99e49ed69488 GIT binary patch literal 3494 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 B=xhK0 literal 0 HcmV?d00001 diff --git a/Roboter_Demo/pics/roboter_16.png b/Roboter_Demo/pics/roboter_16.png new file mode 100644 index 0000000000000000000000000000000000000000..9166d751ee7e1ba5a96716b7a69d5a53bbddebf6 GIT binary patch literal 519 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7BevL9R^{>Eak-aeC@xdyma)X&>|x35vz@~tz& z#aY{MuWjw8oqg}6zr9uS^zv{zb?4NH|5x?1%8OhIRM^C~%=q;B2}^8@L3pD5`XxVJ z|F~=P^z5vT32Bdv&BR{csaCzQ;@GLpkCTt_Hvg;VJM`dJTk->Ip1Fp9&MB?_-%`iH zs--`@>h+rShl=E;FwYI&%&FCI>WE4X=gC8-%yM68ta;a{Gl4hA+2ZSLeQQ=OMd8hj z@4q>mV~Npyo|Y`waffBGeRjo^CGSA0H{*jho0<=pO}WK6r>yA1 zj$Y>PqHoNdS#K0*+<3JkVe<#Ksey9;8gI`3z)^7J!`8AV%N;mv^bf?YUb^eXyZvoX XPtA6puq>5Eaj?aro)<_>AaK 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 literal 0 HcmV?d00001 diff --git a/Roboter_Demo/roboter_demo/Base.java b/Roboter_Demo/roboter_demo/Base.java new file mode 100644 index 0000000..8f99bf4 --- /dev/null +++ b/Roboter_Demo/roboter_demo/Base.java @@ -0,0 +1,143 @@ +package roboter_demo; + +import com.sun.j3d.utils.geometry.Box; +import javax.media.j3d.Appearance; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Material; +import javax.media.j3d.Node; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Vector3d; + +class Base { + private final float mWidth = 1.0F; + + private final float mScale = 1.0F; + + private final Vector3d mNullVec = new Vector3d(0.0D, 0.5D, 0.0D); + + private BranchGroup mBrGrp = new BranchGroup(); + + private TransformGroup mBaseTfGrp; + + private TransformGroup mUpperArmTfGrp = new TransformGroup(); + + private UpperArm mUpperArm = new UpperArm(); + + private double mAngle; + + private Transform3D mRotTf = new Transform3D(); + + public BranchGroup getBrGrp() { + return this.mBrGrp; + } + + public void incUpperArmAngle() { + this.mUpperArm.incAngle(); + } + + public void decUpperArmAngle() { + this.mUpperArm.decAngle(); + } + + public void incForeArmAngle() { + this.mUpperArm.incForeArmAngle(); + } + + public void decForeArmAngle() { + this.mUpperArm.decForeArmAngle(); + } + + public void incWristAngle() { + this.mUpperArm.incWristAngle(); + } + + public void decWristAngle() { + this.mUpperArm.decWristAngle(); + } + + public void incHandAngle() { + this.mUpperArm.incHandAngle(); + } + + public void decHandAngle() { + this.mUpperArm.decHandAngle(); + } + + public void incHandSpan() { + this.mUpperArm.incHandSpan(); + } + + public void decHandSpan() { + this.mUpperArm.decHandSpan(); + } + + public void incUpperArmAngle(double paramDouble) { + this.mUpperArm.incAngle(paramDouble); + } + + public void incForeArmAngle(double paramDouble) { + this.mUpperArm.incForeArmAngle(paramDouble); + } + + public void incWristAngle(double paramDouble) { + this.mUpperArm.incWristAngle(paramDouble); + } + + public void incHandAngle(double paramDouble) { + this.mUpperArm.incHandAngle(paramDouble); + } + + public void incHandSpan(double paramDouble) { + this.mUpperArm.incHandSpan(paramDouble); + } + + public Base(TransformGroup paramTransformGroup) { + Box box = new Box(0.5F, 0.5F, 0.25F, 1, null); + Material material = new Material(); + Appearance appearance = new Appearance(); + Transform3D transform3D = new Transform3D(); + Vector3d vector3d = new Vector3d(); + this.mBaseTfGrp = paramTransformGroup; + this.mBaseTfGrp.addChild((Node)box); + this.mUpperArmTfGrp.addChild((Node)this.mUpperArm.getBrGrp()); + this.mBaseTfGrp.addChild((Node)this.mUpperArmTfGrp); + this.mBrGrp.addChild((Node)this.mBaseTfGrp); + vector3d.set(0.0D, 0.5D, 0.0D); + transform3D.setTranslation(vector3d); + this.mBaseTfGrp.setTransform(transform3D); + vector3d.set(0.5D, 0.875D, 0.25D); + transform3D.setTranslation(vector3d); + this.mUpperArmTfGrp.setTransform(transform3D); + material.setDiffuseColor(1.0F, 0.0F, 0.0F); + material.setAmbientColor(0.4F, 0.0F, 0.0F); + appearance.setMaterial(material); + box.setAppearance(appearance); + this.mBaseTfGrp.setCapability(18); + } + + public void incBaseAngle() { + rotateBase(0.02D); + } + + private void rotateBase(double paramDouble) { + this.mAngle += paramDouble; + this.mRotTf.rotY(this.mAngle); + this.mRotTf.setTranslation(this.mNullVec); + this.mBaseTfGrp.setTransform(this.mRotTf); + } + + public void incBaseAngle(double paramDouble) { + rotateBase(paramDouble); + } + + public void decBaseAngle() { + rotateBase(-0.02D); + } +} + + +/* Location: /opt/SpaceControl/Roboter_Demo.jar!/roboter_demo/Base.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Roboter_Demo/roboter_demo/Floor.java b/Roboter_Demo/roboter_demo/Floor.java new file mode 100644 index 0000000..b9b1c8e --- /dev/null +++ b/Roboter_Demo/roboter_demo/Floor.java @@ -0,0 +1,77 @@ +package roboter_demo; + +import javax.media.j3d.Appearance; +import javax.media.j3d.Geometry; +import javax.media.j3d.Material; +import javax.media.j3d.QuadArray; +import javax.media.j3d.Shape3D; +import javax.media.j3d.TransparencyAttributes; +import javax.vecmath.Color4f; +import javax.vecmath.Point3d; +import javax.vecmath.TexCoord2f; + +class Floor extends Shape3D { + private final int mGridNum = 8; + + private Geometry mGeom = createGeometry(); + + private Appearance mApr = createAppearance(); + + public Floor() { + setAppearance(this.mApr); + setGeometry(this.mGeom); + } + + private Geometry createGeometry() { + QuadArray quadArray = new QuadArray(1040, 15); + Point3d point3d = new Point3d(); + TexCoord2f texCoord2f = new TexCoord2f(); + Color4f color4f1 = new Color4f(1.0F, 0.0F, 0.0F, 1.0F); + Color4f color4f2 = new Color4f(0.157F, 0.5F, 1.0F, 0.8F); + Color4f color4f3 = new Color4f(1.0F, 1.0F, 1.0F, 0.8F); + Color4f color4f4 = color4f2; + int i = 0; + float[] arrayOfFloat = new float[3]; + arrayOfFloat[0] = 0.0F; + arrayOfFloat[1] = 1.0F; + arrayOfFloat[2] = 0.0F; + for (int j = -8; j < 8; j++) { + for (int k = -8; k < 8; k++) { + point3d.set(k, 0.0D, j); + quadArray.setCoordinate(i, point3d); + quadArray.setColor(i, color4f4); + quadArray.setNormal(i++, arrayOfFloat); + point3d.set(k, 0.0D, (j + 1)); + quadArray.setCoordinate(i, point3d); + quadArray.setColor(i, color4f4); + quadArray.setNormal(i++, arrayOfFloat); + point3d.set((k + 1), 0.0D, (j + 1)); + quadArray.setCoordinate(i, point3d); + quadArray.setColor(i, color4f4); + quadArray.setNormal(i++, arrayOfFloat); + point3d.set((k + 1), 0.0D, j); + quadArray.setCoordinate(i, point3d); + quadArray.setColor(i, color4f4); + quadArray.setNormal(i++, arrayOfFloat); + color4f4 = (color4f4 == color4f2) ? color4f3 : color4f2; + } + color4f4 = (color4f4 == color4f2) ? color4f3 : color4f2; + } + return (Geometry)quadArray; + } + + private Appearance createAppearance() { + Appearance appearance = new Appearance(); + Material material = new Material(); + TransparencyAttributes transparencyAttributes = new TransparencyAttributes(1, 0.0F); + appearance.setMaterial(material); + appearance.setTransparencyAttributes(transparencyAttributes); + return appearance; + } +} + + +/* Location: /opt/SpaceControl/Roboter_Demo.jar!/roboter_demo/Floor.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Roboter_Demo/roboter_demo/ForeArm.java b/Roboter_Demo/roboter_demo/ForeArm.java new file mode 100644 index 0000000..f154ac4 --- /dev/null +++ b/Roboter_Demo/roboter_demo/ForeArm.java @@ -0,0 +1,129 @@ +package roboter_demo; + +import com.sun.j3d.utils.geometry.Box; +import javax.media.j3d.Appearance; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Material; +import javax.media.j3d.Node; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Vector3d; + +class ForeArm { + private final float mWidth = 0.25F; + + private final float mLength = 1.0F; + + private final float mScale = 1.0F; + + private final Vector3d mTransTo = new Vector3d(0.0D, 0.375D, 0.0D); + + private final Vector3d mTransFro = new Vector3d(0.0D, -0.375D, 0.0D); + + private BranchGroup mBrGrp = new BranchGroup(); + + private TransformGroup mTfGrp = new TransformGroup(); + + private TransformGroup mWristTfGrp = new TransformGroup(); + + private Wrist mWrist = new Wrist(); + + private double mAngle; + + private Transform3D mRotTf = new Transform3D(); + + private Transform3D mTrnTf = new Transform3D(); + + private Transform3D mResTf = new Transform3D(); + + public BranchGroup getBrGrp() { + return this.mBrGrp; + } + + public void incWristAngle() { + this.mWrist.incAngle(); + } + + public void decWristAngle() { + this.mWrist.decAngle(); + } + + public void incHandAngle() { + this.mWrist.incHandAngle(); + } + + public void decHandAngle() { + this.mWrist.decHandAngle(); + } + + public void incHandSpan() { + this.mWrist.incHandSpan(); + } + + public void decHandSpan() { + this.mWrist.decHandSpan(); + } + + public void incWristAngle(double paramDouble) { + this.mWrist.incAngle(paramDouble); + } + + public void incHandAngle(double paramDouble) { + this.mWrist.incHandAngle(paramDouble); + } + + public void incHandSpan(double paramDouble) { + this.mWrist.incHandSpan(paramDouble); + } + + public ForeArm() { + Box box = new Box(0.125F, 0.5F, 0.125F, 1, null); + Material material = new Material(); + Appearance appearance = new Appearance(); + Transform3D transform3D = new Transform3D(); + Vector3d vector3d = new Vector3d(); + this.mTfGrp.addChild((Node)box); + this.mWristTfGrp.addChild((Node)this.mWrist.getBrGrp()); + this.mTfGrp.addChild((Node)this.mWristTfGrp); + this.mBrGrp.addChild((Node)this.mTfGrp); + vector3d.set(0.0D, 0.75D, 0.0D); + transform3D.setTranslation(vector3d); + this.mWristTfGrp.setTransform(transform3D); + material.setDiffuseColor(0.0F, 1.0F, 0.0F); + material.setAmbientColor(0.0F, 0.4F, 0.0F); + appearance.setMaterial(material); + box.setAppearance(appearance); + this.mTfGrp.setCapability(18); + rotate(0.0D); + } + + public void incAngle() { + rotate(0.02D); + } + + private void rotate(double paramDouble) { + this.mAngle += paramDouble; + this.mRotTf.rotZ(this.mAngle); + this.mResTf.setIdentity(); + this.mTrnTf.setTranslation(this.mTransFro); + this.mResTf.mul(this.mTrnTf); + this.mResTf.mul(this.mRotTf); + this.mTrnTf.setTranslation(this.mTransTo); + this.mResTf.mul(this.mTrnTf); + this.mTfGrp.setTransform(this.mResTf); + } + + public void incAngle(double paramDouble) { + rotate(paramDouble); + } + + public void decAngle() { + rotate(-0.02D); + } +} + + +/* Location: /opt/SpaceControl/Roboter_Demo.jar!/roboter_demo/ForeArm.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Roboter_Demo/roboter_demo/Hand.java b/Roboter_Demo/roboter_demo/Hand.java new file mode 100644 index 0000000..5bbb122 --- /dev/null +++ b/Roboter_Demo/roboter_demo/Hand.java @@ -0,0 +1,133 @@ +package roboter_demo; + +import com.sun.j3d.utils.geometry.Box; +import javax.media.j3d.Appearance; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Material; +import javax.media.j3d.Node; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Vector3d; + +class Hand { + private final float mWidth = 0.25F; + + private final float mScale = 1.0F; + + private final float mThumbWitdh = 0.025F; + + private BranchGroup mBrGrp = new BranchGroup(); + + private TransformGroup mTfGrp = new TransformGroup(); + + private TransformGroup mThumbTfGrp = new TransformGroup(); + + private TransformGroup mFingersTfGrp = new TransformGroup(); + + private double mSpan; + + private double mAngle; + + private Vector3d mVec = new Vector3d(); + + private Transform3D mTrnTf = new Transform3D(); + + private Transform3D mRotTf = new Transform3D(); + + public BranchGroup getBrGrp() { + return this.mBrGrp; + } + + public Hand() { + Box box1 = new Box(0.125F, 0.125F, 0.125F, 1, null); + Box box2 = new Box(0.0125F, 0.125F, 0.125F, 1, null); + Box box3 = new Box(0.0125F, 0.125F, 0.125F, 1, null); + TransformGroup transformGroup = new TransformGroup(); + Vector3d vector3d = new Vector3d(); + Transform3D transform3D = new Transform3D(); + Material material1 = new Material(); + Material material2 = new Material(); + Appearance appearance1 = new Appearance(); + Appearance appearance2 = new Appearance(); + this.mSpan = 0.25D; + this.mAngle = 0.0D; + transformGroup.addChild((Node)box1); + this.mThumbTfGrp.addChild((Node)box2); + this.mFingersTfGrp.addChild((Node)box3); + this.mTfGrp.addChild((Node)transformGroup); + this.mTfGrp.addChild((Node)this.mThumbTfGrp); + this.mTfGrp.addChild((Node)this.mFingersTfGrp); + this.mBrGrp.addChild((Node)this.mTfGrp); + moveThumbAndFingers(this.mSpan); + rotateHand(0.0D); + material1.setDiffuseColor(0.0F, 1.0F, 1.0F); + material1.setAmbientColor(0.0F, 0.4F, 0.4F); + appearance1.setMaterial(material1); + box1.setAppearance(appearance1); + material2.setDiffuseColor(1.0F, 1.0F, 0.0F); + material2.setAmbientColor(0.4F, 0.4F, 0.0F); + appearance2.setMaterial(material2); + box2.setAppearance(appearance2); + box3.setAppearance(appearance2); + this.mTfGrp.setCapability(18); + this.mThumbTfGrp.setCapability(18); + this.mFingersTfGrp.setCapability(18); + this.mBrGrp.compile(); + } + + public void moveThumbAndFingers(double paramDouble) { + this.mVec.set(-paramDouble / 2.0D, 0.25D, 0.0D); + this.mTrnTf.set(this.mVec); + this.mThumbTfGrp.setTransform(this.mTrnTf); + this.mVec.set(paramDouble / 2.0D, 0.25D, 0.0D); + this.mTrnTf.set(this.mVec); + this.mFingersTfGrp.setTransform(this.mTrnTf); + } + + public void incHandSpan() { + if (this.mSpan < 0.25D) + this.mSpan += 0.01D; + moveThumbAndFingers(this.mSpan); + } + + public void incHandSpan(double paramDouble) { + this.mSpan += paramDouble; + if (this.mSpan <= 0.02500000037252903D) + this.mSpan = 0.02500000037252903D; + if (this.mSpan >= 0.25D) + this.mSpan = 0.25D; + moveThumbAndFingers(this.mSpan); + } + + public void decHandSpan() { + if (this.mSpan > 0.02500000037252903D) + this.mSpan -= 0.01D; + moveThumbAndFingers(this.mSpan); + } + + public void rotateHand(double paramDouble) { + this.mRotTf.rotX(paramDouble); + this.mTfGrp.setTransform(this.mRotTf); + } + + public void incHandAngle() { + this.mAngle += 0.02D; + rotateHand(this.mAngle); + } + + public void incHandAngle(double paramDouble) { + this.mAngle += paramDouble; + rotateHand(this.mAngle); + } + + public void decHandAngle() { + this.mAngle -= 0.02D; + rotateHand(this.mAngle); + } +} + + +/* Location: /opt/SpaceControl/Roboter_Demo.jar!/roboter_demo/Hand.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Roboter_Demo/roboter_demo/HandBehavior.java b/Roboter_Demo/roboter_demo/HandBehavior.java new file mode 100644 index 0000000..5b83c20 --- /dev/null +++ b/Roboter_Demo/roboter_demo/HandBehavior.java @@ -0,0 +1,36 @@ +package roboter_demo; + +import java.util.Enumeration; +import javax.media.j3d.Behavior; +import javax.media.j3d.TransformGroup; +import javax.media.j3d.WakeupCondition; +import javax.media.j3d.WakeupOnTransformChange; + +class HandBehavior extends Behavior { + private TransformGroup mTfGrp; + + private WakeupOnTransformChange mWakeUp; + + public void setTg(TransformGroup paramTransformGroup) { + this.mTfGrp = paramTransformGroup; + } + + HandBehavior(TransformGroup paramTransformGroup) { + this.mTfGrp = paramTransformGroup; + } + + public void initialize() { + this.mWakeUp = new WakeupOnTransformChange(this.mTfGrp); + wakeupOn((WakeupCondition)this.mWakeUp); + } + + public void processStimulus(Enumeration paramEnumeration) { + wakeupOn((WakeupCondition)this.mWakeUp); + } +} + + +/* Location: /opt/SpaceControl/Roboter_Demo.jar!/roboter_demo/HandBehavior.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Roboter_Demo/roboter_demo/ReadingThread.java b/Roboter_Demo/roboter_demo/ReadingThread.java new file mode 100644 index 0000000..83e7b1e --- /dev/null +++ b/Roboter_Demo/roboter_demo/ReadingThread.java @@ -0,0 +1,62 @@ +package roboter_demo; + +import de.spacecontrol.sc.dllwrapper.ScDllWrapper; +import de.spacecontrol.sc.dllwrapper.ScEx; +import de.spacecontrol.sc.dllwrapper.ScStdData; + +public class ReadingThread extends Thread { + private RoboterApp mApp; + + private int mDevIdx; + + private boolean mIsReading; + + public void setDevIdx(int paramInt) { + this.mDevIdx = paramInt; + } + + public void stopReadingThread() { + this.mIsReading = false; + } + + public ReadingThread(RoboterApp paramRoboterApp) { + this.mApp = paramRoboterApp; + this.mDevIdx = paramRoboterApp.getDevIdx(); + } + + public void run() { + boolean bool = true; + int i = 0; + ScStdData scStdData = new ScStdData(); + this.mIsReading = true; + while (this.mIsReading) { + try { + ScDllWrapper.scFetchStdData(this.mDevIdx, scStdData); + if (scStdData.mEvent > -1) { + this.mApp.handleEvent(this.mDevIdx, scStdData.mEvent); + continue; + } + this.mApp.repaintDemo(scStdData); + } catch (ScEx scEx) { + if (bool) { + this.mApp.repaintDemo(scStdData); + if (i++ > 3) { + i = 0; + bool = false; + } + } + } + } + System.out.println("*** Reading thread stopped."); + } + + public void stopp() { + this.mIsReading = false; + } +} + + +/* Location: /opt/SpaceControl/Roboter_Demo.jar!/roboter_demo/ReadingThread.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Roboter_Demo/roboter_demo/RoboterApp.java b/Roboter_Demo/roboter_demo/RoboterApp.java new file mode 100644 index 0000000..1c6c01b --- /dev/null +++ b/Roboter_Demo/roboter_demo/RoboterApp.java @@ -0,0 +1,281 @@ +package roboter_demo; + +import com.sun.j3d.utils.behaviors.vp.OrbitBehavior; +import com.sun.j3d.utils.behaviors.vp.ViewPlatformBehavior; +import com.sun.j3d.utils.geometry.ColorCube; +import com.sun.j3d.utils.universe.SimpleUniverse; +import com.sun.j3d.utils.universe.ViewingPlatform; +import de.spacecontrol.sc.dllwrapper.ScDllWrapper; +import de.spacecontrol.sc.dllwrapper.ScEx; +import de.spacecontrol.sc.dllwrapper.ScStdData; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.GraphicsConfiguration; +import java.awt.Image; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.lang.management.ManagementFactory; +import java.util.ArrayList; +import javax.media.j3d.AmbientLight; +import javax.media.j3d.BoundingSphere; +import javax.media.j3d.Bounds; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Canvas3D; +import javax.media.j3d.DirectionalLight; +import javax.media.j3d.Node; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.vecmath.Color3f; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3d; +import javax.vecmath.Vector3f; + +public class RoboterApp extends JFrame { + private final int mBoundsRange = 1000; + + private int mSceneNo; + + private double mHandSpan; + + private double mHandAngle; + + private ReadingThread mReadingThread = new ReadingThread(this); + + private int mDevIdx; + + private TransformGroup mCubeTfGrp = new TransformGroup(); + + private TransformGroup mThumbTfGrp = new TransformGroup(); + + private TransformGroup mFingersTfGrp = new TransformGroup(); + + private TransformGroup mHandTfGrp = new TransformGroup(); + + private TransformGroup mForeArmTfGrp = new TransformGroup(); + + private TransformGroup mBaseTfGrp = new TransformGroup(); + + private Base mBase = new Base(this.mBaseTfGrp); + + private ViewingPlatform mVp; + + private JPanel mGraphicPanel; + + public int getDevIdx() { + return this.mDevIdx; + } + + public RoboterApp() { + GraphicsConfiguration graphicsConfiguration = SimpleUniverse.getPreferredConfiguration(); + Canvas3D canvas3D = new Canvas3D(graphicsConfiguration); + SimpleUniverse simpleUniverse = new SimpleUniverse(canvas3D); + BranchGroup branchGroup = null; + OrbitBehavior orbitBehavior = new OrbitBehavior(canvas3D); + ArrayList arrayList = new ArrayList(); + String str1 = System.getProperty("os.name"); + boolean bool = str1.contains("OS X"); + this.mVp = simpleUniverse.getViewingPlatform(); + Image image1 = getToolkit().getImage(getClass().getResource("/pics/roboter_16.png")); + Image image2 = getToolkit().getImage(getClass().getResource("/pics/roboter_32.png")); + Image image3 = getToolkit().getImage(getClass().getResource("/pics/roboter_64.png")); + arrayList.add(image1); + arrayList.add(image2); + arrayList.add(image3); + setIconImages(arrayList); + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (UnsupportedLookAndFeelException unsupportedLookAndFeelException) { + + } catch (IllegalAccessException illegalAccessException) { + + } catch (InstantiationException instantiationException) { + + } catch (ClassNotFoundException classNotFoundException) {} + initComponents(); + String str2 = bool ? getClass().getSimpleName() : getTitle(); + this.mGraphicPanel.add("Center", (Component)canvas3D); + simpleUniverse.getViewer().getView().setBackClipDistance(1000.0D); + this.mSceneNo = 1; + switch (this.mSceneNo) { + case 0: + branchGroup = createRoboterSceneGraph(); + this.mVp.setNominalViewingTransform(); + break; + case 1: + branchGroup = createRoboterSceneGraph(); + setViewPos(this.mVp); + orbitBehavior.setSchedulingBounds((Bounds)new BoundingSphere(new Point3d(), 1000.0D)); + orbitBehavior.setZoomFactor(5.0D); + this.mVp.setViewPlatformBehavior((ViewPlatformBehavior)orbitBehavior); + break; + default: + System.out.println("Unknown sceneNo: " + this.mSceneNo); + break; + } + branchGroup.compile(); + simpleUniverse.addBranchGraph(branchGroup); + this.mGraphicPanel.requestFocus(); + try { + String str3 = ManagementFactory.getRuntimeMXBean().getName(); + int i = str3.indexOf('@'); + String str4 = str3.substring(0, i); + ScDllWrapper.scConnect2(false, str2); + this.mReadingThread.start(); + } catch (ScEx scEx) { + System.out.println(scEx); + JOptionPane.showMessageDialog(this.mGraphicPanel, "No connection to SpaceControl driver!\nMove the roboter with keys 1-6 and shift.", "Connection Error", 0); + } + this.mBase.incUpperArmAngle(1.5707963267948966D); + this.mBase.incForeArmAngle(Math.PI); + this.mBase.incWristAngle(1.5707963267948966D); + this.mBase.incHandSpan(-1.0D); + } + + public BranchGroup createSimpleCubeSceneGraph() { + BranchGroup branchGroup = new BranchGroup(); + branchGroup.addChild((Node)this.mCubeTfGrp); + this.mCubeTfGrp.addChild((Node)new ColorCube(0.4D)); + this.mCubeTfGrp.setCapability(18); + return branchGroup; + } + + private void setViewPos(ViewingPlatform paramViewingPlatform) { + TransformGroup transformGroup = paramViewingPlatform.getViewPlatformTransform(); + Transform3D transform3D1 = new Transform3D(); + Transform3D transform3D2 = new Transform3D(); + transformGroup.getTransform(transform3D2); + transform3D2.rotY(Math.toRadians(0.0D)); + transform3D2.rotX(Math.toRadians(-10.0D)); + transform3D1.mul(transform3D2); + transform3D2.setTranslation(new Vector3d(0.0D, 4.0D, 10.0D)); + transform3D1.mul(transform3D2); + transformGroup.setTransform(transform3D1); + } + + private BranchGroup createRoboterSceneGraph() { + BranchGroup branchGroup = new BranchGroup(); + AmbientLight ambientLight = new AmbientLight(new Color3f(1.0F, 1.0F, 1.0F)); + DirectionalLight directionalLight = new DirectionalLight(new Color3f(1.0F, 1.0F, 1.0F), new Vector3f(-1.0F, -0.7F, -0.5F)); + BoundingSphere boundingSphere = new BoundingSphere(new Point3d(), 20.0D); + Floor floor = new Floor(); + branchGroup.addChild((Node)directionalLight); + branchGroup.addChild((Node)ambientLight); + branchGroup.addChild((Node)floor); + branchGroup.addChild((Node)this.mBase.getBrGrp()); + directionalLight.setInfluencingBounds((Bounds)boundingSphere); + ambientLight.setInfluencingBounds((Bounds)boundingSphere); + return branchGroup; + } + + public void repaintDemo(ScStdData paramScStdData) { + int i = 2000; + if (paramScStdData.mB != 0) + this.mBase.incBaseAngle(paramScStdData.mB / i); + if (paramScStdData.mA != 0) + this.mBase.incUpperArmAngle(paramScStdData.mA / i); + if (paramScStdData.mC != 0) + this.mBase.incWristAngle(-(paramScStdData.mC) / i); + if (paramScStdData.mX != 0) + this.mBase.incHandAngle(-(paramScStdData.mX) / i); + if (paramScStdData.mY != 0) + this.mBase.incHandSpan(paramScStdData.mY / i); + if (paramScStdData.mZ != 0) + this.mBase.incForeArmAngle(paramScStdData.mZ / i); + } + + public void handleEvent(int paramInt1, int paramInt2) { + switch (paramInt2) { + case 131084: + handleFitEvent(); + break; + default: + System.out.println("*** Event '" + paramInt2 + "' not supported."); + break; + } + } + + private void handleFitEvent() { + setViewPos(this.mVp); + } + + private void initComponents() { + this.mGraphicPanel = new JPanel(); + setDefaultCloseOperation(3); + setTitle("SC Roboter Demo"); + this.mGraphicPanel.setMinimumSize(new Dimension(640, 480)); + this.mGraphicPanel.setPreferredSize(new Dimension(640, 480)); + this.mGraphicPanel.addFocusListener(new FocusAdapter() { + public void focusLost(FocusEvent param1FocusEvent) { + RoboterApp.this.mGraphicPanelFocusLost(param1FocusEvent); + } + }); + this.mGraphicPanel.addKeyListener(new KeyAdapter() { + public void keyPressed(KeyEvent param1KeyEvent) { + RoboterApp.this.mGraphicPanelKeyPressed(param1KeyEvent); + } + }); + this.mGraphicPanel.setLayout(new BorderLayout()); + getContentPane().add(this.mGraphicPanel, "Center"); + pack(); + } + + private void mGraphicPanelFocusLost(FocusEvent paramFocusEvent) { + String str = System.getProperty("os.name"); + if (str.equals("Linux")) + return; + this.mGraphicPanel.requestFocus(); + } + + private void mGraphicPanelKeyPressed(KeyEvent paramKeyEvent) { + int i = paramKeyEvent.getKeyCode(); + char c = paramKeyEvent.getKeyChar(); + if (c == '1') { + this.mBase.incBaseAngle(); + } else if (c == '!') { + this.mBase.decBaseAngle(); + } else if (c == '2') { + this.mBase.incUpperArmAngle(); + } else if (c == '"') { + this.mBase.decUpperArmAngle(); + } else if (c == '3') { + this.mBase.incForeArmAngle(); + } else if (c == '�') { + this.mBase.decForeArmAngle(); + } else if (c == '4') { + this.mBase.incWristAngle(); + } else if (c == '$') { + this.mBase.decWristAngle(); + } else if (c == '5') { + this.mBase.incHandAngle(); + } else if (c == '%') { + this.mBase.decHandAngle(); + } else if (c == '6') { + this.mBase.incHandSpan(); + } else if (c == '&') { + this.mBase.decHandSpan(); + } + } + + public static void main(String[] paramArrayOfString) { + EventQueue.invokeLater(new Runnable() { + public void run() { + new RoboterApp().setVisible(true); + } + }); + } +} + + +/* Location: /opt/SpaceControl/Roboter_Demo.jar!/roboter_demo/RoboterApp.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Roboter_Demo/roboter_demo/UpperArm.java b/Roboter_Demo/roboter_demo/UpperArm.java new file mode 100644 index 0000000..c625aa8 --- /dev/null +++ b/Roboter_Demo/roboter_demo/UpperArm.java @@ -0,0 +1,141 @@ +package roboter_demo; + +import com.sun.j3d.utils.geometry.Box; +import javax.media.j3d.Appearance; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Material; +import javax.media.j3d.Node; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Vector3d; + +class UpperArm { + private final float mWidth = 0.25F; + + private final float mLength = 1.0F; + + private final float mScale = 1.0F; + + private final Vector3d mTransTo = new Vector3d(0.0D, 0.375D, 0.0D); + + private final Vector3d mTransFro = new Vector3d(0.0D, -0.375D, 0.0D); + + private BranchGroup mBrGrp = new BranchGroup(); + + private TransformGroup mTfGrp = new TransformGroup(); + + private TransformGroup mForeArmTfGrp = new TransformGroup(); + + private ForeArm mForeArm = new ForeArm(); + + private double mAngle; + + private Transform3D mRotTf = new Transform3D(); + + private Transform3D mTrnTf = new Transform3D(); + + private Transform3D mResTf = new Transform3D(); + + public BranchGroup getBrGrp() { + return this.mBrGrp; + } + + public void incForeArmAngle() { + this.mForeArm.incAngle(); + } + + public void decForeArmAngle() { + this.mForeArm.decAngle(); + } + + public void incWristAngle() { + this.mForeArm.incWristAngle(); + } + + public void decWristAngle() { + this.mForeArm.decWristAngle(); + } + + public void incHandAngle() { + this.mForeArm.incHandAngle(); + } + + public void decHandAngle() { + this.mForeArm.decHandAngle(); + } + + public void incHandSpan() { + this.mForeArm.incHandSpan(); + } + + public void decHandSpan() { + this.mForeArm.decHandSpan(); + } + + public void incForeArmAngle(double paramDouble) { + this.mForeArm.incAngle(paramDouble); + } + + public void incWristAngle(double paramDouble) { + this.mForeArm.incWristAngle(paramDouble); + } + + public void incHandAngle(double paramDouble) { + this.mForeArm.incHandAngle(paramDouble); + } + + public void incHandSpan(double paramDouble) { + this.mForeArm.incHandSpan(paramDouble); + } + + public UpperArm() { + Box box = new Box(0.125F, 0.5F, 0.125F, 1, null); + Material material = new Material(); + Appearance appearance = new Appearance(); + Transform3D transform3D = new Transform3D(); + Vector3d vector3d = new Vector3d(); + this.mTfGrp.addChild((Node)box); + this.mForeArmTfGrp.addChild((Node)this.mForeArm.getBrGrp()); + this.mTfGrp.addChild((Node)this.mForeArmTfGrp); + this.mBrGrp.addChild((Node)this.mTfGrp); + vector3d.set(0.0D, 0.75D, -0.25D); + transform3D.setTranslation(vector3d); + this.mForeArmTfGrp.setTransform(transform3D); + material.setDiffuseColor(1.0F, 0.0F, 1.0F); + material.setAmbientColor(0.4F, 0.0F, 0.4F); + appearance.setMaterial(material); + box.setAppearance(appearance); + this.mTfGrp.setCapability(18); + rotate(0.0D); + } + + public void incAngle() { + rotate(0.02D); + } + + private void rotate(double paramDouble) { + this.mAngle += paramDouble; + this.mRotTf.rotZ(this.mAngle); + this.mResTf.setIdentity(); + this.mTrnTf.setTranslation(this.mTransFro); + this.mResTf.mul(this.mTrnTf); + this.mResTf.mul(this.mRotTf); + this.mTrnTf.setTranslation(this.mTransTo); + this.mResTf.mul(this.mTrnTf); + this.mTfGrp.setTransform(this.mResTf); + } + + public void incAngle(double paramDouble) { + rotate(paramDouble); + } + + public void decAngle() { + rotate(-0.02D); + } +} + + +/* Location: /opt/SpaceControl/Roboter_Demo.jar!/roboter_demo/UpperArm.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/Roboter_Demo/roboter_demo/Wrist.java b/Roboter_Demo/roboter_demo/Wrist.java new file mode 100644 index 0000000..638a05f --- /dev/null +++ b/Roboter_Demo/roboter_demo/Wrist.java @@ -0,0 +1,110 @@ +package roboter_demo; + +import com.sun.j3d.utils.geometry.Box; +import javax.media.j3d.Appearance; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Material; +import javax.media.j3d.Node; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Vector3d; + +class Wrist { + private final float mWidth = 0.25F; + + private final float mLength = 0.5F; + + private final float mScale = 1.0F; + + private BranchGroup mBrGrp = new BranchGroup(); + + private TransformGroup mTfGrp = new TransformGroup(); + + private TransformGroup mHandTfGrp = new TransformGroup(); + + private Hand mHand = new Hand(); + + private double mAngle; + + private Transform3D mRotTf = new Transform3D(); + + private Transform3D mTrnTf = new Transform3D(); + + private Transform3D mResTf = new Transform3D(); + + public BranchGroup getBrGrp() { + return this.mBrGrp; + } + + public void incHandAngle() { + this.mHand.incHandAngle(); + } + + public void decHandAngle() { + this.mHand.decHandAngle(); + } + + public void incHandSpan() { + this.mHand.incHandSpan(); + } + + public void decHandSpan() { + this.mHand.decHandSpan(); + } + + public void incHandAngle(double paramDouble) { + this.mHand.incHandAngle(paramDouble); + } + + public void incHandSpan(double paramDouble) { + this.mHand.incHandSpan(paramDouble); + } + + public Wrist() { + Box box = new Box(0.125F, 0.25F, 0.125F, 1, null); + Material material = new Material(); + Appearance appearance = new Appearance(); + Transform3D transform3D = new Transform3D(); + Vector3d vector3d = new Vector3d(); + this.mTfGrp.addChild((Node)box); + this.mHandTfGrp.addChild((Node)this.mHand.getBrGrp()); + this.mTfGrp.addChild((Node)this.mHandTfGrp); + this.mBrGrp.addChild((Node)this.mTfGrp); + vector3d.set(0.0D, 0.125D, -0.25D); + transform3D.rotY(1.5707963267948966D); + transform3D.setTranslation(vector3d); + this.mHandTfGrp.setTransform(transform3D); + material.setDiffuseColor(0.0F, 0.0F, 1.0F); + material.setAmbientColor(0.0F, 0.0F, 0.4F); + appearance.setMaterial(material); + box.setAppearance(appearance); + this.mTfGrp.setCapability(18); + rotate(0.0D); + } + + public void incAngle() { + rotate(0.02D); + } + + private void rotate(double paramDouble) { + this.mAngle += paramDouble; + this.mRotTf.rotY(this.mAngle); + this.mResTf.setIdentity(); + this.mResTf.mul(this.mRotTf); + this.mTfGrp.setTransform(this.mResTf); + } + + public void incAngle(double paramDouble) { + rotate(paramDouble); + } + + public void decAngle() { + rotate(-0.02D); + } +} + + +/* Location: /opt/SpaceControl/Roboter_Demo.jar!/roboter_demo/Wrist.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/META-INF/MANIFEST.MF b/SC_DLL_Wrapper/META-INF/MANIFEST.MF new file mode 100644 index 0000000..71b93b0 --- /dev/null +++ b/SC_DLL_Wrapper/META-INF/MANIFEST.MF @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +Ant-Version: Apache Ant 1.9.7 +Created-By: 1.8.0_172-b11 (Oracle Corporation) +Class-Path: +Main-Class: de.spacecontrol.sc.dllwrapper.ScDllWrapper + diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScAdvSens.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScAdvSens.java new file mode 100644 index 0000000..7f28fa4 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScAdvSens.java @@ -0,0 +1,43 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScAdvSens implements Cloneable { + public int mXSens; + + public int mYSens; + + public int mZSens; + + public int mASens; + + public int mBSens; + + public int mCSens; + + public ScAdvSens clone() { + try { + return (ScAdvSens)super.clone(); + } catch (CloneNotSupportedException cloneNotSupportedException) { + cloneNotSupportedException.printStackTrace(); + return null; + } + } + + public void setToDefaults() { + this.mXSens = 7; + this.mYSens = 7; + this.mZSens = 7; + this.mASens = 7; + this.mBSens = 7; + this.mCSens = 7; + } + + public String convToString() { + return "ScAdvSens:\n" + Util.convToString(this); + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScAdvSens.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScAdvancedSettings.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScAdvancedSettings.java new file mode 100644 index 0000000..353e499 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScAdvancedSettings.java @@ -0,0 +1,147 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScAdvancedSettings implements Cloneable { + public ScAdvSens mSens = new ScAdvSens(); + + public boolean mIsX; + + public boolean mIsY; + + public boolean mIsZ; + + public boolean mIsXRev; + + public boolean mIsYRev; + + public boolean mIsZRev; + + public int mXRemap; + + public int mYRemap; + + public int mZRemap; + + public boolean mIsA; + + public boolean mIsB; + + public boolean mIsC; + + public boolean mIsARev; + + public boolean mIsBRev; + + public boolean mIsCRev; + + public int mARemap; + + public int mBRemap; + + public int mCRemap; + + public int mMouseDirX; + + public int mMouseDirY; + + public int mMouseDirZ; + + public int mMouseDirA; + + public int mMouseDirB; + + public int mMouseDirC; + + public boolean mIsMouseMove; + + public boolean mIsMouseToRestore; + + public boolean mIsMouseAbs; + + public int mSendDelay; + + public int mAverageNum; + + public boolean mIsRemap; + + public short mTraLmBnd; + + public short mTraMhBnd; + + public short mRotLmBnd; + + public short mRotMhBnd; + + public boolean mIsToSendToFgWin; + + public boolean mIsSpcFuncToSend; + + public boolean mIsWheelAssShown; + + public boolean mIsWsFuncToSend; + + public boolean mIsCapFuncToSend; + + public boolean mAreChangesToSend; + + public int mBrightnessRed; + + public int mBrightnessGreen; + + public boolean mAreDevLights; + + public int mRotCenterMode; + + public int mMoveMode; + + public boolean mIsRightHandMode; + + public boolean mIsClock; + + public boolean mIsAutoFit; + + public int mLanguage; + + public int mPicture; + + public static final int OBJ_SCREEN = 0; + + public static final int OBJ_ORIGIN = 1; + + public static final int CAM_STANDARD = 2; + + public static final int CAM_TARGET = 3; + + public static final int CAM_HOVER = 4; + + public static final int DF = 0; + + public static final int EN = 1; + + public static final int DE = 2; + + public static final int FR = 3; + + public ScAdvancedSettings clone() { + try { + ScAdvancedSettings scAdvancedSettings = (ScAdvancedSettings)super.clone(); + scAdvancedSettings.mSens = this.mSens.clone(); + return scAdvancedSettings; + } catch (CloneNotSupportedException cloneNotSupportedException) { + cloneNotSupportedException.printStackTrace(); + return null; + } + } + + public String convToString() { + StringBuffer stringBuffer = new StringBuffer("ScAdvancedSettings:\n"); + stringBuffer.append(this.mSens.convToString()); + stringBuffer.append(Util.convToString(this)); + return stringBuffer.toString(); + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScAdvancedSettings.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScApplNotFoundEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScApplNotFoundEx.java new file mode 100644 index 0000000..1683095 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScApplNotFoundEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScApplNotFoundEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScApplNotFoundEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScBasicSettings.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScBasicSettings.java new file mode 100644 index 0000000..e130a0f --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScBasicSettings.java @@ -0,0 +1,34 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScBasicSettings implements Cloneable { + public boolean mIsDom; + + public int mTraSens; + + public int mRotSens; + + public int mNullRadius; + + public int mBrightnessBlue; + + public int mBrightnessDspl; + + public ScBasicSettings clone() { + try { + return (ScBasicSettings)super.clone(); + } catch (CloneNotSupportedException cloneNotSupportedException) { + cloneNotSupportedException.printStackTrace(); + return null; + } + } + + public String convToString() { + return "ScBasicSettings:\n" + Util.convToString(this); + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScBasicSettings.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScComErrEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScComErrEx.java new file mode 100644 index 0000000..e978bcb --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScComErrEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScComErrEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScComErrEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDevInfo.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDevInfo.java new file mode 100644 index 0000000..670fd6d --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDevInfo.java @@ -0,0 +1,26 @@ +package de.spacecontrol.sc.dllwrapper; + +import java.io.Serializable; + +public class ScDevInfo implements Cloneable, Serializable { + public int mId; + + public String mSerialNo; + + public String mDescrptn; + + public ScDevInfo clone() { + try { + return (ScDevInfo)super.clone(); + } catch (CloneNotSupportedException cloneNotSupportedException) { + cloneNotSupportedException.printStackTrace(); + return null; + } + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScDevInfo.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDevPars.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDevPars.java new file mode 100644 index 0000000..a683c33 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDevPars.java @@ -0,0 +1,164 @@ +package de.spacecontrol.sc.dllwrapper; + +import java.io.Serializable; + +public class ScDevPars implements Cloneable, Serializable { + public static final short INACTIVE = 0; + + public static final short SAVE_SETTINGS = 3; + + public static final short TOGGLE_HOVER = 7; + + public static final short TOGGLE_DEV_LIGHTS = 11; + + public static final short TOGGLE_RIGHT_HAND_MODE = 12; + + public static final short INCR_SENS = 13; + + public static final short DECR_SENS = 14; + + public static final short INCR_THRESH = 15; + + public static final short DECR_THRESH = 16; + + public static final short INCR_LCD = 17; + + public static final short DECR_LCD = 18; + + public static final short INCR_LEDS = 19; + + public static final short DECR_LEDS = 20; + + public static final short WHEEL_TO_SENS = 21; + + public static final short WHEEL_TO_THRESH = 22; + + public static final short WHEEL_TO_LCD = 23; + + public static final short WHEEL_TO_LEDS = 24; + + public static final short WHEEL_TO_WFL = 25; + + public static final short WHEEL_TO_GESTURES = 26; + + public static final short WHEEL_TO_FNC_KEYS = 27; + + public static final short HNDL_SENS_DLG = 28; + + public static final short HNDL_THRESH_DLG = 29; + + public static final short HNDL_LCD_DLG = 30; + + public static final short HNDL_LEDS_DLG = 31; + + public static final short HNDL_WFL_DLG = 32; + + public static final short HNDL_WHEEL_GESTURES = 33; + + public static final short HNDL_FNC_KEYS = 34; + + public static final short CTRL = 35; + + public static final short ALT = 36; + + public static final short SHIFT = 37; + + public static final short ESC = 38; + + public static final short PANEL = 44; + + public static final short HNDL_CALC_DLG = 45; + + public static final short SWITCH_KEY_SHIFT_LEVEL = 46; + + public static final short BACK = 47; + + public static final short LEFT = 48; + + public static final short BOTTOM = 49; + + public static final short RESERVED_9 = 55; + + public static final short MOUSE_BUT_LEFT = 56; + + public static final short MOUSE_BUT_MID = 57; + + public static final short MOUSE_BUT_RIGHT = 58; + + public static final short MOUSE_WHEEL_UP = 59; + + public static final short MOUSE_WHEEL_DOWN = 60; + + public static final short JOY_BUT = 68; + + public static final short LOAD_CFG_1 = 72; + + public static final short LOAD_CFG_3 = 74; + + public static final int MAX_FUNC_NUM = 140; + + public static final int MAX_FILE_NAME_LEN = 256; + + public int mSysFuncNum; + + public int mExecApplLoadCfgNum; + + public String mName; + + public String mFileName; + + public ScBasicSettings mBs = new ScBasicSettings(); + + public ScAdvancedSettings mAs = new ScAdvancedSettings(); + + public ScKeyAssignment mKa = new ScKeyAssignment(); + + public ScFunc[] mFuncList = new ScFunc[140]; + + public ScDevPars() { + for (int i = 0; i < 140; i++) + this.mFuncList[i] = new ScFunc("", ""); + } + + public ScDevPars clone() { + try { + ScDevPars scDevPars = (ScDevPars)super.clone(); + scDevPars.mBs = this.mBs.clone(); + scDevPars.mAs = this.mAs.clone(); + scDevPars.mKa = this.mKa.clone(); + scDevPars.mFuncList = (ScFunc[])this.mFuncList.clone(); + for (int i = 0; i < 140; i++) + scDevPars.mFuncList[i] = this.mFuncList[i].clone(); + return scDevPars; + } catch (CloneNotSupportedException cloneNotSupportedException) { + cloneNotSupportedException.printStackTrace(); + return null; + } + } + + public String convToString() { + StringBuffer stringBuffer = new StringBuffer(Util.convToString(this)); + stringBuffer.append(this.mBs.convToString()); + stringBuffer.append(this.mAs.convToString()); + stringBuffer.append(this.mKa.convToString()); + for (int i = 0; i < 140; i++) + stringBuffer.append(this.mFuncList[i].convToString()); + return stringBuffer.toString(); + } + + public boolean areWheelGesturesActive() { + short s1 = this.mKa.mWheelLeft; + short s2 = this.mKa.mWheelRight; + return areWheelGesturesActive(s1, s2); + } + + public static boolean areWheelGesturesActive(int paramInt1, int paramInt2) { + return (paramInt1 == 33 && paramInt2 == 33); + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScDevPars.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDllWrapper.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDllWrapper.java new file mode 100644 index 0000000..e7fbffa --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScDllWrapper.java @@ -0,0 +1,1028 @@ +package de.spacecontrol.sc.dllwrapper; + +import java.util.ArrayList; +import javax.swing.JOptionPane; + +public class ScDllWrapper { + public static final int LED_NUM = 33; + + public static final int MAX_BRIGHTNESS = 15; + + public static final int NOTHING_CHANGED = -1; + + public static final int BSC_SETTINGS_CHANGED = 131072; + + public static final int ADV_SETTINGS_CHANGED = 131073; + + public static final int DEV_PARS_CHANGED = 131074; + + public static final int DEV_ERR_UNKNOWN_COMMAND = 131075; + + public static final int DEV_ERR_INVALID_VALUE = 131076; + + public static final int DEV_ERR_PARSE_ERROR = 131077; + + public static final int DEV_ERR_INTERNAL_ERROR = 131078; + + public static final int DEV_ERR_INVALID_ID = 131079; + + public static final int DEV_ERR_BUF_OVERFLOW = 131080; + + public static final int DEV_FRONT = 131081; + + public static final int DEV_RIGHT = 131082; + + public static final int DEV_TOP = 131083; + + public static final int DEV_FIT = 131084; + + public static final int DEV_WHEEL_LEFT = 131085; + + public static final int DEV_WHEEL_RIGHT = 131086; + + public static final int EVT_HNDL_SENS_DLG = 131087; + + public static final int EVT_HNDL_THRESH_DLG = 131088; + + public static final int EVT_HNDL_LCD_DLG = 131089; + + public static final int EVT_HNDL_LEDS_DLG = 131090; + + public static final int EVT_APPL_IN_FRGRND = 131091; + + public static final int EVT_HNDL_KBD_DLG = 131092; + + public static final int EVT_HNDL_WFL_DLG = 131093; + + public static final int DEV_BACK = 131094; + + public static final int DEV_LEFT = 131095; + + public static final int DEV_BOTTOM = 131096; + + public static final int DEV_CTRL = 131097; + + public static final int APPL_FUNC_START = 131104; + + public static final String CMD_UPDATE_FIRMWARE = "0"; + + public static final String CMD_UPDATE_FIRMWARE_GUI = "1"; + + public static final String CMD_ACCEPT_ALL_FTDIS = "2"; + + public static final String CMD_BLINK_LEDS = "3"; + + public static final String CMD_INJECT_STRING = "4"; + + public static final String CMD_SET_FAKE_ZERO = "7"; + + public static final int BAUD = 0; + + public static final int MAX_BYTES_IN_RX_QUEUE = 1; + + public static final int PORT = 2; + + public static final int CFG_AUTO_CHANGE = 3; + + public static final int REMEMBER_LAST_CONFIG = 4; + + public static final int DISABLE_CUBE_DEMO = 5; + + public static final int EXPLORER_DELAY = 6; + + public static final int DEVICE_TIMEOUT = 7; + + public static final int SEND_MODE = 8; + + public static final int SEND_DELAY = 9; + + public static final int CAP_CHARACTERISTIC = 10; + + public static final int SINGLE_COM_PER_APPL = 11; + + public static final int ENABLE_LEGACY_COM1 = 12; + + public static final int ENABLE_LEGACY_COM2 = 13; + + public static final int BLINK_PERIOD = 14; + + public static final int SEARCH_TOP_WINDOW = 15; + + public static final int SKIP_TIMEOUT = 16; + + public static final int TIME_BEFORE_SLEEPING = 17; + + public static final int WHEEL_ACCELERATOR = 18; + + public static final int DEVICE_CHECKING_TIME = 19; + + private static boolean loadLibrary(ArrayList paramArrayList) { + boolean bool = false; + String str = ""; + for (String str1 : paramArrayList) { + try { + System.load(str1); + System.out.println("Library loaded: " + str1); + bool = true; + break; + } catch (UnsatisfiedLinkError unsatisfiedLinkError) { + str = str + str1 + "\n"; + } + } + if (!bool) + JOptionPane.showMessageDialog(null, "Loading\n" + str + "\nfailed!", "Load Error", 0); + return bool; + } + + public static String eventToString(int paramInt) { + if (paramInt < 131072) + return "Key event " + paramInt; + switch (paramInt) { + case -1: + return "NOTHING_CHANGED"; + case 131072: + return "BSC_SETTINGS_CHANGED"; + case 131073: + return "ADV_SETTINGS_CHANGED"; + case 131074: + return "DEV_PARS_CHANGED"; + case 131075: + return "DEV_ERR_UNKNOWN_COMMAND"; + case 131076: + return "DEV_ERR_INVALID_VALUE"; + case 131077: + return "DEV_ERR_PARSE_ERROR"; + case 131078: + return "DEV_ERR_INTERNAL_ERROR"; + case 131079: + return "DEV_ERR_INVALID_ID"; + case 131080: + return "DEV_ERR_BUF_OVERFLOW"; + case 131081: + return "DEV_FRONT"; + case 131082: + return "DEV_RIGHT"; + case 131083: + return "DEV_TOP"; + case 131084: + return "DEV_FIT"; + case 131086: + return "DEV_WHEEL_RIGHT"; + case 131085: + return "DEV_WHEEL_LEFT"; + case 131087: + return "EVT_HNDL_SENS_DLG"; + case 131088: + return "EVT_HNDL_THRESH_DLG"; + case 131089: + return "EVT_HNDL_LCD_DLG"; + case 131090: + return "EVT_HNDL_LEDS_DLG"; + case 131091: + return "EVT_APPL_IN_FRGRND"; + case 131092: + return "EVT_HNDL_KBD_DLG"; + case 131093: + return "EVT_HNDL_WFL_DLG"; + case 131094: + return "DEV_BACK"; + case 131095: + return "DEV_LEFT"; + case 131096: + return "DEV_BOTTOM"; + case 131097: + return "DEV_CTRL"; + } + return "Unknown event " + paramInt; + } + + private static ScStatus intToStatus(int paramInt) { + switch (paramInt) { + case 0: + return ScStatus.SC_OK; + case 1: + return ScStatus.SC_COMMUNICATION_ERROR; + case 2: + return ScStatus.SC_WRONG_DEVICE_INDEX; + case 3: + return ScStatus.SC_PARAMETER_OUT_OF_RANGE; + case 4: + return ScStatus.SC_FILE_IO_ERROR; + case 5: + return ScStatus.SC_KEYSTROKE_ERROR; + case 6: + return ScStatus.SC_APPL_NOT_FOUND; + case 7: + return ScStatus.SC_REGISTRY_ERROR; + case 8: + return ScStatus.SC_NOT_SUPPORTED; + case 9: + return ScStatus.SC_EXEC_CMD_ERROR; + case 10: + return ScStatus.SC_THREAD_ERROR; + case 11: + return ScStatus.SC_WRONG_USER; + } + return ScStatus.SC_ERR_END; + } + + public static void scIsProcessRunning(ScOneString paramScOneString, ScOneBoolean paramScOneBoolean) { + isProcessRunning(paramScOneString, paramScOneBoolean); + } + + public static void scSetCurrentUserRegValue(ScThreeStrings paramScThreeStrings) throws ScEx { + int i = setCurrentUserRegValue(paramScThreeStrings); + throwScEx(i); + } + + public static void scQueryCurrentUserRegValue(ScTwoStrings paramScTwoStrings, int paramInt, ScOneString paramScOneString) throws ScEx { + int i = queryCurrentUserRegValue(paramScTwoStrings, paramInt, paramScOneString); + throwScEx(i); + } + + public static void scDelCurrentUserRegValue(ScTwoStrings paramScTwoStrings) throws ScEx { + int i = delCurrentUserRegValue(paramScTwoStrings); + throwScEx(i); + } + + public static void scConnect2(boolean paramBoolean, String paramString) throws ScEx { + ScOneBoolean scOneBoolean = new ScOneBoolean(paramBoolean); + ScOneString scOneString = (paramString == null) ? new ScOneString("") : new ScOneString(paramString); + int i = connect2(scOneBoolean, scOneString); + throwScEx(i); + } + + public static void scConnect() throws ScEx { + int i = connect(); + throwScEx(i); + } + + private static void throwScEx(int paramInt) throws ScEx { + switch (paramInt) { + case 0: + return; + case 1: + throw new ScComErrEx(); + case 2: + throw new ScWrongDevIdxEx(); + case 3: + throw new ScParOutOfRangeEx(); + case 4: + throw new ScFileIoEx(); + case 5: + throw new ScKeystrokeEx(); + case 6: + throw new ScApplNotFoundEx(); + case 7: + throw new ScRegistryEx(); + case 8: + throw new ScNotSupportedEx(); + case 9: + throw new ScExecCmdErrEx(); + case 10: + throw new ScThreadErrEx(); + case 11: + throw new ScWrongUserEx(); + } + throw new ScEx(); + } + + public static void scDisconnect() throws ScEx { + int i = disconnect(); + throwScEx(i); + } + + public static void scStop() throws ScEx { + int i = stop(); + throwScEx(i); + } + + public static void scGetDmnVrsn(ScTwoStrings paramScTwoStrings) throws ScEx { + int i = getDmnVrsn(paramScTwoStrings); + throwScEx(i); + } + + public static void scGetDevNum(ScThreeInts paramScThreeInts) throws ScEx { + int i = getDevNum(paramScThreeInts); + throwScEx(i); + } + + public static void scGetFgAppl(ScTwoStrings paramScTwoStrings) throws ScEx { + int i = getFgAppl(paramScTwoStrings); + throwScEx(i); + } + + public static void scGetDllLogPars(ScLogPars paramScLogPars) { + getDllLogPars(paramScLogPars); + } + + public static void scSetDllLogPars(ScLogPars paramScLogPars) { + setDllLogPars(paramScLogPars); + } + + public static void scSetState2(String paramString) throws ScEx { + ScOneString scOneString = new ScOneString(paramString); + int i = setState2(scOneString); + throwScEx(i); + } + + public static void scSetState(ScTwoStrings paramScTwoStrings) throws ScEx { + int i = setState(paramScTwoStrings); + throwScEx(i); + } + + public static void scSetMode(ScOneInt paramScOneInt) throws ScEx { + int i = setMode(paramScOneInt); + throwScEx(i); + } + + public static void scGetDaemonPar(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = getDaemonPar(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetDaemonPar(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = setDaemonPar(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scGetDevInfo(int paramInt, ScDevInfo paramScDevInfo) throws ScEx { + int i = getDevInfo(paramInt, paramScDevInfo); + throwScEx(i); + } + + public static void scGetDefDevPars(int paramInt, ScDevPars paramScDevPars) throws ScEx { + int i = getDefDevPars(paramInt, paramScDevPars); + throwScEx(i); + } + + public static void scGetDevPars(int paramInt, ScDevPars paramScDevPars) throws ScEx { + int i = getDevPars(paramInt, paramScDevPars); + throwScEx(i); + } + + public static void scSetDevPars(int paramInt, ScDevPars paramScDevPars) throws ScEx { + int i = setDevPars(paramInt, paramScDevPars); + throwScEx(i); + } + + public static void scSetDevParsToDefaults(int paramInt, ScDevPars paramScDevPars) throws ScEx { + int i = setDevParsToDefaults(paramInt, paramScDevPars); + throwScEx(i); + } + + public static void scGetBasicSettings(int paramInt, ScBasicSettings paramScBasicSettings) throws ScEx { + int i = getBasicSettings(paramInt, paramScBasicSettings); + throwScEx(i); + } + + public static void scSetBasicSettings(int paramInt, ScBasicSettings paramScBasicSettings) throws ScEx { + int i = setBasicSettings(paramInt, paramScBasicSettings); + throwScEx(i); + } + + public static void scGetAdvancedSettings(int paramInt, ScAdvancedSettings paramScAdvancedSettings) throws ScEx { + int i = getAdvancedSettings(paramInt, paramScAdvancedSettings); + throwScEx(i); + } + + public static void scSetAdvancedSettings(int paramInt, ScAdvancedSettings paramScAdvancedSettings) throws ScEx { + int i = setAdvancedSettings(paramInt, paramScAdvancedSettings); + throwScEx(i); + } + + public static void scGetAdvSens(int paramInt, ScAdvSens paramScAdvSens) throws ScEx { + int i = getAdvSens(paramInt, paramScAdvSens); + throwScEx(i); + } + + public static void scSetAdvSens(int paramInt, ScAdvSens paramScAdvSens) throws ScEx { + int i = setAdvSens(paramInt, paramScAdvSens); + throwScEx(i); + } + + public static void scGetStdMode(int paramInt, ScOneByte paramScOneByte) throws ScEx { + int i = getStdMode(paramInt, paramScOneByte); + throwScEx(i); + } + + public static void scSetStdMode(int paramInt, ScOneByte paramScOneByte) throws ScEx { + int i = setStdMode(paramInt, paramScOneByte); + throwScEx(i); + } + + public static void scGetCmprMode(int paramInt, ScOneByte paramScOneByte) throws ScEx { + int i = getCmprMode(paramInt, paramScOneByte); + throwScEx(i); + } + + public static void scSetCmprMode(int paramInt, ScOneByte paramScOneByte) throws ScEx { + int i = setCmprMode(paramInt, paramScOneByte); + throwScEx(i); + } + + public static void scGetSens(int paramInt, ScTwoInts paramScTwoInts) throws ScEx { + int i = getSens(paramInt, paramScTwoInts); + throwScEx(i); + } + + public static void scSetSens(int paramInt, ScTwoInts paramScTwoInts) throws ScEx { + int i = setSens(paramInt, paramScTwoInts); + throwScEx(i); + } + + public static void scGetXTraSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = getXTraSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetXTraSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = setXTraSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scGetYTraSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = getYTraSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetYTraSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = setYTraSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scGetZTraSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = getZTraSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetZTraSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = setZTraSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scGetXRotSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = getXRotSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetXRotSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = setXRotSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scGetYRotSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = getYRotSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetYRotSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = setYRotSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scGetZRotSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = getZRotSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetZRotSens(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = setZRotSens(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scGetSendDelay(int paramInt, ScTwoInts paramScTwoInts) throws ScEx { + int i = getSendDelay(paramInt, paramScTwoInts); + throwScEx(i); + } + + public static void scSetSendDelay(int paramInt, ScTwoInts paramScTwoInts) throws ScEx { + int i = setSendDelay(paramInt, paramScTwoInts); + throwScEx(i); + } + + public static void scGetNullRad(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = getNullRad(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetNullRad(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = setNullRad(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetStdZero(int paramInt) throws ScEx { + int i = setStdZero(paramInt); + throwScEx(i); + } + + public static void scGetStdData(int paramInt, ScStdData paramScStdData) throws ScEx { + int i = getStdData(paramInt, paramScStdData); + throwScEx(i); + } + + public static void scFetchStdData(int paramInt, ScStdData paramScStdData) throws ScEx { + int i = fetchStdData(paramInt, paramScStdData); + throwScEx(i); + } + + public static void scGetRawData(int paramInt, byte[] paramArrayOfbyte) throws ScEx { + int i = getRawData(paramInt, paramArrayOfbyte); + throwScEx(i); + } + + public static void scGetTra(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getTra(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetTra(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setTra(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetXTra(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getXTra(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetXTra(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setXTra(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetYTra(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getYTra(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetYTra(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setYTra(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetZTra(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getZTra(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetZTra(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setZTra(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetXTraRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getXTraRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetXTraRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setXTraRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetYTraRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getYTraRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetYTraRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setYTraRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetZTraRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getZTraRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetZTraRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setZTraRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetRot(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getRot(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetRot(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setRot(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetXRot(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getXRot(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetXRot(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setXRot(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetYRot(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getYRot(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetYRot(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setYRot(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetZRot(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getZRot(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetZRot(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setZRot(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetXRotRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getXRotRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetXRotRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setXRotRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetYRotRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getYRotRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetYRotRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setYRotRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetZRotRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getZRotRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetZRotRev(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setZRotRev(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetDom(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = getDom(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scSetDom(int paramInt, ScOneBoolean paramScOneBoolean) throws ScEx { + int i = setDom(paramInt, paramScOneBoolean); + throwScEx(i); + } + + public static void scGetCfgFileName(int paramInt, ScOneString paramScOneString) throws ScEx { + int i = getCfgFileName(paramInt, paramScOneString); + throwScEx(i); + } + + public static void scSaveDevPars(int paramInt, ScOneString paramScOneString) throws ScEx { + int i = saveDevPars(paramInt, paramScOneString); + throwScEx(i); + } + + public static void scSaveDevPars(int paramInt, String paramString) throws ScEx { + ScOneString scOneString = new ScOneString(paramString); + int i = saveDevPars(paramInt, scOneString); + throwScEx(i); + } + + public static void scLoadDevPars(int paramInt, ScOneString paramScOneString, ScDevPars paramScDevPars) throws ScEx { + int i = loadDevPars(paramInt, paramScOneString, paramScDevPars); + throwScEx(i); + } + + public static void scLoadDevPars(int paramInt, String paramString, ScDevPars paramScDevPars) throws ScEx { + ScOneString scOneString = new ScOneString(paramString); + int i = loadDevPars(paramInt, scOneString, paramScDevPars); + throwScEx(i); + } + + public static void scPressKey(int paramInt1, int paramInt2) throws ScEx { + int i = pressKey(paramInt1, paramInt2); + throwScEx(i); + } + + public static void scRelKey(int paramInt1, int paramInt2) throws ScEx { + int i = relKey(paramInt1, paramInt2); + throwScEx(i); + } + + public static void scTriggerFunction(int paramInt1, int paramInt2) throws ScEx { + int i = triggerFunction(paramInt1, paramInt2); + throwScEx(i); + } + + public static void scSetLeds(int paramInt, ScThreeInts paramScThreeInts) throws ScEx { + int i = setLeds(paramInt, paramScThreeInts); + throwScEx(i); + } + + public static void scGetLed(int paramInt1, int paramInt2, ScOneInt paramScOneInt) throws ScEx { + int i = getLed(paramInt1, paramInt2, paramScOneInt); + throwScEx(i); + } + + public static void scSetLed(int paramInt1, int paramInt2, ScOneInt paramScOneInt) throws ScEx { + int i = setLed(paramInt1, paramInt2, paramScOneInt); + throwScEx(i); + } + + public static void scGetLedsEx(int paramInt, byte[] paramArrayOfbyte) throws ScEx { + int i = getLedsEx(paramInt, paramArrayOfbyte); + throwScEx(i); + } + + public static void scSetLedsEx(int paramInt, byte[] paramArrayOfbyte) throws ScEx { + int i = setLedsEx(paramInt, paramArrayOfbyte); + throwScEx(i); + } + + public static void scGetLcd(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = getLcd(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetLcd(int paramInt, ScOneInt paramScOneInt) throws ScEx { + int i = setLcd(paramInt, paramScOneInt); + throwScEx(i); + } + + public static void scSetLcdColor(int paramInt, ScThreeInts paramScThreeInts) throws ScEx { + int i = setLcdColor(paramInt, paramScThreeInts); + throwScEx(i); + } + + public static void scSetDsplString(int paramInt1, int paramInt2, String paramString, ScOneInt paramScOneInt) throws ScEx { + int i = setDsplString(paramInt1, paramInt2, paramString, paramScOneInt); + throwScEx(i); + } + + public static void scGetFmwUpdtState(int paramInt, ScTwoInts paramScTwoInts) throws ScEx { + int i = getFmwUpdtState(paramInt, paramScTwoInts); + throwScEx(i); + } + + public static void scExecCmd(int paramInt, String paramString) throws ScEx { + ScOneString scOneString = new ScOneString(paramString); + int i = execCmd(paramInt, scOneString); + throwScEx(i); + } + + public static void main(String[] paramArrayOfString) { + ScDevPars scDevPars = new ScDevPars(); + try { + scConnect(); + scSetDevParsToDefaults(0, scDevPars); + } catch (ScEx scEx) { + scEx.printStackTrace(); + } + } + + private static native int isProcessRunning(ScOneString paramScOneString, ScOneBoolean paramScOneBoolean); + + private static native int setCurrentUserRegValue(ScThreeStrings paramScThreeStrings); + + private static native int queryCurrentUserRegValue(ScTwoStrings paramScTwoStrings, int paramInt, ScOneString paramScOneString); + + private static native int delCurrentUserRegValue(ScTwoStrings paramScTwoStrings); + + private static native int connect2(ScOneBoolean paramScOneBoolean, ScOneString paramScOneString); + + private static native int connect(); + + private static native int disconnect(); + + private static native int stop(); + + private static native int getDmnVrsn(ScTwoStrings paramScTwoStrings); + + private static native int getDevNum(ScThreeInts paramScThreeInts); + + private static native int getFgAppl(ScTwoStrings paramScTwoStrings); + + private static native int getDllLogPars(ScLogPars paramScLogPars); + + private static native int setDllLogPars(ScLogPars paramScLogPars); + + private static native int setState2(ScOneString paramScOneString); + + private static native int setState(ScTwoStrings paramScTwoStrings); + + private static native int setMode(ScOneInt paramScOneInt); + + private static native int getDevInfo(int paramInt, ScDevInfo paramScDevInfo); + + private static native int getDefDevPars(int paramInt, ScDevPars paramScDevPars); + + private static native int getDevPars(int paramInt, ScDevPars paramScDevPars); + + private static native int setDevPars(int paramInt, ScDevPars paramScDevPars); + + private static native int setDevParsToDefaults(int paramInt, ScDevPars paramScDevPars); + + private static native int getBasicSettings(int paramInt, ScBasicSettings paramScBasicSettings); + + private static native int setBasicSettings(int paramInt, ScBasicSettings paramScBasicSettings); + + private static native int getAdvancedSettings(int paramInt, ScAdvancedSettings paramScAdvancedSettings); + + private static native int setAdvancedSettings(int paramInt, ScAdvancedSettings paramScAdvancedSettings); + + private static native int getAdvSens(int paramInt, ScAdvSens paramScAdvSens); + + private static native int setAdvSens(int paramInt, ScAdvSens paramScAdvSens); + + private static native int getCfgFileName(int paramInt, ScOneString paramScOneString); + + private static native int saveDevPars(int paramInt, ScOneString paramScOneString); + + private static native int loadDevPars(int paramInt, ScOneString paramScOneString, ScDevPars paramScDevPars); + + private static native int getStdMode(int paramInt, ScOneByte paramScOneByte); + + private static native int setStdMode(int paramInt, ScOneByte paramScOneByte); + + private static native int getCmprMode(int paramInt, ScOneByte paramScOneByte); + + private static native int setCmprMode(int paramInt, ScOneByte paramScOneByte); + + private static native int getSens(int paramInt, ScTwoInts paramScTwoInts); + + private static native int setSens(int paramInt, ScTwoInts paramScTwoInts); + + private static native int getXTraSens(int paramInt, ScOneInt paramScOneInt); + + private static native int setXTraSens(int paramInt, ScOneInt paramScOneInt); + + private static native int getYTraSens(int paramInt, ScOneInt paramScOneInt); + + private static native int setYTraSens(int paramInt, ScOneInt paramScOneInt); + + private static native int getZTraSens(int paramInt, ScOneInt paramScOneInt); + + private static native int setZTraSens(int paramInt, ScOneInt paramScOneInt); + + private static native int getXRotSens(int paramInt, ScOneInt paramScOneInt); + + private static native int setXRotSens(int paramInt, ScOneInt paramScOneInt); + + private static native int getYRotSens(int paramInt, ScOneInt paramScOneInt); + + private static native int setYRotSens(int paramInt, ScOneInt paramScOneInt); + + private static native int getZRotSens(int paramInt, ScOneInt paramScOneInt); + + private static native int setZRotSens(int paramInt, ScOneInt paramScOneInt); + + private static native int getSendDelay(int paramInt, ScTwoInts paramScTwoInts); + + private static native int setSendDelay(int paramInt, ScTwoInts paramScTwoInts); + + private static native int getNullRad(int paramInt, ScOneInt paramScOneInt); + + private static native int setNullRad(int paramInt, ScOneInt paramScOneInt); + + private static native int setStdZero(int paramInt); + + private static native int getStdData(int paramInt, ScStdData paramScStdData); + + private static native int fetchStdData(int paramInt, ScStdData paramScStdData); + + private static native int getRawData(int paramInt, byte[] paramArrayOfbyte); + + private static native int getTra(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setTra(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getXTra(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setXTra(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getYTra(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setYTra(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getZTra(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setZTra(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getXTraRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setXTraRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getYTraRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setYTraRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getZTraRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setZTraRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getRot(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setRot(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getXRot(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setXRot(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getYRot(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setYRot(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getZRot(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setZRot(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getXRotRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setXRotRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getYRotRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setYRotRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getZRotRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setZRotRev(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int getDom(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int setDom(int paramInt, ScOneBoolean paramScOneBoolean); + + private static native int pressKey(int paramInt1, int paramInt2); + + private static native int relKey(int paramInt1, int paramInt2); + + private static native int triggerFunction(int paramInt1, int paramInt2); + + private static native int setLeds(int paramInt, ScThreeInts paramScThreeInts); + + private static native int getLedsEx(int paramInt, byte[] paramArrayOfbyte); + + private static native int setLedsEx(int paramInt, byte[] paramArrayOfbyte); + + private static native int getLed(int paramInt1, int paramInt2, ScOneInt paramScOneInt); + + private static native int setLed(int paramInt1, int paramInt2, ScOneInt paramScOneInt); + + private static native int getLcd(int paramInt, ScOneInt paramScOneInt); + + private static native int setLcd(int paramInt, ScOneInt paramScOneInt); + + private static native int setLcdColor(int paramInt, ScThreeInts paramScThreeInts); + + private static native int setDsplString(int paramInt1, int paramInt2, String paramString, ScOneInt paramScOneInt); + + private static native int getFmwUpdtState(int paramInt, ScTwoInts paramScTwoInts); + + private static native int execCmd(int paramInt, ScOneString paramScOneString); + + private static native int getDaemonPar(int paramInt, ScOneInt paramScOneInt); + + private static native int setDaemonPar(int paramInt, ScOneInt paramScOneInt); + + static { + ArrayList arrayList = new ArrayList(); + boolean bool = false; + String str1 = System.getProperty("os.name"); + String str2 = System.getProperty("user.dir"); + if (str1.equals("Mac OS X")) { + arrayList.add(str2 + "/lib/libspc_ctrl_64.dylib"); + arrayList.add(str2 + "/../SC_DLL/dist/ReleaseOSX64/GNU-MacOSX/libspc_ctrl_64.dylib"); + bool = loadLibrary(arrayList); + } else if (str1.equals("Linux")) { + arrayList.add(str2 + "/lib/libspc_ctrl.so"); + arrayList.add(str2 + "/../SC_DLL/dist/ReleaseLinux64/GNU-Linux/libspc_ctrl_64.so.2.9.2"); + arrayList.add(str2 + "/../SC_DLL/dist/ReleaseLinux/GNU-Linux/libspc_ctrl_32.so.2.9.2"); + bool = loadLibrary(arrayList); + } else if (str1.startsWith("Windows")) { + arrayList.add(str2 + "\\libs\\win32\\spc_ctrlr_32.dll"); + arrayList.add(str2 + "\\libs\\win64\\spc_ctrlr_64.dll"); + arrayList.add(str2 + "\\..\\SC_DLL\\dist\\Release\\spc_ctrlr_32.dll"); + arrayList.add(str2 + "\\..\\SC_DLL\\dist\\Release\\spc_ctrlr_64.dll"); + arrayList.add(str2 + "\\..\\SC_DLL\\dist\\Debug\\spc_ctrlr_32.dll"); + arrayList.add(str2 + "\\..\\SC_DLL\\dist\\Debug\\spc_ctrlr_64.dll"); + bool = loadLibrary(arrayList); + } else { + JOptionPane.showMessageDialog(null, "Operating system '" + str1 + "' not supported!", "Load Error", 0); + } + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScDllWrapper.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScEx.java new file mode 100644 index 0000000..41b8a3d --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScEx extends Exception {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScExecCmdErrEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScExecCmdErrEx.java new file mode 100644 index 0000000..d90e99f --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScExecCmdErrEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScExecCmdErrEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScExecCmdErrEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScFileIoEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScFileIoEx.java new file mode 100644 index 0000000..855a720 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScFileIoEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScFileIoEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScFileIoEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScFunc.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScFunc.java new file mode 100644 index 0000000..0b241f7 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScFunc.java @@ -0,0 +1,37 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScFunc implements Cloneable { + public static final int MAX_FUNC_NAME_LEN = 32; + + public static final int MAX_FUNC_LEN = 256; + + public int mIdx; + + public String mName; + + public String mFunc; + + public ScFunc(String paramString1, String paramString2) { + this.mName = paramString1; + this.mFunc = paramString2; + } + + public ScFunc clone() { + try { + return (ScFunc)super.clone(); + } catch (CloneNotSupportedException cloneNotSupportedException) { + cloneNotSupportedException.printStackTrace(); + return null; + } + } + + public String convToString() { + return this.mName + ": " + this.mFunc + "\n"; + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScFunc.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScKeyAssignment.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScKeyAssignment.java new file mode 100644 index 0000000..189e774 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScKeyAssignment.java @@ -0,0 +1,208 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScKeyAssignment implements Cloneable { + public static final int MAX_WHEEL_SLOTS_NUM = 28; + + public short m1; + + public short m2; + + public short m3; + + public short m4; + + public short m5; + + public short m6; + + public short mCtrl; + + public short mAlt; + + public short mShift; + + public short mEsc; + + public short mFront; + + public short mRight; + + public short mTop; + + public short mFit; + + public short m2D3D; + + public short mPanel; + + public short mMenue; + + public short m1B; + + public short m2B; + + public short m3B; + + public short m4B; + + public short m5B; + + public short m6B; + + public short mCtrlB; + + public short mAltB; + + public short mShiftB; + + public short mEscB; + + public short mFrontB; + + public short mRightB; + + public short mTopB; + + public short mFitB; + + public short m2D3DB; + + public short mPanelB; + + public short mMenueB; + + public short mWheelLeft; + + public short mWheelRight; + + public short mWheelL; + + public short mWheelR; + + public short mWheelLr; + + public short mWheelRl; + + public short mWheelLrl; + + public short mWheelRlr; + + public short mWheelLl; + + public short mWheelRr; + + public short[] mWheelSlot = new short[28]; + + public short mXll; + + public short mXlm; + + public short mXlh; + + public short mXrl; + + public short mXrm; + + public short mXrh; + + public short mYdl; + + public short mYdm; + + public short mYdh; + + public short mYul; + + public short mYum; + + public short mYuh; + + public short mZfl; + + public short mZfm; + + public short mZfh; + + public short mZbl; + + public short mZbm; + + public short mZbh; + + public short mAnyTraL; + + public short mAnyTraM; + + public short mAnyTraH; + + public short mArl; + + public short mArm; + + public short mArh; + + public short mAll; + + public short mAlm; + + public short mAlh; + + public short mBrl; + + public short mBrm; + + public short mBrh; + + public short mBll; + + public short mBlm; + + public short mBlh; + + public short mCrl; + + public short mCrm; + + public short mCrh; + + public short mCll; + + public short mClm; + + public short mClh; + + public short mAnyRotL; + + public short mAnyRotM; + + public short mAnyRotH; + + public short mAnyL; + + public short mAnyM; + + public short mAnyH; + + public short mAnyStarted; + + public short mAnyStopped; + + public ScKeyAssignment clone() { + try { + return (ScKeyAssignment)super.clone(); + } catch (CloneNotSupportedException cloneNotSupportedException) { + cloneNotSupportedException.printStackTrace(); + return null; + } + } + + public String convToString() { + return "ScKeyAssignment:\n" + Util.convToString(this); + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScKeyAssignment.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScKeystrokeEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScKeystrokeEx.java new file mode 100644 index 0000000..a51fada --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScKeystrokeEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScKeystrokeEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScKeystrokeEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScLogPars.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScLogPars.java new file mode 100644 index 0000000..19c1f5e --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScLogPars.java @@ -0,0 +1,35 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScLogPars { + public String mLogFile = "default_log.txt"; + + public int mMaxSize = 500; + + public boolean mIsLogToFile = false; + + public boolean mIsLogToCnsl = false; + + public boolean mIsWrn = false; + + public boolean mIsCrt = false; + + public boolean mIsTrc = false; + + public boolean mIsDcm = false; + + public boolean mIsIcm = false; + + public boolean mIsInf = false; + + public boolean mIsDbg = false; + + public boolean mIsTmp = false; + + public String mExclFileToLog = ""; +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScLogPars.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScNotSupportedEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScNotSupportedEx.java new file mode 100644 index 0000000..876deef --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScNotSupportedEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScNotSupportedEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScNotSupportedEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneBoolean.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneBoolean.java new file mode 100644 index 0000000..6298acb --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneBoolean.java @@ -0,0 +1,17 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScOneBoolean { + public boolean mVal; + + public ScOneBoolean() {} + + public ScOneBoolean(boolean paramBoolean) { + this.mVal = paramBoolean; + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScOneBoolean.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneByte.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneByte.java new file mode 100644 index 0000000..87595ec --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneByte.java @@ -0,0 +1,15 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScOneByte { + public byte mVal = 0; + + public ScOneByte() {} + + public ScOneByte(byte paramByte) {} +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScOneByte.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneInt.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneInt.java new file mode 100644 index 0000000..8a42bd6 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneInt.java @@ -0,0 +1,15 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScOneInt { + public int mVal = 0; + + public ScOneInt() {} + + public ScOneInt(int paramInt) {} +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScOneInt.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneString.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneString.java new file mode 100644 index 0000000..d3ef803 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScOneString.java @@ -0,0 +1,17 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScOneString { + public String mVal; + + public ScOneString() {} + + public ScOneString(String paramString) { + this.mVal = paramString; + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScOneString.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScParOutOfRangeEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScParOutOfRangeEx.java new file mode 100644 index 0000000..7772f47 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScParOutOfRangeEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScParOutOfRangeEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScParOutOfRangeEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScRegistryEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScRegistryEx.java new file mode 100644 index 0000000..db1790b --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScRegistryEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScRegistryEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScRegistryEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScStatus.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScStatus.java new file mode 100644 index 0000000..1333128 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScStatus.java @@ -0,0 +1,11 @@ +package de.spacecontrol.sc.dllwrapper; + +public enum ScStatus { + SC_OK, SC_COMMUNICATION_ERROR, SC_WRONG_DEVICE_INDEX, SC_PARAMETER_OUT_OF_RANGE, SC_FILE_IO_ERROR, SC_KEYSTROKE_ERROR, SC_APPL_NOT_FOUND, SC_REGISTRY_ERROR, SC_NOT_SUPPORTED, SC_EXEC_CMD_ERROR, SC_THREAD_ERROR, SC_WRONG_USER, SC_ERR_END; +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScStatus.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScStdData.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScStdData.java new file mode 100644 index 0000000..8f14657 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScStdData.java @@ -0,0 +1,31 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScStdData { + public short mX; + + public short mY; + + public short mZ; + + public short mA; + + public short mB; + + public short mC; + + public int mTraLmh; + + public int mRotLmh; + + public int mEvent; + + public int mTvSec; + + public int mTvUsec; +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScStdData.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreadErrEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreadErrEx.java new file mode 100644 index 0000000..43d8385 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreadErrEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScThreadErrEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScThreadErrEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreeInts.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreeInts.java new file mode 100644 index 0000000..360afc1 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreeInts.java @@ -0,0 +1,19 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScThreeInts { + public int mVal1 = 0; + + public int mVal2 = 0; + + public int mVal3 = 0; + + public ScThreeInts() {} + + public ScThreeInts(int paramInt1, int paramInt2, int paramInt3) {} +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScThreeInts.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreeStrings.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreeStrings.java new file mode 100644 index 0000000..825f121 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScThreeStrings.java @@ -0,0 +1,23 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScThreeStrings { + public String mVal1; + + public String mVal2; + + public String mVal3; + + public ScThreeStrings() {} + + public ScThreeStrings(String paramString1, String paramString2, String paramString3) { + this.mVal1 = paramString1; + this.mVal2 = paramString2; + this.mVal3 = paramString3; + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScThreeStrings.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScTwoInts.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScTwoInts.java new file mode 100644 index 0000000..50f622c --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScTwoInts.java @@ -0,0 +1,17 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScTwoInts { + public int mVal1 = 0; + + public int mVal2 = 0; + + public ScTwoInts() {} + + public ScTwoInts(int paramInt1, int paramInt2) {} +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScTwoInts.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScTwoStrings.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScTwoStrings.java new file mode 100644 index 0000000..bcca9ec --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScTwoStrings.java @@ -0,0 +1,20 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScTwoStrings { + public String mVal1; + + public String mVal2; + + public ScTwoStrings() {} + + public ScTwoStrings(String paramString1, String paramString2) { + this.mVal1 = paramString1; + this.mVal2 = paramString2; + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScTwoStrings.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScWrongDevIdxEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScWrongDevIdxEx.java new file mode 100644 index 0000000..9c9dab0 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScWrongDevIdxEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScWrongDevIdxEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScWrongDevIdxEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScWrongUserEx.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScWrongUserEx.java new file mode 100644 index 0000000..a06376a --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/ScWrongUserEx.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +public class ScWrongUserEx extends ScEx {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/ScWrongUserEx.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/Util.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/Util.java new file mode 100644 index 0000000..b54eb23 --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/Util.java @@ -0,0 +1,65 @@ +package de.spacecontrol.sc.dllwrapper; + +import java.lang.reflect.Field; + +public class Util { + public static void copy(Object paramObject1, Object paramObject2) { + Class clazz1 = paramObject1.getClass(); + Class clazz2 = paramObject2.getClass(); + String str1 = clazz1.getName(); + String str2 = clazz2.getName(); + Field[] arrayOfField = clazz1.getDeclaredFields(); + if (!str1.equals(str2)) + throw new IllegalArgumentException(); + for (int i = 0; i < arrayOfField.length; i++) { + Field field = arrayOfField[i]; + Class clazz = field.getType(); + String str = clazz.toString(); + try { + if (str.equals("boolean")) { + field.setBoolean(paramObject2, field.getBoolean(paramObject1)); + } else if (str.equals("int")) { + field.setInt(paramObject2, field.getInt(paramObject1)); + } else { + System.out.println("unknown type"); + } + } catch (IllegalArgumentException illegalArgumentException) { + illegalArgumentException.printStackTrace(); + } catch (IllegalAccessException illegalAccessException) { + illegalAccessException.printStackTrace(); + } + } + } + + public static String convToString(Object paramObject) { + StringBuffer stringBuffer = new StringBuffer(""); + Class clazz = paramObject.getClass(); + Field[] arrayOfField = clazz.getDeclaredFields(); + for (int i = 0; i < arrayOfField.length; i++) { + Field field = arrayOfField[i]; + Class clazz1 = field.getType(); + String str1 = clazz1.toString(); + int j = str1.lastIndexOf('.'); + str1 = str1.substring(j + 1); + String str2 = String.format("%20s", new Object[] { str1 }); + stringBuffer.append(str2); + stringBuffer.append(' '); + stringBuffer.append(String.format("%16s", new Object[] { field.getName() })); + stringBuffer.append(" = "); + try { + stringBuffer.append(field.get(paramObject).toString() + "\n"); + } catch (IllegalArgumentException illegalArgumentException) { + illegalArgumentException.printStackTrace(); + } catch (IllegalAccessException illegalAccessException) { + illegalAccessException.printStackTrace(); + } + } + return stringBuffer.toString(); + } +} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/Util.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file diff --git a/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/package-info.java b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/package-info.java new file mode 100644 index 0000000..25ad40b --- /dev/null +++ b/SC_DLL_Wrapper/de/spacecontrol/sc/dllwrapper/package-info.java @@ -0,0 +1,9 @@ +package de.spacecontrol.sc.dllwrapper; + +interface package-info {} + + +/* Location: /opt/SpaceControl/lib/SC_DLL_Wrapper.jar!/de/spacecontrol/sc/dllwrapper/package-info.class + * Java compiler version: 5 (49.0) + * JD-Core Version: 1.2.1 + */ \ No newline at end of file