Skip to content

Commit 55d2245

Browse files
authored
feat(stagemodel): class filter option
added `Class` filter option to `GetStageModel`
2 parents acea029 + 939d44c commit 55d2245

12 files changed

Lines changed: 120 additions & 38 deletions

pkg/types/childlist.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,13 @@ func ReadMeshes[T MeshReader](src []T, fileMap map[string]*zip.File) error {
8585
return nil
8686
}
8787

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)
88+
func (c *ChildList) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig, parentParameters parentNodeParameters) {
89+
addNodeModelsToStageModel(c.SceneObjects, stageModel, modelConfig, parentConfig, parentParameters)
90+
addNodeModelsToStageModel(c.GroupObjects, stageModel, modelConfig, parentConfig, parentParameters)
91+
addNodeModelsToStageModel(c.FocusPoints, stageModel, modelConfig, parentConfig, parentParameters)
92+
addNodeModelsToStageModel(c.Fixtures, stageModel, modelConfig, parentConfig, parentParameters)
93+
addNodeModelsToStageModel(c.Supports, stageModel, modelConfig, parentConfig, parentParameters)
94+
addNodeModelsToStageModel(c.Trusses, stageModel, modelConfig, parentConfig, parentParameters)
95+
addNodeModelsToStageModel(c.VideoScreens, stageModel, modelConfig, parentConfig, parentParameters)
96+
addNodeModelsToStageModel(c.Projectors, stageModel, modelConfig, parentConfig, parentParameters)
9797
}

pkg/types/config.go

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package MVRTypes
22

33
type ModelConfig struct {
4-
Global GlobalModelConfig
5-
Individual map[string]ModelNodeConfig // configure by Node (fixture, ...) UUID (also applies to children)
4+
Global GlobalModelConfig
5+
Individual map[string]ModelNodeConfig // configure by Node (fixture, ...) UUID (also applies to children)
6+
ClassConfig ModelClassConfig
67
}
78

89
type GlobalModelConfig struct {
@@ -25,6 +26,32 @@ type ModelNodeConfig struct {
2526
Exclude *bool
2627
}
2728

29+
// Note: include has precedence over exclude
30+
type ModelClassConfig struct {
31+
Excludes map[string]struct{} // specify if you want to exclude these Class UUIDs from the model
32+
Includes map[string]struct{} // specify if only want to include these Class UUIDs in the model
33+
}
34+
35+
func checkShouldIncludeClassInModel(classConfig ModelClassConfig, classID *string, parentClassID *string) (result bool, newParentClassID *string) {
36+
if classID == nil {
37+
if parentClassID == nil {
38+
return false, nil
39+
} else {
40+
classID = parentClassID
41+
}
42+
}
43+
if len(classConfig.Includes) > 0 {
44+
if _, ok := classConfig.Includes[*classID]; ok {
45+
return true, classID
46+
}
47+
} else {
48+
if _, ok := classConfig.Excludes[*classID]; !ok {
49+
return true, classID
50+
}
51+
}
52+
return false, classID
53+
}
54+
2855
type MVRParserConfig struct {
2956
MeshHandling int
3057
ReadThumbnail bool
@@ -44,3 +71,7 @@ func getConfigOverrides(modelConfig ModelConfig, parentModelConfig ModelNodeConf
4471
}
4572
return parentModelConfig
4673
}
74+
75+
type parentNodeParameters struct {
76+
classID *string
77+
}

pkg/types/fixture.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,24 @@ func (a *Fixture) ReadMesh(fileMap map[string]*zip.File) error {
6363
return a.ChildList.ReadMesh(fileMap)
6464
}
6565

66-
func (a *Fixture) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
66+
func (a *Fixture) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig, parentParameters parentNodeParameters) {
6767
config := getConfigOverrides(modelConfig, parentConfig, a.UUID)
6868

69+
validClass, classID := checkShouldIncludeClassInModel(modelConfig.ClassConfig, a.Class.String, parentParameters.classID)
70+
6971
if (config.Exclude == nil ||
7072
!(*config.Exclude)) &&
73+
validClass &&
7174
!(config.RenderOnlyAddressedFixture != nil && *config.RenderOnlyAddressedFixture &&
7275
(a.Addresses == nil || len(a.Addresses.Addresses) == 0)) { // remove unpatched fixtures if desired
7376
stageModel.FixtureModels = append(stageModel.FixtureModels, a.Model.Copy())
7477
}
7578

76-
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config)
79+
childParameters := parentNodeParameters{
80+
classID: classID,
81+
}
82+
83+
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config, childParameters)
7784
}
7885

