From f0342ff6f8292028c999392be61701a6c7bdbf92 Mon Sep 17 00:00:00 2001 From: Frederick Roy Date: Mon, 22 Sep 2025 15:00:55 +0900 Subject: [PATCH 1/5] reset also the fixed rest positions --- .../controller/InterventionalRadiologyController.inl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl b/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl index f50fc6e5f..57203d12a 100644 --- a/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl +++ b/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl @@ -1117,14 +1117,17 @@ template void InterventionalRadiologyController::fixFirstNodesWithUntil(unsigned int firstSimulatedNode) { WriteAccessor > xMstate = *getMechanicalState()->write(sofa::core::vec_id::write_access::position); + WriteAccessor > xrestMstate = *getMechanicalState()->write(sofa::core::vec_id::write_access::restPosition); WriteAccessor > vMstate = *getMechanicalState()->write(sofa::core::vec_id::write_access::velocity); // set the position to startingPos for all the nodes that are not simulated + const auto& startPos = d_startingPos.getValue(); // and add a fixedConstraint l_fixedConstraint->clearConstraints(); for(unsigned int i=0; iaddConstraint(i); } From 89ac0bbca962930d809d8e0c5c6e09dfb6abef7e Mon Sep 17 00:00:00 2001 From: Frederick Roy Date: Fri, 26 Sep 2025 09:12:36 +0900 Subject: [PATCH 2/5] Update src/BeamAdapter/component/controller/InterventionalRadiologyController.inl Co-authored-by: Hugo --- .../component/controller/InterventionalRadiologyController.inl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl b/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl index 57203d12a..4cb5e1d2f 100644 --- a/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl +++ b/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl @@ -1127,6 +1127,8 @@ void InterventionalRadiologyController::fixFirstNodesWithUntil(unsign for(unsigned int i=0; iaddConstraint(i); From 35828b705e35f5c69d6d357e3ecb8e70c97cb722 Mon Sep 17 00:00:00 2001 From: Frederick Roy Date: Mon, 13 Oct 2025 10:40:27 +0900 Subject: [PATCH 3/5] fix scenes, where the tool starting rotation is set ONLY in startingPos --- examples/3instruments.scn | 2 +- examples/SingleBeamDeployment.scn | 4 ++-- examples/SingleBeamDeploymentCollision.scn | 4 ++-- examples/python3/SingleBeamDeployment.py | 4 ++-- examples/python3/SingleBeamDeploymentCollision.py | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/3instruments.scn b/examples/3instruments.scn index e1030a6e9..64ebad9b1 100644 --- a/examples/3instruments.scn +++ b/examples/3instruments.scn @@ -65,7 +65,7 @@ ymin='0' ymax='0' zmin='1' zmax='1' /> - + diff --git a/examples/SingleBeamDeployment.scn b/examples/SingleBeamDeployment.scn index 8feca7e10..8bba658d2 100644 --- a/examples/SingleBeamDeployment.scn +++ b/examples/SingleBeamDeployment.scn @@ -31,12 +31,12 @@ - + diff --git a/examples/SingleBeamDeploymentCollision.scn b/examples/SingleBeamDeploymentCollision.scn index 6c6cd5f53..2947be69d 100644 --- a/examples/SingleBeamDeploymentCollision.scn +++ b/examples/SingleBeamDeploymentCollision.scn @@ -49,12 +49,12 @@ - + diff --git a/examples/python3/SingleBeamDeployment.py b/examples/python3/SingleBeamDeployment.py index df8059a49..225258504 100644 --- a/examples/python3/SingleBeamDeployment.py +++ b/examples/python3/SingleBeamDeployment.py @@ -37,11 +37,11 @@ def createScene(rootNode): nx=61, ny=1, nz=1, xmax=0.0, xmin=0.0, ymin=0, ymax=0, zmax=0, zmin=0, p0=[0,0,0]) - BeamMechanics.addObject('MechanicalObject', showIndices=False, name='DOFs Container', template='Rigid3d', ry=-90) + BeamMechanics.addObject('MechanicalObject', showIndices=False, name='DOFs Container', template='Rigid3d') BeamMechanics.addObject('WireBeamInterpolation', name='BeamInterpolation', WireRestShape='@../EdgeTopology/BeamRestShape', printLog=False) BeamMechanics.addObject('AdaptiveBeamForceFieldAndMass', name='BeamForceField', massDensity=0.00000155, interpolation='@BeamInterpolation') BeamMechanics.addObject('InterventionalRadiologyController', name='DeployController', template='Rigid3d', instruments='BeamInterpolation', - topology="@MeshLines", startingPos=[0, 0, 0, 0, 0, 0, 1], xtip=[0], printLog=True, + topology="@MeshLines", startingPos=[0, 0, 0, 0, -0.7071068, 0, 0.7071068], xtip=[0], printLog=True, rotationInstrument=[0], step=0.5, speed=0.5, listening=True, controlledInstrument=0) BeamMechanics.addObject('FixedProjectiveConstraint', indices=0, name='FixedConstraint') diff --git a/examples/python3/SingleBeamDeploymentCollision.py b/examples/python3/SingleBeamDeploymentCollision.py index f56869dde..5559855df 100644 --- a/examples/python3/SingleBeamDeploymentCollision.py +++ b/examples/python3/SingleBeamDeploymentCollision.py @@ -45,11 +45,11 @@ def createScene(rootNode): nx=61, ny=1, nz=1, xmax=0.0, xmin=0.0, ymin=0, ymax=0, zmax=0, zmin=0, p0=[0,0,0]) - BeamMechanics.addObject('MechanicalObject', showIndices=False, name='DOFs', template='Rigid3d', ry=-90) + BeamMechanics.addObject('MechanicalObject', showIndices=False, name='DOFs', template='Rigid3d') BeamMechanics.addObject('WireBeamInterpolation', name='BeamInterpolation', WireRestShape='@../EdgeTopology/BeamRestShape', printLog=False) BeamMechanics.addObject('AdaptiveBeamForceFieldAndMass', name='BeamForceField', massDensity=0.00000155, interpolation='@BeamInterpolation') BeamMechanics.addObject('InterventionalRadiologyController', name='DeployController', template='Rigid3d', instruments='BeamInterpolation', - topology="@MeshLines", startingPos=[0, 0, 0, 0, 0, 0, 1], xtip=[0], printLog=True, + topology="@MeshLines", startingPos=[0, 0, 0, 0, -0.7071068, 0, 0.7071068], xtip=[0], printLog=True, rotationInstrument=[0], step=5., speed=5., listening=True, controlledInstrument=0) BeamMechanics.addObject('LinearSolverConstraintCorrection', wire_optimization='true', printLog=False) From 5190fca94402d4f6f2812c101fb79f3a44a41cf6 Mon Sep 17 00:00:00 2001 From: Frederick Roy Date: Mon, 13 Oct 2025 10:56:19 +0900 Subject: [PATCH 4/5] apply at init too --- .../controller/InterventionalRadiologyController.inl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl b/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl index 4cb5e1d2f..5a21797c4 100644 --- a/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl +++ b/src/BeamAdapter/component/controller/InterventionalRadiologyController.inl @@ -283,8 +283,13 @@ void InterventionalRadiologyController::init() } WriteAccessor > x = *this->mState->write(sofa::core::vec_id::write_access::position); + WriteAccessor > xrest = *this->mState->write(sofa::core::vec_id::write_access::restPosition); + const auto& startPos = d_startingPos.getValue(); for(unsigned int i=0; i Date: Mon, 13 Oct 2025 11:21:13 +0900 Subject: [PATCH 5/5] regenerate references --- ...ruments.scn.reference_0_DOFs_mstate.txt.gz | Bin 353 -> 364 bytes ...uments.scn.reference_1_Quads_mstate.txt.gz | Bin 3261 -> 3388 bytes ...uments.scn.reference_2_Quads_mstate.txt.gz | Bin 1892 -> 2021 bytes ...uments.scn.reference_3_Quads_mstate.txt.gz | Bin 140 -> 140 bytes ..._collis.scn.reference_0_DOFs_mstate.txt.gz | Bin 2201 -> 2214 bytes ...cn.reference_1_CollisionDOFs_mstate.txt.gz | Bin 925 -> 949 bytes ...y.reference_0_DOFs Container_mstate.txt.gz | Bin 308 -> 332 bytes ...n.reference_0_DOFs Container_mstate.txt.gz | Bin 304 -> 322 bytes ...ollision.py.reference_0_DOFs_mstate.txt.gz | Bin 864 -> 878 bytes ...py.reference_1_CollisionDOFs_mstate.txt.gz | Bin 410 -> 409 bytes ...n.reference_0_DOFs Container_mstate.txt.gz | Bin 858 -> 884 bytes ...cn.reference_1_CollisionDOFs_mstate.txt.gz | Bin 409 -> 401 bytes 12 files changed, 0 insertions(+), 0 deletions(-) diff --git a/regression/references/3instruments.scn.reference_0_DOFs_mstate.txt.gz b/regression/references/3instruments.scn.reference_0_DOFs_mstate.txt.gz index 433d55d98bb1f7f8b737e38a03821bf05beab9d1..32ba123e9e46a7bcebbd0e8349d07c368b151b60 100644 GIT binary patch delta 307 zcmV-30nGm40_*|`ABzY80000000WT{){kER009600{|}i@c_Ol F008jDjL!f7 delta 296 zcmV+@0oVTQ0^tG*ABzY800000027f4M1Qe$1ThFib62qqSWm!!AaED%zZN4My6h@2 zn=Svp9Y)Ib_veWiq5V6uVZ(+E8#Zj%uwlc74I4IW*s$UMf!}oALh`YXQVO~PnnSW9 zUsV}is)wDKF9+vLw#j-;4!p7!5hL~x?!Zpftxmq`G%Ztf>Yhy_a@t8NRn}V7!hdDe zs-#OYU>FM|auyi563R4luT7z(zDv)Q<89jTB^7UAliJjbmOVZcaw2o{u%c~p_gNfdvQe4qY9_Ar*niI$H+Z-GLl*pcuf)U}nAwdV*jb@eL5_QgautpvQ u&IM(Mt4-Ik@+_Yu&U+DBnyJ?!lNEV;1T((=00030{{sNU{(J4VDF6Vr>4xY4 diff --git a/regression/references/3instruments.scn.reference_1_Quads_mstate.txt.gz b/regression/references/3instruments.scn.reference_1_Quads_mstate.txt.gz index 7e98af92bcda5a47a68c6c1625ce6e8e28f4e6e9..3997af521294ea419b3e5c95cb872cc5e4ac2648 100644 GIT binary patch literal 3388 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 PF#!8hP3)&rB7naE6jRuG literal 1892 zcmd^=`BxJL634R~TdNfXEBG+crGStWlE@tcsN9f}0xN|=gmOs(B-9Wi;RuBq^B^K} zh0A~l$Z9xhVnUijO1TmO${}I|Z}Fv` zo6^|*%i}Rx8TvJy3ose|kX5EurPd7Y=5--(46zGdR_`gBx#6fi*j%=H>*Zd^y(){= zy#UKPsoAh?_na}e11d9{nlKT>jpySTJBj;Clzj0#(Q=sreXZ{*c=XjjAJD z{rZXX$IN4ClbZhrp*n*GQ^%XmT8NLUXksbWvdJgfu0Ob@%IHz8-ARG>_+4~sJ{l#m z8R1?bvnGey%QS^f5}_c+e&xKF%qvd<4{GK28j?mVIgm9$YwA-}~F64V}r5na|*D zfHPElz|ETW54n#_LzjZ)OO?~&R^Ysz>v&`uj+H!gW~d^T-jvMzOF~qC?2pYdL%7i> zu_;%^K2|!I3?UZw=Awo9z9{}FlZk*g5Q%3-&VmMKB2v^R4MNsp$qsQRFg|G7#OU$h zpK2`fE}&G1BHOuVcUmD&VYyBHzDp$HPA)NIx-%1%Eec#Po{sdvtTSrj$#FCr%VVB> z686QVtyGXkVmmM@o&s*nVd#IQBWi#Le$n#yzt!U}Wsdk8tdDmHje|ot*=n`rTO(gt zyTA49Zb4(FI%|b)7ad>+6;i?JRwcdhw+_V1|3|!z`>v&wci4FuKp?htT6)~&gF!tu zj=OG!ynDD)on}xK3k*gdKyRrTN~|5ygK_wEYoN4~ z>HX)(<5Q!I_TjG={q(!r{VFDXikbc)-Y^p7`Xg#bLN47Yu$5%H~P9LWaB`L6l&8 zEHLqfwM#MEoLDFTF)7B(YodnNMZ2-vtPawSbXC8V*`Nm-bSLlXAaCR+mEBm2Me3-s z6-=E`^U9eAO50h}---xRtEZ% ztvn?HQJo5?(bSe|wzp9WvKy5J;i9Q%?A8F*VGV0{2{^mIPaSDv7xE>(T_u(t*EWlw zJu^4oELKm3Yzo#5kcU;2v7B(a!D$Fm?<(nfn|+;crcMlh0DHi#OBQ*rCc8$G`t8ON7 zLO&OH<$+cx)(7Z%8K3WkmDllm;rsaQCk}Fa*xd0jPCH7U>A3R*x)XPG0C~mZhpQXI zyblzosIv3%SzZX5`@@P&hrtMh;U$i?097>B(~{hn0@;fWr>~q2;Jg_1MBJJpm3lWz zm}U$26a6b$-AM11lcT#M@Rj?#Xe^9@l&Xg@uRA8|^*4jx3Y|`|0 z&X>V5a=sBq(#gfB%fWr4dFf{~Kt0RuGZW_E8gmOz zN*)f+VfUHCRpE>g-{QN6s&wB!II-R=S^5WdJ0(~fHnVk@Xx{v1ALmdPpKXE_b3W!- jBQO)^{r&mb+SFotzu1nY-u>f0Y62XH-w(r-0KmThfe^is diff --git a/regression/references/3instruments.scn.reference_3_Quads_mstate.txt.gz b/regression/references/3instruments.scn.reference_3_Quads_mstate.txt.gz index 19a2760ea9cfa0a57f090e99828bc303b9adab54..8326ab641ea62324d10889b0204aaf6358b9a756 100644 GIT binary patch delta 18 VcmeBS>|x}R@8)0t1LlcbO#mJm0`~v_ delta 18 VcmeBS>|x}R@8)0t1L28WO#mKR0|x*A diff --git a/regression/references/3instruments_collis.scn.reference_0_DOFs_mstate.txt.gz b/regression/references/3instruments_collis.scn.reference_0_DOFs_mstate.txt.gz index 4d62c85c0449ce4a120eae13e132b567a308784f..a5ef2c0fc059214697f8fd915cfe61e82a017a55 100644 GIT binary patch delta 2171 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 diff --git a/regression/references/3instruments_collis.scn.reference_1_CollisionDOFs_mstate.txt.gz b/regression/references/3instruments_collis.scn.reference_1_CollisionDOFs_mstate.txt.gz index d90e74d248b6b465f5116abeba26c62529be0e66..b59f3bce29293b7529c778bf981ef74c1877c4ff 100644 GIT binary patch delta 935 zcmV;Y16cf>2ek(ZABzY80000000WT<9)DHIl`J<7ypI)hp!l#ahw(x#$bT0U0KaU| zB~P8rz#0gk{`&u6>)ZZ*5$ZCh*55w{%D1TIAF9(gMJ({$pV4RZ8GS~d(P#7-eMX6GgJfD}O%)V@`1uO##5z z!9M^Y8KAD9{{aXiI)=cOjS}c`ZYZNfTP8OMAyC)t8IxTF*LsYvR!`Azm4A6>Os9|b zZKHWdbuR^>DiAa&CpX4LXbKEABKXm`Rc=vMm=&g4@X(t8MsseIy$=Wc~cpti;yIJb_)>r0gxkN0JGn<$;T6S zL9DiMkZ+S5GR7`LwEcL};ccE-X2-FSbIHcu+ZS*UkLk}fcp0p8GsJWOjaL0(T%5NH z?unEtvCOK+)LJ-!Jby$%f^T#@(lejq>~BP~Hvlr=^QeXh~R^2X?X7uN;cr1iwR(GxUiNPm4X z-MZ~0?)2M0K5riKs?kQohNXIlv`@wHtC^~2@=6xs=rz@tGq_T7kT8>_z4i4wuTYQn zd209J;vYl!*M3~^ka=FjEqPxER;@he=k?r|%{09$G)~1Gi#n=crZ-*H>OO^J_=(hR zRxyTqgWoK$0E0<@75Iv4pruYUVtGuTy2bF<3;W*4sh}|LC4r&n?W;HX|6Myo@+R=_aj=<#spf7qrz^q>p zPyw?6W?R;iT0VqSG6}ohKq;_4eFUGLuaW&9ZPp9I=2HO(e$^z*E=Ga9 zf)-H*{@LpF6m=Dk#~~nxpno0?jv(y-gNf#LGwtEH2w+3Y8UvTA;B*5Z!d)8Nm*k4!k5o?@HETg++%#uM0a?6XI zE9PXn8W8!;L#diu#mF`ri~4-eckU4f z9+%?qjl41k?b{o77jR#%=YIA|Wq#rTS&hj*I<{|K><~YH_3T~m@89FiuQ)7y?}NR@ z60uk3+iz8IObtELeWF32o$o>=+l2G%kEcIbI3@H$@}GHJk+ZJ)RO=geJ6KOQTbLX& z^WNg8KOQ$-%l^~nnJE{z{5Y@k*$lH(O+zg`e}$Os$E;QTdEJsWzeu%^y=hjyS*iP7 zuaUQ2r}e6;=q1tX4Klp9i>9b8Upkfh^vokQ(Ohrs1A8oAYX~peee>|8#HCvubWi^L zq*3mdHUDf<6^9fsknq|T}oM1_LSdhP!#j-t=-Ek0_|MdgpMI)dh6Kn2L-K{{8pLL zJOVez4da^8bjng`-d1MGfw-fpH$}Sjgh5-n z&0J=3Q(C#OoJq_#rO^J4V$503T|!j-rgT_oEl^8xzBtOAliH`VSeFsIiyw|m9OUNM zZ1l|3bCqL>5;AU#vdjy(lA&ubs)BRxtSwn44k%{v7&$kl2V`Hr00030{{sMeABaw0 G2mk;qM3bQa diff --git a/regression/references/SingleBeamDeployment.scn.reference_0_DOFs Container_mstate.txt.gz b/regression/references/SingleBeamDeployment.scn.reference_0_DOFs Container_mstate.txt.gz index 547f03bf1114763c202f4098406509933f004458..5a6e5415421913329b626a4a703c7ed74a5f422c 100644 GIT binary patch literal 322 zcmV-I0loeoiwFP!000000}8QKFyK;9hyYShsB55SZeVU`U=HFTF-IjwB}XMklq44b z00960?9{t$#6S!L(A-sQ10wk6FmM-c;regET%F`I96P*B;t+4S6riuq)lJ>+Kg2tH zhyNA|sfGIEP+NykS;f4FOc3JG33Q$TH+w1_R$2?xlAKRRxpSuW z=`7Y|#O~s^BQp;2Txb;Ecj`IHu|x?O7o#lm30%q0HH@m@K6loZEHe%$X7QMEZl(va Uk8c0~0RR6301(I>gmVc10Ast94*&oF literal 304 zcmV-00nh#)iwFP!000006AH0aFyK;9hyYSZ&~TJDQg~bd00030|Ll^zbptUBgZoUO z1&)vZ1dD9p6}J>8)eOFBG)i@<(M#^9bA= zH;ijWla!^zs5qQJxNgjJmb@_-h)vMT4kO!UG%K>`-d1MGfw-fpH$}SjltEj%&0J=3 zQ(C#OoJq_#rO^JVV$4~uT|!j-rgT_oEl^8xzB$UB)7mFltjmbq#ScfO4svsBHhO02 zxyrFb2^lv=S>^>?$)#QgesqHp*2 zZ}0o?`|v+Lyi`#_HpfKlm6eD6s`Z`{xmZ>_Ts-rAN#-pj6Nx#f@DRj8GRLe#9ktsg zzG19Iq~Dz6>!hLx+9D)4L^ptIMsENKN#sEQ_bfko-Ggza*Q>owEBetXl1viyZ2)l*-T?h8F}#P}*a5U|1Tq)hZx z?at0mLxi3z;KjA;NM2E39}F=v?Xbn|oJlcs*Dcx^)EgCTx4=!&)X{+6h4caet@z-} z%hNq`5w8!dynW-az%iq3c^XWFR8b?I)Rig>Gz-N}d+-EuEgnp7dKjMQNLP_&avb6t zPSmfhbkJVp(G8)OHVFSphj2Z@RN~1`6ym@FACudpd4%$gVDqU}z2wpn`S6Bk7B5gW zp&PVA9(ds(&E?+YmT=soHT)%aS@277DZ0iqejK1=)0N z_>^u}7~5{}+)aTAvc5@Ss`?g1H`O}1qp>`}`yDR;52ISVWAP4H=`9CHO7$)(Cb2k{ z7jCuY8(PhhG1}NmT7aqgZcjXAnt@7c>hO41{&1YmS~r~wusHTtE{@;8;wWUh2(|Y& zAkJXk+EF=LH@jK2tz)GD#)5hbH07yWbvD=g(YSSMu4f{NfBXgj0RR6300Ac*u#OP` E06SizQvd(} literal 864 zcmV-m1E2gKiwFP!000006AH0aFyK;9hyYSZ&~TJD${XcT&f@|A00960>{ZE;95D?0 zJBm(VRJ@OevvB^g7^HeO2$x^0Z3#R8kn`vF6Mee>&)7fz-ytLN?&pIeb9M2`IGM@qK_33kd2;3~ACNK&W< z?;&U>k5?OFD+&$ur}Y?0UXlbMFJ8>~7GNekpa^(vbZkfySOlWU`lc7f` z(56V9HJT1w+QSzf5dOj;>8e+;)Otcky#ByB-iGW$f6fcmGTx5OxUP5*KWek5g~jZv z;q&>J;=ugCRFGrggW8-X4Ph?4(=NOU64e+Zk==)S0vsgRzF>Gj`NCniTf9s72wO!( zaEcsNDDiRhZa4_KU|%%cb(up*ii=jwCB7JCK1{H#0v&O<5e|a}QS^nk{lMjggSra` zNwArtX3(2@S|PH89M{`=#?85K{=&0fcm-^m$41g(OjkBs6i1}K@Sozp;Qr<=gMUhK2ayDx@!cq##JQ!T9=(mrE)t+I z@VH~;)9H(b1HpPWT3Oz*D;6YJHMWz-j8!)q2WG^a0j}e7!0jlRFT8#B1sC?l>vFZa zqpc z!{^f}Y~jpzTTDyKUBc)Bc+Z|%xRBiPYh5WAg-ar=Wp~*)7Rm18PFQwU1B2i5;d_4s!Ljs z2X9!C^0=cFNa>U>WiV!%f~7)}j&g15P&-B>sX4QB={V71jFJ{Oh5*-GY8$qhCGCNlpoFM^ zc~6eV3{3``HQ*^2591YYGHLc&8sUfqkdV|6ZJ^Q(T4Oado*Z@sh25x-or*J*oGO+M zh!0RN%t3rCTqB=xGqN&>0|0x_d`8hH*KNWaOhSBs>5Q>wgQ1ZFG~qOi+yFSTcW8n; z$AByMm4tdBanuoL-hq39yD8WdhrU4LM2Z~JUcEx*)wgcFKdp1muloUxe0@3cicN+g ze?Z+$p~&m2XVsImd+RvJqsaSC`T?pqZ3OqsqnJP%jgzka`~v_0|NjF3lol;%s|5f6 D=)t?> literal 410 zcmV;L0cHLliwFP!000006AH0aFyK;9h_F@AH5f&s2tVQi00030|J;(xjo>g0L+?|C z8i-)(ufudP{nxT|(#0Z&1SUj1()s(9THXDAne#tAdg7eiWlTN5>_CuOyGb$2tK(|O zZEx{ZTdY6_Ubsp%B11BCB3(jH^}0OJ?uwBPwegkKoDGx5>0X|)u2IW%rUj!{DUW9a zJi(-3)e2mXqit}36Qn|{)ho$N(ut-;v|5fhE%I6!0nI~DT#}F|oeWahaH(^m=SGlh zZRh)8vfSXr#p=2je&{7nI6nZf)8s4}M$YC$UaCWZ%OW6a>b{&v?g)MuJ;4}xY$Gdwy?agQ2KmPy#0RR6309fZ6{;>rB E0C~m32><{9 diff --git a/regression/references/SingleBeamDeploymentCollision.scn.reference_0_DOFs Container_mstate.txt.gz b/regression/references/SingleBeamDeploymentCollision.scn.reference_0_DOFs Container_mstate.txt.gz index 1c27efad91200c7c2e1ced9ac1dc0bf75f585231..18d15254b4e6b86719855827226f178b8ea9a0e8 100644 GIT binary patch literal 884 zcmV-)1B?70iwFP!000000}8QKFyK;9hyYShsB55SZeVU`U=HFTF-IjwB}XMkB}XMk zC5N&k7XSbN|Nrb&$#oqu47;ZaHDEpN%OPE)|5^f4-=}ntXJ7t!B!DCca{l~2(YO2O zv-flObNC-0UaDwOnPVajaXai+t@n_~#S0e~EuNo?WWi!FM9g@^L(o3pn3W>Z<_coYSikSCk-m1uBBTSE<7m7h2#3ljQ4=bEs_sOupo08c|8TsM~aG>GYsF4}WCbyxVP+rZcjLp!>MGH#fhlZ;*corORYN*kM zFNZb>PYUWEt>|2`+#wF3svG zMdb?g$hYW3ZHtk_5WK>rXg3ztKtmo@zUcj;qkDq)bZg+4#n^lWkS77dMLM##2VwXy z)+iWggUjHLK}T=h)%;XPQ^Vh!B7pL=w4*@|xL=hQU%8evAczcFfii@Klcl>9IRUMUnPf6q#ba_|O`BW13K8Ir4N}yf-gCRo}>x z=*z?>{aQH1*v1$wiwBR06@N4b93O_KVj}-VV_D!cvEmiZFno7rf50@8Fkr-5FlK*# zv0&b|B}T$B@34teFxX}{TetF>S<6{a3xcX^eAO)0&!@)GgV@F+QLkTr0RRC1{{sM! Kw#~SY5dZ+D?5N)W literal 858 zcmV-g1Eu^QiwFP!000006AH0aFyK;9hyYSZ&~TJD${XcT&f@|A00960>{ZFJTsaK8 zI|?PxD(=g{Svdb#3{w41&R}Y8>L-B<0J8u5KGC=P{~7zw|GH#E&V4>OGB;Ts_8Z+k zmqgMXI=4w;_1+PSn>HRKbF|^$p`kUm?48L+{YrCh5GxX&yJ*hT7sI1sLx@l!=`B{b zeUvER8Swr2d-r?l-jm!Jlq`f z(S;UYq?Ew-l?}kd3CCdtnK9&28Kd0|;54;OfPx}5c=5)i<>Nc%`V@1@sA&5cR`>{(UUMoc@%za^+=@g_}3KXQm$uoD3yOfi>mB zS)=H{r9Bp8LEqB|`mzVa>f;F+Co*i~!xazv83R{zza5(~xLUX=a05>ZtJzkd1#nXw zKt3!5H5NXoW!$9I^T8XYS$I|DsqqDpeS93pSCN79Bt6(l5FMmd$I7N5vSdf`#IW^bflKMR$JDiR6$Pq5&=F8*E`n zuFIAV4WCl#r262-!vWn!p@7i1$@IL3Y4t$Z8C z8+fLT|NGiATz17yi(t*zvpXBM*1$3Bj^b5ebMRhvb(Y@1+qd^Bdl|vjRzcm8Ylp@{ z5G*SwoHJ`cCpbSS?#j*sw=XHPAg~lO->hmA%{5BKLPdZv{50=aMA%vrfL9xAg`(YB zDn6C%vdHfJ*tt{6+Owq=FS7=w{PI|Q_{zla)|+}P_*mC;q6i3a=fz^pA6C|KkeYVm zaAAeM)FV3OGB>k=(Yrdd)R^3#Y#I*@3g#tbjpy9yC3g;Ch#J4!G;GTp#?jX_vco8| kC`KYxjCp+jX~0R5hz%>V!Z diff --git a/regression/references/SingleBeamDeploymentCollision.scn.reference_1_CollisionDOFs_mstate.txt.gz b/regression/references/SingleBeamDeploymentCollision.scn.reference_1_CollisionDOFs_mstate.txt.gz index 581b69d597a59f761c7543718d2a5df04249ef7e..e442536590abaa8b1f678019c58bfba18aa47280 100644 GIT binary patch literal 401 zcmV;C0dD>uiwFP!000000}8QKFyK;9h_F@AH5f&s2tVQi00030|J+i?kr+V;{3{9) zSPE|*%Hr~mMa^6ms{PSJJND-<)$;D|FC+ic$1=6%hL|j(Wf`Q&9@_v56MdMvR4IAz zh9xPFM?Iu;CYmxBJ4L}#sY;)6ZF^EXRwSr7vyaRh`;jAdUTmVYeY>)?#T%DkZVu+C!OjOWkP>)>Fg2)&FuigWOZSX>S;HM~IE1s+5 zusBg?v!Jv3hFghyM-Kfye7M{NX2>eJE)BfHF2PE8^)O-6-d7A#UoH8L+=v> z6EI8QpNGj}@{eU9JBzKpxC|M1fco!OYIXPf%bfq|rzg%yENkik_CyO(Yd0xodHGxo zx!n*?wdHB(z%#B=jdYU?ok*9^Q$3Ie+Fb?dP#a%q%~>mXobJVw>l(EtFfEuorA#~Y z<_k;;R_zsVv<)S2a#V=5dL^+4I?*nOR^tn&MH;h>eCD($W+Ws^Cxf^)%ybBPZUf2I zb|j%vbAwiws_WkOsiY9j2U6K-VwMaWCl5SHDr}1}ECRBo?p*CjX2kFddeRz)llbjd z%6&~Nm`xZEzl|TX>$=maOw-wu1p_V5fa?zXmYQ)G(vz0&jR}mj=BO6$Fjh{%6>l`_ zC0XFm?RC*`CRrmui2j7gPq15@oBGTvAoIiZy2AC2H+-Gz--71-^A7+3|NjF3&cN58umu1B DZSTXf