Compare commits

...

3 Commits

Author SHA1 Message Date
3ac96d180a more working 2021-09-19 19:55:44 -04:00
7c97421dc2 idk but it works 2021-09-19 18:40:50 -04:00
ab8ce69b3e init commit v2 2021-09-19 16:45:21 -04:00
18 changed files with 240 additions and 103 deletions

View File

@@ -1,7 +0,0 @@
# cavepedia
## Requirements
- go 1.16+
- konvajs 7.2.5
- survex img.{c,h} 1.2.45

View File

@@ -5,23 +5,15 @@ set -e
build () {
pushd ./src &>/dev/null
# go get honnef.co/go/tools/cmd/staticcheck
go mod tidy
go get honnef.co/go/tools/cmd/staticcheck
go get github.com/zserge/lorca
gofmt -w .
# staticcheck .
CGO_ENABLED=1 go build -o ./kavea -v .
staticcheck .
CGO_ENABLED=1 GOARCH=amd64 go build -o ./kavea_linux_amd64 -v .
popd &>/dev/null
}
run () {
./src/kavea
}
release () {
build
}
$@

View File

@@ -13,7 +13,6 @@ func checkError(err error) bool {
return true
}
/* HTTP */
func checkWebError(w http.ResponseWriter, err error) bool {
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -21,11 +20,3 @@ func checkWebError(w http.ResponseWriter, err error) bool {
}
return true
}
//func getURLParam(r *http.Request, param string) string {
// paramList, exists := r.URL.Query()[param]
// if !exists {
// return ""
// }
// return paramList[0]
//}

View File

@@ -3,6 +3,9 @@ module git.seaturtle.pw/pew/kavea
go 1.16
require (
github.com/google/renameio v0.1.0 // indirect
github.com/kisielk/gotool v1.0.0 // indirect
github.com/rogpeppe/go-internal v1.3.0 // indirect
github.com/zserge/lorca v0.1.10
golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect
honnef.co/go/tools v0.2.1 // indirect
)

View File

@@ -1,14 +1,45 @@
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/zserge/lorca v0.1.10 h1:f/xBJ3D3ipcVRCcvN8XqZnpoKcOXV8I4vwqlFyw7ruc=
github.com/zserge/lorca v0.1.10/go.mod h1:bVmnIbIRlOcoV285KIRSe4bUABKi7R7384Ycuum6e4A=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
honnef.co/go/tools v0.2.1 h1:/EPr//+UMMXwMTkXvCCoaJDq8cpjMO80Ou+L4PDo2mY=
honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY=

66
src/img.go Normal file
View File

@@ -0,0 +1,66 @@
package main
/*
#cgo LDFLAGS: -lm
#include "img.h"
*/
import "C"
import (
// "encoding/json"
// "fmt"
)
var pimg *C.img
type img struct {
ImgReadCode int `json:"imgReadCode"`
Title string `json:"title"`
MvX float64 `json:"mv_x"`
MvY float64 `json:"mv_y"`
MvZ float64 `json:"mv_z"`
}
func ImgOpen(filename string) interface{} {
pimg = C.img_open_survey(C.CString(filename), nil)
// fmt.Println(C.GoFloat64(pimg.mv.x))
if pimg.title == nil {
return img{
ImgReadCode: 0,
Title: "NULL",
MvX: float64(pimg.mv.x),
MvY: float64(pimg.mv.y),
MvZ: float64(pimg.mv.z),
}
} else {
return img{
ImgReadCode: 0,
Title: C.GoString(pimg.title),
MvX: float64(pimg.mv.x),
MvY: float64(pimg.mv.y),
MvZ: float64(pimg.mv.z),
}
}
}
func ImgReadItem() img {
img_read_code := C.img_read_item(pimg, &pimg.mv)
if pimg.title == nil {
return img{
ImgReadCode: int(img_read_code),
Title: "NULL",
MvX: float64(pimg.mv.x),
MvY: float64(pimg.mv.y),
MvZ: float64(pimg.mv.z),
}
} else {
return img{
ImgReadCode: int(img_read_code),
Title: C.GoString(pimg.title),
MvX: float64(pimg.mv.x),
MvY: float64(pimg.mv.y),
MvZ: float64(pimg.mv.z),
}
}
}

BIN
src/kavea

Binary file not shown.

BIN
src/kavea_linux_amd64 Executable file

Binary file not shown.

View File

