!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{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{!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=f.ndsModel.getBodyNodeFromUuid(e),e=f.ndsModel.getLeafBodies(e);e&&e.forEach(n=>{var e=c.unClippingObjectsUuids.findIndex(e=>e==n.uuid);-1!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.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;ot?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)we.clipTransRotControls.length-1)){for(var n=0;nwe.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{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.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{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