Skip to content

Commit e31c114

Browse files
committed
added basic color override option in rasterizer config
1 parent 60e7a56 commit e31c114

5 files changed

Lines changed: 171 additions & 28 deletions

File tree

colors.go

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package rasterizer
2+
3+
import (
4+
"fmt"
5+
"image/color"
6+
7+
GDTFTypes "github.com/Patch2PDF/GDTF-Parser/pkg/types"
8+
)
9+
10+
type colorMap map[ModelType]map[GeometryType]color.NRGBA
11+
type OverrideColorMap map[ModelType]map[GeometryType]*color.NRGBA
12+
13+
var default_colors = map[GeometryType]color.NRGBA{
14+
GeometryTypeGeometry: {25, 25, 25, 255},
15+
GeometryTypeAxis: {25, 25, 25, 255},
16+
GeometryTypeFilterBeam: {0, 0, 0, 255},
17+
GeometryTypeFilterColor: {0, 0, 0, 255},
18+
GeometryTypeFilterGobo: {0, 0, 0, 255},
19+
GeometryTypeFilterShaper: {0, 0, 0, 255},
20+
GeometryTypeBeam: {200, 200, 200, 255},
21+
GeometryTypeMediaServerLayer: {0, 0, 0, 255},
22+
GeometryTypeMediaServerCamera: {0, 0, 0, 255},
23+
GeometryTypeMediaServerMaster: {0, 0, 0, 255},
24+
GeometryTypeDisplay: {0, 0, 0, 255},
25+
GeometryTypeGeometryReference: {0, 0, 0, 255},
26+
GeometryTypeLaser: {0, 0, 0, 255},
27+
GeometryTypeWiringObject: {0, 0, 0, 255},
28+
GeometryTypeInventory: {0, 0, 0, 255},
29+
GeometryTypeStructure: {0, 0, 0, 255},
30+
GeometryTypeSupport: {0, 0, 0, 255},
31+
GeometryTypeMagnet: {0, 0, 0, 255},
32+
}
33+
34+
var fromGDTFGeometryMap = map[GDTFTypes.GeometryType]GeometryType{
35+
GDTFTypes.GeometryTypeAxis: GeometryTypeAxis,
36+
GDTFTypes.GeometryTypeBeam: GeometryTypeBeam,
37+
GDTFTypes.GeometryTypeDisplay: GeometryTypeDisplay,
38+
GDTFTypes.GeometryTypeFilterBeam: GeometryTypeFilterBeam,
39+
GDTFTypes.GeometryTypeFilterColor: GeometryTypeFilterColor,
40+
GDTFTypes.GeometryTypeFilterGobo: GeometryTypeFilterGobo,
41+
GDTFTypes.GeometryTypeFilterShaper: GeometryTypeFilterShaper,
42+
GDTFTypes.GeometryTypeGeometry: GeometryTypeGeometry,
43+
GDTFTypes.GeometryTypeGeometryReference: GeometryTypeGeometryReference,
44+
GDTFTypes.GeometryTypeInventory: GeometryTypeInventory,
45+
GDTFTypes.GeometryTypeLaser: GeometryTypeLaser,
46+
GDTFTypes.GeometryTypeMagnet: GeometryTypeMagnet,
47+
GDTFTypes.GeometryTypeMediaServerCamera: GeometryTypeMediaServerCamera,
48+
GDTFTypes.GeometryTypeMediaServerLayer: GeometryTypeMediaServerLayer,
49+
GDTFTypes.GeometryTypeMediaServerMaster: GeometryTypeMediaServerMaster,
50+
GDTFTypes.GeometryTypeStructure: GeometryTypeStructure,
51+
GDTFTypes.GeometryTypeSupport: GeometryTypeSupport,
52+
GDTFTypes.GeometryTypeWiringObject: GeometryTypeWiringObject,
53+
}
54+
55+
// TODO: add "global" override
56+
57+
func getOverrideColors(overrides OverrideColorMap) colorMap {
58+
result := make(colorMap)
59+
for i := range modelTypes {
60+
result[ModelType(i)] = make(map[GeometryType]color.NRGBA, len(default_colors))
61+
for _, geometryType := range geometryTypes {
62+
if overrides[ModelType(i)][geometryType] != nil {
63+
result[ModelType(i)][geometryType] = *overrides[ModelType(i)][geometryType]
64+
} else {
65+
result[ModelType(i)][geometryType] = default_colors[geometryType]
66+
}
67+
}
68+
}
69+
return result
70+
}
71+
72+
func (colors colorMap) getColor(modelType ModelType, geometryType GDTFTypes.GeometryType) (color.NRGBA, error) {
73+
nonGDTFGeometryType, ok := fromGDTFGeometryMap[geometryType]
74+
if !ok {
75+
return color.NRGBA{}, fmt.Errorf("Invalid geometry type / could not find mapping for %d", geometryType)
76+
}
77+
modelColors, ok := colors[modelType]
78+
if !ok {
79+
return color.NRGBA{}, fmt.Errorf("Invalid model type %d", modelType)
80+
}
81+
return modelColors[nonGDTFGeometryType], nil
82+
}