@@ -20,11 +20,11 @@ func main() {
/* Web Server */
http.Handle("/static/", http.FileServer(http.FS(staticFiles)))
http.Handle("/favicon.ico", http.RedirectHandler("/static/favicon.ico", http.StatusMovedPermanently))
http.HandleFunc("/", GetHome)
http.HandleFunc("/", GetHome) // Redirects to /search if auth'd
// Start in separate goroutine
/* Start Web Server */
go func() {
log.Println("Server is running!")
log.Fatal(http.ListenAndServe(":3000", nil))
}()
@@ -37,6 +37,11 @@ func main() {
if err != nil {
log.Fatal(err)
}
/* IMG */
ui.Bind("img_open", ImgOpen)
ui.Bind("img_read_item", ImgReadItem)
defer ui.Close()
<-ui.Done()
}

16
src/static/babylon-4.2.0.gui.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,32 +0,0 @@
var stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight,
});
// add canvas element
var layer = new Konva.Layer();
stage.add(layer);
// create shape
var box = new Konva.Rect({
x: 50,
y: 50,
width: 100,
height: 50,
fill: '#00D2FF',
stroke: 'black',
strokeWidth: 4,
draggable: true,
});
layer.add(box);
layer.draw();
// add cursor styling
box.on('mouseover', function () {
document.body.style.cursor = 'pointer';
});
box.on('mouseout', function () {
document.body.style.cursor = 'default';
});

File diff suppressed because one or more lines are too long

13
src/static/kavea.css Normal file
View File

@@ -0,0 +1,13 @@
html, body {
overflow: hidden;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
#renderCanvas {
width: 100%;
height: 100%;
touch-action: none;
}

51
src/static/kavea.js Normal file
View File

@@ -0,0 +1,51 @@
const canvas = document.getElementById("renderCanvas"); // Get the canvas element
const engine = new BABYLON.Engine(canvas, true); // Generate the BABYLON 3D engine
// Add your code here matching the playground format
const createScene = function () {
const scene = new BABYLON.Scene(engine);
BABYLON.SceneLoader.ImportMeshAsync("", "https://assets.babylonjs.com/meshes/", "box.babylon");
const camera = new BABYLON.ArcRotateCamera("camera", -Math.PI / 2, Math.PI / 2.5, 15, new BABYLON.Vector3(0, 0, 0));
camera.attachControl(canvas, true);
const light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(1, 1, 0));
return scene;
};
const scene = createScene(); //Call the createScene function
// Register a render loop to repeatedly render the scene
engine.runRenderLoop(function () {
scene.render();
});
// Watch for browser/canvas resize events
window.addEventListener("resize", function () {
engine.resize();
});
/* IMG */
let pimg = img_open('Skydusky.3d')
pimg = img_read_item()
pimg.then(o => console.log(o.label))
pimg = img_read_item()
pimg.then(o => console.log(o.label))
pimg = img_read_item()
pimg.then(o => console.log(o.label))
pimg = img_read_item()
pimg.then(o => console.log(o.label))
pimg = img_read_item()
pimg.then(o => console.log(o.label))
pimg = img_read_item()
pimg.then(o => console.log(o.label))
pimg = img_read_item()
pimg.then(o => console.log(o.label))
pimg = img_read_item()
pimg.then(o => console.log(o.label))
pimg = img_read_item()
pimg.then(o => console.log(o.label))

View File

@@ -1,10 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<title>Kavea</title>
<title>kavea</title>
<link rel="stylesheet" href="/static/kavea.css">
<script src="/static/babylon-4.2.0.js"></script>
<script src="/static/babylonjs-4.2.0.loaders.min.js"></script>
</head>
<body>
<div id="container"></div>
<script src="/static/js/konva.7.2.5.min.js"></script>
<script src="/static/js/kavea.js"></script>
<canvas id="renderCanvas"></canvas>
<script src="/static/kavea.js"></script>
</body>
</html>

View File

@@ -1,31 +1,16 @@
package main
// #cgo LDFLAGS: -lm
// #include "img.h"
import "C"
import (
"fmt"
// "html/template"
"html/template"
"net/http"
)
func GetHome(w http.ResponseWriter, r *http.Request) {
filename := C.CString("Skydusky.3d")
img := C.img_open_survey(filename, nil)
for true {
p := C.img_point{}
C.img_read_item(img, &p)
fmt.Printf(C.GoString(img.label))
t, err := template.ParseFS(templatesHTML, "templates/index.html.tmpl")
if !checkWebError(w, err) {
return
}
//
// // return index.html
// t, err := template.ParseFS(templatesHTML, "templates/index.html.tmpl")
// if !checkWebError(w, err) {
// return
// }
//
// err = t.Execute(w, nil)
// if !checkError(err) {
// return
// }
err = t.Execute(w, nil)
checkError(err)
}