# corps-viewport
**Repository Path**: white-kite/corps-viewport
## Basic Information
- **Project Name**: corps-viewport
- **Description**: vue3+vite+typescript+基石的dicom查看器
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 5
- **Created**: 2021-06-07
- **Last Updated**: 2024-10-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: dicom, Vue, vue3, vite
## README
# corps-viewport
使用基石封装的vue3-dicom查看器组件
## 安装
```
yarn
yarn add @whitekite/corps-viewport
npm
npm i @whitekite/corps-viewport
pnpm
pnpm add @whitekite/corps-viewport
```
## CornerstoneViewport
主要的显示组件
| 字段 |
说明 |
类型 |
|
API
|
| activeTool |
当前激活的工具 |
string |
| synchronizationContext |
同步工具 |
Sync |
| tools |
使用的工具集:注册才可使用 |
Tool |
| imageIds |
加载的dicom片:请使用changedicom工具将普通url转为dicomweb标准 |
string[] |
| style |
自定义样式 |
CSSProperties |
| class |
自定义样式class |
string |
| style |
自定义样式 |
CSSProperties |
|
Event
|
| onSetViewportActive |
当查看器被手势激活时 |
VoidFunction |
| onViewportInit |
当查看器被初始化 |
(element: HTMLElement | null) => void |
| onImageLoad |
当dicom片加载完成 |
(element: HTMLElement | null) => void |
|
Tool
示例以及常见工具
所有工具
|
| name |
工具的名称 |
?string< |
| name |
工具的名称 |
?string |
| toolClass |
自定义工具:内部自带工具GridDividingLineTool详见下方表格 |
BaseTool extends Class |
| props |
工具的配置:详细配置 |
Record< string , string > |
| mode |
工具模式 |
active | passive | enabled | disabled |
| modeOptions |
工具的配置:详细配置 |
{ mouseButtonMask: number } | Record< string, number > |
## 样式
```tsx
import '@whitekite/corps-viewport/dist/style.css'
// or
import '@whitekite/corps-viewport/style'
```
## Example
```tsx
{
if (element) {
// 元素是否存在,存在则将同步元素更新
syncElement.value[index] = element
}
}}
tools={tools.value}
activeTool={activeTool.value}
synchronizationContext={syncTool.value}
onImageLoad={(load) => {
imageLoadList.value[index] = load
}}
onSetViewportActive={() => {
activeKey.value = index
}}
/>
```
# Util·工具
### usePanZoomSynchronizer
移动
```tsx
/**
* synchronizationContext的一种
* @return new Synchronizer('cornerstoneimagerendered', panZoomSynchronizer)
*/
const panZoomSynchronizer = usePanZoomSynchronizer()
```
### useWwwcSynchronizer
调窗同步
```tsx
/**
* synchronizationContext的一种
* @return new Synchronizer('cornerstoneimagerendered', wwwcSynchronizer)
*/
const wwwcSynchronizer = useWwwcSynchronizer()
```
### GridDividingLineTool
自定义胸肺比工具
```tsx
tools.push({
name: 'GridDividingLine',
toolClass: GridDividingLineTool,
mode: 'disabled',
modeOptions: {mouseButtonMask: 1},
})
```
### useCornerstoneChangeDicomFileUrl
将普通下载url转为dicomweb标准url
```tsx
/**
* 改变url使基石可以直接读dicom文件
*/
const {changeUrlList} = useCornerstoneChangeDicomFileUrl()
imageIds.value[0] = changeUrlList(urlList)
```
### useCornerstoneRegister
注册dicom查看器工具 (必须)
```tsx
/**
* 注册基石
*/
useCornerstoneRegister()
```
### useNormalCornerstoneToolList
内置的Cornerstone常用工具数组,可用于便捷注册工具数组
> ### 内置工具:
>
> Wwwc
>
> Pan
>
> Zoom
>
> Magnify
>
> Rotate
>
> CobbAngle
>
> Length
>
> Bidirectional
>
> Angle
>
> RectangleRoi
>
> Probe
>
> EllipticalRoi
>
> FreehandRoi
```tsx
const toolList = useNormalCornerstoneToolList();
```
### useCornerstoneResetElements
重置dicom查看器
注意:使用钢笔工具请勿调用此方法
对绘图工具的清空本质上是直接清空工具状态
暂时只能清空工具内写死的绘图工具状态,一键清空,请期待后续更新
如封装额外绘图工具请自行封装该方法
> ### 支持清空绘图状态:
>
> FreehandRoi
>
> GridDividingLine
>
> CobbAngle
>
> Length
>
> Bidirectional
>
> Angle
>
> RectangleRoi
>
> Probe
>
> EllipticalRoi
>
```tsx
/**
* 重置
* 注意:使用钢笔工具请勿调用此方法
*/
const cornerstoneResetElements = useCornerstoneResetElements(syncElement)
```
### useCornerstoneScreenSizeCalibration
根据屏幕的真实宽度(单位:mm)计算影像真实尺寸显示大小
```tsx
const calibrateThroughPicture = useCornerstoneScreenSizeCalibration();
/**
* calibrateThroughPicture(element:读片器的元素,屏幕的真实宽度:mm)
*/
```
### useCornerstoneScrollToIndex
指定滚动至序列下标
```tsx
const scrollToIndex = useCornerstoneScrollToIndex();
```
### useCornerstonePlayClip
播放序列片
```tsx
const {
// 播放状态
state,
// 播放状态
clipState,
// 播放
play,
// 暂停
stop,
// 切换播放状态
toggle,
// 播放
playClip,
// 暂停
stopClip,
// 切换播放状态
toggleClip,
} = useCornerstonePlayClip();
/**
* 播放
* @param element 读片器所在元素
* @param frame 播放帧数
*/
playClip(syncElement.value, 24)
/**
* 暂停
* @param element 读片器所在元素
*/
stopClip(syncElement.value)
/**
* 切换播放状态
* @param element 读片器所在元素
* @param frame 播放帧数
*/
toggleClip(syncElement.value, 24)
```