1234567891011121314151617181920212223242526 |
- import{v as z,b as B,m as T,a as H,V as N}from"./SVGHelpers-c6cd7f31.js";import{C as x,E as G,S as m,F,n as K,v as P,w as $,x as q,y as O,z as U,A as b,B as D}from"./index-6e368050.js";import{v as j}from"./LabelWidget-193c836e.js";function Y(e,t){t.classHierarchy.push("vtkInteractorStyleImage"),e.superHandleMouseMove=e.handleMouseMove,e.handleMouseMove=n=>{const s=n.position,i=n.pokedRenderer;switch(t.state){case m.IS_WINDOW_LEVEL:e.windowLevel(i,s),e.invokeInteractionEvent({type:"InteractionEvent"});break;case m.IS_SLICE:e.slice(i,s),e.invokeInteractionEvent({type:"InteractionEvent"});break}e.superHandleMouseMove(n)},e.superHandleLeftButtonPress=e.handleLeftButtonPress,e.handleLeftButtonPress=n=>{const s=n.position;if(!n.shiftKey&&!n.controlKey){t.windowLevelStartPosition[0]=s.x,t.windowLevelStartPosition[1]=s.y,e.setCurrentImageNumber(t.currentImageNumber);const i=t.currentImageProperty;i&&(t.windowLevelInitial[0]=i.getColorWindow(),t.windowLevelInitial[1]=i.getColorLevel()),e.startWindowLevel()}else t.interactionMode==="IMAGE3D"&&n.shiftKey?n.controlKey||n.altKey?e.startDolly():e.startRotate():t.interactionMode==="IMAGE_SLICING"&&n.controlKey?(t.lastSlicePosition=s.y,e.startSlice()):e.superHandleLeftButtonPress(n)},e.superHandleLeftButtonRelease=e.handleLeftButtonRelease,e.handleLeftButtonRelease=()=>{switch(t.state){case m.IS_WINDOW_LEVEL:e.endWindowLevel();break;case m.IS_SLICE:e.endSlice();break;default:e.superHandleLeftButtonRelease();break}},e.handleStartMouseWheel=()=>{e.startSlice()},e.handleEndMouseWheel=()=>{e.endSlice()},e.handleMouseWheel=n=>{const s=n.pokedRenderer.getActiveCamera();let i=s.getDistance();i+=n.spinY;const d=s.getClippingRange();i<d[0]&&(i=d[0]),i>d[1]&&(i=d[1]),s.setDistance(i),n.pokedRenderer.getViewProps().filter(r=>r.isA("vtkImageSlice")).forEach(r=>{if(r.getMapper().isA("vtkImageResliceMapper")){const o=r.getMapper().getSlicePlane();o&&(o.push(n.spinY),o.modified(),r.getMapper().modified())}})},e.windowLevel=(n,s)=>{t.windowLevelCurrentPosition[0]=s.x,t.windowLevelCurrentPosition[1]=s.y;const i=t._interactor;if(t.currentImageProperty){const d=i.getView().getViewportSize(n),c=t.windowLevelInitial[0],r=t.windowLevelInitial[1];let o=(t.windowLevelCurrentPosition[0]-t.windowLevelStartPosition[0])*4/d[0],a=(t.windowLevelStartPosition[1]-t.windowLevelCurrentPosition[1])*4/d[1];Math.abs(c)>.01?o*=c:o*=c<0?-.01:.01,Math.abs(r)>.01?a*=r:a*=r<0?-.01:.01,c<0&&(o*=-1),r<0&&(a*=-1);let v=o+c;const l=r-a;v<.01&&(v=.01),t.currentImageProperty.setColorWindow(v),t.currentImageProperty.setColorLevel(l)}},e.slice=(n,s)=>{const i=t._interactor,d=s.y-t.lastSlicePosition,c=n.getActiveCamera(),r=c.getClippingRange();let o=c.getDistance(),a=0;if(c.getParallelProjection())a=2*c.getParallelScale();else{const S=F(c.getViewAngle());a=2*o*Math.tan(.5*S)}const v=i.getView().getViewportSize(n),l=d*a/v[1];o+=l,o<r[0]&&(o=r[0]+a*.001),o>r[1]&&(o=r[1]-a*.001),c.setDistance(o),t.lastSlicePosition=s.y},e.setCurrentImageNumber=n=>{if(n===null)return;const s=t._interactor.getCurrentRenderer();if(!s)return;t.currentImageNumber=n;function i(o,a,v){return o===v&&a.getNestedPickable()}const d=s.getViewProps().filter(o=>o.isA("vtkImageSlice"));let c=n;n<0&&(c+=d.length);const r=d.find((o,a)=>i(a,o,c));r&&e.setCurrentImageProperty(r.getProperty())},e.setCurrentImageProperty=n=>{t.currentImageProperty=n}}const J={windowLevelStartPosition:[0,0],windowLevelCurrentPosition:[0,0],lastSlicePosition:0,windowLevelInitial:[1,.5],currentImageNumber:-1,interactionMode:"IMAGE2D",xViewRightVector:[0,1,0],xViewUpVector:[0,0,-1],yViewRightVector:[1,0,0],yViewUpVector:[0,0,-1],zViewRightVector:[1,0,0],zViewUpVector:[0,1,0]};function I(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(t,J,n),G.extend(e,t,n),x.setGet(e,t,["interactionMode"]),x.get(e,t,["currentImageProperty"]),Y(e,t)}const Q=x.newInstance(I,"vtkInteractorStyleImage");var X={newInstance:Q,extend:I};const Z=["v-html"],ne={__name:"vtk2",setup(e){let t=K(`
- <div>
- <button id="addLabel">Addlabel</button>
- <button id="deleteLabel">Deletelabel</button>
- <div>Text:</div>
- <textarea id="txtIpt" name="name"></textarea>
- <div>Font size</div>
- <input
- title="Font size"
- id="fontSize"
- type="range"
- min="8"
- max="64"
- step="1"
- value="16"
- />
- <div>Color</div>
- <select name="color" class="str" id="color">
- <option value="white">White</option>
- <option value="black">Black</option>
- <option value="red">Red</option>
- <option value="green">Green</option>
- <option value="blue">Blue</option>
- </select>
- </div>`);const{computeWorldToDisplay:n}=D,s=P.newInstance(),i=s.getRenderer(),d=s.getRenderWindow(),c=X.newInstance();d.getInteractor().setInteractorStyle(c);const r=z.newInstance();return r.setRenderer(i),i.resetCamera(),r.enablePicking(),$(()=>{var o=t.value;s.addController(o);const a=new Map;function v(g){B(i,g.getWidgetState(),{mapState(u,{size:p}){const f=u.getText(),y=f.getText(),w=f.getOrigin();if(w&&f.getVisible()){const L=n(i,...w),h=[L[0],p[1]-L[1]];return{text:y,position:h,active:f.getActive()}}return null},render(u,p){if(u){const f=[],{text:y,position:w,active:L}=u;console.log(u);const{fontColor:h,fontSize:C}=a.get(g);y.trim().length===0&&f.push(p("circle",{key:"circle",attrs:{r:5,stroke:"red",fill:"red",cx:w[0],cy:w[1]}}));const k=y.split(`
- 2个人`),W=T(k.length,C,N.MIDDLE);return console.log(k),f.push(...k.map((_,M)=>H(p("text",{key:M,attrs:{x:w[0],y:w[1],dx:12,dy:W[M],fill:h,"font-size":C,"text-anchor":"middle","font-weight":L?"bold":"normal"},style:{cursor:"pointer"},on:{pointerenter(){r.disablePicking(),g.activateHandle({selectedState:g.getWidgetState().getText()})},pointerleave:()=>{g.deactivateAllHandles(),r.enablePicking()}}},_)))),f}return[]}})}let l=null;const S=new Map;document.querySelector("#addLabel").addEventListener("click",()=>{const g=j.newInstance(),u=r.addWidget(g);r.grabFocus(g);const p={fontSize:32,fontColor:"white"};a.set(u,p),S.set(u,v(u)),u.onStartInteractionEvent(()=>{l=u,console.log(u)})}),document.querySelector("#deleteLabel").addEventListener("click",()=>{l&&(l.reset(),r.removeWidget(l),S.get(l)(),S.delete(l),a.delete(l),l=null)});function V(){const g=document.getElementById("txtIpt").value;l&&(l.setText(g),d.render())}document.querySelector("#txtIpt").addEventListener("keyup",V);function E(){const g=document.getElementById("fontSize").value;l&&(a.set(l,{...a.get(l),fontSize:g}),l.getWidgetState().modified())}document.querySelector("#fontSize").addEventListener("input",E);function R(){const g=document.getElementById("color").value;l&&(a.set(l,{...a.get(l),fontColor:g}),l.getWidgetState().modified())}document.querySelector("#color").addEventListener("input",R)}),(o,a)=>(q(),O("div",null,[U("div",{"v-html":b(t),ref:"controlPanel1",id:"fullscreen"},null,8,Z)]))}};export{ne as default};
|