├── .circleci └── config.yml ├── .csync_journal.db ├── .gitignore ├── .gitmodules ├── .project ├── LICENSE ├── README.md ├── andork-bspline ├── .classpath ├── .gitignore ├── .project ├── build.xml ├── src │ └── org │ │ └── andork │ │ └── bspline │ │ ├── BSplines.java │ │ ├── FastFloatBSplineEvaluator.java │ │ ├── FloatArrayBSpline.java │ │ ├── FloatArraySmoothRandomWalk.java │ │ └── FloatBSplineEvaluator.java └── test │ └── org │ └── andork │ └── bspline │ └── FastFloatBSplineEvaluatorTest.java ├── andork-codegen ├── .classpath ├── .gitignore ├── .project └── src │ └── org │ └── andork │ ├── codegen │ ├── CodeBuilder.java │ ├── CodeBuilder2.java │ ├── LineRegion.java │ ├── LineUtils.java │ ├── ModifiableCompilationUnit.java │ ├── NameUtils.java │ ├── builder │ │ ├── BuilderAllowNull.java │ │ ├── BuilderElementName.java │ │ ├── BuilderGenerator.java │ │ ├── BuilderIgnore.java │ │ ├── BuilderLazyInitialize.java │ │ └── BuilderValidator.java │ └── model │ │ ├── ModelGenerator.java │ │ ├── ModelGenerator2.java │ │ ├── ModelTemplate.java │ │ ├── TestTemplate.java │ │ └── TestTemplate2.java │ └── japa │ └── JavaParserUtils.java ├── andork-core ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml ├── src │ └── org │ │ └── andork │ │ ├── bind │ │ ├── BiFunctionBinder.java │ │ ├── BimapperBinder.java │ │ ├── Binder.java │ │ ├── BinderWrapper.java │ │ ├── DefaultBinder.java │ │ ├── EqualsBinder.java │ │ ├── HierarchicalChangeBinder.java │ │ ├── QMapKeyedBinder.java │ │ ├── QObjectAttributeBinder.java │ │ └── TriFunctionBinder.java │ │ ├── collect │ │ ├── AbstractSetMultiMap.java │ │ ├── ArrayLists.java │ │ ├── HashSetMultiMap.java │ │ ├── HashSets.java │ │ ├── InvertibleHashSetMultiMap.java │ │ ├── InvertibleMultiMap.java │ │ ├── InvertibleSetMultiMap.java │ │ ├── Iterables.java │ │ ├── Iterators.java │ │ ├── LinkedHashSetMultiMap.java │ │ ├── LinkedListMultiMap.java │ │ ├── LinkedPriorityEntry.java │ │ ├── ListMultiMap.java │ │ ├── MapLiteral.java │ │ ├── MultiMap.java │ │ ├── MultiMaps.java │ │ ├── PriorityEntry.java │ │ ├── SetMultiMap.java │ │ ├── SmallArrayMap.java │ │ ├── SmallArraySet.java │ │ ├── StringTrieMap.java │ │ ├── Visitor.java │ │ ├── WeakOrderedCollection.java │ │ └── WeakValueMap.java │ │ ├── concurrent │ │ └── Throttler.java │ │ ├── date │ │ └── DateUtils.java │ │ ├── event │ │ ├── BasicPropertyChangeListener.java │ │ ├── BasicPropertyChangeListenerProxy.java │ │ ├── BasicPropertyChangeSupport.java │ │ ├── HierarchicalBasicPropertyChangeAdapter.java │ │ ├── HierarchicalBasicPropertyChangeListener.java │ │ ├── HierarchicalBasicPropertyChangePropagator.java │ │ ├── HierarchicalBasicPropertyChangeSupport.java │ │ ├── RootChangeListener.java │ │ └── SourcePath.java │ │ ├── format │ │ ├── CollectionFormat.java │ │ ├── DateFormatWrapper.java │ │ ├── DoubleFormat.java │ │ ├── DoubleParser.java │ │ ├── Format.java │ │ ├── FormatWarning.java │ │ ├── FormattedText.java │ │ ├── IntegerFormat.java │ │ └── StringFormat.java │ │ ├── func │ │ ├── BigDecimalBimapper.java │ │ ├── BigIntegerBimapper.java │ │ ├── Bimapper.java │ │ ├── BimapperFactory.java │ │ ├── Bimappers.java │ │ ├── BooleanBimapper.java │ │ ├── CharPredicate.java │ │ ├── CharSupplier.java │ │ ├── Color2HexStringBimapper.java │ │ ├── CompoundBimapper.java │ │ ├── CompoundMapper.java │ │ ├── DateBimapper.java │ │ ├── DoubleBimapper.java │ │ ├── DoubleStringBimapper.java │ │ ├── EnumBimapper.java │ │ ├── ExceptionRunnable.java │ │ ├── ExceptionSupplier.java │ │ ├── ExponentialIntBimapper.java │ │ ├── FileStringBimapper.java │ │ ├── FloatArray2ListBimapper.java │ │ ├── FloatBimapper.java │ │ ├── FloatBinaryOperator.java │ │ ├── FloatUnaryOperator.java │ │ ├── IdentityHashMapBimapper.java │ │ ├── IdentityHashMapMapper.java │ │ ├── IntegerBimapper.java │ │ ├── IntegerStringBimapper.java │ │ ├── InverseBimapper.java │ │ ├── LinearFloatBimapper.java │ │ ├── ListBimapper.java │ │ ├── ListMapper.java │ │ ├── Lodash.java │ │ ├── LongBimapper.java │ │ ├── Mapper.java │ │ ├── MemoOne.java │ │ ├── NullBimapper.java │ │ ├── OutCastingBimapper.java │ │ ├── PathStringBimapper.java │ │ ├── Predicate.java │ │ ├── RoundingFloat2IntegerBimapper.java │ │ ├── RuntimeInvocationTargetException.java │ │ ├── SetBimapper.java │ │ ├── SetMapper.java │ │ ├── ShorterCode.java │ │ ├── StreamUtils.java │ │ ├── StringBimapper.java │ │ ├── ThrowingDoubleFunction.java │ │ ├── ThrowingFunction.java │ │ ├── ThrowingToDoubleFunction.java │ │ ├── ToStringMapper.java │ │ └── TriFunction.java │ │ ├── io │ │ ├── CSVFormat.java │ │ ├── Downloader.java │ │ ├── FileDigest.java │ │ ├── FileStreamFlattener.java │ │ ├── FileUtils.java │ │ ├── InputStreamUtils.java │ │ ├── MultiplexOutputStream.java │ │ ├── Readers.java │ │ └── WriterOutputStream.java │ │ ├── logging │ │ ├── Java17SimpleFormatter.java │ │ └── LoggerPrintStream.java │ │ ├── model │ │ ├── DefaultProperty.java │ │ ├── HasChangeSupport.java │ │ ├── Model.java │ │ └── Property.java │ │ ├── q │ │ ├── QArrayList.java │ │ ├── QArrayListBimapper.java │ │ ├── QCollection.java │ │ ├── QElement.java │ │ ├── QElementDeepCloneBimapper.java │ │ ├── QHashMap.java │ │ ├── QHashSet.java │ │ ├── QLinkedHashMap.java │ │ ├── QLinkedHashSet.java │ │ ├── QList.java │ │ ├── QMap.java │ │ ├── QMapBimapper.java │ │ ├── QObject.java │ │ ├── QObjectMapBimapper.java │ │ ├── QObjectTabDelimBimapper.java │ │ ├── QSet.java │ │ └── QSpec.java │ │ ├── reflect │ │ ├── CompactTypeFormatter.java │ │ ├── DefaultTypeFormatter.java │ │ ├── ObjectTraverser.java │ │ ├── ReflectionUtils.java │ │ ├── Sizer.java │ │ └── TypeFormatter.java │ │ ├── semver │ │ ├── Re.java │ │ └── SemVer.java │ │ ├── task │ │ ├── ExecutorTaskService.java │ │ ├── Task.java │ │ ├── TaskCallable.java │ │ ├── TaskCanceledException.java │ │ ├── TaskRunnable.java │ │ └── TaskService.java │ │ ├── uncaught │ │ ├── GroupingUncaughtExceptionHandler.java │ │ ├── MultiplexUncaughtExceptionHandler.java │ │ ├── UncaughtEDTExceptionHandler.java │ │ ├── UncaughtExceptionLogger.java │ │ └── UncaughtExceptionPrinter.java │ │ └── util │ │ ├── AnimationUtils.java │ │ ├── ArrayUtils.java │ │ ├── ClassFinder.java │ │ ├── Comparables.java │ │ ├── Comparators.java │ │ ├── EasyIterator.java │ │ ├── FileRecoveryConfig.java │ │ ├── Java7.java │ │ ├── JavaScript.java │ │ ├── Levenshtein.java │ │ ├── LevenshteinCorrector.java │ │ ├── Pair.java │ │ ├── RecoverableFileOutputStream.java │ │ ├── Reparam.java │ │ ├── SizeFormat.java │ │ ├── StringUtils.java │ │ └── VersionUtil.java ├── test │ └── org │ │ └── andork │ │ ├── collect │ │ └── WeakValueMapTest.java │ │ ├── format │ │ └── DoubleParserTest.java │ │ ├── func │ │ └── LodashDebounceTests.java │ │ ├── io │ │ ├── CSVTest.java │ │ ├── DownloaderTest.java │ │ └── words.txt │ │ ├── semver │ │ └── SemVerTest.java │ │ └── util │ │ ├── ObjectTraverserTest.java │ │ ├── RecoverableFileOutputStreamTest.java │ │ └── StringUtilsTest.java └── trace.txt ├── andork-cpcurves ├── .classpath ├── .gitignore ├── .project └── src │ └── org │ └── andork │ └── curves │ ├── CurveVisualizer.java │ ├── CurvesTestFrame.java │ └── CurvesTestScene.java ├── andork-gson ├── .classpath ├── .gitignore ├── .project └── src │ └── org │ └── andork │ ├── gson2snakeyaml │ ├── Gson2SnakeYaml.java │ └── SnakeYaml2Gson.java │ └── spec │ └── json │ ├── JsonSpec.java │ ├── JsonSpecArrayList.java │ ├── JsonSpecCollection.java │ ├── JsonSpecElement.java │ ├── JsonSpecList.java │ └── JsonSpecObject.java ├── andork-j3d-utils ├── .classpath ├── .gitignore ├── .project ├── src │ └── org │ │ └── andork │ │ ├── j3d │ │ ├── Cylinder.java │ │ ├── DebugVector.java │ │ ├── J3DUtils.java │ │ ├── Primitive.java │ │ ├── Sandbox3D.java │ │ ├── SceneGraphIterator.java │ │ ├── XyzAxes2.java │ │ ├── camera │ │ │ ├── Camera3D.java │ │ │ ├── CameraEvent.java │ │ │ ├── CameraListener.java │ │ │ ├── CameraPosition.java │ │ │ └── CameraPositionUtils.java │ │ ├── math │ │ │ ├── OrientationUtils.java │ │ │ ├── TransformComputer3d.java │ │ │ └── TransformComputer3f.java │ │ └── newcamera │ │ │ └── CameraPosition.java │ │ ├── math3d │ │ └── curve │ │ │ ├── Spline3d.java │ │ │ ├── SplineCurve3f.java │ │ │ └── Sweeper3f.java │ │ └── spatial │ │ ├── BBox.java │ │ ├── SIBranch.java │ │ └── SINode.java └── test │ └── org │ └── andork │ └── math3d │ └── curve │ └── FlatFloatArrayBSplineGfTest.java ├── andork-jogl-gl2es2-swing ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml └── src │ ├── com │ └── jogamp │ │ └── opengl │ │ └── util │ │ ├── awt │ │ ├── AWTGLPixelBuffer.java │ │ ├── AWTGLReadBufferUtil.java │ │ ├── ImageUtil.java │ │ ├── Overlay.java │ │ ├── TextRenderer.java │ │ └── TextureRenderer.java │ │ ├── packrect │ │ ├── BackingStoreManager.java │ │ ├── Level.java │ │ ├── LevelSet.java │ │ ├── Rect.java │ │ ├── RectVisitor.java │ │ ├── RectanglePacker.java │ │ └── package.html │ │ └── texture │ │ ├── ImageSequence.java │ │ ├── Texture.java │ │ ├── TextureCoords.java │ │ ├── TextureData.java │ │ ├── TextureIO.java │ │ ├── TextureSequence.java │ │ ├── TextureState.java │ │ ├── TimeFrameI.java │ │ ├── awt │ │ ├── AWTTextureData.java │ │ └── AWTTextureIO.java │ │ └── spi │ │ ├── DDSImage.java │ │ ├── LEDataInputStream.java │ │ ├── LEDataOutputStream.java │ │ ├── NetPbmTextureWriter.java │ │ ├── SGIImage.java │ │ ├── TGAImage.java │ │ ├── TextureProvider.java │ │ ├── TextureWriter.java │ │ └── awt │ │ ├── IIOTextureProvider.java │ │ └── IIOTextureWriter.java │ ├── jogamp │ └── opengl │ │ └── util │ │ └── awt │ │ └── text │ │ ├── AbstractGlyphProducer.java │ │ ├── AbstractGlyphRenderer.java │ │ ├── AbstractQuadPipeline.java │ │ ├── AsciiGlyphProducer.java │ │ ├── Check.java │ │ ├── Glyph.java │ │ ├── GlyphCache.java │ │ ├── GlyphMap.java │ │ ├── GlyphProducer.java │ │ ├── GlyphProducers.java │ │ ├── GlyphRenderer.java │ │ ├── GlyphRendererGL2.java │ │ ├── GlyphRendererGL3.java │ │ ├── GlyphRenderers.java │ │ ├── GrayTexture2D.java │ │ ├── Mat4Uniform.java │ │ ├── Projection.java │ │ ├── Quad.java │ │ ├── QuadPipeline.java │ │ ├── QuadPipelineGL10.java │ │ ├── QuadPipelineGL11.java │ │ ├── QuadPipelineGL15.java │ │ ├── QuadPipelineGL30.java │ │ ├── QuadPipelines.java │ │ ├── ShaderLoader.java │ │ ├── Texture.java │ │ ├── Texture2D.java │ │ ├── TextureBackingStore.java │ │ ├── TextureBackingStoreManager.java │ │ ├── UnicodeGlyphProducer.java │ │ ├── Uniform.java │ │ └── Vec4Uniform.java │ └── org │ └── andork │ └── jogl │ └── awt │ ├── BufferedImageByteFactory.java │ ├── BufferedImageFactory.java │ ├── BufferedImageIntFactory.java │ ├── DirectDataBufferByte.java │ ├── JoglExportImageDialog.java │ ├── JoglExportImageDialogModel.java │ ├── JoglExportImageDialog_en.properties │ ├── JoglNavigator.java │ ├── JoglOrbiter.java │ └── JoglOrthoNavigator.java ├── andork-jogl-gl2es2-utils ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml └── src │ └── org │ └── andork │ ├── jogl │ ├── BufferHelper.java │ ├── BufferUtils.java │ ├── DefaultJoglRenderer.java │ ├── DevicePixelRatio.java │ ├── Dumps.java │ ├── GL3Framebuffer.java │ ├── GL3Resource.java │ ├── GLFramebufferTexture.java │ ├── InterpolationProjection.java │ ├── JoglBackgroundColor.java │ ├── JoglBuffer.java │ ├── JoglDrawContext.java │ ├── JoglDrawable.java │ ├── JoglFilter.java │ ├── JoglManagedResource.java │ ├── JoglResource.java │ ├── JoglResourceManager.java │ ├── JoglScene.java │ ├── JoglScreenPolygon.java │ ├── JoglViewSettings.java │ ├── JoglViewState.java │ ├── MaxBlurFilter.java │ ├── OrthoProjection.java │ ├── PerspectiveProjection.java │ ├── Projection.java │ ├── shader │ │ ├── AttribLocation.java │ │ ├── FlatColorFragment.fp │ │ ├── FlatColorProgram.java │ │ ├── FlatColorScreenProgram.java │ │ ├── FlatColorVertex.vp │ │ ├── FlatColorVertexScreen.vp │ │ ├── GLLocation.java │ │ ├── ManagedShaderProgram.java │ │ ├── MaxBlur.fp │ │ ├── MaxBlur.vp │ │ ├── MaxBlurProgram.java │ │ ├── Uniform1fvLocation.java │ │ ├── Uniform1ivLocation.java │ │ ├── Uniform2fvLocation.java │ │ ├── Uniform3fvLocation.java │ │ ├── Uniform4fvLocation.java │ │ ├── UniformLocation.java │ │ ├── UniformMatrix3fvLocation.java │ │ └── UniformMatrix4fvLocation.java │ ├── uniform │ │ ├── Uniform.java │ │ ├── Uniform1fv.java │ │ ├── Uniform1iv.java │ │ ├── Uniform2fv.java │ │ ├── Uniform3fv.java │ │ ├── Uniform4fv.java │ │ ├── UniformMatrix3fv.java │ │ └── UniformMatrix4fv.java │ └── util │ │ ├── IndexedPackedCube.java │ │ ├── JoglUtils.java │ │ ├── PackedCube.java │ │ ├── PipelinedQuadRenderer.java │ │ ├── PipelinedRenderer.java │ │ ├── ShaderProgram.java │ │ ├── SimplePolygon.java │ │ └── StaticRenderer.java │ └── nativewindow │ └── util │ └── PixelRectangles.java ├── andork-math ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml ├── src │ └── org │ │ └── andork │ │ ├── math │ │ ├── curve │ │ │ ├── ICurveWithNormals3f.java │ │ │ └── SegmentedCurve3f.java │ │ ├── discrete │ │ │ └── DiscreteMathUtils.java │ │ └── misc │ │ │ ├── Angles.java │ │ │ └── Fitting.java │ │ └── vecmath │ │ ├── EdgeNormalComputer.java │ │ ├── LinePlaneIntersection.java │ │ ├── PlanePlaneIntersection.java │ │ ├── TransformComputer3f.java │ │ └── VecmathUtils.java └── test │ └── org │ └── andork │ └── math │ └── misc │ └── AnglesTest.java ├── andork-math3d ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml ├── src │ └── org │ │ └── andork │ │ └── math3d │ │ ├── Clip3f.java │ │ ├── Fitting3d.java │ │ ├── FittingFrustum.java │ │ ├── FloatOrientComputer.java │ │ ├── InConeTester3f.java │ │ ├── LineLineIntersection2d.java │ │ ├── LineLineIntersection2f.java │ │ ├── LinePlaneIntersection3d.java │ │ ├── LinePlaneIntersection3f.java │ │ ├── MatrixUtils.java │ │ ├── NormalGenerator3f.java │ │ ├── Orbiter.java │ │ ├── OrientComputer.java │ │ ├── PickCone.java │ │ ├── PickXform.java │ │ ├── PlanarHull3f.java │ │ ├── Primitives.java │ │ ├── RayIntersectsBoxTester.java │ │ ├── RowMajorVecmath.java │ │ ├── SingularMatrixException.java │ │ ├── TwoPlaneIntersection3f.java │ │ └── Vecmath.java └── test │ └── org │ └── andork │ └── math3d │ ├── LineLineIntersection2fTest.java │ ├── NormalGenerator3fTest.java │ ├── RowMajorVecmathTest.java │ └── VecmathTest.java ├── andork-plot ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml ├── src │ └── com │ │ └── andork │ │ └── plot │ │ ├── AlphaDepthComposite.java │ │ ├── AlphaDepthCompositeContext.java │ │ ├── ArrayUtils.java │ │ ├── AxisLinkButton.java │ │ ├── CheckerPaint.java │ │ ├── CheckerPaintContext.java │ │ ├── DefaultTracePlotter.java │ │ ├── DefaultTraceRenderer.java │ │ ├── DoubleKeyGetter.java │ │ ├── FillPlotLayer.java │ │ ├── GridMath.java │ │ ├── HorizontalGridLineLayer.java │ │ ├── IAxisConversion.java │ │ ├── IPlotLayer.java │ │ ├── ITracePlotter.java │ │ ├── ITraceRenderer.java │ │ ├── ImagePlotLayer.java │ │ ├── ImagePlotPanel.java │ │ ├── LinearAxisConversion.java │ │ ├── ListUtils.java │ │ ├── MouseLooper.java │ │ ├── Plot.java │ │ ├── PlotAxis.java │ │ ├── PlotAxisController.java │ │ ├── PlotController.java │ │ ├── PlotPanelLayout.java │ │ ├── PlotUtils.java │ │ ├── VerticalGridLineLayer.java │ │ ├── link.png │ │ └── unlink.png └── test │ └── com │ └── andork │ └── plot │ ├── MouseLooperTest.java │ └── PlotTest.java ├── andork-qh2 └── dist │ └── lib │ ├── andork-qh2-sources.jar │ ├── andork-qh2.jar │ ├── h2-1.3.176.jar │ └── iciql-1.2.0.jar ├── andork-spatial ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml ├── src │ └── org │ │ └── andork │ │ └── spatial │ │ ├── BoundingSpheres.java │ │ ├── EdgeTrees.java │ │ ├── RBranch.java │ │ ├── RLeaf.java │ │ ├── RNode.java │ │ ├── RTraversal.java │ │ ├── Rectmath.java │ │ ├── RfStarTree.java │ │ └── SpatialIndex.java └── test │ └── org │ └── andork │ └── spatial │ ├── BoundingSpheresTest.java │ ├── ClosestLeafNodeTest.java │ ├── RfStarTreeSplitTest.java │ └── RfStarTreeTest.java ├── andork-ui-debug ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml └── src │ └── org │ └── andork │ └── ui │ └── debug │ ├── ClassChooserDialog.java │ ├── ClassChooserPane.java │ ├── ComponentTree.java │ ├── ObjectTreeTable.java │ ├── ObjectTreeTableModel.java │ ├── SwingInspector.java │ ├── delete-node.png │ ├── insert-child.png │ ├── insert-sibling.png │ ├── new.png │ ├── nullify.png │ └── remove.png ├── andork-ui-test ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml └── src │ └── org │ └── andork │ └── ui │ └── test │ ├── AWTNabber.java │ ├── AutomatedTesting.java │ ├── ComponentFinder.java │ ├── ConfigurableStringComparator.java │ ├── DefaultGhost.java │ ├── DoSwing.java │ ├── DoSwingR.java │ ├── Ghost.java │ ├── SlowGhost.java │ ├── TableFinder.java │ └── fixture │ ├── ComponentFixture.java │ ├── ComponentFixtureProvider.java │ ├── HardComponentFixture.java │ ├── HardComponentFixtureProvider.java │ ├── HardJCheckBoxFixture.java │ ├── HardJComboBoxFixture.java │ ├── HardJTableFixture.java │ ├── JCheckBoxFixture.java │ ├── JComboBoxFixture.java │ └── JTableFixture.java ├── andork-ui ├── .classpath ├── .gitignore ├── .project ├── LICENSE ├── pom.xml ├── src │ └── org │ │ └── andork │ │ ├── awt │ │ ├── AWTUtil.java │ │ ├── CheckEDT.java │ │ ├── ColorUtils.java │ │ ├── EDTBimapper.java │ │ ├── EDTMapper.java │ │ ├── FontMetricsUtils.java │ │ ├── GenericProgressDialog.java │ │ ├── GridBagWizard.java │ │ ├── I18n.java │ │ ├── IconScaler.java │ │ ├── KeyEvents.java │ │ ├── LocalizedException.java │ │ ├── SexyWaitIconGenerator.java │ │ ├── anim │ │ │ ├── Animation.java │ │ │ └── AnimationQueue.java │ │ ├── event │ │ │ ├── MouseAdapterChain.java │ │ │ ├── MouseAdapterWrapper.java │ │ │ ├── MouseRetargeter.java │ │ │ └── WheelEventAggregator.java │ │ └── layout │ │ │ ├── Axis.java │ │ │ ├── BetterCardLayout.java │ │ │ ├── Corner.java │ │ │ ├── DelegatingLayoutManager.java │ │ │ ├── Drawer.java │ │ │ ├── DrawerAutoshowController.java │ │ │ ├── DrawerHolder.java │ │ │ ├── DrawerLayoutDelegate.java │ │ │ ├── DrawerModel.java │ │ │ ├── LayoutSize.java │ │ │ ├── LayoutUtils.java │ │ │ ├── MultilineLabelHolder.java │ │ │ ├── RectangleUtils.java │ │ │ ├── ResizeKnobHandler.java │ │ │ ├── Side.java │ │ │ ├── SideConstraint.java │ │ │ ├── SideConstraintLayoutDelegate.java │ │ │ ├── TabLayoutDelegate.java │ │ │ ├── maximize.png │ │ │ ├── pinned.png │ │ │ ├── pinned2.png │ │ │ ├── restore.png │ │ │ └── unpinned.png │ │ ├── bind │ │ └── ui │ │ │ ├── BetterCardLayoutBinder.java │ │ │ ├── ButtonSelectedBinder.java │ │ │ ├── ButtonsSelectedBinder.java │ │ │ ├── ComponentBackgroundBinder.java │ │ │ ├── ComponentEnabledBinder.java │ │ │ ├── ComponentTextBinder.java │ │ │ ├── ISelectorSelectionBinder.java │ │ │ ├── JComboBoxItemBinder.java │ │ │ ├── JSliderValueBinder.java │ │ │ └── JSpinnerValueBinder.java │ │ └── swing │ │ ├── AnnotatingRowSorter.java │ │ ├── AnnotatingRowSorterCursorController.java │ │ ├── BetterSpinnerNumberModel.java │ │ ├── CardPanel.java │ │ ├── CellRendererWithButtons.java │ │ ├── CellRendererWithContentArea.java │ │ ├── CellRenderers.java │ │ ├── DoNotShowAgainDialogs_en.properties │ │ ├── DropLocationFinder.java │ │ ├── FromEDT.java │ │ ├── JFileChooserUtils.java │ │ ├── JOptionPaneBuilder.java │ │ ├── JTabbedPaneExtrasLayeredPane.java │ │ ├── ModernStyleClearButton.java │ │ ├── OnEDT.java │ │ ├── PaintablePanel.java │ │ ├── QuickTestFrame.java │ │ ├── RendererButtonModel.java │ │ ├── RowAnnotator.java │ │ ├── RuntimeInterruptedException.java │ │ ├── SimpleImagePanel.java │ │ ├── SmartComboTableRowFilter.java │ │ ├── SpinnerButtonUI.java │ │ ├── SplashFrame.java │ │ ├── TextComponentWithHintAndClear.java │ │ ├── WizardButtons.java │ │ ├── WizardButtons_en.properties │ │ ├── WizardPanel.java │ │ ├── async │ │ ├── DrawerPinningTask.java │ │ ├── SelfReportingTask.java │ │ ├── SetTimeout.java │ │ ├── TaskList.java │ │ ├── TaskPane.java │ │ └── TaskSupplier.java │ │ ├── border │ │ ├── FillBorder.java │ │ ├── GradientFillBorder.java │ │ ├── InnerGradientBorder.java │ │ ├── LayeredBorder.java │ │ ├── MultipleGradientFillBorder.java │ │ └── OverrideInsetsBorder.java │ │ ├── event │ │ ├── EasyDocumentListener.java │ │ ├── MouseEventFaker.java │ │ └── TableModelEventInterpretation.java │ │ ├── filechooser │ │ └── DirectoryFileFilter.java │ │ ├── jump │ │ ├── JScrollAndJumpPane.java │ │ ├── JTableJumpSupport.java │ │ └── JumpBar.java │ │ ├── list │ │ ├── FunctionListCellRenderer.java │ │ ├── ListCellRendererButtonModelContext.java │ │ ├── ListCellRendererRetargeter.java │ │ ├── ListCellRendererTracker.java │ │ ├── ListCellRendererWithButtons.java │ │ ├── QFileListEditor.java │ │ ├── QListEditor.java │ │ ├── QListListModel.java │ │ └── RealListModel.java │ │ ├── selector │ │ ├── BetterComboBoxModel.java │ │ ├── BiggerComboPopup.java │ │ ├── BiggerPopupComboBoxUI.java │ │ ├── DefaultSelector.java │ │ ├── ISelector.java │ │ ├── ISelectorListener.java │ │ ├── JComboBoxUtils.java │ │ └── TandemSelector.java │ │ ├── spinner-0.png │ │ ├── spinner-1.png │ │ ├── spinner-10.png │ │ ├── spinner-11.png │ │ ├── spinner-12.png │ │ ├── spinner-13.png │ │ ├── spinner-14.png │ │ ├── spinner-15.png │ │ ├── spinner-16.png │ │ ├── spinner-17.png │ │ ├── spinner-18.png │ │ ├── spinner-19.png │ │ ├── spinner-2.png │ │ ├── spinner-20.png │ │ ├── spinner-21.png │ │ ├── spinner-22.png │ │ ├── spinner-23.png │ │ ├── spinner-24.png │ │ ├── spinner-25.png │ │ ├── spinner-26.png │ │ ├── spinner-27.png │ │ ├── spinner-28.png │ │ ├── spinner-29.png │ │ ├── spinner-3.png │ │ ├── spinner-4.png │ │ ├── spinner-5.png │ │ ├── spinner-6.png │ │ ├── spinner-7.png │ │ ├── spinner-8.png │ │ ├── spinner-9.png │ │ ├── spinner-off.png │ │ ├── table │ │ ├── AnnotatingJTable.java │ │ ├── AnnotatingJTableJumpBarModel.java │ │ ├── AnnotatingJTables.java │ │ ├── AnnotatingTableCellRenderer.java │ │ ├── AnnotatingTableRowSorter.java │ │ ├── BetterJTable.java │ │ ├── CellEditorBoundsOverridingTableUI.java │ │ ├── CheckboxTableCellRenderer.java │ │ ├── ColoringAnnotatingTableCellRenderer.java │ │ ├── DefaultAnnotatingJTableSetup.java │ │ ├── DefaultSelectorCellEditor.java │ │ ├── DefaultSelectorTableCellRenderer.java │ │ ├── FunctionCellEditor.java │ │ ├── FunctionTableCellRenderer.java │ │ ├── ListTableColumn.java │ │ ├── ListTableModel.java │ │ ├── ModelSelectionController.java │ │ ├── MouseInputTableCellRenderer.java │ │ ├── OverrideInsetsBorderLayout.java │ │ ├── RowFilterFactory.java │ │ ├── SectionHeaderModel.java │ │ ├── SectionHeaderRowSet.java │ │ ├── SectionHeaderTable.java │ │ ├── TableCellRendererButtonModelContext.java │ │ ├── TableCellRendererFromEditor.java │ │ ├── TableCellRendererRetargeter.java │ │ ├── TableCellRendererTracker.java │ │ ├── TableCellRendererWithButtons.java │ │ ├── TruncatedCellPopup.java │ │ └── dropdown.png │ │ ├── text │ │ ├── Formats.java │ │ ├── PatternDocumentFilter.java │ │ ├── Patterns.java │ │ ├── SimpleFormatter.java │ │ ├── SimpleSpinnerEditor.java │ │ └── Spinners.java │ │ ├── xicon-normal.png │ │ ├── xicon-pressed.png │ │ ├── xicon-rollover.png │ │ └── xicon.pdn └── test │ └── org │ └── andork │ ├── awt │ └── layout │ │ ├── DrawerLayoutTest1.java │ │ └── DrawerLayoutTest2.java │ ├── bind │ └── ui │ │ ├── BinderTest.java │ │ └── BinderTest2.java │ ├── swing │ ├── SpinnerButtonUITest.java │ ├── TextComponentWithHintAndClearTest.java │ ├── async │ │ └── TaskPaneTest.java │ ├── list │ │ └── RealListModelTest.java │ └── table │ │ ├── JTableSortTest.java │ │ └── ListTableModelTest.java │ └── task │ └── NewTaskTest.java ├── breakout-format-new.xml ├── breakout-main ├── .classpath ├── .gitignore ├── .project ├── CHANGELOG.txt ├── LICENSE ├── MANIFEST-all-desktops.MF ├── MANIFEST-update.MF ├── MANIFEST-win-i586.MF ├── README.txt ├── code-format.xml ├── logging.debug.properties ├── logo.3dm ├── pom.xml ├── saved-table.bkv ├── src │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ ├── andork │ │ │ │ ├── jogl │ │ │ │ │ └── awt │ │ │ │ │ │ └── anim │ │ │ │ │ │ ├── GeneralViewXformOrbitAnimation.java │ │ │ │ │ │ ├── ProjXformAnimation.java │ │ │ │ │ │ ├── RandomViewOrbitAnimation.java │ │ │ │ │ │ ├── SpringViewOrbitAnimation.java │ │ │ │ │ │ └── ViewXformAnimation.java │ │ │ │ └── plot │ │ │ │ │ └── PlotAxisConversionBinder.java │ │ │ │ └── breakout │ │ │ │ ├── AttachedFileFinder.java │ │ │ │ ├── BreakoutMain.java │ │ │ │ ├── BreakoutMainFrame.java │ │ │ │ ├── BreakoutMainView.java │ │ │ │ ├── BreakoutMainView_en.properties │ │ │ │ ├── CameraView.java │ │ │ │ ├── CheckForUpdateAction.java │ │ │ │ ├── CheckForUpdateAction_en.properties │ │ │ │ ├── ClipMouseHandler.java │ │ │ │ ├── DefaultNavigator.java │ │ │ │ ├── DescriptionFilter.java │ │ │ │ ├── EditSettingsFileAction.java │ │ │ │ ├── EditSettingsFileAction_en.properties │ │ │ │ ├── EditSurveyScanPathsAction.java │ │ │ │ ├── EditSwapFileAction.java │ │ │ │ ├── EditSwapFileAction_en.properties │ │ │ │ ├── ExportImageAction.java │ │ │ │ ├── ExportImageAction_en.properties │ │ │ │ ├── ExportProjectArchiveAction_en.properties │ │ │ │ ├── ExportStlAction.java │ │ │ │ ├── ExportStlAction_en.properties │ │ │ │ ├── ExportSurveyNotesAction.java │ │ │ │ ├── ExportSurveyNotesAction_en.properties │ │ │ │ ├── FileFinder.java │ │ │ │ ├── FindAction.java │ │ │ │ ├── FindAction_en.properties │ │ │ │ ├── FitViewToEverythingAction.java │ │ │ │ ├── FitViewToEverythingAction_en.properties │ │ │ │ ├── FitViewToSelectedAction.java │ │ │ │ ├── FitViewToSelectedAction_en.properties │ │ │ │ ├── FluidPerspectiveToOrtho.java │ │ │ │ ├── HintLabels.java │ │ │ │ ├── ImportCompassAction.java │ │ │ │ ├── ImportCompassAction_en.properties │ │ │ │ ├── ImportCompassPlotAction_en.properties │ │ │ │ ├── ImportCompassTask.java │ │ │ │ ├── ImportLeadsAction.java │ │ │ │ ├── ImportLeadsAction_en.properties │ │ │ │ ├── ImportLeadsTask.java │ │ │ │ ├── ImportLeadsTask_en.properties │ │ │ │ ├── ImportProjectArchiveAction_en.properties │ │ │ │ ├── ImportWallsAction.java │ │ │ │ ├── ImportWallsAction_en.properties │ │ │ │ ├── ImportWallsTask.java │ │ │ │ ├── LechuguillaStationSets.java │ │ │ │ ├── LinkSurveyNotesAction.java │ │ │ │ ├── LinkSurveyNotesAction_en.properties │ │ │ │ ├── LinkSurveyNotesTask.java │ │ │ │ ├── LinkSurveyNotesTask_en.properties │ │ │ │ ├── LocalizedUnitizedNumberFormat.java │ │ │ │ ├── MiniSurveyDrawer.java │ │ │ │ ├── MultiRowFilterFactory.java │ │ │ │ ├── NaturalDeserializer.java │ │ │ │ ├── NaturalSerializer.java │ │ │ │ ├── NewProjectAction.java │ │ │ │ ├── NewProjectAction_en.properties │ │ │ │ ├── OpenLogDirectoryAction.java │ │ │ │ ├── OpenLogDirectoryAction_en.properties │ │ │ │ ├── OpenProjectAction.java │ │ │ │ ├── OpenProjectAction_en.properties │ │ │ │ ├── OpenRecentProjectAction.java │ │ │ │ ├── OrbitToPlanAction.java │ │ │ │ ├── OrbitToPlanAction_en.properties │ │ │ │ ├── PickResult.java │ │ │ │ ├── ProjectArchiveModelStreamBimapper_en.properties │ │ │ │ ├── RawNumberCellRenderer.java │ │ │ │ ├── SaveProjectAction.java │ │ │ │ ├── SaveProjectAction_en.properties │ │ │ │ ├── SaveProjectAsAction.java │ │ │ │ ├── SaveProjectAsAction_en.properties │ │ │ │ ├── SearchMode.java │ │ │ │ ├── SearchModeItems.java │ │ │ │ ├── SearchModeItems_en.properties │ │ │ │ ├── SearchOptionsButton.java │ │ │ │ ├── SearchOptionsMenu.java │ │ │ │ ├── SetCaveOnRowsAction.java │ │ │ │ ├── SetCaveOnRowsAction_en.properties │ │ │ │ ├── SetEditorCommandAction.java │ │ │ │ ├── SetEditorCommandAction_en.properties │ │ │ │ ├── SettingsDrawer.java │ │ │ │ ├── SettingsDrawer_en.properties │ │ │ │ ├── ShutdownCanceledException.java │ │ │ │ ├── StatsModel.java │ │ │ │ ├── StatsPanel.java │ │ │ │ ├── SummarizeTripStations.java │ │ │ │ ├── SurveyDesignationFilter.java │ │ │ │ ├── SurveyDrawer.java │ │ │ │ ├── SurveyRegexFilter.java │ │ │ │ ├── SurveyTable.java │ │ │ │ ├── SurveyTableListener.java │ │ │ │ ├── SurveyTableTransferHandler.java │ │ │ │ ├── SurveyorFilter.java │ │ │ │ ├── TaskListDrawer.java │ │ │ │ ├── TriangleIcon.java │ │ │ │ ├── ViewButtonsPanel.java │ │ │ │ ├── Views.pdn │ │ │ │ ├── WindowSelectionMouseHandler.java │ │ │ │ ├── awt │ │ │ │ ├── MultipleGradientPaint.java │ │ │ │ ├── MultipleGradientPaintContext.java │ │ │ │ ├── ParamGradientMapPaint.java │ │ │ │ ├── ParamGradientMapPaintContext.java │ │ │ │ └── UnitizedNumber2StringBinder.java │ │ │ │ ├── compass │ │ │ │ └── CompassConverter.java │ │ │ │ ├── dropdown.png │ │ │ │ ├── east-facing-profile-normal.png │ │ │ │ ├── east-facing-profile-rollover.png │ │ │ │ ├── east-facing-profile-selected.png │ │ │ │ ├── fit.png │ │ │ │ ├── flip.png │ │ │ │ ├── forward-depth-axis.png │ │ │ │ ├── importui │ │ │ │ ├── ImportError.java │ │ │ │ ├── ImportErrorsPane.java │ │ │ │ ├── ImportResultsDialog.java │ │ │ │ └── ImportResultsDialog_en.properties │ │ │ │ ├── io │ │ │ │ └── stl │ │ │ │ │ ├── AsciiStlExporter.java │ │ │ │ │ └── BinaryStlExporter.java │ │ │ │ ├── leadimport │ │ │ │ └── LeadListParser.java │ │ │ │ ├── logging.properties │ │ │ │ ├── mapbox │ │ │ │ ├── MapboxClient.java │ │ │ │ └── Tilebelt.java │ │ │ │ ├── model │ │ │ │ ├── AutoTerrain.java │ │ │ │ ├── Clip3fBimapper.java │ │ │ │ ├── ColorParam.java │ │ │ │ ├── CrossSectionType.java │ │ │ │ ├── CustomModes.java │ │ │ │ ├── DebugDraw.java │ │ │ │ ├── FloatRange.java │ │ │ │ ├── FloatRangeStringBimapper.java │ │ │ │ ├── GradientModel.java │ │ │ │ ├── Gradients.java │ │ │ │ ├── HighlightMode.java │ │ │ │ ├── LinearAxisConversionMapBimapper.java │ │ │ │ ├── MedianTiltAxisInferrer.java │ │ │ │ ├── OrthoScaleBar.java │ │ │ │ ├── ProjectArchiveModel.java │ │ │ │ ├── ProjectModel.java │ │ │ │ ├── ProjectionCalculatorBimapper.java │ │ │ │ ├── RootModel.java │ │ │ │ ├── ShotKey.java │ │ │ │ ├── ShotSide.java │ │ │ │ ├── StationKey.java │ │ │ │ ├── Survey3dModel.java │ │ │ │ ├── SurveyTableModel.java │ │ │ │ ├── TempTile.java │ │ │ │ ├── TerrainTile.java │ │ │ │ ├── TextRenderers.java │ │ │ │ ├── TiltAxisInferrer.java │ │ │ │ ├── TitleText.java │ │ │ │ ├── TransparentTerrain.java │ │ │ │ ├── Unit2StringBimapper.java │ │ │ │ ├── WeightedAverageTiltAxisInferrer.java │ │ │ │ ├── calc │ │ │ │ │ ├── CalcCave.java │ │ │ │ │ ├── CalcCrossSection.java │ │ │ │ │ ├── CalcProject.java │ │ │ │ │ ├── CalcShot.java │ │ │ │ │ ├── CalcStation.java │ │ │ │ │ ├── CalcTrip.java │ │ │ │ │ ├── CalculateGeometry.java │ │ │ │ │ ├── Parsed2Calc.java │ │ │ │ │ └── SplayVertex.java │ │ │ │ ├── compass │ │ │ │ │ ├── Astroid3f.java │ │ │ │ │ ├── Compass.java │ │ │ │ │ ├── CompassFragment.fp │ │ │ │ │ ├── CompassProgram.java │ │ │ │ │ └── CompassVertex.vp │ │ │ │ ├── lineShaders.gl │ │ │ │ ├── parsed │ │ │ │ │ ├── MetacaveAngleParser.java │ │ │ │ │ ├── MetacaveAzimuthParser.java │ │ │ │ │ ├── MetacaveInclinationParser.java │ │ │ │ │ ├── MetacaveLengthParser.java │ │ │ │ │ ├── ParseMessage.java │ │ │ │ │ ├── ParsedCave.java │ │ │ │ │ ├── ParsedCrossSection.java │ │ │ │ │ ├── ParsedField.java │ │ │ │ │ ├── ParsedFixedStation.java │ │ │ │ │ ├── ParsedLatLonLocation.java │ │ │ │ │ ├── ParsedNEVLocation.java │ │ │ │ │ ├── ParsedProject.java │ │ │ │ │ ├── ParsedShot.java │ │ │ │ │ ├── ParsedShotMeasurement.java │ │ │ │ │ ├── ParsedSplayShot.java │ │ │ │ │ ├── ParsedStation.java │ │ │ │ │ ├── ParsedTrip.java │ │ │ │ │ └── ProjectParser.java │ │ │ │ ├── raw │ │ │ │ │ ├── MetacaveExporter.java │ │ │ │ │ ├── MetacaveImporter.java │ │ │ │ │ ├── MutableSurveyLead.java │ │ │ │ │ ├── MutableSurveyRow.java │ │ │ │ │ ├── MutableSurveyTrip.java │ │ │ │ │ ├── SurveyLead.java │ │ │ │ │ ├── SurveyLead.record.js │ │ │ │ │ ├── SurveyRow.java │ │ │ │ │ ├── SurveyRow.record.js │ │ │ │ │ ├── SurveyTrip.java │ │ │ │ │ └── SurveyTrip.record.js │ │ │ │ ├── satellite.png │ │ │ │ ├── shader │ │ │ │ │ ├── CenterlineProgram.java │ │ │ │ │ ├── ClipLocations.java │ │ │ │ │ ├── TerrainProgram.java │ │ │ │ │ ├── centerline.fp │ │ │ │ │ ├── centerline.vp │ │ │ │ │ ├── terrain.fp │ │ │ │ │ └── terrain.vp │ │ │ │ ├── shaders.gl │ │ │ │ └── terrain-rgb.png │ │ │ │ ├── nextDay.png │ │ │ │ ├── nextMonth.png │ │ │ │ ├── nextYear.png │ │ │ │ ├── north-facing-profile-normal.png │ │ │ │ ├── north-facing-profile-rollover.png │ │ │ │ ├── north-facing-profile-selected.png │ │ │ │ ├── perspective-normal.png │ │ │ │ ├── perspective-rollover.png │ │ │ │ ├── perspective-selected.png │ │ │ │ ├── plan-normal.png │ │ │ │ ├── plan-rollover.png │ │ │ │ ├── plan-selected.png │ │ │ │ ├── play.png │ │ │ │ ├── prevDay.png │ │ │ │ ├── prevMonth.png │ │ │ │ ├── prevYear.png │ │ │ │ ├── proj4 │ │ │ │ ├── FromGeocentricCoordinateTransform.java │ │ │ │ ├── IdentityCoordinateTransform.java │ │ │ │ ├── Proj4Utils.java │ │ │ │ ├── ToGeocentricCoordinateTransform.java │ │ │ │ ├── WebMercatorEllipsoid.java │ │ │ │ └── WebMercatorProjection.java │ │ │ │ ├── refresh.png │ │ │ │ ├── release │ │ │ │ ├── BreakoutRelease.java │ │ │ │ ├── BreakoutReleaseApi.java │ │ │ │ ├── BreakoutReleaseAsset.java │ │ │ │ ├── BreakoutReleaseAssetTypeAdapter.java │ │ │ │ ├── BreakoutReleaseGson.java │ │ │ │ └── BreakoutReleaseTypeAdapter.java │ │ │ │ ├── south-facing-profile-normal.png │ │ │ │ ├── south-facing-profile-rollover.png │ │ │ │ ├── south-facing-profile-selected.png │ │ │ │ ├── splash.png │ │ │ │ ├── tilted-depth-axis.png │ │ │ │ ├── update │ │ │ │ └── UpdateCheck.java │ │ │ │ ├── util │ │ │ │ └── StationNames.java │ │ │ │ ├── vertical-depth-axis.png │ │ │ │ ├── views-normal.pdn │ │ │ │ ├── views-rollover.pdn │ │ │ │ ├── wand-normal.png │ │ │ │ ├── wand-rollover.png │ │ │ │ ├── wand-selected.png │ │ │ │ ├── west-facing-profile-normal.png │ │ │ │ ├── west-facing-profile-rollover.png │ │ │ │ └── west-facing-profile-selected.png │ │ └── resources │ │ │ ├── demo │ │ │ ├── demo-survey.txt │ │ │ └── settings.yaml │ │ │ └── version.properties │ ├── test │ │ ├── java │ │ │ └── org │ │ │ │ ├── andork │ │ │ │ └── tilebelt │ │ │ │ │ ├── SummarizeTripStationsTest.java │ │ │ │ │ └── TilebeltTests.java │ │ │ │ └── breakout │ │ │ │ ├── FileFinderTests.java │ │ │ │ ├── LechuguillaStationSetsTests.java │ │ │ │ ├── awt │ │ │ │ └── ParamGradientMapPaintTest.java │ │ │ │ ├── compass │ │ │ │ └── CompassConverterTest.java │ │ │ │ ├── model │ │ │ │ ├── calc │ │ │ │ │ └── CalculateGeometryTests.java │ │ │ │ ├── parsed │ │ │ │ │ ├── MetacaveAngleParserTests.java │ │ │ │ │ └── MetacaveLengthParserTests.java │ │ │ │ └── raw │ │ │ │ │ ├── MetacaveExporterTests.java │ │ │ │ │ └── MetacaveImporterTests.java │ │ │ │ ├── temp │ │ │ │ └── proj4 │ │ │ │ │ └── Proj4Tests.java │ │ │ │ └── update │ │ │ │ └── BreakoutReleaseGsonTest.java │ │ └── resources │ │ │ └── org │ │ │ └── breakout │ │ │ └── model │ │ │ └── raw │ │ │ └── metacave1.json │ └── tools │ │ └── java │ │ └── org │ │ └── breakout │ │ └── tools │ │ ├── STAT.txt │ │ ├── ScannedNotesMerger.java │ │ ├── SurveyMetadataShuffler.java │ │ ├── SurveyNearestFinder.java │ │ ├── SurveyObfuscator.java │ │ ├── WallsWrangler1.java │ │ └── frcs-official-with-metadata.txt └── todos ├── breakout.icns ├── breakout.ico ├── breakout ├── .classpath ├── .gitignore ├── .project ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── breakout │ └── Breakout.java ├── build-all-platforms.sh ├── build.sh ├── datescraper ├── .classpath ├── .project ├── .settings │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.m2e.core.prefs ├── pom.xml └── src │ ├── main │ └── java │ │ └── org │ │ └── andork │ │ ├── datescraper │ │ ├── AbstractDateMatcher.java │ │ ├── DateField.java │ │ ├── DateMatcher.java │ │ ├── DatePattern.java │ │ ├── DatePatterns.java │ │ ├── GeneralDatePattern.java │ │ ├── ISO8601DatePattern.java │ │ ├── MultiDateMatcher.java │ │ └── MultiDatePattern.java │ │ └── scrape │ │ ├── AbstractRegexScrapeMatcher.java │ │ ├── DefaultScrapeMatchResult.java │ │ ├── MultiScrapeMatcher.java │ │ ├── MultiScrapePattern.java │ │ ├── ScrapeMatchResult.java │ │ ├── ScrapeMatcher.java │ │ └── ScrapePattern.java │ └── test │ └── java │ └── datescrape │ └── MultiScrapeMatcherTest.java ├── deploy ├── .gitignore ├── deploy.js ├── package.json └── yarn.lock ├── docs ├── .dude-wheres-my-module.js ├── .eslintrc ├── .gitignore ├── next.config.js ├── now.json ├── package.json ├── pages │ ├── _app.js │ ├── _document.js │ ├── api │ │ └── release │ │ │ └── [tag].js │ ├── changingViews.js │ ├── download.js │ ├── findingStations.js │ ├── importCompass.js │ ├── importCompass.md │ ├── importWalls.js │ ├── importWalls.md │ ├── index.js │ └── navigation.js ├── public │ └── static │ │ ├── compass-import │ │ ├── import-compass-menu.png │ │ ├── import-data.png │ │ ├── import-nev.png │ │ ├── import-warnings.png │ │ ├── process-and-view-cave.png │ │ ├── save-plot-file.png │ │ └── select-compass-files.png │ │ ├── index.css │ │ ├── logo.png │ │ ├── navigation │ │ ├── auto-profile.gif │ │ ├── fit-view-to-everything.gif │ │ ├── fit-view-to-selected.gif │ │ ├── orbit-to-plan.gif │ │ ├── orbit.gif │ │ ├── ortho-and-perspective.gif │ │ ├── pan.gif │ │ ├── plan-and-profile-views.gif │ │ ├── view-selector.gif │ │ └── zoom.gif │ │ ├── search │ │ ├── filter-results.png │ │ ├── fly-to-results.png │ │ ├── highlight-results.png │ │ ├── search-drawer.png │ │ └── survey-drawer.png │ │ └── walls-import │ │ ├── file-menu.png │ │ ├── import-data.png │ │ ├── import-nev.png │ │ ├── import-progress.png │ │ ├── import-walls-menu.png │ │ ├── import-warnings.png │ │ ├── select-walls-files.png │ │ └── station-and-vector-reports-dialog.png ├── src │ ├── KeyboardKey.js │ ├── Link.js │ ├── LinkButton.js │ ├── NProgress.js │ ├── Shell.js │ ├── SidebarLinks.js │ ├── icons │ │ ├── Apple.js │ │ ├── GitHub.js │ │ └── Windows.js │ ├── markdownPage.js │ ├── octokit.js │ ├── repo.js │ └── theme.js └── yarn.lock ├── getVersion.sh ├── icon.png ├── mvn-settings.xml ├── package-linux.sh ├── package-macos.sh ├── package-windows.sh ├── package.json ├── pnpm-lock.yaml ├── pom.xml ├── quickhull3d ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── org │ │ └── andork │ │ └── quickhull3d │ │ ├── DefaultVertex.java │ │ ├── Edge.java │ │ ├── Face.java │ │ ├── Quickhull.java │ │ ├── Switches.java │ │ ├── VectorMath.java │ │ └── Vertex.java │ └── test │ └── java │ └── org │ └── andork │ └── quickhull3d │ ├── EdgeTests.java │ ├── FaceTests.java │ └── QuickhullTests.java ├── ref ├── .classpath ├── .gitignore ├── .project ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── andork │ └── ref │ └── Ref.java ├── robustmath ├── .classpath ├── .project ├── .settings │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.m2e.core.prefs ├── pom.xml └── src │ ├── main │ └── java │ │ └── org │ │ └── andork │ │ └── robustmath │ │ └── RobustMath.java │ └── test │ └── java │ └── org │ └── andork │ └── robustmath │ └── RobustMathTest.java ├── robustorientation ├── .classpath ├── .project ├── .settings │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.m2e.core.prefs ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── andork │ └── robustorientation │ └── RobustOrientation.java ├── scripts └── build.js ├── setVersion.sh └── version /.csync_journal.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/.csync_journal.db -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .csync_journal.db 2 | .csync_journal.db.ctmp 3 | *.bop 4 | hs_err* 5 | node_modules 6 | .breakout 7 | target 8 | packages 9 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "unitized"] 2 | path = unitized 3 | url = https://github.com/jedwards1211/unitized 4 | [submodule "compass-parser"] 5 | path = compass-parser 6 | url = https://github.com/jedwards1211/compass-parser-java 7 | [submodule "segment"] 8 | path = segment 9 | url = http://github.com/jedwards1211/segment-java 10 | [submodule "dewalls-java"] 11 | path = dewalls-java 12 | url = https://github.com/wallscavesurvey/dewalls-java 13 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | breakout-parent 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Breakout 2 | 3 | A 3D cave survey visualizer with a simple and powerful user interface 4 | 5 | ![Logo](https://s3-us-west-2.amazonaws.com/public.breakout.jedwards1211/splash.png) 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /andork-bspline/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /andork-bspline/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings -------------------------------------------------------------------------------- /andork-bspline/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-bspline 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /andork-bspline/src/org/andork/bspline/FloatArrayBSpline.java: -------------------------------------------------------------------------------- 1 | package org.andork.bspline; 2 | 3 | public class FloatArrayBSpline 4 | { 5 | public int degree; 6 | public int dimension; 7 | public float[ ] points; 8 | public float[ ] knots; 9 | } 10 | -------------------------------------------------------------------------------- /andork-codegen/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /andork-codegen/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings -------------------------------------------------------------------------------- /andork-codegen/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-codegen 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /andork-codegen/src/org/andork/codegen/builder/BuilderAllowNull.java: -------------------------------------------------------------------------------- 1 | package org.andork.codegen.builder; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Tells {@link BuilderGenerator} that an annotated field or all fields 10 | * of an annotated class may be null, and the generated builder's 11 | * {@code create()} method should not throw an exception if they are null. 12 | * 13 | * @author james.a.edwards 14 | */ 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Target({ ElementType.FIELD, ElementType.TYPE }) 17 | public @interface BuilderAllowNull { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /andork-codegen/src/org/andork/codegen/builder/BuilderIgnore.java: -------------------------------------------------------------------------------- 1 | package org.andork.codegen.builder; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Tells {@link BuilderGenerator} to ignore a field. The generated builder will 10 | * not contain a setter for that field. 11 | * 12 | * @author james.a.edwards 13 | * 14 | */ 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Target(ElementType.FIELD) 17 | public @interface BuilderIgnore { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /andork-codegen/src/org/andork/codegen/builder/BuilderLazyInitialize.java: -------------------------------------------------------------------------------- 1 | package org.andork.codegen.builder; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Tells {@link BuilderGenerator} to lazy-initialize a list type field. 10 | * 11 | * @author james.a.edwards 12 | * 13 | */ 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Target(ElementType.FIELD) 16 | public @interface BuilderLazyInitialize { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /andork-codegen/src/org/andork/codegen/builder/BuilderValidator.java: -------------------------------------------------------------------------------- 1 | package org.andork.codegen.builder; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Tells {@link BuilderGenerator} that the annotated method is a validator -- it 10 | * should be called by the generated builder's {@code create()} method to 11 | * validate the values of the fields. 12 | * 13 | * @author james.a.edwards 14 | * 15 | */ 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Target({ ElementType.METHOD }) 18 | public @interface BuilderValidator { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /andork-codegen/src/org/andork/codegen/model/ModelTemplate.java: -------------------------------------------------------------------------------- 1 | package org.andork.codegen.model; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Target(ElementType.TYPE) 10 | public @interface ModelTemplate { 11 | } 12 | -------------------------------------------------------------------------------- /andork-codegen/src/org/andork/codegen/model/TestTemplate2.java: -------------------------------------------------------------------------------- 1 | package org.andork.codegen.model; 2 | 3 | import java.util.List; 4 | 5 | import com.schwab.att.core.event.BasicPropertyChangeSupport.External; 6 | import com.schwab.att.core.event.HierarchicalBasicPropertyChangeSupport; 7 | import com.schwab.codegen.Model; 8 | 9 | public class TestTemplate2 implements Model { 10 | List rootGroups; 11 | 12 | public class RootGroup implements Model { 13 | String rootSymbol; 14 | 15 | @Override 16 | public External changeSupport() { 17 | // TODO Auto-generated method stub 18 | return null; 19 | } 20 | } 21 | 22 | @Override 23 | public HierarchicalBasicPropertyChangeSupport.External changeSupport() { 24 | // TODO Auto-generated method stub 25 | return null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /andork-core/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /andork-core/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-core/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-core 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/collect/HashSets.java: -------------------------------------------------------------------------------- 1 | package org.andork.collect; 2 | 3 | import java.util.HashSet; 4 | import java.util.stream.Stream; 5 | 6 | public class HashSets { 7 | public static HashSet of(Iterable in) { 8 | HashSet result = new HashSet(); 9 | for (T element : in) { 10 | result.add(element); 11 | } 12 | return result; 13 | } 14 | 15 | public static HashSet of(Stream stream) { 16 | HashSet result = new HashSet(); 17 | stream.forEach(t -> result.add(t)); 18 | return result; 19 | } 20 | 21 | @SafeVarargs 22 | public static HashSet of(T... elements) { 23 | HashSet result = new HashSet(); 24 | for (T elem : elements) { 25 | result.add(elem); 26 | } 27 | return result; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/collect/LinkedPriorityEntry.java: -------------------------------------------------------------------------------- 1 | package org.andork.collect; 2 | 3 | public class LinkedPriorityEntry, V> extends PriorityEntry { 4 | public final LinkedPriorityEntry source; 5 | 6 | public LinkedPriorityEntry(K key, V value, LinkedPriorityEntry source) { 7 | super(key, value); 8 | this.source = source; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/collect/MapLiteral.java: -------------------------------------------------------------------------------- 1 | package org.andork.collect; 2 | 3 | import java.util.LinkedHashMap; 4 | 5 | @SuppressWarnings("serial") 6 | public class MapLiteral extends LinkedHashMap { 7 | /** 8 | * 9 | */ 10 | private static final long serialVersionUID = 587327688999384531L; 11 | 12 | public static MapLiteral create() { 13 | return new MapLiteral<>(); 14 | } 15 | 16 | public MapLiteral map(K key, V value) { 17 | put(key, value); 18 | return this; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/func/Bimappers.java: -------------------------------------------------------------------------------- 1 | package org.andork.func; 2 | 3 | public class Bimappers { 4 | public static final Bimapper identity() { 5 | return new Bimapper() { 6 | @Override 7 | public T map(T in) { 8 | return in; 9 | } 10 | 11 | @Override 12 | public T unmap(T out) { 13 | return out; 14 | } 15 | 16 | }; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/func/CharSupplier.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3 | * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. 4 | * 5 | * 6 | * 7 | * 8 | * 9 | * 10 | * 11 | * 12 | * 13 | * 14 | * 15 | * 16 | * 17 | * 18 | * 19 | * 20 | * 21 | * 22 | * 23 | * 24 | */ 25 | package org.andork.func; 26 | 27 | import java.util.function.Supplier; 28 | 29 | /** 30 | * Represents a supplier of {@code char}-valued results. This is the 31 | * {@code char}-producing primitive specialization of {@link Supplier}. 32 | * 33 | *

