Skip to content

Commit 2463b28

Browse files
authored
feat(mesh): mesh-rework number 2
Mesh rework 2
2 parents 1d4d18a + 538f75a commit 2463b28

15 files changed

Lines changed: 203 additions & 183 deletions

examples/example.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,6 @@ var config = MVRTypes.MVRParserConfig{
2020
ReadThumbnail: true,
2121
GDTFParserWorkers: 4,
2222
StageMeshWorkers: 4,
23-
ModelConfig: MVRTypes.ModelConfig{
24-
Global: MVRTypes.GlobalModelConfig{
25-
RenderOnlyAddressedFixture: true,
26-
},
27-
Individual: map[string]MVRTypes.ModelNodeConfig{
28-
"FA992217-CB18-D844-9D42-5B791B2BF05E": {
29-
Exclude: MVRTypes.GetBoolPtr(false),
30-
RenderOnlyAddressedFixture: MVRTypes.GetBoolPtr(true),
31-
},
32-
},
33-
},
3423
}
3524

3625
func main() {
@@ -58,12 +47,29 @@ func main() {
5847
// write mesh as STL
5948
meshFile, _ := os.Create("Test.stl")
6049
mesh := &MeshTypes.Mesh{}
61-
for _, fixture := range mvrData.StageModel.FixtureModels {
50+
51+
model_config := MVRTypes.ModelConfig{
52+
Global: MVRTypes.GlobalModelConfig{
53+
RenderOnlyAddressedFixture: true,
54+
},
55+
Individual: map[string]MVRTypes.ModelNodeConfig{
56+
"FA992217-CB18-D844-9D42-5B791B2BF05E": { // Group ID for testing
57+
Exclude: MVRTypes.GetBoolPtr(true),
58+
RenderOnlyAddressedFixture: nil,
59+
},
60+
"FA992217-300B-9B39-62E4-66BF061CC63A": { // Layer ID for testing
61+
Exclude: nil,
62+
},
63+
},
64+
}
65+
66+
stage_model := mvrData.GetStageModel(model_config)
67+
for _, fixture := range stage_model.FixtureModels {
6268
for _, part := range fixture.MeshModel {
6369
mesh.Add(&part.Mesh)
6470
}
6571
}
66-
for _, sceneObject := range mvrData.StageModel.SceneObjectModels {
72+
for _, sceneObject := range stage_model.SceneObjectModels {
6773
for _, part := range sceneObject.MeshModel {
6874
mesh.Add(&part.Mesh)
6975
}

mvr-parser.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ func ParseMVRZipReader(zipfile *zip.Reader, config MVRTypes.MVRParserConfig) (*M
6262
}
6363

6464
if config.MeshHandling >= MVRTypes.BuildStageModel {
65-
meshTasks := MVRTypes.MeshTasks{}
66-
parsedData.GenerateMeshes(&meshTasks, config.ModelConfig)
65+
parsedData.GenerateMeshes()
6766
}
6867

6968
return parsedData, nil

pkg/types/childlist.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,14 @@ func ReadMeshes[T MeshReader](src []T, fileMap map[string]*zip.File) error {
8484
}
8585
return nil
8686
}
87+
88+
func (c *ChildList) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
89+
addNodeModelsToStageModel(c.SceneObjects, stageModel, modelConfig, parentConfig)
90+
addNodeModelsToStageModel(c.GroupObjects, stageModel, modelConfig, parentConfig)
91+
addNodeModelsToStageModel(c.FocusPoints, stageModel, modelConfig, parentConfig)
92+
addNodeModelsToStageModel(c.Fixtures, stageModel, modelConfig, parentConfig)
93+
addNodeModelsToStageModel(c.Supports, stageModel, modelConfig, parentConfig)
94+
addNodeModelsToStageModel(c.Trusses, stageModel, modelConfig, parentConfig)
95+
addNodeModelsToStageModel(c.VideoScreens, stageModel, modelConfig, parentConfig)
96+
addNodeModelsToStageModel(c.Projectors, stageModel, modelConfig, parentConfig)
97+
}

pkg/types/config.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,17 @@ type MVRParserConfig struct {
3030
ReadThumbnail bool
3131
GDTFParserWorkers int
3232
StageMeshWorkers int
33-
ModelConfig ModelConfig
33+
}
34+
35+
func getConfigOverrides(modelConfig ModelConfig, parentModelConfig ModelNodeConfig, uuid string) ModelNodeConfig {
36+
if _, found := modelConfig.Individual[uuid]; found {
37+
temp := modelConfig.Individual[uuid]
38+
if temp.Exclude != nil {
39+
parentModelConfig.Exclude = temp.Exclude
40+
}
41+
if temp.RenderOnlyAddressedFixture != nil {
42+
parentModelConfig.RenderOnlyAddressedFixture = temp.RenderOnlyAddressedFixture
43+
}
44+
}
45+
return parentModelConfig
3446
}

pkg/types/fixture.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type Fixture struct {
3535
CustomIdType int
3636
Mappings []*Mapping
3737
Gobo *Gobo
38+
Model FixtureModel
3839
ChildList
3940
}
4041

@@ -62,6 +63,19 @@ func (a *Fixture) ReadMesh(fileMap map[string]*zip.File) error {
6263
return a.ChildList.ReadMesh(fileMap)
6364
}
6465

66+
func (a *Fixture) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
67+
config := getConfigOverrides(modelConfig, parentConfig, a.UUID)
68+
69+
if (config.Exclude == nil ||
70+
!(*config.Exclude)) &&
71+
!(config.RenderOnlyAddressedFixture != nil && *config.RenderOnlyAddressedFixture &&
72+
(a.Addresses == nil || len(a.Addresses.Addresses) == 0)) { // remove unpatched fixtures if desired
73+
stageModel.FixtureModels = append(stageModel.FixtureModels, a.Model)
74+
}
75+
76+
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config)
77+
}
78+
6579
type Gobo struct {
6680
Rotation float32
6781
}

pkg/types/focuspoint.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type FocusPoint struct {
1111
Name string
1212
Matrix MeshTypes.Matrix
1313
Class NodeReference[Class]
14+
Model FocusPointModel
1415
Geometries *Geometries
1516
}
1617

@@ -28,3 +29,11 @@ func (a *FocusPoint) ResolveReference(refPointers *ReferencePointers) {
2829
func (a *FocusPoint) ReadMesh(fileMap map[string]*zip.File) error {
2930
return a.Geometries.ReadMesh(fileMap)
3031
}
32+
33+
func (a *FocusPoint) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
34+
config := getConfigOverrides(modelConfig, parentConfig, a.UUID)
35+
36+
if config.Exclude == nil || !(*config.Exclude) {
37+
stageModel.FocusPointModels = append(stageModel.FocusPointModels, a.Model)
38+
}
39+
}

pkg/types/generalscenedescription.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ type GeneralSceneDescription struct {
77
ProviderVersion string
88
UserData *UserData
99
Scene *Scene
10-
StageModel *StageModel
1110
}
1211

1312
func (a *GeneralSceneDescription) CreateReferencePointer(refPointers *ReferencePointers) {
@@ -17,3 +16,13 @@ func (a *GeneralSceneDescription) CreateReferencePointer(refPointers *ReferenceP
1716
func (a *GeneralSceneDescription) ResolveReference(refPointers *ReferencePointers) {
1817
a.Scene.ResolveReference(refPointers)
1918
}
19+
20+
func (a *GeneralSceneDescription) GetStageModel(config ModelConfig) StageModel {
21+
model := StageModel{}
22+
23+
local_config := config.Global.asNodeConfig()
24+
25+
addNodeModelsToStageModel(a.Scene.Layers, &model, config, local_config)
26+
27+
return model
28+
}

pkg/types/groupobject.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,9 @@ func (a *GroupObject) ResolveReference(refPointers *ReferencePointers) {
2828
func (a *GroupObject) ReadMesh(fileMap map[string]*zip.File) error {
2929
return a.ChildList.ReadMesh(fileMap)
3030
}
31+
32+
func (a *GroupObject) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
33+
config := getConfigOverrides(modelConfig, parentConfig, a.UUID)
34+
35+
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config)
36+
}

0 commit comments

Comments
 (0)