@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.68 kB
JavaScript
import{isNone as e}from"../../../../core/maybe.js";import{Vertex as t,Edge as i}from"../EditGeometry.js";class r{constructor(e,t,i){this._editGeometry=e,this._edge=t,this._t=i,this.createdVertex=null,this._left=null,this._right=null}apply(){let r="redo";const s=this._edge,d=s.component,h=s.leftVertex,g=s.rightVertex;d.edges.splice(d.edges.indexOf(s),1),e(this.createdVertex)&&(r="apply",this.createdVertex=new t(s.component)),d.vertices.push(this.createdVertex),this.createdVertex.pos=this._editGeometry.coordinateHelper.lerp(s.leftVertex.pos,s.rightVertex.pos,this._t,this._editGeometry.coordinateHelper.createVector()),e(this._left)&&(this._left=new i(d,h,this.createdVertex)),this._left.leftVertex.leftEdge?d.edges.push(this._left):d.edges.unshift(this._left),h.rightEdge=this._left,e(this._right)&&(this._right=new i(d,this.createdVertex,g)),d.edges.push(this._right),g.leftEdge=this._right,d.updateVertexIndex(this.createdVertex,h.index+1),this._editGeometry.notifyChanges({operation:r,addedVertices:[this.createdVertex]})}undo(){if(e(this.createdVertex)||e(this._left)||e(this._right))return null;const t=this._edge,i=t.component,r=this.createdVertex.leftEdge,s=this.createdVertex.rightEdge,d=r?.leftVertex,h=s?.rightVertex;i.vertices.splice(i.vertices.indexOf(this.createdVertex),1),i.edges.splice(i.edges.indexOf(this._left),1),i.edges.splice(i.edges.indexOf(this._right),1),this._edge.leftVertex.leftEdge?i.edges.push(this._edge):i.edges.unshift(this._edge),d&&(d.rightEdge=t),h&&(h.leftEdge=t),d&&i.updateVertexIndex(d,d.index),this._editGeometry.notifyChanges({operation:"undo",removedVertices:[this.createdVertex]})}accumulate(){return!1}}export{r as SplitEdge};