Skip to content

Commit a83196d

Browse files
committed
added basic example
1 parent e1f8f14 commit a83196d

3 files changed

Lines changed: 166 additions & 0 deletions

File tree

examples/main.go

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package main
2+
3+
import (
4+
"archive/zip"
5+
_ "embed"
6+
"log"
7+
"os"
8+
"runtime"
9+
"runtime/pprof"
10+
11+
GDTFMeshReader "github.com/Patch2PDF/GDTF-Mesh-Reader/v2"
12+
MVRParser "github.com/Patch2PDF/MVR-Parser"
13+
MVRTypes "github.com/Patch2PDF/MVR-Parser/pkg/types"
14+
rasterizer "github.com/Patch2PDF/Rasterizer"
15+
)
16+
17+
var config = MVRTypes.MVRParserConfig{
18+
MeshHandling: MVRTypes.BuildStageModel,
19+
ReadThumbnail: true,
20+
GDTFParserWorkers: 4,
21+
StageMeshWorkers: 4,
22+
}
23+
24+
var (
25+
//go:embed fonts/DejaVuSansMono.ttf
26+
fontBytes []byte
27+
)
28+
29+
func main() {
30+
mem_f, err := os.Create("mem.prof")
31+
if err != nil {
32+
panic(err)
33+
}
34+
defer mem_f.Close()
35+
36+
f, err := os.Create("cpu.prof")
37+
if err != nil {
38+
log.Fatalf("%s", err)
39+
}
40+
err = pprof.StartCPUProfile(f)
41+
if err != nil {
42+
log.Fatalf("%s", err)
43+
}
44+
GDTFMeshReader.LoadPrimitives()
45+
46+
// content, err := gdtf.ParseGDTFByFilename("test.gdtf", true, false)
47+
// // content, err := gdtf.ParseGDTFByFilename("test3.gdtf", true, false)
48+
// if err != nil {
49+
// log.Fatalf("%s", err)
50+
// }
51+
// mesh, err := content.BuildMesh("32Ch")
52+
// // mesh, err := content.BuildMesh("36 channel")
53+
54+
mvr, err := zip.OpenReader("test5.mvr")
55+
if err != nil {
56+
log.Fatal(err)
57+
}
58+
defer mvr.Close()
59+
60+
GDTFMeshReader.LoadPrimitives()
61+
62+
mvrData, err := MVRParser.ParseMVRZipReader(&mvr.Reader, config)
63+
64+
if err != nil {
65+
log.Fatalf("%s", err)
66+
}
67+
// rasterizer.Draw(mesh)
68+
// jobs := make(chan *rasterizer.Canvas, 2)
69+
// jobs <- rasterizer.Draw(mvrData.StageModel, rasterizer.Rotation{Alpha: 80, Beta: 0, Gamma: 200}, "render.png")
70+
// jobs <- rasterizer.Draw(mvrData.StageModel, rasterizer.Rotation{Alpha: 90, Beta: 0, Gamma: 0}, "front.png")
71+
// close(jobs)
72+
73+
model_config := MVRTypes.ModelConfig{
74+
Global: MVRTypes.GlobalModelConfig{
75+
RenderOnlyAddressedFixture: true,
76+
},
77+
Individual: map[string]MVRTypes.ModelNodeConfig{
78+
"FA992217-CB18-D844-9D42-5B791B2BF05E": {
79+
Exclude: MVRTypes.GetBoolPtr(false),
80+
RenderOnlyAddressedFixture: nil,
81+
},
82+
"FA992217-0AE0-E31C-4C97-F45431626CD8": {
83+
Exclude: MVRTypes.GetBoolPtr(true),
84+
},
85+
},
86+
}
87+
88+
stage_model := mvrData.GetStageModel(model_config)
89+
90+
stageModelCopy1 := stage_model.Copy()
91+
stageModelCopy2 := stage_model.Copy()
92+
// TODO: instead of copy, rotate back? (multiply new matrix with inverse of previous) --> need to add function to Mesh-Reader module
93+
94+
// buf1 := &bytes.Buffer{}
95+
// buf2 := &bytes.Buffer{}
96+
97+
overrideColors := rasterizer.OverrideColorMap{
98+
// rasterizer.ModelTypeFixture: map[rasterizer.GeometryType]*color.NRGBA{
99+
// rasterizer.GeometryTypeAxis: {R: 255, G: 0, B: 0, A: 255},
100+
// rasterizer.GeometryTypeBeam: {R: 0, G: 255, B: 0, A: 255},
101+
// },
102+
}
103+
104+
canvasConfig := rasterizer.CanvasConfig{
105+
Width: 4000,
106+
Height: 3000,
107+
LabelFont: fontBytes,
108+
LabelDPI: 300,
109+
LabelFontSize: 10,
110+
}
111+
112+
canvas1, err := rasterizer.Draw(&stageModelCopy1, rasterizer.RasterizerConfig{RenderLabels: true, Rotation: rasterizer.Rotation{Alpha: 80, Beta: 0, Gamma: 200}, OverrideColors: overrideColors, CanvasConfig: canvasConfig})
113+
if err != nil {
114+
log.Fatal(err)
115+
}
116+
// canvas1.SaveAsPNG(buf1)
117+
rasterizer.SaveCanvasAsPNGFile("side.png", canvas1)
118+
canvas2, err := rasterizer.Draw(&stageModelCopy2, rasterizer.RasterizerConfig{RenderLabels: true, Rotation: rasterizer.Rotation{Alpha: 90, Beta: 0, Gamma: 180}, OverrideColors: overrideColors, CanvasConfig: canvasConfig})
119+
if err != nil {
120+
log.Fatal(err)
121+
}
122+
// canvas2.SaveAsPNG(buf2)
123+
rasterizer.SaveCanvasAsPNGFile("front.png", canvas2)
124+
125+
// eg := errgroup.Group{}
126+
127+
// for range 2 {
128+
// eg.Go(func() error {
129+
// rasterizer.SaveCanvasAsPNGFile()
130+
// })
131+
// }
132+
133+
// wg.Wait()
134+
135+
pprof.StopCPUProfile()
136+
137+
runtime.GC() // Get up-to-date statistics
138+
if err := pprof.WriteHeapProfile(mem_f); err != nil {
139+
panic(err)
140+
}
141+
142+
f.Close()
143+
}
144+
145+
// func main() {
146+
// // fmt.Printf("%s", rasterizer.DrawLabel(0, 0))
147+
// // rasterizer.InitFace()
148+
149+
// // dst := image.NewNRGBA(image.Rect(0, 0, 110, 50))
150+
151+
// // fmt.Println(rasterizer.DrawLabelBox(dst, 0, 0, "Lgtm rtfm\nexcept you"))
152+
153+
// // f, err := os.Create("out.png")
154+
// // if err != nil {
155+
// // log.Fatalf("failed to create file: %v", err)
156+
// // }
157+
// // defer f.Close()
158+
159+
// // if err := png.Encode(f, dst); err != nil {
160+
// // log.Fatalf("failed to encode image: %v", err)
161+
// // }
162+
// err := rasterizer.DrawLabel(0, 0, "Lgtm rtfm\nexcept you")
163+
// if err != nil {
164+
// log.Fatal(err)
165+
// }
166+
// }

0 commit comments

Comments
 (0)