config.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package rasterizer
22

33
type RasterizerConfig struct {
4-
RenderLabels bool
5-
Rotation Rotation
4+
RenderLabels bool
5+
Rotation Rotation
6+
OverrideColors OverrideColorMap
67
}

geometry_types.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package rasterizer
2+
3+
type GeometryType string
4+
5+
const (
6+
GeometryTypeGeometry GeometryType = "Geometry"
7+
GeometryTypeAxis GeometryType = "Axis"
8+
GeometryTypeFilterBeam GeometryType = "FilterBeam"
9+
GeometryTypeFilterColor GeometryType = "FilterColor"
10+
GeometryTypeFilterGobo GeometryType = "FilterGobo"
11+
GeometryTypeFilterShaper GeometryType = "FilterShaper"
12+
GeometryTypeBeam GeometryType = "Beam"
13+
GeometryTypeMediaServerLayer GeometryType = "MediaServerLayer"
14+
GeometryTypeMediaServerCamera GeometryType = "MediaServerCamera"
15+
GeometryTypeMediaServerMaster GeometryType = "MediaServerMaster"
16+
GeometryTypeDisplay GeometryType = "Display"
17+
GeometryTypeGeometryReference GeometryType = "GeometryReference"
18+
GeometryTypeLaser GeometryType = "Laser"
19+
GeometryTypeWiringObject GeometryType = "WiringObject"
20+
GeometryTypeInventory GeometryType = "Inventory"
21+
GeometryTypeStructure GeometryType = "Structure"
22+
GeometryTypeSupport GeometryType = "Support"
23+
GeometryTypeMagnet GeometryType = "Magnet"
24+
)
25+
26+
var geometryTypes []GeometryType = []GeometryType{
27+
GeometryTypeGeometry,
28+
GeometryTypeAxis,
29+
GeometryTypeFilterBeam,
30+
GeometryTypeFilterColor,
31+
GeometryTypeFilterGobo,
32+
GeometryTypeFilterShaper,
33+
GeometryTypeBeam,
34+
GeometryTypeMediaServerLayer,
35+
GeometryTypeMediaServerCamera,
36+
GeometryTypeMediaServerMaster,
37+
GeometryTypeDisplay,
38+
GeometryTypeGeometryReference,
39+
GeometryTypeLaser,
40+
GeometryTypeWiringObject,
41+
GeometryTypeInventory,
42+
GeometryTypeStructure,
43+
GeometryTypeSupport,
44+
GeometryTypeMagnet,
45+
}

model_types.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package rasterizer
2+
3+
type ModelType int
4+
5+
const (
6+
ModelTypeSceneObject ModelType = iota
7+
ModelTypeFocusPoint
8+
ModelTypeFixture
9+
ModelTypeSupport
10+
ModelTypeTruss
11+
ModelTypeVideoScreen
12+
ModelTypeProjector
13+
)
14+
15+
var modelTypes []ModelType = []ModelType{ // needs to be updated when ModelType enum is extended
16+
ModelTypeSceneObject,
17+
ModelTypeFocusPoint,
18+
ModelTypeFixture,
19+
ModelTypeSupport,
20+
ModelTypeTruss,
21+
ModelTypeVideoScreen,
22+
ModelTypeProjector,
23+
}

rasterizer.go

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,9 @@ import (
88
"os"
99

1010
"github.com/Patch2PDF/GDTF-Mesh-Reader/v2/pkg/MeshTypes"
11-
GDTFTypes "github.com/Patch2PDF/GDTF-Parser/pkg/types"
1211
MVRTypes "github.com/Patch2PDF/MVR-Parser/pkg/types"
1312
)
1413

