summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine/shapes/polyline.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/engine/shapes/polyline.js')
-rw-r--r--public/assets/javascripts/rectangles/engine/shapes/polyline.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/public/assets/javascripts/rectangles/engine/shapes/polyline.js b/public/assets/javascripts/rectangles/engine/shapes/polyline.js
index 65e22ad..579d0ea 100644
--- a/public/assets/javascripts/rectangles/engine/shapes/polyline.js
+++ b/public/assets/javascripts/rectangles/engine/shapes/polyline.js
@@ -46,6 +46,32 @@ var Polyline = Fiber.extend(function(base){
var clone = this.instantiate()
clone.points = this.points.concat()
}
+ exports.getSegment = function(segment){
+ var seg = [
+ this.points[segment.head],
+ this.points[segment.tail],
+ ]
+ if (segment.head == 0) {
+ seg.push( this.lastPoint() )
+ }
+ else if (segment.tail == this.points.length-1) {
+ seg.push( this.firstPoint() )
+ }
+ return seg
+ }
+ exports.cloneSegment = function(segment){
+ return this.getSegment(segment).map(function(point){ return point.clone() })
+ }
+ exports.translateSegment = function(src, dest, dx, dy){
+ dest[0].a = src[0].a + dx
+ dest[0].b = src[0].b + dy
+ dest[1].a = src[1].a + dx
+ dest[1].b = src[1].b + dy
+ if (src.length == 3) {
+ dest[2].a = src[2].a + dx
+ dest[2].b = src[2].b + dy
+ }
+ }
exports.hasPointNear = function(p){
var point
for (var i = 0; i < this.points.length; i++){
@@ -156,10 +182,12 @@ var Polyline = Fiber.extend(function(base){
exports.serialize = function(){
return {
type: this.type(),
+ closed: this.closed,
points: this.points.map(function(point){ return [point.a, point.b] }),
}
}
exports.deserialize = function(data){
+ this.closed = data.closed || false
this.points = (data.points || data).map(function(point){ return new vec2(point[0], point[1]) })
}
exports.reset = function(){