7986
type Gobo struct {

pkg/types/focuspoint.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ func (a *FocusPoint) ReadMesh(fileMap map[string]*zip.File) error {
3030
return a.Geometries.ReadMesh(fileMap)
3131
}
3232

33-
func (a *FocusPoint) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
33+
func (a *FocusPoint) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig, parentParameters parentNodeParameters) {
3434
config := getConfigOverrides(modelConfig, parentConfig, a.UUID)
3535

36-
if config.Exclude == nil || !(*config.Exclude) {
36+
validClass, _ := checkShouldIncludeClassInModel(modelConfig.ClassConfig, a.Class.String, parentParameters.classID)
37+
38+
if (config.Exclude == nil || !(*config.Exclude)) && validClass {
3739
stageModel.FocusPointModels = append(stageModel.FocusPointModels, a.Model.Copy())
3840
}
3941
}

pkg/types/generalscenedescription.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func (a *GeneralSceneDescription) GetStageModel(config ModelConfig) StageModel {
2222

2323
local_config := config.Global.asNodeConfig()
2424

25-
addNodeModelsToStageModel(a.Scene.Layers, &model, config, local_config)
25+
addNodeModelsToStageModel(a.Scene.Layers, &model, config, local_config, parentNodeParameters{})
2626

2727
return model
2828
}

pkg/types/groupobject.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,16 @@ func (a *GroupObject) ReadMesh(fileMap map[string]*zip.File) error {
2929
return a.ChildList.ReadMesh(fileMap)
3030
}
3131

32-
func (a *GroupObject) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
32+
func (a *GroupObject) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig, parentParameters parentNodeParameters) {
3333
config := getConfigOverrides(modelConfig, parentConfig, a.UUID)
3434

35-
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config)
35+
classID := a.Class.String
36+
if classID == nil {
37+
classID = parentParameters.classID
38+
}
39+
childParameters := parentNodeParameters{
40+
classID: classID,
41+
}
42+
43+
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config, childParameters)
3644
}

pkg/types/scene.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,12 @@ func (a *Layer) ResolveReference(refPointers *ReferencePointers) {
108108
a.ChildList.ResolveReference(refPointers)
109109
}
110110

111-
func (a *Layer) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
111+
func (a *Layer) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig, parentParameters parentNodeParameters) {
112112
config := getConfigOverrides(modelConfig, parentConfig, a.UUID)
113113

114-
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config)
114+
childParameters := parentNodeParameters{
115+
classID: nil,
116+
}
117+
118+
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config, childParameters)
115119
}

pkg/types/sceneobject.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,20 @@ func (a *SceneObject) ReadMesh(fileMap map[string]*zip.File) error {
5353
return a.ChildList.ReadMesh(fileMap)
5454
}
5555

56-
func (a *SceneObject) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
56+
func (a *SceneObject) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig, parentParameters parentNodeParameters) {
5757
config := getConfigOverrides(modelConfig, parentConfig, a.UUID)
5858

59-
if config.Exclude == nil || !(*config.Exclude) {
59+
validClass, classID := checkShouldIncludeClassInModel(modelConfig.ClassConfig, a.Class.String, parentParameters.classID)
60+
61+
if (config.Exclude == nil || !(*config.Exclude)) && validClass {
6062
stageModel.SceneObjectModels = append(stageModel.SceneObjectModels, a.Model.Copy())
6163
}
6264

63-
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config)
65+
childParameters := parentNodeParameters{
66+
classID: classID,
67+
}
68+
69+
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config, childParameters)
6470
}
6571

6672
type Alignment struct {

pkg/types/stagemodel.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ func CopyMeshSlice(source []MeshTypes.Mesh) []MeshTypes.Mesh {
2929
}
3030

3131
type NodeModel interface {
32-
addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig)
32+
addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig, parentParameters parentNodeParameters)
3333
}
3434

35-
func addNodeModelsToStageModel[T NodeModel](source []T, stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
35+
func addNodeModelsToStageModel[T NodeModel](source []T, stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig, parentParameters parentNodeParameters) {
3636
if source == nil {
3737
return
3838
}
3939
for i := range source {
40-
source[i].addNodeModelsToStageModel(stageModel, modelConfig, parentConfig)
40+
source[i].addNodeModelsToStageModel(stageModel, modelConfig, parentConfig, parentParameters)
4141
}
4242
}
4343

pkg/types/support.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,18 @@ func (a *Support) ReadMesh(fileMap map[string]*zip.File) error {
5959
return a.ChildList.ReadMesh(fileMap)
6060
}
6161

62-
func (a *Support) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig) {
62+
func (a *Support) addNodeModelsToStageModel(stageModel *StageModel, modelConfig ModelConfig, parentConfig ModelNodeConfig, parentParameters parentNodeParameters) {
6363
config := getConfigOverrides(modelConfig, parentConfig, a.UUID)
6464

65-
if config.Exclude == nil || !(*config.Exclude) {
65+
validClass, classID := checkShouldIncludeClassInModel(modelConfig.ClassConfig, a.Class.String, parentParameters.classID)
66+
67+
if (config.Exclude == nil || !(*config.Exclude)) && validClass {
6668
stageModel.SupportModels = append(stageModel.SupportModels, a.Model.Copy())
6769
}
6870

69-
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config)
71+
childParameters := parentNodeParameters{
72+
classID: classID,
73+
}
74+
75+
a.ChildList.addNodeModelsToStageModel(stageModel, modelConfig, config, childParameters)
7076
}

0 commit comments

Comments
 (0)