15-
var colors = map[GDTFTypes.GeometryType]color.NRGBA{
16-
GDTFTypes.GeometryTypeGeometry: {25, 25, 25, 255},
17-
GDTFTypes.GeometryTypeAxis: {25, 25, 25, 255},
18-
GDTFTypes.GeometryTypeFilterBeam: {0, 0, 0, 255},
19-
GDTFTypes.GeometryTypeFilterColor: {0, 0, 0, 255},
20-
GDTFTypes.GeometryTypeFilterGobo: {0, 0, 0, 255},
21-
GDTFTypes.GeometryTypeFilterShaper: {0, 0, 0, 255},
22-
GDTFTypes.GeometryTypeBeam: {200, 200, 200, 255},
23-
GDTFTypes.GeometryTypeMediaServerLayer: {0, 0, 0, 255},
24-
GDTFTypes.GeometryTypeMediaServerCamera: {0, 0, 0, 255},
25-
GDTFTypes.GeometryTypeMediaServerMaster: {0, 0, 0, 255},
26-
GDTFTypes.GeometryTypeDisplay: {0, 0, 0, 255},
27-
GDTFTypes.GeometryTypeGeometryReference: {0, 0, 0, 255},
28-
GDTFTypes.GeometryTypeLaser: {0, 0, 0, 255},
29-
GDTFTypes.GeometryTypeWiringObject: {0, 0, 0, 255},
30-
GDTFTypes.GeometryTypeInventory: {0, 0, 0, 255},
31-
GDTFTypes.GeometryTypeStructure: {0, 0, 0, 255},
32-
GDTFTypes.GeometryTypeSupport: {0, 0, 0, 255},
33-
GDTFTypes.GeometryTypeMagnet: {0, 0, 0, 255},
34-
}
35-
3614
type Rotation struct {
3715
Alpha float64
3816
Beta float64
@@ -93,10 +71,15 @@ func drawMeshUpdateBB(mesh MeshTypes.Mesh, canvas *Canvas, color color.NRGBA, bb
9371
}
9472
}
9573

96-
func drawStageModel(mesh *MVRTypes.StageModel, canvas *Canvas, config RasterizerConfig) {
74+
func drawStageModel(mesh *MVRTypes.StageModel, canvas *Canvas, config RasterizerConfig) error {
75+
colors := getOverrideColors(config.OverrideColors)
9776
for _, obj := range mesh.SceneObjectModels {
9877
for _, part := range obj.MeshModel {
99-
drawMesh(part.Mesh, canvas, colors[part.GeometryType]) // TODO: obj type specific colors
78+
color, err := colors.getColor(ModelTypeSceneObject, part.GeometryType)
79+
if err != nil {
80+
return fmt.Errorf("Could not draw stage model: %s", err)
81+
}
82+
drawMesh(part.Mesh, canvas, color)
10083
}
10184
for _, geometry := range obj.Geometries {
10285
drawMesh(geometry, canvas, color.NRGBA{100, 100, 100, 255})
@@ -109,7 +92,11 @@ func drawStageModel(mesh *MVRTypes.StageModel, canvas *Canvas, config Rasterizer
10992
bb.init()
11093

11194
for _, part := range fixture.MeshModel {
112-
bb, _ = drawMeshUpdateBB(part.Mesh, canvas, colors[part.GeometryType], bb)
95+
color, err := colors.getColor(ModelTypeFixture, part.GeometryType)
96+
if err != nil {
97+
return fmt.Errorf("Could not draw stage model: %s", err)
98+
}
99+
bb, _ = drawMeshUpdateBB(part.Mesh, canvas, color, bb)
113100
}
114101

115102
canvas.fixture_labels = append(
@@ -124,14 +111,19 @@ func drawStageModel(mesh *MVRTypes.StageModel, canvas *Canvas, config Rasterizer
124111
} else {
125112
for _, fixture := range mesh.FixtureModels {
126113
for _, part := range fixture.MeshModel {
127-
drawMesh(part.Mesh, canvas, colors[part.GeometryType])
114+
color, err := colors.getColor(ModelTypeFixture, part.GeometryType)
115+
if err != nil {
116+
return fmt.Errorf("Could not draw stage model: %s", err)
117+
}
118+
drawMesh(part.Mesh, canvas, color)
128119
}
129120

130121
for _, geometry := range fixture.Geometries {
131122
drawMesh(geometry, canvas, color.NRGBA{100, 100, 100, 255})
132123
}
133124
}
134125
}
126+
return nil
135127
}
136128

137129
func Draw(mesh *MVRTypes.StageModel, config RasterizerConfig) (*Canvas, error) {

0 commit comments

Comments
 (0)