Skip to content

Commit

Permalink
Merge pull request #36 from zilliztech/optimize_ivf_voronoi
Browse files Browse the repository at this point in the history
Optimize ivf voronoi; get the node of feder (dom element)
  • Loading branch information
shanghaikid committed Jun 6, 2022
2 parents eeab02c + a219c49 commit 12afe2c
Show file tree
Hide file tree
Showing 15 changed files with 468 additions and 426 deletions.
5 changes: 4 additions & 1 deletion federjs/Feder.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default class Feder {
core = null,
filePath = '',
source = '',
domSelector,
domSelector = null,
viewParams = {},
}) {
this.federView = new FederView({ domSelector, viewParams });
Expand All @@ -31,6 +31,9 @@ export default class Feder {
}
}

get node() {
return this.federView.dom;
}
async overview() {
this.initCorePromise && (await this.initCorePromise);
this.federView.overview();
Expand Down
12 changes: 6 additions & 6 deletions federjs/FederView/BaseView.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import { renderLoading, finishLoading } from './loading';
import { VIEW_TYPE } from 'Types';

export default class BaseView {
constructor({ domSelector, viewParams, getVectorById }) {
this.domSelector = domSelector;
constructor({ dom, viewParams, getVectorById }) {
this.dom = dom;
this.viewParams = viewParams;

const { width, height, canvasScale, mediaType, mediaCallback } = viewParams;
Expand All @@ -18,8 +18,8 @@ export default class BaseView {
this.mediaCallback = mediaCallback;
}
initCanvas() {
renderLoading(this.domSelector);
const dom = d3.select(this.domSelector);
renderLoading(this.dom, this.viewParams.width, this.viewParams.height);
const dom = d3.select(this.dom);
dom.selectAll('canvas').remove();
const canvas = dom
.append('canvas')
Expand All @@ -43,7 +43,7 @@ export default class BaseView {
this.clickedNode = null;
this.hoveredNode = null;
this.overviewInitPromise && (await this.overviewInitPromise);
finishLoading(this.domSelector);
finishLoading(this.dom);
this.renderOverview();
this.addMouseListener();
this.setOverviewListenerHandlers();
Expand All @@ -55,7 +55,7 @@ export default class BaseView {
this.clickedNode = null;
this.hoveredNode = null;
await this.searchViewHandler({ searchRes });
finishLoading(this.domSelector);
finishLoading(this.dom);
this.renderSearchView();
this.addMouseListener();
this.setSearchViewListenerHandlers();
Expand Down
11 changes: 5 additions & 6 deletions federjs/FederView/HnswView/InfoPanel/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,10 @@ export const hoveredPanelId = 'feder-info-hovered-panel';
const panelBackgroundColor = hexWithOpacity(blackColor, 0.6);

export default class InfoPanel {
constructor({ domSelector, width, height }) {
this.domSelector = domSelector;
constructor({ dom, width, height }) {
this.dom = dom;
this.width = width;
this.height = height;
const dom = document.querySelector(domSelector);

const overviewPanel = document.createElement('div');
overviewPanel.setAttribute('id', overviewPanelId);
Expand Down Expand Up @@ -131,7 +130,7 @@ export default class InfoPanel {
}

renderSelectedPanel(itemList = [], color = '#000') {
const panel = d3.select(this.domSelector).select(`#${selectedPanelId}`);
const panel = d3.select(this.dom).select(`#${selectedPanelId}`);
panel.style('color', color);
if (itemList.length === 0) panel.classed('hide', true);
else {
Expand All @@ -146,7 +145,7 @@ export default class InfoPanel {
y = 0,
isLeft = false,
} = {}) {
const panel = d3.select(this.domSelector).select(`#${hoveredPanelId}`);
const panel = d3.select(this.dom).select(`#${hoveredPanelId}`);
if (itemList.length === 0) panel.classed('hide', true);
else {
panel.style('color', color);
Expand All @@ -168,7 +167,7 @@ export default class InfoPanel {
}
}
renderOverviewPanel(itemList = [], color) {
const panel = d3.select(this.domSelector).select(`#${overviewPanelId}`);
const panel = d3.select(this.dom).select(`#${overviewPanelId}`);
panel.style('color', color);
if (itemList.length === 0) panel.classed('hide', true);
else {
Expand Down
8 changes: 4 additions & 4 deletions federjs/FederView/HnswView/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ const defaultHnswViewParams = {
hoveredPanelLineWidth: 2,
};
export default class HnswView extends BaseView {
constructor({ indexMeta, domSelector, viewParams, getVectorById }) {
constructor({ indexMeta, dom, viewParams, getVectorById }) {
super({
indexMeta,
domSelector,
dom,
viewParams,
getVectorById,
});
Expand All @@ -45,7 +45,7 @@ export default class HnswView extends BaseView {
}
this.padding = this.padding.map((num) => num * this.canvasScale);
const infoPanel = new InfoPanel({
domSelector,
dom,
width: this.width,
height: this.height,
});
Expand Down Expand Up @@ -106,7 +106,7 @@ export default class HnswView extends BaseView {
this.updateSearchViewOverviewInfo({});
}
renderSearchView() {
const timeControllerView = new TimeControllerView(this.domSelector);
const timeControllerView = new TimeControllerView(this.dom);

const callback = ({ t, p }) => {
renderSearchViewTransition.call(this, { t, p });
Expand Down
12 changes: 6 additions & 6 deletions federjs/FederView/IvfflatView/InfoPanel/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ export const hoveredPanelId = 'feder-info-hovered-panel';
const panelBackgroundColor = hexWithOpacity(blackColor, 0.6);

export default class InfoPanel {
constructor({ domSelector, width, height }) {
this.domSelector = domSelector;
constructor({ dom, width, height }) {
this.dom = dom;
this.width = width;
this.height = height;

Expand All @@ -27,7 +27,7 @@ export default class InfoPanel {
this.initStyle();
}
initOverviewPanel() {
const dom = document.querySelector(this.domSelector);
const dom = this.dom;
const overviewPanel = document.createElement('div');
overviewPanel.setAttribute('id', overviewPanelId);
overviewPanel.className =
Expand Down Expand Up @@ -222,7 +222,7 @@ export default class InfoPanel {
}

initHoveredPanel() {
const dom = document.querySelector(this.domSelector);
const dom = this.dom;
const hoveredPanel = document.createElement('div');
hoveredPanel.setAttribute('id', hoveredPanelId);
hoveredPanel.className = hoveredPanel.className + 'panel-border panel hide';
Expand Down Expand Up @@ -416,7 +416,7 @@ export default class InfoPanel {
document.getElementsByTagName('head').item(0).appendChild(style);
}
renderHoveredPanel(itemList = [], color = '#000', x = 0, y = 0) {
const panel = d3.select(this.domSelector).select(`#${hoveredPanelId}`);
const panel = d3.select(this.dom).select(`#${hoveredPanelId}`);
if (itemList.length === 0) panel.classed('hide', true);
else {
panel.style('color', color);
Expand Down Expand Up @@ -444,7 +444,7 @@ export default class InfoPanel {
}
}
renderOverviewPanel(itemList = [], color) {
const panel = d3.select(this.domSelector).select(`#${overviewPanelId}`);
const panel = d3.select(this.dom).select(`#${overviewPanelId}`);
panel.style('color', color);
if (itemList.length === 0) panel.classed('hide', true);
else {
Expand Down
14 changes: 8 additions & 6 deletions federjs/FederView/IvfflatView/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import InfoPanel from './InfoPanel';

const defaultIvfflatViewParams = {
minVoronoiRadius: 4,
voronoiForceTime: 3000,
nodeCollisionForceTime: 1000,
// voronoiForceTime: 3000,
// nodeCollisionForceTime: 1000,
backgroundColor: 'red',
voronoiStrokeWidth: 2,
targetNodeStrokeWidth: 5,
Expand All @@ -37,13 +37,14 @@ const defaultIvfflatViewParams = {
animateExitTime: 1500,
animateEnterTime: 1000,
fineSearchNodeTransTime: 1200,
forceIterations: 100,
};

export default class IvfflatView extends BaseView {
constructor({ indexMeta, domSelector, viewParams }) {
constructor({ indexMeta, dom, viewParams }) {
super({
indexMeta,
domSelector,
dom,
viewParams,
});
for (let key in defaultIvfflatViewParams) {
Expand All @@ -58,7 +59,7 @@ export default class IvfflatView extends BaseView {
this.overviewHandler({ indexMeta });

this.infoPanel = new InfoPanel({
domSelector,
dom,
width: viewParams.width,
height: viewParams.height,
});
Expand Down Expand Up @@ -87,6 +88,7 @@ export default class IvfflatView extends BaseView {
renderVoronoiView.call(this);
}
async searchViewHandler({ searchRes }) {
this.overviewInitPromise && (await this.overviewInitPromise);
this.nprobe = searchRes.csResIds.length;
this.k = searchRes.fsResIds.length;
this.colorScheme = d3
Expand All @@ -98,7 +100,7 @@ export default class IvfflatView extends BaseView {
})
.then(() => {});
await this.searchViewInitPromise;
console.log('searchViewHandler finished');
console.log('searchView Layout finished');
}
renderSearchView() {
this.renderCoarseSearch();
Expand Down
Loading

0 comments on commit 12afe2c

Please sign in to comment.