Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions app/components/VeaseViewToolbar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,7 @@ const camera_options = [
tooltip: "Reset camera",
icon: "mdi-cube-scan",
action: () => {
const { genericRenderWindow } = storeToRefs(hybridViewerStore);
const renderWindow = genericRenderWindow.value.value.getRenderWindow();
const [renderer] = renderWindow.getRenderers();
renderer.resetCamera();
renderWindow.render();
hybridViewerStore.syncRemoteCamera();
hybridViewerStore.resetCamera();
},
},
{
Expand Down
10 changes: 8 additions & 2 deletions app/stores/hybrid_viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,52 +25,52 @@
];
const WHEEL_TIME_OUT_MS = 600;

export const useHybridViewerStore = defineStore("hybridViewer", () => {
const dataStore = useDataStore();
const viewerStore = useViewerStore();
const hybridDb = reactive({});
const status = ref(Status.NOT_CREATED);
const camera_options = reactive({});
const genericRenderWindow = reactive({});
const is_moving = ref(false);
const zScale = ref(1);
let viewStream = undefined;
const gridActor = undefined;

async function initHybridViewer() {
if (status.value !== Status.NOT_CREATED) {
return;
}
status.value = Status.CREATING;
genericRenderWindow.value = vtkGenericRenderWindow({
background: BACKGROUND_COLOR,
listenWindowResize: false,
});

const webGLRenderWindow = genericRenderWindow.value.getApiSpecificRenderWindow();
const imageStyle = webGLRenderWindow.getReferenceByName("bgImage").style;
imageStyle.transition = "opacity 0.1s ease-in";
imageStyle.zIndex = 1;

await viewerStore.ws_connect();
viewStream = viewerStore.client.getImageStream().createViewStream("-1");
viewStream.onImageReady((event) => {
if (is_moving.value) {
return;
}
webGLRenderWindow.setBackgroundImage(event.image);
imageStyle.opacity = 1;
});

status.value = Status.CREATED;
}

async function addItem(id) {
if (!genericRenderWindow.value) {
return;
}
const value = await dataStore.item(id);
console.log("hybridViewerStore.addItem", { value });

Check warning on line 73 in app/stores/hybrid_viewer.js

View workflow job for this annotation

GitHub Actions / test / oxlint

eslint(no-console)

Unexpected console statement.
const reader = vtkXMLPolyDataReader();
const textEncoder = new TextEncoder();
await reader.parseAsArrayBuffer(textEncoder.encode(value.binary_light_viewable));
Expand All @@ -81,13 +81,11 @@
actor.getProperty().setColor(ACTOR_COLOR);
actor.setMapper(mapper);
const renderer = genericRenderWindow.value.getRenderer();
const renderWindow = genericRenderWindow.value.getRenderWindow();
const isFirst = renderer.getActors().length === 0;
renderer.addActor(actor);
if (isFirst) {
renderer.resetCamera();
}
renderWindow.render();
hybridDb[id] = { actor, polydata, mapper };
}

Expand Down Expand Up @@ -131,8 +129,15 @@
remoteRender();
}

function resetCamera() {
const renderer = genericRenderWindow.value.getRenderer();
renderer.resetCamera();
genericRenderWindow.value.getRenderWindow().render();
syncRemoteCamera();
}

function syncRemoteCamera() {
console.log("syncRemoteCamera");

Check warning on line 140 in app/stores/hybrid_viewer.js

View workflow job for this annotation

GitHub Actions / test / oxlint

eslint(no-console)

Unexpected console statement.
const renderer = genericRenderWindow.value.getRenderer();
const camera = renderer.getActiveCamera();
const params = {
Expand Down Expand Up @@ -306,6 +311,7 @@
initHybridViewer,
remoteRender,
resize,
resetCamera,
setContainer,
zScale,
clear,
Expand Down
15 changes: 4 additions & 11 deletions app/utils/file_import_workflow.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@
const SECOND = 1000;

async function importWorkflow(files) {
console.log("importWorkflow", { files });

Check warning on line 15 in app/utils/file_import_workflow.js

View workflow job for this annotation

GitHub Actions / test / oxlint

eslint(no-console)

Unexpected console statement.
const start = Date.now();
const promise_array = [];
for (const file of files) {
const { filename, geode_object_type } = file;
console.log({ filename }, { geode_object_type });

Check warning on line 20 in app/utils/file_import_workflow.js

View workflow job for this annotation

GitHub Actions / test / oxlint

eslint(no-console)

Unexpected console statement.
promise_array.push(importFile(filename, geode_object_type));
}
const results = await Promise.all(promise_array);
const hybridViewerStore = useHybridViewerStore();
hybridViewerStore.remoteRender();
console.log("importWorkflow completed in", (Date.now() - start) / SECOND);

Check warning on line 26 in app/utils/file_import_workflow.js

View workflow job for this annotation

GitHub Actions / test / oxlint

eslint(no-console)

Unexpected console statement.
return results;
}

function buildImportItemFromPayloadApi(value, geode_object_type) {
console.log("buildImportItemFromPayloadApi", { value, geode_object_type });

Check warning on line 31 in app/utils/file_import_workflow.js

View workflow job for this annotation

GitHub Actions / test / oxlint

eslint(no-console)

Unexpected console statement.
return {
...value,
};
Expand All @@ -39,30 +39,23 @@
const dataStyleStore = useDataStyleStore();
const hybridViewerStore = useHybridViewerStore();
const treeviewStore = useTreeviewStore();

const registerTask = dataStore.registerObject(item.id);
const addDataTask = dataStore.addItem(item);

const addDataComponentsTask =
item.viewer_type === "model" ? dataStore.addComponents(item) : Promise.resolve();
const addDataRelationsTask =
item.viewer_type === "model" ? dataStore.addComponentRelations(item) : Promise.resolve();
const addTreeviewTask = treeviewStore.addItem(
item.geode_object_type,
item.name,
item.id,
item.viewer_type,
);
const addStyleTask = dataStyleStore.addDataStyle(item.id, item.geode_object_type);
treeviewStore.addItem(item.geode_object_type, item.name, item.id, item.viewer_type);
dataStyleStore.addDataStyle(item.id, item.geode_object_type);
const addViewerTask = addDataTask.then(() => hybridViewerStore.addItem(item.id));
const applyStyleTask = Promise.all([registerTask, addDataComponentsTask, addStyleTask]).then(() =>
const applyStyleTask = Promise.all([registerTask, addDataComponentsTask]).then(() =>
dataStyleStore.applyDefaultStyle(item.id),
);
await Promise.all([
registerTask,
addDataTask,
addDataComponentsTask,
addTreeviewTask,
addStyleTask,
addDataRelationsTask,
addViewerTask,
applyStyleTask,
Expand All @@ -82,12 +75,12 @@
}

async function importWorkflowFromSnapshot(items) {
console.log("[importWorkflowFromSnapshot] start", { count: items?.length });

Check warning on line 78 in app/utils/file_import_workflow.js

View workflow job for this annotation

GitHub Actions / test / oxlint

eslint(no-console)

Unexpected console statement.
const hybridViewerStore = useHybridViewerStore();

const ids = await Promise.all(items.map((item) => importItem(item)));
hybridViewerStore.remoteRender();
console.log("[importWorkflowFromSnapshot] done", { ids });

Check warning on line 83 in app/utils/file_import_workflow.js

View workflow job for this annotation

GitHub Actions / test / oxlint

eslint(no-console)

Unexpected console statement.
return ids;
}

Expand Down
Loading