34 | * There is no requirement that a distinct result be returned each time the 35 | * supplier is invoked. 36 | * 37 | *

38 | * This is a functional interface whose 39 | * functional method is {@link #getAsChar()}. 40 | * 41 | * @see Supplier 42 | * @since 1.8 43 | */ 44 | @FunctionalInterface 45 | public interface CharSupplier { 46 | 47 | /** 48 | * Gets a result. 49 | * 50 | * @return a result 51 | */ 52 | char getAsChar(); 53 | } 54 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/func/MemoOne.java: -------------------------------------------------------------------------------- 1 | package org.andork.func; 2 | 3 | import java.util.function.Function; 4 | 5 | import org.andork.util.Java7; 6 | 7 | public class MemoOne implements Function { 8 | Function fn; 9 | boolean called = false; 10 | I lastInput = null; 11 | O lastOutput = null; 12 | 13 | private MemoOne(Function fn) { 14 | this.fn = fn; 15 | } 16 | 17 | public static Function memoOne(Function fn) { 18 | return new MemoOne<>(fn); 19 | } 20 | 21 | @Override 22 | public O apply(I input) { 23 | if (called && Java7.Objects.equals(lastInput, input)) { 24 | return lastOutput; 25 | } 26 | called = true; 27 | return lastOutput = fn.apply(lastInput = input); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/func/NullBimapper.java: -------------------------------------------------------------------------------- 1 | package org.andork.func; 2 | 3 | public class NullBimapper implements Bimapper { 4 | @Override 5 | public O map(I in) { 6 | return null; 7 | } 8 | 9 | @Override 10 | public I unmap(O out) { 11 | return null; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/func/ShorterCode.java: -------------------------------------------------------------------------------- 1 | package org.andork.func; 2 | 3 | public class ShorterCode { 4 | public static void swallowException(ExceptionRunnable runnable) { 5 | try { 6 | runnable.run(); 7 | } catch (Exception ex) { 8 | throw new RuntimeException(ex); 9 | } 10 | } 11 | 12 | public static T swallowException(ExceptionSupplier supplier) { 13 | try { 14 | return supplier.get(); 15 | } catch (Exception ex) { 16 | throw new RuntimeException(ex); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/func/TriFunction.java: -------------------------------------------------------------------------------- 1 | package org.andork.func; 2 | 3 | @FunctionalInterface 4 | public interface TriFunction { 5 | public R apply(T t, U u, V v); 6 | } 7 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/io/FileStreamFlattener.java: -------------------------------------------------------------------------------- 1 | package org.andork.io; 2 | 3 | import java.io.File; 4 | import java.util.Arrays; 5 | import java.util.function.Function; 6 | import java.util.stream.Stream; 7 | 8 | public class FileStreamFlattener implements Function> { 9 | public static final FileStreamFlattener instance = new FileStreamFlattener(); 10 | 11 | public static void main(String[] args) { 12 | Arrays.asList(new File(".")).stream().flatMap(instance).forEach(System.out::println); 13 | } 14 | 15 | private FileStreamFlattener() { 16 | 17 | } 18 | 19 | @Override 20 | public Stream apply(File f) { 21 | if (f == null) { 22 | return null; 23 | } 24 | if (f.isDirectory()) { 25 | return Arrays.asList(f.listFiles()).stream().flatMap(this); 26 | } 27 | return Stream.of(f); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/io/FileUtils.java: -------------------------------------------------------------------------------- 1 | package org.andork.io; 2 | 3 | import java.io.IOException; 4 | import java.nio.ByteBuffer; 5 | import java.nio.channels.FileChannel; 6 | import java.nio.file.Files; 7 | import java.nio.file.Path; 8 | import java.nio.file.StandardOpenOption; 9 | 10 | public class FileUtils { 11 | public static ByteBuffer slurp(Path path) throws IOException { 12 | if (Files.size(path) > Integer.MAX_VALUE) { 13 | throw new IOException("File is too large"); 14 | } 15 | 16 | try (FileChannel channel = FileChannel.open(path, StandardOpenOption.READ)) { 17 | ByteBuffer buffer = ByteBuffer.allocate((int) channel.size()); 18 | 19 | while (channel.read(buffer) > 0) { 20 | ; 21 | } 22 | 23 | buffer.position(0); 24 | 25 | return buffer; 26 | } 27 | } 28 | 29 | public static byte[] slurpAsBytes(Path path) throws IOException { 30 | return slurp(path).array(); 31 | } 32 | 33 | public static String slurpAsString(Path path) throws IOException { 34 | return new String(slurp(path).array()); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/io/InputStreamUtils.java: -------------------------------------------------------------------------------- 1 | package org.andork.io; 2 | 3 | import java.io.ByteArrayOutputStream; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | 7 | public class InputStreamUtils { 8 | private InputStreamUtils() { 9 | } 10 | 11 | public static byte[] readAllBytes(InputStream in) throws IOException { 12 | ByteArrayOutputStream out = new ByteArrayOutputStream(); 13 | byte[] buf = new byte[4096]; 14 | int numRead; 15 | while ((numRead = in.read(buf, 0, buf.length)) >= 0) { 16 | out.write(buf, 0, numRead); 17 | } 18 | return out.toByteArray(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/io/Readers.java: -------------------------------------------------------------------------------- 1 | package org.andork.io; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.Reader; 5 | 6 | public class Readers { 7 | private Readers() { 8 | } 9 | 10 | public static BufferedReader buffered(Reader reader) { 11 | if (reader instanceof BufferedReader) 12 | return (BufferedReader) reader; 13 | return new BufferedReader(reader); 14 | } 15 | 16 | public static BufferedReader buffered(BufferedReader reader) { 17 | return reader; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/task/TaskCallable.java: -------------------------------------------------------------------------------- 1 | package org.andork.task; 2 | 3 | @FunctionalInterface 4 | public interface TaskCallable { 5 | public R work(Task task) throws Exception; 6 | } 7 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/task/TaskCanceledException.java: -------------------------------------------------------------------------------- 1 | package org.andork.task; 2 | 3 | public class TaskCanceledException extends RuntimeException { 4 | 5 | /** 6 | * 7 | */ 8 | private static final long serialVersionUID = 2294509510725014491L; 9 | 10 | public TaskCanceledException() { 11 | } 12 | 13 | public TaskCanceledException(String message) { 14 | super(message); 15 | } 16 | 17 | public TaskCanceledException(Throwable cause) { 18 | super(cause); 19 | } 20 | 21 | public TaskCanceledException(String message, Throwable cause) { 22 | super(message, cause); 23 | } 24 | 25 | public TaskCanceledException(String message, Throwable cause, boolean enableSuppression, 26 | boolean writableStackTrace) { 27 | super(message, cause, enableSuppression, writableStackTrace); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/util/Comparables.java: -------------------------------------------------------------------------------- 1 | package org.andork.util; 2 | 3 | import java.util.Comparator; 4 | 5 | public class Comparables { 6 | public static > T max(T a, T b) { 7 | return a == null ? b : b == null ? null : a.compareTo(b) > 0 ? a : b; 8 | } 9 | 10 | public static > T min(T a, T b) { 11 | return a == null ? b : b == null ? null : a.compareTo(b) < 0 ? a : b; 12 | } 13 | 14 | public static int compareNullsLast(T a, T b, Comparator comparator) { 15 | if (a == null) return b == null ? 0 : 1; 16 | if (b == null) return -1; 17 | return comparator.compare(a, b); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/util/Comparators.java: -------------------------------------------------------------------------------- 1 | package org.andork.util; 2 | 3 | import java.util.Comparator; 4 | 5 | public class Comparators { 6 | private Comparators() { 7 | 8 | } 9 | 10 | public static Comparator negate(Comparator c) { 11 | return (a, b) -> -c.compare(a, b); 12 | } 13 | 14 | @SafeVarargs 15 | public static Comparator combine(Comparator... comparators) { 16 | return (a, b) -> { 17 | for (Comparator comparator : comparators) { 18 | int result = comparator.compare(a, b); 19 | if (result != 0) { 20 | return result; 21 | } 22 | } 23 | return 0; 24 | }; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/util/FileRecoveryConfig.java: -------------------------------------------------------------------------------- 1 | package org.andork.util; 2 | 3 | import java.io.File; 4 | 5 | public interface FileRecoveryConfig { 6 | public default File getBackupFile(File f) { 7 | return new File(f.getParentFile(), "~" + f.getName()); 8 | } 9 | 10 | public default File getTempFile(File f) { 11 | return new File(f.getPath() + ".tmp"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/util/SizeFormat.java: -------------------------------------------------------------------------------- 1 | package org.andork.util; 2 | 3 | import java.text.CharacterIterator; 4 | import java.text.StringCharacterIterator; 5 | 6 | public class SizeFormat { 7 | public static SizeFormat DEFAULT = new SizeFormat(); 8 | 9 | public String format(long bytes) { 10 | if (-1000 < bytes && bytes < 1000) { 11 | return bytes + " B"; 12 | } 13 | CharacterIterator ci = new StringCharacterIterator("kMGTPE"); 14 | while (bytes <= -999950 || bytes >= 999950) { 15 | bytes /= 1000; 16 | ci.next(); 17 | } 18 | return String.format("%.1f %cB", bytes / 1000.0, ci.current()); 19 | } 20 | 21 | public String formatProgress(long completed, long total) { 22 | if (-1000 < total && total < 1000) { 23 | return total + " B"; 24 | } 25 | CharacterIterator ci = new StringCharacterIterator("kMGTPE"); 26 | while (total <= -999950 || total >= 999950) { 27 | completed /= 1000; 28 | total /= 1000; 29 | ci.next(); 30 | } 31 | return String.format("%.1f/%.1f %cB", completed / 1000.0, total / 1000.0, ci.current()); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /andork-core/src/org/andork/util/VersionUtil.java: -------------------------------------------------------------------------------- 1 | package org.andork.util; 2 | 3 | public class VersionUtil { 4 | public static int compareVersions(String a, String b) { 5 | String[] aParts = a.split("\\."); 6 | String[] bParts = b.split("\\."); 7 | 8 | for (int i = 0; i < Math.min(aParts.length, bParts.length); i++) { 9 | int aNum = Integer.parseInt(aParts[i]); 10 | int bNum = Integer.parseInt(bParts[i]); 11 | if (aNum != bNum) { 12 | return aNum - bNum; 13 | } 14 | } 15 | 16 | return aParts.length - bParts.length; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /andork-core/test/org/andork/io/CSVTest.java: -------------------------------------------------------------------------------- 1 | package org.andork.io; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | import org.junit.Assert; 7 | import org.junit.Test; 8 | 9 | public class CSVTest { 10 | @Test 11 | public void testParseLine() { 12 | CSVFormat csv = new CSVFormat(); 13 | 14 | csv.trimWhitespace(false); 15 | 16 | String original = "\"Test \" \"\"one,\"Test \"\" two\",1997\n, Ford,,E350,\"Super, \"\"luxurious\"\" truck\","; 17 | List fields = Arrays.asList("Test one", "Test \" two", "1997\n", " Ford", "", "E350", 18 | "Super, \"luxurious\" truck", ""); 19 | 20 | List parsed = csv.parseLine(original); 21 | 22 | Assert.assertEquals(fields, parsed); 23 | 24 | String formatted = csv.formatLine(fields); 25 | 26 | Assert.assertEquals("Test one,\"Test \"\" two\",1997\n, Ford,,E350,\"Super, \"\"luxurious\"\" truck\",", 27 | formatted); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /andork-cpcurves/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /andork-cpcurves/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings -------------------------------------------------------------------------------- /andork-cpcurves/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-cpcurves 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /andork-gson/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /andork-gson/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings -------------------------------------------------------------------------------- /andork-gson/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-gson 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /andork-gson/src/org/andork/spec/json/JsonSpecArrayList.java: -------------------------------------------------------------------------------- 1 | package org.andork.spec.json; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collection; 5 | 6 | import org.andork.spec.json.JsonSpec.Format; 7 | 8 | import com.google.gson.JsonArray; 9 | 10 | public class JsonSpecArrayList extends JsonSpecList 11 | { 12 | private JsonSpecArrayList( Format format ) 13 | { 14 | super( format ); 15 | } 16 | 17 | public static JsonSpecArrayList newInstance( Format format ) 18 | { 19 | return new JsonSpecArrayList( format ); 20 | } 21 | 22 | @Override 23 | protected Collection createCollection( ) 24 | { 25 | return new ArrayList( ); 26 | } 27 | 28 | public static JsonSpecArrayList fromJson( JsonArray array , Format format ) throws Exception 29 | { 30 | JsonSpecArrayList list = newInstance( format ); 31 | fromJson( array , list ); 32 | return list; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /andork-gson/src/org/andork/spec/json/JsonSpecElement.java: -------------------------------------------------------------------------------- 1 | package org.andork.spec.json; 2 | 3 | import org.andork.event.HierarchicalBasicPropertyChangePropagator; 4 | import org.andork.event.HierarchicalBasicPropertyChangeSupport; 5 | import org.andork.model.HasChangeSupport; 6 | 7 | import com.google.gson.JsonElement; 8 | 9 | public abstract class JsonSpecElement implements HasChangeSupport { 10 | protected final HierarchicalBasicPropertyChangeSupport changeSupport = new HierarchicalBasicPropertyChangeSupport(); 11 | protected final HierarchicalBasicPropertyChangePropagator propagator = new HierarchicalBasicPropertyChangePropagator(this, changeSupport); 12 | 13 | public HierarchicalBasicPropertyChangeSupport.External changeSupport() { 14 | return changeSupport.external(); 15 | } 16 | 17 | public abstract JsonElement toJson(); 18 | } 19 | -------------------------------------------------------------------------------- /andork-j3d-utils/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /andork-j3d-utils/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings -------------------------------------------------------------------------------- /andork-j3d-utils/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-j3d-utils 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /andork-j3d-utils/src/org/andork/j3d/XyzAxes2.java: -------------------------------------------------------------------------------- 1 | 2 | package org.andork.j3d; 3 | 4 | /** 5 | * 6 | */ 7 | 8 | import java.awt.Color; 9 | 10 | import javax.media.j3d.BranchGroup; 11 | import javax.vecmath.Color3f; 12 | import javax.vecmath.Point3f; 13 | 14 | import org.andork.j3d.math.TransformComputer3f; 15 | 16 | /** 17 | * @author brian.kamery 18 | * 19 | */ 20 | public class XyzAxes2 extends BranchGroup 21 | { 22 | TransformComputer3f m_tc3f = new TransformComputer3f( ); 23 | /** 24 | * 25 | * @param radius 26 | * @param length 27 | */ 28 | public XyzAxes2( float radius , float length ) 29 | { 30 | 31 | Cylinder x = new Cylinder( radius , new Point3f( ) , new Point3f( 1 , 0 , 0 ) , m_tc3f , new Color3f( Color.RED ) ); 32 | Cylinder y = new Cylinder( radius , new Point3f( ) , new Point3f( 0 , 1 , 0 ) , m_tc3f , new Color3f( Color.GREEN ) ); 33 | Cylinder z = new Cylinder( radius , new Point3f( ) , new Point3f( 0 , 0 , 1 ) , m_tc3f , new Color3f( Color.BLUE ) ); 34 | 35 | this.addChild( x ); 36 | this.addChild( y ); 37 | this.addChild( z ); 38 | 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /andork-j3d-utils/src/org/andork/j3d/camera/CameraEvent.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | */ 4 | 5 | package org.andork.j3d.camera; 6 | 7 | import java.util.EventObject; 8 | 9 | /** 10 | * @author brian.kamery 11 | * 12 | */ 13 | @SuppressWarnings( "serial" ) 14 | public class CameraEvent extends EventObject 15 | { 16 | public CameraEvent( Camera3D source ) 17 | { 18 | super( source ); 19 | } 20 | 21 | public Camera3D getCamera( ) 22 | { 23 | return ( Camera3D ) super.getSource( ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /andork-j3d-utils/src/org/andork/j3d/camera/CameraListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | */ 4 | 5 | package org.andork.j3d.camera; 6 | 7 | /** 8 | * @author brian.kamery 9 | * 10 | */ 11 | public interface CameraListener 12 | { 13 | public void orientationChanged( CameraEvent evt ); 14 | } 15 | -------------------------------------------------------------------------------- /andork-j3d-utils/src/org/andork/j3d/math/OrientationUtils.java: -------------------------------------------------------------------------------- 1 | package org.andork.j3d.math; 2 | 3 | import javax.vecmath.Quat4f; 4 | 5 | public class OrientationUtils 6 | { 7 | public static void taitBryanToQuat( float yaw , float pitch , float roll , Quat4f q ) 8 | { 9 | float cphi = ( float ) Math.cos( roll / 2 ); 10 | float ctheta = ( float ) Math.cos( pitch / 2 ); 11 | float cpsi = ( float ) Math.cos( yaw / 2 ); 12 | float sphi = ( float ) Math.sin( roll / 2 ); 13 | float stheta = ( float ) Math.sin( pitch / 2 ); 14 | float spsi = ( float ) Math.sin( yaw / 2 ); 15 | 16 | q.w = cphi * ctheta * cpsi + sphi * stheta * spsi; 17 | q.x = sphi * ctheta * cpsi - cphi * stheta * spsi; 18 | q.y = cphi * stheta * cpsi - sphi * ctheta * spsi; 19 | q.z = cphi * ctheta * spsi - sphi * stheta * cpsi; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /andork-j3d-utils/src/org/andork/spatial/SINode.java: -------------------------------------------------------------------------------- 1 | package org.andork.spatial; 2 | 3 | public interface SINode 4 | { 5 | public SIBranch getParent( ); 6 | 7 | public void setParent( SIBranch newParent ); 8 | 9 | public BBox getBBox( ); 10 | 11 | public boolean isValid( ); 12 | 13 | public void validate( ); 14 | } 15 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-swing/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-swing/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-jogl-gl2es2-swing 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-swing/src/com/jogamp/opengl/util/packrect/package.html: -------------------------------------------------------------------------------- 1 | 2 | This package implements a rectangle packing algorithm suitable for 3 | tracking the placement of multiple rectangles inside a larger one. It 4 | is useful for cases such as placing the contents of multiple windows 5 | on a larger backing store texture for a compositing window manager; 6 | placing multiple rasterized strings in a texture map for quick 7 | rendering to the screen; and many other situations where it is useful 8 | to carve up a larger texture into smaller pieces dynamically.

9 | 10 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-jogl-gl2es2-utils 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/DevicePixelRatio.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl; 2 | 3 | import java.awt.Component; 4 | 5 | import com.jogamp.opengl.GLAutoDrawable; 6 | 7 | public class DevicePixelRatio 8 | { 9 | private DevicePixelRatio( ) 10 | { 11 | 12 | } 13 | 14 | public static float getDevicePixelRatio(GLAutoDrawable drawable) { 15 | if (!(drawable instanceof Component)) return 1; 16 | Component comp = (Component) drawable; 17 | return (float) drawable.getSurfaceWidth( ) / comp.getWidth( ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/JoglBackgroundColor.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl; 2 | 3 | import static org.andork.math3d.Vecmath.setf; 4 | 5 | import java.util.Arrays; 6 | 7 | import com.jogamp.opengl.GL; 8 | import com.jogamp.opengl.GL2ES2; 9 | 10 | public class JoglBackgroundColor implements JoglDrawable { 11 | 12 | private final float[] bgColor = { 0, 0, 0, 1 }; 13 | 14 | @Override 15 | public void draw(JoglDrawContext context, GL2ES2 gl, float[] m, float[] n) { 16 | gl.glClearColor(bgColor[0], bgColor[1], bgColor[2], bgColor[3]); 17 | gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); 18 | } 19 | 20 | public float[] get() { 21 | return Arrays.copyOf(bgColor, bgColor.length); 22 | } 23 | 24 | public float[] get(float[] out) { 25 | setf(out, bgColor); 26 | return out; 27 | } 28 | 29 | public void set(float... bgColor) { 30 | setf(this.bgColor, bgColor); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/JoglFilter.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl; 2 | 3 | import com.jogamp.opengl.GL3; 4 | 5 | public interface JoglFilter { 6 | /** 7 | * APplies 8 | * 9 | * @param gl 10 | * @param width the width of the viewport 11 | * @param height the height of the viewport 12 | * @param framebuffer the gl framebuffer object 13 | * @param texture the gl texture object 14 | * @param s the s coordinate <= 1 corresponding to x = width 15 | * @param t the t coordinate <= 1 corresponding to y = height 16 | */ 17 | void apply(GL3 gl, int width, int height, int framebuffer, int texture, float s, float t); 18 | } 19 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/JoglManagedResource.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public abstract class JoglManagedResource implements JoglResource { 6 | int referenceCount = 0; 7 | 8 | @Override 9 | public void dispose(GL2ES2 gl) { 10 | if (referenceCount == 0) { 11 | throw new IllegalStateException("expected referenceCount to be > 0"); 12 | } 13 | if (--referenceCount == 0) { 14 | doDispose(gl); 15 | } 16 | } 17 | 18 | @Override 19 | public boolean init(GL2ES2 gl) { 20 | if (referenceCount++ == 0) { 21 | return doInit(gl); 22 | } 23 | return true; 24 | } 25 | 26 | protected abstract boolean doInit(GL2ES2 gl); 27 | 28 | protected abstract void doDispose(GL2ES2 gl); 29 | } 30 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/AttribLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public class AttribLocation extends GLLocation { 6 | public AttribLocation(String name) { 7 | super(name); 8 | } 9 | 10 | @Override 11 | public void update(GL2ES2 gl, int program) { 12 | location = gl.glGetAttribLocation(program, name); 13 | } 14 | 15 | public void enableArray(GL2ES2 gl) { 16 | gl.glEnableVertexAttribArray(location); 17 | } 18 | 19 | public void disableArray(GL2ES2 gl) { 20 | gl.glDisableVertexAttribArray(location); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/FlatColorFragment.fp: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | uniform vec4 color; 4 | out vec4 color_out; 5 | 6 | void main() { 7 | color_out = color; 8 | } 9 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/FlatColorVertex.vp: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | uniform mat4 m; 4 | uniform mat4 v; 5 | uniform mat4 p; 6 | in vec3 position; 7 | 8 | void main() { 9 | gl_Position = p * v * m * vec4(position, 1.0); 10 | } 11 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/FlatColorVertexScreen.vp: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | uniform mat4 screenXform; 4 | in vec3 position; 5 | 6 | void main() { 7 | gl_Position = screenXform * vec4(position, 1.0); 8 | } 9 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/GLLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public abstract class GLLocation { 6 | protected final String name; 7 | protected int location; 8 | 9 | public GLLocation(String name) { 10 | this.name = name; 11 | } 12 | 13 | public int location() { 14 | return location; 15 | } 16 | 17 | public String name() { 18 | return name; 19 | } 20 | 21 | public abstract void update(GL2ES2 gl, int program); 22 | } 23 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/MaxBlur.fp: -------------------------------------------------------------------------------- 1 | # version 330 2 | 3 | uniform sampler2D u_texture; 4 | uniform int u_count; 5 | uniform float u_coeff[11]; 6 | in vec2 v_texcoord[11]; 7 | out vec4 color_out; 8 | 9 | void main() { 10 | vec4 color = vec4(0, 0, 0, 0); 11 | for (int i = 0; i < u_count; i++) { 12 | vec4 sample = texture(u_texture, v_texcoord[i]) * u_coeff[i]; 13 | color = max( 14 | color, 15 | sample 16 | ); 17 | } 18 | color_out = color; 19 | } 20 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/MaxBlur.vp: -------------------------------------------------------------------------------- 1 | # version 330 2 | 3 | in vec2 a_position; 4 | in vec2 a_texcoord; 5 | uniform int u_count; 6 | uniform vec2 u_offset[11]; 7 | out vec2 v_texcoord[11]; 8 | 9 | void main() { 10 | gl_Position = vec4(a_position, 0, 1); 11 | for (int i = 0; i < u_count; i++) { 12 | v_texcoord[i] = a_texcoord + u_offset[i]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/Uniform1fvLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public class Uniform1fvLocation extends UniformLocation { 6 | public Uniform1fvLocation(String name) { 7 | super(name); 8 | } 9 | 10 | public void put(GL2ES2 gl, float... value) { 11 | gl.glUniform1fv(location(), 1, value, 0); 12 | } 13 | 14 | public void put(GL2ES2 gl, int count, float... value) { 15 | gl.glUniform1fv(location(), count, value, 0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/Uniform1ivLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public class Uniform1ivLocation extends UniformLocation { 6 | public Uniform1ivLocation(String name) { 7 | super(name); 8 | } 9 | 10 | public void put(GL2ES2 gl, int... value) { 11 | gl.glUniform1iv(location(), 1, value, 0); 12 | } 13 | } -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/Uniform2fvLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public class Uniform2fvLocation extends UniformLocation { 6 | public Uniform2fvLocation(String name) { 7 | super(name); 8 | } 9 | 10 | public void put(GL2ES2 gl, float... value) { 11 | gl.glUniform2fv(location(), 1, value, 0); 12 | } 13 | 14 | public void put(GL2ES2 gl, int count, float... value) { 15 | gl.glUniform2fv(location(), count, value, 0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/Uniform3fvLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public class Uniform3fvLocation extends UniformLocation { 6 | public Uniform3fvLocation(String name) { 7 | super(name); 8 | } 9 | 10 | public void put(GL2ES2 gl, float... value) { 11 | gl.glUniform3fv(location(), 1, value, 0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/Uniform4fvLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import java.awt.Color; 4 | 5 | import com.jogamp.opengl.GL2ES2; 6 | 7 | public class Uniform4fvLocation extends UniformLocation { 8 | public Uniform4fvLocation(String name) { 9 | super(name); 10 | } 11 | 12 | public void put(GL2ES2 gl, float... value) { 13 | gl.glUniform4fv(location(), 1, value, 0); 14 | } 15 | 16 | public void putColor(GL2ES2 gl, Color color) { 17 | put(gl, color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/UniformLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public class UniformLocation extends GLLocation { 6 | public UniformLocation(String name) { 7 | super(name); 8 | } 9 | 10 | @Override 11 | public void update(GL2ES2 gl, int program) { 12 | location = gl.glGetUniformLocation(program, name); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/UniformMatrix3fvLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public class UniformMatrix3fvLocation extends UniformLocation { 6 | public UniformMatrix3fvLocation(String name) { 7 | super(name); 8 | } 9 | 10 | public void put(GL2ES2 gl, float... value) { 11 | gl.glUniformMatrix3fv(location(), 1, false, value, 0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/shader/UniformMatrix4fvLocation.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.shader; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public class UniformMatrix4fvLocation extends UniformLocation { 6 | public UniformMatrix4fvLocation(String name) { 7 | super(name); 8 | } 9 | 10 | public void put(GL2ES2 gl, float... value) { 11 | gl.glUniformMatrix4fv(location(), 1, false, value, 0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/uniform/Uniform.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.uniform; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public abstract interface Uniform { 6 | public abstract void put(GL2ES2 gl, int location); 7 | } 8 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/uniform/Uniform1fv.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.uniform; 2 | 3 | import org.andork.jogl.shader.Uniform1fvLocation; 4 | 5 | import com.jogamp.opengl.GL2ES2; 6 | 7 | public class Uniform1fv implements Uniform { 8 | int count = 1; 9 | float[] value; 10 | int value_offset; 11 | 12 | public Uniform1fv count(int count) { 13 | this.count = count; 14 | return this; 15 | } 16 | 17 | @Override 18 | public void put(GL2ES2 gl, int location) { 19 | gl.glUniform1fv(location, count, value, value_offset); 20 | } 21 | 22 | public Uniform1fv value(float... value) { 23 | this.value = value; 24 | return this; 25 | } 26 | 27 | public float[] value() { 28 | return value; 29 | } 30 | 31 | public Uniform1fv value_offset(int value_offset) { 32 | this.value_offset = value_offset; 33 | return this; 34 | } 35 | 36 | public void put(GL2ES2 gl, Uniform1fvLocation location) { 37 | put(gl, location.location()); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/uniform/Uniform1iv.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.uniform; 2 | 3 | import com.jogamp.opengl.GL2ES2; 4 | 5 | public class Uniform1iv implements Uniform { 6 | int count = 1; 7 | int[] value; 8 | int value_offset; 9 | 10 | public Uniform1iv count(int count) { 11 | this.count = count; 12 | return this; 13 | } 14 | 15 | @Override 16 | public void put(GL2ES2 gl, int location) { 17 | gl.glUniform1iv(location, count, value, value_offset); 18 | } 19 | 20 | public Uniform1iv value(int... value) { 21 | this.value = value; 22 | return this; 23 | } 24 | 25 | public int[] value() { 26 | return value; 27 | } 28 | 29 | public Uniform1iv value_offset(int value_offset) { 30 | this.value_offset = value_offset; 31 | return this; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/uniform/Uniform2fv.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.uniform; 2 | 3 | import org.andork.jogl.shader.Uniform2fvLocation; 4 | 5 | import com.jogamp.opengl.GL2ES2; 6 | 7 | public class Uniform2fv implements Uniform { 8 | int count = 1; 9 | float[] value; 10 | int value_offset; 11 | 12 | public Uniform2fv count(int count) { 13 | this.count = count; 14 | return this; 15 | } 16 | 17 | @Override 18 | public void put(GL2ES2 gl, int location) { 19 | gl.glUniform2fv(location, count, value, value_offset); 20 | } 21 | 22 | public Uniform2fv value(float... value) { 23 | this.value = value; 24 | return this; 25 | } 26 | 27 | public float[] value() { 28 | return value; 29 | } 30 | 31 | public Uniform2fv value_offset(int value_offset) { 32 | this.value_offset = value_offset; 33 | return this; 34 | } 35 | 36 | public void put(GL2ES2 gl, Uniform2fvLocation location) { 37 | put(gl, location.location()); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/uniform/Uniform3fv.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.uniform; 2 | 3 | import org.andork.jogl.shader.Uniform3fvLocation; 4 | 5 | import com.jogamp.opengl.GL2ES2; 6 | 7 | public class Uniform3fv implements Uniform { 8 | int count = 1; 9 | float[] value; 10 | int value_offset; 11 | 12 | public Uniform3fv count(int count) { 13 | this.count = count; 14 | return this; 15 | } 16 | 17 | @Override 18 | public void put(GL2ES2 gl, int location) { 19 | gl.glUniform3fv(location, count, value, value_offset); 20 | } 21 | 22 | public Uniform3fv value(float... value) { 23 | this.value = value; 24 | return this; 25 | } 26 | 27 | public float[] value() { 28 | return value; 29 | } 30 | 31 | public Uniform3fv value_offset(int value_offset) { 32 | this.value_offset = value_offset; 33 | return this; 34 | } 35 | 36 | public void put(GL2ES2 gl, Uniform3fvLocation location) { 37 | put(gl, location.location()); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/uniform/Uniform4fv.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.uniform; 2 | 3 | import org.andork.jogl.shader.Uniform4fvLocation; 4 | 5 | import com.jogamp.opengl.GL2ES2; 6 | 7 | public class Uniform4fv implements Uniform { 8 | int count = 1; 9 | float[] value; 10 | int value_offset; 11 | 12 | public Uniform4fv count(int count) { 13 | this.count = count; 14 | return this; 15 | } 16 | 17 | @Override 18 | public void put(GL2ES2 gl, int location) { 19 | gl.glUniform4fv(location, count, value, value_offset); 20 | } 21 | 22 | public Uniform4fv value(float... value) { 23 | this.value = value; 24 | return this; 25 | } 26 | 27 | public float[] value() { 28 | return value; 29 | } 30 | 31 | public Uniform4fv value_offset(int value_offset) { 32 | this.value_offset = value_offset; 33 | return this; 34 | } 35 | 36 | public void put(GL2ES2 gl, Uniform4fvLocation location) { 37 | put(gl, location.location()); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/uniform/UniformMatrix3fv.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.uniform; 2 | 3 | import org.andork.jogl.shader.UniformMatrix3fvLocation; 4 | 5 | import com.jogamp.opengl.GL2ES2; 6 | 7 | public class UniformMatrix3fv implements Uniform { 8 | int count; 9 | boolean transpose; 10 | float[] value; 11 | int value_offset; 12 | 13 | public UniformMatrix3fv count(int count) { 14 | this.count = count; 15 | return this; 16 | } 17 | 18 | @Override 19 | public void put(GL2ES2 gl, int location) { 20 | gl.glUniformMatrix3fv(location, count, transpose, value, value_offset); 21 | } 22 | 23 | public UniformMatrix3fv transpose(boolean transpose) { 24 | this.transpose = transpose; 25 | return this; 26 | } 27 | 28 | public UniformMatrix3fv value(float[] value) { 29 | this.value = value; 30 | return this; 31 | } 32 | 33 | public float[] value() { 34 | return value; 35 | } 36 | 37 | public UniformMatrix3fv value_offset(int value_offset) { 38 | this.value_offset = value_offset; 39 | return this; 40 | } 41 | 42 | public void put(GL2ES2 gl, UniformMatrix3fvLocation location) { 43 | put(gl, location.location()); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /andork-jogl-gl2es2-utils/src/org/andork/jogl/uniform/UniformMatrix4fv.java: -------------------------------------------------------------------------------- 1 | package org.andork.jogl.uniform; 2 | 3 | import org.andork.jogl.shader.UniformMatrix4fvLocation; 4 | 5 | import com.jogamp.opengl.GL2ES2; 6 | 7 | public class UniformMatrix4fv implements Uniform { 8 | int count; 9 | boolean transpose; 10 | float[] value; 11 | int value_offset; 12 | 13 | public UniformMatrix4fv count(int count) { 14 | this.count = count; 15 | return this; 16 | } 17 | 18 | @Override 19 | public void put(GL2ES2 gl, int location) { 20 | gl.glUniformMatrix4fv(location, count, transpose, value, value_offset); 21 | } 22 | 23 | public UniformMatrix4fv transpose(boolean transpose) { 24 | this.transpose = transpose; 25 | return this; 26 | } 27 | 28 | public UniformMatrix4fv value(float[] value) { 29 | this.value = value; 30 | return this; 31 | } 32 | 33 | public float[] value() { 34 | return value; 35 | } 36 | 37 | public UniformMatrix4fv value_offset(int value_offset) { 38 | this.value_offset = value_offset; 39 | return this; 40 | } 41 | 42 | public void put(GL2ES2 gl, UniformMatrix4fvLocation location) { 43 | put(gl, location.location()); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /andork-math/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /andork-math/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-math/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-math 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-math/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | org.andork 4 | andork-math 5 | 0.0.0-SNAPSHOT 6 | 7 | src 8 | 9 | 10 | maven-compiler-plugin 11 | 3.3 12 | 13 | 1.8 14 | 1.8 15 | 16 | 17 | 18 | 19 | 20 | 21 | javax.vecmath 22 | vecmath 23 | 1.5.2 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /andork-math3d/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-math3d/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-math3d 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-math3d/test/org/andork/math3d/NormalGenerator3fTest.java: -------------------------------------------------------------------------------- 1 | package org.andork.math3d; 2 | 3 | import org.andork.math3d.NormalGenerator3f.MeshBuilder; 4 | import org.andork.math3d.NormalGenerator3f.Triangle; 5 | import org.junit.Assert; 6 | import org.junit.Test; 7 | 8 | public class NormalGenerator3fTest { 9 | @Test 10 | public void test001() { 11 | MeshBuilder mesh = new MeshBuilder(); 12 | 13 | Triangle side = mesh.add(1, 0, 0, 0, 1, 0, -1, 0, 0); 14 | 15 | float SQRT_2_2 = (float) Math.sqrt(2) / 2; 16 | Triangle t1 = mesh.add(-1, 0, 0, 0, 1, 0, -SQRT_2_2, 0, SQRT_2_2); 17 | Triangle t2 = mesh.add(-SQRT_2_2, 0, SQRT_2_2, 0, 1, 0, 0, 0, 1); 18 | Triangle t3 = mesh.add(0, 0, 1, 0, 1, 0, SQRT_2_2, 0, SQRT_2_2); 19 | Triangle t4 = mesh.add(SQRT_2_2, 0, SQRT_2_2, 0, 1, 0, 1, 0, 0); 20 | 21 | Triangle[] triangles = mesh.getTriangles(); 22 | 23 | NormalGenerator3f generator = new NormalGenerator3f(triangles); 24 | generator.foldAngle(Math.PI / 2); 25 | generator.foldSharpness(1); 26 | int vertexCount = generator.generateNormals(); 27 | Assert.assertEquals(9, vertexCount); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /andork-plot/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-plot/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-plot 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-plot/src/com/andork/plot/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-plot/src/com/andork/plot/link.png -------------------------------------------------------------------------------- /andork-plot/src/com/andork/plot/unlink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-plot/src/com/andork/plot/unlink.png -------------------------------------------------------------------------------- /andork-qh2/dist/lib/andork-qh2-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-qh2/dist/lib/andork-qh2-sources.jar -------------------------------------------------------------------------------- /andork-qh2/dist/lib/andork-qh2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-qh2/dist/lib/andork-qh2.jar -------------------------------------------------------------------------------- /andork-qh2/dist/lib/h2-1.3.176.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-qh2/dist/lib/h2-1.3.176.jar -------------------------------------------------------------------------------- /andork-qh2/dist/lib/iciql-1.2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-qh2/dist/lib/iciql-1.2.0.jar -------------------------------------------------------------------------------- /andork-spatial/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-spatial/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-spatial 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-ui-debug/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /andork-ui-debug/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-ui-debug/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-ui-debug 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-ui-debug/src/org/andork/ui/debug/delete-node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui-debug/src/org/andork/ui/debug/delete-node.png -------------------------------------------------------------------------------- /andork-ui-debug/src/org/andork/ui/debug/insert-child.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui-debug/src/org/andork/ui/debug/insert-child.png -------------------------------------------------------------------------------- /andork-ui-debug/src/org/andork/ui/debug/insert-sibling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui-debug/src/org/andork/ui/debug/insert-sibling.png -------------------------------------------------------------------------------- /andork-ui-debug/src/org/andork/ui/debug/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui-debug/src/org/andork/ui/debug/new.png -------------------------------------------------------------------------------- /andork-ui-debug/src/org/andork/ui/debug/nullify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui-debug/src/org/andork/ui/debug/nullify.png -------------------------------------------------------------------------------- /andork-ui-debug/src/org/andork/ui/debug/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui-debug/src/org/andork/ui/debug/remove.png -------------------------------------------------------------------------------- /andork-ui-test/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /andork-ui-test/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-ui-test/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-ui-test 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-ui/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | /target/ 6 | -------------------------------------------------------------------------------- /andork-ui/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | andork-ui 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/awt/FontMetricsUtils.java: -------------------------------------------------------------------------------- 1 | package org.andork.awt; 2 | 3 | import java.awt.Font; 4 | import java.awt.font.FontRenderContext; 5 | import java.awt.geom.Rectangle2D; 6 | 7 | public class FontMetricsUtils { 8 | 9 | private FontMetricsUtils() { 10 | } 11 | 12 | public static Rectangle2D getMultilineStringBounds(String s, Font font, FontRenderContext frc) { 13 | return getMultilineStringBounds(s.split("\r\n?|\n"), font, frc); 14 | } 15 | 16 | public static Rectangle2D getMultilineStringBounds(String[] lines, Font font, FontRenderContext frc) { 17 | Rectangle2D bounds = font.getStringBounds(lines[0], frc); 18 | for (int i = 1; i < lines.length; i++) { 19 | Rectangle2D nextBounds = font.getStringBounds(lines[i], frc); 20 | bounds.setFrame( 21 | bounds.getX(), 22 | bounds.getY(), 23 | Math.max(bounds.getWidth(), nextBounds.getWidth()), 24 | bounds.getHeight() + nextBounds.getHeight() 25 | ); 26 | } 27 | return bounds; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/awt/KeyEvents.java: -------------------------------------------------------------------------------- 1 | package org.andork.awt; 2 | 3 | import java.awt.event.KeyEvent; 4 | import java.util.regex.Pattern; 5 | 6 | public class KeyEvents { 7 | private static final boolean isMacOS = Pattern.compile("\\bmac|\\bos\\s*x\\b", Pattern.CASE_INSENSITIVE) 8 | .matcher(System.getProperty("os.name")).find(); 9 | 10 | public static final int CTRL_OR_META_DOWN_MASK = isMacOS 11 | ? KeyEvent.META_DOWN_MASK 12 | : KeyEvent.CTRL_DOWN_MASK; 13 | } 14 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/awt/event/WheelEventAggregator.java: -------------------------------------------------------------------------------- 1 | package org.andork.awt.event; 2 | 3 | import java.awt.event.MouseAdapter; 4 | import java.awt.event.MouseWheelEvent; 5 | 6 | import javax.swing.SwingUtilities; 7 | 8 | public class WheelEventAggregator extends MouseAdapter { 9 | boolean queued = false; 10 | double queuedRotation = 0.0; 11 | Callback callback; 12 | 13 | public WheelEventAggregator(Callback callback) { 14 | this.callback = callback; 15 | } 16 | 17 | public static interface Callback { 18 | public void mouseWheelMoved(double rotation); 19 | } 20 | 21 | @Override 22 | public void mouseWheelMoved(MouseWheelEvent e) { 23 | double rotation = e.getPreciseWheelRotation(); 24 | if ((rotation >= 0) != (queuedRotation >= 0)) { 25 | queuedRotation = 0; 26 | } 27 | queuedRotation += rotation; 28 | 29 | if (!queued) { 30 | queued = true; 31 | SwingUtilities.invokeLater(() -> { 32 | double totalRotation = queuedRotation; 33 | queuedRotation = 0f; 34 | queued = false; 35 | callback.mouseWheelMoved(totalRotation); 36 | }); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/awt/layout/DrawerHolder.java: -------------------------------------------------------------------------------- 1 | package org.andork.awt.layout; 2 | 3 | import java.util.WeakHashMap; 4 | 5 | public class DrawerHolder { 6 | private DrawerLayoutDelegate delegate; 7 | private boolean animate; 8 | 9 | private final WeakHashMap holders = new WeakHashMap<>(); 10 | 11 | public DrawerHolder(DrawerLayoutDelegate delegate, boolean animate) { 12 | super(); 13 | this.delegate = delegate; 14 | this.animate = animate; 15 | } 16 | 17 | public void hold(Object holder) { 18 | holders.put(holder, null); 19 | delegate.setOpen(!holders.isEmpty(), animate); 20 | } 21 | 22 | public boolean isHeld() { 23 | return !holders.isEmpty(); 24 | } 25 | 26 | public boolean isHeldBy(Object holder) { 27 | return holders.containsKey(holder); 28 | } 29 | 30 | public void release(Object holder) { 31 | holders.remove(holder); 32 | delegate.setOpen(!holders.isEmpty(), animate); 33 | } 34 | 35 | public void releaseAll() { 36 | holders.clear(); 37 | delegate.close(animate); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/awt/layout/maximize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/awt/layout/maximize.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/awt/layout/pinned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/awt/layout/pinned.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/awt/layout/pinned2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/awt/layout/pinned2.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/awt/layout/restore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/awt/layout/restore.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/awt/layout/unpinned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/awt/layout/unpinned.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/CardPanel.java: -------------------------------------------------------------------------------- 1 | package org.andork.swing; 2 | 3 | import javax.swing.JPanel; 4 | 5 | import org.andork.awt.layout.BetterCardLayout; 6 | 7 | @SuppressWarnings("serial") 8 | public class CardPanel extends JPanel { 9 | public CardPanel() { 10 | setLayout(new BetterCardLayout()); 11 | } 12 | 13 | public void show(String key) { 14 | getCardLayout().show(this, key); 15 | } 16 | 17 | private BetterCardLayout getCardLayout() { 18 | return (BetterCardLayout) getLayout(); 19 | } 20 | 21 | public int getCurrentCardIndex() { 22 | return getCardLayout().getCurrentCardIndex(); 23 | } 24 | 25 | public Object getCurrentCardKey() { 26 | return getCardLayout().getCurrentCardKey(); 27 | } 28 | 29 | 30 | public void first() { 31 | getCardLayout().first(this); 32 | } 33 | 34 | public void last() { 35 | getCardLayout().last(this); 36 | } 37 | 38 | public void next() { 39 | getCardLayout().next(this); 40 | } 41 | 42 | public void previous() { 43 | getCardLayout().previous(this); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/CellRenderers.java: -------------------------------------------------------------------------------- 1 | package org.andork.swing; 2 | 3 | import java.awt.Component; 4 | import java.util.function.Function; 5 | 6 | import javax.swing.JList; 7 | import javax.swing.ListCellRenderer; 8 | 9 | public class CellRenderers { 10 | public static ListCellRenderer map(Function valueFn, 11 | ListCellRenderer renderer) { 12 | return new ListCellRenderer() { 13 | @Override 14 | public Component getListCellRendererComponent(JList list, E value, int index, 15 | boolean isSelected, boolean cellHasFocus) { 16 | return renderer.getListCellRendererComponent(list, valueFn.apply(value), index, isSelected, 17 | cellHasFocus); 18 | } 19 | }; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/DoNotShowAgainDialogs_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | doNotShowAgainCheckBox.text=Don't show this dialog again -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/WizardButtons_en.properties: -------------------------------------------------------------------------------- 1 | backButton.text=Back 2 | nextButton.text=Next 3 | okButton.text=OK 4 | cancelButton.text=Cancel -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/async/DrawerPinningTask.java: -------------------------------------------------------------------------------- 1 | package org.andork.swing.async; 2 | 3 | import java.awt.Component; 4 | 5 | import org.andork.awt.layout.DrawerHolder; 6 | 7 | public abstract class DrawerPinningTask extends SelfReportingTask { 8 | private DrawerHolder drawerHolder; 9 | 10 | public DrawerPinningTask(Component dialogParent, DrawerHolder drawerHolder) { 11 | super(dialogParent); 12 | this.drawerHolder = drawerHolder; 13 | } 14 | 15 | @Override 16 | protected final R work() throws Exception { 17 | try { 18 | drawerHolder.hold(this); 19 | return super.work(); 20 | } finally { 21 | drawerHolder.release(this); 22 | } 23 | 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/async/SetTimeout.java: -------------------------------------------------------------------------------- 1 | package org.andork.swing.async; 2 | 3 | import java.util.concurrent.CompletableFuture; 4 | import java.util.concurrent.Future; 5 | 6 | import javax.swing.Timer; 7 | 8 | public class SetTimeout { 9 | public static Future setTimeout(Runnable r, long timeout) { 10 | CompletableFuture future = new CompletableFuture<>(); 11 | Timer timer = new Timer((int) timeout, e -> { 12 | try { 13 | r.run(); 14 | future.complete(null); 15 | } catch (Throwable ex) { 16 | future.completeExceptionally(ex); 17 | } 18 | }); 19 | timer.setRepeats(false); 20 | timer.start(); 21 | return future; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/filechooser/DirectoryFileFilter.java: -------------------------------------------------------------------------------- 1 | package org.andork.swing.filechooser; 2 | 3 | import java.io.File; 4 | 5 | import javax.swing.JFileChooser; 6 | import javax.swing.filechooser.FileFilter; 7 | 8 | public class DirectoryFileFilter extends FileFilter { 9 | 10 | private DirectoryFileFilter() { 11 | } 12 | 13 | public static DirectoryFileFilter INSTANCE = new DirectoryFileFilter(); 14 | 15 | @Override 16 | public boolean accept(File f) { 17 | return f.isDirectory(); 18 | } 19 | 20 | @Override 21 | public String getDescription() { 22 | return "Directories"; 23 | } 24 | 25 | public static JFileChooser install(JFileChooser fileChooser) { 26 | fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 27 | fileChooser.setAcceptAllFileFilterUsed(false); 28 | fileChooser.setFileFilter(INSTANCE); 29 | return fileChooser; 30 | } 31 | 32 | public static File getSelectedDirectory(JFileChooser fileChooser) { 33 | File selected = fileChooser.getSelectedFile(); 34 | return selected != null ? selected : fileChooser.getCurrentDirectory(); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/list/FunctionListCellRenderer.java: -------------------------------------------------------------------------------- 1 | package org.andork.swing.list; 2 | 3 | import java.awt.Component; 4 | import java.util.function.Function; 5 | 6 | import javax.swing.JList; 7 | import javax.swing.ListCellRenderer; 8 | 9 | @SuppressWarnings("rawtypes") 10 | public class FunctionListCellRenderer implements ListCellRenderer { 11 | Function valueFn; 12 | ListCellRenderer wrapped; 13 | 14 | public FunctionListCellRenderer(Function valueFn, ListCellRenderer wrapped) { 15 | super(); 16 | this.valueFn = valueFn; 17 | this.wrapped = wrapped; 18 | } 19 | 20 | @SuppressWarnings("unchecked") 21 | @Override 22 | public Component getListCellRendererComponent(JList list, Object value, int index, 23 | boolean isSelected, boolean cellHasFocus) { 24 | return wrapped.getListCellRendererComponent(list, valueFn.apply(value), index, isSelected, cellHasFocus); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-0.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-1.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-10.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-11.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-12.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-13.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-14.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-15.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-16.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-17.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-18.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-19.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-2.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-20.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-21.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-22.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-23.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-24.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-25.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-26.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-27.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-28.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-29.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-3.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-4.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-5.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-6.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-7.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-8.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-9.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/spinner-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/spinner-off.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/table/FunctionTableCellRenderer.java: -------------------------------------------------------------------------------- 1 | package org.andork.swing.table; 2 | 3 | import java.awt.Component; 4 | import java.util.function.Function; 5 | 6 | import javax.swing.JTable; 7 | import javax.swing.table.TableCellRenderer; 8 | 9 | @SuppressWarnings("rawtypes") 10 | public class FunctionTableCellRenderer implements TableCellRenderer { 11 | Function valueFn; 12 | TableCellRenderer wrapped; 13 | 14 | public FunctionTableCellRenderer(Function valueFn, TableCellRenderer wrapped) { 15 | super(); 16 | this.valueFn = valueFn; 17 | this.wrapped = wrapped; 18 | } 19 | 20 | @Override 21 | public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 22 | boolean hasFocus, int row, int column) { 23 | return wrapped.getTableCellRendererComponent(table, valueFn.apply(value), isSelected, hasFocus, row, 24 | column); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/table/dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/table/dropdown.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/xicon-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/xicon-normal.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/xicon-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/xicon-pressed.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/xicon-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/xicon-rollover.png -------------------------------------------------------------------------------- /andork-ui/src/org/andork/swing/xicon.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/andork-ui/src/org/andork/swing/xicon.pdn -------------------------------------------------------------------------------- /breakout-main/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /build 3 | /dist 4 | .settings 5 | .breakout* 6 | breakout.log* 7 | /screenshots 8 | _.breakout 9 | /update/ 10 | /target/ 11 | defaultProject-survey.txt 12 | dependency-reduced-pom.xml 13 | -------------------------------------------------------------------------------- /breakout-main/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | breakout-main 4 | JavaCC Nature 5 | 6 | 7 | 8 | 9 | sf.eclipse.javacc.javaccbuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.jdt.core.javabuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.m2e.core.maven2Builder 20 | 21 | 22 | 23 | 24 | 25 | org.eclipse.m2e.core.maven2Nature 26 | org.eclipse.jdt.core.javanature 27 | sf.eclipse.javacc.javaccnature 28 | 29 | 30 | -------------------------------------------------------------------------------- /breakout-main/MANIFEST-update.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Permissions: all-permissions 3 | Class-Path: lib/andork-core.jar lib/andork-spatial.jar lib/commons-io-2.4.jar 4 | Main-Class: org.andork.breakout.update.UpdateCheckLauncher -------------------------------------------------------------------------------- /breakout-main/MANIFEST-win-i586.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Permissions: all-permissions 3 | Class-Path: lib/swingx-all-1.6.4.jar lib/commons-io-2.4.jar lib/snakeyaml-1.11.jar breakout-base.jar lib/andork-core.jar lib/andork-ui.jar lib/andork-jogl-gl2es2-utils.jar lib/andork-jogl-gl2es2-swing.jar lib/andork-math.jar lib/andork-math3d.jar lib/andork-plot.jar lib/andork-spatial.jar lib/gluegen-rt.jar lib/jogl.jar lib/jogl-gldesktop.jar lib/jogl-awt.jar lib/nativewindow.jar lib/nativewindow-awt.jar lib/jogl-os-win.jar lib/nativewindow-os-win.jar lib/gluegen-rt-natives-windows-i586.jar lib/jogl-natives-windows-i586.jar lib/nativewindow-natives-windows-i586.jar lib/newt.jar lib/newt-awt.jar lib/newt-ogl.jar lib/newt-event.jar lib/newt-driver-win.jar lib/newt-natives-windows-i586.jar 4 | Main-Class: org.breakout.BreakoutMainLauncher -------------------------------------------------------------------------------- /breakout-main/logging.debug.properties: -------------------------------------------------------------------------------- 1 | handlers=java.util.logging.ConsoleHandler 2 | .level=FINER 3 | glyphs.level=FINER 4 | 5 | java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter 6 | 7 | java.util.logging.SimpleFormatter.format=%3$s %4$s: %5$s %6$s%n 8 | -------------------------------------------------------------------------------- /breakout-main/logo.3dm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/logo.3dm -------------------------------------------------------------------------------- /breakout-main/saved-table.bkv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/saved-table.bkv -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/CheckForUpdateAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Check for Update... 23 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/EditSettingsFileAction.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | import java.awt.event.ActionEvent; 4 | 5 | import javax.swing.AbstractAction; 6 | 7 | import org.andork.awt.I18n.Localizer; 8 | import org.andork.swing.OnEDT; 9 | 10 | public class EditSettingsFileAction extends AbstractAction { 11 | private static final long serialVersionUID = 4944289444659593701L; 12 | 13 | BreakoutMainView mainView; 14 | 15 | public EditSettingsFileAction(BreakoutMainView mainView) { 16 | this.mainView = mainView; 17 | OnEDT.onEDT(() -> { 18 | Localizer localizer = mainView.getI18n().forClass(EditSettingsFileAction.this.getClass()); 19 | localizer.setName(EditSettingsFileAction.this, "name"); 20 | }); 21 | } 22 | 23 | @Override 24 | public void actionPerformed(ActionEvent e) { 25 | mainView.openEditor(BreakoutMain.getRootSettingsFile()); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/EditSettingsFileAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Edit Settings File -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/EditSwapFileAction.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | import java.awt.event.ActionEvent; 4 | import java.nio.file.Path; 5 | 6 | import javax.swing.AbstractAction; 7 | 8 | import org.andork.awt.I18n.Localizer; 9 | import org.andork.swing.OnEDT; 10 | 11 | public class EditSwapFileAction extends AbstractAction { 12 | private static final long serialVersionUID = 4944289444659593701L; 13 | 14 | BreakoutMainView mainView; 15 | 16 | public EditSwapFileAction(BreakoutMainView mainView) { 17 | this.mainView = mainView; 18 | OnEDT.onEDT(() -> { 19 | Localizer localizer = mainView.getI18n().forClass(EditSwapFileAction.this.getClass()); 20 | localizer.setName(EditSwapFileAction.this, "name"); 21 | }); 22 | } 23 | 24 | @Override 25 | public void actionPerformed(ActionEvent e) { 26 | Path swapFile = mainView.getCurrentSwapFile(); 27 | if (swapFile != null) { 28 | mainView.openEditor(swapFile); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/EditSwapFileAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Edit Swap File -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/ExportImageAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Export Image... -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/FitViewToEverythingAction.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | import java.awt.event.ActionEvent; 4 | 5 | import javax.swing.AbstractAction; 6 | import javax.swing.Action; 7 | 8 | import org.andork.awt.I18n.Localizer; 9 | import org.andork.swing.OnEDT; 10 | 11 | @SuppressWarnings("serial") 12 | public class FitViewToEverythingAction extends AbstractAction implements Action { 13 | BreakoutMainView mainView; 14 | 15 | public FitViewToEverythingAction(BreakoutMainView mainView) { 16 | super(); 17 | this.mainView = mainView; 18 | 19 | new OnEDT() { 20 | @Override 21 | public void run() throws Throwable { 22 | Localizer localizer = mainView.getI18n().forClass(FitViewToEverythingAction.this.getClass()); 23 | localizer.setName(FitViewToEverythingAction.this, "name"); 24 | } 25 | }; 26 | } 27 | 28 | @Override 29 | public void actionPerformed(ActionEvent e) { 30 | mainView.fitViewToEverything(); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/FitViewToEverythingAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Fit View to Everything -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/FitViewToSelectedAction.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | import java.awt.event.ActionEvent; 4 | 5 | import javax.swing.AbstractAction; 6 | import javax.swing.Action; 7 | 8 | import org.andork.awt.I18n.Localizer; 9 | import org.andork.swing.OnEDT; 10 | 11 | @SuppressWarnings("serial") 12 | public class FitViewToSelectedAction extends AbstractAction implements Action { 13 | BreakoutMainView mainView; 14 | 15 | public FitViewToSelectedAction(BreakoutMainView mainView) { 16 | super(); 17 | this.mainView = mainView; 18 | 19 | new OnEDT() { 20 | @Override 21 | public void run() throws Throwable { 22 | Localizer localizer = mainView.getI18n().forClass(FitViewToSelectedAction.this.getClass()); 23 | localizer.setName(FitViewToSelectedAction.this, "name"); 24 | } 25 | }; 26 | } 27 | 28 | @Override 29 | public void actionPerformed(ActionEvent e) { 30 | mainView.fitViewToSelected(); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/FitViewToSelectedAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Fit View to Selected -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/ImportCompassAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Import Compass data... -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/ImportLeadsAction.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | import java.awt.event.ActionEvent; 4 | 5 | import javax.swing.AbstractAction; 6 | 7 | import org.andork.awt.I18n.Localizer; 8 | import org.andork.swing.OnEDT; 9 | 10 | public class ImportLeadsAction extends AbstractAction { 11 | private static final long serialVersionUID = 8950696926766549483L; 12 | 13 | BreakoutMainView mainView; 14 | 15 | public ImportLeadsAction(final BreakoutMainView mainView) { 16 | super(); 17 | this.mainView = mainView; 18 | 19 | new OnEDT() { 20 | @Override 21 | public void run() throws Throwable { 22 | Localizer localizer = mainView.getI18n().forClass(ImportLeadsAction.this.getClass()); 23 | localizer.setName(ImportLeadsAction.this, "name"); 24 | } 25 | }; 26 | } 27 | 28 | @Override 29 | public void actionPerformed(ActionEvent e) { 30 | mainView.rebuildTaskService.submit(new ImportLeadsTask(mainView)); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/ImportLeadsAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Import Leads... -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/ImportProjectArchiveAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Import Project Archive... -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/ImportWallsAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Import Walls data... -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/LinkSurveyNotesAction.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | import java.awt.event.ActionEvent; 4 | 5 | import javax.swing.AbstractAction; 6 | 7 | import org.andork.awt.I18n.Localizer; 8 | import org.andork.swing.OnEDT; 9 | 10 | public class LinkSurveyNotesAction extends AbstractAction { 11 | private static final long serialVersionUID = 8950696926766549483L; 12 | 13 | BreakoutMainView mainView; 14 | 15 | public LinkSurveyNotesAction(final BreakoutMainView mainView) { 16 | super(); 17 | this.mainView = mainView; 18 | 19 | new OnEDT() { 20 | @Override 21 | public void run() throws Throwable { 22 | Localizer localizer = mainView.getI18n().forClass(LinkSurveyNotesAction.this.getClass()); 23 | localizer.setName(LinkSurveyNotesAction.this, "name"); 24 | } 25 | }; 26 | } 27 | 28 | @Override 29 | public void actionPerformed(ActionEvent e) { 30 | mainView.rebuildTaskService.submit(new LinkSurveyNotesTask(mainView)); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/LinkSurveyNotesAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Link Survey Notes... -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/NewProjectAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=New... 23 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/OpenLogDirectoryAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Open Log Directory -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/OpenProjectAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Open... -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/OrbitToPlanAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Orbit To Plan -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/SaveProjectAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Save 23 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/SearchMode.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | public enum SearchMode { 4 | AUTO, SURVEY_DESIGNATION, STATION_REGEX, SURVEY_TEAM, TRIP_DESCRIPTION; 5 | } 6 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/SearchModeItems.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | import javax.swing.AbstractButton; 4 | import javax.swing.JMenuItem; 5 | 6 | import org.andork.awt.I18n; 7 | import org.andork.awt.I18n.Localizer; 8 | 9 | public class SearchModeItems extends JMenuItem { 10 | public static void setText(AbstractButton button, SearchMode mode, I18n i18n) { 11 | Localizer localizer = i18n.forClass(SearchModeItems.class); 12 | localizer.setText(button, mode.name()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/SearchModeItems_en.properties: -------------------------------------------------------------------------------- 1 | AUTO=Auto 2 | SURVEY_DESIGNATION=Survey Designations 3 | STATION_REGEX=Station Name Regex 4 | SURVEY_TEAM=Surveyor Names 5 | TRIP_DESCRIPTION=Trip Descriptions 6 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/SetCaveOnRowsAction_en.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Breakout Cave Survey Visualizer 3 | # 4 | # Copyright (C) 2014 James Edwards 5 | # 6 | # jedwards8 at fastmail dot fm 7 | # 8 | # This program is free software; you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation; either version 2 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License along 19 | # with this program; if not, write to the Free Software Foundation, Inc., 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | ############################################################################### 22 | name=Set Cave... 23 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/ShutdownCanceledException.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | public class ShutdownCanceledException extends Exception { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/SurveyTableListener.java: -------------------------------------------------------------------------------- 1 | package org.breakout; 2 | 3 | public interface SurveyTableListener { 4 | public void surveyNotesClicked(String link, int viewRow); 5 | } 6 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/Views.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/Views.pdn -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/dropdown.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/east-facing-profile-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/east-facing-profile-normal.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/east-facing-profile-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/east-facing-profile-rollover.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/east-facing-profile-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/east-facing-profile-selected.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/fit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/fit.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/flip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/flip.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/forward-depth-axis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/forward-depth-axis.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/importui/ImportResultsDialog_en.properties: -------------------------------------------------------------------------------- 1 | title.compass=Compass Import 2 | title.walls=Walls Import 3 | errorsTab.title=Errors 4 | dataTab.title=Data 5 | cancelButton.text=Cancel 6 | importAsNewProjectButton.text=Import as New Project 7 | addToCurrentProjectButton.text=Add to Current Project 8 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/logging.properties: -------------------------------------------------------------------------------- 1 | handlers=java.util.logging.FileHandler 2 | .level=INFO 3 | 4 | java.util.logging.FileHandler.pattern=breakout.log 5 | java.util.logging.FileHandler.limit=5242880 6 | java.util.logging.FileHandler.count=1 7 | java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter 8 | java.util.logging.FileHandler.append=true 9 | java.util.logging.FileHandler.encoding=utf8 10 | 11 | java.util.logging.SimpleFormatter.format=%1$tF %1$tT %1$-4tZ %4$-7s %3$-30s | %5$s %6$s%n 12 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/CustomModes.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model; 2 | 3 | public class CustomModes { 4 | public static final String BILL_STONE = "Bill Stone"; 5 | 6 | public static final String[] values = { BILL_STONE }; 7 | } 8 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/HighlightMode.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model; 2 | 3 | public enum HighlightMode { 4 | /** 5 | * Any stations within a certain distance from the hovered station will be highlighted 6 | */ 7 | NEARBY, 8 | /** 9 | * Only stations in the same trip as the hovered stations will be highlighted 10 | */ 11 | SAME_TRIP, 12 | /** 13 | * Only stations with the same survey designation as the hovered stations will be highlighted 14 | */ 15 | SAME_DESIGNATION, 16 | /** 17 | * Shots along the best route (based upon LRUDs) to selected shots will be highlighted 18 | */ 19 | DIRECTIONS, 20 | /** 21 | * Shots along the shortest route to selected shots will be highlighted 22 | */ 23 | DIRECTIONS_SHORTEST_ROUTE, 24 | } 25 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/TextRenderers.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model; 2 | 3 | import java.awt.Font; 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | 7 | import com.jogamp.opengl.util.awt.TextRenderer; 8 | 9 | public class TextRenderers { 10 | private static Map renderers = new HashMap(); 11 | 12 | public static synchronized TextRenderer textRenderer(Font font) { 13 | TextRenderer renderer = renderers.get(font); 14 | if (renderer == null) { 15 | renderer = new TextRenderer(font, true, true, null, false); 16 | renderers.put(font, renderer); 17 | } 18 | renderer.init(); 19 | renderer.setUseVertexArrays(true); 20 | return renderer; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/Unit2StringBimapper.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model; 2 | 3 | import org.andork.func.Bimapper; 4 | import org.andork.unit.Angle; 5 | import org.andork.unit.Length; 6 | import org.andork.unit.Unit; 7 | import org.andork.unit.UnitType; 8 | 9 | public class Unit2StringBimapper> implements Bimapper, String> { 10 | private Unit2StringBimapper(UnitType type) { 11 | this.type = type; 12 | } 13 | 14 | public static final Unit2StringBimapper length = new Unit2StringBimapper<>(Length.type); 15 | public static final Unit2StringBimapper angle = new Unit2StringBimapper<>(Angle.type); 16 | 17 | private final UnitType type; 18 | 19 | @Override 20 | public String map(Unit in) { 21 | return in.id; 22 | } 23 | 24 | @Override 25 | public Unit unmap(String out) { 26 | return type.unitsById().get(out); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/calc/CalcCave.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.calc; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.andork.collect.HashSetMultiMap; 7 | import org.andork.collect.MultiMap; 8 | 9 | public class CalcCave { 10 | public String name; 11 | public final List trips = new ArrayList<>(); 12 | public final MultiMap stationsBySurveyDesignation = new HashSetMultiMap<>(); 13 | } 14 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/calc/CalcProject.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.calc; 2 | 3 | import java.util.HashMap; 4 | import java.util.HashSet; 5 | import java.util.LinkedHashMap; 6 | import java.util.Map; 7 | import java.util.Set; 8 | 9 | import org.breakout.model.ShotKey; 10 | import org.breakout.model.StationKey; 11 | import org.osgeo.proj4j.CoordinateReferenceSystem; 12 | 13 | public class CalcProject { 14 | public final Map caves = new HashMap<>(); 15 | public final Map shots = new LinkedHashMap<>(); 16 | public final Map stations = new LinkedHashMap<>(); 17 | public CoordinateReferenceSystem coordinateReferenceSystem; 18 | 19 | public Set getPlottedShotKeys(Set result) { 20 | shots.forEach((key, shot) -> { 21 | if (!shot.isExcludeFromPlotting()) result.add(key); 22 | }); 23 | return result; 24 | } 25 | 26 | public Set getPlottedShotKeys() { 27 | return getPlottedShotKeys(new HashSet<>()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/calc/CalcTrip.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.calc; 2 | 3 | import java.util.LinkedHashMap; 4 | 5 | import org.breakout.model.ShotKey; 6 | 7 | import com.github.krukow.clj_ds.PersistentVector; 8 | 9 | public class CalcTrip { 10 | public CalcCave cave; 11 | public String name; 12 | public final LinkedHashMap shots = new LinkedHashMap<>(); 13 | public PersistentVector attachedFiles; 14 | } 15 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/compass/CompassFragment.fp: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | in vec3 v_position; 4 | in vec3 v_normal; 5 | uniform float u_ambient; 6 | 7 | out vec4 color; 8 | 9 | void main() { 10 | float diffuse = dot(v_normal, vec3(0.0, 0.0, 1.0)); 11 | float light = u_ambient + diffuse * (1.0 - u_ambient); 12 | if (v_position.y < 0) light *= 0.5; 13 | 14 | vec3 base_color = mix(vec3(0.9, 0.9, 0.9), vec3(1, 0, 0), clamp(-v_position.z * 2, 0, 1)); 15 | 16 | color = vec4(base_color * light, 1.0); 17 | } 18 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/compass/CompassVertex.vp: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | uniform mat4 m; 4 | uniform mat4 v; 5 | uniform mat4 p; 6 | uniform mat3 n; 7 | in vec3 a_position; 8 | in vec3 a_normal; 9 | out vec3 v_position; 10 | out vec3 v_normal; 11 | 12 | void main() { 13 | gl_Position = p * v * m * vec4(a_position, 1.0); 14 | v_position = a_position; 15 | v_normal = (v * vec4(normalize(n * a_normal), 0.0)).xyz; 16 | } 17 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/parsed/MetacaveAzimuthParser.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.parsed; 2 | 3 | import org.andork.unit.Angle; 4 | import org.andork.unit.Angle.AngleUnit; 5 | import org.breakout.model.parsed.ParseMessage.Severity; 6 | import org.andork.unit.Unit; 7 | import org.andork.unit.UnitizedDouble; 8 | 9 | public class MetacaveAzimuthParser { 10 | 11 | public static ParsedField> parse(String text, Unit defaultUnit) { 12 | ParsedField> result = MetacaveAngleParser.parse(text, defaultUnit); 13 | if (result != null && result.value != null) { 14 | AngleUnit unit = (AngleUnit) result.value.unit; 15 | if (unit == Angle.percentGrade) { 16 | result.message = new ParseMessage(Severity.ERROR, "invalid azimuth unit: " + unit); 17 | } 18 | if (result.value.isNegative() || result.value.doubleValue(unit) >= unit.range.doubleValue(unit)) { 19 | result.message = new ParseMessage(Severity.ERROR, "azimuth out of range: " + result); 20 | } 21 | } 22 | return result; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/parsed/MetacaveInclinationParser.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.parsed; 2 | 3 | import org.andork.unit.Angle; 4 | import org.andork.unit.Angle.AngleUnit; 5 | import org.breakout.model.parsed.ParseMessage.Severity; 6 | import org.andork.unit.Unit; 7 | import org.andork.unit.UnitizedDouble; 8 | 9 | public class MetacaveInclinationParser { 10 | public static ParsedField> parse(String text, Unit defaultUnit) { 11 | ParsedField> result = MetacaveInclinationParser.parse(text, defaultUnit); 12 | if (result != null && result.value != null) { 13 | AngleUnit unit = (AngleUnit) result.value.unit; 14 | double limit = unit.range.get(unit) / 4; 15 | if (result.value.get(unit) < -limit || result.value.get(unit) > limit) { 16 | result.message = new ParseMessage(Severity.ERROR, "inclination out of range: " + result); 17 | } 18 | } 19 | return result; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/parsed/ParsedCave.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.parsed; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class ParsedCave { 7 | public final List messages = new ArrayList<>(); 8 | public ParsedField name; 9 | public final List trips = new ArrayList<>(); 10 | } 11 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/parsed/ParsedCrossSection.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.parsed; 2 | 3 | import java.util.Arrays; 4 | 5 | import org.andork.unit.Angle; 6 | import org.andork.unit.Length; 7 | import org.andork.unit.UnitizedDouble; 8 | import org.breakout.model.CrossSectionType; 9 | 10 | public class ParsedCrossSection { 11 | public CrossSectionType type = CrossSectionType.LRUD; 12 | public ParsedField> facingAzimuth; 13 | public ParsedField>[] measurements; 14 | 15 | @Override 16 | public String toString() { 17 | StringBuilder builder = new StringBuilder(); 18 | builder.append("ParsedCrossSection [type=").append(type).append(", facingAzimuth=").append(facingAzimuth) 19 | .append(", measurements=").append(Arrays.toString(measurements)).append("]"); 20 | return builder.toString(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/parsed/ParsedFixedStation.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.parsed; 2 | 3 | import org.breakout.model.StationKey; 4 | 5 | public class ParsedFixedStation { 6 | public ParsedField cave; 7 | public ParsedField name; 8 | 9 | public Object location; 10 | 11 | public StationKey key() { 12 | return new StationKey(cave.value, name.value); 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | StringBuilder builder = new StringBuilder(); 18 | builder.append("ParsedFixedStation [cave=").append(cave).append(", name=").append(name).append(", location=") 19 | .append(location).append("]"); 20 | return builder.toString(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/parsed/ParsedLatLonLocation.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.parsed; 2 | 3 | import org.andork.unit.Angle; 4 | import org.andork.unit.Length; 5 | import org.andork.unit.UnitizedDouble; 6 | 7 | public class ParsedLatLonLocation { 8 | public ParsedField> latitude; 9 | public ParsedField> longitude; 10 | public ParsedField> elevation; 11 | 12 | @Override 13 | public String toString() { 14 | StringBuilder builder = new StringBuilder(); 15 | builder.append("ParsedNEVLocation [latitude=").append(latitude).append(", longitude=").append(longitude) 16 | .append(", elevation=").append(elevation).append("]"); 17 | return builder.toString(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/parsed/ParsedNEVLocation.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.parsed; 2 | 3 | import org.andork.unit.Length; 4 | import org.andork.unit.UnitizedDouble; 5 | 6 | public class ParsedNEVLocation { 7 | public ParsedField> northing; 8 | public ParsedField> easting; 9 | public ParsedField> elevation; 10 | 11 | @Override 12 | public String toString() { 13 | StringBuilder builder = new StringBuilder(); 14 | builder.append("ParsedNEVLocation [northing=").append(northing).append(", easting=").append(easting) 15 | .append(", elevation=").append(elevation).append("]"); 16 | return builder.toString(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/parsed/ParsedProject.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.parsed; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | import org.breakout.model.ShotKey; 9 | import org.breakout.model.raw.SurveyLead; 10 | 11 | public class ParsedProject { 12 | public final Map caves = new HashMap<>(); 13 | public final Map shots = new HashMap<>(); 14 | public final List leads = new ArrayList<>(); 15 | } 16 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/parsed/ParsedSplayShot.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.parsed; 2 | 3 | import java.util.List; 4 | 5 | public class ParsedSplayShot { 6 | public List measurements; 7 | } 8 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/satellite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/model/satellite.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/shader/ClipLocations.java: -------------------------------------------------------------------------------- 1 | package org.breakout.model.shader; 2 | 3 | import org.andork.jogl.shader.Uniform1fvLocation; 4 | import org.andork.jogl.shader.Uniform3fvLocation; 5 | import org.andork.math3d.Clip3f; 6 | 7 | import com.jogamp.opengl.GL2ES2; 8 | 9 | public class ClipLocations { 10 | public final Uniform3fvLocation clipAxis = new Uniform3fvLocation("u_clipAxis"); 11 | public final Uniform1fvLocation clipNear = new Uniform1fvLocation("u_clipNear"); 12 | public final Uniform1fvLocation clipFar = new Uniform1fvLocation("u_clipFar"); 13 | 14 | public void put(GL2ES2 gl, Clip3f clip) { 15 | clipAxis.put(gl, clip.axis()); 16 | clipNear.put(gl, clip.near()); 17 | clipFar.put(gl, clip.far()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/shader/centerline.fp: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | // lighting 4 | uniform float u_maxCenterlineDistance; 5 | 6 | // distance coloration 7 | in float v_dist; 8 | 9 | // time travel 10 | uniform float u_maxDate; 11 | in float v_date; 12 | 13 | // color 14 | uniform vec4 u_color; 15 | out vec4 color; 16 | 17 | // clipping 18 | in float v_clipPosition; 19 | uniform float u_clipNear; 20 | uniform float u_clipFar; 21 | 22 | void main() { 23 | if (v_date > u_maxDate) discard; 24 | if (v_clipPosition < u_clipNear || v_clipPosition > u_clipFar) discard; 25 | if (v_dist > u_maxCenterlineDistance) discard; 26 | color = u_color; 27 | } 28 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/shader/centerline.vp: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | uniform mat4 m; 4 | uniform mat4 v; 5 | uniform mat4 p; 6 | in vec3 a_pos; 7 | 8 | // time travel 9 | in float a_date; 10 | out float v_date; 11 | 12 | // distance coloration 13 | out float v_dist; 14 | 15 | uniform vec3 u_clipAxis; 16 | out float v_clipPosition; 17 | 18 | void main() { 19 | v_clipPosition = dot(a_pos, u_clipAxis); 20 | gl_Position = p * v * m * vec4(a_pos, 1.0); 21 | v_dist = -(v * m * vec4(a_pos, 1.0)).z; 22 | v_date = a_date; 23 | } 24 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/shader/terrain.fp: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | // lighting 4 | in float v_lightAmount; 5 | 6 | // satellite imagery 7 | in vec2 v_texcoord; 8 | uniform sampler2D u_satelliteImagery; 9 | 10 | // clip 11 | uniform vec2 u_clipNearFar; 12 | in float v_clipPosition; 13 | 14 | uniform float u_alpha; 15 | 16 | out vec4 color_out; 17 | 18 | void main() { 19 | if (v_clipPosition < u_clipNearFar.x || v_clipPosition > u_clipNearFar.y) { 20 | discard; 21 | } 22 | vec4 color = texture(u_satelliteImagery, v_texcoord); 23 | color_out = vec4(color.xyz * v_lightAmount, color.w * u_alpha); 24 | } 25 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/shader/terrain.vp: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | uniform mat4 m; 4 | uniform mat4 v; 5 | uniform mat4 p; 6 | in vec3 a_position; 7 | 8 | // lighting 9 | in vec3 a_normal; 10 | uniform mat3 n; 11 | uniform vec3 u_lightDirection; 12 | uniform float u_ambient; 13 | out float v_lightAmount; 14 | 15 | // satellite imagery 16 | in vec2 a_texcoord; 17 | out vec2 v_texcoord; 18 | 19 | // clip 20 | uniform vec3 u_clipAxis; 21 | out float v_clipPosition; 22 | 23 | void main() { 24 | gl_Position = p * v * m * vec4(a_position, 1.0); 25 | 26 | v_lightAmount = dot(normalize(n * a_normal), normalize(u_lightDirection)); 27 | v_lightAmount = u_ambient + v_lightAmount * (1.0 - u_ambient); 28 | 29 | v_texcoord = a_texcoord; 30 | 31 | v_clipPosition = dot(u_clipAxis, a_position); 32 | } 33 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/model/terrain-rgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/model/terrain-rgb.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/nextDay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/nextDay.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/nextMonth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/nextMonth.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/nextYear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/nextYear.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/north-facing-profile-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/north-facing-profile-normal.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/north-facing-profile-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/north-facing-profile-rollover.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/north-facing-profile-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/north-facing-profile-selected.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/perspective-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/perspective-normal.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/perspective-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/perspective-rollover.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/perspective-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/perspective-selected.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/plan-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/plan-normal.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/plan-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/plan-rollover.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/plan-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/plan-selected.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/play.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/prevDay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/prevDay.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/prevMonth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/prevMonth.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/prevYear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/prevYear.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/proj4/IdentityCoordinateTransform.java: -------------------------------------------------------------------------------- 1 | package org.breakout.proj4; 2 | 3 | import org.osgeo.proj4j.CoordinateReferenceSystem; 4 | import org.osgeo.proj4j.CoordinateTransform; 5 | import org.osgeo.proj4j.Proj4jException; 6 | import org.osgeo.proj4j.ProjCoordinate; 7 | 8 | public class IdentityCoordinateTransform implements CoordinateTransform { 9 | private IdentityCoordinateTransform() { 10 | } 11 | 12 | public static IdentityCoordinateTransform INSTANCE = new IdentityCoordinateTransform(); 13 | 14 | @Override 15 | public CoordinateReferenceSystem getSourceCRS() { 16 | throw new UnsupportedOperationException(); 17 | } 18 | 19 | @Override 20 | public CoordinateReferenceSystem getTargetCRS() { 21 | throw new UnsupportedOperationException(); 22 | } 23 | 24 | @Override 25 | public ProjCoordinate transform(ProjCoordinate src, ProjCoordinate tgt) throws Proj4jException { 26 | tgt.setValue(src); 27 | return tgt; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/proj4/WebMercatorEllipsoid.java: -------------------------------------------------------------------------------- 1 | package org.breakout.proj4; 2 | 3 | import org.osgeo.proj4j.datum.Ellipsoid; 4 | 5 | public class WebMercatorEllipsoid extends Ellipsoid { 6 | public final static Ellipsoid WEB_MERCATOR = new Ellipsoid("WEB_MERCATOR", 6378137.0, 0.0, 7 | 0.0, "WebMercator"); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/refresh.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/release/BreakoutReleaseApi.java: -------------------------------------------------------------------------------- 1 | package org.breakout.release; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStreamReader; 5 | import java.io.UnsupportedEncodingException; 6 | import java.net.MalformedURLException; 7 | import java.net.URL; 8 | 9 | import com.google.gson.JsonIOException; 10 | import com.google.gson.JsonSyntaxException; 11 | 12 | public class BreakoutReleaseApi { 13 | public static BreakoutRelease getLatest() 14 | throws JsonSyntaxException, 15 | JsonIOException, 16 | UnsupportedEncodingException, 17 | MalformedURLException, 18 | IOException { 19 | return BreakoutReleaseGson.instance 20 | .fromJson( 21 | new InputStreamReader( 22 | new URL("https://breakoutcavesurvey.com/api/release/latest").openStream(), 23 | "UTF-8"), 24 | BreakoutRelease.class); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/release/BreakoutReleaseGson.java: -------------------------------------------------------------------------------- 1 | package org.breakout.release; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | 6 | public class BreakoutReleaseGson { 7 | public static final Gson instance; 8 | 9 | static { 10 | instance = 11 | new GsonBuilder() 12 | .registerTypeAdapter(BreakoutRelease.class, new BreakoutReleaseTypeAdapter()) 13 | .registerTypeAdapter(BreakoutReleaseAsset.class, new BreakoutReleaseAssetTypeAdapter()) 14 | .create(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/south-facing-profile-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/south-facing-profile-normal.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/south-facing-profile-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/south-facing-profile-rollover.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/south-facing-profile-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/south-facing-profile-selected.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/splash.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/tilted-depth-axis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/tilted-depth-axis.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/util/StationNames.java: -------------------------------------------------------------------------------- 1 | package org.breakout.util; 2 | 3 | public class StationNames { 4 | private StationNames() { 5 | 6 | } 7 | 8 | /** 9 | * @param stationName 10 | * the name of a station 11 | * @return the best guess at the survey designation for the station 12 | */ 13 | public static final String getSurveyDesignation(String stationName) { 14 | int i = stationName.length() - 1; 15 | while (i >= 0 && 16 | !Character.isDigit(stationName.charAt(i)) && 17 | !Character.isLetter(stationName.charAt(i))) { 18 | i--; 19 | } 20 | while (i >= 0 && Character.isLetter(stationName.charAt(i))) { 21 | i--; 22 | } 23 | while (i >= 0 && Character.isDigit(stationName.charAt(i))) { 24 | i--; 25 | } 26 | return i < 0 ? stationName : stationName.substring(0, i + 1); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/vertical-depth-axis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/vertical-depth-axis.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/views-normal.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/views-normal.pdn -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/views-rollover.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/views-rollover.pdn -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/wand-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/wand-normal.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/wand-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/wand-rollover.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/wand-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/wand-selected.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/west-facing-profile-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/west-facing-profile-normal.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/west-facing-profile-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/west-facing-profile-rollover.png -------------------------------------------------------------------------------- /breakout-main/src/main/java/org/breakout/west-facing-profile-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout-main/src/main/java/org/breakout/west-facing-profile-selected.png -------------------------------------------------------------------------------- /breakout-main/src/main/resources/demo/settings.yaml: -------------------------------------------------------------------------------- 1 | currentProjectFile: demo.bop 2 | recentProjectFiles: 3 | - demo.bop 4 | desiredNumSamples: 4 5 | mouseSensitivity: 40 6 | mouseWheelSensitivity: 797 7 | -------------------------------------------------------------------------------- /breakout-main/src/main/resources/version.properties: -------------------------------------------------------------------------------- 1 | version=${breakout.version} 2 | build.date=${build.date} 3 | -------------------------------------------------------------------------------- /breakout-main/src/test/java/org/andork/tilebelt/SummarizeTripStationsTest.java: -------------------------------------------------------------------------------- 1 | package org.andork.tilebelt; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | import org.breakout.SummarizeTripStations; 7 | import org.junit.Assert; 8 | import org.junit.Test; 9 | 10 | public class SummarizeTripStationsTest { 11 | @Test 12 | public void test001() { 13 | assertSummaryEquals("CY5-9,11,13-15 CY5!-8!", "CY5 CY6 CY7 CY8 CY9 CY11 CY13 CY14 CY15 CY5! CY6! CY7! CY8!"); 14 | } 15 | 16 | private static void assertSummaryEquals(String expected, String stationsStr) { 17 | List stations = Arrays.asList(stationsStr.split("\\s+")); 18 | String summary = SummarizeTripStations.summarizeTripStations(stations); 19 | Assert.assertEquals(expected, summary); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /breakout.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout.icns -------------------------------------------------------------------------------- /breakout.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/breakout.ico -------------------------------------------------------------------------------- /breakout/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /breakout/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | .settings 3 | .breakout* 4 | dependency-reduced-pom.xml 5 | breakout.log* 6 | -------------------------------------------------------------------------------- /breakout/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | breakout 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /build-all-platforms.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mvn clean install -Dbreakout.version="${BREAKOUT_VERSION}" \ 4 | -P osx,windows,windows-i586,windows-amd64,linux,linux-i586,linux-amd64 5 | 6 | cp breakout/target/breakout-0.0.0-SNAPSHOT.jar breakout/target/breakout-${BREAKOUT_VERSION}-all-platforms.jar -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mvn clean install -Dbreakout.version="${BREAKOUT_VERSION}" 4 | -------------------------------------------------------------------------------- /datescraper/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /datescraper/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | datescraper 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /datescraper/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled 11 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 12 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 13 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore 14 | org.eclipse.jdt.core.compiler.release=disabled 15 | org.eclipse.jdt.core.compiler.source=1.8 16 | -------------------------------------------------------------------------------- /datescraper/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /datescraper/src/main/java/org/andork/datescraper/DateField.java: -------------------------------------------------------------------------------- 1 | package org.andork.datescraper; 2 | 3 | public enum DateField { 4 | FULL_YEAR, TWO_DIGIT_YEAR, MONTH, DAY; 5 | } -------------------------------------------------------------------------------- /datescraper/src/main/java/org/andork/datescraper/DateMatcher.java: -------------------------------------------------------------------------------- 1 | package org.andork.datescraper; 2 | 3 | import java.util.Date; 4 | 5 | import org.andork.scrape.ScrapeMatcher; 6 | 7 | public interface DateMatcher extends ScrapeMatcher { 8 | public Date lowerBound(); 9 | 10 | public DateMatcher lowerBound(Date lowerBound); 11 | 12 | public Date upperBound(); 13 | 14 | public DateMatcher upperBound(Date upperBound); 15 | } 16 | -------------------------------------------------------------------------------- /datescraper/src/main/java/org/andork/datescraper/DatePattern.java: -------------------------------------------------------------------------------- 1 | package org.andork.datescraper; 2 | 3 | import java.util.Date; 4 | 5 | import org.andork.scrape.ScrapePattern; 6 | 7 | public interface DatePattern extends ScrapePattern { 8 | @Override 9 | DateMatcher matcher(CharSequence input); 10 | } 11 | -------------------------------------------------------------------------------- /datescraper/src/main/java/org/andork/datescraper/DatePatterns.java: -------------------------------------------------------------------------------- 1 | package org.andork.datescraper; 2 | 3 | import static org.andork.datescraper.DateField.DAY; 4 | import static org.andork.datescraper.DateField.FULL_YEAR; 5 | import static org.andork.datescraper.DateField.MONTH; 6 | import static org.andork.datescraper.DateField.TWO_DIGIT_YEAR; 7 | 8 | public class DatePatterns { 9 | private DatePatterns() { 10 | 11 | } 12 | 13 | public static final DatePattern en_US = 14 | new MultiDatePattern( 15 | new ISO8601DatePattern(), 16 | new GeneralDatePattern().order(MONTH, DAY, FULL_YEAR), 17 | new GeneralDatePattern().order(MONTH, DAY, TWO_DIGIT_YEAR), 18 | new GeneralDatePattern().order(FULL_YEAR, MONTH, DAY), 19 | new GeneralDatePattern().order(MONTH, FULL_YEAR), 20 | new GeneralDatePattern().order(FULL_YEAR, MONTH), 21 | new GeneralDatePattern().order(DAY, MONTH, FULL_YEAR), 22 | new GeneralDatePattern().order(TWO_DIGIT_YEAR, MONTH, DAY)); 23 | } 24 | -------------------------------------------------------------------------------- /datescraper/src/main/java/org/andork/datescraper/MultiDatePattern.java: -------------------------------------------------------------------------------- 1 | package org.andork.datescraper; 2 | 3 | import java.util.Date; 4 | 5 | import org.andork.scrape.MultiScrapePattern; 6 | 7 | public class MultiDatePattern extends MultiScrapePattern implements DatePattern { 8 | public MultiDatePattern(DatePattern... patterns) { 9 | super(patterns); 10 | } 11 | 12 | @Override 13 | public MultiDateMatcher matcher(CharSequence input) { 14 | return new MultiDateMatcher(this, input); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datescraper/src/main/java/org/andork/scrape/DefaultScrapeMatchResult.java: -------------------------------------------------------------------------------- 1 | package org.andork.scrape; 2 | 3 | public class DefaultScrapeMatchResult implements ScrapeMatchResult { 4 | private final int start; 5 | private final int end; 6 | private final String matchText; 7 | private final T match; 8 | 9 | public DefaultScrapeMatchResult(int start, int end, String matchText, T match) { 10 | super(); 11 | this.start = start; 12 | this.end = end; 13 | this.matchText = matchText; 14 | this.match = match; 15 | } 16 | 17 | @Override 18 | public int start() { 19 | return start; 20 | } 21 | 22 | @Override 23 | public int end() { 24 | return end; 25 | } 26 | 27 | @Override 28 | public String matchText() { 29 | return matchText; 30 | } 31 | 32 | @Override 33 | public T match() { 34 | return match; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /datescraper/src/main/java/org/andork/scrape/MultiScrapePattern.java: -------------------------------------------------------------------------------- 1 | package org.andork.scrape; 2 | 3 | import java.util.Arrays; 4 | 5 | public class MultiScrapePattern implements ScrapePattern { 6 | final ScrapePattern[] patterns; 7 | 8 | @SuppressWarnings("unchecked") 9 | public MultiScrapePattern(ScrapePattern... patterns) { 10 | super(); 11 | this.patterns = Arrays.copyOf(patterns, patterns.length); 12 | } 13 | 14 | @Override 15 | public MultiScrapeMatcher matcher(CharSequence input) { 16 | return new MultiScrapeMatcher<>(this, input); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datescraper/src/main/java/org/andork/scrape/ScrapeMatchResult.java: -------------------------------------------------------------------------------- 1 | package org.andork.scrape; 2 | 3 | public interface ScrapeMatchResult { 4 | int start(); 5 | 6 | int end(); 7 | 8 | String matchText(); 9 | 10 | T match(); 11 | } 12 | -------------------------------------------------------------------------------- /datescraper/src/main/java/org/andork/scrape/ScrapePattern.java: -------------------------------------------------------------------------------- 1 | package org.andork.scrape; 2 | 3 | public interface ScrapePattern { 4 | ScrapeMatcher matcher(CharSequence input); 5 | } 6 | -------------------------------------------------------------------------------- /deploy/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | github-api.json 3 | -------------------------------------------------------------------------------- /deploy/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "breakout-deploy", 3 | "version": "1.0.0", 4 | "description": "", 5 | "author": "Andy Edwards", 6 | "license": "ISC", 7 | "dependencies": { 8 | "bluebird": "^3.1.1", 9 | "request": "^2.67.0", 10 | "superagent": "^4.1.0", 11 | "superagent-bluebird-promise": "^3.0.0" 12 | }, 13 | "devDependencies": {} 14 | } 15 | -------------------------------------------------------------------------------- /docs/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@jedwards1211/eslint-config-react", "prettier", "prettier/react"], 3 | "parser": "babel-eslint", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "env": { 9 | "es6": true, 10 | "commonjs": true, 11 | "shared-node-browser": true 12 | }, 13 | "globals": { 14 | "process": false 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | .eslintcache 2 | .next 3 | .nyc_output 4 | coverage 5 | es 6 | node_modules 7 | .vercel 8 | .env.local -------------------------------------------------------------------------------- /docs/next.config.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | module.exports = { 4 | target: 'serverless', 5 | webpack: (config) => { 6 | config.module.rules.push({ 7 | test: /\.md$/, 8 | use: 'raw-loader', 9 | }) 10 | return config 11 | }, 12 | } 13 | -------------------------------------------------------------------------------- /docs/now.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "builds": [{ "src": "next.config.js", "use": "@now/next" }] 4 | } 5 | -------------------------------------------------------------------------------- /docs/pages/importCompass.js: -------------------------------------------------------------------------------- 1 | import markdownPage from '../src/markdownPage' 2 | export default markdownPage(() => import('./importCompass.md')) 3 | -------------------------------------------------------------------------------- /docs/pages/importWalls.js: -------------------------------------------------------------------------------- 1 | import markdownPage from '../src/markdownPage' 2 | 3 | export default markdownPage(() => import('./importWalls.md')) 4 | -------------------------------------------------------------------------------- /docs/public/static/compass-import/import-compass-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/compass-import/import-compass-menu.png -------------------------------------------------------------------------------- /docs/public/static/compass-import/import-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/compass-import/import-data.png -------------------------------------------------------------------------------- /docs/public/static/compass-import/import-nev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/compass-import/import-nev.png -------------------------------------------------------------------------------- /docs/public/static/compass-import/import-warnings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/compass-import/import-warnings.png -------------------------------------------------------------------------------- /docs/public/static/compass-import/process-and-view-cave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/compass-import/process-and-view-cave.png -------------------------------------------------------------------------------- /docs/public/static/compass-import/save-plot-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/compass-import/save-plot-file.png -------------------------------------------------------------------------------- /docs/public/static/compass-import/select-compass-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/compass-import/select-compass-files.png -------------------------------------------------------------------------------- /docs/public/static/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: 'Roboto'; 3 | } 4 | a { 5 | text-decoration: none; 6 | } 7 | -------------------------------------------------------------------------------- /docs/public/static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/logo.png -------------------------------------------------------------------------------- /docs/public/static/navigation/auto-profile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/auto-profile.gif -------------------------------------------------------------------------------- /docs/public/static/navigation/fit-view-to-everything.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/fit-view-to-everything.gif -------------------------------------------------------------------------------- /docs/public/static/navigation/fit-view-to-selected.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/fit-view-to-selected.gif -------------------------------------------------------------------------------- /docs/public/static/navigation/orbit-to-plan.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/orbit-to-plan.gif -------------------------------------------------------------------------------- /docs/public/static/navigation/orbit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/orbit.gif -------------------------------------------------------------------------------- /docs/public/static/navigation/ortho-and-perspective.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/ortho-and-perspective.gif -------------------------------------------------------------------------------- /docs/public/static/navigation/pan.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/pan.gif -------------------------------------------------------------------------------- /docs/public/static/navigation/plan-and-profile-views.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/plan-and-profile-views.gif -------------------------------------------------------------------------------- /docs/public/static/navigation/view-selector.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/view-selector.gif -------------------------------------------------------------------------------- /docs/public/static/navigation/zoom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/navigation/zoom.gif -------------------------------------------------------------------------------- /docs/public/static/search/filter-results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/search/filter-results.png -------------------------------------------------------------------------------- /docs/public/static/search/fly-to-results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/search/fly-to-results.png -------------------------------------------------------------------------------- /docs/public/static/search/highlight-results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/search/highlight-results.png -------------------------------------------------------------------------------- /docs/public/static/search/search-drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/search/search-drawer.png -------------------------------------------------------------------------------- /docs/public/static/search/survey-drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/search/survey-drawer.png -------------------------------------------------------------------------------- /docs/public/static/walls-import/file-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/walls-import/file-menu.png -------------------------------------------------------------------------------- /docs/public/static/walls-import/import-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/walls-import/import-data.png -------------------------------------------------------------------------------- /docs/public/static/walls-import/import-nev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/walls-import/import-nev.png -------------------------------------------------------------------------------- /docs/public/static/walls-import/import-progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/walls-import/import-progress.png -------------------------------------------------------------------------------- /docs/public/static/walls-import/import-walls-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/walls-import/import-walls-menu.png -------------------------------------------------------------------------------- /docs/public/static/walls-import/import-warnings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/walls-import/import-warnings.png -------------------------------------------------------------------------------- /docs/public/static/walls-import/select-walls-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/walls-import/select-walls-files.png -------------------------------------------------------------------------------- /docs/public/static/walls-import/station-and-vector-reports-dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jedwards1211/breakout/89429b4c7a49af124871a5c3a29f5f1e468b1402/docs/public/static/walls-import/station-and-vector-reports-dialog.png -------------------------------------------------------------------------------- /docs/src/KeyboardKey.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import withStyles from '@material-ui/core/styles/withStyles' 3 | 4 | const styles = (theme) => ({ 5 | root: { 6 | display: 'inline-block', 7 | padding: theme.spacing(0.5), 8 | borderRadius: theme.spacing(0.5), 9 | border: '1px solid currentColor', 10 | textAlign: 'center', 11 | minWidth: theme.spacing(4), 12 | backgroundColor: theme.palette.grey[200], 13 | }, 14 | }) 15 | 16 | const KeyboardKey = ({ classes, children }) => ( 17 | {children} 18 | ) 19 | 20 | export default withStyles(styles)(KeyboardKey) 21 | -------------------------------------------------------------------------------- /docs/src/Link.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import _Link from 'next/link' 3 | import { withRouter } from 'next/router' 4 | 5 | const Link = ({ 6 | style, 7 | className, 8 | activeClassName, 9 | _href, 10 | href = _href, 11 | children, 12 | replace, 13 | prefetch, 14 | router, 15 | scroll, 16 | forwardedRef, 17 | }) => ( 18 | <_Link href={href} prefetch={prefetch} replace={replace} scroll={scroll}> 19 | 28 | {children} 29 | 30 | 31 | ) 32 | 33 | const Link2 = withRouter(Link) 34 | 35 | // eslint-disable-next-line react/display-name 36 | const Link3 = React.forwardRef((props, forwardedRef) => ( 37 | 38 | )) 39 | 40 | export default Link3 41 | -------------------------------------------------------------------------------- /docs/src/LinkButton.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import Button from '@material-ui/core/Button' 3 | import Link from './Link' 4 | 5 | export default function LinkButton({ href, ...props }) { 6 | return