Skip to content

Commit 2688ec5

Browse files
committed
New function loadPalettes!
1 parent f6a86cd commit 2688ec5

File tree

11 files changed

+53
-23
lines changed

11 files changed

+53
-23
lines changed

src/Basics/_module.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Andrea Neumayr and Martin Otter, [DLR - Institute of System Dynamics and Control
1414
module Basics
1515

1616
import Modia3D
17+
import Modia3D.Modia.OrderedCollections
1718

1819
export trailingPartOfName
1920

src/Basics/constantsAndFunctions.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ Read a JSON file from `fileName` and return a `Dict{String, StructType}` diction
9393
"""
9494
function readDictOfStructsFromJSON(fileName, StructType)
9595
dict1 = JSON.parsefile(fileName)
96-
palette = Dict{String, StructType}()
96+
palette = OrderedCollections.OrderedDict{String, StructType}()
9797
for (key1,value1) in dict1
9898
obj = StructType()
9999
for (key2,value2) in value1

src/Composition/responseCalculation/elasticCollisionResponse.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,11 @@ function contactStart(matPair::Shapes.ElasticContactPairMaterial,
7575
# Compute spring constant
7676
name1 = obj1.feature.contactMaterial
7777
name2 = obj2.feature.contactMaterial
78-
mat1 = Shapes.solidMaterialPalette[name1]
79-
mat2 = Shapes.solidMaterialPalette[name2]
78+
79+
solidMaterialPalette::Dict{String,Shapes.SolidMaterial} = Shapes.solidMaterialPalette[1]
80+
mat1 = solidMaterialPalette[name1]
81+
mat2 = solidMaterialPalette[name2]
82+
8083
E1 = mat1.YoungsModulus
8184
E2 = mat2.YoungsModulus
8285
nu1 = mat1.PoissonsRatio

src/Modia3D.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
module Modia3D
55

66
const path = dirname(dirname(@__FILE__)) # Absolute path of package directory
7-
const Version = "0.10.1"
8-
const Date = "2022-03-08"
7+
const Version = "0.10.2-dev"
8+
const Date = "2022-03-12"
99

1010
println("\nImporting Modia3D Version $Version ($Date)")
1111

src/Shapes/_module.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import JSON
3232
import Modia3D
3333
import Modia3D.Basics
3434
import Modia3D.Frames
35+
import Modia3D.Modia.OrderedCollections
3536

3637
# Colors and material
3738
export rgb, defaultColor, colorPalette, visualMaterialPalette
@@ -53,7 +54,7 @@ export SolidMaterial
5354
export solidMaterial, solidMaterialPalette
5455

5556
# Collision
56-
export rereadContactPairMaterialFromJSON
57+
export loadPalettes!, showPalettes
5758
export contactPairMaterialPalette, ElasticContactPairMaterial, TwoNamesKey
5859
export NoContactPairMaterial, ObserverContactPairMaterial, ImpulseContactPairMaterial, WheelRailContactPairMaterial
5960
export regularize, resultantCoefficientOfRestitution, resultantDampingCoefficient
@@ -86,5 +87,6 @@ include("massProperties.jl")
8687
include("contactPairMaterials.jl")
8788
include("setCollisionSmoothingRadius.jl")
8889
include("solid.jl")
90+
include("palettes.jl")
8991

9092
end

src/Shapes/contactPairMaterials.jl

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ return a `Dict{String, ContactPairMaterial}` dictionary.
109109
"""
110110
function readContactPairMaterialFromJSON(filename::AbstractString)
111111
dataJSON = JSON.parsefile(filename)
112-
palette = Dict{TwoNamesKey, Modia3D.AbstractContactPairMaterial}()
112+
palette = OrderedCollections.OrderedDict{TwoNamesKey, Modia3D.AbstractContactPairMaterial}()
113113
for (namesPair,dataPair) in dataJSON
114114
# Split a key "name1,name2" in two parts
115115
i = findfirst(",", namesPair)
@@ -132,14 +132,17 @@ end
132132

133133

134134
"""
135-
contactPairMaterialPalette
135+
const contactPairMaterialPalette
136136
137137
Dictionary of contact pair material data, see [`ElasticContactPairMaterial`](@ref)
138138
"""
139-
contactPairMaterialPalette = readContactPairMaterialFromJSON( joinpath(Modia3D.path, "palettes", "contactPairMaterials.json") )
139+
const contactPairMaterialPalette = [readContactPairMaterialFromJSON( joinpath(Modia3D.path, "palettes", "contactPairMaterials.json") )]
140140

141-
function rereadContactPairMaterialFromJSON()
142-
global contactPairMaterialPalette = readContactPairMaterialFromJSON( joinpath(Modia3D.path, "palettes", "contactPairMaterials.json") )
141+
function rereadContactPairMaterialFromJSON(; file="")
142+
if file == ""
143+
file = joinpath(Modia3D.path, "palettes", "contactPairMaterials.json")
144+
end
145+
global contactPairMaterialPalette[1] = readContactPairMaterialFromJSON(file)
143146
return nothing
144147
end
145148

@@ -154,11 +157,11 @@ function getContactPairMaterial(obj1, obj2)::Modia3D.AbstractContactPairMaterial
154157
name1 = obj1.feature.contactMaterial
155158
name2 = obj2.feature.contactMaterial
156159

157-
value = get(contactPairMaterialPalette, TwoNamesKey(name1,name2), NoContactPairMaterial())
160+
value = get(contactPairMaterialPalette[1], TwoNamesKey(name1,name2), NoContactPairMaterial())
158161
if typeof(value) == NoContactPairMaterial
159162
# Combination name1,name2 is not present
160-
value1 = get(contactPairMaterialPalette, TwoNamesKey(name1,name1), NoContactPairMaterial())
161-
value2 = get(contactPairMaterialPalette, TwoNamesKey(name2,name2), NoContactPairMaterial())
163+
value1 = get(contactPairMaterialPalette[1], TwoNamesKey(name1,name1), NoContactPairMaterial())
164+
value2 = get(contactPairMaterialPalette[1], TwoNamesKey(name2,name2), NoContactPairMaterial())
162165
if typeof(value1) != NoContactPairMaterial && typeof(value2) != NoContactPairMaterial
163166
return combineContactPairMaterials(value1, value2)
164167
else
@@ -179,11 +182,11 @@ function checkContactPairMaterialInit(obj1, obj2)::Nothing
179182
name1 = obj1.feature.contactMaterial
180183
name2 = obj2.feature.contactMaterial
181184

182-
value = get(contactPairMaterialPalette, TwoNamesKey(name1,name2), NoContactPairMaterial())
185+
value = get(contactPairMaterialPalette[1], TwoNamesKey(name1,name2), NoContactPairMaterial())
183186
if typeof(value) == NoContactPairMaterial
184187
# Combination name1,name2 is not present
185-
value1 = get(contactPairMaterialPalette, TwoNamesKey(name1,name1), NoContactPairMaterial())
186-
value2 = get(contactPairMaterialPalette, TwoNamesKey(name2,name2), NoContactPairMaterial())
188+
value1 = get(contactPairMaterialPalette[1], TwoNamesKey(name1,name1), NoContactPairMaterial())
189+
value2 = get(contactPairMaterialPalette[1], TwoNamesKey(name2,name2), NoContactPairMaterial())
187190
if typeof(value1) != NoContactPairMaterial && typeof(value2) != NoContactPairMaterial
188191
return nothing
189192
else

src/Shapes/massProperties.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ MassProperties{F}(shape::Modia3D.AbstractGeometry, material::SolidMaterial) wher
6868
# Constructor d: shape and materialName is given, material must be defined in
6969
# solidMaterialPalette --> constructor c is called
7070
MassProperties{F}(shape::Modia3D.AbstractGeometry, materialName::AbstractString) where F <: Modia3D.VarFloatType =
71-
MassProperties{F}(shape, solidMaterialPalette[materialName])
71+
MassProperties{F}(shape, solidMaterialPalette[1][materialName])
7272

7373

7474
createMassProperties(::Type{F}, massProperties::MassProperties, shape, solidMaterial) where F <: Modia3D.VarFloatType = massProperties

src/Shapes/solid.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ struct Solid{F <: Modia3D.VarFloatType} <: Modia3D.AbstractObject3DFeature
106106
end
107107

108108
if typeof(solidMaterial) == String
109-
solidMaterial = solidMaterialPalette[solidMaterial]
109+
solidMaterial = solidMaterialPalette[1][solidMaterial]
110110
end
111111

112112
if typeof(visualMaterial) == String

src/Shapes/solidMaterial.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,13 @@ readSolidMaterialFromJSON(fileName::AbstractString) =
5757
Dictionary of solid material data, see [`SolidMaterial`](@ref)
5858
"""
5959
const solidMaterialPalette =
60-
readSolidMaterialFromJSON( joinpath(Modia3D.path, "palettes", "solidMaterials.json") )
60+
[readSolidMaterialFromJSON( joinpath(Modia3D.path, "palettes", "solidMaterials.json") )]
61+
62+
function rereadSolidMaterialFromJSON(; file="")
63+
if file == ""
64+
file = joinpath(Modia3D.path, "palettes", "solidMaterials.json")
65+
end
66+
67+
global solidMaterialPalette[1] = readSolidMaterialFromJSON(file)
68+
return nothing
69+
end

src/Shapes/visualMaterial.jl

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,20 @@ end
8585
Read a JSON file consisting of a dictionary of VisualMaterial instances from `fileName` and
8686
return a `Dict{String, VisualMaterial}` dictionary.
8787
"""
88-
readDictOfStructsFromJSONVisualMaterial(fileName::AbstractString) = readDictOfStructsFromJSONVisualMaterial(fileName, VisualMaterial)
88+
readVisualMaterialFromJSON(fileName::AbstractString) = readDictOfStructsFromJSONVisualMaterial(fileName, VisualMaterial)
8989

9090

9191
"""
92-
const visualMaterialPalette
92+
visualMaterialPalette
9393
9494
Dictionary of visual material data, see [`Modia3D.Shapes.VisualMaterial`](@ref)
9595
"""
96-
const visualMaterialPalette = readDictOfStructsFromJSONVisualMaterial( joinpath(Modia3D.path, "palettes", "visualMaterials.json") )
96+
visualMaterialPalette = readVisualMaterialFromJSON( joinpath(Modia3D.path, "palettes", "visualMaterials.json") )
97+
98+
function rereadVisualMaterialFromJSON(; file="")
99+
if file == ""
100+
file = joinpath(Modia3D.path, "palettes", "visualMaterials.json")
101+
end
102+
global visualMaterialPalette = readVisualMaterialFromJSON( file )
103+
return nothing
104+
end

0 commit comments

Comments
 (0)