DragAndDropEvent.ts 104 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459
  1. import { threeWorld } from "@/stores/threeWorld.ts";
  2. import { courseChapter3dShow } from "@/stores/courseChapter3dShow.ts";
  3. /**
  4. * 处理指定物体拖拽逻辑
  5. * 鼠标事件处理
  6. */
  7. export class DragAndDropEvent {
  8. // 可以被调用的 iframe 对象
  9. public objIframe : any = null;
  10. // 三维对象
  11. public ChengGuangYuanJing : any = null;
  12. // babylon 对象
  13. public BABYLON : any = null;
  14. /**
  15. * 用于记录当前的相机对应参数
  16. * 当 cameraRadius、cameraAlpha、cameraBeta 都不等于空
  17. * 则固定视角对应的参数
  18. */
  19. public cameraRadius : any = null;
  20. public cameraAlpha : any = null;
  21. public cameraBeta : any = null;
  22. /**
  23. * 记录当前被点击的物体,当鼠标释放后,则重置为null
  24. */
  25. public objClickMesh : any = null;
  26. /**
  27. * 记录另外一个可以跟着移动拖拽的物体的坐标,当鼠标释放后,则重置为null
  28. */
  29. public objClickMesh2 : any = null;
  30. /**
  31. * 记录被点击的物体的时候的坐标
  32. * */
  33. public clickMeshPosition = { "x" : 0, "y" : 0, "z" : 0 };
  34. /**
  35. * 记录鼠标当时点击三维的坐标
  36. */
  37. public clickPosition = { "x" : 0, "y" : 0, "z" : 0 };
  38. /**
  39. * 当前不可选中的物体列表,当鼠标弹起,则对应的物体先全部恢复可选中,然后重置为 []
  40. */
  41. public isPickableList : any = [];
  42. /**
  43. * 上一步是否显示 回调方法
  44. * open true - 显示, false - 隐藏
  45. */
  46. public tipsBtnsUpOpenEventCallback : any = null;
  47. /**
  48. * 下一步是否显示 回调方法
  49. * open true - 显示, false - 隐藏
  50. */
  51. public tipsBtnsDownOpenEventCallback : any = null;
  52. /**
  53. * 当前的鼠标移动逻辑是否可以触发了,进行一个控制
  54. * 要不然会出现闪烁问题
  55. */
  56. public meshBtnInteractiveBool = true;
  57. // 处理高光的对象
  58. public objHighlightLayerEvent : any = null;
  59. // 当前是否弹出对应的文字逻辑
  60. public txtBool = false;
  61. /**
  62. * 记录本次点击,高亮的物体列表
  63. */
  64. public highlightLayerMeshListClick = [];
  65. // 每次 new 出对象则会调用这个构造函数
  66. constructor() {
  67. }
  68. /**
  69. * 用于控制点击是否触发拖拽的逻辑
  70. * pickResult 鼠标的对象
  71. * statue 当前的步骤状态
  72. */
  73. public dragAndDropClick = (pickResult : any, statue : any) => {
  74. // console.log(
  75. // "用于控制点击是否触发拖拽的逻辑",
  76. // pickResult
  77. // );
  78. // @ts-ignore
  79. let objSceneActiveCamera = this.ChengGuangYuanJing.CommonVal.find().objSceneActiveCamera;
  80. let objMesh = pickResult.pickedMesh;
  81. let thisClickPosition = pickResult.pickedPoint;
  82. // 触发点击事件
  83. let clickEventBool = false;
  84. if (
  85. (
  86. statue == "将四个安全桩放置到正确的位置"
  87. && (
  88. objMesh.id == "model_1709892139359安全桩001"
  89. || objMesh.id == "model_1709892139359安全桩004"
  90. || objMesh.id == "model_1709892139359安全桩003"
  91. || objMesh.id == "model_1709892139359安全桩002"
  92. )
  93. )
  94. || (
  95. statue == "将检测机器人6寸轮子安装到正确位置"
  96. && (
  97. objMesh.id == "exhibition_html_1710385814466_6”后轮左_primitive0"
  98. || objMesh.id == "exhibition_html_1710385814466_6”后轮左_primitive1"
  99. || objMesh.id == "exhibition_html_1710385814466_6”中轮左_primitive0"
  100. || objMesh.id == "exhibition_html_1710385814466_6”中轮左_primitive1"
  101. || objMesh.id == "exhibition_html_1710385814466_6”前轮左_primitive0"
  102. || objMesh.id == "exhibition_html_1710385814466_6”前轮左_primitive0"
  103. || objMesh.id == "exhibition_html_1710385814466_6”后轮右_primitive0"
  104. || objMesh.id == "exhibition_html_1710385814466_6”后轮右_primitive0"
  105. || objMesh.id == "exhibition_html_1710385814466_6”中轮右_primitive0"
  106. || objMesh.id == "exhibition_html_1710385814466_6”中轮右_primitive1"
  107. || objMesh.id == "exhibition_html_1710385814466_6”前轮右_primitive0"
  108. || objMesh.id == "exhibition_html_1710385814466_6”前轮右_primitive1"
  109. )
  110. )
  111. || (
  112. statue == "将检测机器人的轮子安装到正确的位置"
  113. && (
  114. objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive0"
  115. || objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive1"
  116. || objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive2"
  117. || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive0"
  118. || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive1"
  119. || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive2"
  120. || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive0"
  121. || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive1"
  122. || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive2"
  123. || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive0"
  124. || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive1"
  125. || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive2"
  126. )
  127. )
  128. || (
  129. statue == "将检测机器人6寸右侧轮子安装到正确位置"
  130. && (
  131. // objMesh.id == "exhibition_html_1710385814466_6”后轮左_primitive0"
  132. // || objMesh.id == "exhibition_html_1710385814466_6”后轮左_primitive1"
  133. // || objMesh.id == "exhibition_html_1710385814466_6”中轮左_primitive0"
  134. // || objMesh.id == "exhibition_html_1710385814466_6”中轮左_primitive1"
  135. // || objMesh.id == "exhibition_html_1710385814466_6”前轮左_primitive0"
  136. // || objMesh.id == "exhibition_html_1710385814466_6”前轮左_primitive0"
  137. objMesh.id == "exhibition_html_1710385814466_6”后轮右_primitive0"
  138. || objMesh.id == "exhibition_html_1710385814466_6”后轮右_primitive0"
  139. || objMesh.id == "exhibition_html_1710385814466_6”中轮右_primitive0"
  140. || objMesh.id == "exhibition_html_1710385814466_6”中轮右_primitive1"
  141. || objMesh.id == "exhibition_html_1710385814466_6”前轮右_primitive0"
  142. || objMesh.id == "exhibition_html_1710385814466_6”前轮右_primitive1"
  143. )
  144. )
  145. || (
  146. statue == "将检测机器人6寸左侧轮子安装到正确位置"
  147. && (
  148. objMesh.id == "exhibition_html_1710385814466_6”后轮左_primitive0"
  149. || objMesh.id == "exhibition_html_1710385814466_6”后轮左_primitive1"
  150. || objMesh.id == "exhibition_html_1710385814466_6”中轮左_primitive0"
  151. || objMesh.id == "exhibition_html_1710385814466_6”中轮左_primitive1"
  152. || objMesh.id == "exhibition_html_1710385814466_6”前轮左_primitive0"
  153. || objMesh.id == "exhibition_html_1710385814466_6”前轮左_primitive0"
  154. // || objMesh.id == "exhibition_html_1710385814466_6”后轮右_primitive0"
  155. // || objMesh.id == "exhibition_html_1710385814466_6”后轮右_primitive0"
  156. // || objMesh.id == "exhibition_html_1710385814466_6”中轮右_primitive0"
  157. // || objMesh.id == "exhibition_html_1710385814466_6”中轮右_primitive1"
  158. // || objMesh.id == "exhibition_html_1710385814466_6”前轮右_primitive0"
  159. // || objMesh.id == "exhibition_html_1710385814466_6”前轮右_primitive1"
  160. )
  161. )
  162. || (
  163. statue == "将检测机器人10寸右侧轮子安装到正确位置"
  164. && (
  165. // objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive0"
  166. // || objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive1"
  167. // || objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive2"
  168. // || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive0"
  169. // || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive1"
  170. // || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive2"
  171. objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive0"
  172. || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive1"
  173. || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive2"
  174. || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive0"
  175. || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive1"
  176. || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive2"
  177. )
  178. )
  179. || (
  180. statue == "将检测机器人10寸左侧轮子安装到正确位置"
  181. && (
  182. objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive0"
  183. || objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive1"
  184. || objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive2"
  185. || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive0"
  186. || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive1"
  187. || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive2"
  188. // || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive0"
  189. // || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive1"
  190. // || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive2"
  191. // || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive0"
  192. // || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive1"
  193. // || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive2"
  194. )
  195. )
  196. || (
  197. statue == "将检测机器人的防撞杆安装到正确的位置"
  198. && (
  199. objMesh.id == "exhibition_html_1710385814466_防撞杆_primitive0"
  200. || objMesh.id == "exhibition_html_1710385814466_防撞杆_primitive1"
  201. )
  202. ) || (
  203. statue == "将检测机器人的防撞杆锁安装到正确的位置"
  204. && (
  205. objMesh.id == "exhibition_html_1710385814466_防撞杆锁_primitive0"
  206. || objMesh.id == "exhibition_html_1710385814466_防撞杆锁_primitive1"
  207. )
  208. ) || (
  209. statue == "将检测机器人的镜头架安装到正确的位置"
  210. && (
  211. objMesh.id == "exhibition_html_1710385814466_镜头架_primitive0"
  212. || objMesh.id == "exhibition_html_1710385814466_镜头架_primitive1"
  213. || objMesh.id == "exhibition_html_1710385814466_镜头架_primitive2"
  214. || objMesh.id == "exhibition_html_1710385814466_镜头架_primitive3"
  215. || objMesh.id == "exhibition_html_1710385814466_相机_primitive0"
  216. || objMesh.id == "exhibition_html_1710385814466_相机_primitive1"
  217. || objMesh.id == "exhibition_html_1710385814466_相机_primitive2"
  218. || objMesh.id == "exhibition_html_1710385814466_相机_primitive3"
  219. )
  220. ) || (
  221. statue == "将检测机器人的相机安装到正确的位置"
  222. && (
  223. objMesh.id == "exhibition_html_1710385814466_镜头架_primitive0"
  224. || objMesh.id == "exhibition_html_1710385814466_镜头架_primitive1"
  225. || objMesh.id == "exhibition_html_1710385814466_镜头架_primitive2"
  226. || objMesh.id == "exhibition_html_1710385814466_镜头架_primitive3"
  227. || objMesh.id == "exhibition_html_1710385814466_相机_primitive0"
  228. || objMesh.id == "exhibition_html_1710385814466_相机_primitive1"
  229. || objMesh.id == "exhibition_html_1710385814466_相机_primitive2"
  230. || objMesh.id == "exhibition_html_1710385814466_相机_primitive3"
  231. )
  232. ) || (
  233. statue == "将绕线车的电源线安装到正确的位置"
  234. && (
  235. objMesh.id == "exhibition_html_1710385814466_绕线车-电源线"
  236. )
  237. ) || (
  238. statue == "将绕线车的纠偏轮安装到正确的位置"
  239. && (
  240. objMesh.id == "exhibition_html_1710385814466_绕线车-纠偏轮_primitive0"
  241. || objMesh.id == "exhibition_html_1710385814466_绕线车-纠偏轮_primitive1"
  242. )
  243. ) || (
  244. statue == "将绕线车的锂电池安装到正确的位置"
  245. && (
  246. objMesh.id == "exhibition_html_1710385814466_锂电池_primitive0"
  247. || objMesh.id == "exhibition_html_1710385814466_锂电池_primitive1"
  248. || objMesh.id == "exhibition_html_1710385814466_锂电池_primitive2"
  249. )
  250. ) || (
  251. statue == "将绕线车的电脑主机放置到正确的位置"
  252. && (
  253. objMesh.id == "exhibition_html_1710385814466_电脑屏幕_primitive0"
  254. || objMesh.id == "exhibition_html_1710385814466_电脑屏幕_primitive1"
  255. || objMesh.id == "exhibition_html_1710385814466_电脑屏幕_primitive2"
  256. || objMesh.id == "exhibition_html_1710385814466_电脑主机_primitive0"
  257. || objMesh.id == "exhibition_html_1710385814466_电脑主机_primitive1"
  258. || objMesh.id == "exhibition_html_1710385814466_电脑主机_primitive2"
  259. || objMesh.id == "exhibition_html_1710385814466_电脑主机_primitive3"
  260. )
  261. ) || (
  262. statue == "将绕线车的手柄安装到正确的位置"
  263. && (
  264. objMesh.id == "exhibition_html_1710385814466_手柄_primitive0"
  265. || objMesh.id == "exhibition_html_1710385814466_手柄_primitive1"
  266. || objMesh.id == "exhibition_html_1710385814466_手柄_primitive2"
  267. || objMesh.id == "exhibition_html_1710385814466_手柄_primitive3"
  268. )
  269. )
  270. ) {
  271. clickEventBool = true;
  272. this.iframeCanvasStyle("pointer");
  273. // 开始触发鼠标移动逻辑
  274. courseChapter3dShow().show.pickResultMoveBool = true;
  275. }
  276. if (clickEventBool == false) {
  277. return;
  278. }
  279. // console.log(
  280. // "是否允许拖拽",
  281. // statue,
  282. // objMesh.id,
  283. // gizmoManagerBool,
  284. // objMesh
  285. // );
  286. if (
  287. objMesh.parent != null && objMesh.parent != undefined
  288. && (
  289. (
  290. objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive0"
  291. || objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive1"
  292. || objMesh.id == "exhibition_html_1710385814466_10”后轮左_primitive2"
  293. || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive0"
  294. || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive1"
  295. || objMesh.id == "exhibition_html_1710385814466_10”前轮左_primitive2"
  296. || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive0"
  297. || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive1"
  298. || objMesh.id == "exhibition_html_1710385814466_10”后轮右_primitive2"
  299. || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive0"
  300. || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive1"
  301. || objMesh.id == "exhibition_html_1710385814466_10”前轮右_primitive2"
  302. || objMesh.id == "exhibition_html_1710385814466_6”后轮左_primitive0"
  303. || objMesh.id == "exhibition_html_1710385814466_6”后轮左_primitive1"
  304. || objMesh.id == "exhibition_html_1710385814466_6”中轮左_primitive0"
  305. || objMesh.id == "exhibition_html_1710385814466_6”中轮左_primitive1"
  306. || objMesh.id == "exhibition_html_1710385814466_6”前轮左_primitive0"
  307. || objMesh.id == "exhibition_html_1710385814466_6”前轮左_primitive0"
  308. || objMesh.id == "exhibition_html_1710385814466_6”后轮右_primitive0"
  309. || objMesh.id == "exhibition_html_1710385814466_6”后轮右_primitive0"
  310. || objMesh.id == "exhibition_html_1710385814466_6”中轮右_primitive0"
  311. || objMesh.id == "exhibition_html_1710385814466_6”中轮右_primitive1"
  312. || objMesh.id == "exhibition_html_1710385814466_6”前轮右_primitive0"
  313. || objMesh.id == "exhibition_html_1710385814466_6”前轮右_primitive1"
  314. ) || (
  315. objMesh.id == "exhibition_html_1710385814466_镜头架_primitive0"
  316. || objMesh.id == "exhibition_html_1710385814466_镜头架_primitive1"
  317. || objMesh.id == "exhibition_html_1710385814466_镜头架_primitive2"
  318. || objMesh.id == "exhibition_html_1710385814466_镜头架_primitive3"
  319. ) || (
  320. objMesh.id == "exhibition_html_1710385814466_相机_primitive0"
  321. || objMesh.id == "exhibition_html_1710385814466_相机_primitive1"
  322. || objMesh.id == "exhibition_html_1710385814466_相机_primitive2"
  323. || objMesh.id == "exhibition_html_1710385814466_相机_primitive3"
  324. ) || (
  325. objMesh.id == "exhibition_html_1710385814466_绕线车-纠偏轮_primitive0"
  326. || objMesh.id == "exhibition_html_1710385814466_绕线车-纠偏轮_primitive1"
  327. ) || (
  328. objMesh.id == "exhibition_html_1710385814466_锂电池_primitive0"
  329. || objMesh.id == "exhibition_html_1710385814466_锂电池_primitive1"
  330. || objMesh.id == "exhibition_html_1710385814466_锂电池_primitive2"
  331. ) || (
  332. objMesh.id == "exhibition_html_1710385814466_电脑屏幕_primitive0"
  333. || objMesh.id == "exhibition_html_1710385814466_电脑屏幕_primitive1"
  334. || objMesh.id == "exhibition_html_1710385814466_电脑屏幕_primitive2"
  335. || objMesh.id == "exhibition_html_1710385814466_电脑主机_primitive0"
  336. || objMesh.id == "exhibition_html_1710385814466_电脑主机_primitive1"
  337. || objMesh.id == "exhibition_html_1710385814466_电脑主机_primitive2"
  338. || objMesh.id == "exhibition_html_1710385814466_电脑主机_primitive3"
  339. ) || (
  340. objMesh.id == "exhibition_html_1710385814466_手柄_primitive0"
  341. || objMesh.id == "exhibition_html_1710385814466_手柄_primitive1"
  342. || objMesh.id == "exhibition_html_1710385814466_手柄_primitive2"
  343. || objMesh.id == "exhibition_html_1710385814466_手柄_primitive3"
  344. ) || (
  345. objMesh.id == "exhibition_html_1710385814466_防撞杆_primitive0"
  346. || objMesh.id == "exhibition_html_1710385814466_防撞杆_primitive1"
  347. ) || (
  348. objMesh.id == "exhibition_html_1710385814466_防撞杆锁_primitive0"
  349. || objMesh.id == "exhibition_html_1710385814466_防撞杆锁_primitive1"
  350. )
  351. )
  352. ) {
  353. // 重新更新被拖拽的目标物体
  354. objMesh = objMesh.parent;
  355. let list : any = [];
  356. // 设置旋转
  357. if (objMesh.id == "exhibition_html_1710385814466__10”前轮右") {
  358. list = [
  359. { "name" : "10”前轮右轴", "speed" : 1, "from" : 6, "to" : 6 },
  360. { "name" : "10”前轮右", "speed" : 1, "from" : 6, "to" : 6 },
  361. ];
  362. } else if (objMesh.id == "exhibition_html_1710385814466__10”后轮右") {
  363. list = [
  364. { "name" : "10”后轮右轴", "speed" : 1, "from" : 6, "to" : 6 },
  365. { "name" : "10”后轮右", "speed" : 1, "from" : 6, "to" : 6 },
  366. ];
  367. } else if (objMesh.id == "exhibition_html_1710385814466__10”前轮左") {
  368. list = [
  369. { "name" : "10”前轮左轴", "speed" : 1, "from" : 6, "to" : 6 },
  370. { "name" : "10”前轮左", "speed" : 1, "from" : 6, "to" : 6 },
  371. ];
  372. } else if (objMesh.id == "exhibition_html_1710385814466__10”后轮左") {
  373. list = [
  374. { "name" : "10”后轮左轴", "speed" : 1, "from" : 6, "to" : 6 },
  375. { "name" : "10”后轮左", "speed" : 1, "from" : 6, "to" : 6 },
  376. ];
  377. } else if (objMesh.id == "exhibition_html_1710385814466__6”前轮右") {
  378. // @ts-ignore
  379. this.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  380. "6”前轮右", 'start', 10, 6, 6, false, null, function(state : any, objAnimation : any) {
  381. if (state == "播放完成") {
  382. }
  383. }
  384. );
  385. } else if (objMesh.id == "exhibition_html_1710385814466__6”中轮右") {
  386. // @ts-ignore
  387. this.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  388. "6”中轮右", 'start', 10, 6, 6, false, null, function(state : any, objAnimation : any) {
  389. if (state == "播放完成") {
  390. }
  391. }
  392. );
  393. } else if (objMesh.id == "exhibition_html_1710385814466__6”后轮右") {
  394. // @ts-ignore
  395. this.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  396. "6”后轮右", 'start', 10, 6, 6, false, null, function(state : any, objAnimation : any) {
  397. if (state == "播放完成") {
  398. }
  399. }
  400. );
  401. } else if (objMesh.id == "exhibition_html_1710385814466__6”前轮左") {
  402. // @ts-ignore
  403. this.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  404. "6”前轮左", 'start', 10, 6, 6, false, null, function(state : any, objAnimation : any) {
  405. if (state == "播放完成") {
  406. }
  407. }
  408. );
  409. } else if (objMesh.id == "exhibition_html_1710385814466__6”中轮左") {
  410. // @ts-ignore
  411. this.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  412. "6”中轮左", 'start', 10, 6, 6, false, null, function(state : any, objAnimation : any) {
  413. if (state == "播放完成") {
  414. }
  415. }
  416. );
  417. } else if (objMesh.id == "exhibition_html_1710385814466__6”后轮左") {
  418. // @ts-ignore
  419. this.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  420. "6”后轮左", 'start', 10, 6, 6, false, null, function(state : any, objAnimation : any) {
  421. if (state == "播放完成") {
  422. }
  423. }
  424. );
  425. }
  426. for (let i = 0; i < list.length; i++) {
  427. let thisList = list[i];
  428. // @ts-ignore
  429. this.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  430. thisList.name, 'start', thisList.speed, thisList.from, thisList.to, false, null, function(state : any, objAnimation : any) {
  431. if (state == "播放完成") {
  432. }
  433. }
  434. );
  435. }
  436. }
  437. if (
  438. objSceneActiveCamera != null && objSceneActiveCamera != undefined
  439. && clickEventBool == true
  440. ) {
  441. this.cameraRadius = objSceneActiveCamera.radius;
  442. this.cameraAlpha = objSceneActiveCamera.alpha;
  443. this.cameraBeta = objSceneActiveCamera.beta;
  444. this.objClickMesh = objMesh;
  445. // console.log(
  446. // "点击选中的物体,或者是节点",
  447. // this.objClickMesh
  448. // );
  449. // 进行特殊处理
  450. if (this.objClickMesh.id == "exhibition_html_1710385814466__镜头架") {
  451. this.objClickMesh2 = this.ChengGuangYuanJing.CommonVal.find().objScene.getNodeById("exhibition_html_1710385814466__相机");
  452. }
  453. else if (this.objClickMesh.id == "exhibition_html_1710385814466__相机") {
  454. this.objClickMesh2 = this.ChengGuangYuanJing.CommonVal.find().objScene.getNodeById("exhibition_html_1710385814466__镜头架");
  455. }
  456. else if (this.objClickMesh.id == "exhibition_html_1710385814466__电脑屏幕") {
  457. this.objClickMesh2 = this.ChengGuangYuanJing.CommonVal.find().objScene.getNodeById("exhibition_html_1710385814466__电脑主机");
  458. }
  459. else if (this.objClickMesh.id == "exhibition_html_1710385814466__电脑主机") {
  460. this.objClickMesh2 = this.ChengGuangYuanJing.CommonVal.find().objScene.getNodeById("exhibition_html_1710385814466__电脑屏幕");
  461. }
  462. else {
  463. this.objClickMesh2 = null;
  464. }
  465. // objClickMesh2 = objMesh;
  466. // 临时记录 objClickMesh2 的所在世界坐标
  467. if (this.objClickMesh2 != null && this.objClickMesh2 != undefined) {
  468. this.objClickMesh2["oldAbsolutePosition"] = JSON.parse(JSON.stringify({
  469. "x" : this.objClickMesh2.absolutePosition.x,
  470. "y" : this.objClickMesh2.absolutePosition.y,
  471. "z" : this.objClickMesh2.absolutePosition.z
  472. }));
  473. }
  474. /**
  475. * 这里是关键,一定要把对应的物体不可选中
  476. * 后续开发你会发现,会让目标多个物体同时设置不可选中
  477. */
  478. this.isPickableList = [];
  479. this.isPickableList.push(objMesh);
  480. this.childrenIsPickableUpdate(this.isPickableList, false);
  481. // 一定要用获取绝对坐标,这样才可以解决不同模型轴向,问题导致设置 position 会各种出错
  482. this.clickMeshPosition.x = objMesh.absolutePosition.x;
  483. this.clickMeshPosition.y = objMesh.absolutePosition.y;
  484. this.clickMeshPosition.z = objMesh.absolutePosition.z;
  485. this.clickPosition.x = thisClickPosition.x;
  486. this.clickPosition.y = thisClickPosition.y;
  487. this.clickPosition.z = thisClickPosition.z;
  488. } else {
  489. this.cameraRadius = null;
  490. this.cameraAlpha = null;
  491. this.cameraBeta = null;
  492. this.objClickMesh = null;
  493. this.objClickMesh2 = null;
  494. // 重置为可选中
  495. this.childrenIsPickableUpdate(this.isPickableList, true);
  496. this.isPickableList = [];
  497. }
  498. }
  499. /**
  500. * 切换3d的iframe的canvas 的手势样式
  501. * type normal - 正常样式, pointer - 手势样式
  502. */
  503. public iframeCanvasStyle = (type : any) => {
  504. // @ts-ignore
  505. // let objRenderCanvas = threeWorld().obj.newIframe.objIframe.document.getElementById("renderCanvas");
  506. let objRenderCanvas = threeWorld().obj.newIframe.objIframe.document.getElementById("canvasZone");
  507. if (objRenderCanvas == null || objRenderCanvas == undefined) {
  508. return;
  509. }
  510. // console.log(
  511. // "切换3d的iframe的canvas 的手势样式",
  512. // objRenderCanvas,
  513. // type
  514. // );
  515. if (type == "pointer") {
  516. objRenderCanvas.style.cursor = "pointer";
  517. return;
  518. }
  519. objRenderCanvas.style.cursor = "default";
  520. }
  521. /**
  522. * 设置目标对象,是否存在子物体对象,来设置 ( isPickable ) 是否可选中
  523. * objMeshList 目标 mesh 或者 node 对象 列表
  524. * bool true - 可选中, false - 不可选中
  525. */
  526. public childrenIsPickableUpdate = (objMeshList : any, bool : any) => {
  527. // 设置为不可选中
  528. for (var i = 0; i < objMeshList.length; i++) {
  529. let thisObjMeshList = objMeshList[i];
  530. // 如果存在子物体
  531. if (thisObjMeshList._children != null && thisObjMeshList._children != undefined) {
  532. for (let i = 0; i < thisObjMeshList._children.length; i++) {
  533. let thisChildren = thisObjMeshList._children[i];
  534. thisChildren.isPickable = bool;
  535. }
  536. }
  537. thisObjMeshList.isPickable = bool;
  538. }
  539. }
  540. /**
  541. * 用于控制拖拽鼠标弹起后的逻辑
  542. * pickResult 鼠标的对象
  543. * statue 当前的步骤状态
  544. */
  545. public dragAndDropPointerup = (pickResult : any, statue : any) => {
  546. // console.log(
  547. // "用于控制拖拽鼠标弹起后的逻辑",
  548. // // pickResult,
  549. // pickResult.pickedPoint
  550. // );
  551. // let objMesh = pickResult.pickedMesh;
  552. // let thisClickPosition = pickResult.pickedPoint;
  553. if (
  554. statue == "将四个安全桩放置到正确的位置"
  555. || statue == "将检测机器人6寸轮子安装到正确位置"
  556. || statue == "将检测机器人的轮子安装到正确的位置"
  557. || statue == "将检测机器人6寸右侧轮子安装到正确位置"
  558. || statue == "将检测机器人6寸左侧轮子安装到正确位置"
  559. || statue == "将检测机器人10寸右侧轮子安装到正确位置"
  560. || statue == "将检测机器人10寸左侧轮子安装到正确位置"
  561. || statue == "将检测机器人的防撞杆安装到正确的位置"
  562. || statue == "将检测机器人的防撞杆锁安装到正确的位置"
  563. || statue == "将检测机器人的镜头架安装到正确的位置"
  564. || statue == "将检测机器人的相机安装到正确的位置"
  565. || statue == "将绕线车的电源线安装到正确的位置"
  566. || statue == "将绕线车的纠偏轮安装到正确的位置"
  567. || statue == "将绕线车的锂电池安装到正确的位置"
  568. || statue == "将绕线车的电脑主机放置到正确的位置"
  569. || statue == "将绕线车的手柄安装到正确的位置"
  570. ) {
  571. this.dragAndDropPointerupEvent(pickResult, statue);
  572. }
  573. this.cameraRadius = null;
  574. this.cameraAlpha = null;
  575. this.cameraBeta = null;
  576. this.objClickMesh = null;
  577. this.objClickMesh2 = null;
  578. // 重置为可选中
  579. this.childrenIsPickableUpdate(this.isPickableList, true);
  580. this.isPickableList = [];
  581. if (
  582. statue == "将四个安全桩放置到正确的位置"
  583. || statue == "将检测机器人6寸轮子安装到正确位置"
  584. || statue == "将检测机器人的轮子安装到正确的位置"
  585. || statue == "将检测机器人6寸右侧轮子安装到正确位置"
  586. || statue == "将检测机器人6寸左侧轮子安装到正确位置"
  587. || statue == "将检测机器人10寸右侧轮子安装到正确位置"
  588. || statue == "将检测机器人10寸左侧轮子安装到正确位置"
  589. || statue == "将检测机器人的防撞杆安装到正确的位置"
  590. || statue == "将检测机器人的防撞杆锁安装到正确的位置"
  591. || statue == "将检测机器人的镜头架安装到正确的位置"
  592. || statue == "将检测机器人的相机安装到正确的位置"
  593. || statue == "将绕线车的电源线安装到正确的位置"
  594. || statue == "将绕线车的纠偏轮安装到正确的位置"
  595. || statue == "将绕线车的锂电池安装到正确的位置"
  596. || statue == "将绕线车的电脑主机放置到正确的位置"
  597. || statue == "将绕线车的手柄安装到正确的位置"
  598. ) {
  599. this.iframeCanvasStyle("normal");
  600. // 开始触发鼠标移动逻辑
  601. courseChapter3dShow().show.pickResultMoveBool = false;
  602. }
  603. }
  604. /**
  605. * 拖拽鼠标弹起后判断对应流程是否可以继续往下走
  606. * pickResult 鼠标的对象
  607. * statue 当前的步骤状态
  608. *
  609. */
  610. public dragAndDropPointerupEvent = (pickResult : any, statue : any) => {
  611. if (this.objClickMesh == null || this.objClickMesh == undefined) {
  612. return;
  613. }
  614. let meshInstallConfig : any = threeWorld().obj.meshInstallConfig;
  615. // console.log(
  616. // "拖拽鼠标弹起后判断对应流程是否可以继续往下走",
  617. // statue,
  618. // meshInstallConfig
  619. // );
  620. // @ts-ignore
  621. let CommonVal = this.ChengGuangYuanJing.CommonVal;
  622. // 被判断的多个物体列表
  623. let list : any = [];
  624. // 对应数组下标数量
  625. let positionListIndex : any = {};
  626. // 记录 positionListIndex 出现的数量
  627. let positionListIndexSum = 0;
  628. // 记录符合条件的数量
  629. let sumOk = 0;
  630. // 记录符合条件的id
  631. let okJsonId : any = {};
  632. // 是否出现过不符合条件的数据
  633. let noCondition = false;
  634. // 是否出现设置到范围坐标里
  635. let updatePosition = false;
  636. switch (statue) {
  637. case '将四个安全桩放置到正确的位置':
  638. // objClickMesh
  639. list = [
  640. "model_1709892139359安全桩001",
  641. "model_1709892139359安全桩002",
  642. "model_1709892139359安全桩003",
  643. "model_1709892139359安全桩004",
  644. ];
  645. // 判断已经在的数组下标数量
  646. for (let i = 0; i < list.length; i++) {
  647. let thisList = list[i];
  648. let objMesh = CommonVal.find().objScene.getMeshById(thisList);
  649. if (objMesh != null && objMesh != undefined) {
  650. if (meshInstallConfig[thisList] != null && meshInstallConfig[thisList] != undefined) {
  651. let objMeshInstallConfig = meshInstallConfig[thisList];
  652. let absolutePosition = objMeshInstallConfig['absolutePosition'];
  653. let positionList = objMeshInstallConfig['positionList'];
  654. let distance = objMeshInstallConfig['distance'];
  655. for (let positionListI = 0; positionListI < positionList.length; positionListI++) {
  656. let thisPositionList = positionList[positionListI];
  657. // 得到两点之间的距离
  658. let thisVector3distanceTo = this.BABYLON.Vector3.Distance(
  659. new this.BABYLON.Vector3(parseFloat(objMesh.absolutePosition.x), parseFloat(objMesh.absolutePosition.y), parseFloat(objMesh.absolutePosition.z)),
  660. new this.BABYLON.Vector3(parseFloat(thisPositionList.x), parseFloat(thisPositionList.y), parseFloat(thisPositionList.z))
  661. );
  662. // console.log(
  663. // "thisVector3distanceTo", thisVector3distanceTo
  664. // );
  665. if (thisVector3distanceTo <= distance) {
  666. if (positionListIndex[positionListI] == null || positionListIndex[positionListI] == undefined) {
  667. positionListIndex[positionListI] = [];
  668. }
  669. positionListIndex[positionListI].push(thisList);
  670. // 设置为所在坐标
  671. if (thisList == this.objClickMesh.id) {
  672. updatePosition = true;
  673. // 回归坐标点逻辑
  674. this.objClickMesh.setAbsolutePosition(
  675. new this.BABYLON.Vector3(
  676. parseFloat(thisPositionList.x), parseFloat(thisPositionList.y), parseFloat(thisPositionList.z)
  677. )
  678. );
  679. }
  680. }
  681. }
  682. }
  683. }
  684. }
  685. // console.log(
  686. // "positionListIndex", positionListIndex
  687. // );
  688. // 循环判断是否恢复原始位置
  689. for (let key in positionListIndex) {
  690. positionListIndexSum += 1;
  691. let array = positionListIndex[key];
  692. // console.log(
  693. // "array", array
  694. // );
  695. if (array.length <= 0) {
  696. noCondition = true;
  697. }
  698. if (array.length >= 2) {
  699. noCondition = true;
  700. for (let i = 0; i < array.length; i++) {
  701. let thisArray = array[i];
  702. // console.log(
  703. // "thisArray", thisArray
  704. // );
  705. if (thisArray == this.objClickMesh.id) {
  706. if (meshInstallConfig[thisArray] != null && meshInstallConfig[thisArray] != undefined) {
  707. let objMeshInstallConfig = meshInstallConfig[thisArray];
  708. let absolutePosition = objMeshInstallConfig['absolutePosition'];
  709. // 回归坐标点逻辑
  710. this.objClickMesh.setAbsolutePosition(
  711. new this.BABYLON.Vector3(
  712. parseFloat(absolutePosition.x), parseFloat(absolutePosition.y), parseFloat(absolutePosition.z)
  713. )
  714. );
  715. }
  716. }
  717. }
  718. }
  719. }
  720. // console.log(
  721. // "noCondition", noCondition,
  722. // positionListIndex
  723. // );
  724. // 没有出现过在范围做表里
  725. if (updatePosition == false) {
  726. if (meshInstallConfig[this.objClickMesh.id] != null && meshInstallConfig[this.objClickMesh.id] != undefined) {
  727. let objMeshInstallConfig = meshInstallConfig[this.objClickMesh.id];
  728. let absolutePosition = objMeshInstallConfig['absolutePosition'];
  729. // 回归坐标点逻辑
  730. this.objClickMesh.setAbsolutePosition(
  731. new this.BABYLON.Vector3(
  732. parseFloat(absolutePosition.x), parseFloat(absolutePosition.y), parseFloat(absolutePosition.z)
  733. )
  734. );
  735. }
  736. }
  737. if (noCondition == false && positionListIndexSum >= list.length) {
  738. courseChapter3dShow().show.showCongratulationsViewBool = true;
  739. courseChapter3dShow().show.showEndViewBool = true;
  740. // courseChapter3dShow().show.showCongratulationsTxt = "安全桩成功放置完成,请点击下一步,将盒子拆开";
  741. // 上一步和下一步是否显示
  742. this.tipsBtnsUpOpenEvent(true);
  743. this.tipsBtnsDownOpenEvent(true);
  744. } else {
  745. courseChapter3dShow().show.showCongratulationsViewBool = false;
  746. courseChapter3dShow().show.showEndViewBool = false;
  747. // 上一步和下一步是否显示
  748. this.tipsBtnsUpOpenEvent(false);
  749. this.tipsBtnsDownOpenEvent(false);
  750. }
  751. break;
  752. case '将检测机器人6寸轮子安装到正确位置':
  753. list = [
  754. "exhibition_html_1710385814466__6”前轮右",
  755. "exhibition_html_1710385814466__6”中轮右",
  756. "exhibition_html_1710385814466__6”后轮右",
  757. "exhibition_html_1710385814466__6”前轮左",
  758. "exhibition_html_1710385814466__6”中轮左",
  759. "exhibition_html_1710385814466__6”后轮左",
  760. ];
  761. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  762. break;
  763. case '将检测机器人的轮子安装到正确的位置':
  764. list = [
  765. "exhibition_html_1710385814466__10”前轮右",
  766. "exhibition_html_1710385814466__10”后轮右",
  767. "exhibition_html_1710385814466__10”前轮左",
  768. "exhibition_html_1710385814466__10”后轮左",
  769. ];
  770. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  771. break;
  772. case '将检测机器人6寸右侧轮子安装到正确位置':
  773. list = [
  774. "exhibition_html_1710385814466__6”前轮右",
  775. "exhibition_html_1710385814466__6”中轮右",
  776. "exhibition_html_1710385814466__6”后轮右",
  777. // "exhibition_html_1710385814466__6”前轮左",
  778. // "exhibition_html_1710385814466__6”中轮左",
  779. // "exhibition_html_1710385814466__6”后轮左",
  780. ];
  781. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  782. break;
  783. case '将检测机器人6寸左侧轮子安装到正确位置':
  784. list = [
  785. // "exhibition_html_1710385814466__6”前轮右",
  786. // "exhibition_html_1710385814466__6”中轮右",
  787. // "exhibition_html_1710385814466__6”后轮右",
  788. "exhibition_html_1710385814466__6”前轮左",
  789. "exhibition_html_1710385814466__6”中轮左",
  790. "exhibition_html_1710385814466__6”后轮左",
  791. ];
  792. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  793. break;
  794. case '将检测机器人10寸右侧轮子安装到正确位置':
  795. list = [
  796. "exhibition_html_1710385814466__10”前轮右",
  797. "exhibition_html_1710385814466__10”后轮右",
  798. // "exhibition_html_1710385814466__10”前轮左",
  799. // "exhibition_html_1710385814466__10”后轮左",
  800. ];
  801. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  802. break;
  803. case '将检测机器人10寸左侧轮子安装到正确位置':
  804. list = [
  805. // "exhibition_html_1710385814466__10”前轮右",
  806. // "exhibition_html_1710385814466__10”后轮右",
  807. "exhibition_html_1710385814466__10”前轮左",
  808. "exhibition_html_1710385814466__10”后轮左",
  809. ];
  810. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  811. break;
  812. case '将检测机器人的防撞杆安装到正确的位置':
  813. list = [
  814. "exhibition_html_1710385814466__防撞杆",
  815. ];
  816. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  817. break;
  818. case '将检测机器人的防撞杆锁安装到正确的位置':
  819. list = [
  820. "exhibition_html_1710385814466__防撞杆锁",
  821. ];
  822. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  823. break;
  824. case '将检测机器人的镜头架安装到正确的位置':
  825. list = [
  826. "exhibition_html_1710385814466__镜头架",
  827. ];
  828. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  829. break;
  830. case '将检测机器人的相机安装到正确的位置':
  831. list = [
  832. "exhibition_html_1710385814466__相机",
  833. ];
  834. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  835. break;
  836. case '将绕线车的电源线安装到正确的位置':
  837. list = [
  838. "exhibition_html_1710385814466_绕线车-电源线",
  839. ];
  840. this.dragAndDropPointerupAnimationEvent(statue, list, 'mesh');
  841. break;
  842. case '将绕线车的纠偏轮安装到正确的位置':
  843. list = [
  844. "exhibition_html_1710385814466__绕线车-纠偏轮",
  845. ];
  846. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  847. break;
  848. case '将绕线车的锂电池安装到正确的位置':
  849. list = [
  850. "exhibition_html_1710385814466__锂电池",
  851. ];
  852. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  853. break;
  854. case '将绕线车的电脑主机放置到正确的位置':
  855. list = [
  856. "exhibition_html_1710385814466__电脑屏幕",
  857. // "exhibition_html_1710385814466__电脑主机",
  858. ];
  859. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  860. break;
  861. case '将绕线车的手柄安装到正确的位置':
  862. list = [
  863. "exhibition_html_1710385814466__手柄",
  864. ];
  865. this.dragAndDropPointerupAnimationEvent(statue, list, 'node');
  866. break;
  867. }
  868. }
  869. /**
  870. * 统一判断拖拽通过动画来决定安装的结果
  871. * statue 当前的步骤状态
  872. * list 目标列表
  873. * type 类型
  874. * mesh - 物体
  875. * node - Node
  876. *
  877. *
  878. *
  879. */
  880. public dragAndDropPointerupAnimationEvent = (statue : any, list : any, type : any) => {
  881. let meshInstallConfig : any = threeWorld().obj.meshInstallConfig;
  882. // @ts-ignore
  883. let CommonVal = threeWorld().obj.newIframe.objIframe.ChengGuangYuanJing.CommonVal;
  884. // 记录符合条件的数量
  885. let sumOk = 0;
  886. // 记录符合条件的id
  887. let okJsonId : any = {};
  888. // 判断已经在的数组下标数量
  889. for (let i = 0; i < list.length; i++) {
  890. let thisList = list[i];
  891. // let objMesh = CommonVal.find().objScene.getMeshById(thisList);
  892. let objNode = type == 'mesh' ? CommonVal.find().objScene.getMeshById(thisList) : CommonVal.find().objScene.getNodeById(thisList);
  893. // console.log(
  894. // statue, objClickMesh.getClassName(), thisList, objMesh, objNode
  895. // );
  896. if (objNode != null && objNode != undefined) {
  897. if (meshInstallConfig[thisList] != null && meshInstallConfig[thisList] != undefined) {
  898. let objMeshInstallConfig = meshInstallConfig[thisList];
  899. let animationInstall = objMeshInstallConfig['animationInstall'];
  900. let animationEnd = objMeshInstallConfig['animationEnd'];
  901. let animationInstallList = objMeshInstallConfig['animationInstallList'];
  902. let animationEndList = objMeshInstallConfig['animationEndList'];
  903. let positionList = objMeshInstallConfig['positionList'];
  904. let distance = objMeshInstallConfig['distance'];
  905. let resetPosition = objMeshInstallConfig['resetPosition']
  906. for (let positionListI = 0; positionListI < positionList.length; positionListI++) {
  907. let thisPositionList = positionList[positionListI];
  908. // 得到两点之间的距离
  909. let thisVector3distanceTo = this.BABYLON.Vector3.Distance(
  910. new this.BABYLON.Vector3(parseFloat(objNode.absolutePosition.x), parseFloat(objNode.absolutePosition.y), parseFloat(objNode.absolutePosition.z)),
  911. new this.BABYLON.Vector3(parseFloat(thisPositionList.x), parseFloat(thisPositionList.y), parseFloat(thisPositionList.z))
  912. );
  913. // console.log(
  914. // "thisVector3distanceTo",
  915. // thisVector3distanceTo,
  916. // distance
  917. // );
  918. if (thisVector3distanceTo <= distance) {
  919. // console.log(
  920. // "距离范围【内】播放动画", animationEnd, animationEndList
  921. // );
  922. if (okJsonId[thisList] == null || okJsonId[thisList] == undefined) {
  923. okJsonId[thisList] = thisList;
  924. sumOk += 1;
  925. }
  926. // 单个动画
  927. if (animationEnd != null && animationEnd != undefined) {
  928. // @ts-ignore
  929. threeWorld().obj.newIframe.objIframe.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  930. animationEnd.name, 'start', animationEnd.speed, animationEnd.from, animationEnd.to, false, null, function(state : any, objAnimation : any) {
  931. if (state == "播放完成") {
  932. }
  933. }
  934. );
  935. }
  936. // 多个动画
  937. if (animationEndList != null && animationEndList != undefined) {
  938. for (let animationEndListI = 0; animationEndListI < animationEndList.length; animationEndListI++) {
  939. let thisAnimationEndList = animationEndList[animationEndListI];
  940. // @ts-ignore
  941. threeWorld().obj.newIframe.objIframe.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  942. thisAnimationEndList.name, 'start', thisAnimationEndList.speed, thisAnimationEndList.from, thisAnimationEndList.to, false, null, function(state : any, objAnimation : any) {
  943. if (state == "播放完成") {
  944. }
  945. }
  946. );
  947. }
  948. }
  949. } else {
  950. // console.log(
  951. // "距离范围【外】播放动画", animationInstall, animationInstallList
  952. // );
  953. // 单个动画
  954. if (animationInstall != null && animationInstall != undefined) {
  955. // @ts-ignore
  956. threeWorld().obj.newIframe.objIframe.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  957. animationInstall.name, 'start', animationInstall.speed, animationInstall.from, animationInstall.to, false, null, function(state : any, objAnimation : any) {
  958. if (state == "播放完成") {
  959. }
  960. }
  961. );
  962. }
  963. // 多个动画
  964. if (animationInstallList != null && animationInstallList != undefined) {
  965. for (let animationInstallListI = 0; animationInstallListI < animationInstallList.length; animationInstallListI++) {
  966. let thisAnimationInstallList = animationInstallList[animationInstallListI];
  967. // @ts-ignore
  968. threeWorld().obj.newIframe.objIframe.ChengGuangYuanJing.CommonVal.find().animationGroupsEventCallback(
  969. thisAnimationInstallList.name, 'start', thisAnimationInstallList.speed, thisAnimationInstallList.from, thisAnimationInstallList.to, false, null, function(state : any, objAnimation : any) {
  970. if (state == "播放完成") {
  971. }
  972. }
  973. );
  974. }
  975. }
  976. }
  977. // 回归原始坐标
  978. if (resetPosition != null && resetPosition != undefined) {
  979. for (let resetPositionKey in resetPosition) {
  980. let objMeshReset = CommonVal.find().objScene.getMeshById(resetPositionKey)
  981. let objNodeReset = CommonVal.find().objScene.getNodeById(resetPositionKey);
  982. let thisResetPosition = resetPosition[resetPositionKey];
  983. let thisResetPositionNew = { "x": 0, "y": 0, "z": 0 };
  984. if (thisVector3distanceTo <= distance) {
  985. thisResetPositionNew = thisResetPosition["End"];
  986. } else {
  987. thisResetPositionNew = thisResetPosition["Install"];
  988. }
  989. if (objMeshReset != null && objMeshReset != undefined) {
  990. objMeshReset.setAbsolutePosition(
  991. new this.BABYLON.Vector3(
  992. thisResetPositionNew.x,
  993. thisResetPositionNew.y,
  994. thisResetPositionNew.z
  995. )
  996. );
  997. }
  998. if (objNodeReset != null && objNodeReset != undefined) {
  999. objNodeReset.setAbsolutePosition(
  1000. new this.BABYLON.Vector3(
  1001. thisResetPositionNew.x,
  1002. thisResetPositionNew.y,
  1003. thisResetPositionNew.z
  1004. )
  1005. );
  1006. }
  1007. }
  1008. }
  1009. }
  1010. }
  1011. }
  1012. // console.log(
  1013. // statue, sumOk, list.length
  1014. // );
  1015. if (sumOk >= list.length) {
  1016. courseChapter3dShow().show.showCongratulationsViewBool = true;
  1017. courseChapter3dShow().show.showEndViewBool = true;
  1018. // 上一步和下一步是否显示
  1019. this.tipsBtnsUpOpenEvent(true);
  1020. this.tipsBtnsDownOpenEvent(true);
  1021. } else {
  1022. courseChapter3dShow().show.showCongratulationsViewBool = false;
  1023. courseChapter3dShow().show.showEndViewBool = false;
  1024. // 上一步和下一步是否显示
  1025. this.tipsBtnsUpOpenEvent(false);
  1026. this.tipsBtnsDownOpenEvent(false);
  1027. }
  1028. }
  1029. }
  1030. /**
  1031. * 用于每帧是否固定相机视角逻辑,该方法每帧被调用
  1032. */
  1033. public cameraVisualAngleUpdate = () => {
  1034. // 固定相机视角逻辑
  1035. if (
  1036. this.cameraRadius != null && this.cameraRadius != undefined
  1037. && this.cameraAlpha != null && this.cameraAlpha != undefined
  1038. && this.cameraBeta != null && this.cameraBeta != undefined
  1039. ) {
  1040. // @ts-ignore
  1041. let objSceneActiveCamera = threeWorld().obj.newIframe.objIframe.ChengGuangYuanJing.CommonVal.find().objSceneActiveCamera;
  1042. if (objSceneActiveCamera != null && objSceneActiveCamera != undefined) {
  1043. objSceneActiveCamera.radius = this.cameraRadius;
  1044. objSceneActiveCamera.alpha = this.cameraAlpha;
  1045. objSceneActiveCamera.beta = this.cameraBeta;
  1046. }
  1047. }
  1048. }
  1049. /**
  1050. * 用于拖拽移动的逻辑
  1051. * pickResult 鼠标的对象
  1052. * statue 当前的步骤状态
  1053. */
  1054. public dragAndDropMove = (pickResult : any, statue : any) => {
  1055. // console.log(
  1056. // "用于拖拽移动的逻辑",
  1057. // pickResult
  1058. // );
  1059. if (this.objClickMesh == null || this.objClickMesh == undefined) {
  1060. return;
  1061. }
  1062. let objMesh = pickResult.pickedMesh;
  1063. let thisMovePosition = pickResult.pickedPoint;
  1064. console.log(
  1065. "this.objClickMesh", this.objClickMesh
  1066. );
  1067. console.log(
  1068. "鼠标移动触发逻辑",
  1069. // "pickResult",
  1070. // pickResult,
  1071. thisMovePosition,
  1072. this.objClickMesh.id
  1073. );
  1074. // 追加的xyz坐标
  1075. let addPosition2 = { "x" : 0, "y" : 0, "z" : 0 };
  1076. // 旋转
  1077. let rotationQuaternionNew : any = null;
  1078. // 对应的物体也要跟着旋转
  1079. let rotationQuaternionList : any = null;
  1080. // 特殊处理
  1081. if (this.objClickMesh.id == "exhibition_html_1710385814466__10”前轮左") {
  1082. // addPosition2 = { "x" : 0, "y" : -0.25, "z" : 0.3 };
  1083. addPosition2 = { "x" : 0, "y" : 0.05, "z" : 0.3 };
  1084. }
  1085. else if (this.objClickMesh.id == "exhibition_html_1710385814466__10”后轮左") {
  1086. // addPosition2 = { "x" : 0, "y" : -0.25, "z" : 0.3 };
  1087. addPosition2 = { "x" : 0, "y" : 0.05, "z" : 0.3 };
  1088. }
  1089. else if (this.objClickMesh.id == "exhibition_html_1710385814466__10”后轮右") {
  1090. // addPosition2 = { "x" : 0, "y" : 0.25, "z" : -0.3 };
  1091. // addPosition2 = { "x" : 0, "y" : 0.55, "z" : -0.3 };
  1092. // addPosition2 = { "x" : 0, "y" : 0.25, "z" : -0.3 };
  1093. addPosition2 = { "x" : 0, "y" : 0.05, "z" : -0.3 };
  1094. rotationQuaternionNew = {
  1095. "x": 1,
  1096. "y": -8.742277657347586e-8,
  1097. "z": -1.910685426890209e-15,
  1098. "w": -2.1855694143368964e-8
  1099. }
  1100. rotationQuaternionList = {
  1101. "exhibition_html_1710385814466__10”后轮右轴" :
  1102. {
  1103. "x": 1,
  1104. "y": -8.742277657347586e-8,
  1105. "z": -1.9106854647700726e-15,
  1106. "w": -2.1855694143368964e-8
  1107. },
  1108. };
  1109. }
  1110. else if (this.objClickMesh.id == "exhibition_html_1710385814466__10”前轮右") {
  1111. // addPosition2 = { "x" : 0, "y" : 0.25, "z" : -0.3 };
  1112. // addPosition2 = { "x" : 0, "y" : 0.55, "z" : -0.3 };
  1113. // addPosition2 = { "x" : 0, "y" : 0.25, "z" : -0.3 };
  1114. addPosition2 = { "x" : 0, "y" : 0.05, "z" : -0.3 };
  1115. rotationQuaternionNew = {
  1116. "x": 1,
  1117. "y": -8.742277657347586e-8,
  1118. "z": -1.910685426890209e-15,
  1119. "w": -2.1855694143368964e-8
  1120. }
  1121. rotationQuaternionList = {
  1122. "exhibition_html_1710385814466__10”前轮右轴" :
  1123. {
  1124. "x": 1,
  1125. "y": -8.742277657347586e-8,
  1126. "z": -1.9106854647700726e-15,
  1127. "w": -2.1855694143368964e-8
  1128. },
  1129. };
  1130. }
  1131. else if (this.objClickMesh.id == "exhibition_html_1710385814466__6”前轮右") {
  1132. addPosition2 = { "x" : 0, "y" : 0.15, "z" : 0 };
  1133. }
  1134. else if (this.objClickMesh.id == "exhibition_html_1710385814466__6”中轮右") {
  1135. addPosition2 = { "x" : 0, "y" : 0.15, "z" : 0 };
  1136. }
  1137. else if (this.objClickMesh.id == "exhibition_html_1710385814466__6”后轮右") {
  1138. addPosition2 = { "x" : 0, "y" : 0.15, "z" : 0 };
  1139. }
  1140. else if (this.objClickMesh.id == "exhibition_html_1710385814466__6”前轮左") {
  1141. addPosition2 = { "x" : 0, "y" : 0.15, "z" : 0 };
  1142. }
  1143. else if (this.objClickMesh.id == "exhibition_html_1710385814466__6”中轮左") {
  1144. addPosition2 = { "x" : 0, "y" : 0.15, "z" : 0 };
  1145. }
  1146. else if (this.objClickMesh.id == "exhibition_html_1710385814466__6”后轮左") {
  1147. addPosition2 = { "x" : 0, "y" : 0.15, "z" : 0 };
  1148. }
  1149. else if (this.objClickMesh.id == "model_1709892139359安全桩001") {
  1150. addPosition2 = { "x" : 0, "y" : 0.25, "z" : 0 };
  1151. }
  1152. else if (this.objClickMesh.id == "model_1709892139359安全桩004") {
  1153. addPosition2 = { "x" : 0, "y" : 0.25, "z" : 0 };
  1154. }
  1155. else if (this.objClickMesh.id == "model_1709892139359安全桩003") {
  1156. addPosition2 = { "x" : 0, "y" : 0.25, "z" : 0 };
  1157. }
  1158. else if (this.objClickMesh.id == "model_1709892139359安全桩002") {
  1159. addPosition2 = { "x" : 0, "y" : 0.25, "z" : 0 };
  1160. }
  1161. else if (this.objClickMesh.id == "exhibition_html_1710385814466__防撞杆") {
  1162. addPosition2 = { "x" : 0, "y" : 0.1, "z" : 0 };
  1163. }
  1164. else if (this.objClickMesh.id == "exhibition_html_1710385814466__防撞杆锁") {
  1165. addPosition2 = { "x" : 0, "y" : 0.1, "z" : 0 };
  1166. }
  1167. else if (this.objClickMesh.id == "exhibition_html_1710385814466__相机") {
  1168. addPosition2 = { "x" : 0, "y" : 0.25, "z" : 0 };
  1169. }
  1170. else if (this.objClickMesh.id == "exhibition_html_1710385814466__镜头架") {
  1171. addPosition2 = { "x" : 0, "y" : 0.25, "z" : 0 };
  1172. }
  1173. else if (this.objClickMesh.id == "exhibition_html_1710385814466_绕线车-电源线") {
  1174. addPosition2 = { "x" : 0, "y" : 0.2, "z" : 0 };
  1175. }
  1176. else if (this.objClickMesh.id == "exhibition_html_1710385814466__绕线车-纠偏轮") {
  1177. addPosition2 = { "x" : 0, "y" : 0.25, "z" : 0 };
  1178. }
  1179. else if (this.objClickMesh.id == "exhibition_html_1710385814466__锂电池") {
  1180. addPosition2 = { "x" : 0, "y" : 0.25, "z" : 0 };
  1181. }
  1182. else if (this.objClickMesh.id == "exhibition_html_1710385814466__电脑屏幕") {
  1183. addPosition2 = { "x" : 0, "y" : 0.2, "z" : 0 };
  1184. }
  1185. else if (this.objClickMesh.id == "exhibition_html_1710385814466__电脑主机") {
  1186. addPosition2 = { "x" : 0, "y" : 0.2, "z" : 0 };
  1187. }
  1188. else if (this.objClickMesh.id == "exhibition_html_1710385814466__手柄") {
  1189. addPosition2 = { "x" : 0, "y" : 0.2, "z" : 0 };
  1190. }
  1191. if (this.objClickMesh != null && this.objClickMesh != undefined) {
  1192. // 追加的xyz坐标
  1193. let addPosition = {
  1194. "x" : thisMovePosition.x - this.clickPosition.x,
  1195. "y" : thisMovePosition.y - this.clickPosition.y,
  1196. "z" : thisMovePosition.z - this.clickPosition.z,
  1197. };
  1198. // console.log(
  1199. // "拖拽物体id",
  1200. // this.objClickMesh.id,
  1201. // // this.objClickMesh._rotationQuaternion,
  1202. // );
  1203. // 如果存在旋转,在根据这个来旋转
  1204. if (rotationQuaternionNew != null && rotationQuaternionNew != undefined) {
  1205. this.objClickMesh._rotationQuaternion.x = rotationQuaternionNew.x;
  1206. this.objClickMesh._rotationQuaternion.y = rotationQuaternionNew.y;
  1207. this.objClickMesh._rotationQuaternion.z = rotationQuaternionNew.z;
  1208. this.objClickMesh._rotationQuaternion.w = rotationQuaternionNew.w;
  1209. }
  1210. if (rotationQuaternionList != null && rotationQuaternionList != undefined) {
  1211. if (this.objClickMesh["parent"] != null && this.objClickMesh["parent"] != undefined) {
  1212. var meshParent = this.objClickMesh["parent"];
  1213. var meshParentId = meshParent.id;
  1214. if (rotationQuaternionList[meshParentId] != null && rotationQuaternionList[meshParentId] != undefined) {
  1215. var thisRotationQuaternionList = rotationQuaternionList[meshParentId];
  1216. meshParent._rotationQuaternion.x = thisRotationQuaternionList.x;
  1217. meshParent._rotationQuaternion.y = thisRotationQuaternionList.y;
  1218. meshParent._rotationQuaternion.z = thisRotationQuaternionList.z;
  1219. meshParent._rotationQuaternion.w = thisRotationQuaternionList.w;
  1220. }
  1221. }
  1222. }
  1223. // 一定要用绝对坐标更新,这样才可以解决不同模型轴向,问题导致设置 position 会各种出错
  1224. this.objClickMesh.setAbsolutePosition(
  1225. new this.BABYLON.Vector3(
  1226. this.clickMeshPosition.x + addPosition.x + addPosition2.x,
  1227. this.clickMeshPosition.y + addPosition.y + addPosition2.y,
  1228. this.clickMeshPosition.z + addPosition.z + addPosition2.z
  1229. )
  1230. );
  1231. }
  1232. // 另外一个物体一起跟着拖拽
  1233. if (this.objClickMesh2 != null && this.objClickMesh2 != undefined) {
  1234. // // 追加的xyz坐标
  1235. // let addPosition = {
  1236. // "x" : thisMovePosition.x - this.clickPosition.x,
  1237. // "y" : thisMovePosition.y - this.clickPosition.y,
  1238. // "z" : thisMovePosition.z - this.clickPosition.z,
  1239. // };
  1240. // 追加的xyz坐标 【 跟着一起追加偏移 】
  1241. let addPosition = {
  1242. "x" : thisMovePosition.x - this.clickPosition.x + addPosition2.x,
  1243. "y" : thisMovePosition.y - this.clickPosition.y + addPosition2.y,
  1244. "z" : thisMovePosition.z - this.clickPosition.z + addPosition2.z,
  1245. };
  1246. // 一定要用绝对坐标更新,这样才可以解决不同模型轴向,问题导致设置 position 会各种出错
  1247. this.objClickMesh2.setAbsolutePosition(
  1248. new this.BABYLON.Vector3(
  1249. parseFloat(this.objClickMesh2["oldAbsolutePosition"].x) + addPosition.x,
  1250. parseFloat(this.objClickMesh2["oldAbsolutePosition"].y) + addPosition.y,
  1251. parseFloat(this.objClickMesh2["oldAbsolutePosition"].z) + addPosition.z
  1252. )
  1253. );
  1254. }
  1255. }
  1256. /**
  1257. * 上一步是否显示
  1258. * open true - 显示, false - 隐藏
  1259. */
  1260. public tipsBtnsUpOpenEvent = (open : Boolean) => {
  1261. if (this.tipsBtnsUpOpenEventCallback != null && this.tipsBtnsUpOpenEventCallback != undefined) {
  1262. this.tipsBtnsUpOpenEventCallback(open);
  1263. }
  1264. }
  1265. /**
  1266. * 下一步是否显示
  1267. * open true - 显示, false - 隐藏
  1268. */
  1269. public tipsBtnsDownOpenEvent = (open : Boolean) => {
  1270. if (this.tipsBtnsDownOpenEventCallback != null && this.tipsBtnsDownOpenEventCallback != undefined) {
  1271. this.tipsBtnsDownOpenEventCallback(open);
  1272. }
  1273. }
  1274. /**
  1275. * 切换指定按钮的交互逻辑
  1276. * obj 鼠标移动传来的对象
  1277. * statue 当前的步骤状态
  1278. * */
  1279. public threeWorldPointerMove = (obj : any, statue : any) => {
  1280. // 如果不可以触发
  1281. if (this.meshBtnInteractiveBool == false) {
  1282. return;
  1283. }
  1284. // 此时不可触发
  1285. if (this.txtBool == false) {
  1286. return;
  1287. }
  1288. let objMesh = obj.pickedMesh;
  1289. if (objMesh == null || objMesh == undefined) {
  1290. return;
  1291. }
  1292. // console.log(
  1293. // " 鼠标移动传来的对象 threeWorldPointerMove = (obj : any) => { ", objMesh.id
  1294. // );
  1295. this.meshBtnInteractive(objMesh.id);
  1296. }
  1297. /**
  1298. * 指定的目标物体id触发交互逻辑
  1299. * objMeshId 被放大的按钮id
  1300. */
  1301. public meshBtnInteractive = (objMeshId : any) => {
  1302. let thisObj = this;
  1303. // 当前的时间戳
  1304. let thisTime = new Date().getTime();
  1305. let list = [
  1306. {
  1307. "meshId" : "exhibition_html_1710385814466_检测车文字框05",
  1308. "list" : [ "exhibition_html_1710385814466_检测车文字03" ],
  1309. },
  1310. {
  1311. "meshId" : "exhibition_html_1710385814466_检测车文字03",
  1312. "list" : [ "exhibition_html_1710385814466_检测车文字框05" ],
  1313. },
  1314. {
  1315. "meshId" : "exhibition_html_1710385814466_检测车文字框06",
  1316. "list" : [ "exhibition_html_1710385814466_检测车文字04" ],
  1317. },
  1318. {
  1319. "meshId" : "exhibition_html_1710385814466_检测车文字04",
  1320. "list" : [ "exhibition_html_1710385814466_检测车文字框06" ],
  1321. },
  1322. {
  1323. "meshId" : "exhibition_html_1710385814466_检测车文字框07",
  1324. "list" : [ "exhibition_html_1710385814466_检测车文字07" ],
  1325. },
  1326. {
  1327. "meshId" : "exhibition_html_1710385814466_检测车文字07",
  1328. "list" : [ "exhibition_html_1710385814466_检测车文字框07" ],
  1329. },
  1330. {
  1331. "meshId" : "exhibition_html_1710385814466_检测车文字框08",
  1332. "list" : [ "exhibition_html_1710385814466_检测车文字08" ],
  1333. },
  1334. {
  1335. "meshId" : "exhibition_html_1710385814466_检测车文字08",
  1336. "list" : [ "exhibition_html_1710385814466_检测车文字框08" ],
  1337. },
  1338. {
  1339. "meshId" : "exhibition_html_1710385814466_检测车文字框04",
  1340. "list" : [ "exhibition_html_1710385814466_检测车文字05" ],
  1341. },
  1342. {
  1343. "meshId" : "exhibition_html_1710385814466_检测车文字05",
  1344. "list" : [ "exhibition_html_1710385814466_检测车文字框04" ],
  1345. },
  1346. {
  1347. "meshId" : "exhibition_html_1710385814466_检测车文字框03",
  1348. "list" : [ "exhibition_html_1710385814466_检测车文字06" ],
  1349. },
  1350. {
  1351. "meshId" : "exhibition_html_1710385814466_检测车文字06",
  1352. "list" : [ "exhibition_html_1710385814466_检测车文字框03" ],
  1353. },
  1354. {
  1355. "meshId" : "exhibition_html_1710385814466_检测车文字框02",
  1356. "list" : [ "exhibition_html_1710385814466_检测车文字01" ],
  1357. },
  1358. {
  1359. "meshId" : "exhibition_html_1710385814466_检测车文字01",
  1360. "list" : [ "exhibition_html_1710385814466_检测车文字框02" ],
  1361. },
  1362. {
  1363. "meshId" : "exhibition_html_1710385814466_检测车文字框01",
  1364. "list" : [ "exhibition_html_1710385814466_检测车文字02" ],
  1365. },
  1366. {
  1367. "meshId" : "exhibition_html_1710385814466_检测车文字02",
  1368. "list" : [ "exhibition_html_1710385814466_检测车文字框01" ],
  1369. },
  1370. {
  1371. "meshId" : "exhibition_html_1710385814466_绕线车文字01",
  1372. "list" : [ "exhibition_html_1710385814466_绕线车文字框002" ],
  1373. },
  1374. {
  1375. "meshId" : "exhibition_html_1710385814466_绕线车文字框002",
  1376. "list" : [ "exhibition_html_1710385814466_绕线车文字01" ],
  1377. },
  1378. {
  1379. "meshId" : "exhibition_html_1710385814466_绕线车文字02",
  1380. "list" : [ "exhibition_html_1710385814466_绕线车文字框001" ],
  1381. },
  1382. {
  1383. "meshId" : "exhibition_html_1710385814466_绕线车文字框001",
  1384. "list" : [ "exhibition_html_1710385814466_绕线车文字02" ],
  1385. },
  1386. {
  1387. "meshId" : "exhibition_html_1710385814466_绕线车文字03",
  1388. "list" : [ "exhibition_html_1710385814466_绕线车文字框004" ],
  1389. },
  1390. {
  1391. "meshId" : "exhibition_html_1710385814466_绕线车文字框004",
  1392. "list" : [ "exhibition_html_1710385814466_绕线车文字03" ],
  1393. },
  1394. {
  1395. "meshId" : "exhibition_html_1710385814466_绕线车文字04",
  1396. "list" : [ "exhibition_html_1710385814466_绕线车文字框003" ],
  1397. },
  1398. {
  1399. "meshId" : "exhibition_html_1710385814466_绕线车文字框003",
  1400. "list" : [ "exhibition_html_1710385814466_绕线车文字04" ],
  1401. },
  1402. {
  1403. "meshId" : "exhibition_html_1710385814466_绕线车文字005",
  1404. "list" : [ "exhibition_html_1710385814466_绕线车文字框005" ],
  1405. },
  1406. {
  1407. "meshId" : "exhibition_html_1710385814466_绕线车文字框005",
  1408. "list" : [ "exhibition_html_1710385814466_绕线车文字005" ],
  1409. },
  1410. ];
  1411. for (let i = 0; i < list.length; i++) {
  1412. let thisList = list[i];
  1413. let meshId = thisList['meshId'];
  1414. let listFor = thisList['list'];
  1415. listFor.push(meshId);
  1416. // 决定缩放的值
  1417. let scaling = 1;
  1418. // 决定缩放的最大值
  1419. let scalingMax = 2;
  1420. // 切换的颜色值
  1421. let color : any = {
  1422. r : 0,
  1423. g : 102,
  1424. b : 255
  1425. };
  1426. if (objMeshId != null && objMeshId != undefined && objMeshId == meshId) {
  1427. scaling = scalingMax;
  1428. color = {
  1429. r : 255,
  1430. g : 255,
  1431. b : 0
  1432. };
  1433. thisObj.meshBtnInteractiveBool = false;
  1434. setTimeout(function() {
  1435. thisObj.meshBtnInteractiveBool = true;
  1436. }, 200);
  1437. } else {
  1438. }
  1439. // console.log(
  1440. // "触发3d按钮交互逻辑", objMeshId, scaling, listFor
  1441. // );
  1442. for (let listForI = 0; listForI < listFor.length; listForI++) {
  1443. let thisListFor = listFor[listForI];
  1444. // @ts-ignore
  1445. let objMesh = threeWorld().obj.newIframe.objIframe.ChengGuangYuanJing.CommonVal.find().objScene.getMeshById(thisListFor);
  1446. if (objMesh != null && objMesh != undefined && objMesh.material != null && objMesh.material != undefined) {
  1447. // if (objMesh.material != null && objMesh.material != undefined) {
  1448. // let newColor = new BABYLON.Color3(
  1449. // parseFloat(color.r) / 255,
  1450. // parseFloat(color.g) / 255,
  1451. // parseFloat(color.b) / 255
  1452. // );
  1453. // objMesh.material.albedoColor = newColor;
  1454. // objMesh.material.emissiveColor = newColor;
  1455. // console.log(
  1456. // "objMesh.material",
  1457. // objMesh.id,
  1458. // objMesh.material.albedoColor
  1459. // );
  1460. // }
  1461. // 可以被选中
  1462. objMesh.isPickable = true;
  1463. // 记录最后一次缩放的值和时间戳
  1464. if (objMesh["carNewScaling"] == null || objMesh["carNewScaling"] == undefined) {
  1465. objMesh["carNewScaling"] = objMesh.scaling.x;
  1466. }
  1467. if (objMesh["carNewScalingTime"] == null || objMesh["carNewScalingTime"] == undefined) {
  1468. objMesh["carNewScalingTime"] = 0;
  1469. }
  1470. if (objMesh["carNewScaling"] != scaling) {
  1471. if (
  1472. // 如果不等于最大值
  1473. scaling != scalingMax
  1474. // 并且大于多少毫秒后
  1475. // && thisTime - objMesh["carNewScalingTime"] >= 1000
  1476. && thisTime - objMesh["carNewScalingTime"] >= 300
  1477. ) {
  1478. objMesh.scaling.x = scaling;
  1479. objMesh.scaling.y = scaling;
  1480. objMesh.scaling.z = scaling;
  1481. objMesh["carNewScaling"] = scaling;
  1482. if (this.highlightLayerMeshListClick.length <= 0) {
  1483. // 去除高光
  1484. this.objHighlightLayerEvent.removeAll();
  1485. }
  1486. } else if (
  1487. // 最大值
  1488. scaling == scalingMax
  1489. ) {
  1490. // 放大逻辑
  1491. objMesh.scaling.x = scaling;
  1492. objMesh.scaling.y = scaling;
  1493. objMesh.scaling.z = scaling;
  1494. objMesh["carNewScaling"] = scaling;
  1495. objMesh["carNewScalingTime"] = thisTime;
  1496. if (thisListFor.indexOf("文字框") < 0) {
  1497. let newList = [ thisListFor ];
  1498. for (
  1499. let highlightLayerMeshListClickI = 0;
  1500. highlightLayerMeshListClickI < this.highlightLayerMeshListClick.length;
  1501. highlightLayerMeshListClickI++
  1502. ) {
  1503. newList.push(this.highlightLayerMeshListClick[highlightLayerMeshListClickI]);
  1504. }
  1505. // 高光
  1506. this.objHighlightLayerEvent.meshListAdd(
  1507. // listFor,
  1508. newList,
  1509. null
  1510. );
  1511. }
  1512. }
  1513. }
  1514. }
  1515. }
  1516. }
  1517. }
  1518. /**
  1519. * 鼠标点击3d后,鼠标弹起触发逻辑
  1520. * obj 鼠标弹起后传来的对象
  1521. * statue 当前的步骤状态
  1522. */
  1523. public threeWorldPointerupEvent = (obj : any, statue : any) => {
  1524. let objMesh = obj.pickedMesh;
  1525. if (objMesh == null || objMesh == undefined) {
  1526. return;
  1527. }
  1528. console.log(
  1529. " 鼠标点击弹起了 threeWorldPointerupEvent = (obj : Object) => { ", objMesh.id
  1530. );
  1531. switch (objMesh.id) {
  1532. // 爬行器 - 后置相机
  1533. case 'exhibition_html_1710385814466_检测车文字框05':
  1534. case 'exhibition_html_1710385814466_检测车文字03':
  1535. this.meshEventTxt(1, objMesh.id);
  1536. courseChapter3dShow().show.showStudyRightTitle = "后置相机";
  1537. courseChapter3dShow().show.showStudyRightTxtList = [
  1538. "高清云台摄像机,满足360°轴向旋转,同时具备一定角度的径向旋转,可以满足拍摄管道中各个角度的管道图像,尤其是在拍摄管道接口位置时,可以采集完整的接口位置图像,以提高检测数据的完整性,方便数据分析人员对管道状况进行准确评估。",
  1539. ];
  1540. break;
  1541. // 爬行器 - 检测车身
  1542. case 'exhibition_html_1710385814466_检测车文字框06':
  1543. case 'exhibition_html_1710385814466_检测车文字04':
  1544. this.meshEventTxt(1, objMesh.id);
  1545. courseChapter3dShow().show.showStudyRightTitle = "检测车身";
  1546. courseChapter3dShow().show.showStudyRightTxtList = [
  1547. "机器人底盘,一般包含电机、控制电路系统、信号处理系统等,是机器人的核心部分,目前的检测机器人一般配备了多个电机组,支持差速控制,既能满足机器人前进后退的行走需求,也可以满足机器人原地转弯等特殊操作需求。",
  1548. ];
  1549. break;
  1550. // 爬行器 - 轮子
  1551. case 'exhibition_html_1710385814466_检测车文字框07':
  1552. case 'exhibition_html_1710385814466_检测车文字07':
  1553. this.meshEventTxt(1, objMesh.id);
  1554. courseChapter3dShow().show.showStudyRightTitle = "轮子";
  1555. courseChapter3dShow().show.showStudyRightTxtList = [
  1556. "轮组,由于不同的管道其管径大小不同,所以需要检测时根据不同的管径大小采用不同的轮组,以满足检测的需求。目前的检测机器人一般配备了多种尺寸的轮组,并采用快拆设计,保证更换方便。",
  1557. ];
  1558. break;
  1559. // 爬行器 - 前置相机
  1560. case 'exhibition_html_1710385814466_检测车文字框08':
  1561. case 'exhibition_html_1710385814466_检测车文字08':
  1562. this.meshEventTxt(1, objMesh.id);
  1563. courseChapter3dShow().show.showStudyRightTitle = "前置相机";
  1564. courseChapter3dShow().show.showStudyRightTxtList = [
  1565. "高清云台摄像机,满足360°轴向旋转,同时具备一定角度的径向旋转,可以满足拍摄管道中各个角度的管道图像,尤其是在拍摄管道接口位置时,可以采集完整的接口位置图像,以提高检测数据的完整性,方便数据分析人员对管道状况进行准确评估。",
  1566. ];
  1567. break;
  1568. // 爬行器 - 防撞杆
  1569. case 'exhibition_html_1710385814466_检测车文字框04':
  1570. case 'exhibition_html_1710385814466_检测车文字05':
  1571. this.meshEventTxt(1, objMesh.id);
  1572. courseChapter3dShow().show.showStudyRightTitle = "防撞杆";
  1573. courseChapter3dShow().show.showStudyRightTxtList = [
  1574. "防撞杆可以涉及到多个方面,包括其尺寸公差、抗拉强度、化学成分、表面质量、屈服强度、延伸率、静态弯曲、低温冲击、金相组织分析和机械性能等。这些检测项目可以确保防撞杆的质量和性能符合设计要求和安全标准。",
  1575. "要进行这些检测,可能需要使用各种设备和工具,如测量工具、力学测试设备、化学分析仪器、显微镜等。同时,检测过程需要由专业的技术人员进行,以确保结果的准确性和可靠性。",
  1576. "此外,对于机器人防撞杆的检测,可能还需要考虑其在实际使用中的性能和可靠性。例如,可以通过模拟碰撞测试来评估防撞杆在实际碰撞中的表现,以确保其能够有效地保护机器人和周围环境的安全。",
  1577. "总之,检测机器人防撞杆需要综合考虑多个方面,包括其设计、制造、使用等多个环节,以确保其质量和性能符合相关标准和要求。",
  1578. ];
  1579. break;
  1580. // 爬行器 - LED前灯
  1581. case 'exhibition_html_1710385814466_检测车文字框03':
  1582. case 'exhibition_html_1710385814466_检测车文字06':
  1583. this.meshEventTxt(1, objMesh.id);
  1584. courseChapter3dShow().show.showStudyRightTitle = "LED前灯";
  1585. courseChapter3dShow().show.showStudyRightTxtList = [
  1586. "LED灯光模块,一般包含前置远光灯组、近光灯组以及后视灯组,可以保证云台拍摄时画面的清晰度,同时也可帮助地面控制人员控制机器人行走。",
  1587. ];
  1588. break;
  1589. // 爬行器 - 升降支架
  1590. case 'exhibition_html_1710385814466_检测车文字框02':
  1591. case 'exhibition_html_1710385814466_检测车文字01':
  1592. this.meshEventTxt(1, objMesh.id);
  1593. courseChapter3dShow().show.showStudyRightTitle = "升降支架";
  1594. courseChapter3dShow().show.showStudyRightTxtList = [
  1595. "升降架,根据相关检测标准,检测机器人在管道中进行检测时,云台位置应处于管道的中心位置,以保证检测视频获取完整的非失真的管道图像,为了满足这一要求,-般检测机器人会配备升降机构,从而可以将云台根据不同管径的大小调整到管道的中心位置。",
  1596. ];
  1597. break;
  1598. // 爬行器 - 连接线缆
  1599. case 'exhibition_html_1710385814466_检测车文字框01':
  1600. case 'exhibition_html_1710385814466_检测车文字02':
  1601. this.meshEventTxt(1, objMesh.id);
  1602. courseChapter3dShow().show.showStudyRightTitle = "连接线缆";
  1603. courseChapter3dShow().show.showStudyRightTxtList = [
  1604. "连接线缆同样是一个重要的环节,它涉及到机器人的正常运行和安全性。以下是检测机器人连接线缆时需要考虑的几个方面:",
  1605. "1.外观检查:检查线缆外皮是否有裂纹、老化、变形或损坏等情况。同时,检查线缆的端头是否松动或损坏,以及连接头是否牢固连接。",
  1606. "2.导通性测试:使用万用表等测试工具,检查线缆的导通性是否正常,以确保信号和电流能够顺畅传输。",
  1607. "3.绝缘性能测试:通过绝缘电阻测试仪等设备,测量线缆的绝缘电阻值,以评估线缆的绝缘性能是否符合要求。",
  1608. "4.耐压测试:使用耐压测试仪,对线缆进行耐压测试,以检查线缆在正常工作电压下是否会出现漏电或击穿等情况。",
  1609. "5.温度测试:在机器人运行过程中,检查线缆的温度变化,以确保线缆在工作过程中不会出现过热或烧毁等情况。",
  1610. "需要注意的是,在检测机器人连接线缆时,应先关闭机器人并断开电源,以避免电击等安全风险。同时,检测过程应由专业人员进行,以确保结果的准确性和可靠性。",
  1611. "总之,检测机器人连接线缆是确保机器人正常运行和安全性的重要环节,需要综合考虑外观、导通性、绝缘性能、耐压性和温度等多个方面。",
  1612. ];
  1613. break;
  1614. // 线缆卷盘 - 控制终端
  1615. case 'exhibition_html_1710385814466_绕线车文字01':
  1616. case 'exhibition_html_1710385814466_绕线车文字框002':
  1617. this.meshEventTxt(0, objMesh.id);
  1618. courseChapter3dShow().show.showStudyRightTitle = "控制终端";
  1619. courseChapter3dShow().show.showStudyRightTxtList = [
  1620. "控制终端分为工业控制器和平板电脑两种,各有优缺点,工业控制器屏幕尺寸更大,亮度更高,高温下工作更稳定,可以搭配无线操作盒使用。平板电脑更便携,一般采用无线连接,满足不同使用场景下控制方式的需求",
  1621. ];
  1622. break;
  1623. // 线缆卷盘 - 电源连线
  1624. case 'exhibition_html_1710385814466_绕线车文字02':
  1625. case 'exhibition_html_1710385814466_绕线车文字框001':
  1626. this.meshEventTxt(0, objMesh.id);
  1627. courseChapter3dShow().show.showStudyRightTitle = "电源连线";
  1628. courseChapter3dShow().show.showStudyRightTxtList = [
  1629. "电源连线是确保机器人安全、稳定运行的重要环节。以下是检测机器人电源连线时需要考虑的几个方面:",
  1630. "1.外观检查:检查电源连线外皮是否有破损、老化、裂纹或变形等情况。同时,检查电源插头的完好性和接触是否良好。",
  1631. "2.导通性测试:使用万用表等测试工具,检查电源连线的导通性是否正常。确保电源能够顺畅地传输到机器人中。",
  1632. "3.电压测试:使用电压表等测试工具,测量电源连线的电压值是否符合要求。过高的电压可能导致设备损坏,而过低的电压则可能影响机器人的正常运行。",
  1633. "4.电流测试:通过电流表等测试工具,测量电源连线的电流值是否在正常范围内。过大的电流可能导致线缆过热、烧毁甚至引发火灾。",
  1634. "5.绝缘性能测试:使用绝缘电阻测试仪等设备,测量电源连线的绝缘电阻值,以评估线缆的绝缘性能是否满足要求。",
  1635. "6.温度测试:在机器人运行过程中,检查电源连线的温度变化。过高的温度可能表明线缆存在过载或散热不良等问题。",
  1636. ];
  1637. break;
  1638. // 线缆卷盘 - 锂电池
  1639. case 'exhibition_html_1710385814466_绕线车文字03':
  1640. case 'exhibition_html_1710385814466_绕线车文字框004':
  1641. this.meshEventTxt(0, objMesh.id);
  1642. courseChapter3dShow().show.showStudyRightTitle = "锂电池";
  1643. courseChapter3dShow().show.showStudyRightTxtList = [
  1644. "内置大容量电池,续航时间8h以上",
  1645. ];
  1646. break;
  1647. // 线缆卷盘 - 连接线缆
  1648. case 'exhibition_html_1710385814466_绕线车文字04':
  1649. case 'exhibition_html_1710385814466_绕线车文字框003':
  1650. this.meshEventTxt(0, objMesh.id);
  1651. courseChapter3dShow().show.showStudyRightTitle = "连接线缆";
  1652. courseChapter3dShow().show.showStudyRightTxtList = [
  1653. "一般线缆卷盘采用几种收线方式,手动收线、电动收线、全自动收线。手动收线即通过摇杆等方式将线缆收回;电动收线则通过按动线缆卷盘上收线开关由线缆卷盘内部的电机进行收线或通过控制终端控制收线;全自动收线是收线控制系统根据机器人回退的速度自动调整收线电机的收线速度,从而将线缆自动收回。",
  1654. ];
  1655. break;
  1656. // 线缆卷盘 - 控制手柄
  1657. case 'exhibition_html_1710385814466_绕线车文字005':
  1658. case 'exhibition_html_1710385814466_绕线车文字框005':
  1659. this.meshEventTxt(0, objMesh.id);
  1660. courseChapter3dShow().show.showStudyRightTitle = "控制手柄";
  1661. courseChapter3dShow().show.showStudyRightTxtList = [
  1662. "检测机器人控制手柄是一个关键步骤,它有助于确保机器人系统的正常运行。控制手柄作为操作机器人的重要设备,如果出现故障,将对机器人的操作产生严重影响。",
  1663. ];
  1664. break;
  1665. }
  1666. }
  1667. /**
  1668. * 根据传来的物体id,和对应配置逻辑触发效果
  1669. * car 0 - 线缆卷盘, 1 - 爬行器模块
  1670. * meshId 传物体的id
  1671. */
  1672. public meshEventTxt = (car : any, meshId : any) : any => {
  1673. if (meshId == null || meshId == undefined) {
  1674. return this;
  1675. }
  1676. // @ts-ignore
  1677. if (threeWorld().obj.meshEventTxt[meshId] == null || threeWorld().obj.meshEventTxt[meshId] == undefined) {
  1678. return this;
  1679. }
  1680. // @ts-ignore
  1681. let json : any = threeWorld().obj.meshEventTxt[meshId];
  1682. if (json["fieldSynchronous"] != null && json["fieldSynchronous"] != undefined) {
  1683. let fieldSynchronous : any = json["fieldSynchronous"];
  1684. return this.meshEventTxt(car, fieldSynchronous);
  1685. }
  1686. // 高亮的物体列表
  1687. let heighLight : any = json["heighLight"];
  1688. // 切换视角
  1689. let cameraVisualAngleGetListNameGpsTo : any = json["cameraVisualAngleGetListNameGpsTo"];
  1690. if (cameraVisualAngleGetListNameGpsTo != null && cameraVisualAngleGetListNameGpsTo != undefined) {
  1691. // @ts-ignore
  1692. threeWorld().obj.newIframe.cameraVisualAngleGetListNameGpsTo(cameraVisualAngleGetListNameGpsTo, false);
  1693. }
  1694. // console.log(
  1695. // " ========= meshEventTxt = (meshId : any) => { ========= ",
  1696. // json,
  1697. // heighLight
  1698. // );
  1699. let meshJson : any = {};
  1700. for (let i = 0; i < heighLight.length; i++) {
  1701. let thisHeighLight = heighLight[i];
  1702. meshJson[thisHeighLight] = thisHeighLight;
  1703. }
  1704. this.retVisibility(car, "update", meshJson);
  1705. return this;
  1706. }
  1707. /**
  1708. *
  1709. * 线缆卷盘 和 爬行器模块
  1710. * 恢复 或者 设置可见度,以及显示线框逻辑
  1711. *
  1712. * car 0 - 线缆卷盘, 1 - 爬行器模块
  1713. * type restore - 恢复 , update - 设置可见度和线框
  1714. * meshJson 指定的物体列表,是进行高亮,并且正常可见
  1715. * { "meshId1" : "meshId1", "meshId2" : "meshId2" }
  1716. *
  1717. */
  1718. public retVisibility = (car : any, type : any, meshJson : any) => {
  1719. // console.log(
  1720. // "retVisibility = (car : any, type : any, meshJson : any) => {",
  1721. // car, type, meshJson
  1722. // );
  1723. // 线缆卷盘
  1724. let carMeshId = "exhibition_html_1710385814466_绕线车-侧板01_primitive1";
  1725. if (car == 1) {
  1726. // 爬行器模块
  1727. carMeshId = "exhibition_html_1710385814466_上机_primitive3";
  1728. }
  1729. let objMesh = this.ChengGuangYuanJing.CommonVal.find().objScene.getMeshById(carMeshId);
  1730. // 找到整体模型的对象
  1731. let objMeshAll : any = null;
  1732. if (objMesh != null && objMesh != undefined) {
  1733. if (objMesh["_parentContainer"] != null && objMesh["_parentContainer"] != undefined) {
  1734. objMeshAll = objMesh["_parentContainer"].meshes;
  1735. }
  1736. }
  1737. for (let i = 0; i < objMeshAll.length; i++) {
  1738. let thisObjMeshAll = objMeshAll[i];
  1739. let thisMeshId = thisObjMeshAll.id;
  1740. // 跳过逻辑
  1741. if (
  1742. thisMeshId.indexOf("检测车文字") >= 0
  1743. || thisMeshId.indexOf("绕线车文字") >= 0
  1744. || thisMeshId.indexOf("标注线") >= 0
  1745. || thisObjMeshAll.visibility <= 0
  1746. ) {
  1747. continue;
  1748. }
  1749. // console.log(
  1750. // "thisObjMeshAll",
  1751. // thisMeshId,
  1752. // thisObjMeshAll.visibility
  1753. // );
  1754. // 是否恢复可见度,和隐藏线框
  1755. let visibilityRetBool = false;
  1756. // 恢复可见度
  1757. if (meshJson[thisMeshId] != null && meshJson[thisMeshId] != undefined) {
  1758. visibilityRetBool = true;
  1759. }
  1760. // 如果是恢复的话
  1761. if (type == "restore") {
  1762. visibilityRetBool = true;
  1763. }
  1764. if (
  1765. // 设置可见度和线框
  1766. type == "update"
  1767. // 不需要恢复可见度,和隐藏线框
  1768. && visibilityRetBool == false
  1769. ) {
  1770. // 不存在配置的,才进行
  1771. if (thisObjMeshAll["myDragAndDropEventRetVisibility"] == null || thisObjMeshAll["myDragAndDropEventRetVisibility"] == undefined) {
  1772. // 记录更新前的可见度
  1773. thisObjMeshAll["myDragAndDropEventRetVisibility"] = parseFloat("" + thisObjMeshAll.visibility);
  1774. // 更新可见度
  1775. thisObjMeshAll.visibility = 0.5;
  1776. // // 关闭禁用网格边框渲染
  1777. // thisObjMeshAll.disableEdgesRendering();
  1778. // // 启动网格边框渲染
  1779. // thisObjMeshAll.enableEdgesRendering(
  1780. // 1,
  1781. // true,
  1782. // {
  1783. // // /**
  1784. // // * 获取或设置一个布尔值,该布尔值指示在查找边之前应应用细分。如果几何体有点小,则可能需要激活此选项
  1785. // // * 不寻常的,比如一个三角形的顶点在另一个三角形边的两个顶点之间。在使用CSG构造网格时,这种情况经常发生。
  1786. // // */
  1787. // // "applyTessellation" : true,
  1788. // // /**
  1789. // // * 删除退化三角
  1790. // // * 获取或设置一个布尔值,该值指示不应处理退化三角形。
  1791. // // * 退化三角形是指具有2个或3个顶点的三角形,其坐标相同
  1792. // // */
  1793. // // "removeDegeneratedTriangles" : true,
  1794. // // /**
  1795. // // * 获取或设置一个布尔值,该布尔值指示必须使用备用寻边器算法
  1796. // // * 如果未定义,则默认值为true
  1797. // // */
  1798. // // "useAlternateEdgeFinder" : true,
  1799. // // /**
  1800. // // * 获取或设置一个布尔值,该布尔值指示必须使用顶点合并快速处理。
  1801. // // * 如果未定义,则默认值为true。
  1802. // // * 通常情况下,应将其保留为未定义(或设置为true),除非在边渲染中看到一些瑕疵(可能发生在复杂的几何体中)
  1803. // // * useAlternateEdgeFinder = true
  1804. // // */
  1805. // // "useFastVertexMerger" : true,
  1806. // }
  1807. // );
  1808. // // 网格边框渲染宽度
  1809. // thisObjMeshAll.edgesWidth = 0.01;
  1810. // // 网格边框渲染颜色
  1811. // thisObjMeshAll.edgesColor = new this.BABYLON.Color4(1, 1, 0, 0.3);
  1812. // 在排除列表中添加网格,以防止其影响高亮显示层或受到高亮显示层的影响。
  1813. this.objHighlightLayerEvent.objHighlightLayer.addExcludedMesh(thisObjMeshAll);
  1814. }
  1815. }
  1816. // 恢复可见度,和隐藏线框
  1817. if (visibilityRetBool == true) {
  1818. if (thisObjMeshAll["myDragAndDropEventRetVisibility"] != null && thisObjMeshAll["myDragAndDropEventRetVisibility"] != undefined) {
  1819. // 恢复可见度
  1820. thisObjMeshAll.visibility = thisObjMeshAll["myDragAndDropEventRetVisibility"];
  1821. // 关闭禁用网格边框渲染
  1822. thisObjMeshAll.disableEdgesRendering();
  1823. // 删除配置项
  1824. thisObjMeshAll["myDragAndDropEventRetVisibility"] = null;
  1825. delete thisObjMeshAll["myDragAndDropEventRetVisibility"];
  1826. // 从排除列表中删除网格,使其影响高亮显示层或受到高亮显示层的影响。
  1827. this.objHighlightLayerEvent.objHighlightLayer.removeExcludedMesh(thisObjMeshAll);
  1828. }
  1829. }
  1830. }
  1831. // 高亮的物体列表
  1832. let highlightLayerMeshList : any = [];
  1833. for (let key in meshJson) {
  1834. highlightLayerMeshList.push(key);
  1835. }
  1836. this.highlightLayerMeshListClick = highlightLayerMeshList;
  1837. if (highlightLayerMeshList.length <= 0) {
  1838. return this;
  1839. }
  1840. // 触发高亮的效果
  1841. this.objHighlightLayerEvent.meshListAdd(
  1842. highlightLayerMeshList,
  1843. null
  1844. );
  1845. return this;
  1846. }
  1847. }