Skip to content

Ref 方法 API

父组件通过 ref 调用 MolEditor 暴露的方法和状态。

ts
const editorRef = ref<InstanceType<typeof MolEditor> | null>(null)

editorRef.value?.undo()
editorRef.value?.setScale(1.25)

命令总线

API签名用法
executeCommand(id: string, args?: unknown) => Promise<boolean> | boolean执行内置或插件注册的命令。
registerCommand(id: string, handler: EditorCommandHandler) => () => void注册宿主命令,返回 unregister。
hasCommand(id: string) => boolean检查命令是否存在。
ts
import { EDITOR_COMMANDS } from '@shangchien/molio'

await editorRef.value?.executeCommand(EDITOR_COMMANDS.selectionCopySvg)
const unregister = editorRef.value?.registerCommand('host:save', async () => saveDraft())
unregister?.()

历史与文档

API用法
undo() / redo()执行历史栈撤销和重做。
reset()清空当前文档。
getDocumentSnapshot()返回当前 normalized 文档快照。
restoreDocumentSnapshot(snapshot)恢复文档快照,并按加载视口策略处理。
importMolecules(rdkitJsons)追加导入一组分子。
reload(rdkitJsons?)用新的分子列表重载画布;不传则清空。
getStoreEntries()获取当前分子 store 条目,适合宿主调试或导出前查询。
ts
const snapshot = editorRef.value?.getDocumentSnapshot()
if (snapshot)
  localStorage.setItem('molio:draft', JSON.stringify(snapshot))

分子编辑 primitives

这些方法面向需要程序化编辑分子的高级宿主。常规业务优先通过工具、命令或 workflow 完成。

API用法
addMolecule(rdkitJson)添加分子,返回分子 ID。
removeMolecule(moleculeId)删除分子。
placeMoleculeAt(moleculeId, point)移动分子的世界坐标位置。
addAtomToMolecule(moleculeId, params)添加原子。
updateAtomInMolecule(moleculeId, atomIndex, params)更新原子元素、电荷等属性。
removeAtomFromMolecule(moleculeId, atomIndex)删除原子。
addBondToMolecule(moleculeId, params)添加键。
updateBondInMolecule(moleculeId, bondIndex, params)更新键级或键样式。
removeBondFromMolecule(moleculeId, bondIndex)删除键。
getAtomNeighbors(moleculeId, atomIndex)查询邻接原子。
getAtomBonds(moleculeId, atomIndex)查询原子相关键。

选区与剪贴板

API用法
selectAll()选中所有可选对象。
clearSelection()清空选区。
deleteSelected()删除当前选区。
getSelectedMols()返回选中的分子数据。
getSelectionContext()返回统一 selection context,覆盖 molecule/text/image/connector。
copy() / paste() / pasteAt(point)复用编辑器剪贴板能力。
hasSelection只读状态 ref,指示当前是否有选区。
selectedAtoms / selectedBonds当前选中的分子原子/键集合。
selectionBounds当前选区 bounds。

视口、尺寸与全屏

API用法
resize(width, height)改变非全屏画布尺寸。
setViewport({ x, y, scale })设置视口 patch,未传字段保持当前值。
setScale(scale, anchor?)以可选屏幕锚点设置缩放。
zoomIn() / zoomOut()使用 interaction.zoomInFactor / zoomOutFactor 缩放。
zoomBy(factor, anchor?)按比例缩放。
applyZoom(scale, anchor?)设置绝对缩放值。
autofit()自动居中并适配当前内容。
setFullscreen(value)设置窗口全屏状态。
toggleFullscreen()切换全屏状态。
isFullscreen当前全屏状态 ref。
viewport当前 { x, y, scale } ref。

网格和工具

API用法
setGridVisible(visible)显示或隐藏背景网格。
setGridSpacing(spacing)修改网格间距。
setTool(tool)设置完整工具对象。
setAtomTool(atomicNumber, symbol)快速切到原子工具。
setBondTool(bondOrder, wedge?, label?)快速切到键工具。
setTemplateTool(template)设置模板工具。
resetTool()回到默认工具。
activeTool当前工具 ref。
mode当前底层交互模式。

导出、保存与分享

API返回值用法
exportStagePng(filename?)void下载当前画布 PNG。
exportStageSvg(filename?)void下载当前画布 SVG。
exportMoleculePng(moleculeId, filename?)void下载单个分子 PNG。
exportMoleculeSvg(moleculeId, filename?)void下载单个分子 SVG。
saveDocumentWithWorkflow()Promise<Blob | null>通过 persistence workflow 保存 .mpz
loadDocumentWithWorkflow(file)Promise<DocumentSnapshot | null>通过 persistence workflow 读取文件。
shareDocumentWithWorkflow(nodeIds?)Promise<{ url?: string, blob?: Blob } | null>通过 share workflow 生成分享结果。
runWorkflowLayout(nodeIds?)Promise<boolean>执行 layout workflow。

显式氢

API用法
toggleExplicitHydrogens(addHydrogens)true 添加显式氢,false 移除显式氢。
addExplicitHydrogens()添加显式氢。
removeExplicitHydrogens()移除显式氢。

有选区时只作用于选中的分子;没有选区时作用于当前文档内全部分子。

事件订阅

API用法
onMoleculeChange(handler)订阅分子变化。
onDocumentChange(handler)订阅文档变化。
onSelectionChange(handler)订阅选区变化。

这些方法适合非 Vue 事件场景,例如外部服务或嵌入式宿主需要运行时订阅。

Released under GPL-3.0-only.