├── .gitignore ├── .idea ├── .name ├── ant.xml ├── artifacts │ ├── PS4k_jar.xml │ ├── images.xml │ └── lib.xml ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── findbugs-idea.xml ├── libraries │ ├── Maven__junit_junit_4_12.xml │ ├── apachehttp.xml │ ├── converter.xml │ ├── jide.xml │ ├── misc.xml │ ├── render.xml │ └── spring.xml ├── misc.xml ├── modules.xml ├── scopes │ └── scope_settings.xml ├── uiDesigner.xml └── vcs.xml ├── .travis.yml ├── LICENSE.txt ├── PS4k.iml ├── README.md ├── images └── splash.png ├── lib ├── apachehttp │ ├── commons-codec-1.6.jar │ ├── httpclient-4.2.1.jar │ ├── httpcore-4.2.1.jar │ └── httpmime-4.2.1.jar ├── converter │ ├── jai_codec.jar │ ├── jai_core.jar │ ├── jt-all-1.3.1.jar │ ├── jts-1.8.jar │ ├── poly2tri-ardor3d-0.1.1-SNAPSHOT.jar │ ├── poly2tri-core-0.1.1-SNAPSHOT.jar │ ├── slf4j-api-1.6.5.jar │ └── slf4j-log4j12-1.6.5.jar ├── hamcrest-core-1.3.jar ├── jide │ ├── jide-action.jar │ ├── jide-common.jar │ └── jide-dock.jar ├── junit-4.12.jar ├── misc │ ├── algs4-package.jar │ ├── pngtastic-0.4.0.jar │ ├── stdlib-package.jar │ └── trove-3.0.3.jar ├── render │ └── jpct.jar └── spring │ ├── commons-logging-1.1.1.jar │ ├── javax.annotation-api-1.3.2.jar │ ├── log4j-1.2.17.jar │ ├── org.springframework.asm-3.1.2.RELEASE.jar │ ├── org.springframework.aspects-3.1.2.RELEASE.jar │ ├── org.springframework.beans-3.1.2.RELEASE.jar │ ├── org.springframework.context-3.1.2.RELEASE.jar │ ├── org.springframework.core-3.1.2.RELEASE.jar │ ├── org.springframework.expression-3.1.2.RELEASE.jar │ └── org.springframework.orm-3.1.2.RELEASE.jar ├── pack.xml ├── pom.xml ├── resource ├── bundle │ ├── LangBundle.properties │ ├── LangBundle_de_DE.properties │ └── LangBundle_zh_CN.properties ├── font │ ├── arcade.ttf │ └── font.ttf ├── img │ ├── bars │ │ ├── option_bar │ │ │ ├── boundingBox.png │ │ │ ├── grid.png │ │ │ ├── light.png │ │ │ ├── mirrorflag.png │ │ │ ├── quality.png │ │ │ └── settings.png │ │ ├── select_bar │ │ │ ├── as_new_layer.png │ │ │ ├── copy.png │ │ │ ├── cut.png │ │ │ ├── delete_select.png │ │ │ ├── deselect.png │ │ │ ├── expand_selection.png │ │ │ ├── finalize_move.png │ │ │ ├── finalize_move_as_copy.png │ │ │ ├── mirror │ │ │ │ ├── mirrorx.png │ │ │ │ ├── mirrory.png │ │ │ │ └── mirrorz.png │ │ │ ├── paste.png │ │ │ ├── recolor.png │ │ │ ├── retexture.png │ │ │ ├── rotate │ │ │ │ ├── rotatex.png │ │ │ │ ├── rotatey.png │ │ │ │ ├── rotatez.png │ │ │ │ ├── x180.png │ │ │ │ ├── x270.png │ │ │ │ ├── x90.png │ │ │ │ ├── y180.png │ │ │ │ ├── y270.png │ │ │ │ ├── y90.png │ │ │ │ ├── z180.png │ │ │ │ ├── z270.png │ │ │ │ └── z90.png │ │ │ ├── select_all.png │ │ │ └── select_layer.png │ │ └── tool_bar │ │ │ ├── animate.png │ │ │ ├── clear_history.png │ │ │ ├── color_changer.png │ │ │ ├── color_picker.png │ │ │ ├── draw.png │ │ │ ├── erase.png │ │ │ ├── floodfill.png │ │ │ ├── redo.png │ │ │ ├── redo_disabled.png │ │ │ ├── select_tool.png │ │ │ ├── undo.png │ │ │ ├── undo_disabled.png │ │ │ └── view.png │ ├── framebars │ │ ├── coloradjuster │ │ │ ├── apply.png │ │ │ └── cancel.png │ │ ├── colorpalette │ │ │ ├── erase_colors.png │ │ │ ├── export.png │ │ │ ├── extract_colors.png │ │ │ ├── import.png │ │ │ ├── locked.png │ │ │ ├── reorder_colors.png │ │ │ └── unlocked.png │ │ ├── console │ │ │ ├── auto_scroll.png │ │ │ ├── auto_show.png │ │ │ └── clear.png │ │ ├── layer │ │ │ ├── add.png │ │ │ ├── merge.png │ │ │ ├── move_down.png │ │ │ ├── move_up.png │ │ │ └── remove.png │ │ ├── mainview │ │ │ ├── center_view.png │ │ │ ├── color_bg.png │ │ │ ├── color_plane.png │ │ │ ├── fill.png │ │ │ ├── hollow.png │ │ │ ├── minus.png │ │ │ ├── plus.png │ │ │ ├── reset.png │ │ │ ├── snap.png │ │ │ └── wireframe.png │ │ ├── sideview │ │ │ ├── align.png │ │ │ ├── make_zero.png │ │ │ ├── minus.png │ │ │ ├── move_in.png │ │ │ ├── move_out.png │ │ │ ├── plus.png │ │ │ └── reset.png │ │ ├── texturemg │ │ │ ├── add.png │ │ │ ├── clear.png │ │ │ ├── export.png │ │ │ ├── remove.png │ │ │ └── replace.png │ │ └── view │ │ │ ├── xySwap.png │ │ │ ├── xzSwap.png │ │ │ └── yzSwap.png │ └── icons │ │ ├── application │ │ ├── close.png │ │ ├── disable_fullscreen.png │ │ ├── enable_fullscreen.png │ │ ├── icons │ │ │ ├── icon-16x16.png │ │ │ ├── icon-24x24.png │ │ │ ├── icon-32x32.png │ │ │ └── icon-48x48.png │ │ ├── logo.png │ │ └── minimize.png │ │ ├── checkmark.png │ │ ├── clear.png │ │ ├── close.png │ │ ├── frame_close_button_icon.png │ │ ├── frame_help_button_icon.png │ │ ├── frame_maximize_button_icon.png │ │ ├── frames │ │ ├── colorAdjuster.png │ │ ├── colorpalette.png │ │ ├── colorpicker.png │ │ ├── colorslider.png │ │ ├── console.png │ │ ├── hexpicker.png │ │ ├── layer.png │ │ ├── mainview.png │ │ ├── personal.png │ │ ├── shortcutManager.png │ │ ├── sideView.png │ │ ├── snapshot.png │ │ ├── swatchManager.png │ │ └── textureManager.png │ │ └── loading.gif ├── layout │ └── TopLayout.ilayout ├── tex │ └── bounding_box_512.png └── xsd │ └── collada_schema_1_4_1.xsd ├── src ├── main │ └── java │ │ ├── com │ │ └── vitco │ │ │ └── app │ │ │ ├── App.java │ │ │ ├── core │ │ │ ├── CCamera.java │ │ │ ├── CameraChangeListener.java │ │ │ ├── EngineInteractionPrototype.java │ │ │ ├── EngineViewPrototype.java │ │ │ ├── container │ │ │ │ ├── AbstractDrawContainer.java │ │ │ │ ├── DrawContainer.java │ │ │ │ ├── HackedFrameBuffer.java │ │ │ │ └── HackedObjectInputStream.java │ │ │ ├── data │ │ │ │ ├── AnimationData.java │ │ │ │ ├── AnimationDataInterface.java │ │ │ │ ├── AnimationDataTest.java │ │ │ │ ├── AnimationHighlight.java │ │ │ │ ├── AnimationHighlightInterface.java │ │ │ │ ├── Data.java │ │ │ │ ├── DataInterface.java │ │ │ │ ├── GeneralData.java │ │ │ │ ├── GeneralDataInterface.java │ │ │ │ ├── ListenerData.java │ │ │ │ ├── ListenerDataInterface.java │ │ │ │ ├── VoxelData.java │ │ │ │ ├── VoxelDataInterface.java │ │ │ │ ├── VoxelDataTest.java │ │ │ │ ├── VoxelHighlighting.java │ │ │ │ ├── VoxelHighlightingInterface.java │ │ │ │ ├── container │ │ │ │ │ ├── DataContainer.java │ │ │ │ │ ├── ExtendedLine.java │ │ │ │ │ ├── ExtendedVector.java │ │ │ │ │ ├── Frame.java │ │ │ │ │ ├── VOXELMODE.java │ │ │ │ │ ├── Voxel.java │ │ │ │ │ └── VoxelLayer.java │ │ │ │ ├── history │ │ │ │ │ ├── BasicActionIntent.java │ │ │ │ │ ├── HistoryChangeListener.java │ │ │ │ │ ├── HistoryManager.java │ │ │ │ │ └── VoxelActionIntent.java │ │ │ │ └── notification │ │ │ │ │ ├── DataChangeAdapter.java │ │ │ │ │ ├── DataChangeListener.java │ │ │ │ │ ├── NotificationService.java │ │ │ │ │ └── NotificationServiceInterface.java │ │ │ ├── modes │ │ │ │ ├── AbstractAdapter.java │ │ │ │ ├── AnimationAdapter.java │ │ │ │ ├── VoxelAdapter.java │ │ │ │ └── tools │ │ │ │ │ ├── AbstractAnimationTool.java │ │ │ │ │ ├── AbstractBasicTool.java │ │ │ │ │ ├── AbstractTool.java │ │ │ │ │ ├── AbstractVoxelTool.java │ │ │ │ │ ├── ColorChangerTool.java │ │ │ │ │ ├── DrawTool.java │ │ │ │ │ ├── EraseTool.java │ │ │ │ │ ├── FloodFillTool.java │ │ │ │ │ ├── PickerTool.java │ │ │ │ │ ├── PointTool.java │ │ │ │ │ ├── SelectTool.java │ │ │ │ │ └── ViewTool.java │ │ │ └── world │ │ │ │ ├── AbstractCWorld.java │ │ │ │ ├── CWorld.java │ │ │ │ ├── WorldManager.java │ │ │ │ └── container │ │ │ │ ├── BorderObject3D.java │ │ │ │ ├── TextureObject.java │ │ │ │ └── VoxelManager.java │ │ │ ├── export │ │ │ ├── AbstractExporter.java │ │ │ ├── Kv6Exporter.java │ │ │ ├── MagicaVoxelExporter.java │ │ │ ├── PnxExporter.java │ │ │ ├── QbExporter.java │ │ │ ├── SlicesExporter.java │ │ │ ├── VoxVoxLapExporter.java │ │ │ ├── collada │ │ │ │ ├── ColladaExportWrapper.java │ │ │ │ └── ColladaFileExporter.java │ │ │ ├── dataStatic │ │ │ │ └── Kv6Static.java │ │ │ └── generic │ │ │ │ ├── ExportDataManager.java │ │ │ │ ├── ExportWorld.java │ │ │ │ └── container │ │ │ │ ├── PlaneMaterial.java │ │ │ │ ├── TexTriCornerInfo.java │ │ │ │ ├── TexTriCornerManager.java │ │ │ │ ├── TexTriPoint.java │ │ │ │ ├── TexTriUV.java │ │ │ │ ├── TexTriangle.java │ │ │ │ ├── TexTriangleManager.java │ │ │ │ ├── TriTexture.java │ │ │ │ ├── TriTextureManager.java │ │ │ │ ├── TriTextureTest.java │ │ │ │ ├── UVPoint.java │ │ │ │ └── Vertex.java │ │ │ ├── glue │ │ │ ├── config.xml │ │ │ └── shortcuts.xml │ │ │ ├── importer │ │ │ ├── AbstractImporter.java │ │ │ ├── BinVoxImporter.java │ │ │ ├── CCVxlImporter.java │ │ │ ├── ImporterTest.java │ │ │ ├── Kv6Importer.java │ │ │ ├── KvxImporter.java │ │ │ ├── PnxImporter.java │ │ │ ├── QbImporter.java │ │ │ ├── RawVoxImporter.java │ │ │ ├── VoxImporter.java │ │ │ └── dataStatic │ │ │ │ └── CCVxlStatic.java │ │ │ ├── layout │ │ │ ├── ButtonLayoutPainter.java │ │ │ ├── CustomLayoutPainter.java │ │ │ ├── ExtendedDockableBarDockableHolder.java │ │ │ ├── LayoutLoader.java │ │ │ ├── WindowManager.java │ │ │ ├── WindowManagerInterface.java │ │ │ ├── bars │ │ │ │ ├── BarLinkagePrototype.java │ │ │ │ ├── MainMenuLinkage.java │ │ │ │ ├── OptionBarLinkage.java │ │ │ │ ├── SelectBarLinkage.java │ │ │ │ ├── ToolBarLinkage.java │ │ │ │ ├── main_menu.xml │ │ │ │ ├── option_bar.xml │ │ │ │ ├── rotatex.xml │ │ │ │ ├── rotatey.xml │ │ │ │ ├── rotatez.xml │ │ │ │ ├── select_bar.xml │ │ │ │ └── tool_bar.xml │ │ │ ├── content │ │ │ │ ├── JCustomScrollPane.java │ │ │ │ ├── JCustomTable.java │ │ │ │ ├── ViewPrototype.java │ │ │ │ ├── coloradjuster │ │ │ │ │ ├── ColorAdjusterView.java │ │ │ │ │ ├── ColorAdjusterViewInterface.java │ │ │ │ │ └── toolbar.xml │ │ │ │ ├── colorchooser │ │ │ │ │ ├── ColorPaletteChooser.java │ │ │ │ │ ├── HSBPanelSliderChooser.java │ │ │ │ │ ├── HexColorChooser.java │ │ │ │ │ ├── PresetColorChooser.java │ │ │ │ │ ├── SatBrightPanelChooser.java │ │ │ │ │ ├── SliderColorChooser.java │ │ │ │ │ ├── basic │ │ │ │ │ │ ├── ColorChangeListener.java │ │ │ │ │ │ ├── ColorChooserPrototype.java │ │ │ │ │ │ └── Settings.java │ │ │ │ │ └── components │ │ │ │ │ │ ├── ColorSliderPrototype.java │ │ │ │ │ │ ├── HexBox.java │ │ │ │ │ │ ├── NumberBox.java │ │ │ │ │ │ ├── SliderUI.java │ │ │ │ │ │ ├── TextChangeListener.java │ │ │ │ │ │ ├── ValueChangeListener.java │ │ │ │ │ │ └── colorslider │ │ │ │ │ │ ├── CMYKTab.java │ │ │ │ │ │ ├── HSBTab.java │ │ │ │ │ │ ├── HorizontalColorSlider.java │ │ │ │ │ │ ├── HorizontalHueSlider.java │ │ │ │ │ │ ├── RGBTab.java │ │ │ │ │ │ └── TabPrototype.java │ │ │ │ ├── console │ │ │ │ │ ├── Console.java │ │ │ │ │ ├── ConsoleInterface.java │ │ │ │ │ ├── ConsoleListener.java │ │ │ │ │ ├── ConsoleView.java │ │ │ │ │ ├── ConsoleViewInterface.java │ │ │ │ │ └── toolbar.xml │ │ │ │ ├── layer │ │ │ │ │ ├── LayerView.java │ │ │ │ │ ├── LayerViewInterface.java │ │ │ │ │ ├── SaveTextArea.java │ │ │ │ │ └── toolbar.xml │ │ │ │ ├── mainview │ │ │ │ │ ├── MainView.java │ │ │ │ │ ├── MainViewInterface.java │ │ │ │ │ ├── components │ │ │ │ │ │ ├── BoundingBoxDimChooser.java │ │ │ │ │ │ └── OutlineLabel.java │ │ │ │ │ └── toolbar.xml │ │ │ │ ├── menu │ │ │ │ │ ├── MainMenuLogic.java │ │ │ │ │ ├── MenuLogicInterface.java │ │ │ │ │ ├── MenuLogicPrototype.java │ │ │ │ │ ├── OptionBarLogic.java │ │ │ │ │ ├── SelectBarLogic.java │ │ │ │ │ └── ToolBarLogic.java │ │ │ │ ├── shortcut │ │ │ │ │ ├── ShortcutChangeListener.java │ │ │ │ │ ├── ShortcutManager.java │ │ │ │ │ ├── ShortcutManagerInterface.java │ │ │ │ │ ├── ShortcutManagerView.java │ │ │ │ │ ├── ShortcutManagerViewInterface.java │ │ │ │ │ └── ShortcutObject.java │ │ │ │ ├── sideview │ │ │ │ │ ├── SideView.java │ │ │ │ │ ├── SideViewInterface.java │ │ │ │ │ ├── toolbar1.xml │ │ │ │ │ ├── toolbar2.xml │ │ │ │ │ └── toolbar3.xml │ │ │ │ └── texture │ │ │ │ │ ├── TextureManager.java │ │ │ │ │ ├── TextureManagerInterface.java │ │ │ │ │ └── toolbar.xml │ │ │ └── frames │ │ │ │ ├── ColorAdjusterLinkage.java │ │ │ │ ├── ColorPaletteLinkage.java │ │ │ │ ├── ColorPickerLinkage.java │ │ │ │ ├── ColorSliderLinkage.java │ │ │ │ ├── ConsoleLinkage.java │ │ │ │ ├── FrameLinkagePrototype.java │ │ │ │ ├── HexPickerLinkage.java │ │ │ │ ├── LayerLinkage.java │ │ │ │ ├── MainViewLinkage.java │ │ │ │ ├── PersonalLinkage.java │ │ │ │ ├── ShortcutManagerLinkage.java │ │ │ │ ├── SideViewLinkage.java │ │ │ │ ├── SnapshotLinkage.java │ │ │ │ ├── TextureManagerLinkage.java │ │ │ │ ├── custom │ │ │ │ ├── CDockableFrame.java │ │ │ │ └── FrameGenericJideButton.java │ │ │ │ └── toolbars │ │ │ │ └── colorpalette.xml │ │ │ ├── low │ │ │ ├── CubeIndexer.java │ │ │ ├── CubeIndexerTest.java │ │ │ ├── engine │ │ │ │ ├── Chunk.java │ │ │ │ ├── Engine.java │ │ │ │ ├── Engine2.java │ │ │ │ ├── VoxelManager.java │ │ │ │ └── VoxelType.java │ │ │ ├── hull │ │ │ │ ├── HullManager.java │ │ │ │ ├── HullManagerExt.java │ │ │ │ ├── HullManagerExtInterface.java │ │ │ │ ├── HullManagerInterface.java │ │ │ │ ├── HullManagerTest.java │ │ │ │ ├── MinMaxTracker.java │ │ │ │ └── MinMaxTrackerTest.java │ │ │ └── triangulate │ │ │ │ ├── Grid2TriGreedyOptimal.java │ │ │ │ ├── Grid2TriMono.java │ │ │ │ ├── Grid2TriNaive.java │ │ │ │ ├── Grid2TriNaiveGreedy.java │ │ │ │ ├── Grid2TriPolyFast.java │ │ │ │ ├── Grid2TriPolySlow.java │ │ │ │ ├── tests │ │ │ │ ├── AbstractTriangulationTest.java │ │ │ │ ├── RuntimeComparisonTest.java │ │ │ │ ├── TestGrid2TriGreedyOptimal.java │ │ │ │ ├── TestGrid2TriMono.java │ │ │ │ ├── TestGrid2TriMonoSave.java │ │ │ │ ├── TestGrid2TriNaiveGreedy.java │ │ │ │ ├── TestGrid2TriPolyFast.java │ │ │ │ └── TestGrid2TriPolySlow.java │ │ │ │ └── util │ │ │ │ ├── Grid2PolyHelper.java │ │ │ │ ├── Grid2PolyHelperTest.java │ │ │ │ └── HopcroftKarp.java │ │ │ ├── manager │ │ │ ├── action │ │ │ │ ├── ActionGroupManager.java │ │ │ │ ├── ActionGroupManagerInterface.java │ │ │ │ ├── ActionManager.java │ │ │ │ ├── ActionManagerInterface.java │ │ │ │ ├── ActionManagerPrototype.java │ │ │ │ ├── ChangeListener.java │ │ │ │ ├── ComplexActionManager.java │ │ │ │ └── types │ │ │ │ │ ├── StateActionPrototype.java │ │ │ │ │ └── SwitchActionPrototype.java │ │ │ ├── async │ │ │ │ ├── AsyncAction.java │ │ │ │ └── AsyncActionManager.java │ │ │ ├── error │ │ │ │ ├── ErrorHandler.java │ │ │ │ └── ErrorHandlerInterface.java │ │ │ ├── help │ │ │ │ └── FrameHelpOverlay.java │ │ │ ├── lang │ │ │ │ ├── LangSelector.java │ │ │ │ └── LangSelectorInterface.java │ │ │ ├── menu │ │ │ │ ├── MenuGenerator.java │ │ │ │ └── MenuGeneratorInterface.java │ │ │ ├── pref │ │ │ │ ├── PrefChangeListener.java │ │ │ │ ├── Preferences.java │ │ │ │ └── PreferencesInterface.java │ │ │ ├── thread │ │ │ │ ├── LifeTimeThread.java │ │ │ │ ├── ThreadManager.java │ │ │ │ └── ThreadManagerInterface.java │ │ │ └── updater │ │ │ │ └── Updater.java │ │ │ ├── settings │ │ │ ├── DynamicSettings.java │ │ │ └── VitcoSettings.java │ │ │ └── util │ │ │ ├── components │ │ │ ├── dialog │ │ │ │ ├── BlankDialogModule.java │ │ │ │ ├── DialogModuleChangeAdapter.java │ │ │ │ ├── DialogModuleChangeListener.java │ │ │ │ ├── UserInputDialog.java │ │ │ │ ├── UserInputDialogListener.java │ │ │ │ └── components │ │ │ │ │ ├── CheckBoxModule.java │ │ │ │ │ ├── ComboBoxModule.java │ │ │ │ │ ├── DialogButton.java │ │ │ │ │ ├── FieldSet.java │ │ │ │ │ ├── FieldSetWrapper.java │ │ │ │ │ ├── FileSelectModule.java │ │ │ │ │ ├── FolderSelectModule.java │ │ │ │ │ ├── LabelModule.java │ │ │ │ │ ├── LinkButton.java │ │ │ │ │ ├── SeparatorModule.java │ │ │ │ │ └── TextInputModule.java │ │ │ ├── progressbar │ │ │ │ ├── ProgressDialog.java │ │ │ │ ├── ProgressReporter.java │ │ │ │ └── ProgressWorker.java │ │ │ └── textfield │ │ │ │ ├── JCustomTextField.java │ │ │ │ └── TextChangeListener.java │ │ │ ├── file │ │ │ ├── FileIn.java │ │ │ ├── FileOut.java │ │ │ ├── FileTools.java │ │ │ ├── RandomAccessFileIn.java │ │ │ └── SaveDataInputStream.java │ │ │ ├── graphic │ │ │ ├── G2DUtil.java │ │ │ ├── G2DUtilTest.java │ │ │ ├── GraphicTools.java │ │ │ ├── ImageComparator.java │ │ │ ├── ImageComparatorTest.java │ │ │ ├── MaxRectFinder.java │ │ │ ├── MaxRectFinderTest.java │ │ │ ├── SharedImageFactory.java │ │ │ ├── TextureTools.java │ │ │ ├── TextureToolsTest.java │ │ │ ├── Util3D.java │ │ │ └── Util3DTest.java │ │ │ ├── misc │ │ │ ├── ArrayUtil.java │ │ │ ├── AutoFileCloser.java │ │ │ ├── BiMap.java │ │ │ ├── ByteHelper.java │ │ │ ├── CFileDialog.java │ │ │ ├── ColorTools.java │ │ │ ├── ConversionTools.java │ │ │ ├── DateTools.java │ │ │ ├── FontUtil.java │ │ │ ├── IntegerTools.java │ │ │ ├── IntegerToolsTest.java │ │ │ ├── NumberTools.java │ │ │ ├── Profiler.java │ │ │ ├── SaveResourceLoader.java │ │ │ ├── StringIndexer.java │ │ │ ├── SwingAsyncHelper.java │ │ │ ├── ThumbnailFileChooser.java │ │ │ ├── UTF8Control.java │ │ │ ├── UrlUtil.java │ │ │ └── WrapLayout.java │ │ │ ├── offline │ │ │ └── GenerateTexture.java │ │ │ ├── schema │ │ │ ├── spring-aop-3.1.xsd │ │ │ ├── spring-beans-3.1.xsd │ │ │ ├── spring-context-3.1.xsd │ │ │ ├── spring-tool-3.1.xsd │ │ │ ├── vitco-layout-1.0.xsd │ │ │ ├── vitco-menu-1.0.xsd │ │ │ ├── vitco-shortcuts-1.0.xsd │ │ │ └── xml.xsd │ │ │ └── xml │ │ │ ├── XmlFile.java │ │ │ └── XmlTools.java │ │ └── log4j.properties └── test │ ├── java │ └── formats │ │ ├── AbstractFormatTest.java │ │ ├── MagicaVoxFormatFitToBBTest.java │ │ ├── MagicaVoxFormatFitToSizeTest.java │ │ ├── PNXFormatTest.java │ │ └── VoxLapEngineFormatTest.java │ └── resources │ └── formats │ ├── magica_vox │ ├── fit_to_bb │ │ ├── 3x3x3.vox │ │ ├── 8x8x8.vox │ │ ├── adobe.vox │ │ ├── alphabet.vox │ │ ├── black.vox │ │ ├── cage.vox │ │ ├── castle.vox │ │ ├── chr_fox.vox │ │ ├── chr_gumi.vox │ │ ├── chr_jp.vox │ │ ├── chr_knight.vox │ │ ├── chr_man.vox │ │ ├── chr_old.vox │ │ ├── chr_rain.vox │ │ ├── chr_sword.vox │ │ ├── church.vox │ │ ├── clock.vox │ │ ├── dragon.vox │ │ ├── ephtracy.vox │ │ ├── mario.vox │ │ ├── rect.vox │ │ └── tree.vox │ └── fit_to_size │ │ ├── 3x3x3.vox │ │ ├── 8x8x8.vox │ │ ├── adobe.vox │ │ ├── alphabet.vox │ │ ├── black.vox │ │ ├── cage.vox │ │ ├── castle.vox │ │ ├── chr_fox.vox │ │ ├── chr_gumi.vox │ │ ├── chr_jp.vox │ │ ├── chr_knight.vox │ │ ├── chr_man.vox │ │ ├── chr_old.vox │ │ ├── chr_rain.vox │ │ ├── chr_sword.vox │ │ ├── church.vox │ │ ├── clock.vox │ │ ├── dragon.vox │ │ ├── ephtracy.vox │ │ ├── mario.vox │ │ ├── rect.vox │ │ └── tree.vox │ ├── pnx │ ├── 3x3x3.pnx │ ├── 8x8x8.pnx │ ├── adobe.pnx │ ├── black.pnx │ ├── castle.pnx │ ├── chr_knight.pnx │ ├── chr_man.pnx │ ├── chr_old.pnx │ ├── chr_rain.pnx │ ├── chr_sword.pnx │ ├── clock.pnx │ ├── snake.pnx │ └── tree.pnx │ └── vox_lap_engine │ ├── troll_armleft.vox │ ├── troll_armright.vox │ ├── troll_armright_export.vox │ ├── troll_head.vox │ ├── troll_legleft.vox │ ├── troll_legright.vox │ ├── troll_torso.vox │ └── z-customvox-nerds.vox └── static ├── install-linux.sh ├── install.txt ├── share ├── applications │ └── com.blackflux.voxelshop.desktop └── pixmaps │ └── icon-48x48.png └── uninstall-linux.sh /.gitignore: -------------------------------------------------------------------------------- 1 | /VoxelShop.log 2 | /VoxelShop.prj 3 | /build_VoxelShop.bat 4 | /.idea/workspace.xml 5 | /.idea/tasks.xml 6 | /.idea/dictionaries 7 | /.idea/sonarlint 8 | /VoxelShop_jetpdb 9 | /settings 10 | /resource/jidelicense.txt 11 | /target/ 12 | /resource/version.txt 13 | /resource/date.txt 14 | /resource/build.txt 15 | /resource/branch.txt 16 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | PS4k -------------------------------------------------------------------------------- /.idea/ant.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/artifacts/PS4k_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $PROJECT_DIR$/out/artifacts/PS4k_jar 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/artifacts/images.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $PROJECT_DIR$/out/artifacts/PS4k_jar 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/artifacts/lib.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $PROJECT_DIR$/out/artifacts/PS4k_jar/lib 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 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 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__junit_junit_4_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/apachehttp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/converter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/jide.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/render.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/spring.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 22 | 23 | 28 | 29 | 30 | http://www.w3.org/1999/xhtml 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/scopes/scope_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /images/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/images/splash.png -------------------------------------------------------------------------------- /lib/apachehttp/commons-codec-1.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/apachehttp/commons-codec-1.6.jar -------------------------------------------------------------------------------- /lib/apachehttp/httpclient-4.2.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/apachehttp/httpclient-4.2.1.jar -------------------------------------------------------------------------------- /lib/apachehttp/httpcore-4.2.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/apachehttp/httpcore-4.2.1.jar -------------------------------------------------------------------------------- /lib/apachehttp/httpmime-4.2.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/apachehttp/httpmime-4.2.1.jar -------------------------------------------------------------------------------- /lib/converter/jai_codec.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/converter/jai_codec.jar -------------------------------------------------------------------------------- /lib/converter/jai_core.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/converter/jai_core.jar -------------------------------------------------------------------------------- /lib/converter/jt-all-1.3.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/converter/jt-all-1.3.1.jar -------------------------------------------------------------------------------- /lib/converter/jts-1.8.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/converter/jts-1.8.jar -------------------------------------------------------------------------------- /lib/converter/poly2tri-ardor3d-0.1.1-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/converter/poly2tri-ardor3d-0.1.1-SNAPSHOT.jar -------------------------------------------------------------------------------- /lib/converter/poly2tri-core-0.1.1-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/converter/poly2tri-core-0.1.1-SNAPSHOT.jar -------------------------------------------------------------------------------- /lib/converter/slf4j-api-1.6.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/converter/slf4j-api-1.6.5.jar -------------------------------------------------------------------------------- /lib/converter/slf4j-log4j12-1.6.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/converter/slf4j-log4j12-1.6.5.jar -------------------------------------------------------------------------------- /lib/hamcrest-core-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/hamcrest-core-1.3.jar -------------------------------------------------------------------------------- /lib/jide/jide-action.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/jide/jide-action.jar -------------------------------------------------------------------------------- /lib/jide/jide-common.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/jide/jide-common.jar -------------------------------------------------------------------------------- /lib/jide/jide-dock.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/jide/jide-dock.jar -------------------------------------------------------------------------------- /lib/junit-4.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/junit-4.12.jar -------------------------------------------------------------------------------- /lib/misc/algs4-package.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/misc/algs4-package.jar -------------------------------------------------------------------------------- /lib/misc/pngtastic-0.4.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/misc/pngtastic-0.4.0.jar -------------------------------------------------------------------------------- /lib/misc/stdlib-package.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/misc/stdlib-package.jar -------------------------------------------------------------------------------- /lib/misc/trove-3.0.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/misc/trove-3.0.3.jar -------------------------------------------------------------------------------- /lib/render/jpct.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/render/jpct.jar -------------------------------------------------------------------------------- /lib/spring/commons-logging-1.1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/commons-logging-1.1.1.jar -------------------------------------------------------------------------------- /lib/spring/javax.annotation-api-1.3.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/javax.annotation-api-1.3.2.jar -------------------------------------------------------------------------------- /lib/spring/log4j-1.2.17.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/log4j-1.2.17.jar -------------------------------------------------------------------------------- /lib/spring/org.springframework.asm-3.1.2.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/org.springframework.asm-3.1.2.RELEASE.jar -------------------------------------------------------------------------------- /lib/spring/org.springframework.aspects-3.1.2.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/org.springframework.aspects-3.1.2.RELEASE.jar -------------------------------------------------------------------------------- /lib/spring/org.springframework.beans-3.1.2.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/org.springframework.beans-3.1.2.RELEASE.jar -------------------------------------------------------------------------------- /lib/spring/org.springframework.context-3.1.2.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/org.springframework.context-3.1.2.RELEASE.jar -------------------------------------------------------------------------------- /lib/spring/org.springframework.core-3.1.2.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/org.springframework.core-3.1.2.RELEASE.jar -------------------------------------------------------------------------------- /lib/spring/org.springframework.expression-3.1.2.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/org.springframework.expression-3.1.2.RELEASE.jar -------------------------------------------------------------------------------- /lib/spring/org.springframework.orm-3.1.2.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/lib/spring/org.springframework.orm-3.1.2.RELEASE.jar -------------------------------------------------------------------------------- /pack.xml: -------------------------------------------------------------------------------- 1 | 4 | bin 5 | 6 | zip 7 | 8 | false 9 | 10 | 11 | ${project.basedir} 12 | voxelshop/ 13 | 14 | README.md 15 | LICENSE.txt 16 | 17 | 18 | 19 | ${project.basedir}/static 20 | voxelshop/ 21 | 22 | **/* 23 | 24 | 25 | 26 | ${project.build.directory} 27 | voxelshop/ 28 | 29 | *.jar 30 | 31 | 32 | 33 | ${project.build.directory}/lib 34 | voxelshop/lib/ 35 | 36 | *.jar 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /resource/bundle/LangBundle_de_DE.properties: -------------------------------------------------------------------------------- 1 | file_btn = Datei 2 | edit_btn = Bearbeiten 3 | view_btn = Ansicht -------------------------------------------------------------------------------- /resource/font/arcade.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/font/arcade.ttf -------------------------------------------------------------------------------- /resource/font/font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/font/font.ttf -------------------------------------------------------------------------------- /resource/img/bars/option_bar/boundingBox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/option_bar/boundingBox.png -------------------------------------------------------------------------------- /resource/img/bars/option_bar/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/option_bar/grid.png -------------------------------------------------------------------------------- /resource/img/bars/option_bar/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/option_bar/light.png -------------------------------------------------------------------------------- /resource/img/bars/option_bar/mirrorflag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/option_bar/mirrorflag.png -------------------------------------------------------------------------------- /resource/img/bars/option_bar/quality.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/option_bar/quality.png -------------------------------------------------------------------------------- /resource/img/bars/option_bar/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/option_bar/settings.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/as_new_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/as_new_layer.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/copy.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/cut.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/delete_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/delete_select.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/deselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/deselect.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/expand_selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/expand_selection.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/finalize_move.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/finalize_move.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/finalize_move_as_copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/finalize_move_as_copy.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/mirror/mirrorx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/mirror/mirrorx.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/mirror/mirrory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/mirror/mirrory.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/mirror/mirrorz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/mirror/mirrorz.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/paste.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/recolor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/recolor.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/retexture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/retexture.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/rotatex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/rotatex.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/rotatey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/rotatey.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/rotatez.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/rotatez.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/x180.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/x270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/x270.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/x90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/x90.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/y180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/y180.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/y270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/y270.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/y90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/y90.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/z180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/z180.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/z270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/z270.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/rotate/z90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/rotate/z90.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/select_all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/select_all.png -------------------------------------------------------------------------------- /resource/img/bars/select_bar/select_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/select_bar/select_layer.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/animate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/animate.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/clear_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/clear_history.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/color_changer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/color_changer.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/color_picker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/color_picker.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/draw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/draw.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/erase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/erase.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/floodfill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/floodfill.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/redo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/redo.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/redo_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/redo_disabled.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/select_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/select_tool.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/undo.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/undo_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/undo_disabled.png -------------------------------------------------------------------------------- /resource/img/bars/tool_bar/view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/bars/tool_bar/view.png -------------------------------------------------------------------------------- /resource/img/framebars/coloradjuster/apply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/coloradjuster/apply.png -------------------------------------------------------------------------------- /resource/img/framebars/coloradjuster/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/coloradjuster/cancel.png -------------------------------------------------------------------------------- /resource/img/framebars/colorpalette/erase_colors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/colorpalette/erase_colors.png -------------------------------------------------------------------------------- /resource/img/framebars/colorpalette/export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/colorpalette/export.png -------------------------------------------------------------------------------- /resource/img/framebars/colorpalette/extract_colors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/colorpalette/extract_colors.png -------------------------------------------------------------------------------- /resource/img/framebars/colorpalette/import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/colorpalette/import.png -------------------------------------------------------------------------------- /resource/img/framebars/colorpalette/locked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/colorpalette/locked.png -------------------------------------------------------------------------------- /resource/img/framebars/colorpalette/reorder_colors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/colorpalette/reorder_colors.png -------------------------------------------------------------------------------- /resource/img/framebars/colorpalette/unlocked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/colorpalette/unlocked.png -------------------------------------------------------------------------------- /resource/img/framebars/console/auto_scroll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/console/auto_scroll.png -------------------------------------------------------------------------------- /resource/img/framebars/console/auto_show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/console/auto_show.png -------------------------------------------------------------------------------- /resource/img/framebars/console/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/console/clear.png -------------------------------------------------------------------------------- /resource/img/framebars/layer/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/layer/add.png -------------------------------------------------------------------------------- /resource/img/framebars/layer/merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/layer/merge.png -------------------------------------------------------------------------------- /resource/img/framebars/layer/move_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/layer/move_down.png -------------------------------------------------------------------------------- /resource/img/framebars/layer/move_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/layer/move_up.png -------------------------------------------------------------------------------- /resource/img/framebars/layer/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/layer/remove.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/center_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/center_view.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/color_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/color_bg.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/color_plane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/color_plane.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/fill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/fill.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/hollow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/hollow.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/minus.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/plus.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/reset.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/snap.png -------------------------------------------------------------------------------- /resource/img/framebars/mainview/wireframe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/mainview/wireframe.png -------------------------------------------------------------------------------- /resource/img/framebars/sideview/align.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/sideview/align.png -------------------------------------------------------------------------------- /resource/img/framebars/sideview/make_zero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/sideview/make_zero.png -------------------------------------------------------------------------------- /resource/img/framebars/sideview/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/sideview/minus.png -------------------------------------------------------------------------------- /resource/img/framebars/sideview/move_in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/sideview/move_in.png -------------------------------------------------------------------------------- /resource/img/framebars/sideview/move_out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/sideview/move_out.png -------------------------------------------------------------------------------- /resource/img/framebars/sideview/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/sideview/plus.png -------------------------------------------------------------------------------- /resource/img/framebars/sideview/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/sideview/reset.png -------------------------------------------------------------------------------- /resource/img/framebars/texturemg/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/texturemg/add.png -------------------------------------------------------------------------------- /resource/img/framebars/texturemg/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/texturemg/clear.png -------------------------------------------------------------------------------- /resource/img/framebars/texturemg/export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/texturemg/export.png -------------------------------------------------------------------------------- /resource/img/framebars/texturemg/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/texturemg/remove.png -------------------------------------------------------------------------------- /resource/img/framebars/texturemg/replace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/texturemg/replace.png -------------------------------------------------------------------------------- /resource/img/framebars/view/xySwap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/view/xySwap.png -------------------------------------------------------------------------------- /resource/img/framebars/view/xzSwap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/view/xzSwap.png -------------------------------------------------------------------------------- /resource/img/framebars/view/yzSwap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/framebars/view/yzSwap.png -------------------------------------------------------------------------------- /resource/img/icons/application/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/application/close.png -------------------------------------------------------------------------------- /resource/img/icons/application/disable_fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/application/disable_fullscreen.png -------------------------------------------------------------------------------- /resource/img/icons/application/enable_fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/application/enable_fullscreen.png -------------------------------------------------------------------------------- /resource/img/icons/application/icons/icon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/application/icons/icon-16x16.png -------------------------------------------------------------------------------- /resource/img/icons/application/icons/icon-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/application/icons/icon-24x24.png -------------------------------------------------------------------------------- /resource/img/icons/application/icons/icon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/application/icons/icon-32x32.png -------------------------------------------------------------------------------- /resource/img/icons/application/icons/icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/application/icons/icon-48x48.png -------------------------------------------------------------------------------- /resource/img/icons/application/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/application/logo.png -------------------------------------------------------------------------------- /resource/img/icons/application/minimize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/application/minimize.png -------------------------------------------------------------------------------- /resource/img/icons/checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/checkmark.png -------------------------------------------------------------------------------- /resource/img/icons/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/clear.png -------------------------------------------------------------------------------- /resource/img/icons/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/close.png -------------------------------------------------------------------------------- /resource/img/icons/frame_close_button_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frame_close_button_icon.png -------------------------------------------------------------------------------- /resource/img/icons/frame_help_button_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frame_help_button_icon.png -------------------------------------------------------------------------------- /resource/img/icons/frame_maximize_button_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frame_maximize_button_icon.png -------------------------------------------------------------------------------- /resource/img/icons/frames/colorAdjuster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/colorAdjuster.png -------------------------------------------------------------------------------- /resource/img/icons/frames/colorpalette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/colorpalette.png -------------------------------------------------------------------------------- /resource/img/icons/frames/colorpicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/colorpicker.png -------------------------------------------------------------------------------- /resource/img/icons/frames/colorslider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/colorslider.png -------------------------------------------------------------------------------- /resource/img/icons/frames/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/console.png -------------------------------------------------------------------------------- /resource/img/icons/frames/hexpicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/hexpicker.png -------------------------------------------------------------------------------- /resource/img/icons/frames/layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/layer.png -------------------------------------------------------------------------------- /resource/img/icons/frames/mainview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/mainview.png -------------------------------------------------------------------------------- /resource/img/icons/frames/personal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/personal.png -------------------------------------------------------------------------------- /resource/img/icons/frames/shortcutManager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/shortcutManager.png -------------------------------------------------------------------------------- /resource/img/icons/frames/sideView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/sideView.png -------------------------------------------------------------------------------- /resource/img/icons/frames/snapshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/snapshot.png -------------------------------------------------------------------------------- /resource/img/icons/frames/swatchManager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/swatchManager.png -------------------------------------------------------------------------------- /resource/img/icons/frames/textureManager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/frames/textureManager.png -------------------------------------------------------------------------------- /resource/img/icons/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/img/icons/loading.gif -------------------------------------------------------------------------------- /resource/tex/bounding_box_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/resource/tex/bounding_box_512.png -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/CameraChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core; 2 | 3 | /** 4 | * A Camera event listener 5 | */ 6 | public interface CameraChangeListener { 7 | //Called when the camera angle/zoom/fov/shift changes 8 | public void onCameraChange(); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/container/HackedFrameBuffer.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.container; 2 | 3 | import com.threed.jpct.FrameBuffer; 4 | 5 | /** 6 | * Exposes the zbuffer of the FrameBuffer 7 | */ 8 | public class HackedFrameBuffer extends FrameBuffer { 9 | 10 | // access to z buffer 11 | public int[] getZBuffer() { 12 | return zbuffer; 13 | } 14 | 15 | // constructor 16 | public HackedFrameBuffer(int i, int i2, int i3) { 17 | super(i, i2, i3); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/AnimationHighlightInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data; 2 | 3 | import com.vitco.app.core.data.container.ExtendedVector; 4 | 5 | /** 6 | * Defines the signature of methods that help highlighting of animation data (frame). 7 | */ 8 | public interface AnimationHighlightInterface { 9 | // remove all highlights 10 | void removeAnimationHighlights(); 11 | // highlight a point 12 | boolean highlightPoint(int id); 13 | // select a point 14 | boolean selectPoint(int id); 15 | // retrieve highlighted point 16 | int getHighlightedPoint(); 17 | // retrieve selected point 18 | int getSelectedPoint(); 19 | // set preview line 20 | void setPreviewLine(int id1, int id2); 21 | // retrieve preview line 22 | ExtendedVector[] getPreviewLine(); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/DataInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data; 2 | 3 | import java.io.File; 4 | 5 | /** 6 | * General Data interaction. 7 | */ 8 | public interface DataInterface { 9 | // loads all data from file 10 | boolean loadFromFile(File file); 11 | // stores all data to file 12 | boolean saveToFile(File file); 13 | // delete all history 14 | void clearHistoryA(); 15 | void clearHistoryV(); 16 | 17 | void setFrozen(boolean flag); 18 | 19 | // erase everything and start fresh 20 | void freshStart(); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/GeneralData.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data; 2 | 3 | import com.vitco.app.core.data.container.DataContainer; 4 | import com.vitco.app.core.data.notification.DataChangeAdapter; 5 | import com.vitco.app.settings.VitcoSettings; 6 | 7 | /** 8 | * Manages everything that has to do with general data 9 | */ 10 | public class GeneralData extends ListenerData implements GeneralDataInterface { 11 | 12 | // main data container 13 | protected DataContainer dataContainer = new DataContainer(); 14 | 15 | // ###################### 16 | 17 | // true if the data has changed since last save 18 | protected boolean hasChanged = false; 19 | 20 | public GeneralData() { 21 | this.addDataChangeListener(new DataChangeAdapter() { 22 | @Override 23 | public void onVoxelDataChanged() { 24 | hasChanged = true; 25 | } 26 | 27 | @Override 28 | public void onAnimationDataChanged() { 29 | hasChanged = true; 30 | } 31 | }); 32 | } 33 | 34 | @Override 35 | public boolean hasChanged() { 36 | synchronized (VitcoSettings.SYNC) { 37 | return hasChanged; 38 | } 39 | } 40 | 41 | @Override 42 | public void resetHasChanged() { 43 | synchronized (VitcoSettings.SYNC) { 44 | hasChanged = false; 45 | } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/GeneralDataInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data; 2 | 3 | /** 4 | * Manages everything that has to do with general data 5 | */ 6 | public interface GeneralDataInterface { 7 | // true iff the data has changed since last reset (triggered by save to file) 8 | boolean hasChanged(); 9 | // reset the changed of data (nothing has changed after this is called) 10 | void resetHasChanged(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/ListenerData.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data; 2 | 3 | import com.vitco.app.core.data.notification.DataChangeListener; 4 | import com.vitco.app.core.data.notification.NotificationService; 5 | import com.vitco.app.settings.VitcoSettings; 6 | 7 | /** 8 | * Abstract class that defines methods add Data Change Listeners. 9 | */ 10 | public abstract class ListenerData implements ListenerDataInterface { 11 | protected final NotificationService notifier = new NotificationService(); 12 | 13 | @Override 14 | public final void addDataChangeListener(DataChangeListener dcl) { 15 | synchronized (VitcoSettings.SYNC) { 16 | notifier.add(dcl); 17 | } 18 | } 19 | 20 | @Override 21 | public final void removeDataChangeListener(DataChangeListener dcl) { 22 | synchronized (VitcoSettings.SYNC) { 23 | notifier.remove(dcl); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/ListenerDataInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data; 2 | 3 | import com.vitco.app.core.data.notification.DataChangeListener; 4 | 5 | /** 6 | * Data Listener interface. 7 | * 8 | * Implements methods that allow setting of data change listeners. 9 | */ 10 | public interface ListenerDataInterface { 11 | // add a data change listener 12 | void addDataChangeListener(DataChangeListener dcl); 13 | // remove a data change listener 14 | void removeDataChangeListener(DataChangeListener dcl); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/VoxelHighlightingInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data; 2 | 3 | import java.awt.*; 4 | 5 | /** 6 | * Functionality for voxel highlighting and selection of voxels. 7 | */ 8 | public interface VoxelHighlightingInterface { 9 | // highlight a voxel 10 | void highlightVoxel(int[] pos); 11 | // retrieve highlighted voxel 12 | int[] getHighlightedVoxel(); 13 | // remove all highliths 14 | void removeVoxelHighlights(); 15 | 16 | int[] getVoxelSelectionShift(); 17 | 18 | void setVoxelSelectionShift(int x, int y, int z); 19 | 20 | void setOutlineBox(String key, int[][] rect); 21 | 22 | int[][][] getOutlineBoxes(); 23 | 24 | void setSelectionRect(Rectangle selectionRect); 25 | 26 | Rectangle getSelectionRect(); 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/container/ExtendedLine.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.container; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * A line that connects two ExtendedVectors (points). 7 | * 8 | * Reference to the points is by id. 9 | */ 10 | public class ExtendedLine implements Serializable { 11 | private static final long serialVersionUID = 1L; 12 | 13 | public final int point1; 14 | public final int point2; 15 | public ExtendedLine(int point1, int point2) { 16 | this.point1 = point1; 17 | this.point2 = point2; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/container/ExtendedVector.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.container; 2 | 3 | import com.threed.jpct.SimpleVector; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * Extended Vector that has in addition to a SimpleVector an id. 9 | * 10 | * Also defines equality method: true iff same position and id. 11 | */ 12 | public final class ExtendedVector extends SimpleVector implements Serializable { 13 | private static final long serialVersionUID = 1L; 14 | 15 | public final int id; 16 | public ExtendedVector(float x, float y, float z, int id) { 17 | super(x, y, z); 18 | this.id = id; 19 | } 20 | 21 | public ExtendedVector(SimpleVector pos, Integer id) { 22 | super(pos); 23 | this.id = id; 24 | } 25 | 26 | // clone constructor 27 | public ExtendedVector(ExtendedVector extendedVector) { 28 | this(extendedVector, extendedVector.id); 29 | } 30 | 31 | @Override 32 | public boolean equals(Object obj) { 33 | boolean result = false; 34 | if (obj instanceof ExtendedVector) { 35 | ExtendedVector extendedVector = (ExtendedVector)obj; 36 | if (this.x == extendedVector.x && this.y == extendedVector.y && 37 | this.z == extendedVector.z && this.id == extendedVector.id) { 38 | result = true; 39 | } 40 | } 41 | return result; 42 | } 43 | 44 | @Override 45 | public int hashCode() { 46 | return id + super.hashCode(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/container/Frame.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.container; 2 | 3 | import java.io.Serializable; 4 | import java.util.HashMap; 5 | 6 | /** 7 | * Defines an animation frame. Points that are different from the main frame are set. 8 | */ 9 | public class Frame implements Serializable { 10 | private static final long serialVersionUID = 1L; 11 | 12 | // the current name 13 | private String name; 14 | 15 | // constructor 16 | public Frame(String name) { 17 | this.name = name; 18 | } 19 | 20 | // get name 21 | public final String getName() { 22 | return name; 23 | } 24 | 25 | // set name 26 | public final void setName(String name) { 27 | this.name = name; 28 | } 29 | 30 | // the points that are moved 31 | private final HashMap points = new HashMap(); 32 | 33 | // sets a point 34 | public final void setPoint(int id, ExtendedVector point) { 35 | points.put(id, point); 36 | } 37 | 38 | // return a point, null if not set 39 | public final ExtendedVector getPoint(int id) { 40 | return points.get(id); 41 | } 42 | 43 | // remove a point 44 | public void removePoint(int id) { 45 | points.remove(id); 46 | } 47 | 48 | // get all points in this frame 49 | public Integer[] getPoints() { 50 | Integer[] result = new Integer[points.size()]; 51 | points.keySet().toArray(result); 52 | return result; 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/container/VOXELMODE.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.container; 2 | 3 | /** 4 | * The different voxel paint modes 5 | */ 6 | public enum VOXELMODE { 7 | VIEW, DRAW, ERASE, PICKER, COLORCHANGER, SELECT, FLOODFILL 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/history/BasicActionIntent.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.history; 2 | 3 | /** 4 | * Base intent that allows to specify actions further. 5 | */ 6 | public abstract class BasicActionIntent { 7 | // true if this is the first time apply is called 8 | private boolean first_call = true; 9 | // true if this intent is attached to surrounding intents 10 | public final boolean attach; 11 | 12 | // returns true iff first call or before first call of apply 13 | protected final boolean isFirstCall() { 14 | return first_call; 15 | } 16 | 17 | // constructor 18 | protected BasicActionIntent(boolean attach) { 19 | this.attach = attach; 20 | } 21 | 22 | // wrapper: apply action 23 | public final void apply() { 24 | applyAction(); 25 | first_call = false; 26 | } 27 | 28 | // wrapper: unapply action 29 | public final void unapply() { 30 | unapplyAction(); 31 | } 32 | 33 | // action to be defined by child class 34 | protected abstract void applyAction(); 35 | 36 | // action to be defined by child class 37 | protected abstract void unapplyAction(); 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/history/HistoryChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.history; 2 | 3 | /** 4 | * Called when history changes 5 | */ 6 | public interface HistoryChangeListener { 7 | void onChange(T action); 8 | void onFrozenIntent(T actionIntent); 9 | void onFrozenApply(); 10 | void onFrozenUnapply(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/history/VoxelActionIntent.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.history; 2 | 3 | /** 4 | * Basic action intent for Voxels 5 | */ 6 | public abstract class VoxelActionIntent extends BasicActionIntent { 7 | protected VoxelActionIntent(boolean attach) { 8 | super(attach); 9 | } 10 | 11 | // returns the affected voxel positions 12 | public abstract int[][] effected(); 13 | 14 | // return true if this action effects textures 15 | public boolean effectsTexture() { 16 | return false; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/notification/DataChangeAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.notification; 2 | 3 | /** 4 | * Like DataChangeListener but overwrites all methods. 5 | */ 6 | public abstract class DataChangeAdapter implements DataChangeListener { 7 | 8 | @Override 9 | public void onAnimationDataChanged() {} 10 | 11 | @Override 12 | public void onAnimationSelectionChanged() {} 13 | 14 | @Override 15 | public void onVoxelDataChanged() {} 16 | 17 | @Override 18 | public void onVoxelHighlightingChanged() {} 19 | 20 | @Override 21 | public void onVoxelSelectionShiftChanged() {} 22 | 23 | @Override 24 | public void onTextureDataChanged() {} 25 | 26 | @Override 27 | public void onOutlineBoxesChanged() {} 28 | 29 | @Override 30 | public void onSelectionRectChanged() {} 31 | 32 | @Override 33 | public void onLayerStateChanged() {} 34 | 35 | @Override 36 | public void onFrozenUndo() {} 37 | 38 | @Override 39 | public void onFrozenRedo() {} 40 | 41 | @Override 42 | public void onFrozenAction() {} 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/notification/DataChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.notification; 2 | 3 | /** 4 | * A data change listener interface for the whole data container. 5 | */ 6 | public interface DataChangeListener { 7 | void onAnimationDataChanged(); 8 | void onAnimationSelectionChanged(); 9 | void onVoxelDataChanged(); 10 | void onVoxelHighlightingChanged(); 11 | void onVoxelSelectionShiftChanged(); 12 | void onTextureDataChanged(); 13 | void onOutlineBoxesChanged(); 14 | void onSelectionRectChanged(); 15 | void onLayerStateChanged(); 16 | void onFrozenUndo(); 17 | void onFrozenRedo(); 18 | void onFrozenAction(); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/data/notification/NotificationServiceInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.data.notification; 2 | 3 | /** 4 | * Notification Service, deals with and notifies listeners. 5 | */ 6 | public interface NotificationServiceInterface extends DataChangeListener { 7 | // add a listener 8 | void add(DataChangeListener dcl); 9 | 10 | // remove a listener 11 | void remove(DataChangeListener dcl); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/modes/AnimationAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.modes; 2 | 3 | import com.vitco.app.core.container.DrawContainer; 4 | 5 | /** 6 | * Manages the mouse events for animation interaction depending on the currently selected tool. 7 | */ 8 | public class AnimationAdapter extends AbstractAdapter { 9 | 10 | // constructor 11 | public AnimationAdapter(DrawContainer container) { 12 | super(container); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/modes/VoxelAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.modes; 2 | 3 | import com.vitco.app.core.container.DrawContainer; 4 | 5 | /** 6 | * Manages the mouse events for voxel interaction depending on the currently selected tool. 7 | */ 8 | public class VoxelAdapter extends AbstractAdapter { 9 | 10 | // constructor 11 | public VoxelAdapter(DrawContainer container) { 12 | super(container); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/core/modes/tools/AbstractAnimationTool.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.core.modes.tools; 2 | 3 | import com.vitco.app.core.container.DrawContainer; 4 | 5 | /** 6 | * Abstract of a animation tool that can be used to alter a animation data. 7 | */ 8 | public abstract class AbstractAnimationTool extends AbstractBasicTool { 9 | 10 | // constructor 11 | public AbstractAnimationTool(DrawContainer container, int side) { 12 | super(container, side); 13 | } 14 | 15 | @Override 16 | protected final void softCleanUp() { 17 | data.highlightPoint(-1); 18 | } 19 | 20 | @Override 21 | protected final boolean allowDrag() { 22 | return data.getHighlightedPoint() != -1; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/export/generic/container/PlaneMaterial.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.export.generic.container; 2 | 3 | import java.awt.*; 4 | 5 | /** 6 | * object that holds plane material information 7 | * this is not only color / texture but also how the texture is 8 | * used (if this material has texture) 9 | */ 10 | 11 | public class PlaneMaterial { 12 | public final Color color; 13 | public final Integer textureId; 14 | public final int rotation; 15 | public final boolean flip; 16 | public final boolean hasTexture; 17 | public final int orientation; 18 | 19 | public PlaneMaterial(Color color, Integer textureId, int rotation, boolean flip, int orientation) { 20 | this.color = color; 21 | this.textureId = textureId; 22 | this.rotation = rotation; 23 | this.flip = flip; 24 | this.hasTexture = textureId != null; 25 | this.orientation = orientation; 26 | } 27 | 28 | // serves as a unique identifier for this material 29 | @Override 30 | public String toString() { 31 | return color.getRGB() + "_" + 32 | (textureId == null ? "null" : textureId) + "_" + 33 | rotation + "_" + 34 | (flip ? "1" : "0"); 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/export/generic/container/TexTriCornerInfo.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.export.generic.container; 2 | 3 | /** 4 | * Abstract class that holds corner information for a TexTriangle 5 | */ 6 | public abstract class TexTriCornerInfo { 7 | // string representation 8 | public abstract String toString(boolean useInt); 9 | @Override 10 | public String toString() { 11 | return toString(false); 12 | } 13 | 14 | // making sure these will be overwritten 15 | // Note: two info objects should be equal if they represent the same data 16 | @Override 17 | public abstract boolean equals(Object o); 18 | @Override 19 | public abstract int hashCode(); 20 | 21 | // the manager of this tex triangle point 22 | protected final TexTriangleManager manager; 23 | 24 | // constructor 25 | public TexTriCornerInfo(TexTriangleManager manager) { 26 | this.manager = manager; 27 | } 28 | 29 | // get the id of this info object 30 | public abstract int getId(); 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/export/generic/container/TexTriUV.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.export.generic.container; 2 | 3 | import java.util.Arrays; 4 | 5 | /** 6 | * UV of a textured triangle. 7 | */ 8 | public class TexTriUV extends TexTriCornerInfo { 9 | // uv values 10 | private final float[] uv = new float[2]; 11 | 12 | // constructor 13 | public TexTriUV(float u, float v, TexTriangleManager manager) { 14 | super(manager); 15 | uv[0] = u; 16 | uv[1] = v; 17 | manager.addUV(this); 18 | } 19 | 20 | // ----------------- 21 | 22 | // set this uv 23 | public final void set(float u, float v) { 24 | uv[0] = u; 25 | uv[1] = v; 26 | manager.invalidateUVs(); 27 | } 28 | 29 | // get the coordinates of this point 30 | public final float[] getUV() { 31 | return uv.clone(); 32 | } 33 | 34 | // -------------- 35 | 36 | @Override 37 | public final int getId() { 38 | return manager.getUVId(this); 39 | } 40 | 41 | @Override 42 | public boolean equals(Object o) { 43 | if (this == o) return true; 44 | if (o == null || getClass() != o.getClass()) return false; 45 | TexTriUV that = (TexTriUV) o; 46 | return Arrays.equals(uv, that.uv); 47 | 48 | } 49 | 50 | @Override 51 | public final int hashCode() { 52 | return Arrays.hashCode(uv); 53 | } 54 | 55 | @Override 56 | public final String toString(boolean useInt) { 57 | if (useInt) { 58 | return Math.round(uv[0]) + " " + Math.round(uv[1]); 59 | } else { 60 | return uv[0] + " " + uv[1]; 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/export/generic/container/UVPoint.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.export.generic.container; 2 | 3 | /** 4 | * Represents a UV point (for texture coordinates). 5 | */ 6 | public class UVPoint { 7 | public final int id; 8 | public final String floatPos; // two points, separated by space 9 | public UVPoint(int id, float[] floatPos, 10 | boolean plusx, boolean plusy, 11 | float interpx, float interpy) { 12 | this.id = id; 13 | this.floatPos = (floatPos[0] + (plusx ? interpx : -interpx)) + " " + 14 | (floatPos[1] + (plusy ? interpy : -interpy)); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/export/generic/container/Vertex.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.export.generic.container; 2 | 3 | /** 4 | * Definition of a vertex for Collada Export. 5 | */ 6 | public final class Vertex { 7 | // id of this vertex 8 | private int id; 9 | 10 | // position of this vertex 11 | public final float x; 12 | public final float y; 13 | public final float z; 14 | // string representation of the position 15 | private final String toString; 16 | 17 | // constructor 18 | public Vertex(float x, float y, float z) { 19 | this.x = x; 20 | this.y = y; 21 | this.z = z; 22 | toString = x + "_" + y + "_" + z; 23 | } 24 | 25 | // set the id of this vertex 26 | public void setId(int id) { 27 | this.id = id; 28 | } 29 | // get the id of this vertex 30 | public int getId() { 31 | return id; 32 | } 33 | 34 | 35 | // string representation of this vector (only position) 36 | @Override 37 | public String toString() { 38 | return toString; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/ExtendedDockableBarDockableHolder.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout; 2 | 3 | import com.jidesoft.action.DefaultDockableBarDockableHolder; 4 | 5 | import java.awt.*; 6 | 7 | /** 8 | * Fixes bug with extended state of undecorated window (windows task bar is hidden). 9 | */ 10 | public class ExtendedDockableBarDockableHolder extends DefaultDockableBarDockableHolder { 11 | private Rectangle maxBounds; 12 | 13 | // constructor 14 | public ExtendedDockableBarDockableHolder(String title) { 15 | super(title); 16 | maxBounds = null; 17 | } 18 | 19 | public Rectangle getMaximizedBounds() { 20 | return(maxBounds); 21 | } 22 | 23 | public synchronized void setMaximizedBounds(Rectangle maxBounds) { 24 | this.maxBounds = maxBounds; 25 | super.setMaximizedBounds(maxBounds); 26 | } 27 | 28 | public synchronized void setExtendedState(int state) { 29 | if (maxBounds == null && 30 | (state & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH) { 31 | Insets screenInsets = getToolkit().getScreenInsets(getGraphicsConfiguration()); 32 | Rectangle screenSize = getGraphicsConfiguration().getBounds(); 33 | Rectangle maxBounds = new Rectangle(screenInsets.left + screenSize.x, 34 | screenInsets.top + screenSize.y, 35 | screenSize.x + screenSize.width - screenInsets.right - screenInsets.left, 36 | screenSize.y + screenSize.height - screenInsets.bottom - screenInsets.top); 37 | super.setMaximizedBounds(maxBounds); 38 | } 39 | 40 | super.setExtendedState(state); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/bars/BarLinkagePrototype.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.bars; 2 | 3 | import com.jidesoft.action.CommandMenuBar; 4 | import com.vitco.app.layout.content.menu.MenuLogicInterface; 5 | import com.vitco.app.manager.menu.MenuGeneratorInterface; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | 8 | import java.awt.*; 9 | 10 | /** 11 | * Prototype of class that links bar to content. 12 | */ 13 | public abstract class BarLinkagePrototype { 14 | // constructs the bar (with content) 15 | public abstract CommandMenuBar buildBar(String key, Frame frame); 16 | // var & setter 17 | protected MenuGeneratorInterface menuGenerator; 18 | @Autowired(required = true) 19 | public final void setMenuGenerator(MenuGeneratorInterface menuGenerator) { 20 | this.menuGenerator = menuGenerator; 21 | } 22 | // var & setter 23 | protected MenuLogicInterface menuLogic; 24 | public final void setMenuLogic(MenuLogicInterface menuLogic) { 25 | this.menuLogic = menuLogic; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/bars/OptionBarLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.bars; 2 | 3 | import com.jidesoft.action.CommandMenuBar; 4 | 5 | import java.awt.*; 6 | 7 | /** 8 | * the tool bar, uses menu generator to load content from file 9 | * 10 | * defines interactions (from xml) 11 | */ 12 | public class OptionBarLinkage extends BarLinkagePrototype { 13 | 14 | @Override 15 | public final CommandMenuBar buildBar(String key, final Frame frame) { 16 | CommandMenuBar bar = new CommandMenuBar(key); 17 | 18 | // build the toolbar 19 | menuGenerator.buildMenuFromXML(bar, "com/vitco/app/layout/bars/option_bar.xml"); 20 | 21 | // register the logic for this menu 22 | menuLogic.registerLogic(frame); 23 | 24 | return bar; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/bars/ToolBarLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.bars; 2 | 3 | import com.jidesoft.action.CommandMenuBar; 4 | 5 | import java.awt.*; 6 | 7 | /** 8 | * the tool bar, uses menu generator to load content from file 9 | * 10 | * defines interactions (from xml) 11 | */ 12 | public class ToolBarLinkage extends BarLinkagePrototype { 13 | 14 | @Override 15 | public final CommandMenuBar buildBar(String key, final Frame frame) { 16 | CommandMenuBar bar = new CommandMenuBar(key); 17 | 18 | // build the toolbar 19 | menuGenerator.buildMenuFromXML(bar, "com/vitco/app/layout/bars/tool_bar.xml"); 20 | 21 | // register the logic for this menu 22 | menuLogic.registerLogic(frame); 23 | 24 | return bar; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/bars/option_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | 15 | 20 | 21 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/bars/rotatex.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/bars/rotatey.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/bars/rotatez.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/JCustomScrollPane.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content; 2 | 3 | import com.vitco.app.settings.VitcoSettings; 4 | 5 | import javax.swing.*; 6 | import java.awt.*; 7 | 8 | /** 9 | * A custom JScrollPane that unifies the style for the program. 10 | */ 11 | public class JCustomScrollPane extends JScrollPane { 12 | 13 | // initialize the scroll pane 14 | private void init() { 15 | this.setBackground(VitcoSettings.DEFAULT_SCROLL_PANE_BG_COLOR); 16 | this.setBorder(BorderFactory.createLineBorder(VitcoSettings.DEFAULT_BORDER_COLOR)); 17 | } 18 | 19 | // ================ 20 | // below are constructors 21 | 22 | public JCustomScrollPane(Component view, int vsbPolicy, int hsbPolicy) { 23 | super(view, vsbPolicy, hsbPolicy); 24 | init(); 25 | } 26 | 27 | public JCustomScrollPane(String name, Component view) { 28 | super(view); 29 | init(); 30 | this.setName(name); 31 | } 32 | 33 | public JCustomScrollPane(int vsbPolicy, int hsbPolicy) { 34 | super(vsbPolicy, hsbPolicy); 35 | init(); 36 | } 37 | 38 | public JCustomScrollPane() { 39 | init(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/coloradjuster/ColorAdjusterViewInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.coloradjuster; 2 | 3 | import com.vitco.app.manager.lang.LangSelectorInterface; 4 | 5 | import javax.swing.*; 6 | import java.awt.*; 7 | 8 | /** 9 | * Interface for the content for the color adjuster frame. 10 | */ 11 | public interface ColorAdjusterViewInterface { 12 | void setLangSelector(LangSelectorInterface langSelector); 13 | 14 | JComponent build(Frame frame); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/coloradjuster/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/colorchooser/basic/ColorChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.colorchooser.basic; 2 | 3 | /** 4 | * Listens to color changes (ColorChooserPrototype( 5 | */ 6 | public interface ColorChangeListener { 7 | void colorChanged(float[] hsb); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/colorchooser/basic/ColorChooserPrototype.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.colorchooser.basic; 2 | 3 | import javax.swing.*; 4 | import java.util.ArrayList; 5 | 6 | /** 7 | * A prototype for the all color chooser. 8 | */ 9 | public abstract class ColorChooserPrototype extends JPanel { 10 | private final ArrayList listeners = new ArrayList(); 11 | 12 | // notify all listeners 13 | protected final void notifyListeners(float[] hsb) { 14 | for (ColorChangeListener ccl : listeners) { 15 | ccl.colorChanged(hsb); 16 | } 17 | } 18 | 19 | // add a listener 20 | public final void addColorChangeListener(ColorChangeListener ccl) { 21 | listeners.add(ccl); 22 | } 23 | 24 | // remove a listener 25 | public final void removeColorChangeListener(ColorChangeListener ccl) { 26 | listeners.remove(ccl); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/colorchooser/basic/Settings.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.colorchooser.basic; 2 | 3 | import com.vitco.app.settings.VitcoSettings; 4 | 5 | import java.awt.*; 6 | 7 | /** 8 | * Used colors for the color chooser tools. 9 | */ 10 | public class Settings { 11 | public static final Color TEXTAREA_BG_COLOR = new Color(60, 60, 60); 12 | public static final Color TEXTAREA_BG_COLOR_FOCUS = new Color(200, 200, 200); 13 | public static final Color TEXTAREA_TEXT_COLOR = new Color(255, 255, 255); 14 | public static final Color TEXTAREA_TEXT_COLOR_FOCUS = new Color(0, 0, 0); 15 | public static final Color TEXTAREA_BORDER_COLOR = new Color(50, 50, 50); 16 | public static final Color BG_COLOR = new Color(80, 80, 80); 17 | public static final Color TEXT_COLOR = new Color(255, 255, 255); 18 | public static final Color SLIDER_BORDER_COLOR = new Color(50, 50, 50); 19 | public static final Color SLIDER_KNOB_COLOR_TOP = new Color(191, 219, 255);//new Color(158, 158, 158); 20 | public static final Color SLIDER_KNOB_COLOR_BOTTOM = new Color(70, 122, 162);//new Color(102, 102, 102); 21 | public static final Color SLIDER_KNOB_OUTLINE_COLOR = new Color(42, 42, 42); 22 | public static final Color BORDER_COLOR = VitcoSettings.DEFAULT_BORDER_COLOR; 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/colorchooser/components/SliderUI.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.colorchooser.components; 2 | 3 | /** 4 | * Extends Basic slider UI and gives access to some internal variables and functions. 5 | */ 6 | 7 | import javax.swing.*; 8 | import javax.swing.plaf.basic.BasicSliderUI; 9 | import java.awt.*; 10 | 11 | public class SliderUI extends BasicSliderUI { 12 | public SliderUI(JSlider b) { 13 | super(b); 14 | } 15 | 16 | public final JSlider getSlider() { 17 | return slider; 18 | } 19 | 20 | public final Rectangle getContentRect() { 21 | return contentRect; 22 | } 23 | 24 | public final int getXPositionForValue(int value) { 25 | return xPositionForValue(value); 26 | } 27 | 28 | public final int getValueForXPosition(int value) { 29 | return valueForXPosition(value); 30 | } 31 | 32 | public final int getYPositionForValue(int value) { 33 | return yPositionForValue(value); 34 | } 35 | 36 | public final int getValueForYPosition(int value) { 37 | return valueForYPosition(value); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/colorchooser/components/TextChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.colorchooser.components; 2 | 3 | /** 4 | * Used to notify listeners of the changes of a NumberBox. 5 | */ 6 | public interface TextChangeListener { 7 | void onChange(); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/colorchooser/components/ValueChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.colorchooser.components; 2 | 3 | import javax.swing.event.ChangeEvent; 4 | 5 | /** 6 | * Listener for value change events of a ColorSliderPrototype 7 | */ 8 | public interface ValueChangeListener { 9 | void onChange(ChangeEvent e); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/console/ConsoleInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.console; 2 | 3 | import javax.annotation.PostConstruct; 4 | import javax.annotation.PreDestroy; 5 | import java.util.ArrayList; 6 | 7 | /** 8 | * deals with the content of the console 9 | */ 10 | public interface ConsoleInterface { 11 | void addLine(String text); 12 | void addConsoleListener(ConsoleListener consoleListener); 13 | void removeConsoleListener(ConsoleListener consoleListener); 14 | @PostConstruct 15 | void init(); 16 | @PreDestroy 17 | void finish(); 18 | void clear(); 19 | // return all buffered console data 20 | ArrayList getConsoleData(); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/console/ConsoleListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.console; 2 | 3 | /** 4 | * Listener object for console changes. 5 | */ 6 | public interface ConsoleListener { 7 | void lineAdded(String line); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/console/ConsoleViewInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.console; 2 | 3 | import com.vitco.app.layout.frames.FrameLinkagePrototype; 4 | 5 | import javax.swing.*; 6 | 7 | /** 8 | * Displays console content and buttons to user. 9 | */ 10 | public interface ConsoleViewInterface { 11 | JComponent buildConsole(FrameLinkagePrototype frame); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/console/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/layer/LayerViewInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.layer; 2 | 3 | import javax.swing.*; 4 | 5 | /** 6 | * Build the layer menu with options. 7 | */ 8 | public interface LayerViewInterface { 9 | 10 | JPanel build(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/layer/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | 12 | 16 | 20 | 24 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/mainview/MainViewInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.mainview; 2 | 3 | import javax.swing.*; 4 | 5 | /** 6 | * Interface: Creates the mian view instance and attaches the specific user interaction. 7 | */ 8 | public interface MainViewInterface { 9 | public JPanel build(); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/mainview/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 13 | 17 | 18 | 21 | 24 | 27 | 28 | 31 | 34 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/menu/MenuLogicInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.menu; 2 | 3 | import java.awt.*; 4 | 5 | /** 6 | * Handles the menu logic (interface). 7 | */ 8 | public interface MenuLogicInterface { 9 | void registerLogic(final Frame frame); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/shortcut/ShortcutChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.shortcut; 2 | 3 | /** 4 | * Triggered when the global shortcuts change 5 | */ 6 | public interface ShortcutChangeListener { 7 | void onChange(); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/shortcut/ShortcutManagerViewInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.shortcut; 2 | 3 | import javax.swing.*; 4 | 5 | /** 6 | * Handle the displaying and the logic for the editing of shortcuts. (view & link to logic) 7 | */ 8 | public interface ShortcutManagerViewInterface { 9 | // return a JTabbedPane that is autonomous and manages shortcuts 10 | JTabbedPane getEditTables(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/shortcut/ShortcutObject.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.shortcut; 2 | 3 | import javax.swing.*; 4 | import java.io.Serializable; 5 | 6 | /* to manage the data structure */ 7 | 8 | public class ShortcutObject implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | 11 | public String actionName; 12 | public String caption; 13 | public transient JComponent linkedFrame; // no need to serialize the frame 14 | public KeyStroke keyStroke; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/sideview/SideViewInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.sideview; 2 | 3 | import javax.swing.*; 4 | 5 | /** 6 | * Creates one side view instance (one perspective) and the specific user interaction. 7 | */ 8 | public interface SideViewInterface { 9 | JPanel build(); 10 | int getSide(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/sideview/toolbar1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 13 | 16 | 19 | 23 | 24 | 27 | 30 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/sideview/toolbar2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 13 | 16 | 19 | 23 | 24 | 27 | 30 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/sideview/toolbar3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 13 | 16 | 19 | 23 | 24 | 27 | 30 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/texture/TextureManagerInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.content.texture; 2 | 3 | import javax.swing.*; 4 | import java.awt.*; 5 | 6 | /** 7 | * Manages the different Textures. 8 | */ 9 | public interface TextureManagerInterface { 10 | JComponent build(Frame frame); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/content/texture/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | 14 | 18 | 22 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/ColorAdjusterLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.frames; 2 | 3 | import com.vitco.app.layout.content.coloradjuster.ColorAdjusterViewInterface; 4 | import com.vitco.app.layout.frames.custom.CDockableFrame; 5 | import com.vitco.app.manager.action.types.StateActionPrototype; 6 | import com.vitco.app.util.misc.SaveResourceLoader; 7 | 8 | import java.awt.*; 9 | import java.awt.event.ActionEvent; 10 | 11 | /** 12 | * construct the color adjuster frame 13 | */ 14 | public class ColorAdjusterLinkage extends FrameLinkagePrototype { 15 | 16 | private ColorAdjusterViewInterface colorAdjuster; 17 | public void setColorAdjuster(ColorAdjusterViewInterface colorAdjuster) { 18 | this.colorAdjuster = colorAdjuster; 19 | } 20 | 21 | @Override 22 | public CDockableFrame buildFrame(String key, Frame mainFrame) { 23 | // construct frame 24 | frame = new CDockableFrame(key, 25 | new SaveResourceLoader("resource/img/icons/frames/colorAdjuster.png").asIconImage(), 26 | langSelector 27 | ); 28 | updateTitle(); // update the title 29 | 30 | frame.add(colorAdjuster.build(mainFrame)); 31 | 32 | // register action to hide/show this frame and get visible state 33 | actionManager.registerAction("colorAdjuster_state-action_show", new StateActionPrototype() { 34 | @Override 35 | public boolean getStatus() { 36 | return frame.isVisible(); 37 | } 38 | 39 | @Override 40 | public void action(ActionEvent e) { 41 | toggleVisible(); 42 | } 43 | }); 44 | 45 | return frame; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/ConsoleLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.frames; 2 | 3 | import com.vitco.app.layout.content.console.ConsoleViewInterface; 4 | import com.vitco.app.layout.frames.custom.CDockableFrame; 5 | import com.vitco.app.manager.action.types.StateActionPrototype; 6 | import com.vitco.app.util.misc.SaveResourceLoader; 7 | 8 | import java.awt.*; 9 | import java.awt.event.ActionEvent; 10 | 11 | /** 12 | * construct the console frame 13 | */ 14 | public class ConsoleLinkage extends FrameLinkagePrototype { 15 | 16 | // var & setter 17 | private ConsoleViewInterface consoleView; 18 | public final void setConsoleView(ConsoleViewInterface consoleView) { 19 | this.consoleView = consoleView; 20 | } 21 | 22 | @Override 23 | public CDockableFrame buildFrame(String key, Frame mainFrame) { 24 | // construct frame 25 | frame = new CDockableFrame(key, 26 | new SaveResourceLoader("resource/img/icons/frames/console.png").asIconImage() , 27 | langSelector 28 | ); 29 | updateTitle(); // update the title 30 | 31 | frame.add(consoleView.buildConsole(this)); 32 | 33 | // register action to hide/show this frame and get visible state 34 | actionManager.registerAction("console_state-action_show", new StateActionPrototype() { 35 | @Override 36 | public boolean getStatus() { 37 | return frame.isVisible(); 38 | } 39 | 40 | @Override 41 | public void action(ActionEvent e) { 42 | toggleVisible(); 43 | } 44 | }); 45 | 46 | return frame; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/LayerLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.frames; 2 | 3 | import com.vitco.app.layout.content.layer.LayerViewInterface; 4 | import com.vitco.app.layout.frames.custom.CDockableFrame; 5 | import com.vitco.app.manager.action.types.StateActionPrototype; 6 | import com.vitco.app.util.misc.SaveResourceLoader; 7 | 8 | import java.awt.*; 9 | import java.awt.event.ActionEvent; 10 | 11 | /** 12 | * displays layers and defines layer interaction 13 | */ 14 | public class LayerLinkage extends FrameLinkagePrototype { 15 | 16 | // var & setter 17 | private LayerViewInterface layerView; 18 | public final void setLayerView(LayerViewInterface layerView) { 19 | this.layerView = layerView; 20 | } 21 | 22 | @Override 23 | public CDockableFrame buildFrame(String key, Frame mainFrame) { 24 | // construct frame 25 | frame = new CDockableFrame(key, 26 | new SaveResourceLoader("resource/img/icons/frames/layer.png").asIconImage(), 27 | langSelector 28 | ); 29 | updateTitle(); // update the title 30 | 31 | frame.add(layerView.build()); 32 | 33 | // register action to hide/show this frame and get visible state 34 | actionManager.registerAction("layer_state-action_show", new StateActionPrototype() { 35 | @Override 36 | public boolean getStatus() { 37 | return frame.isVisible(); 38 | } 39 | 40 | @Override 41 | public void action(ActionEvent e) { 42 | toggleVisible(); 43 | } 44 | }); 45 | 46 | return frame; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/PersonalLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.frames; 2 | 3 | import com.vitco.app.layout.frames.custom.CDockableFrame; 4 | import com.vitco.app.manager.action.types.StateActionPrototype; 5 | import com.vitco.app.util.misc.SaveResourceLoader; 6 | 7 | import java.awt.*; 8 | import java.awt.event.ActionEvent; 9 | 10 | /** 11 | * construct personal frame (upload, etc) 12 | */ 13 | public class PersonalLinkage extends FrameLinkagePrototype { 14 | @Override 15 | public CDockableFrame buildFrame(String key, Frame mainFrame) { 16 | // construct frame 17 | frame = new CDockableFrame(key, 18 | new SaveResourceLoader("resource/img/icons/frames/personal.png").asIconImage(), 19 | langSelector 20 | ); 21 | updateTitle(); // update the title 22 | 23 | // ... 24 | 25 | // register action to hide/show this frame and get visible state 26 | actionManager.registerAction("personal_state-action_show", new StateActionPrototype() { 27 | @Override 28 | public boolean getStatus() { 29 | return frame.isVisible(); 30 | } 31 | 32 | @Override 33 | public void action(ActionEvent e) { 34 | toggleVisible(); 35 | } 36 | }); 37 | 38 | return frame; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/ShortcutManagerLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.frames; 2 | 3 | import com.vitco.app.layout.content.shortcut.ShortcutManagerViewInterface; 4 | import com.vitco.app.layout.frames.custom.CDockableFrame; 5 | import com.vitco.app.manager.action.types.StateActionPrototype; 6 | import com.vitco.app.util.misc.SaveResourceLoader; 7 | 8 | import java.awt.*; 9 | import java.awt.event.ActionEvent; 10 | 11 | /** 12 | * construct the shortcut manager frame 13 | */ 14 | public class ShortcutManagerLinkage extends FrameLinkagePrototype { 15 | 16 | // var & setter (we only need the shortcutManager in this frame!) 17 | private ShortcutManagerViewInterface shortcutManagerView; 18 | public final void setShortcutManagerView(ShortcutManagerViewInterface shortcutManagerView) { 19 | this.shortcutManagerView = shortcutManagerView; 20 | } 21 | 22 | @Override 23 | public CDockableFrame buildFrame(String key, Frame mainFrame) { 24 | // construct frame 25 | frame = new CDockableFrame(key, 26 | new SaveResourceLoader("resource/img/icons/frames/shortcutManager.png").asIconImage(), 27 | langSelector 28 | ); 29 | updateTitle(); // update the title 30 | 31 | // add the tabbelPane to this frame that manages all the shortcuts 32 | frame.add(shortcutManagerView.getEditTables()); 33 | 34 | // register action to show and hide this frame 35 | actionManager.registerAction("shortcut-mg_state-action_show", new StateActionPrototype() { 36 | @Override 37 | public boolean getStatus() { 38 | return frame.isVisible(); 39 | } 40 | 41 | @Override 42 | public void action(ActionEvent e) { 43 | toggleVisible(); 44 | } 45 | }); 46 | 47 | return frame; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/SideViewLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.frames; 2 | 3 | import com.vitco.app.layout.content.sideview.SideViewInterface; 4 | import com.vitco.app.layout.frames.custom.CDockableFrame; 5 | import com.vitco.app.manager.action.types.StateActionPrototype; 6 | import com.vitco.app.util.misc.SaveResourceLoader; 7 | 8 | import java.awt.*; 9 | import java.awt.event.ActionEvent; 10 | 11 | /** 12 | * construct a side view frame 13 | */ 14 | public class SideViewLinkage extends FrameLinkagePrototype { 15 | 16 | // var & setter 17 | private SideViewInterface sideView; 18 | public final void setSideView(SideViewInterface sideView) { 19 | this.sideView = sideView; 20 | } 21 | 22 | @Override 23 | public CDockableFrame buildFrame(String key, Frame mainFrame) { 24 | // construct frame 25 | frame = new CDockableFrame(key, 26 | new SaveResourceLoader("resource/img/icons/frames/sideView.png").asIconImage(), 27 | langSelector 28 | ); 29 | updateTitle(); // update the title 30 | 31 | frame.add(sideView.build()); 32 | 33 | // register action to hide/show this frame and get visible state 34 | actionManager.registerAction("side-view_state-action_show" + (sideView.getSide()+1), new StateActionPrototype() { 35 | @Override 36 | public boolean getStatus() { 37 | return frame.isVisible(); 38 | } 39 | 40 | @Override 41 | public void action(ActionEvent e) { 42 | toggleVisible(); 43 | } 44 | }); 45 | 46 | return frame; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/SnapshotLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.frames; 2 | 3 | import com.vitco.app.layout.frames.custom.CDockableFrame; 4 | import com.vitco.app.manager.action.types.StateActionPrototype; 5 | import com.vitco.app.util.misc.SaveResourceLoader; 6 | 7 | import java.awt.*; 8 | import java.awt.event.ActionEvent; 9 | 10 | /** 11 | * construct the time line frame 12 | */ 13 | public class SnapshotLinkage extends FrameLinkagePrototype { 14 | @Override 15 | public CDockableFrame buildFrame(String key, Frame mainFrame) { 16 | // construct frame 17 | frame = new CDockableFrame(key, 18 | new SaveResourceLoader("resource/img/icons/frames/snapshot.png").asIconImage(), 19 | langSelector 20 | ); 21 | updateTitle(); // update the title 22 | 23 | // ... 24 | 25 | // register action to hide/show this frame and get visible state 26 | actionManager.registerAction("snapshot_state-action_show", new StateActionPrototype() { 27 | @Override 28 | public boolean getStatus() { 29 | return frame.isVisible(); 30 | } 31 | 32 | @Override 33 | public void action(ActionEvent e) { 34 | toggleVisible(); 35 | } 36 | }); 37 | 38 | return frame; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/TextureManagerLinkage.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.frames; 2 | 3 | import com.vitco.app.layout.content.texture.TextureManagerInterface; 4 | import com.vitco.app.layout.frames.custom.CDockableFrame; 5 | import com.vitco.app.manager.action.types.StateActionPrototype; 6 | import com.vitco.app.util.misc.SaveResourceLoader; 7 | 8 | import java.awt.*; 9 | import java.awt.event.ActionEvent; 10 | 11 | /** 12 | * construct the texture manager frame 13 | */ 14 | public class TextureManagerLinkage extends FrameLinkagePrototype { 15 | 16 | // var & setter 17 | private TextureManagerInterface textureManager; 18 | public final void setTextureManager(TextureManagerInterface textureManager) { 19 | this.textureManager = textureManager; 20 | } 21 | 22 | @Override 23 | public CDockableFrame buildFrame(String key, Frame mainFrame) { 24 | // construct frame 25 | frame = new CDockableFrame(key, 26 | new SaveResourceLoader("resource/img/icons/frames/textureManager.png").asIconImage(), 27 | langSelector 28 | ); 29 | updateTitle(); // update the title 30 | 31 | frame.add(textureManager.build(mainFrame)); 32 | 33 | // register action to hide/show this frame and get visible state 34 | actionManager.registerAction("textureManager_state-action_show", new StateActionPrototype() { 35 | @Override 36 | public boolean getStatus() { 37 | return frame.isVisible(); 38 | } 39 | 40 | @Override 41 | public void action(ActionEvent e) { 42 | toggleVisible(); 43 | } 44 | }); 45 | 46 | return frame; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/custom/FrameGenericJideButton.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.layout.frames.custom; 2 | 3 | import com.jidesoft.swing.JideButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.*; 7 | 8 | public class FrameGenericJideButton extends JideButton { 9 | 10 | public void setIcon(String icon) { 11 | super.setIcon((Icon) UIManager.get(icon)); 12 | } 13 | 14 | public FrameGenericJideButton(String name, String icon, String tooltip) { 15 | super(); 16 | this.setName(name); 17 | this.setIcon(icon); 18 | this.setToolTipText(icon); 19 | this.setMargin(new Insets(5, 10, 5, 10)); 20 | this.setContentAreaFilled(true); 21 | this.setFocusable(false); 22 | this.setToolTipText(tooltip); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/layout/frames/toolbars/colorpalette.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 12 | 15 | 16 | 19 | 22 | 25 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/CubeIndexerTest.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low; 2 | 3 | import org.junit.Test; 4 | 5 | /** 6 | * Test that the mapping is a bijection for the cube. 7 | */ 8 | public class CubeIndexerTest { 9 | 10 | private static boolean testConversion(int x, int y, int z) { 11 | short[] pos = CubeIndexer.getPos(CubeIndexer.getId(new short[]{(short) x, (short) y, (short) z})); 12 | if (!(pos[0] == x && pos[1] == y && pos[2] == z)) { 13 | System.out.println(x + "," + y + "," + z); 14 | System.out.println( 15 | pos[0] + " == " + x + " && " + pos[1] + " == " + y + " && " + pos[2] + " == " + z 16 | ); 17 | return false; 18 | } 19 | return true; 20 | } 21 | 22 | @Test 23 | public void testMapping() throws Exception { 24 | 25 | for (int i = 0; i< 10; i++) { 26 | testConversion(i,2,3); 27 | } 28 | 29 | testConversion(1,2,3); 30 | testConversion(-1,2,3); 31 | testConversion(1,-2,3); 32 | testConversion(1,2,-3); 33 | testConversion(1,-2,-3); 34 | testConversion(-1,2,-3); 35 | testConversion(-1,-2,3); 36 | testConversion(-1,-2,-3); 37 | 38 | short start = -CubeIndexer.radius; 39 | short stop = CubeIndexer.radius; 40 | 41 | for (short x = start; x < stop; x++) { 42 | for (short y = start; y < stop; y++) { 43 | for (short z = start; z < stop; z++) { 44 | assert testConversion(x, y, z); 45 | } 46 | } 47 | } 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/engine/Chunk.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.engine; 2 | 3 | /** 4 | * A chunk of voxel ( e.g. 32 ^ 3 ) 5 | */ 6 | public class Chunk { 7 | protected final static int CHUNK_SIZE = 32; 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/engine/Engine2.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.engine; 2 | 3 | import edu.princeton.cs.algs4.RedBlackBST; 4 | 5 | /** 6 | * Created by flux on 12/16/13. 7 | */ 8 | public class Engine2 { 9 | 10 | private static final class Value { 11 | private final int id; 12 | private final int length; 13 | 14 | private Value(int id, int length) { 15 | 16 | this.id = id; 17 | this.length = length; 18 | } 19 | } 20 | 21 | private RedBlackBST redBlackBST = new RedBlackBST(); 22 | 23 | // ----------------- 24 | 25 | public final void add(int[][] xyzs, VoxelType type) { 26 | // Arrays.sort(xyzs, new Comparator() { 27 | // @Override 28 | // public int compare(int[] o1, int[] o2) { 29 | // int sign = Integer.compare(o1[1], o2[1]); 30 | // if (sign == 0) { 31 | // sign = Integer.compare(o1[2], o2[2]); 32 | // if (sign == 0) { 33 | // return Integer.compare(o1[0], o2[0]); // x difference 34 | // } 35 | // return sign; // z difference 36 | // } 37 | // return sign; // y difference 38 | // } 39 | // }); 40 | 41 | // summarize runs and add them to the tree 42 | // ... 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/engine/VoxelManager.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.engine; 2 | 3 | /** 4 | * Manages all voxel types and can be instantiated to manage collection of voxel. 5 | */ 6 | public class VoxelManager { 7 | 8 | //private static final HashMap<> 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/engine/VoxelType.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.engine; 2 | 3 | import java.awt.*; 4 | 5 | /** 6 | * This describes a voxel type (i.e. a block with very specific properties). 7 | */ 8 | public class VoxelType { 9 | protected int uId = 0; 10 | protected int usedCount = 0; 11 | 12 | 13 | // ----------------- 14 | 15 | 16 | public final Color color; 17 | 18 | public VoxelType(Color color) { 19 | this.color = color; 20 | } 21 | 22 | @Override 23 | public boolean equals(Object o) { 24 | if (this == o) return true; 25 | if (o == null || getClass() != o.getClass()) return false; 26 | 27 | VoxelType voxelType = (VoxelType) o; 28 | 29 | return !(color != null ? !color.equals(voxelType.color) : voxelType.color != null); 30 | 31 | } 32 | 33 | @Override 34 | public int hashCode() { 35 | return color != null ? color.hashCode() : 0; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/hull/HullManagerExtInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.hull; 2 | 3 | import com.threed.jpct.SimpleVector; 4 | 5 | /** 6 | * Interface - Extended functionality for the hull manager 7 | */ 8 | public interface HullManagerExtInterface { 9 | // do a hit test against the voxels in this hull manager 10 | short[] hitTest(SimpleVector position, SimpleVector dir); 11 | 12 | // ================== 13 | 14 | // compute the "outside" of the described object 15 | boolean computeExterior(); 16 | 17 | // fetch the "outside" face of the described object 18 | // into a specific direction. 19 | // Required computeExterior() to be called before working 20 | short[][] getExteriorHull(int direction); 21 | 22 | // fetch the "inside" faces of the described object 23 | // into a specific direction. 24 | // Required computeExterior() to be called before working 25 | short[][] getInteriorHull(int direction); 26 | 27 | // get the empty positions of voxels inside 28 | // Required computeExterior() to be called before working 29 | int[] getEmptyInterior(); 30 | 31 | // get the voxel positions of voxels inside 32 | // Required computeExterior() to be called before working 33 | int[] getFilledInterior(); 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/hull/HullManagerInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.hull; 2 | 3 | import com.threed.jpct.SimpleVector; 4 | import gnu.trove.set.hash.TIntHashSet; 5 | 6 | import java.util.Set; 7 | 8 | /** 9 | * Interface - Efficient way to compute the hull for a group of 10 | * objects in 3D space (with short values as coordinates) 11 | * 12 | * At most one object is expected in any position at any given time. 13 | */ 14 | public interface HullManagerInterface { 15 | 16 | void clear(); 17 | 18 | boolean contains(short[] pos); 19 | 20 | boolean contains(int posId); 21 | 22 | boolean containsBorder(short[] pos, int orientation); 23 | 24 | boolean containsBorder(int posId, int orientation); 25 | 26 | int[] getPosIds(); 27 | 28 | // obtain object by position 29 | T get(short[] pos); 30 | 31 | // add an object to the hull finder 32 | public void update(short[] pos, T object); 33 | 34 | // remove an object from this hull finder 35 | void update(int posId, T object); 36 | 37 | // remove an object from this hull finder 38 | public boolean clearPosition(short[] pos); 39 | 40 | // remove an object from this hull finder 41 | boolean clearPosition(int posId); 42 | 43 | // get the hull additions (in direction 0-5) 44 | Set getHullAdditions(int direction); 45 | 46 | // get the hull removals (in direction 0-5) 47 | Set getHullRemovals(int direction); 48 | 49 | // get the current hull 50 | short[][] getHull(int direction); 51 | 52 | // get the visible voxel ids 53 | TIntHashSet getVisibleVoxelsIds(); 54 | 55 | // get the current hull as ids 56 | int[] getHullAsIds(int direction); 57 | 58 | // get the outline of all voxels into one direction 59 | SimpleVector[][] getOutline(int direction); 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/hull/MinMaxTrackerTest.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.hull; 2 | 3 | import org.junit.Test; 4 | 5 | /** 6 | * Test the functionality. 7 | */ 8 | public class MinMaxTrackerTest { 9 | @Test 10 | public void test() throws Exception { 11 | MinMaxTracker tracker = new MinMaxTracker(); 12 | 13 | assert tracker.getMin() == Short.MAX_VALUE; 14 | assert tracker.getMax() == Short.MIN_VALUE; 15 | 16 | tracker.add((short) 1); 17 | tracker.add((short) 2); 18 | tracker.add((short) 3); 19 | tracker.add((short) 4); 20 | 21 | assert tracker.getMin() == 1; 22 | assert tracker.getMax() == 4; 23 | 24 | tracker.remove((short) 2); 25 | tracker.remove((short) 3); 26 | 27 | assert tracker.getMin() == 1; 28 | assert tracker.getMax() == 4; 29 | 30 | tracker.add((short) 2); 31 | tracker.add((short) 2); 32 | tracker.remove((short) 4); 33 | tracker.remove((short) 1); 34 | 35 | assert tracker.getMin() == 2; 36 | assert tracker.getMax() == 2; 37 | 38 | tracker.remove((short) 2); 39 | 40 | assert tracker.getMin() == 2; 41 | assert tracker.getMax() == 2; 42 | 43 | tracker.remove((short) 2); 44 | 45 | assert tracker.getMin() == Short.MAX_VALUE; 46 | assert tracker.getMax() == Short.MIN_VALUE; 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/triangulate/Grid2TriNaive.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.triangulate; 2 | 3 | import org.poly2tri.geometry.polygon.PolygonPoint; 4 | import org.poly2tri.triangulation.delaunay.DelaunayTriangle; 5 | 6 | import java.util.ArrayList; 7 | 8 | /** 9 | * A naive triangulation that simply puts two triangles for every voxel side. 10 | */ 11 | public class Grid2TriNaive { 12 | 13 | // compute the triangulation 14 | public static ArrayList triangulate(boolean[][] bits) { 15 | ArrayList result = new ArrayList(); 16 | int lenY = bits[0].length; 17 | for (int x = 0; x < bits.length; x++) { 18 | for (int y = 0; y < lenY; y++) { 19 | if (bits[x][y]) { 20 | result.add(new DelaunayTriangle(new PolygonPoint(x, y), new PolygonPoint(x + 1, y), new PolygonPoint(x, y + 1))); 21 | result.add(new DelaunayTriangle(new PolygonPoint(x, y + 1), new PolygonPoint(x + 1, y), new PolygonPoint(x + 1, y + 1))); 22 | } 23 | } 24 | } 25 | return result; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/triangulate/tests/TestGrid2TriGreedyOptimal.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.triangulate.tests; 2 | 3 | import com.vitco.app.low.triangulate.Grid2TriGreedyOptimal; 4 | import org.junit.Test; 5 | import org.poly2tri.triangulation.delaunay.DelaunayTriangle; 6 | 7 | import java.io.IOException; 8 | import java.util.ArrayList; 9 | 10 | /** 11 | * Tests for Grid2TriGreedyOptimal 12 | */ 13 | public class TestGrid2TriGreedyOptimal extends AbstractTriangulationTest { 14 | 15 | @Override 16 | ArrayList triangulate(boolean[][] data) { 17 | return Grid2TriGreedyOptimal.triangulate(data); 18 | } 19 | 20 | // do many tests and check against different conditions 21 | @Test 22 | public void testTriangulation() throws IOException { 23 | super.testTriangulation(1, 10000, false, false); 24 | } 25 | 26 | // do a test case 27 | @Test 28 | public void testTriangulationCase() throws IOException { 29 | super.testTriangulationCase("test.png", "out.png", 20, false); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/triangulate/tests/TestGrid2TriMono.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.triangulate.tests; 2 | 3 | import com.vitco.app.low.triangulate.Grid2TriMono; 4 | import org.junit.Test; 5 | import org.poly2tri.triangulation.delaunay.DelaunayTriangle; 6 | 7 | import java.io.IOException; 8 | import java.util.ArrayList; 9 | 10 | /** 11 | * Test class for Grid2TriMono triangulation 12 | */ 13 | public class TestGrid2TriMono extends AbstractTriangulationTest { 14 | 15 | @Override 16 | ArrayList triangulate(boolean[][] data) { 17 | return Grid2TriMono.triangulate(data, false); 18 | } 19 | 20 | // do many tests and check against different conditions 21 | @Test 22 | public void testTriangulation() throws IOException { 23 | super.testTriangulation(1, 10000, false, false); 24 | } 25 | 26 | // do a test case 27 | @Test 28 | public void testTriangulationCase() throws IOException { 29 | super.testTriangulationCase("test.png", "out.png", 20, false); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/triangulate/tests/TestGrid2TriMonoSave.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.triangulate.tests; 2 | 3 | import com.vitco.app.low.triangulate.Grid2TriMono; 4 | import org.junit.Test; 5 | import org.poly2tri.triangulation.delaunay.DelaunayTriangle; 6 | 7 | import java.io.IOException; 8 | import java.util.ArrayList; 9 | 10 | /** 11 | * Test class for Grid2TriMono triangulation 12 | */ 13 | public class TestGrid2TriMonoSave extends AbstractTriangulationTest { 14 | 15 | @Override 16 | ArrayList triangulate(boolean[][] data) { 17 | return Grid2TriMono.triangulate(data, true); 18 | } 19 | 20 | // do many tests and check against different conditions 21 | @Test 22 | public void testTriangulation() throws IOException { 23 | super.testTriangulation(1, 10000, false, true); 24 | } 25 | 26 | // do a test case 27 | @Test 28 | public void testTriangulationCase() throws IOException { 29 | super.testTriangulationCase("test.png", "out.png", 20, false); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/triangulate/tests/TestGrid2TriNaiveGreedy.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.triangulate.tests; 2 | 3 | import com.vitco.app.low.triangulate.Grid2TriNaiveGreedy; 4 | import org.junit.Test; 5 | import org.poly2tri.triangulation.delaunay.DelaunayTriangle; 6 | 7 | import java.io.IOException; 8 | import java.util.ArrayList; 9 | 10 | /** 11 | * Test class for Grid2TriNaiveGreedy 12 | */ 13 | public class TestGrid2TriNaiveGreedy extends AbstractTriangulationTest { 14 | 15 | @Override 16 | ArrayList triangulate(boolean[][] data) { 17 | return Grid2TriNaiveGreedy.triangulate(data); 18 | } 19 | 20 | // do many tests and check against different conditions 21 | @Test 22 | public void testTriangulation() throws IOException { 23 | super.testTriangulation(1, 10000, false, false); 24 | } 25 | 26 | // do a test case 27 | @Test 28 | public void testTriangulationCase() throws IOException { 29 | super.testTriangulationCase("test.png", "out.png", 20, false); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/low/triangulate/tests/TestGrid2TriPolyFast.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.low.triangulate.tests; 2 | 3 | import com.vitco.app.low.triangulate.Grid2TriPolyFast; 4 | import com.vitco.app.low.triangulate.util.Grid2PolyHelper; 5 | import org.junit.Test; 6 | import org.poly2tri.triangulation.delaunay.DelaunayTriangle; 7 | 8 | import java.io.IOException; 9 | import java.util.ArrayList; 10 | 11 | /** 12 | * - Testing Poly2Tri and in particular new conversion "voxel -> polygon" by doing in depth validation of created geometry. 13 | * 14 | * - Manual testing internal implementation against the external implementation of "voxel -> polygon". 15 | * 16 | */ 17 | public class TestGrid2TriPolyFast extends AbstractTriangulationTest { 18 | 19 | @Override 20 | ArrayList triangulate(boolean[][] data) { 21 | return Grid2TriPolyFast.triangulate(Grid2PolyHelper.convert(data)); 22 | } 23 | 24 | // do many tests and check against different conditions 25 | @Test 26 | public void testTriangulation() throws IOException { 27 | super.testTriangulation(1, 10000, false, true); 28 | } 29 | 30 | // do a test case 31 | @Test 32 | public void testTriangulationCase() throws IOException { 33 | super.testTriangulationCase("test.png", "out.png", 20, false); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/action/ActionGroupManagerInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.action; 2 | 3 | import com.vitco.app.manager.action.types.StateActionPrototype; 4 | 5 | /** 6 | * Handles groups of actions that belong together and interfere with each other. 7 | * 8 | * E.g. pressing one tool button will unselect another. 9 | */ 10 | public interface ActionGroupManagerInterface { 11 | // add to group 12 | void addAction(String groupName, String actionName, StateActionPrototype action); 13 | 14 | // refresh all action states 15 | void refreshGroup(String groupName); 16 | 17 | // register group actions 18 | void registerGroup(String groupName); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/action/ActionManager.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.action; 2 | 3 | import javax.swing.*; 4 | import java.awt.event.ActionEvent; 5 | 6 | /** 7 | * maps strings to actions, allows for checks (unused actions, undeclared actions) 8 | */ 9 | public class ActionManager extends ActionManagerPrototype { 10 | @Override 11 | protected AbstractAction getDummyAction(final String actionName) { 12 | return new AbstractAction() { 13 | @Override 14 | public final void actionPerformed(ActionEvent e) { 15 | System.out.println("Dummy Action \"" + actionName + "\""); 16 | } 17 | }; 18 | } 19 | 20 | @Override 21 | protected String getClassName() { 22 | return "AbstractAction"; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/action/ActionManagerInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.action; 2 | 3 | /** 4 | * maps strings to actions, allows for checks (unused actions, undeclared actions) 5 | */ 6 | public interface ActionManagerInterface { 7 | // these methods are to detect errors! 8 | boolean performValidityCheck(); 9 | void registerActionIsUsed(String key); 10 | // the core methods 11 | void registerAction(String key, T action); 12 | // get action for key 13 | T getAction(String key); 14 | // retrieve keys for an action 15 | String[] getActionKeys(T action); 16 | 17 | void performWhenActionIsReady(String action, Runnable thread); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/action/ChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.action; 2 | 3 | /** 4 | * So other objects can subscribe and get notified. Used by StateActionPrototype. 5 | */ 6 | public interface ChangeListener { 7 | void actionFired(boolean status); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/action/ComplexActionManager.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.action; 2 | 3 | import javax.swing.*; 4 | import java.awt.*; 5 | 6 | /** 7 | * Manages complex actions, which are custom arrangements of components to execute complex actions. 8 | * These are usually shown in JideSplitButtons. 9 | */ 10 | public class ComplexActionManager extends ActionManagerPrototype { 11 | 12 | @Override 13 | protected Component getDummyAction(String actionName) { 14 | return new JLabel("Complex Action Dummy: " + actionName); 15 | } 16 | 17 | @Override 18 | protected String getClassName() { 19 | return "Component"; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/action/types/StateActionPrototype.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.action.types; 2 | 3 | import com.vitco.app.manager.action.ChangeListener; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.util.ArrayList; 8 | 9 | /** 10 | * This implements AbstractAction and can be queried for status (true or false) 11 | */ 12 | public abstract class StateActionPrototype extends AbstractAction { 13 | // listener 14 | protected final ArrayList listener = new ArrayList(); 15 | public final void addChangeListener(ChangeListener changeListener) { 16 | listener.add(changeListener); // add 17 | changeListener.actionFired(getStatus()); // update already directly 18 | } 19 | 20 | public final void refresh() { 21 | // now we notify all listeners 22 | boolean status = getStatus(); 23 | for (ChangeListener actionListener : listener) { 24 | actionListener.actionFired(status); 25 | } 26 | } 27 | 28 | @Override 29 | public final void actionPerformed(ActionEvent e) { 30 | action(e); // first the custom action is executed 31 | refresh(); 32 | } 33 | 34 | public abstract void action(ActionEvent e); 35 | public abstract boolean getStatus(); 36 | 37 | public boolean isEnabled() { 38 | return getStatus(); 39 | } 40 | public boolean isChecked() { 41 | return getStatus(); 42 | } 43 | public boolean isVisible() { 44 | return getStatus(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/action/types/SwitchActionPrototype.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.action.types; 2 | 3 | import javax.swing.*; 4 | import java.awt.event.ActionEvent; 5 | 6 | public abstract class SwitchActionPrototype extends AbstractAction { 7 | 8 | @Override 9 | public void actionPerformed(ActionEvent e) { 10 | switchOn(); 11 | } 12 | 13 | public abstract void switchOn(); 14 | public abstract void switchOff(); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/async/AsyncAction.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.async; 2 | 3 | /** 4 | * Action to be performed by AsyncActionManager 5 | */ 6 | public abstract class AsyncAction implements Runnable { 7 | 8 | public abstract void performAction(); 9 | 10 | @Override 11 | public final void run() { 12 | performAction(); 13 | } 14 | 15 | // name of this AsyncAction 16 | public final String name; 17 | 18 | // can be overriden to delay execution of this AsyncAction 19 | public boolean ready() { 20 | return true; 21 | } 22 | 23 | // giving a name to an async action guarantees that 24 | // there are not a lot of delayed actions with the 25 | // same name queueing up in the AsyncActionManager 26 | // IMPORTANT: it doesn't enforce this for not delayed actions 27 | public AsyncAction(String name) { 28 | this.name = name; 29 | } 30 | 31 | // once this reaches Integer.MAX_VALUE it will reset to Integer.MIN_VALUE 32 | private static int c = 0; 33 | 34 | public AsyncAction() { 35 | synchronized (AsyncAction.class) { 36 | name = String.valueOf(c++); 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/error/ErrorHandlerInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.error; 2 | 3 | import com.vitco.app.layout.content.console.ConsoleInterface; 4 | import com.vitco.app.manager.lang.LangSelectorInterface; 5 | 6 | /** 7 | * Deals with all the exceptions in the program. Writes them to file and tries to upload 8 | * them to a server. 9 | */ 10 | public interface ErrorHandlerInterface extends Thread.UncaughtExceptionHandler { 11 | void handle(Throwable e); 12 | void setLangSelector(LangSelectorInterface langSelector); 13 | void setDebugReportUrl(String debugReportUrl); 14 | void setConsole(ConsoleInterface console); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/lang/LangSelector.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.lang; 2 | 3 | import com.vitco.app.util.misc.UTF8Control; 4 | 5 | import javax.annotation.PostConstruct; 6 | import java.util.Locale; 7 | import java.util.ResourceBundle; 8 | 9 | /* 10 | * Implementation of LangSelectorInterface 11 | * 12 | * Manages languages. We can set the language and country and the language bundle to be used. 13 | * A value for a key is obtained with getString. Init must be called when everything is set 14 | * correctly. 15 | */ 16 | 17 | public final class LangSelector implements LangSelectorInterface { 18 | private String language; 19 | private String country; 20 | private ResourceBundle rb; 21 | private String defaultFile; 22 | 23 | @PostConstruct 24 | @Override 25 | public void init() { 26 | Locale locale = new Locale(language, country); 27 | rb = ResourceBundle.getBundle(defaultFile, locale, new UTF8Control()); 28 | } 29 | 30 | @Override 31 | public final void setLanguageBundle(String filename) { 32 | this.defaultFile = filename; 33 | } 34 | 35 | @Override 36 | public final void setLanguage(String language) { 37 | this.language = language; 38 | } 39 | 40 | @Override 41 | public final void setCountry(String country) { 42 | this.country = country; 43 | } 44 | 45 | @Override 46 | public String getString(String key) { 47 | if (rb.containsKey(key)) { 48 | return rb.getString(key); 49 | } else { 50 | System.err.println("Error: There is no keyword \"" + key + "\" defined in the language bundle!"); 51 | return ""; 52 | } 53 | } 54 | 55 | @Override 56 | public boolean containsString(String key) { 57 | return rb.containsKey(key); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/lang/LangSelectorInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.lang; 2 | 3 | /* 4 | * Interface 5 | * 6 | * Manages languages. We can set the language and country and the language bundle to be used. 7 | * A value for a key is obtained with getString. Init must be called when everything is set 8 | * correctly. 9 | */ 10 | 11 | public interface LangSelectorInterface { 12 | void setLanguageBundle(String filename); 13 | void setLanguage(String language); 14 | void setCountry(String country); 15 | boolean containsString(String key); 16 | String getString(String key); 17 | void init(); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/menu/MenuGeneratorInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.menu; 2 | 3 | import com.vitco.app.layout.content.shortcut.ShortcutManagerInterface; 4 | import com.vitco.app.manager.action.ActionManager; 5 | import com.vitco.app.manager.action.ComplexActionManager; 6 | import com.vitco.app.manager.error.ErrorHandlerInterface; 7 | import com.vitco.app.manager.lang.LangSelectorInterface; 8 | 9 | import javax.swing.*; 10 | 11 | /** 12 | * Generates menus from xml files and links actions to them (e.g. main menu, tool menu) 13 | */ 14 | public interface MenuGeneratorInterface { 15 | public void setLangSelector(LangSelectorInterface langSel); 16 | public void setActionManager(ActionManager actionManager); 17 | public void buildMenuFromXML(JComponent jComponent, String xmlFile); 18 | public void setErrorHandler(ErrorHandlerInterface errorHandler); 19 | 20 | void setShortcutManager(ShortcutManagerInterface shortcutManager); 21 | 22 | void setComplexActionManager(ComplexActionManager complexActionManager); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/pref/PrefChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.pref; 2 | 3 | /** 4 | * Called when a preference changes 5 | */ 6 | public interface PrefChangeListener { 7 | void onPrefChange(Object newValue); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/pref/PreferencesInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.pref; 2 | 3 | import com.vitco.app.manager.error.ErrorHandlerInterface; 4 | 5 | /** 6 | * Stores & Loads preferences (Integer, String, Object) 7 | * Storing is executed after the PreDestroy of all the other objects. 8 | */ 9 | public interface PreferencesInterface { 10 | public void storeInteger(String key, int value); 11 | public void storeString(String key, String value); 12 | public int loadInteger(String key); 13 | public String loadString(String key); 14 | public void setStorageFile(String filename); 15 | public void save(); 16 | public void load(); 17 | public Object loadObject(String key); 18 | public void storeObject(String key, Object value); 19 | public void setErrorHandler(ErrorHandlerInterface errorHandler); 20 | boolean contains(String key); 21 | 22 | void storeBoolean(String key, boolean value); 23 | 24 | boolean loadBoolean(String key); 25 | 26 | void addPrefChangeListener(String key, PrefChangeListener pcl); 27 | 28 | // Note: notification should take place in the order that the listener were added 29 | void notifyListeners(String key, Object value); 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/thread/LifeTimeThread.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.thread; 2 | 3 | 4 | public abstract class LifeTimeThread extends Thread { 5 | // run the loop till interrupted 6 | public final void run() { 7 | try { 8 | //noinspection InfiniteLoopStatement 9 | while (!stopped) { 10 | loop(); 11 | } 12 | } catch (InterruptedException ex) { 13 | Thread.currentThread().interrupt(); 14 | } 15 | } 16 | 17 | private boolean stopped = false; 18 | 19 | // to interrupt the thread 20 | public final void stopThread() { 21 | stopped = true; 22 | interrupt(); 23 | onAfterStop(); 24 | } 25 | 26 | public void onAfterStop() {} 27 | 28 | public final boolean wasStopped() { 29 | return stopped; 30 | } 31 | 32 | // loop to be defines 33 | @SuppressWarnings("RedundantThrows") 34 | public abstract void loop() throws InterruptedException; 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/manager/thread/ThreadManagerInterface.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.manager.thread; 2 | 3 | import com.vitco.app.manager.action.ActionManager; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | 6 | import javax.annotation.PostConstruct; 7 | 8 | /** 9 | * Helps with creating threads. 10 | */ 11 | public interface ThreadManagerInterface { 12 | // set the action handler 13 | @Autowired 14 | void setActionManager(ActionManager actionManager); 15 | 16 | void manage(LifeTimeThread thread); 17 | 18 | @PostConstruct 19 | void init(); 20 | 21 | void remove(LifeTimeThread thread); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/dialog/DialogModuleChangeAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.dialog; 2 | 3 | /** 4 | * Simple adapter for the DialogModuleStateListener 5 | */ 6 | public abstract class DialogModuleChangeAdapter implements DialogModuleChangeListener { 7 | @Override 8 | public void onReadyStateChanged() {} 9 | 10 | @Override 11 | public void onContentChanged() {} 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/dialog/DialogModuleChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.dialog; 2 | 3 | /** 4 | * Called when the state of a module changes 5 | */ 6 | public interface DialogModuleChangeListener { 7 | // called when the ready state of a component has changed 8 | // Note: this does propagate upwards 9 | void onReadyStateChanged(); 10 | // called when the content has changed at run time (the component needs to call this!) 11 | // Note: this does propagate upwards 12 | void onContentChanged(); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/dialog/UserInputDialogListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.dialog; 2 | 3 | /** 4 | * Listener interface for the UserInputDialog that is 5 | * notified when the dialog is closed by the user. 6 | */ 7 | public interface UserInputDialogListener { 8 | // called when the dialog closes (uses presses cancel or submit) 9 | // needs to return true if closing should be permitted 10 | // Note: The result is ignored if the resultFlag is equal to the cancel flag 11 | boolean onClose(int resultFlag); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/dialog/components/DialogButton.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.dialog.components; 2 | 3 | import com.jidesoft.swing.ButtonStyle; 4 | import com.jidesoft.swing.JideButton; 5 | 6 | import java.awt.*; 7 | 8 | /** 9 | * Custom button that is used in the UserInputDialog. 10 | */ 11 | public class DialogButton extends JideButton { 12 | 13 | // constructor 14 | public DialogButton(String caption) { 15 | super(caption); 16 | // disable focus 17 | setFocusable(false); 18 | // make sure the border is visible 19 | setButtonStyle(ButtonStyle.TOOLBOX_STYLE); 20 | // set the text-border distance 21 | setMargin(new Insets(3, 20, 3, 20)); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/dialog/components/FieldSet.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.dialog.components; 2 | 3 | import com.vitco.app.util.components.dialog.BlankDialogModule; 4 | 5 | /** 6 | * FieldSet class 7 | * 8 | * A fieldSet instance is a set of BlankDialogModule object which can be used by 9 | * the user to enter information. The information can be accessed through 10 | * "getValue(id)" where "id" is the identifier of the corresponding object 11 | * 12 | * This object is used to group input elements together that belong 13 | * logically together and also display them together. 14 | */ 15 | public class FieldSet extends BlankDialogModule { 16 | 17 | // caption of this fieldSet (for displaying purposes) 18 | private final String caption; 19 | protected final String getCaption() { 20 | return caption; 21 | } 22 | // ----------- 23 | 24 | // constructor 25 | public FieldSet(String identifier, String caption) { 26 | super(identifier); 27 | this.caption = caption; 28 | } 29 | 30 | // add a component to this fieldSet 31 | public final void addComponent(BlankDialogModule component) { 32 | // register for value collection 33 | addModule(component, true); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/dialog/components/FileSelectModule.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.dialog.components; 2 | 3 | import com.vitco.app.util.components.dialog.BlankDialogModule; 4 | import com.vitco.app.util.file.FileTools; 5 | 6 | import java.awt.*; 7 | import java.io.File; 8 | 9 | /** 10 | * A module that can be used to select a file location. 11 | */ 12 | public class FileSelectModule extends BlankDialogModule { 13 | 14 | // constructor 15 | public FileSelectModule(String identifier, File initTo, Frame owner) { 16 | super(identifier); 17 | // create the file select part 18 | addModule(new TextInputModule("file", "Name: ", initTo.isDirectory() ? "" : initTo.getName(), true), true); 19 | // create the folder select part 20 | addModule(new FolderSelectModule("folder", owner, initTo), true); 21 | } 22 | 23 | @Override 24 | public String getValue(String identifier) { 25 | // return the file that is currently selected 26 | return FileTools.ensureTrailingSeparator(super.getValue("folder")) + super.getValue("file"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/dialog/components/LabelModule.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.dialog.components; 2 | 3 | import com.jidesoft.swing.JideLabel; 4 | import com.vitco.app.util.components.dialog.BlankDialogModule; 5 | 6 | import javax.swing.*; 7 | import javax.swing.text.View; 8 | import java.awt.*; 9 | 10 | /** 11 | * A simple label module 12 | */ 13 | public class LabelModule extends BlankDialogModule { 14 | 15 | private static final JLabel resizer = new JLabel(); 16 | 17 | // Returns the preferred size to set a component at in order to render an html string. 18 | // Allows to specify the size of one dimension. 19 | public static Dimension getPreferredSize(String html, boolean width, int prefSize) { 20 | resizer.setText(html); 21 | View view = (View) resizer.getClientProperty(javax.swing.plaf.basic.BasicHTML.propertyKey); 22 | view.setSize(width ? prefSize : 0, width ? 0 : prefSize); 23 | float w = view.getPreferredSpan(View.X_AXIS); 24 | float h = view.getPreferredSpan(View.Y_AXIS); 25 | return new java.awt.Dimension((int) Math.ceil(w), (int) Math.ceil(h)); 26 | } 27 | 28 | // constructor 29 | public LabelModule(String text) { 30 | super(""); 31 | setLayout(new BorderLayout()); 32 | JideLabel label = new JideLabel("" + text); 33 | this.add(label, BorderLayout.WEST); 34 | // set the size (so it is not dynamic!) 35 | // this is very important to have the height constant when the object is not rendered yet 36 | Dimension prefSize = getPreferredSize(label.getText(), true, 450); 37 | label.setPreferredSize(prefSize); 38 | 39 | } 40 | 41 | @Override 42 | public String getValue(String identifier) { 43 | // nothing to return 44 | return null; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/dialog/components/LinkButton.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.dialog.components; 2 | 3 | import com.jidesoft.swing.JideLabel; 4 | import com.vitco.app.layout.content.console.ConsoleInterface; 5 | import com.vitco.app.util.components.dialog.BlankDialogModule; 6 | import com.vitco.app.util.misc.UrlUtil; 7 | 8 | import javax.swing.*; 9 | import java.awt.*; 10 | import java.awt.event.MouseAdapter; 11 | import java.awt.event.MouseEvent; 12 | 13 | public class LinkButton extends BlankDialogModule { 14 | private final ConsoleInterface console; 15 | 16 | public LinkButton(ConsoleInterface console, String identifier, String caption, final String url) { 17 | super(identifier); 18 | this.console = console; 19 | 20 | JideLabel label = new JideLabel(); 21 | label.setHorizontalAlignment(SwingConstants.RIGHT); 22 | label.setCursor(new Cursor(Cursor.HAND_CURSOR)); 23 | label.setText("" + caption + ""); 24 | label.setToolTipText(url); 25 | label.addMouseListener(new MouseAdapter() { 26 | @Override 27 | public void mouseClicked(MouseEvent e) { 28 | super.mouseClicked(e); 29 | open(url); 30 | } 31 | }); 32 | this.setLayout(new BorderLayout()); 33 | this.add(label, BorderLayout.CENTER); 34 | } 35 | 36 | private void open(String url) { 37 | UrlUtil.openURL(this.console, url); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/dialog/components/SeparatorModule.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.dialog.components; 2 | 3 | import com.vitco.app.util.components.dialog.BlankDialogModule; 4 | import com.vitco.app.util.misc.FontUtil; 5 | 6 | import javax.swing.*; 7 | import javax.swing.border.TitledBorder; 8 | import java.awt.*; 9 | 10 | public class SeparatorModule extends BlankDialogModule { 11 | 12 | public SeparatorModule(String text) { 13 | super("hr"); 14 | this.setLayout(new BorderLayout()); 15 | 16 | JLabel jlabel = new JLabel(text); 17 | jlabel.setFont(FontUtil.getTitleFont(jlabel.getFont())); 18 | jlabel.setOpaque(true); 19 | 20 | JPanel panel = new JPanel(); 21 | panel.setOpaque(false); 22 | panel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); 23 | panel.setLayout(new BorderLayout()); 24 | panel.add(jlabel, BorderLayout.WEST); 25 | 26 | this.add(panel, BorderLayout.CENTER); 27 | } 28 | 29 | // used to draw the border "manually" 30 | private final TitledBorder titledBorder = BorderFactory.createTitledBorder(""); 31 | 32 | @Override 33 | public void paintComponent(Graphics g) { 34 | super.paintComponent(g); 35 | titledBorder.paintBorder(this, g, -100, 7, getWidth() + 200, 300); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/progressbar/ProgressReporter.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.progressbar; 2 | 3 | import com.vitco.app.layout.content.console.ConsoleInterface; 4 | 5 | /** 6 | * Should be implemented by any class that lives inside a ProgressWorker 7 | * to report their status. 8 | */ 9 | public abstract class ProgressReporter { 10 | // reference to the dialog that should be used for reporting. 11 | private final ProgressDialog dialog; 12 | // grant access to console for any progress reporter 13 | protected final ConsoleInterface console; 14 | 15 | // constructor 16 | public ProgressReporter(ProgressDialog dialog, ConsoleInterface console) { 17 | this.dialog = dialog; 18 | this.console = console; 19 | } 20 | 21 | // retrieve the progress dialog (useful for passing it on to further subclasses) 22 | public final ProgressDialog getProgressDialog() { 23 | return dialog; 24 | } 25 | 26 | // retrieve the progress dialog (useful for passing it on to further subclasses) 27 | public final ConsoleInterface getConsole() { 28 | return console; 29 | } 30 | 31 | // set the current activity and whether the progress should 32 | // be automatically increased (for fast tasks only) 33 | public final void setActivity(String activity, boolean autoIncrease) { 34 | dialog.setActivity(activity, autoIncrease); 35 | } 36 | 37 | // returns true if the task is canceled (this needs to be checked by the task doing the work) 38 | public final boolean isCancelled() { 39 | return dialog.isCancelled(); 40 | } 41 | 42 | // set the progress status 43 | public final void setProgress(float percent) { 44 | dialog.setProgress(percent); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/progressbar/ProgressWorker.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.progressbar; 2 | 3 | import javax.swing.*; 4 | 5 | /** 6 | * A worker thread that encapsulates a task handled by a ProgressDialog. 7 | */ 8 | public abstract class ProgressWorker extends SwingWorker { 9 | 10 | @Override 11 | protected abstract Object doInBackground() throws Exception; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/components/textfield/TextChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.components.textfield; 2 | 3 | /** 4 | * Used to notify listeners of the changes of a JCustomTextField. 5 | */ 6 | public interface TextChangeListener { 7 | // text has changed 8 | void onChange(); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/file/SaveDataInputStream.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.file; 2 | 3 | import java.io.DataInputStream; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | import java.io.PushbackInputStream; 7 | 8 | /** 9 | * To read a file (binary or not) 10 | */ 11 | public class SaveDataInputStream extends DataInputStream { 12 | 13 | /** 14 | * Creates a DataInputStream that uses the specified 15 | * underlying InputStream. 16 | * 17 | * @param in the specified input stream 18 | */ 19 | public SaveDataInputStream(InputStream in) { 20 | super(in); 21 | } 22 | 23 | // returns null if eof is reached 24 | public String readLineSave() throws IOException { 25 | 26 | // todo: is this save? - readLine() is not, why? 27 | 28 | StringBuilder lineBuf = new StringBuilder(); 29 | int c1, c2; 30 | 31 | loop: while (true) { 32 | c1 = in.read(); 33 | switch (c1) { 34 | case '\n': 35 | break loop; 36 | case -1: 37 | return null; 38 | case '\r': 39 | c2 = in.read(); 40 | if (c2 != '\n' && c2 != -1) { 41 | if (!(in instanceof PushbackInputStream)) { 42 | this.in = new PushbackInputStream(in); 43 | } 44 | ((PushbackInputStream)in).unread(c2); 45 | } 46 | break loop; 47 | default: 48 | lineBuf.append((char)c1); 49 | } 50 | } 51 | 52 | return lineBuf.toString(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/graphic/MaxRectFinderTest.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.graphic; 2 | 3 | import org.junit.Test; 4 | 5 | import javax.imageio.ImageIO; 6 | import java.awt.*; 7 | import java.awt.image.BufferedImage; 8 | import java.io.File; 9 | import java.io.IOException; 10 | 11 | /** 12 | * Test the max rect finder implementation. 13 | */ 14 | public class MaxRectFinderTest { 15 | 16 | @Test 17 | public final void runTestCase() throws IOException { 18 | // load the image into the data array 19 | BufferedImage imgIn = ImageIO.read(new File("test.png")); 20 | short[][] matrix = new short[imgIn.getWidth()][imgIn.getHeight()]; 21 | for (int x = 0; x < imgIn.getWidth(); x++) { 22 | for (int y = 0; y < imgIn.getHeight(); y++) { 23 | //System.out.println(img.getRGB(x,y)); 24 | matrix[x][y] = (short) (imgIn.getRGB(x,y) != -1 ? 1 : 0); 25 | } 26 | } 27 | 28 | Rectangle rect = MaxRectFinder.maximalRectangle(matrix); 29 | System.out.println(rect); 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/misc/ArrayUtil.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.misc; 2 | 3 | /** 4 | * Some Array help function. 5 | */ 6 | public class ArrayUtil { 7 | // true iff array contains the key 8 | public static boolean contains(final int[] array, final int key) { 9 | if (array == null) return false; 10 | for (final int i : array) { 11 | if (i == key) { 12 | return true; 13 | } 14 | } 15 | return false; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/misc/BiMap.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.misc; 2 | 3 | import java.util.Map; 4 | import java.util.Set; 5 | import java.util.concurrent.ConcurrentHashMap; 6 | 7 | /** 8 | * Bidirection HashMap 9 | */ 10 | public class BiMap{ 11 | private final Map keyToValueMap = new ConcurrentHashMap(); 12 | private final Map valueToKeyMap = new ConcurrentHashMap(); 13 | 14 | synchronized public Set keySet() { 15 | return keyToValueMap.keySet(); 16 | } 17 | 18 | synchronized public void put(KeyType key, ValueType value){ 19 | keyToValueMap.put(key, value); 20 | valueToKeyMap.put(value, key); 21 | } 22 | 23 | synchronized public ValueType removeByKey(KeyType key){ 24 | ValueType removedValue = keyToValueMap.remove(key); 25 | valueToKeyMap.remove(removedValue); 26 | return removedValue; 27 | } 28 | 29 | synchronized public KeyType removeByValue(ValueType value){ 30 | KeyType removedKey = valueToKeyMap.remove(value); 31 | keyToValueMap.remove(removedKey); 32 | return removedKey; 33 | } 34 | 35 | synchronized public void clear() { 36 | keyToValueMap.clear(); 37 | valueToKeyMap.clear(); 38 | } 39 | 40 | public boolean containsKey(KeyType key){ 41 | return keyToValueMap.containsKey(key); 42 | } 43 | 44 | public boolean containsValue(ValueType value){ 45 | return keyToValueMap.containsValue(value); 46 | } 47 | 48 | public KeyType getKey(ValueType value){ 49 | return valueToKeyMap.get(value); 50 | } 51 | 52 | public ValueType get(KeyType key){ 53 | return keyToValueMap.get(key); 54 | } 55 | 56 | // retrieve the amount of entries 57 | public int size() { 58 | return keyToValueMap.size(); 59 | } 60 | } 61 | 62 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/misc/ByteHelper.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.misc; 2 | 3 | /** 4 | * Provides some basic functionality to alter bytes. 5 | */ 6 | public class ByteHelper { 7 | // binary values 8 | private static final byte[] BYTE = new byte[] {-128, 64, 32, 16, 8, 4, 2, 1}; 9 | 10 | public static boolean isBitSet(byte input, int bit) { 11 | return (input & BYTE[bit]) == BYTE[bit]; 12 | } 13 | 14 | public static byte setBit(byte input, int bit) { 15 | return (byte) (input | BYTE[bit]); 16 | } 17 | 18 | public static byte clearBit(byte input, int bit) { 19 | return (byte) (input & ~BYTE[bit]); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/misc/ConversionTools.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.misc; 2 | 3 | /** 4 | * Some Hex tools. 5 | */ 6 | public class ConversionTools { 7 | // convert int[] to byte[] 8 | public static byte[] int2byte(int[] src) { 9 | int j = 0; 10 | byte[] outData = new byte[src.length*4]; 11 | for (int aSrc : src) { 12 | outData[j++] = (byte) (aSrc >>> 24); 13 | outData[j++] = (byte) (aSrc >>> 16); 14 | outData[j++] = (byte) (aSrc >>> 8); 15 | outData[j++] = (byte) (aSrc); 16 | } 17 | return outData; 18 | } 19 | 20 | // generate the appropriate texture size 21 | // (makes sure that the dimension is a power of two) 22 | public static int getTextureSize(int s) { 23 | return (int)Math.pow(2, Math.ceil(Math.log(s + 2)/Math.log(2))); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/misc/DateTools.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.misc; 2 | 3 | import java.text.DateFormat; 4 | import java.text.SimpleDateFormat; 5 | import java.util.Date; 6 | 7 | /** 8 | * some helpful functions regarding date/time 9 | */ 10 | public class DateTools { 11 | // helper to get time string 12 | public static String now(String format) { 13 | DateFormat dateFormat = new SimpleDateFormat(format); 14 | Date date = new Date(); 15 | return dateFormat.format(date); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/misc/IntegerToolsTest.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.misc; 2 | 3 | import org.junit.Test; 4 | 5 | public class IntegerToolsTest { 6 | 7 | // test that the conversion is always correct 8 | @Test 9 | public void testMakeInt() throws Exception { 10 | for (short x = Short.MIN_VALUE; x < Short.MAX_VALUE; x++) { 11 | for (short y = Short.MIN_VALUE; y < Short.MAX_VALUE; y++) { 12 | //System.out.println(" :: " + y); 13 | short[] result = IntegerTools.getShorts(IntegerTools.makeInt(x,y)); 14 | assert result[0] == x; 15 | assert result[1] == y; 16 | } 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/misc/NumberTools.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.misc; 2 | 3 | /** 4 | * General functionality related to numbers 5 | */ 6 | public class NumberTools { 7 | 8 | // parse an integer with default value 9 | public static int parseInt(String string, int defaultValue) { 10 | try { 11 | return Integer.parseInt(string); 12 | } catch(NumberFormatException nfe) { 13 | return defaultValue; 14 | } 15 | } 16 | 17 | // parse an integer with default value 18 | public static float parseFloat(String string, float defaultValue) { 19 | try { 20 | return Float.parseFloat(string); 21 | } catch(NumberFormatException nfe) { 22 | return defaultValue; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/misc/SaveResourceLoader.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.misc; 2 | 3 | import javax.swing.*; 4 | import javax.xml.transform.stream.StreamSource; 5 | import java.awt.*; 6 | import java.io.InputStream; 7 | import java.net.URL; 8 | 9 | /** 10 | * Wraps the ClassLoader interface to access resources. 11 | */ 12 | public class SaveResourceLoader { 13 | private final String resourceName; 14 | private final URL resource; 15 | public final boolean error; 16 | 17 | public SaveResourceLoader(String resourceName) { 18 | this.resourceName = resourceName; 19 | resource = ClassLoader.getSystemResource(resourceName); 20 | error = resource == null; 21 | } 22 | 23 | public Image asImage() { 24 | 25 | return Toolkit.getDefaultToolkit().getImage(resource); 26 | } 27 | 28 | public ImageIcon asIconImage() { 29 | return new ImageIcon(asImage()); 30 | } 31 | 32 | public StreamSource asStreamSource() { 33 | InputStream stream = asInputStream(); 34 | return new StreamSource(stream); 35 | } 36 | 37 | public InputStream asInputStream() { 38 | InputStream stream = ClassLoader.getSystemResourceAsStream(resourceName); 39 | if (stream == null) { 40 | System.err.println("Resource \"" + resourceName + "\" is undefined."); 41 | } 42 | return stream; 43 | } 44 | 45 | public String asString() { 46 | java.util.Scanner s = new java.util.Scanner(asInputStream()).useDelimiter("\\A"); 47 | return s.hasNext() ? s.next() : ""; 48 | } 49 | 50 | public String[] asLines() { 51 | return asString().split("\n"); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/misc/SwingAsyncHelper.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.misc; 2 | 3 | import com.vitco.app.manager.error.ErrorHandlerInterface; 4 | 5 | import javax.swing.*; 6 | 7 | /** 8 | * Helps executing a "swing" event correctly 9 | */ 10 | public class SwingAsyncHelper { 11 | public static void handle(Runnable runnable, ErrorHandlerInterface errorHandler) { 12 | if (SwingUtilities.isEventDispatchThread()) { 13 | runnable.run(); 14 | } else { 15 | // this *should* be ok as long as this event doesn't read/write 16 | // to synchronized data 17 | SwingUtilities.invokeLater(runnable); 18 | // this will cause a deadlock as sync is not passed to the new runnable 19 | // (if this is called from sync context already) 20 | // try { 21 | // SwingUtilities.invokeAndWait(runnable); 22 | // } catch (InterruptedException e) { 23 | // errorHandler.handle(e); 24 | // } catch (InvocationTargetException e) { 25 | // errorHandler.handle(e); 26 | // } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/schema/vitco-layout-1.0.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/main/java/com/vitco/app/util/xml/XmlTools.java: -------------------------------------------------------------------------------- 1 | package com.vitco.app.util.xml; 2 | 3 | import com.vitco.app.manager.error.ErrorHandlerInterface; 4 | 5 | import javax.xml.XMLConstants; 6 | import javax.xml.transform.stream.StreamSource; 7 | import javax.xml.validation.Schema; 8 | import javax.xml.validation.SchemaFactory; 9 | import javax.xml.validation.Validator; 10 | 11 | /** 12 | * Some basic xml functionality 13 | */ 14 | public class XmlTools { 15 | public static boolean validateAgainstXSD(String xml, String xsd, ErrorHandlerInterface errorHandler) 16 | { 17 | return validateAgainstXSD(xml, new StreamSource(xsd), errorHandler); 18 | } 19 | 20 | public static boolean validateAgainstXSD(String xml, StreamSource xsd, ErrorHandlerInterface errorHandler) 21 | { 22 | try 23 | { 24 | SchemaFactory factory = 25 | SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 26 | Schema schema = factory.newSchema(xsd); 27 | Validator validator = schema.newValidator(); 28 | validator.validate(new StreamSource(xml)); 29 | return true; 30 | } 31 | catch(Exception ex) 32 | { 33 | errorHandler.handle(ex); 34 | return false; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=WARN, console 2 | log4j.appender.console=org.apache.log4j.ConsoleAppender 3 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 4 | log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n -------------------------------------------------------------------------------- /src/test/java/formats/MagicaVoxFormatFitToBBTest.java: -------------------------------------------------------------------------------- 1 | package formats; 2 | 3 | import com.vitco.app.core.data.Data; 4 | import com.vitco.app.export.AbstractExporter; 5 | import com.vitco.app.export.MagicaVoxelExporter; 6 | import com.vitco.app.importer.AbstractImporter; 7 | import com.vitco.app.importer.VoxImporter; 8 | import com.vitco.app.util.components.progressbar.ProgressDialog; 9 | 10 | import java.io.File; 11 | import java.io.IOException; 12 | 13 | 14 | public class MagicaVoxFormatFitToBBTest extends AbstractFormatTest { 15 | 16 | public MagicaVoxFormatFitToBBTest() { 17 | super("magica_vox" + File.separator + "fit_to_bb"); 18 | } 19 | 20 | @Override 21 | AbstractImporter initImporter(File file) throws IOException { 22 | return new VoxImporter(file, "Importer"); 23 | } 24 | 25 | @Override 26 | AbstractExporter initExporter(File file, Data data) throws IOException { 27 | return new MagicaVoxelExporter(file, data, new ProgressDialog(null), null, false); 28 | } 29 | 30 | @Override 31 | boolean shiftToCenter() { 32 | return false; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/test/java/formats/MagicaVoxFormatFitToSizeTest.java: -------------------------------------------------------------------------------- 1 | package formats; 2 | 3 | import com.vitco.app.core.data.Data; 4 | import com.vitco.app.export.AbstractExporter; 5 | import com.vitco.app.export.MagicaVoxelExporter; 6 | import com.vitco.app.importer.AbstractImporter; 7 | import com.vitco.app.importer.VoxImporter; 8 | import com.vitco.app.util.components.progressbar.ProgressDialog; 9 | 10 | import java.io.File; 11 | import java.io.IOException; 12 | 13 | 14 | public class MagicaVoxFormatFitToSizeTest extends AbstractFormatTest { 15 | 16 | public MagicaVoxFormatFitToSizeTest() { 17 | super("magica_vox" + File.separator + "fit_to_size"); 18 | } 19 | 20 | @Override 21 | AbstractImporter initImporter(File file) throws IOException { 22 | return new VoxImporter(file, "Importer"); 23 | } 24 | 25 | @Override 26 | AbstractExporter initExporter(File file, Data data) throws IOException { 27 | return new MagicaVoxelExporter(file, data, new ProgressDialog(null), null, true); 28 | } 29 | 30 | @Override 31 | boolean shiftToCenter() { 32 | return false; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/test/java/formats/PNXFormatTest.java: -------------------------------------------------------------------------------- 1 | package formats; 2 | 3 | import com.vitco.app.core.data.Data; 4 | import com.vitco.app.export.AbstractExporter; 5 | import com.vitco.app.export.PnxExporter; 6 | import com.vitco.app.importer.AbstractImporter; 7 | import com.vitco.app.importer.PnxImporter; 8 | import com.vitco.app.util.components.progressbar.ProgressDialog; 9 | 10 | import java.io.File; 11 | import java.io.IOException; 12 | 13 | 14 | public class PNXFormatTest extends AbstractFormatTest { 15 | 16 | // IMPORTANT: png compression is not deterministic. 17 | // Hence test could randomly fail, but seems to be fine with provided files. 18 | 19 | public PNXFormatTest() { 20 | super("pnx"); 21 | } 22 | 23 | @Override 24 | AbstractImporter initImporter(File file) throws IOException { 25 | return new PnxImporter(file, "Importer"); 26 | } 27 | 28 | @Override 29 | AbstractExporter initExporter(File file, Data data) throws IOException { 30 | return new PnxExporter(file, data, new ProgressDialog(null), null); 31 | } 32 | 33 | @Override 34 | boolean shiftToCenter() { 35 | return false; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/test/java/formats/VoxLapEngineFormatTest.java: -------------------------------------------------------------------------------- 1 | package formats; 2 | 3 | import com.vitco.app.core.data.Data; 4 | import com.vitco.app.export.AbstractExporter; 5 | import com.vitco.app.export.VoxVoxLapExporter; 6 | import com.vitco.app.importer.AbstractImporter; 7 | import com.vitco.app.importer.VoxImporter; 8 | import com.vitco.app.util.components.progressbar.ProgressDialog; 9 | 10 | import java.io.File; 11 | import java.io.IOException; 12 | 13 | 14 | public class VoxLapEngineFormatTest extends AbstractFormatTest { 15 | 16 | public VoxLapEngineFormatTest() { 17 | super("vox_lap_engine"); 18 | } 19 | 20 | @Override 21 | AbstractImporter initImporter(File file) throws IOException { 22 | return new VoxImporter(file, "Importer"); 23 | } 24 | 25 | @Override 26 | AbstractExporter initExporter(File file, Data data) throws IOException { 27 | return new VoxVoxLapExporter(file, data, new ProgressDialog(null), null); 28 | } 29 | 30 | @Override 31 | boolean shiftToCenter() { 32 | return false; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/3x3x3.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/3x3x3.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/8x8x8.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/8x8x8.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/adobe.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/adobe.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/alphabet.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/alphabet.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/black.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/black.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/cage.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/cage.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/castle.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/castle.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/chr_fox.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/chr_fox.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/chr_gumi.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/chr_gumi.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/chr_jp.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/chr_jp.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/chr_knight.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/chr_knight.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/chr_man.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/chr_man.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/chr_old.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/chr_old.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/chr_rain.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/chr_rain.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/chr_sword.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/chr_sword.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/church.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/church.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/clock.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/clock.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/dragon.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/dragon.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/ephtracy.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/ephtracy.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/mario.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/mario.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/rect.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/rect.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_bb/tree.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_bb/tree.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/3x3x3.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/3x3x3.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/8x8x8.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/8x8x8.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/adobe.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/adobe.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/alphabet.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/alphabet.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/black.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/black.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/cage.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/cage.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/castle.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/castle.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/chr_fox.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/chr_fox.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/chr_gumi.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/chr_gumi.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/chr_jp.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/chr_jp.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/chr_knight.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/chr_knight.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/chr_man.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/chr_man.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/chr_old.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/chr_old.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/chr_rain.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/chr_rain.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/chr_sword.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/chr_sword.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/church.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/church.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/clock.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/clock.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/dragon.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/dragon.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/ephtracy.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/ephtracy.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/mario.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/mario.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/rect.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/rect.vox -------------------------------------------------------------------------------- /src/test/resources/formats/magica_vox/fit_to_size/tree.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/magica_vox/fit_to_size/tree.vox -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/3x3x3.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/3x3x3.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/8x8x8.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/8x8x8.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/adobe.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/adobe.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/black.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/black.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/castle.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/castle.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/chr_knight.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/chr_knight.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/chr_man.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/chr_man.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/chr_old.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/chr_old.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/chr_rain.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/chr_rain.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/chr_sword.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/chr_sword.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/clock.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/clock.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/snake.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/snake.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/pnx/tree.pnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/pnx/tree.pnx -------------------------------------------------------------------------------- /src/test/resources/formats/vox_lap_engine/troll_armleft.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/vox_lap_engine/troll_armleft.vox -------------------------------------------------------------------------------- /src/test/resources/formats/vox_lap_engine/troll_armright.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/vox_lap_engine/troll_armright.vox -------------------------------------------------------------------------------- /src/test/resources/formats/vox_lap_engine/troll_armright_export.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/vox_lap_engine/troll_armright_export.vox -------------------------------------------------------------------------------- /src/test/resources/formats/vox_lap_engine/troll_head.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/vox_lap_engine/troll_head.vox -------------------------------------------------------------------------------- /src/test/resources/formats/vox_lap_engine/troll_legleft.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/vox_lap_engine/troll_legleft.vox -------------------------------------------------------------------------------- /src/test/resources/formats/vox_lap_engine/troll_legright.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/vox_lap_engine/troll_legright.vox -------------------------------------------------------------------------------- /src/test/resources/formats/vox_lap_engine/troll_torso.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/vox_lap_engine/troll_torso.vox -------------------------------------------------------------------------------- /src/test/resources/formats/vox_lap_engine/z-customvox-nerds.vox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/src/test/resources/formats/vox_lap_engine/z-customvox-nerds.vox -------------------------------------------------------------------------------- /static/install.txt: -------------------------------------------------------------------------------- 1 | -------------------------- 2 | -------- INSTALL --------- 3 | -------------------------- 4 | 5 | LINUX 6 | ===== 7 | 8 | Run `install-linux.sh` to install and `uninstall-linux.sh` to uninstall. 9 | 10 | You can also start VoxelShop without installation by running `java -jar voxelshop-start.jsr` 11 | 12 | 13 | OSX 14 | === 15 | 16 | No installation is necessary. Start by running `voxelshop-start.jar`. 17 | 18 | 19 | WINDOWS 20 | ======= 21 | 22 | No installation is necessary. Start by running `voxelshop-start.jar`. 23 | -------------------------------------------------------------------------------- /static/share/applications/com.blackflux.voxelshop.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=VoxelShop 3 | GenericName=VoxelShop 3D Voxel-based Painting Software 4 | Comment=3D voxel modeling, rendering and export 5 | Keywords=3d;cg;modeling;painting;sculpting;texturing;voxel,rendering;game design; 6 | Exec=voxelshop %f 7 | Icon=/usr/local/share/pixmaps/voxelshop.png 8 | Terminal=false 9 | Type=Application 10 | Categories=Graphics;3DGraphics; 11 | MimeType=application/x-voxelshop; 12 | -------------------------------------------------------------------------------- /static/share/pixmaps/icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simlu/voxelshop/99fd77c8d0bd74d7187160323b37fa9e77bce586/static/share/pixmaps/icon-48x48.png --------------------------------------------------------------------------------