forked from enviPath/enviPy
Current Dev State
This commit is contained in:
83
static/js/ketcher2/script/editor/tool/helper/lasso.js
Normal file
83
static/js/ketcher2/script/editor/tool/helper/lasso.js
Normal file
@ -0,0 +1,83 @@
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
var locate = require('./locate');
|
||||
var draw = require('../../../render/draw');
|
||||
var scale = require('../../../util/scale');
|
||||
|
||||
function LassoHelper(mode, editor, fragment) {
|
||||
this.mode = mode;
|
||||
this.fragment = fragment;
|
||||
this.editor = editor;
|
||||
}
|
||||
LassoHelper.prototype.getSelection = function () {
|
||||
var rnd = this.editor.render;
|
||||
if (this.mode == 0)
|
||||
return locate.inPolygon(rnd.ctab, this.points);
|
||||
else if (this.mode == 1)
|
||||
return locate.inRectangle(rnd.ctab, this.points[0], this.points[1]);
|
||||
else
|
||||
throw new Error('Selector mode unknown'); // eslint-disable-line no-else-return
|
||||
};
|
||||
|
||||
LassoHelper.prototype.begin = function (event) {
|
||||
var rnd = this.editor.render;
|
||||
this.points = [rnd.page2obj(event)];
|
||||
if (this.mode == 1)
|
||||
this.points.push(this.points[0]);
|
||||
};
|
||||
|
||||
LassoHelper.prototype.running = function () {
|
||||
return !!this.points;
|
||||
};
|
||||
|
||||
LassoHelper.prototype.addPoint = function (event) {
|
||||
if (this.points) {
|
||||
var rnd = this.editor.render;
|
||||
if (this.mode == 0)
|
||||
this.points.push(rnd.page2obj(event));
|
||||
else if (this.mode == 1)
|
||||
this.points = [this.points[0], rnd.page2obj(event)];
|
||||
this.update();
|
||||
return this.getSelection();
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
LassoHelper.prototype.update = function () {
|
||||
if (this.selection) {
|
||||
this.selection.remove();
|
||||
this.selection = null;
|
||||
}
|
||||
if (this.points && this.points.length > 1) {
|
||||
var rnd = this.editor.render;
|
||||
var dp = this.points.map(function (p) {
|
||||
return scale.obj2scaled(p, rnd.options).add(rnd.options.offset);
|
||||
});
|
||||
this.selection = this.mode == 0 ?
|
||||
draw.selectionPolygon(rnd.paper, dp, rnd.options) :
|
||||
draw.selectionRectangle(rnd.paper, dp[0], dp[1], rnd.options);
|
||||
}
|
||||
};
|
||||
|
||||
LassoHelper.prototype.end = function () {
|
||||
var ret = this.getSelection();
|
||||
this.points = null;
|
||||
this.update(null);
|
||||
return ret;
|
||||
};
|
||||
|
||||
module.exports = LassoHelper;
|
||||
Reference in New Issue
Block a user