NDSClipExtension.js 56 KB

1
  1. !function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.NDSClipExtension=n():e.NDSClipExtension=n()}(window,function(){return i=[function(e,n,i){function t(e){let f=e.viewer,c=e.clipPlaneManager,t=!1,p=(c.moveMesh=null,[]),i=[],r={x:0,y:0},o={x:0,y:0},l=!1,T=new THREE.Vector3,b=new THREE.Vector3,R=new THREE.Vector3,y=[],d=new THREE.Vector3,v=new THREE.Vector3,S=new THREE.Vector3,h=new THREE.Vector3,a=new THREE.Quaternion;var u=new THREE.Vector3(1,0,0),m=new THREE.Vector3(0,1,0),g=new THREE.Vector3(0,0,1);let n=!1;function s(){t=!1;var e=c._clipScene&&c._clipScene.getObjectByName("clipSelectedMesh");e&&c._clipScene.remove(e)}function E(e){NDSWebViewer.COMMON.isMobileDevice()?e.removeEventListener("touchmove",x):e.removeEventListener("mousemove",x),e.removeEventListener("click",M),e.removeEventListener("mousedown",w,!1),e.removeEventListener("mouseup",C,!1)}function w(e){r.x=e.offsetX,r.x=e.offsetY}function C(e){o.x=e.offsetX,o.x=e.offsetY}function M(e){if(Math.abs(r.x-o.x)<3&&Math.abs(r.y-o.y)<3&&!c._lineMeshPick&&!l){e=V(e.changedTouches?e.changedTouches[0]:e),e=N(e.x,e.y,!0);if(Array.isArray(e)){if(0==e.length)return;var n=null;if(n=0<=e[0].lineSegId||0<=e[0].meshId?e[0]:n){let e=null;d.copy(n.point);var i,n=O(n);n&&("line"==n.type||"plane"==n.type)&&c.mousemoveClickStatus&&(c.moveMesh&&(c._clipScene.remove(c.moveMesh),c.moveMesh=null),(i=c._clipScene.getObjectByName("clipSelectedMesh"))&&i._id==n.id||("line"==n.type?e=A(n,!0,!0):"plane"==n.type&&(e=H(n,!0,!0)),s(),e.name="clipSelectedMesh",e._id=n.id,c._clipScene.add(e),h.copy(T),P()),t=!0)}}else e&&("lineSphereUp"==e.object.name?h.copy(R):"lineSphereDown"==e.object.name?h.copy(b):"lineSphereCenter"==e.object.name&&h.copy(T),P());f.render()}}function x(e){if(c._lineMeshPick||l)c.mousemoveClickStatus=!1;else{var e=e.changedTouches?e.changedTouches[0]:e,n=V(e),i=n.x,n=n.y,e=(c.moveMesh&&(c._clipScene.remove(c.moveMesh),c.moveMesh=null,c.mousemoveClickStatus=!1),c.prompt&&!NDSWebViewer.COMMON.isMobileDevice()&&(t?(c.prompt.style.display="none",c.prompt.style.zIndex=-99):(c.prompt.style.display="block",c.prompt.style.zIndex=5),e=V(e,!0),c.prompt.style.left=e.x+16+"px",c.prompt.style.top=e.y+18+"px"),N(i,n,!0));if(Array.isArray(e)){if(0<e.length){i=null;if(i=0<=e[0].lineSegId||0<=e[0].meshId?e[0]:i){let e=null,n=O(i);!n||"line"!=n.type&&"plane"!=n.type||("line"==n.type?e=A(n,!0):"plane"==n.type&&(e=H(n,!0)),c.mousemoveClickStatus=!0,c.moveMesh=e,c._clipScene.add(e))}}}else e&&(c.mousemoveClickStatus=!0);f.render()}}function P(){var e,n,i,t,r,o,l,a,s;-1==c.planeNameToId.R&&(f.addSectionPlane("R"),f.renderer.clippingPlanes=[],c.partClipObjects?p.length&&(c.clippingObjectsUuids=p.slice()):c.selectedClipPlaneArr.forEach(e=>{f.renderer.clippingPlanes.push(e)})),(e=c._clipScene.getObjectByName("clipSelectedMesh"))&&(n=new THREE.Vector3(1,0,0),i=new THREE.Vector3,t=new THREE.Quaternion,r=new THREE.Vector3,o=new THREE.Vector3,s=new THREE.Vector3,l=new THREE.Vector3,a=c.clipTransRotControl.object,("Face"==e.objectType?(o.subVectors(v,S),s.subVectors(v,d),o.cross(s)):o.subVectors(R,b)).normalize(),t.setFromUnitVectors(n,o),a.quaternion.copy(t),r.subVectors(a.oriPosition,"Face"==e.objectType?d:h),s=r.dot(o),i.addScaledVector(o,s),a.position.copy(l.subVectors(a.oriPosition,i)),a.clickOriPosition=a.position.clone(),a.clickNormal=o.clone(),c.clipTransRotControl.update(),c.clipTransRotControl.dispatchEvent({type:"change"}),c.clipTransRotControl.dispatchEvent({type:"objectChange"}),"R"==c.clipTransRotControl.name&&(c.clipTransRotControl.RDelta=c.clipTransRotControl.getDeltaRotation(!1).clone()),c.clipTransRotControl.getDeltaRotation(!0,c.clipTransRotControl.RDelta),c.clipTransRotControl.getDeltaPosition(!0))}function V(e,n=!1){var i=e.offsetX||e.clientX-f.container.getBoundingClientRect().left,t=e.offsetY||e.clientY-f.container.getBoundingClientRect().top;return n?new THREE.Vector2(e.clientX,e.clientY):(f.viewManager&&(i=(n=f.viewManager.remapViewCoordinateToFullView(i,t))[0],t=n[1]),new THREE.Vector2(i,t))}function A(i,t,r){if(i&&i.parentObj instanceof THREE.Line){var o=new THREE.Group,l=i.geometry;let n,e=i.indexRange.concat();if(f.ndsModel&&(e[0]+=l.drawRange.start/2,e[1]+=l.drawRange.start/2),l.isBufferGeometry){var a=e[1]-e[0]+1,s=l.index,c=l.attributes.position.array,p=new Float32Array(6*a),a=e[0],d=e[1];if(null!=s){for(var h=s.array,u=0,m=a,g=d;m<=g;m++,u+=1){var E=h[2*m],w=h[2*m+1],C=new THREE.Vector3,v=new THREE.Vector3;C.fromArray(c,3*E),v.fromArray(c,3*w),p[6*u]=C.x,p[6*u+1]=C.y,p[6*u+2]=C.z,p[6*u+3]=v.x,p[6*u+4]=v.y,p[6*u+5]=v.z,v=C=null}n=n||(0==t?NDSWebViewer.SETTING.SelectedEdgeMaterial1:NDSWebViewer.SETTING.preSelectedEdgeMaterial);var s=new NDSWebViewer.LineSegmentsGeometry,a=(s.setPositions(p),new NDSWebViewer.LineMaterial({linewidth:n.linewidth,opacity:n.opacity,color:n.color,depthTest:n.depthTest,depthWrite:n.depthWrite,side:THREE.DoubleSide})),d=f.renderer.getPixelRatio(),t=f.renderer.domElement.width/d,d=f.renderer.domElement.height/d,d=(a.resolution.set(t,d),(t=new NDSWebViewer.LineSegments2(s,a)).applyMatrix4(i.matrixWorld),t.matrixWorldNeedsUpdate=!0,new THREE.MeshBasicMaterial({color:n.color,opacity:n.opacity,depthTest:n.depthTest,depthWrite:n.depthWrite,side:THREE.DoubleSide}));let e=new THREE.SphereGeometry(15,32,16);s=new THREE.Mesh(e,d),a=(s.name="lineSphereUp",s.position.fromArray(p,0),new THREE.Mesh(e,d)),d=(a.name="lineSphereDown",a.position.fromArray(p,p.length-3),new THREE.Mesh(e,d));d.name="lineSphereCenter",d.position.set((s.position.x+a.position.x)/2,(s.position.y+a.position.y)/2,(s.position.z+a.position.z)/2),s.applyMatrix4(i.matrixWorld),o.add(s),a.applyMatrix4(i.matrixWorld),o.add(a),d.applyMatrix4(i.matrixWorld),o.add(d),o.add(t),r&&(y=[],R.copy(s.position),b.copy(a.position),T.copy(d.position),y.push(s,a,d))}}return o}}function H(e,n,i){if(e&&e.parentObj instanceof THREE.Mesh){var t,r=e.geometry,o=e.indexRange.concat();if(f.ndsModel&&(o[0]+=r.drawRange.start/3,o[1]+=r.drawRange.start/3),r.isBufferGeometry){for(var l=r.index,a=r.attributes.position,r=o[1]-o[0]+1,s=new Float32Array(9*r),c=0,p=new THREE.Vector3,d=o[0],h=o[1];d<=h;d++,c+=1){var u=3*d,m=l.getX(u),g=l.getX(1+u),u=l.getX(2+u),E=new THREE.Vector3,w=new THREE.Vector3,C=new THREE.Vector3,m=(E.fromBufferAttribute(a,m),w.fromBufferAttribute(a,g),C.fromBufferAttribute(a,u),(new THREE.Vector3).subVectors(w,E)),g=(new THREE.Vector3).subVectors(C,E);m.cross(g).normalize(),p.add(m),s[9*c]=E.x,s[9*c+1]=E.y,s[9*c+2]=E.z,s[9*c+3]=w.x,s[9*c+4]=w.y,s[9*c+5]=w.z,s[9*c+6]=C.x,s[9*c+7]=C.y,s[9*c+8]=C.z,C=w=E=null}r=new THREE.BufferGeometry;r.addAttribute("position",new THREE.BufferAttribute(s,3)),(t=new THREE.Mesh(r,0==n?NDSWebViewer.SETTING.selectedFaceMaterial:NDSWebViewer.SETTING.preSelectedFaceMaterial)).objectType="Face",t.applyMatrix(e.matrixWorld),t.matrixWorldNeedsUpdate=!0,i&&(v.fromArray(s,0),S.fromArray(s,3),v.applyMatrix4(e.matrixWorld),S.applyMatrix4(e.matrixWorld))}return t}}function O(e){if(e&&f.hasBrepInfo()){var n,i,t,r,o=e.object;if(o)return o=o.uuid,i=e.object.uuid,f.ndsModel&&(0<=e.meshId?(e.mesh=f.ndsModel.meshManager.getSingleMesh(e.meshId),e.mesh&&(t=e.faceIndex-e.mesh.geometry.drawRange.start/3,n="face")):0<=e.lineSegId&&(e.mesh=f.ndsModel.meshManager.getLineSegments(e.lineSegId),e.mesh)&&(t=.5*(e.index-e.mesh.geometry.drawRange.start),n="edge"),i=e.geomUuid),0<=t&&(r=f.brepManager.GetBrepInfoByUUidAndTopolIndex(o,i,t,n))&&(r.parentObj=e.mesh,r.geometry=e.mesh.geometry,r.matrixWorld=e.mesh.matrixWorld.clone(),r.intersect=e.point.clone(),r.bodyId=e.bodyId,r.bodyUuid=e.bodyUuid,r.meshId=e.meshId,r.topolIndex=t,r.topolType=n,r.lineSegId=e.lineSegId,"face"==n&&(r.edgeInfos=f.brepManager.GetEdgeInfoFromFace(o,r.edgeIDS)),r.normal&&null==r.worldNormal&&(i=new THREE.Vector3,t=new THREE.Quaternion,e=new THREE.Vector3,r.parentObj.matrixWorld.decompose(i,t,e),r.worldNormal=new THREE.Vector3(r.normal[0],r.normal[1],r.normal[2]),r.worldNormal.applyQuaternion(t)),r.origin)&&null==r.worldOrigin&&(r.worldOrigin=new THREE.Vector3(r.origin[0],r.origin[1],r.origin[2]),r.worldOrigin.applyMatrix4(r.matrixWorld)),r}}function N(e,n,i){var t=f.renderer.domElement,r=f.renderer.getPixelRatio(),e=e*r/t.width*2-1,n=2*-(n*r/t.height)+1,r=new THREE.Raycaster;f.camera.setCastRay(r,e,n),i&&(r.linePrecision=(t=f.clientCoordToModelCoord([0,0]),t=new THREE.Vector3(t[0],t[1],t[2]),e=f.clientCoordToModelCoord([4,0]),e=new THREE.Vector3(e[0],e[1],e[2]),t.distanceTo(e)));let o=null;var l=r.intersectObjects(y,!0);for(let e=0;e<l.length;e++)if("lineSphereUp"==l[e].object.name||"lineSphereDown"==l[e].object.name||"lineSphereCenter"==l[e].object.name)return l[e];return o=f.ndsModel?i?f.ndsModel.intersect(r.ray,r.linePrecision):f.ndsModel.intersect(r.ray):o}c.setSelectedClipRadio=(e=!1)=>{!n&&e==c.isSelectedClip||(n&&(c.clippingObjectsUuids=[],c.unClippingObjectsUuids=[],n=!1),(c.isSelectedClip=e)?(c.clippingObjectsUuids=c.unClippingObjectsUuids.slice(),c.unClippingObjectsUuids=c.allClippingObjectsUuids.filter(e=>!c.clippingObjectsUuids.includes(e))):(c.unClippingObjectsUuids=c.clippingObjectsUuids.slice(),c.clippingObjectsUuids=c.allClippingObjectsUuids.filter(e=>!c.unClippingObjectsUuids.includes(e))),c.updateClipPlane(),f.render())},c.setSelectedClipObjects=e=>{Array.isArray(e)&&(c.isSelectedClip?e.forEach(e=>{e=f.ndsModel.getBodyNodeFromUuid(e),e=f.ndsModel.getLeafBodies(e);e&&e.forEach(e=>{c.clippingObjectsUuids.includes(e.uuid)||c.clippingObjectsUuids.push(e.uuid)})}):(e.forEach(e=>{e=f.ndsModel.getBodyNodeFromUuid(e),e=f.ndsModel.getLeafBodies(e);e&&e.forEach(e=>{c.unClippingObjectsUuids.includes(e.uuid)||c.unClippingObjectsUuids.push(e.uuid)})}),c.unClippingObjectsUuids.length&&(c.clippingObjectsUuids=c.allClippingObjectsUuids.filter(e=>!c.unClippingObjectsUuids.includes(e)))),c.updateClipPlane(),f.render())},c.removeSelectedClipObjects=(e,n=[])=>{let i=[];n.forEach(e=>{e=f.ndsModel.getBodyNodeFromUuid(e),e=f.ndsModel.getLeafBodies(e);e&&e.forEach(e=>{i.push(e.uuid)})}),Array.isArray(e)&&(c.isSelectedClip?e.forEach(e=>{e=f.ndsModel.getBodyNodeFromUuid(e),e=f.ndsModel.getLeafBodies(e);e&&e.forEach(n=>{var e=c.clippingObjectsUuids.findIndex(e=>e==n.uuid);-1<e&&(i.includes(n.uuid)||c.clippingObjectsUuids.splice(e,1))})}):(e.forEach(e=>{e=f.ndsModel.getBodyNodeFromUuid(e),e=f.ndsModel.getLeafBodies(e);e&&e.forEach(n=>{var e=c.unClippingObjectsUuids.findIndex(e=>e==n.uuid);-1<e&&(i.includes(n.uuid)||c.unClippingObjectsUuids.splice(e,1))})}),c.clippingObjectsUuids=c.allClippingObjectsUuids.filter(e=>!c.unClippingObjectsUuids.includes(e))),c.updateClipPlane(),f.render())},c.clearSelectedClipObjects=()=>{c.partClipObjects&&(c.isSelectedClip?c.clippingObjectsUuids=[]:(c.unClippingObjectsUuids=[],c.clippingObjectsUuids=c.allClippingObjectsUuids.slice()),c.updateClipPlane(),f.render())},c.switchPartClipObjects=(e=!0)=>{c.partClipObjects=e,(n=e)?(f.renderer.clippingPlanes=[],f.renderer.localClippingEnabled=!0):c.selectedClipPlaneArr.length&&(c.unClippingObjectsUuids=[],c.clippingObjectsUuids=[],f.renderer.clippingPlanes=[],c.selectedClipPlaneArr.forEach(e=>{f.renderer.clippingPlanes.push(e)}),f.renderer.localClippingEnabled=!1,f.ndsModel.meshManager.resetGeomSameMaterialFlags()),c.updateClipPlane(),f.render()},c.getAllBodyUuid=()=>{var e=f&&f.ndsModel&&f.ndsModel.bodyUuid2NodeMap;if(e)for(var[n,i]of Object.entries(e))"Body"!=i.type&&"Model"!=i.type||c.allClippingObjectsUuids.push(n)},c.onCloseClip=()=>{if(c.selectedClipPlaneArr.length&&(f.renderer.clippingPlanes=[],c.selectedClipPlaneArr.forEach(e=>{f.renderer.clippingPlanes.push(e)}),f.renderer.localClippingEnabled=!1,f.ndsModel.meshManager.resetGeomSameMaterialFlags()),s(),c.mousemoveClickStatus=!1,E(c._domElement),c.prompt.style.zIndex=-99,c.instanceMeshSet.size){for(var e of c.instanceMeshSet){var n=f.ndsModel.getModelById(0);n.bodyUuid2NodeMap[e].partClipObjects&&(n.bodyUuid2NodeMap[e].partClipObjects=!1)}c.instanceMeshSet.clear(),f&&f.ndsModel.meshManager.resetGeomSameMaterialFlags()}},c.onCustomClipPlane=(e=!1,n)=>{(c.onCustomClipPlaneStatus=e)?(i=[],Object.keys(c.planeNameToId).forEach(e=>{"R"!=e&&-1<c.planeNameToId[e]&&i.push(e)}),i.forEach(e=>{c.deleteSectionPlane(e)}),(e=c._clipScene.getObjectByName("sectionRoot"))&&(NDSWebViewer.COMMON.disposeObject(e),c._clipScene.remove(e)),c.partClipObjects&&(p=c.clippingObjectsUuids.slice(),c.clippingObjectsUuids=[]),f.renderer.clippingPlanes=[],e=NDSWebViewer.COMMON.translateString("CLIP_Msg"),c.Popup&&(clearTimeout(c.Popup),c.Popup=null),c.prompt.innerHTML=e,c.prompt.style.display="none",c.prompt.style.zIndex=-99,NDSWebViewer.COMMON.isMobileDevice()&&(e=f.renderer.getSize().height/2-21+"px",c.prompt.style.top=e,c.prompt.style.color="rgba(27,27,27,1)",c.Popup=setTimeout(function(){c.prompt.style.display="none"},2e3)),e=c._domElement,NDSWebViewer.COMMON.isMobileDevice()?e.addEventListener("touchmove",x,!1):e.addEventListener("mousemove",x,!1),e.addEventListener("click",M,!1),e.addEventListener("mousedown",w,!1),e.addEventListener("mouseup",C,!1)):(n?(Object.keys(c.planeNameToId).forEach(e=>{-1!=c.planeNameToId[e]&&c.deleteSectionPlane(e)}),c.flag&&c.addSectionPlane("YZ")):(c.deleteSectionPlane("R"),i.forEach(e=>{c.addSectionPlane(e)}),f.renderer.clippingPlanes=[],c.partClipObjects?p.length&&0==c.clippingObjectsUuids.length&&(c.clippingObjectsUuids=p.slice()):c.selectedClipPlaneArr.forEach(e=>{f.renderer.clippingPlanes.push(e)})),E(c._domElement),s(),c.prompt.style.zIndex=-99)},c.objectChangeEvent=e=>{e?(l=!0,c.moveMesh&&(c._clipScene.remove(c.moveMesh),c.moveMesh=null)):l=!1},c.lineMeshPick=e=>{c._lineMeshPick=!!e},c.getMaxDistance=()=>{var e=f.controls.getBoundingBox().getSize(),e=Math.max(e.x,e.y,e.z);return e*=1.3},c.onPauseCustomPick=e=>{e?(c.prompt.style.display="none",c.prompt.style.zIndex=-99,l=!0,c.moveMesh&&(c._clipScene.remove(c.moveMesh),c.moveMesh=null,c.mousemoveClickStatus=!1,f.render())):(t||(c.prompt.style.display="block",c.prompt.style.zIndex=5),l=!1)},c.setClipDeltaPosition=e=>{var n=new THREE.Vector3,i=c.clipTransRotControl.object,t=new THREE.Vector3(0,0,1);t.applyQuaternion(i.children[0].getWorldQuaternion(a)).normalize(),"R"==c.clipTransRotControl.name?(n.subVectors(i.position,i.clickOriPosition).normalize(),0==n.x&&0==n.y&&0==n.z&&n.copy(t),n.addScaledVector(n,e),i.position.addVectors(i.clickOriPosition,n)):(n.subVectors(i.position,i.oriPosition).normalize(),0==n.x&&0==n.y&&0==n.z&&n.copy(t),"YZ"==c.clipTransRotControl.name?(t=n.dot(u),n.addScaledVector(n,e=t<0?-e:e)):"XZ"==c.clipTransRotControl.name?(t=n.dot(m),n.addScaledVector(n,e=t<0?-e:e)):"XY"==c.clipTransRotControl.name&&(t=n.dot(g),n.addScaledVector(n,e=t<0?-e:e)),i.position.addVectors(i.oriPosition,n)),c.clipTransRotControl.update(),c.clipTransRotControl.dispatchEvent({type:"change"}),c.clipTransRotControl.dispatchEvent({type:"objectChange"})},c.setClipDeltaRotation=e=>{var{x:e,y:n,z:i}=e,t=new THREE.Quaternion,r=new THREE.Quaternion,o=new THREE.Quaternion,l=new THREE.Quaternion,a=c.clipTransRotControl.object,s=c.clipTransRotControl.getDeltaRotation(!1);"YZ"==c.clipTransRotControl.name?null!=n&&null!=i&&(0==n&&0==i&&(s.x=0),o.setFromAxisAngle(m,n*Math.PI/180),l.setFromAxisAngle(g,i*Math.PI/180),r.setFromAxisAngle(u,s.x),t.multiplyQuaternions(t,o),t.multiplyQuaternions(t,l),t.multiplyQuaternions(t,r)):"XZ"==c.clipTransRotControl.name?null!=e&&null!=i&&(0==e&&0==i&&(s.y=0),r.setFromAxisAngle(u,e*Math.PI/180),l.setFromAxisAngle(g,i*Math.PI/180),o.setFromAxisAngle(m,s.y),t.multiplyQuaternions(t,r),t.multiplyQuaternions(t,l),t.multiplyQuaternions(t,o)):"XY"==c.clipTransRotControl.name?null!=e&&null!=n&&(0==e&&0==n&&(s.z=0),r.setFromAxisAngle(u,e*Math.PI/180),o.setFromAxisAngle(m,n*Math.PI/180),l.setFromAxisAngle(g,s.z),t.multiplyQuaternions(t,r),t.multiplyQuaternions(t,o),t.multiplyQuaternions(t,l)):"R"==c.clipTransRotControl.name&&null!=n&&null!=i&&(o.setFromAxisAngle(m,n*Math.PI/180+c.clipTransRotControl.RDelta.y),l.setFromAxisAngle(g,i*Math.PI/180+c.clipTransRotControl.RDelta.z),r.setFromAxisAngle(u,s.x),t.multiplyQuaternions(t,o),t.multiplyQuaternions(t,l),t.multiplyQuaternions(t,r)),a.quaternion.copy(t),c.clipTransRotControl.update(),c.clipTransRotControl.dispatchEvent({type:"change"}),c.clipTransRotControl.dispatchEvent({type:"objectChange"})},c.showClipLine=e=>{c.clipTransRotControl&&(c.showClipLineVisible=!!e,c.clipTransRotControl.dispatchEvent({type:"objectChange"}))},c.showClipMesh=e=>{c.clipTransRotControl&&(c.showClipMeshVisible=!!e,c.clipTransRotControl.dispatchEvent({type:"objectChange"}))},c.setClipLineColor=e=>{c.clipTransRotControl&&(e?(c.lineColor.set(e.r/255,e.g/255,e.b/255),c.useLineColor=!0):c.useLineColor=!1,c.clipTransRotControl.dispatchEvent({type:"objectChange"}))},c.setClipMeshColor=e=>{c.clipTransRotControl&&(e?(c.meshColor.set(e.r/255,e.g/255,e.b/255),c.useMeshColor=!0):c.useMeshColor=!1,c.randomClipMeshColor=!1,c.clipTransRotControl.dispatchEvent({type:"objectChange"}))},c.setClipMeshRandom=()=>{c.clipTransRotControl&&(c.randomClipMeshColor=!0,c.clipTransRotControl.dispatchEvent({type:"objectChange"}))},c.getRandomColor=()=>{var e=1e-4*Math.floor(1e4*Math.random()),n=1e-4*Math.floor(1e4*Math.random()),i=1e-4*Math.floor(1e4*Math.random());return new THREE.Color(e,n,i)}}i.r(n),i.d(n,"NDSClipExtension",function(){return a});function _(e,n,i){THREE.Mesh.call(this,e,n,!1),this.tempVector3=new THREE.Vector3,this.plane=i,this.planeVec=new THREE.Vector4(i.normal.x,i.normal.y,i.normal.z,i.constant),this.connectivity=[],this.outlines=[]}((_.prototype=Object.create(THREE.Mesh.prototype)).constructor=_).prototype.update=function(){this.plane.normal.set(0,0,-1),this.plane.normal.applyQuaternion(this.quaternion);var e=this.plane.normal,n=-1*this.getWorldPosition(this.tempVector3).dot(e);this.planeVec.set(e.x,e.y,e.z,n),this.plane.constant=n};class r{constructor(e){this.viewer=e;var f=this,T=(this.active=!1,[[0,1],[1,3],[3,2],[2,0]]),b=(this.tempVector3=new THREE.Vector3,this._domElement=null,[]),R=[],y=null,S=null,M=null,x=null,P=null,V={},o="Right",A={},H={},O=1;function N(){this.run=function(){M&&(M.update(),M.updateMatrixWorld(!0)),x&&x.update()}}this.tempCenterBox=new THREE.Vector3,V.clipping_planes_fragment=THREE.ShaderChunk.clipping_planes_fragment,V.clipping_planes_pars_fragment=THREE.ShaderChunk.clipping_planes_pars_fragment,V.meshphong_frag=THREE.ShaderChunk.meshphong_frag,V.meshphysical_frag=THREE.ShaderChunk.meshphysical_frag,V.phongFrag=THREE.ShaderLib.phong.fragmentShader,V.physicalFrag=THREE.ShaderLib.physical.fragmentShader,this.init(e),this.getTransformControls=function(){return M},this.getPlaneEditControls=function(){return x},this.SetRenderBox=function(e){S&&(S.visible=e)},this.getBoxClipInfo=function(){var e={};if(e.clipBoxActive=f.active,e.clipBoxActive){for(var n=f.getPlaneEditControls(),i=(n.getCurrAttachObj()&&(e.PlaneName=n.getCurrAttachObj().name,e.PlanePosition=n.getCurrentControls().newPosition),f.viewer.renderer.clippingPlanes),t=new THREE.Vector3(-1e4,-1e4,-1e4),r=new THREE.Vector3(1e4,1e4,1e4),o=0;o<i.length;o++).001<Math.abs(i[o].normal.x)?(t.x=Math.max(t.x,-1*i[o].normal.x*i[o].constant),r.x=Math.min(r.x,-1*i[o].normal.x*i[o].constant)):.001<Math.abs(i[o].normal.y)?(t.y=Math.max(t.y,-1*i[o].normal.y*i[o].constant),r.y=Math.min(r.y,-1*i[o].normal.y*i[o].constant)):(t.z=Math.max(t.z,-1*i[o].normal.z*i[o].constant),r.z=Math.min(r.z,-1*i[o].normal.z*i[o].constant));n=f.getTransformControls().object.position,n=(e.BoxPosition=n,new THREE.Box3(r,t));e.clipbox=n,e.planeMeshPositions=[];for(var l=0;l<b.length;++l)e.planeMeshPositions[l]=b[l].position}return e},this.setPlanePosition=function(e){for(var n=0;n<b.length;++n)b[n].position.copy(e[n]),f.viewer.renderer.clippingPlanes[n]};function D(){(M=new NDSWebViewer.TransformControls(f.viewer,f._domElement)).setSize(.6),M.setMode("translate"),M.setSpace("local"),M.addEventListener("change",function(){f.viewer.render()}),M.addEventListener("objectChange",function(){var e=Date.now();j(),f.viewer.logOperatorTime&&f.viewer.logOperatorTimeShow("[盒剖切][操作球]",e)}),M.attach(y),S.add(M),(x=new NDSWebViewer.EditControls({objects:b,domElement:f._domElement,viewer:f.viewer,group:S})).setSize(.5),x.activate("translate","translateZ"),x.addEventListener("change",function(){f.viewer.render()}),x.addEventListener("objectChange",function(){var e=Date.now(),n=(j(),I(),f.viewer.renderer.clippingPlanes);if(n&&!(n.length<3)&&y){for(var i=f.viewer.controls.getBoundingBox().min.clone(),t=.001,r=0;r<n.length;r++)Math.abs(n[r].normal.x)>t?i.x=Math.max(i.x,-1*n[r].normal.x*n[r].constant):Math.abs(n[r].normal.y)>t?i.y=Math.max(i.y,-1*n[r].normal.y*n[r].constant):i.z=Math.max(i.z,-1*n[r].normal.z*n[r].constant);t=1e-6;var o,l=i.clone().sub(y.position),a=(l.x=Math.abs(l.x)<t?0:l.x,l.y=Math.abs(l.y)<t?0:l.y,l.z=Math.abs(l.z)<t?0:l.z,y.position.add(l),x.getCurrentControls());a&&(o=a.getOldPosition(),o=(o=o||new THREE.Vector3).clone().sub(l),a.setOldPosition(o));for(r=0;r<y.children.length;r++){var s=y.children[r];s instanceof _&&s.position.sub(l)}y.updateMatrixWorld(!0)}f.viewer.render(),f.viewer.logOperatorTime&&f.viewer.logOperatorTimeShow("[盒剖切][操作球]",e)})}var j=function(){y&&y.traverse(function(e){e instanceof _&&e.update()});for(var e=[],n=0;n<R.length;n++){var i=(new THREE.Plane).setComponents(R[n].x,R[n].y,R[n].z,R[n].w);e.push(i)}f.viewer.renderer.clippingPlanes=e};this.getOperateMode=function(){return O},this.setOperateMode=function(e){O=e},this.setActivePlaneByName=function(e){o=e},this.getActivePlaneName=function(){return o},this.activePlaneCanForward=function(){if(!this.active)return!1;var e=!0,n=(A[o].updateMatrixWorld(!0),A[o].position),i=null;switch(o){case"Right":A.Left.updateMatrixWorld(!0),i=A.Left.position,n.distanceTo(i)<1&&(e=!1);break;case"Left":i=A.Right.position,n.distanceTo(i)<1&&(e=!1);break;case"Up":i=A.Down.position,n.distanceTo(i)<1&&(e=!1);break;case"Down":i=A.Up.position,n.distanceTo(i)<1&&(e=!1);break;case"Front":i=A.Back.position,n.distanceTo(i)<1&&(e=!1);break;case"Back":i=A.Front.position,n.distanceTo(i)<1&&(e=!1)}return e},this.planeTranslate=function(e){if(!this.active)return!1;var n=null,i=null,t=null,r=null;switch(o){case"Right":i=H.Left,t=H.Right,n=i.clone().sub(t),r=t.clone().add(n.multiplyScalar(e)),A[o].position.copy(r);break;case"Left":i=H.Right,t=H.Left,n=i.clone().sub(t),r=t.clone().add(n.multiplyScalar(e)),A[o].position.copy(r);break;case"Up":i=H.Down,t=H.Up,n=i.clone().sub(t),r=t.clone().add(n.multiplyScalar(e)),A[o].position.copy(r);break;case"Down":i=H.Up,t=H.Down,n=i.clone().sub(t),r=t.clone().add(n.multiplyScalar(e)),A[o].position.copy(r);break;case"Front":i=H.Back,t=H.Front,n=i.clone().sub(t),r=t.clone().add(n.multiplyScalar(e)),A[o].position.copy(r);break;case"Back":i=H.Front,t=H.Back,n=i.clone().sub(t),r=t.clone().add(n.multiplyScalar(e)),A[o].position.copy(r)}return A[o].updateMatrixWorld(!0),I(),j(),f.viewer.render(),!0},this.isClipTransformControlSelected=function(){var e=!1,n=!1;return M&&(e=M.isSelected()),x&&(n=x.isSelected()),e||n},this.renderClipBox=function(e,n){S&&S.visible&&!f.viewer.renderer.stopRenderingEarly&&(e?f.viewer.renderer.render(S,f.viewer.camera,e,n):f.viewer.renderer.render(S,f.viewer.camera),f.viewer.renderStates.shouldRenderClipbox=!1)};this.onBoxSectionView=function(e,n){if(e){this.active=!0,THREE.ShaderChunk.clipping_planes_fragment=NDSWebViewer.ClippingShader.ClippingPlanesShader_fragment1,THREE.ShaderChunk.clipping_planes_pars_fragment=NDSWebViewer.ClippingShader.ClippingPlanesShader_pars_fragment1,THREE.ShaderChunk.meshphong_frag=NDSWebViewer.ClippingShader.ClippingPlanesShader1_MeshPhong,THREE.ShaderLib.phong.fragmentShader=NDSWebViewer.ClippingShader.ClippingPlanesShader1_MeshPhong,THREE.ShaderChunk.meshphysical_frag=NDSWebViewer.ClippingShader.ClippingPlanesShader1_MeshPhysical,THREE.ShaderLib.physical.fragmentShader=NDSWebViewer.ClippingShader.ClippingPlanesShader1_MeshPhysical;var e=n,i=[new THREE.Vector3(1,0,0),new THREE.Vector3(0,1,0),new THREE.Vector3(0,0,1),new THREE.Vector3(-1,0,0),new THREE.Vector3(0,-1,0),new THREE.Vector3(0,0,-1)],t=["Right","Up","Front","Left","Down","Back"],r=[[[1,2],[1,5],[2,4],[4,5]],[[3,5],[0,5],[2,3],[0,2]],[[1,3],[0,1],[3,4],[0,4]],[[1,5],[1,2],[4,5],[2,4]],[[2,3],[0,2],[3,5],[0,5]],[[0,1],[3,1],[0,4],[3,4]]],o=new THREE.Group,n=(y=o,null),l=(n=0==f.viewer.getExplodeFactor()?f.viewer.controls.getBoundingBox():f.viewer.controls.getExplosionBoundingBox()).getSize(),l=Math.max(Math.max(l.x,l.y),l.z)/50,l=new THREE.Vector3(l,l,l),a=n.clone();a.expandByVector(l),e&&a.copy(e);for(var s=a.max,c=(o.position.copy(s),[]),p=[],d=0;d<i.length;d++){var h=new THREE.Plane(i[d],-1*s.dot(i[d]));c.push(h),2<d&&(3==d?h.constant-=a.max.x-a.min.x:4==d?h.constant-=a.max.y-a.min.y:5==d&&(h.constant-=a.max.z-a.min.z)),(u=function(e,n){var i=new THREE.Quaternion;i.setFromUnitVectors(new THREE.Vector3(0,0,1),e.normal),p=n?(t=e.projectPoint(n.max),o=e.projectPoint(n.min),l=i.clone().inverse(),t.applyQuaternion(l),o.applyQuaternion(l),l=(new THREE.Vector3).subVectors(t,o),new THREE.PlaneGeometry(l.x,l.y)):(l=2*(n=_viewer.getVisibleBounds()).getBoundingSphere().radius,new THREE.PlaneGeometry(l,l));for(var t=new THREE.MeshBasicMaterial({opacity:.1,color:16777215,side:THREE.DoubleSide,transparent:!0}),r=new _(p,t,e),o=n.getCenter(),l=e.projectPoint(o),t=(r.position.copy(l),r.quaternion.multiply(i),new THREE.Color(16711680)),a=new THREE.LineBasicMaterial({color:t,linewidth:1}),s=r.geometry.getAttribute("position"),c=0;c<T.length;c++){(p=new THREE.Geometry).vertices.push((new THREE.Vector3).fromArray(s.array,T[c][0]*s.itemSize),(new THREE.Vector3).fromArray(s.array,T[c][1]*s.itemSize));var p,d=new THREE.Line(p,a);r.add(d),r.outlines.push(d)}return r}(h,a)).position.sub(s),u.name=d,o.add(u),p.push(u),b.push(u),A[t[d]]=u,H[t[d]]=u.position.clone(),R.push(u.planeVec)}for(d=0;d<p.length;d++)for(var u=p[d],m=r[d],g=0;g<m.length;g++){for(var E=[],w=m[g],C=0;C<w.length;C++)E.push(c[w[C]]);u.connectivity.push(E)}null==S&&(S=new THREE.Scene),y.updateMatrixWorld(!0),S.add(y),I(),j(),1==O&&D(),null==P&&(P=new N),f.viewer.addFrameListener(P)}else{this.active=!1,THREE.ShaderChunk.clipping_planes_fragment=V.clipping_planes_fragment,THREE.ShaderChunk.clipping_planes_pars_fragment=V.clipping_planes_pars_fragment,THREE.ShaderChunk.meshphong_frag=V.meshphong_frag,THREE.ShaderChunk.meshphysical_frag=V.meshphysical_frag,THREE.ShaderLib.phong.fragmentShader=V.phongFrag,THREE.ShaderLib.physical.fragmentShader=V.physicalFrag,P&&(f.viewer.removeFrameListener(P),P=null);for(var v=0;v<b.length;v++)NDSWebViewer.COMMON.disposeObject(b[v]);if(b=[],R=[],y=null,S)for(v=0;v<S.children.length;v++)S.remove(S.children[v]),v--;S=null,M&&(M.dispose(),M=null),x&&(x.dispose(),x=null),f.viewer.renderer.clippingPlanes=[]}f.viewer.render()};l=new THREE.Matrix3,a=new THREE.Vector3,s=new THREE.Vector3,c=new THREE.Vector3;var l,a,s,c,p=function(e,n,i,t){l.set(e.normal.x,e.normal.y,e.normal.z,n.normal.x,n.normal.y,n.normal.z,i.normal.x,i.normal.y,i.normal.z);var r=l.determinant();return 0===r?null:(a.crossVectors(n.normal,i.normal).multiplyScalar(-e.constant),s.crossVectors(i.normal,e.normal).multiplyScalar(-n.constant),c.crossVectors(e.normal,n.normal).multiplyScalar(-i.constant),(t||new THREE.Vector3).copy(a).add(s).add(c).divideScalar(r))};function I(){for(var e=0;e<y.children.length;e++){var n=y.children[e];if(n instanceof _&&0<n.connectivity.length){for(var i=(new THREE.Matrix4).getInverse(n.matrixWorld),t=new THREE.Vector3,r=n.geometry.getAttribute("position"),o=0;o<3*r.count/r.itemSize;o++){var l=n.connectivity[o];null!==p(n.plane,l[0],l[1],t)&&(t.applyMatrix4(i),r.setXYZ(o,t.x,t.y,t.z),t.clone().add(n.position))}r.needsUpdate=!0,n.geometry.computeBoundingBox(),n.geometry.computeBoundingSphere();for(o=0;o<n.outlines.length;o++){var a=n.outlines[o];a.geometry.vertices[0].fromArray(r.array,T[o][0]*r.itemSize),a.geometry.vertices[1].fromArray(r.array,T[o][1]*r.itemSize),a.geometry.verticesNeedUpdate=!0}}}}this.isSectionBoxEnabled=function(){return!!S},this.displaySectionBox=function(e){y&&((y.visible=e)?M.attach(y):(M.detach(M.object),x.detach())),f.viewer.render()},this.getSectionBoxVisible=function(){return!!y&&y.visible}}init(e){e.canvas2D?this._domElement=e.canvas2D:this._domElement=e.canvas3D}}class o{constructor(e,n,i){this.viewer=e;var o=null,l=null,c=[],a=null,ce=[],pe=-1/0,de=-1/0,he=1/0,ue=1/0,me=null,s=null,p=null,d=null,h=null,u=null,ge=0,Ee={},we=this;function m(){this.run=function(){we.clipTransRotControl&&(we.clipTransRotControl.update(),we.clipTransRotControl.updateMatrixWorld(!0))}}function g(){if(me){var e=me.getObjectByName("sectionRoot"),e=(e&&(NDSWebViewer.COMMON.disposeObject(e),me.remove(e)),new THREE.Group),I=(e.name="sectionRoot",me.add(e),new THREE.Group),_=(e.add(I),new THREE.Group),B=(e.add(_),new THREE.Geometry),n=new THREE.Box3;if(we.viewer.ndsModel){var W=we.viewer.ndsModel.meshManager;de=pe=-1/0,ue=he=1/0;for(var i=0;i<we.selectedClipPlaneArr.length;i++){var U=we.selectedClipPlaneArr[i].clone(),z=NDS.Intersector.makePlaneBasis(U),F=(new THREE.Matrix4).getInverse(z);Ee={};for(var t,d,h,u,m,r,L=ge=0;L<we.viewer.ndsModel.models.length;L++){we.viewer.ndsModel.setActiveModel(L);for(var W=we.viewer.ndsModel.meshManager,k=0,G=we.viewer.ndsModel.wholeLeafBodyNodes.length;k<G;++k){var o=we.viewer.ndsModel.wholeLeafBodyNodes[k];if((!we.partClipObjects||we.clippingObjectsUuids.includes(o.uuid))&&o.leafBodyAttri){var l=o.leafBodyAttri.bodyMeshIds;if(l&&!(l.length<1)){for(var a=[],Q=null,s=0;s<l.length;s++){var c=l[s];if(!W.isMeshHidden(c)&&(W.getMeshBBox(c,n),NDS.Intersector.intersectBoxPlane(U,n))){for(var p,g,Y,X=!0,E=0;E<we.selectedClipPlaneArr.length;++E)if(E!=i){var w=(C=we.selectedClipPlaneArr[E]).distanceToPoint(n.getCenter(we.boxCenter));if(!NDS.Intersector.intersectBoxPlane(C,n)&&Math.sign(w)<0){X=!1;break}}X&&(W.getMeshInfor(c,p={}),Q=Q||p.material,g={},Y=[],NDS.Intersector.intersectMeshPlane(U,p.geometry,p.matrixWorld,c,Y),a=a.concat(Y))}}if(!(a.length<1)){for(E=0;E<we.selectedClipPlaneArr.length;++E){if(E!=i){for(var Z,C=we.selectedClipPlaneArr[E],v=[],s=0;s<a.length;s++){var f=new THREE.Vector3,T=new THREE.Vector3;1!=NDS.Intersector.intersectSegmentPlane(C,a[s].pt1,a[s].pt2,f,T)?(w=C.distanceToPoint(a[s].pt1),Math.sign(w)<0&&1e-6<Math.abs(w)&&(a.splice(s,1),s--)):(w=C.distanceToPoint(a[s].pt1),T=C.distanceToPoint(a[s].pt2),b=a[s],Math.abs(w)<1e-6?(Math.sign(T)<0&&(a.splice(s,1),s--),g[b.eid1]=f):Math.sign(w)<0?(Math.abs(T)<1e-6?(a.splice(s,1),s--):(b.pt1=f,b.eid1=b.eid1+":"+E),g[b.eid1]=f):0<Math.sign(w)&&(1e-6<Math.abs(T)&&(b.pt2=f,b.eid2=b.eid2+":"+E),g[b.eid2]=f),v.find(function(e){return Math.abs(f.x-e.x)<1e-6&&Math.abs(f.y-e.y)<1e-6&&Math.abs(f.z-e.z)<1e-6})||v.push(f.clone()))}if(0<v.length&&v.length%2==0){2<v.length&&(Z=NDS.Intersector.makePlaneBasis(C),v.sort(function(e,n){e=e.clone().applyMatrix4(Z),n=n.clone().applyMatrix4(Z);return 1e-6<Math.abs(e.x-n.x)?e.x-n.x:e.y-n.y}));for(s=0;s<v.length;s+=2){var b,q=$(g,v[s]),K=$(g,v[s+1]);(b=new NDS.Triangulator.Edge(v[s],v[s+1],0,0,1,1,2)).eid1=q,b.eid2=K,a.push(b)}}}function $(n,i){return Object.keys(n).find(function(e){return n[e]===i})}}var o=!1,R=(we.clipActiveId==i&&we.showSectionImage&&!we.clipTransRotControl.isDragging()&&(o=!0),se=ae=le=j=oe=D=N=O=H=re=te=A=ie=V=P=x=M=ne=ee=S=y=J=R=void 0,a),J=Q,y=z,S=F,ee=B,ne=I,M=o;if(R.length){var x=new THREE.Box3,P=(NDS.Intersector.convertToPlaneCoords(y,R,x),new NDS.Triangulator.ContourSet(R,x));P.snapEdges(),P.sanitizeEdges(),P.stitchContours();for(var V=0;V<P.contours.length;V++)for(var ie=P.contours[V],A=1;A<ie.length;A++){var te=P.pts[ie[A-1]],re=P.pts[ie[A]],te=new THREE.Vector3(te.x,te.y,0),re=new THREE.Vector3(re.x,re.y,0);ee.vertices.push(te.applyMatrix4(S)),ee.vertices.push(re.applyMatrix4(S))}if(we._showSectionPlane){var H=new NDS.Triangulator.TriangulatedSurface(P);if(H.indices.length){ce=[];for(var y=new THREE.BufferGeometry,O=new Float32Array(3*H.pts.length),V=0;V<H.pts.length;V++)O[3*V]=H.pts[V].x,O[3*V+1]=H.pts[V].y,O[3*V+2]=0;y.addAttribute("position",new THREE.BufferAttribute(O,3));for(var N=J.packedNormals,D=N?new Uint16Array(2*H.pts.length):new Float32Array(3*H.pts.length),V=0;V<H.pts.length;V++)N?(D[2*V]=32767,D[2*V+1]=65535):(D[3*V]=0,D[3*V+1]=0,D[3*V+2]=1);y.addAttribute("normal",new THREE.BufferAttribute(D,N?2:3)),N&&(y.attributes.normal.bytesPerItem=2,y.attributes.normal.normalize=!0);var R=new Uint16Array(H.indices.length),oe=(R.set(H.indices),(H.cset.bbox.max.x-H.cset.bbox.min.x)*(H.cset.bbox.max.y-H.cset.bbox.min.y));if(pe=Math.max(H.cset.bbox.max.x,pe),de=Math.max(H.cset.bbox.max.y,de),he=Math.min(H.cset.bbox.min.x,he),ue=Math.min(H.cset.bbox.min.y,ue),M)for(var j=0;j<H.indices.length;j+=3){var le=H.pts[H.indices[j]],ae=H.pts[H.indices[j+1]],se=H.pts[H.indices[j+2]];ce.push(new THREE.Vector2(le.x,le.y)),ce.push(new THREE.Vector2(ae.x,ae.y)),ce.push(new THREE.Vector2(se.x,se.y))}y.setIndex(new THREE.BufferAttribute(R,1)),y.streamingDraw=!0,y.streamingIndex=!0;x=new THREE.ShaderMaterial({side:THREE.DoubleSide,uniforms:{color:{type:"c",value:new THREE.Color(1,1,1)},hatchParams:{type:"v2",value:new THREE.Vector2(1,10)},hatchTintColor:{type:"c",value:new THREE.Color(0,1,1)},hatchTintIntensity:{type:"f",value:.2},hatchLineColor:{type:"c",value:new THREE.Color(0,0,0)},showLine:{type:"f",value:1},showMesh:{type:"f",value:1}},vertexShader:NDSWebViewer.ClippingShader.ClippingPlanesShader3.vertex,fragmentShader:NDSWebViewer.ClippingShader.ClippingPlanesShader3.fragment});for(x.polygonOffset=!0,x.polygonOffsetFactor=0,x.polygonOffsetUnits=1;-1!=Object.keys(Ee).indexOf(oe.toString());)oe*=1+1e-5;Ee[oe]={material:x,triangle:ce.concat()};M=Object.keys(Ee).length*Math.PI*10/180+Math.PI/4,R=Math.tan(M),M=(x.uniforms.hatchParams.value=new THREE.Vector2(R,20),x.uniforms.color.value=(we.useMeshColor?we.meshColor:J.color).clone(),we.randomClipMeshColor&&(x.uniforms.color.value=we.getRandomColor()),we.useLineColor&&(x.uniforms.hatchLineColor.value=we.lineColor.clone()),x.uniforms.showLine.value=we.showClipLineVisible?1:0,we.showClipMeshVisible||(x.uniforms.showMesh.value=0,x.transparent=!0,x.blending=THREE.NormalBlending),x.needsUpdate=!0,new THREE.Mesh(y,x));M.matrix.copy(S),M.matrixAutoUpdate=!1,ne.add(M)}}}}}}}}Object.keys(Ee).sort(function(e,n){return e-n}).forEach(function(e){Ee[e].material.polygonOffsetFactor=ge,ge+=.01}),we.clipActiveId==i&&we.showSectionImage&&!we.clipTransRotControl.isDragging()&&(t=document.createElement("canvas"),r=Math.max(pe-he,de-ue),t.width=1.1*r,t.height=1.1*r,d=1,r<40?(t.width=420,t.height=420,d=400/r):t.width<400?(t.width=10*r+40,t.height=10*r+40,d=10):6e3<t.width&&(t.width=640,t.height=640,d=600/r),h=t.width/2-(pe+he)*d/2,u=t.height/2-(de+ue)*d/2,m=t.getContext("2d"),Object.keys(Ee).sort(function(e,n){return n-e}).forEach(function(e){m.beginPath();var[n,i,t]=[Math.floor(176*Math.random()+79),Math.floor(112*Math.random()+15),Math.floor(32*Math.random()+15)];m.fillStyle=`rgb(${n},${i},${t})`,ce=Ee[e].triangle;for(var r=0;r<ce.length;r+=3){var o=ce[r].x,l=ce[r].y,o=o*d+h,l=l*d+u,a=ce[r+1].x,s=ce[r+1].y,a=a*d+h,s=s*d+u,c=ce[r+2].x,p=ce[r+2].y,c=c*d+h,p=p*d+u;m.moveTo(o,l),m.lineTo(a,s),m.lineTo(c,p)}m.fill()}),r=t.toDataURL("image/png"),we.viewer.dispatchEvent({type:"ActiveSectionViewChangeEvent",base64Img:r})),Ee={}}e=new THREE.LineBasicMaterial({opacity:1}),e=(e.color.setRGB(1,0,0),new THREE.LineSegments(B,e));e.matrixAutoUpdate=!1,e.frustumCulled=!1,_.add(e)}}}function E(){var e;function n(e){var n,i,t,r,o=new THREE.Vector3(0,0,1),l=a.quaternion;o.applyQuaternion(l);n=o,i=e,t=Math.abs(n.x-i.x)<.001,r=Math.abs(n.y-i.y)<.001,n=Math.abs(n.z-i.z)<.001,t&&r&&n||((i=new THREE.Quaternion).setFromUnitVectors(o,e),l.multiplyQuaternions(i,l),a.setRotationFromQuaternion(l),a.updateMatrixWorld(!0))}0!=we.selectedClipPlaneArr.length&&0!=c.length&&(o=we.selectedClipPlaneArr[we.clipActiveId],l=c[we.clipActiveId],a=l.children[0],(e=we.clipTransRotControls[we.clipActiveId]).isDragging()&&"translate"===e.pickType&&("X"===e.axis?n(new THREE.Vector3(1,0,0)):"Y"===e.axis?n(new THREE.Vector3(0,1,0)):"Z"===e.axis&&n(new THREE.Vector3(0,0,1))),o.normal.set(0,0,-1),o.normal.applyQuaternion(a.getWorldQuaternion(we.tempQuat)),o.constant=-1*l.getWorldPosition(we.tempVector3).dot(o.normal))}this.tempVector3=new THREE.Vector3,this.clipModeState="both",this.clipTransRotControl=null,this.clipTransRotControls=[],this.clipActiveId=0,this.planeNameToId={},this.showSectionImage=!1,this._showSectionPlane=null,this._clipPlaneShaderVersion=null,this._clipGlobalPlaneObjects=c,this._domElement=null,this.clippingObjectsUuids=[],this.allClippingObjectsUuids=[],this.unClippingObjectsUuids=[],this.partClipObjects=!1,this.isSelectedClip=null,this.uuid2MaterialMap=new Map,this.selectedClipPlaneArr=[],this.flag=!1,this.onCustomClipPlaneStatus=!1,this.mousemoveClickStatus=!1,this.boxCenter=new THREE.Vector3,this.meshColor=new THREE.Color,this.lineColor=new THREE.Color,this.useMeshColor=!1,this.useLineColor=!1,this.showClipLineVisible=!0,this.showClipMeshVisible=!0,this.randomClipMeshColor=!1,this.instanceMeshSet=new Set,this.init(e,n,i),this.hasClipCapScene=function(){return!h},this.setActiveSectionPlane=function(e){if(we.clipActiveId=we.planeNameToId[e],!(we.clipActiveId<0||we.clipActiveId>we.clipTransRotControls.length-1)){for(var n=0;n<we.clipTransRotControls.length;++n)we.clipTransRotControls[n].visible=!1,c[n].children[0].material.opacity=.2,NDSWebViewer.COMMON.isMobileDevice()||(c[n].visible=!1);we.clipTransRotControls[we.clipActiveId].visible=!0,c[we.clipActiveId].visible=!0,NDSWebViewer.COMMON.isMobileDevice()&&(c[we.clipActiveId].children[0].material.opacity=.4),we.clipTransRotControl=we.clipTransRotControls[we.clipActiveId],3===we._clipPlaneShaderVersion&&g(),we.clipTransRotControl.getDeltaRotation(!0,we.clipTransRotControl.RDelta),we.clipTransRotControl.getDeltaPosition(!0),we.viewer.renderAllViews()}},this.deleteSectionPlane=function(e){if(me&&-1!=we.planeNameToId[e]){for(var n in we.clipActiveId=we.planeNameToId[e],we.planeNameToId[e]=-1,we.planeNameToId)we.planeNameToId[n]>we.clipActiveId&&we.planeNameToId[n]--;we.clipTransRotControls[we.clipActiveId].visible=!1,we.clipTransRotControls[we.clipActiveId].dispose(),me.remove(we.clipTransRotControls[we.clipActiveId]),me.remove(c[we.clipActiveId]),we.clipTransRotControls.splice(we.clipActiveId,1),c.splice(we.clipActiveId,1),we.selectedClipPlaneArr.splice(we.clipActiveId,1),we.partClipObjects||(we.viewer.renderer.clippingPlanes=[],we.selectedClipPlaneArr.forEach(e=>{we.viewer.renderer.clippingPlanes.push(e)})),3===we._clipPlaneShaderVersion&&g(),we.viewer.renderAllViews()}},this.renderClipScene=function(e,n){me&&(e?we.viewer.renderer.render(me,we.viewer.camera,e,n):we.viewer.renderer.render(me,we.viewer.camera))},this.renderClipPlane=function(e,n){var i,t;h&&(i=we.viewer.scene.overrideMaterial,we.viewer.renderer.state.buffers.stencil.setTest(!0),t=we.viewer.renderer.context,we.viewer.renderer.state.buffers.stencil.setFunc(t.ALWAYS,1,255),we.viewer.renderer.state.buffers.stencil.setOp(t.KEEP,t.KEEP,t.INCR),we.viewer.scene.overrideMaterial=p,e?we.viewer.renderer.render(we.viewer.scene,we.viewer.camera,e,n):we.viewer.renderer.render(we.viewer.scene,we.viewer.camera),we.viewer.renderer.state.buffers.stencil.setFunc(t.ALWAYS,1,255),we.viewer.renderer.state.buffers.stencil.setOp(t.KEEP,t.KEEP,t.DECR),we.viewer.scene.overrideMaterial=d,e?we.viewer.renderer.render(we.viewer.scene,we.viewer.camera,e,!1):we.viewer.renderer.render(we.viewer.scene,we.viewer.camera),we.viewer.scene.overrideMaterial=i,we.viewer.renderer.state.buffers.stencil.setFunc(t.EQUAL,1,255),we.viewer.renderer.state.buffers.stencil.setOp(t.KEEP,t.KEEP,t.KEEP),e?we.viewer.renderer.render(h,we.viewer.camera,e,!1):we.viewer.renderer.render(h,we.viewer.camera),we.viewer.renderer.state.buffers.stencil.setTest(!1))},this.isClipTransformControlSelected=function(){return!!we.clipTransRotControl&&we.clipTransRotControl.isSelected()},this.setClipTransControlMode=function(e){we.clipModeState=e=void 0===e||"translate"!==e&&"rotate"!==e?"both":e;for(var n=0;n<we.clipTransRotControls.length;n++)we.clipTransRotControls[n].setMode(e),"translate"===e?"YZ"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[0].showAxis("y",!1),we.clipTransRotControls[n].children[0].showAxis("z",!1)):"XZ"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[0].showAxis("z",!1),we.clipTransRotControls[n].children[0].showAxis("x",!1)):"XY"===we.clipTransRotControls[n].name&&(we.clipTransRotControls[n].children[0].showAxis("x",!1),we.clipTransRotControls[n].children[0].showAxis("y",!1)):"rotate"===e?"YZ"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[1].showAxis("x",!1),we.clipTransRotControls[n].children[1].showAxis("y",!0),we.clipTransRotControls[n].children[1].showAxis("z",!0)):"XZ"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[1].showAxis("y",!1),we.clipTransRotControls[n].children[1].showAxis("x",!0),we.clipTransRotControls[n].children[1].showAxis("z",!0)):"XY"===we.clipTransRotControls[n].name&&(we.clipTransRotControls[n].children[1].showAxis("z",!1),we.clipTransRotControls[n].children[1].showAxis("x",!0),we.clipTransRotControls[n].children[1].showAxis("y",!0)):"both"===e&&("YZ"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[2].children[0].showAxis("y",!1),we.clipTransRotControls[n].children[2].children[0].showAxis("z",!1)):"XZ"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[2].children[0].showAxis("z",!1),we.clipTransRotControls[n].children[2].children[0].showAxis("x",!1)):"XY"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[2].children[0].showAxis("x",!1),we.clipTransRotControls[n].children[2].children[0].showAxis("y",!1)):"R"===we.clipTransRotControls[n].name&&(we.clipTransRotControls[n].children[2].children[0].showAxis("y",!1),we.clipTransRotControls[n].children[2].children[0].showAxis("z",!1),we.clipTransRotControls[n].children[2].children[0].showText("r",!1),we.clipTransRotControls[n].children[2].children[0].changeColor("r",{x:.72,y:0,z:.8})),"YZ"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[2].children[1].showAxis("x",!1),we.clipTransRotControls[n].children[2].children[1].showAxis("y",!0),we.clipTransRotControls[n].children[2].children[1].showAxis("z",!0)):"XZ"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[2].children[1].showAxis("y",!1),we.clipTransRotControls[n].children[2].children[1].showAxis("x",!0),we.clipTransRotControls[n].children[2].children[1].showAxis("z",!0)):"XY"===we.clipTransRotControls[n].name?(we.clipTransRotControls[n].children[2].children[1].showAxis("z",!1),we.clipTransRotControls[n].children[2].children[1].showAxis("x",!0),we.clipTransRotControls[n].children[2].children[1].showAxis("y",!0)):"R"===we.clipTransRotControls[n].name&&(we.clipTransRotControls[n].children[2].children[1].showAxis("x",!1),we.clipTransRotControls[n].children[2].children[1].showAxis("y",!0),we.clipTransRotControls[n].children[2].children[1].showAxis("z",!0)))},this._setSelectedObjectsClipping=function(e){let{body:n,mesh:i,isInstance:t,lineSegments:r,lineSegments2:o}=e;if(i)if(we.clippingObjectsUuids.includes(n.uuid)){we.viewer.ndsModel.meshManager.setGeomSameMaterialFlag(n);let e=null;we.uuid2MaterialMap.has(i.material.uuid)?(e=we.uuid2MaterialMap.get(i.material.uuid)).copy(i.material):(e=i.material.clone(),we.uuid2MaterialMap.set(i.material.uuid,e)),i.material=e,t&&(n.partClipObjects=!0,we.instanceMeshSet.add(n.uuid)),i.material.clippingPlanes=[],we.selectedClipPlaneArr.forEach(e=>{i.material.clippingPlanes.push(e)})}else Array.isArray(i.material.clippingPlanes)&&(i.material.clippingPlanes=null);if(r)if(we.clippingObjectsUuids.includes(n.uuid)){let e=null;we.uuid2MaterialMap.has(r.material.uuid)?(e=we.uuid2MaterialMap.get(r.material.uuid)).copy(r.material):(e=r.material.clone(),we.uuid2MaterialMap.set(r.material.uuid,e)),r.material=e,r.material.clippingPlanes=[],we.selectedClipPlaneArr.forEach(e=>{r.material.clippingPlanes.push(e)})}else Array.isArray(r.material.clippingPlanes)&&(r.material.clippingPlanes=null);if(o)if(we.clippingObjectsUuids.includes(n.uuid)){let e=null;we.uuid2MaterialMap.has(o.material.uuid)?(e=we.uuid2MaterialMap.get(o.material.uuid)).copy(o.material):(e=o.material.clone(),we.uuid2MaterialMap.set(o.material.uuid,e)),o.material=e,o.material.clippingPlanes=[],we.selectedClipPlaneArr.forEach(e=>{o.material.clippingPlanes.push(e)})}else Array.isArray(o.material.clippingPlanes)&&(o.material.clippingPlanes=null)},this.addSectionPlane=function(e){if(me&&-1==we.planeNameToId[e]){for(var n=0;n<we.clipTransRotControls.length;++n)we.clipTransRotControls[n].visible=!1,c[n].children[0].material.opacity=.2,NDSWebViewer.COMMON.isMobileDevice()?c[n].visible=!0:c[n].visible=!1;var i=we.viewer.controls.getBoundingBox().getCenter(we.boxCenter),t=we.viewer.controls.getBoundingBox().getSize(),t=Math.max(t.x,t.y,t.z),t=(t*=1.3,new THREE.PlaneGeometry(t,t,1,1)),r=null,o=new THREE.Color,l=("XZ"==e?(r=new THREE.Plane(new THREE.Vector3(0,-1,0),0),NDSWebViewer.COMMON.isMobileDevice()?o.set(7514614):o.setRGB(.298,.8,.4)):"YZ"==e?(r=new THREE.Plane(new THREE.Vector3(-1,0,0),0),NDSWebViewer.COMMON.isMobileDevice()?o.set(7514614):o.setRGB(.8,.4,.298)):"XY"==e?(r=new THREE.Plane(new THREE.Vector3(0,0,-1),0),NDSWebViewer.COMMON.isMobileDevice()?o.set(7514614):o.setRGB(.4,.298,.8)):"R"==e&&(r=new THREE.Plane(new THREE.Vector3(-1,0,0),0),NDSWebViewer.COMMON.isMobileDevice()?o.set(7514614):o.setRGB(.72,0,.8)),r.setFromNormalAndCoplanarPoint(r.normal,i),r.clone()),l=(we.selectedClipPlaneArr.push(l),we.partClipObjects||(we.viewer.renderer.clippingPlanes=[],we.selectedClipPlaneArr.forEach(e=>{we.viewer.renderer.clippingPlanes.push(e)})),new THREE.Object3D),i=(l.position.copy(i),l.oriPosition=i.clone(),l.updateMatrixWorld(),c.push(l),new THREE.Mesh(t,new THREE.MeshBasicMaterial({side:THREE.DoubleSide,opacity:.2}))),t=(3===we._clipPlaneShaderVersion&&we._showSectionPlane&&(i.material.polygonOffset=!0,i.material.polygonOffsetFactor=-2,i.material.polygonOffsetUnits=1),i.material.color.copy(o),i.material.transparent=!0,l.add(i),new THREE.Quaternion),o=(t.setFromUnitVectors(new THREE.Vector3(0,0,-1),r.normal),i.setRotationFromQuaternion(t),i.updateMatrixWorld(!0),new NDSWebViewer.TransformControls(we.viewer,we._domElement));me.add(o),me.add(l),NDSWebViewer.COMMON.isMobileDevice()?o.setSize(1):o.setSize(.7),o.setSpace("local"),o.attach(l),o.name=e,o.addEventListener("change",function(e){we.objectChangeEvent(e.axis),we.viewer.render()}),o.addEventListener("objectChange",function(e){var n=Date.now();E(),3===we._clipPlaneShaderVersion&&g(),NDSWebViewer.SETTING.enableBroadcast&&!NDSWebViewer.SETTING.broadcastMajor||(e.mouseUp?we.viewer.renderAllViews():we.viewer.render()),we.viewer.logOperatorTime&&we.viewer.logOperatorTimeShow("[剖切][操作球]",n)}),we.clipTransRotControls.push(o),we.setClipTransControlMode(we.clipModeState),we.clipActiveId=we.clipTransRotControls.length-1,we.planeNameToId[e]=we.clipActiveId,we.clipTransRotControl=we.clipTransRotControls[we.clipActiveId],NDSWebViewer.COMMON.isMobileDevice()&&(c[we.clipActiveId].children[0].material.opacity=.4),3===we._clipPlaneShaderVersion&&g(),we.clipTransRotControl.getDeltaRotation(!0,we.clipTransRotControl.RDelta),we.clipTransRotControl.getDeltaPosition(!0),we.viewer.renderAllViews()}},this.onSectionView=function(e,n,i=!0){if(this.allClippingObjectsUuids.length||we.getAllBodyUuid(),!we.viewer.hasBrepInfo()&&we.viewer.hasBrepFile()&&we.viewer.loadBrepInfo(!1),this.flag=e)null==u&&(u=new m),we.viewer.addFrameListener(u),we.viewer.toggleAutoRotation(!1),we.viewer.viewManager?(we.viewer.zoomExtents(!1),we.viewer.viewManager.notifyConnectCameraMove()):we.viewer.zoomExtents(),2==we._clipPlaneShaderVersion&&(s=new THREE.ShaderMaterial({uniforms:NDSWebViewer.ClippingShader.ClippingPlanesShader2.uniforms.caps,vertexShader:NDSWebViewer.ClippingShader.ClippingPlanesShader2.vertex,fragmentShader:NDSWebViewer.ClippingShader.ClippingPlanesShader2.fragment}),p=new THREE.ShaderMaterial({defines:NDSWebViewer.ClippingShader.ClippingPlanesShader2.defines,uniforms:NDSWebViewer.ClippingShader.ClippingPlanesShader2.uniforms.clipping,vertexShader:NDSWebViewer.ClippingShader.ClippingPlanesShader2.vertexClipping,fragmentShader:NDSWebViewer.ClippingShader.ClippingPlanesShader2.fragmentClippingFront,colorWrite:!1,depthWrite:!1,side:THREE.BackSide}),d=new THREE.ShaderMaterial({defines:NDSWebViewer.ClippingShader.ClippingPlanesShader2.defines,uniforms:NDSWebViewer.ClippingShader.ClippingPlanesShader2.uniforms.clipping,vertexShader:NDSWebViewer.ClippingShader.ClippingPlanesShader2.vertexClipping,fragmentShader:NDSWebViewer.ClippingShader.ClippingPlanesShader2.fragmentClippingFront,colorWrite:!1,depthWrite:!1}),NDSWebViewer.ClippingShader.ClippingPlanesShader2.uniforms.clipping.clippingPlaneNDS.value=[-1,0,0,0],(h=new THREE.Scene).add(new THREE.Mesh(new THREE.PlaneGeometry(2*we.viewer.camera.far,2*we.viewer.camera.far,1,1),s))),we.planeNameToId.YZ=-1,we.planeNameToId.XY=-1,we.planeNameToId.XZ=-1,we.planeNameToId.R=-1,me=new THREE.Scene,we._clipScene=me,we.addSectionPlane("YZ");else{if(we.onCloseClip(),we.clipTransRotControl){if(s&&s.dispose(),s=null,p&&p.dispose(),p=null,d&&d.dispose(),d=null,h)for(var t=0;t<h.children.length;t++)h.children[t].geometry&&h.children[t].geometry.dispose(),h.remove(h.children[t]),t--;h=null;for(var r=0;r<we.selectedClipPlaneArr.length;++r)o=we.selectedClipPlaneArr[r],o=null;for(r=0;r<we.clipTransRotControls.length;++r)we.clipTransRotControls[r].dispose();we.clipTransRotControls=[],l=null;for(t=0;t<c.length;t++)NDSWebViewer.COMMON.disposeObject(c[t]);if(c=[],me)for(t=0;t<me.children.length;t++)me.remove(me.children[t]),t--;i&&(me=null),we.viewer.renderer.clippingPlanes=[],we.selectedClipPlaneArr=[],this.clippingObjectsUuids=[],this.unClippingObjectsUuids=[],this.partClipObjects=!1,this.isSelectedClip=!1}NDSWebViewer.COMMON.isMobileDevice()?we.clipModeState="translate":we.clipModeState="both",this.planeNameToId={},we.clipActiveId=0,we.viewer.removeFrameListener(u),u=null}0!=n&&we.viewer.renderAllViews()},this.onCloseViewSection=function(){we.fromView&&this.onSectionView(!1,!0)},this.onCloseClipControl=function(){we.clipTransRotControl&&(we.clipTransRotControl.visible=!1,we.viewer.renderAllViews())},this.getClipControlVisible=function(){return!!we.clipTransRotControl&&we.clipTransRotControl.visible},this.onOpenClipControl=function(){we.clipTransRotControl&&(we.clipTransRotControl.visible=!0,we.viewer.renderAllViews())},this.isSectionViewEnabled=function(){return!!me},this.getClipPlaneInfor=function(){if(me&&c.length&&!we.onCustomClipPlaneStatus){for(var e={clipGlobalPlaneObjects:[]},n=0;n<c.length;++n){var i={position:c[n].position.clone(),quaternion:c[n].quaternion.clone(),meshquaternion:c[n].children[0].quaternion.clone()};e.clipGlobalPlaneObjects.push(i)}return e.planeNameToId=we.planeNameToId,e.clippingPlanes=we.selectedClipPlaneArr,e.clipActiveId=we.clipActiveId,l=c[we.clipActiveId],e.planeVisible=l.visible,e.clipModeState=we.clipModeState,e.clippingObjectsUuids=we.clippingObjectsUuids,e.partClipObjects=we.partClipObjects,e}return null},this.setClipPlaneInfor=function(e){we.planeNameToId=e.planeNameToId,we.viewer.renderer.clippingPlanes=[],we.selectedClipPlaneArr=[],c=[],we.clipTransRotControls=[],me=new THREE.Scene;for(var n=null,i=0;i<e.clipGlobalPlaneObjects.length;++i){for(var t in we.planeNameToId)if(we.planeNameToId[t]==i){n=t;break}var r=we.viewer.controls.getBoundingBox().getSize(),r=Math.max(r.x,r.y,r.z),r=(r*=1.3,new THREE.PlaneGeometry(r,r,1,1)),o=new THREE.Plane(e.clippingPlanes[i].normal,e.clippingPlanes[i].constant),l=new THREE.Color,a=("XZ"==n?NDSWebViewer.COMMON.isMobileDevice()?l.set(7514614):l.setRGB(.298,.8,.4):"YZ"==n?NDSWebViewer.COMMON.isMobileDevice()?l.set(7514614):l.setRGB(.8,.4,.298):"XY"==n&&(NDSWebViewer.COMMON.isMobileDevice()?l.set(7514614):l.setRGB(.4,.298,.8)),o.clone()),a=(we.selectedClipPlaneArr.push(a),we.partClipObjects||(we.viewer.renderer.clippingPlanes=[],we.selectedClipPlaneArr.forEach(e=>{we.viewer.renderer.clippingPlanes.push(e)})),new THREE.Object3D),r=(a.position.copy(e.clipGlobalPlaneObjects[i].position),a.updateMatrixWorld(),c.push(a),new THREE.Mesh(r,new THREE.MeshBasicMaterial({side:THREE.DoubleSide,opacity:.2}))),l=(3===we._clipPlaneShaderVersion&&we._showSectionPlane&&(r.material.polygonOffset=!0,r.material.polygonOffsetFactor=-2,r.material.polygonOffsetUnits=1),r.material.color.copy(l),r.material.transparent=!0,a.add(r),new THREE.Quaternion),o=(l.setFromUnitVectors(new THREE.Vector3(0,0,-1),o.normal),r.setRotationFromQuaternion(l),r.updateMatrixWorld(!0),new NDSWebViewer.TransformControls(we.viewer,we._domElement));me.add(o),me.add(a),NDSWebViewer.COMMON.isMobileDevice()?o.setSize(1.1):o.setSize(.7),o.setMode(we.clipModeState),o.setSpace("local"),o.attach(a),o.name=n,o.update(),i!=e.clipActiveId&&(a.visible=!1,o.visible=!1),o.addEventListener("change",function(){we.viewer.render()}),o.addEventListener("objectChange",function(e){E(),3===we._clipPlaneShaderVersion&&g(),NDSWebViewer.SETTING.enableBroadcast&&!NDSWebViewer.SETTING.broadcastMajor||(e.mouseUp?we.viewer.renderAllViews():we.viewer.render())}),we.clipTransRotControls.push(o)}for(t in n=null,we.planeNameToId)if(we.planeNameToId[t]==e.clipActiveId){n=t;break}we.setActiveSectionPlane(n);var s=we.getClipControlVisible();we.clipTransRotControl=we.clipTransRotControls[we.clipActiveId],we.clipTransRotControl.visible=s,3===we._clipPlaneShaderVersion&&g(),we.hideShowClipPlane(e.planeVisible),e.fromView&&(we.fromView=!0),we.viewer.renderAllViews()},this.hideShowClipPlane=function(e){var n=Date.now();if(NDSWebViewer.COMMON.isMobileDevice())for(var i=0;i<we.clipTransRotControls.length;++i)c[i]&&(c[i].visible=e);else(l=c[we.clipActiveId])&&(l.visible=e);we.viewer.renderAllViews(),we.viewer.logOperatorTime&&we.viewer.logOperatorTimeShow("[剖切][显示/隐藏 投影面]",n)},this.getClipPlaneVisible=function(){return!!(l=c[we.clipActiveId])&&l.visible},this.reverseClipDirection=function(){var e;we.viewer.GeomEmpty||(e=null,we.planeNameToId.XY==we.clipActiveId?e="XY":we.planeNameToId.XZ==we.clipActiveId?e="XZ":we.planeNameToId.YZ==we.clipActiveId?e="YZ":we.planeNameToId.R==we.clipActiveId&&(e="R"),l=c[we.clipActiveId],o=we.selectedClipPlaneArr[we.clipActiveId],a=l.children[0],o.normal.negate(),"XY"==e?l.quaternion.setFromUnitVectors(new THREE.Vector3(0,0,-1),o.normal):"XZ"==e?l.quaternion.setFromUnitVectors(new THREE.Vector3(0,-1,0),o.normal):"YZ"!=e&&"R"!=e||l.quaternion.setFromUnitVectors(new THREE.Vector3(-1,0,0),o.normal),o.setFromNormalAndCoplanarPoint(o.normal,l.position),3===we._clipPlaneShaderVersion&&g(),we.viewer.renderAllViews())},this.updateClipPlane=function(){3===we._clipPlaneShaderVersion&&g(),we.viewer.renderAllViews()}}init(e,n,i){this._showSectionPlane=i,e.canvas2D?this._domElement=e.canvas2D:this._domElement=e.canvas3D,this.tempQuat=new THREE.Quaternion,this._clipPlaneShaderVersion=void 0===n?1:n,1===this._clipPlaneShaderVersion&&(THREE.ShaderChunk.clipping_planes_fragment=NDSWebViewer.ClippingShader.ClippingPlanesShader_fragment1,THREE.ShaderChunk.clipping_planes_pars_fragment=NDSWebViewer.ClippingShader.ClippingPlanesShader_pars_fragment1,THREE.ShaderChunk.meshphong_frag=NDSWebViewer.ClippingShader.ClippingPlanesShader1_MeshPhong,THREE.ShaderLib.phong.fragmentShader=NDSWebViewer.ClippingShader.ClippingPlanesShader1_MeshPhong,THREE.ShaderChunk.meshphysical_frag=NDSWebViewer.ClippingShader.ClippingPlanesShader1_MeshPhysical,THREE.ShaderLib.physical.fragmentShader=NDSWebViewer.ClippingShader.ClippingPlanesShader1_MeshPhysical),this.Popup=null,this.prompt=document.createElement("div"),NDSWebViewer.COMMON.isMobileDevice()?this.prompt.className="app-alert":this.prompt.className="pc-alert",e.container.appendChild(this.prompt)}}class l extends NDSWebViewer.Extension{constructor(){super(),this.name="NDSClipExtension"}init(e,n,i){this.clipPlaneManager=new o(e,n,i),this.clipBoxManager=new r(e),e.clipPlaneManager=this.clipPlaneManager,e.clipBoxManager=this.clipBoxManager,t(this)}overrideValue(e,n){super.overrideValue(this.currentTypeName,e,n)}overrideFunction(e,n){super.overrideFunction(this.currentTypeName,e,n)}overridePrototype(e){super.overridePrototype(this.currentTypeName,e)}load(e){this.viewer||(super.load(e),this.viewer=e,this.currentTypeName="")}unload(e){super.unload(e)}}let a=new l;NDSWebViewer.ExtensionManager.addExtension(a)}],t={},r.m=i,r.c=t,r.d=function(e,n,i){r.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(n,e){if(1&e&&(n=r(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var t in n)r.d(i,t,function(e){return n[e]}.bind(null,t));return i},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=0);function r(e){var n;return(t[e]||(n=t[e]={i:e,l:!1,exports:{}},i[e].call(n.exports,n,n.exports,r),n.l=!0,n)).exports}var i,t});