55# (see file ...\ContactDetectionMPR\handler.jl)
66# after computing all distances between colliding shapes response calculations are done
77function computeContactForcesAndTorques (sim:: Modia.SimulationModel , scene, world, time, file)
8- ch = scene. options. contactDetection
9- # Compute signed distances of all contact shapes during zero-crossing computation
10- # try
8+ if typeof (scene. options. contactDetection) <: Modia3D.ContactDetectionMPR_handler
9+ ch:: Modia3D.ContactDetectionMPR_handler = scene. options. contactDetection
10+ # Compute signed distances of all contact shapes during zero-crossing computation
11+ # try
1112 setComputationFlag (ch)
1213 if Modia. isEvent (sim) # with Event
1314 # handle event
@@ -20,9 +21,14 @@ function computeContactForcesAndTorques(sim::Modia.SimulationModel, scene, world
2021 TimerOutputs. @timeit sim. timer " Modia3D_1 getDistances!" getDistances! (scene, ch, world)
2122 end
2223 TimerOutputs. @timeit sim. timer " Modia3D_1 dealWithContacts!" dealWithContacts! (sim, scene, ch, world, time, file)
24+ # dealWithContacts!(sim, scene, ch, world, time, file)
2325 # catch e
2426 # println("Bug in Modia3D/src/Composition/dynamicCollision.jl: error curing collision detection at time = ", time)
2527 # end
28+ else
29+ error (" No contact detection handler is defined" )
30+ end
31+ return nothing
2632end
2733
2834# each shape pair in contact is stored in ch.contactDict
3339# (see file ...\Composition\responseCalculation\elasticCollisionResponse.jl)
3440# further, at an event simulation status is updated, contact material is replaced
3541# and the actual contactDict is stored
36- function dealWithContacts! (sim:: Modia.SimulationModel , scene:: Scene{F} , ch:: Composition.ContactDetectionMPR_handler , world:: Composition.Object3D{F} , time:: Float64 , file:: Nothing ):: Nothing where F <: Modia3D.VarFloatType
42+ function dealWithContacts! (sim:: Modia.SimulationModel{F, T} , scene:: Scene{F} , ch:: Composition.ContactDetectionMPR_handler{M,F} , world:: Composition.Object3D{F} , time:: Float64 , file:: Nothing ):: Nothing where { F <: Modia3D.VarFloatType , T, M}
3743
38- simh:: Modia.EventHandler = sim. eventHandler
44+ simh:: Modia.EventHandler{F,T} = sim. eventHandler
3945 f1:: SVector{3,F} = Modia3D. ZeroVector3D (F)
4046 f2:: SVector{3,F} = Modia3D. ZeroVector3D (F)
4147 t1:: SVector{3,F} = Modia3D. ZeroVector3D (F)
4248 t2:: SVector{3,F} = Modia3D. ZeroVector3D (F)
4349
44- for (pairID, pair) in ch. contactDict
50+ for (pairID:: Int64 , pair:: ContactPair{F} ) in ch. contactDict
4551 obj1:: Composition.Object3D{F} = pair. obj1
4652 obj2:: Composition.Object3D{F} = pair. obj2
4753 rContact:: SVector{3,F} = (pair. contactPoint1 + pair. contactPoint2)/ F (2.0 )
0 commit comments