Added multi/drag/copy
This commit is contained in:
parent
75386fc2af
commit
36cc25edb8
@ -5,8 +5,8 @@ DOTGRID.Cursor = function () {
|
|||||||
this.translation = null
|
this.translation = null
|
||||||
this.operation = null
|
this.operation = null
|
||||||
|
|
||||||
this.translate = function (from = null, to = null, multi = false) {
|
this.translate = function (from = null, to = null, multi = false, copy = false) {
|
||||||
if ((from || to) && this.translation == null) { this.translation = { multi: multi }; console.log('Begin translation') }
|
if ((from || to) && this.translation == null) { this.translation = { multi: multi, copy: copy }; console.log('Begin translation', multi, copy) }
|
||||||
|
|
||||||
if (from) { this.translation.from = from }
|
if (from) { this.translation.from = from }
|
||||||
if (to) { this.translation.to = to }
|
if (to) { this.translation.to = to }
|
||||||
@ -21,7 +21,7 @@ DOTGRID.Cursor = function () {
|
|||||||
|
|
||||||
// Translation
|
// Translation
|
||||||
if (DOTGRID.tool.vertex_at(this.pos)) {
|
if (DOTGRID.tool.vertex_at(this.pos)) {
|
||||||
this.translate(this.pos, this.pos, e.shiftKey)
|
this.translate(this.pos, this.pos, e.shiftKey, e.ctrlKey || e.metaKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
DOTGRID.guide.update()
|
DOTGRID.guide.update()
|
||||||
@ -55,7 +55,7 @@ DOTGRID.Cursor = function () {
|
|||||||
if (e.altKey) { DOTGRID.tool.remove_segments_at(this.pos); this.translate(); return }
|
if (e.altKey) { DOTGRID.tool.remove_segments_at(this.pos); this.translate(); return }
|
||||||
|
|
||||||
if (this.translation && !is_equal(this.translation.from, this.translation.to)) {
|
if (this.translation && !is_equal(this.translation.from, this.translation.to)) {
|
||||||
if (this.translation.multi) { DOTGRID.tool.translate_multi(this.translation.from, this.translation.to) } else { DOTGRID.tool.translate(this.translation.from, this.translation.to) }
|
if (this.translation.copy) { DOTGRID.tool.translate_copy(this.translation.from, this.translation.to) } else if (this.translation.multi) { DOTGRID.tool.translate_multi(this.translation.from, this.translation.to) } else { DOTGRID.tool.translate(this.translation.from, this.translation.to) }
|
||||||
} else if (e.target.id == 'guide') {
|
} else if (e.target.id == 'guide') {
|
||||||
DOTGRID.tool.add_vertex({ x: this.pos.x, y: this.pos.y })
|
DOTGRID.tool.add_vertex({ x: this.pos.x, y: this.pos.y })
|
||||||
DOTGRID.picker.stop()
|
DOTGRID.picker.stop()
|
||||||
|
@ -109,6 +109,20 @@ DOTGRID.Tool = function () {
|
|||||||
DOTGRID.interface.update(true)
|
DOTGRID.interface.update(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.select_segment_at = function (pos, source = this.layer()) {
|
||||||
|
let target_segment = null
|
||||||
|
for (const segment_id in source) {
|
||||||
|
let segment = source[segment_id]
|
||||||
|
for (const vertex_id in segment.vertices) {
|
||||||
|
let vertex = segment.vertices[vertex_id]
|
||||||
|
if (vertex.x == Math.abs(pos.x) && vertex.y == Math.abs(pos.y)) {
|
||||||
|
return segment
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
this.add_vertex = function (pos) {
|
this.add_vertex = function (pos) {
|
||||||
pos = { x: Math.abs(pos.x), y: Math.abs(pos.y) }
|
pos = { x: Math.abs(pos.x), y: Math.abs(pos.y) }
|
||||||
this.vertices.push(pos)
|
this.vertices.push(pos)
|
||||||
@ -245,15 +259,33 @@ DOTGRID.Tool = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.translate_multi = function (a, b) {
|
this.translate_multi = function (a, b) {
|
||||||
let offset = { x: a.x - b.x, y: a.y - b.y }
|
const offset = { x: a.x - b.x, y: a.y - b.y }
|
||||||
|
const segment = this.select_segment_at(a)
|
||||||
|
|
||||||
for (const segment_id in this.layer()) {
|
if (!segment) { return }
|
||||||
let segment = this.layer()[segment_id]
|
|
||||||
for (const vertex_id in segment.vertices) {
|
for (const vertex_id in segment.vertices) {
|
||||||
let vertex = segment.vertices[vertex_id]
|
let vertex = segment.vertices[vertex_id]
|
||||||
segment.vertices[vertex_id] = { x: vertex.x - offset.x, y: vertex.y - offset.y }
|
segment.vertices[vertex_id] = { x: vertex.x - offset.x, y: vertex.y - offset.y }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DOTGRID.history.push(this.layers)
|
||||||
|
this.clear()
|
||||||
|
DOTGRID.guide.update()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.translate_copy = function (a, b) {
|
||||||
|
const offset = { x: a.x - b.x, y: a.y - b.y }
|
||||||
|
const segment = this.select_segment_at(a, copy(this.layer()))
|
||||||
|
|
||||||
|
if (!segment) { return }
|
||||||
|
|
||||||
|
for (const vertex_id in segment.vertices) {
|
||||||
|
let vertex = segment.vertices[vertex_id]
|
||||||
|
segment.vertices[vertex_id] = { x: vertex.x - offset.x, y: vertex.y - offset.y }
|
||||||
|
}
|
||||||
|
this.layer().push(segment)
|
||||||
|
|
||||||
DOTGRID.history.push(this.layers)
|
DOTGRID.history.push(this.layers)
|
||||||
this.clear()
|
this.clear()
|
||||||
DOTGRID.guide.update()
|
DOTGRID.guide.update()
|
||||||
|
Loading…
Reference in New Issue
Block a user