You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3 lines
104 KiB

/*! Copyright (C) 1998-2019 by Northwoods Software Corporation. All Rights Reserved. */
window.gfp=function(t){var e={};function a(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,a),o.l=!0,o.exports}return a.m=t,a.c=e,a.d=function(t,e,n){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)a.d(n,o,function(e){return t[e]}.bind(null,o));return n},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=3)}([function(t,e){t.exports=window.go},function(t,e,a){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)});Object.defineProperty(e,"__esModule",{value:!0});var i=a(0),r=function(t){function e(){var e=t.call(this)||this;return e._buildingWall=null,e._isBuildingDivider=!1,e.name="WallBuilding",e._startPoint=null,e._endPoint=null,e._wallReshapingTool=null,e._isBuildingDivider=!1,e}return o(e,t),Object.defineProperty(e.prototype,"startPoint",{get:function(){return this._startPoint},set:function(t){this._startPoint=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"endPoint",{get:function(){return this._endPoint},set:function(t){this._endPoint=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"wallReshapingTool",{get:function(){return this._wallReshapingTool},set:function(t){this._wallReshapingTool=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"buildingWall",{get:function(){return this._buildingWall},set:function(t){this._buildingWall=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isBuildingDivider",{get:function(){return this._isBuildingDivider},set:function(t){this._isBuildingDivider=t},enumerable:!0,configurable:!0}),e.prototype.doActivate=function(){this.endPoint=null,this.startTransaction(this.name),this.diagram.isMouseCaptured=!0;var t=this,e=t.diagram,a=t.diagram.lastInput.documentPoint,n=!1,o=e.findNodesByExample({category:"WallGroup"});o.iterator.each(function(o){if(e.isPointInWall(o,a)&&null===t.buildingWall){var i=a.projectOntoLineSegmentPoint(o.data.startpoint,o.data.endpoint);a=i,n=!0}}),o.iterator.each(function(t){var e=t.data.startpoint,o=t.data.endpoint;Math.sqrt(e.distanceSquaredPoint(a))<15&&(a=e,n=!0),Math.sqrt(o.distanceSquaredPoint(a))<15&&(a=o,n=!0)});var r=e.model.modelData.gridSize;t.diagram.toolManager.draggingTool.isGridSnapEnabled&&!n||(r=1e-4);var l=r*Math.round(a.x/r),s=r*Math.round(a.y/r);a=new i.Point(l,s),this.startPoint=a,this.wallReshapingTool=e.toolManager.mouseDownTools.elt(3),this.isActive=!0},e.prototype.doMouseDown=function(){var t=this.diagram;this.diagram.currentCursor="crosshair";var e={key:"wall",category:"WallGroup",caption:this.isBuildingDivider?"Divider":"Wall",type:this.isBuildingDivider?"Divider":"Wall",startpoint:this.startPoint,endpoint:this.startPoint,smpt1:this.startPoint,smpt2:this.startPoint,empt1:this.startPoint,empt2:this.startPoint,thickness:this._isBuildingDivider?.005:parseFloat(t.model.modelData.wallThickness),color:"lightgray",isGroup:!0,notes:"",isDivider:this.isBuildingDivider};this.diagram.model.addNodeData(e);var a=t.findPartForKey(e.key);this.buildingWall=a,t.updateWall(a);var n=t.findPartForData(e);null!==n&&(this.transactionResult=this.name,t.raiseDiagramEvent("PartCreated",n),null!==this.wallReshapingTool&&(this.wallReshapingTool.isEnabled=!0,t.select(n),this.wallReshapingTool.isBuilding=!0,this.wallReshapingTool.adornedShape=n.findObject("SHAPE"),this.wallReshapingTool.doActivate()))},e.prototype.doKeyDown=function(){var t=this.diagram;if("Esc"===t.lastInput.key){var e=t.selection.first();t.remove(e),t.pointNodes.iterator.each(function(e){t.remove(e)}),t.dimensionLinks.iterator.each(function(e){t.remove(e)}),t.pointNodes.clear(),t.dimensionLinks.clear(),this.doDeactivate()}i.Tool.prototype.doKeyDown.call(this)},e.prototype.doMouseMove=function(){null!==this.wallReshapingTool&&(this.diagram.currentCursor="crosshair",this.wallReshapingTool.doMouseMove())},e.prototype.doDeactivate=function(){var t=this.diagram;this.buildingWall=null,this.diagram.currentCursor="",this.diagram.isMouseCaptured=!1,null!==this.wallReshapingTool&&(this.wallReshapingTool.isEnabled=!1,this.wallReshapingTool.adornedShape=null,this.wallReshapingTool.doMouseUp(),this.wallReshapingTool.doDeactivate(),this.wallReshapingTool.isBuilding=!1),t.updateWallDimensions(),this.stopTransaction(),this.isActive=!1},e}(i.Tool);e.WallBuildingTool=r},function(t,e,a){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)});Object.defineProperty(e,"__esModule",{value:!0});var i=a(0),r=function(t){function e(){var e=t.call(this)||this,a=new i.Shape;return a.figure="Diamond",a.desiredSize=new i.Size(12,12),a.fill="lightblue",a.stroke="dodgerblue",a.cursor="move",e._handleArchetype=a,e._handle=null,e._adornedShape=null,e._reshapeObjectName="SHAPE",e._angle=0,e._length=0,e._isBuilding=!1,e._isIntersecting=!1,e._joinedWalls=new i.Set,e._returnPoint=null,e._returnData=null,e._joinedWalls=new i.Set,e._wallIntersecting=null,e}return o(e,t),Object.defineProperty(e.prototype,"handleArchetype",{get:function(){return this._handleArchetype},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"handle",{get:function(){return this._handle},set:function(t){this._handle=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"adornedShape",{get:function(){return this._adornedShape},set:function(t){this._adornedShape=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"angle",{get:function(){return this._angle},set:function(t){this._angle=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._length},set:function(t){this._length=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"reshapeObjectName",{get:function(){return this._reshapeObjectName},set:function(t){this._reshapeObjectName=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isBuilding",{get:function(){return this._isBuilding},set:function(t){this._isBuilding=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"returnData",{get:function(){return this._returnData},set:function(t){this._returnData=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"returnPoint",{get:function(){return this._returnPoint},set:function(t){this._returnPoint=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isIntersecting",{get:function(){return this._isIntersecting},set:function(t){this._isIntersecting=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"wallIntersecting",{get:function(){return this._wallIntersecting},set:function(t){this._wallIntersecting=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"joinedWalls",{get:function(){return this._joinedWalls},set:function(t){this._joinedWalls=t},enumerable:!0,configurable:!0}),e.prototype.updateAdornments=function(t){if(!(null===t||t instanceof i.Link)){if(t.isSelected&&!this.diagram.isReadOnly){var e=t.findObject(this.reshapeObjectName);if(null!==e&&null!==e.part&&"WallGroup"===e.part.data.category){var a=e,n=t.findAdornment(this.name);if(null===n&&(n=this.makeAdornment(a)),null!==n&&null!==a.part&&null!=a.geometry){var o=a.geometry.bounds,r=a.part.actualBounds,l=n.findObject("BODY");if(null===l)return;return l.desiredSize=o.size,n.elements.each(function(e){if(void 0!==e.name){var a=0,n=0;switch(e.name){case"sPt":a=t.data.startpoint.x-r.x,n=t.data.startpoint.y-r.y;break;case"ePt":a=t.data.endpoint.x-r.x,n=t.data.endpoint.y-r.y}var l=Math.min((a-o.x)/o.width,1),s=Math.min((n-o.y)/o.height,1);l<0&&(l=0),s<0&&(s=0),l>1&&(l=1),s>1&&(s=1),isNaN(l)&&(l=0),isNaN(s)&&(s=0),e.alignment=new i.Spot(Math.max(0,l),Math.max(0,s))}}),t.addAdornment(this.name,n),void(n.location=a.getDocumentPoint(i.Spot.Center))}}}t.removeAdornment(this.name)}},e.prototype.canStart=function(){if(!this.isEnabled)return!1;var t=this.diagram;return null!==t&&!t.isReadOnly&&(!!t.allowReshape&&(!!t.lastInput.left&&(null!==this.findToolHandleAt(t.firstInput.documentPoint,this.name)||this.isBuilding)))},e.prototype.doActivate=function(){var t=this.diagram;if(null!==t){if(this.isBuilding){if(null!==this.adornedShape&&null!==this.adornedShape.part){var e=this.adornedShape.part;this.handle=this.findToolHandleAt(e.data.endpoint,this.name),this.returnPoint=e.data.startpoint}}else{if(this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name),null===this.handle)return;var a=this.handle.part.adornedObject;e=a.part;if(!a)return;this.adornedShape=a,this.returnPoint="sPt"===this.handle.name?e.data.startpoint:e.data.endpoint;var n=e.memberParts;if(0!==n.count){var o=new i.Map;n.iterator.each(function(t){o.add(t.data.key,t.location)}),this.returnData=o}}t.isMouseCaptured=!0,this.startTransaction(this.name),this.isActive=!0}},e.prototype.doMouseMove=function(){var t=this.diagram,e=this;if(null!==e.handle){var a=e.handle.part.adornedPart,n=t.lastInput.documentPoint;if(e.isActive&&null!==t){if(t.lastInput.shift){var o="sPt"===e.handle.name?a.data.endpoint:a.data.startpoint,r=o.directionPoint(n),l=Math.sqrt(o.distanceSquaredPoint(n));r=45*Math.round(r/45);var s=new i.Point(o.x+l,o.y),d=o.x,u=o.y;s=(s=(s=s.offset(-d,-u)).rotate(r)).offset(d,u),n=s}t.findNodesByExample({category:"WallGroup"}).iterator.each(function(o){if(o.data.key!==a.data.key){var i=o.data.startpoint,r=o.data.endpoint;t.isPointInWall(o,n)&&(n=n.projectOntoLineSegmentPoint(o.data.startpoint,o.data.endpoint),e.isIntersecting=!0),Math.sqrt(i.distanceSquaredPoint(n))<10?n=i:Math.sqrt(r.distanceSquaredPoint(n))<10&&(n=r)}});var p=e.getClosestIntersectingWall(n);if(null!==p&&null===e.wallIntersecting||null!==e.wallIntersecting&&void 0!==e.wallIntersecting&&null!==e.wallIntersecting.data&&e.performMiteringOnWall(e.wallIntersecting),null!=p){e.isIntersecting=!0,e.wallIntersecting=p,n=n.projectOntoLineSegmentPoint(p.data.startpoint,p.data.endpoint);var c=Math.sqrt(n.distanceSquaredPoint(p.data.startpoint)),g=Math.sqrt(n.distanceSquaredPoint(p.data.endpoint));c<25?n=p.data.startpoint:g<10&&(n=p.data.endpoint)}else e.isIntersecting=!1,null!==e.wallIntersecting&&void 0!==e.wallIntersecting&&null!==e.wallIntersecting.data&&null===t.getWallsIntersection(a,e.wallIntersecting)&&(e.wallIntersecting=null);e.calcAngleAndLengthFromHandle(n),e.reshape(n)}e.performMiteringOnWall(a),t.updateWallDimensions(),t.updateWallAngles()}},e.prototype.getClosestIntersectingWall=function(t){if(null===this.handle)return null;var e=this.handle.part.adornedPart,a="sPt"===this.handle.name?e.data.endpoint:e.data.startpoint,n={key:"wall",category:"WallGroup",caption:"Wall",type:"Wall",startpoint:a,smpt1:a,smpt2:a,endpoint:t,empt1:t,empt2:t,thickness:parseFloat(this.diagram.model.modelData.wallThickness),isGroup:!0,notes:""};this.diagram.model.addNodeData(n);var o=this.diagram.findPartForKey(n.key),i=this.diagram,r=this.diagram.findNodesByExample({category:"WallGroup"}),l=null,s=Number.MAX_VALUE;return r.iterator.each(function(t){if(t.data.key!==e.data.key&&t.data.key!==o.data.key){var n=i.getWallsIntersection(o,t),r=!1,d=parseFloat(Math.sqrt(t.data.startpoint.distanceSquaredPoint(a)).toFixed(2)),u=parseFloat(Math.sqrt(a.distanceSquaredPoint(t.data.endpoint)).toFixed(2)),p=parseFloat(Math.sqrt(t.data.startpoint.distanceSquaredPoint(t.data.endpoint)).toFixed(2));if(Math.abs(d+u-p)<=.1&&(r=!0),null!==n&&!r){var c=Math.sqrt(a.distanceSquaredPoint(n));c<s&&(s=c,l=t)}}}),i.remove(o),l},e.prototype.pointsApproximatelyEqual=function(t,e){var a=t.x,n=e.x,o=t.y,i=e.y,r=Math.abs(n-a);return Math.abs(i-o)<.05&&r<.05},e.prototype.performMitering=function(t,e){var a=this.diagram,n=t.data.startpoint,o=t.data.endpoint,r=e.data.startpoint,l=e.data.endpoint,s=t.data.thickness,d=e.data.thickness,u=Math.sqrt(n.distanceSquaredPoint(o)),p=Math.sqrt(r.distanceSquaredPoint(l)),c=a.getWallsIntersection(t,e);if(null!==c){var g=this.pointsApproximatelyEqual(n,c)?o:n,f=this.pointsApproximatelyEqual(r,c)?l:r,h=null,m=null;this.pointsApproximatelyEqual(n,c)||this.pointsApproximatelyEqual(o,c)?this.pointsApproximatelyEqual(r,c)||this.pointsApproximatelyEqual(l,c)||(h=e,m=t):(h=t,m=e),null!==h&&null!==m&&t.data.key===m.data.key&&(f=this.isClockwise(g,c,h.data.startpoint)?h.data.startpoint:h.data.endpoint),null!==h&&null!==m&&e.data.key===m.data.key&&(g=this.isClockwise(c,f,h.data.startpoint)?h.data.startpoint:h.data.endpoint);var y=c.directionPoint(g),v=c.directionPoint(f),P=Math.abs(y-v+360)%360;if(!(Math.abs(P-180)<.1)){P*=Math.PI/180;var w=Math.abs(d/(2*Math.sin(P))),x=Math.abs(s/(2*Math.sin(P))),b=Math.sqrt(g.distanceSquaredPoint(c)),k=Math.sqrt(c.distanceSquaredPoint(f)),S=(g.x-c.x)/b*w,A=(g.y-c.y)/b*w,M=(f.x-c.x)/k*x,W=(f.y-c.y)/k*x,T=new i.Point(c.x+S+M,c.y+A+W),N=new i.Point(c.x-S-M,c.y-A-W),O=Math.min(u,p);if(!(Math.sqrt(T.distanceSquaredPoint(c))>O)){var j=this.isClockwise(c,g,T)?N:T;if(!isNaN(j.x)&&!isNaN(j.y)){if(this.pointsApproximatelyEqual(n,c)||this.pointsApproximatelyEqual(o,c)){var D=null;this.pointsApproximatelyEqual(g,n)?D=this.isClockwise(g,c,j)?"empt1":"empt2":this.pointsApproximatelyEqual(g,o)&&(D=this.isClockwise(g,c,j)?"smpt2":"smpt1"),null!==D&&(a.model.setDataProperty(t.data,D,j),a.updateWall(t))}if(this.pointsApproximatelyEqual(r,c)||this.pointsApproximatelyEqual(l,c)){D=null;this.pointsApproximatelyEqual(f,r)?D=this.isClockwise(f,c,j)?"empt1":"empt2":this.pointsApproximatelyEqual(f,l)&&(D=this.isClockwise(f,c,j)?"smpt2":"smpt1"),null!==D&&(a.model.setDataProperty(e.data,D,j),a.updateWall(e))}}}}}},e.prototype.getAllWallIntersectionPoints=function(){var t=this,e=t.diagram,a=e.findNodesByExample({category:"WallGroup"}),n=new i.Set;return a.iterator.each(function(a){e.findNodesByExample({category:"WallGroup"}).iterator.each(function(o){if(o.data.key!==a.data.key){var r=e.getWallsIntersection(a,o),l=!0;null!==r&&(n.iterator.each(function(e){var a=i.Point.parse(e);t.pointsApproximatelyEqual(a,r)&&(l=!1)}),l&&n.add(i.Point.stringify(r)))}})}),n},e.prototype.getAllWallsAtIntersection=function(t,e){null==e&&(e=!0);var a=this,n=a.diagram,o=new i.List;return null===t?o:(n.findObjectsNear(t,1,function(t){return null!==t.part?t.part:null},function(n){if(!(n instanceof i.Group&&"WallGroup"===n.category)||!e&&n.data.isDivider||o.contains(n))return!1;var r=n.data.startpoint,l=n.data.endpoint;return a.isPointOnSegment(r,l,t)},!0,o),o)},e.prototype.doWallsShareAnEndpoint=function(t,e){var a=t.data.startpoint,n=t.data.endpoint,o=e.data.startpoint,i=e.data.endpoint;return!!(this.pointsApproximatelyEqual(a,o)||this.pointsApproximatelyEqual(a,i)||this.pointsApproximatelyEqual(n,o)||this.pointsApproximatelyEqual(n,i))},e.prototype.maybeSplitWall=function(){var t=this;if(null!==t.handle){var e=t.handle.part.adornedPart,a="sPt"===t.handle.name?e.data.startpoint:e.data.endpoint,n=t.joinedWalls,o=t.getAllWallsAtIntersection(a);if(o.remove(e),n.iterator.each(function(t){o.remove(t)}),1===o.count)null!==(i=o.first())&&(t.doWallsShareAnEndpoint(e,i)||t.maybePerformWallSplit(i,a));if(t.isBuilding){var i,r=a===e.data.startpoint?e.data.endpoint:e.data.startpoint,l=t.getAllWallsAtIntersection(r);if(l.remove(e),n.iterator.each(function(t){o.remove(t)}),1===l.count)null!==(i=l.first())&&(t.doWallsShareAnEndpoint(e,i)||t.maybePerformWallSplit(i,r))}null!==n&&n.iterator.each(function(e){t.splitNewWall(e)})}},e.prototype.splitNewWall=function(t){var e=this,a=this.diagram,n=a.findNodesByExample({category:"WallGroup"}),o=new i.Set;n.iterator.each(function(e){var n=a.getWallsIntersection(t,e);null!==n&&o.add(n)}),o.iterator.each(function(t){e.getAllWallsAtIntersection(t).iterator.each(function(a){var n=a.data.startpoint,o=a.data.endpoint;e.pointsApproximatelyEqual(n,t)||e.pointsApproximatelyEqual(o,t)||e.maybePerformWallSplit(a,t)})})},e.prototype.maybePerformWallSplit=function(t,e){var a=this,n=a.diagram,o=t.data.startpoint,r=t.data.endpoint,l=t.data.isDivider?"Divider":"Wall",s={key:"wall",category:"WallGroup",caption:l,type:l,color:t.data.color,startpoint:o,endpoint:e,smpt1:o,smpt2:o,empt1:e,empt2:e,thickness:t.data.thickness,isGroup:!0,notes:"",isDivider:t.data.isDivider},d={key:"wall",category:"WallGroup",caption:l,type:l,color:t.data.color,startpoint:e,endpoint:r,smpt1:e,smpt2:e,empt1:r,empt2:r,thickness:t.data.thickness,isGroup:!0,notes:"",isDivider:t.data.isDivider},u=Math.sqrt(s.startpoint.distanceSquaredPoint(s.endpoint)),p=Math.sqrt(d.startpoint.distanceSquaredPoint(d.endpoint)),c=n.findNodesByExample({category:"WallGroup"}),g=!1;if(c.iterator.each(function(t){var n=t.data.startpoint,i=t.data.endpoint;(a.pointsApproximatelyEqual(o,n)&&a.pointsApproximatelyEqual(e,i)||a.pointsApproximatelyEqual(o,i)&&a.pointsApproximatelyEqual(e,n))&&(g=!0),(a.pointsApproximatelyEqual(e,n)&&a.pointsApproximatelyEqual(r,i)||a.pointsApproximatelyEqual(e,i)&&a.pointsApproximatelyEqual(r,n))&&(g=!0)}),u>1&&p>1&&!g){n.model.addNodeData(s),n.model.addNodeData(d);var f=n.findNodeForData(s),h=n.findNodeForData(d);if(a.premiterWall(f),a.premiterWall(h),a.performMiteringAtPoint(e,!1),null!==a.handle){var m=n.findNodesByExample({category:"RoomNode"}),y=a.handle.part.adornedPart;m.iterator.each(function(o){for(var r=o.data.boundaryWalls,l=function(l){var s=r[l];if(s[0]===t.data.key){var d=!1,u=a.pointsApproximatelyEqual(y.data.startpoint,e)?y.data.endpoint:y.data.startpoint;if(a.getAllWallsAtIntersection(u).iterator.each(function(t){for(var e=0;e<r.length;e++){var a=r[e][0];t.data.key===a&&t.data.key!==y.data.key&&(d=!0)}}),d){var p=!1,c=a.pointsApproximatelyEqual(f.data.startpoint,e)?f.data.endpoint:f.data.startpoint,g=a.getAllWallsAtIntersection(c);g.remove(t),g.iterator.each(function(t){for(var e=function(e){var o=r[e][0];if(t.data.key===o&&f.data.key!==t.data.key){var i=n.findNodeForKey(o),l=a.pointsApproximatelyEqual(i.data.startpoint,c)?i.data.endpoint:i.data.startpoint;a.getAllWallsAtIntersection(l).iterator.each(function(t){for(var e=0;e<r.length;e++){var a=r[e][0];a===t.data.key&&a!==i.data.key&&(p=!0)}})}},o=0;o<r.length;o++)e(o)});var m=p?f:h,v=a.getUpdatedEntry(s,m);n.startTransaction(),(w=r.slice())[l]=v,n.model.setDataProperty(o.data,"boundaryWalls",w),n.commitTransaction()}else{var P=new i.List;P.add(y),P.add(f),P.add(h),P=n.sortWallsClockwiseWithSetStartWall(P,y);var w,x=a.getUpdatedEntry(s,P.toArray()[1]),b=a.getUpdatedEntry(s,P.toArray()[2]);n.startTransaction(),(w=r.slice()).splice(l,1,b),w.splice(l+1,0,x),n.model.setDataProperty(o.data,"boundaryWalls",w),n.commitTransaction()}}},s=0;s<r.length;s++)l(s)})}var v=n.findNodesByExample({group:t.data.key}),P=new i.Set;P.add(f),P.add(h),a.maintainWallParts(v,P),n.remove(t),a.premiterWall(f),a.premiterWall(h);var w=a.pointsApproximatelyEqual(f.data.startpoint,e)?f.data.endpoint:f.data.startpoint,x=a.pointsApproximatelyEqual(h.data.startpoint,e)?h.data.endpoint:h.data.startpoint;a.performMiteringAtPoint(e,!1),a.performMiteringAtPoint(w,!1),a.performMiteringAtPoint(x,!1)}},e.prototype.splitAllWalls=function(){var t=this;t.getAllWallIntersectionPoints().iterator.each(function(e){var a=i.Point.parse(e);t.getAllWallsAtIntersection(a).iterator.each(function(e){var n=e.data.startpoint,o=e.data.endpoint;t.pointsApproximatelyEqual(n,a)||t.pointsApproximatelyEqual(o,a)||t.maybePerformWallSplit(e,a)})})},e.prototype.areWallsParallel=function(t,e){this.diagram;var a=t.data.startpoint,n=t.data.endpoint,o=e.data.startpoint,i=e.data.endpoint,r=!1,l=+a.directionPoint(n),s=+o.directionPoint(i);return(Math.abs(l-s)<1||Math.abs(l-s)>179&&Math.abs(l-s)<181)&&(r=!0),r},e.prototype.isWallColinear=function(t,e){var a=this;this.diagram;if(t.data.isDivider!==e.data.isDivider)return!1;var n=t.data.startpoint,o=t.data.endpoint,i=e.data.startpoint,r=e.data.endpoint,l=!1;if(a.areWallsParallel(t,e)){var s=null;if(a.pointsApproximatelyEqual(n,i)||a.pointsApproximatelyEqual(n,r)?s=n:(a.pointsApproximatelyEqual(o,i)||a.pointsApproximatelyEqual(o,r))&&(s=o),null!==s){var d=a.getAllWallsAtIntersection(s),u=!1;d.iterator.each(function(e){a.areWallsParallel(e,t)||(u=!0)}),u||(l=!0)}}return l},e.prototype.findAllColinearWalls=function(t,e){null==e&&(e=new i.Set),e.add(t);var a=this;return a.diagram.findNodesByExample({category:"WallGroup"}).iterator.each(function(n){a.isWallColinear(t,n)&&void 0!==e&&!e.contains(n)&&(e.add(n),a.findAllColinearWalls(n,e))}),e},e.prototype.joinColinearWalls=function(){if(null!==this.handle){var t=this.handle.part.adornedPart,e=this.findAllColinearWalls(t),a=this.performColinearWallJoining(e,t);null!==a&&this.joinedWalls.add(a);var n=this.getAllWallsAtIntersection(this.returnPoint);if(2===n.count){var o=n.toArray(),r=o[0],l=o[1];if(this.isWallColinear(r,l)){var s=new i.Set;s.add(r),s.add(l);var d=this.performColinearWallJoining(s,r);null!==d&&this.joinedWalls.add(d)}}}},e.prototype.performColinearWallJoining=function(t,e){var a=this,n=a.diagram,o=new i.Set,r=t.first();if(null===r)return null;void 0===e&&(e=r);r.data.category;if(t.iterator.each(function(t){t.data.category}),t.count>1){var l=null,s=null,d=0,u=t.copy(),p=new i.Set;t.iterator.each(function(t){var e=n.findNodesByExample({group:t.data.key});p.addAll(e),u.iterator.each(function(e){for(var a=[t.data.startpoint,t.data.endpoint],n=[e.data.startpoint,e.data.endpoint],o=0;o<a.length;o++)for(var i=a[o],r=0;r<n.length;r++){var u=n[r],p=Math.sqrt(i.distanceSquaredPoint(u));p>d&&(d=p,l=i,s=u)}}),o.add(t)});var c={key:"wall",category:"WallGroup",caption:"Wall",type:"Wall",color:e.data.color,startpoint:l,endpoint:s,smpt1:l,smpt2:l,empt1:s,empt2:s,thickness:e.data.thickness,isGroup:!0,notes:""};n.model.addNodeData(c);var g=n.findNodeForData(c);n.findNodesByExample({category:"RoomNode"}).iterator.each(function(e){for(var o=e.data.boundaryWalls,i=0;i<o.length;i++){var r=o[i],l=r[0],s=n.findNodeForKey(l);if(t.contains(s)){a.performMiteringOnWall(g);var d=a.getUpdatedEntry(r,g);n.startTransaction();var u=o.slice();u[i]=d,n.model.setDataProperty(e.data,"boundaryWalls",u),n.commitTransaction()}}});var f=new i.Set;return f.add(g),a.performMiteringOnWall(g),a.maintainWallParts(p,f),o.iterator.each(function(t){n.remove(t)}),a.performMiteringOnWall(g),g}return null},e.prototype.maintainWallParts=function(t,e){var a=this.diagram,n=[];t.iterator.each(function(t){var o=t.location;e.iterator.each(function(e){if(a.isPointInWall(e,o)){var i=a.findClosestLocOnWall(e,t);null!==i?(a.model.setDataProperty(t.data,"group",e.data.key),t.location=i.projectOntoLineSegmentPoint(e.data.startpoint,e.data.endpoint),"WindowNode"===t.category&&a.model.setDataProperty(t.data,"height",e.data.thickness),"DoorNode"===t.category&&a.model.setDataProperty(t.data,"doorOpeningHeight",e.data.thickness)):n.push(t)}})});for(var o=0;o<n.length;o++)a.remove(n[o])},e.prototype.getUpdatedEntry=function(t,e){var a=this.diagram,n=t[0],o=a.findNodeForKey(n),r=t[1],l=[e.data.key,null],s=o.data["smpt"+r],d=o.data["empt"+r];function u(t,e,a){var n=(e.y-t.y)/(e.x-t.x),o=t.y+(a-t.x)*n;return new i.Point(a,o)}var p=u(s,d,e.data.smpt1.x),c=u(s,d,e.data.smpt2.x),g=e.data.smpt1.distanceSquaredPoint(p),f=e.data.smpt2.distanceSquaredPoint(c);return l[1]=g<f?1:2,l},e.prototype.joinAllColinearWalls=function(){var t=this,e=t.diagram.findNodesByExample({category:"WallGroup"}),a=new i.Set;e.iterator.each(function(e){if(!a.contains(e)){a.add(e);var n=new i.Set;n.add(e),t.findAllColinearWalls(e,n),a.addAll(n),t.performColinearWallJoining(n,e)}}),t.premiterAllWalls()},e.prototype.translateAndRotatePoint=function(t,e,a){var n=t.copy(),o=t.copy();return o.offset(0,a),o.offset(-n.x,-n.y).rotate(e).offset(n.x,n.y),o},e.prototype.premiterWall=function(t,e){var a=this.diagram,n=t.data.startpoint.directionPoint(t.data.endpoint),o=t.data.thickness,i=t.data.startpoint,r=t.data.endpoint;switch(e){case"smpt1":var l=this.translateAndRotatePoint(i,n,o/2);a.model.setDataProperty(t.data,"smpt1",l);break;case"smpt2":var s=this.translateAndRotatePoint(i,n+180,o/2);a.model.setDataProperty(t.data,"smpt2",s);break;case"empt1":var d=this.translateAndRotatePoint(r,n,o/2);a.model.setDataProperty(t.data,"empt1",d);break;case"empt2":var u=this.translateAndRotatePoint(r,n+180,o/2);a.model.setDataProperty(t.data,"empt2",u);break;default:d=this.translateAndRotatePoint(r,n,o/2);a.model.setDataProperty(t.data,"empt1",d);u=this.translateAndRotatePoint(r,n+180,o/2);a.model.setDataProperty(t.data,"empt2",u);l=this.translateAndRotatePoint(i,n,o/2);a.model.setDataProperty(t.data,"smpt1",l);s=this.translateAndRotatePoint(i,n+180,o/2);a.model.setDataProperty(t.data,"smpt2",s)}a.updateWall(t)},e.prototype.premiterAllWalls=function(){var t=this;t.diagram.findNodesByExample({category:"WallGroup"}).iterator.each(function(e){t.premiterWall(e)})},e.prototype.performMiteringOnWall=function(t){var e=t.data.startpoint,a=t.data.endpoint;this.premiterWall(t),this.performMiteringAtPoint(e,!0),this.performMiteringAtPoint(a,!0)},e.prototype.performMiteringAtPoint=function(t,e){null==e&&(e=!0);var a=this,n=a.diagram,o=a.getAllWallsAtIntersection(t,!1);e&&o.iterator.each(function(e){if(a.pointsApproximatelyEqual(e.data.startpoint,t)||a.pointsApproximatelyEqual(e.data.endpoint,t)){var n=a.pointsApproximatelyEqual(e.data.startpoint,t)?"s":"e";a.premiterWall(e,n+"mpt1"),a.premiterWall(e,n+"mpt2")}}),o.sort(function(e,o){var i=n.getWallsIntersection(e,o);if(null===i)return 0;var r=e.data.startpoint,l=e.data.endpoint,s=o.data.startpoint,d=o.data.endpoint,u=a.pointsApproximatelyEqual(t,r)?l:r,p=a.pointsApproximatelyEqual(t,s)?d:s,c=i.directionPoint(u),g=i.directionPoint(p);return c>g?1:c<g?-1:0}),o.reverse();for(var i=o.toArray(),r=0;r<i.length;r++){var l=i[r],s=null;s=r+1===i.length?i[0]:i[r+1],a.performMitering(l,s)}},e.prototype.performAllMitering=function(){var t=this,e=t.diagram;t.premiterAllWalls(),t.getAllWallIntersectionPoints().iterator.each(function(a){var n=i.Point.parse(a),o=t.getAllWallsAtIntersection(n);o.sort(function(a,o){var i=e.getWallsIntersection(a,o);if(null===i)return 0;var r=a.data.startpoint,l=a.data.endpoint,s=o.data.startpoint,d=o.data.endpoint,u=t.pointsApproximatelyEqual(n,r)?l:r,p=t.pointsApproximatelyEqual(n,s)?d:s,c=i.directionPoint(u),g=i.directionPoint(p);return c>g?1:c<g?-1:0}),o.reverse();for(var r=o.toArray(),l=0;l<r.length;l++){var s=r[l],d=null;d=l+1===r.length?r[0]:r[l+1],t.performMitering(s,d)}})},e.prototype.isClockwise=function(t,e,a){return(e.x-t.x)*(a.y-t.y)-(e.y-t.y)*(a.x-t.x)>0},e.prototype.isPointOnSegment=function(t,e,a){var n=Math.sqrt(t.distanceSquaredPoint(a)),o=Math.sqrt(e.distanceSquaredPoint(a)),i=Math.sqrt(t.distanceSquaredPoint(e));return Math.abs(i-(n+o))<=.1},e.prototype.doMouseUp=function(){var t=this.diagram;if(null!==this.handle){this.doMouseMove();var e=this.handle.part.adornedPart;this.joinColinearWalls(),this.maybeSplitWall(),this.joinedWalls.clear();var a=new i.Set;a.add(e),t.updateAllRoomBoundaries(a),this.stopTool()}},e.prototype.doDeactivate=function(){var t=this.diagram,e=t;if(null!==this.handle){var a=this.handle.part.adornedPart,n=a.data.startpoint,o=a.data.endpoint;if(Math.sqrt(n.distanceSquared(o.x,o.y))<1){t.remove(a),a.memberParts.iterator.each(function(e){t.remove(e)});var i=[];e.pointNodes.iterator.each(function(t){-1!==t.data.key.indexOf(a.data.key)&&i.push(t)}),2===i.length&&(t.remove(i[0]),t.remove(i[1]))}"Esc"!==t.lastInput.key||this.isBuilding||(t.skipsUndoManager=!0,t.startTransaction("reset to old data"),"sPt"===this.handle.name?a.data.startpoint=this.returnPoint:a.data.endpoint=this.returnPoint,this.performAllMitering(),e.updateWall(a),this.returnData&&this.returnData.iterator.each(function(e){var n=e.key,o=e.value,i=t.findPartForKey(n);i.location=o,i.rotateObject.angle=a.rotateObject.angle}),t.commitTransaction("reset to old data"),t.skipsUndoManager=!1);var r=this.diagram.findNodesByExample({category:"GLPointNode"});t.removeParts(r,!0),e.updateWallDimensions(),t.commitTransaction(this.name),this.isActive=!1}},e.prototype.makeAdornment=function(t){var e=new i.Adornment;e.type=i.Panel.Spot,e.locationObjectName="BODY",e.locationSpot=i.Spot.Center;var a=new i.Shape;return a.name="BODY",a.fill=null,a.stroke=null,a.strokeWidth=0,e.add(a),(a=this.makeHandle()).name="sPt",e.add(a),(a=this.makeHandle()).name="ePt",e.add(a),e.category=this.name,e.adornedObject=t,e},e.prototype.makeHandle=function(){return this.handleArchetype.copy()},e.prototype.calcAngleAndLengthFromHandle=function(t){var e=this.handle;if(null!==e&&null!==this.adornedShape){var a=null,n=this.adornedShape.part;if(null!==n){for(var o,r=n.adornments.iterator;r.next();){var l=r.value;l.category===this.name&&(o=l)}if(void 0!==o){for(var s=o.elements;s.next();){var d=s.value;void 0!==d.name&&d.name!==e.name&&(a=d)}if(null!==a){var u=a.getDocumentPoint(i.Spot.Center),p=t.y-u.y,c=t.x-u.x,g=Math.atan2(p,c)*(180/Math.PI);g<0&&(g+=360),this.angle=g;var f=Math.sqrt(t.distanceSquared(u.x,u.y));this.length=f}}}}},e.prototype.snapPointToGrid=function(t){var e=this.diagram,a=e.toolManager.draggingTool.isGridSnapEnabled?e.model.modelData.gridSize:1,n=a*Math.round(t.x/a),o=a*Math.round(t.y/a);return new i.Point(n,o)},e.prototype.reshape=function(t){var e=this.diagram,a=this.adornedShape;if(null!==a&&null!==this.handle){var n=a.part;if(null!==n){if(this.diagram.lastInput.shift&&!this.isIntersecting){var o=void 0;o="sPt"===this.handle.name?n.data.endpoint:n.data.startpoint;var r=e.model.modelData.gridSize,l=e.model.modelData.gridSize;this.diagram.toolManager.draggingTool.isGridSnapEnabled||(l=1);var s=this.angle,d=this.length;if(s>67.5&&s<112.5){var u=o.y+d;u=l*Math.round(u/l),t=new i.Point(o.x,u)}if(s>112.5&&s<202.5){var p=o.x-d;p=l*Math.round(p/l),t=new i.Point(p,o.y)}if(s>247.5&&s<292.5){u=o.y-d;u=l*Math.round(u/l),t=new i.Point(o.x,u)}if(s>337.5||s<22.5){p=o.x+d;p=l*Math.round(p/l),t=new i.Point(p,o.y)}if(s>22.5&&s<67.5){p=Math.sin(.785)*d;p=l*Math.round(p/l)+o.x;u=Math.cos(.785)*d;u=l*Math.round(u/l)+o.y,t=new i.Point(p,u)}if(s>112.5&&s<157.5){p=Math.sin(.785)*d;p=o.x-l*Math.round(p/l);u=Math.cos(.785)*d;u=l*Math.round(u/l)+o.y,t=new i.Point(p,u)}if(s>202.5&&s<247.5){p=Math.sin(.785)*d;p=o.x-l*Math.round(p/l);u=Math.cos(.785)*d;u=o.y-l*Math.round(u/l),t=new i.Point(p,u)}if(s>292.5&&s<337.5){p=Math.sin(.785)*d;p=o.x+l*Math.round(p/l);u=Math.cos(.785)*d;u=o.y-l*Math.round(u/l),t=new i.Point(p,u)}l=r}t=!this.diagram.toolManager.draggingTool.isGridSnapEnabled||this.isIntersecting||this.diagram.lastInput.shift?new i.Point(t.x,t.y):this.snapPointToGrid(t);var c=this.handle.name;if(void 0!==c){var g="sPt"===c?n.data.endpoint:n.data.startpoint,f="sPt"===c?n.data.startpoint:n.data.endpoint;this.reshapeWall(n,g,f,t,e),this.updateAdornments(n),this.showMatches(),e.updateWallDimensions()}}}},e.prototype.showMatches=function(){var t=this,e=t.diagram;if(e.model.modelData.preferences.showWallGuidelines&&null!==t.adornedShape&&null!==t.handle){var a,n=t.adornedShape.part;a="sPt"===t.handle.name?n.data.startpoint:n.data.endpoint;var o=t.adornedShape.part,i=e.findNodesByExample({category:"GLPointNode"});e.removeParts(i,!0),this.diagram.findNodesByExample({category:"WallGroup"}).iterator.each(function(e){if(null!==o&&e.data.key!==o.data.key){e.findObject("SHAPE");var n=e.data.startpoint,i=e.data.endpoint;t.checkPtLinedUp(n,a.x,n.x,a),t.checkPtLinedUp(n,a.y,n.y,a),t.checkPtLinedUp(i,a.x,i.x,a),t.checkPtLinedUp(i,a.y,i.y,a)}})}},e.prototype.checkPtLinedUp=function(t,e,a,n){function o(){var t=i.GraphObject.make;return t(i.Node,"Spot",{locationSpot:i.Spot.TopLeft,locationObjectName:"SHAPE",desiredSize:new i.Size(1,1)},new i.Binding("location","loc",i.Point.parse).makeTwoWay(i.Point.stringify),t(i.Shape,{stroke:null,strokeWidth:1,name:"SHAPE",fill:"black"}))}var r,l=this.diagram;if(Math.abs(e-a)<2){var s={category:"GLPointNode",loc:i.Point.stringify(t),key:"glpt"},d={key:"movingPt",category:"GLPointNode",loc:i.Point.stringify(n)},u={key:"guideline",category:"guideLine",from:"movingPt",to:s.key,stroke:"blue"},p=o(),c=o(),g=(r=i.GraphObject.make)(i.Link,r(i.Shape,{stroke:"black",strokeWidth:2,name:"SHAPE"},new i.Binding("strokeWidth","width"),new i.Binding("stroke","stroke")));l.add(p),l.add(c),l.add(g),p.data=s,c.data=d,g.data=u,g.fromNode=p,g.toNode=c}},e.prototype.reshapeWall=function(t,e,a,n,o){var r=t.memberParts,l=[],s=t.data.startpoint.directionPoint(t.data.endpoint);r.iterator.each(function(t){l.push(t)});for(var d=new i.Map,u=null,p=Number.MAX_VALUE,c=0;c<l.length;c++){var g=l[c],f=Math.sqrt(g.location.distanceSquaredPoint(e));d.add(g.data.key,f);var h=this.getWallPartEndpoints(g),m=Math.min(Math.sqrt(h[0].distanceSquaredPoint(a)),Math.sqrt(h[1].distanceSquaredPoint(a)));m<p&&(p=m,u=g)}if(null!==u){var y=u.location,v=u.data.length,P=s,w=new i.Point(y.x+v/2,y.y),x=new i.Point(y.x-v/2,y.y);w.offset(-y.x,-y.y).rotate(P).offset(y.x,y.y),x.offset(-y.x,-y.y).rotate(P).offset(y.x,y.y);var b=Math.sqrt(e.distanceSquaredPoint(w)),k=Math.sqrt(e.distanceSquaredPoint(x)),S=void 0,A=void 0;b>k?(S=b,A=w):(S=k,A=x),Math.sqrt(e.distanceSquaredPoint(n))<S&&(n=A)}a===t.data.endpoint?o.model.setDataProperty(t.data,"endpoint",n):o.model.setDataProperty(t.data,"startpoint",n),o.updateWall(t),d.iterator.each(function(n){var r=o.findPartForKey(n.key),l=n.value,s=Math.sqrt(e.distanceSquaredPoint(a)),d=new i.Point(e.x+l/s*(a.x-e.x),e.y+l/s*(a.y-e.y));r.location=d;var u=t.data.startpoint.directionPoint(t.data.endpoint),p=t.data.endpoint.directionPoint(t.data.startpoint),c=Math.abs(r.angle-u)<Math.abs(r.angle-p)?u:p;r.angle=c})},e.prototype.getWallPartEndpoints=function(t){var e=t.location,a=t.data.length,n=0;n=null!==t.containingGroup?t.containingGroup.rotateObject.angle:180;var o=new i.Point(e.x+a/2,e.y),r=new i.Point(e.x-a/2,e.y);o.offset(-e.x,-e.y).rotate(n).offset(e.x,e.y),r.offset(-e.x,-e.y).rotate(n).offset(e.x,e.y);var l=[];return l.push(o),l.push(r),l},e}(i.Tool);e.WallReshapingTool=r},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),t.exports={Floorplan:a(4).Floorplan,FloorplanPalette:a(6).FloorplanPalette,WallBuildingTool:a(1).WallBuildingTool,WallReshapingTool:a(2).WallReshapingTool}},function(t,e,a){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)});Object.defineProperty(e,"__esModule",{value:!0});var i=a(0),r=a(5),l=a(1),s=a(2),d=function(t){function e(e){var a=t.call(this,e)||this;a._palettes=[],a._pointNodes=new i.Set,a._dimensionLinks=new i.Set,a._angleNodes=new i.Set;var n=i.GraphObject.make;a.allowLink=!1,a.undoManager.isEnabled=!0,a.layout.isInitial=!1,a.layout.isOngoing=!1,a.model=n(i.GraphLinksModel,{modelData:{units:"meters",unitsAbbreviation:"m",unitsConversionFactor:.02,gridSize:10,wallThickness:10,preferences:{showWallGuidelines:!0,showWallLengths:!0,showWallAngles:!0,showOnlySmallWallAngles:!0,showGrid:!0,gridSnap:!0}}}),a.grid=n(i.Panel,"Grid",{gridCellSize:new i.Size(a.model.modelData.gridSize,a.model.modelData.gridSize),visible:!0},n(i.Shape,"LineH",{stroke:"lightgray"}),n(i.Shape,"LineV",{stroke:"lightgray"})),a.contextMenu=g(),a.commandHandler.canGroupSelection=function(){return!0},a.commandHandler.canUngroupSelection=function(){return!0},a.commandHandler.archetypeGroupData={isGroup:!0},a.addDiagramListener("SelectionCopied",function(t){var e=t.diagram;e.selection.iterator.each(function(t){if("WallGroup"===t.category){var a=t;e.updateWall(a)}})}),a.addDiagramListener("ExternalObjectsDropped",function(t){var e=[],a=t.diagram;for(var n in a.selection.iterator.each(function(t){if("FloorNode"===t.category){var n=t,o=a.lastInput.documentPoint;a.maybeAddRoomNode(o,n.data.floorImage),e.push(n)}}),e)t.diagram.remove(e[n])}),a.addDiagramListener("ClipboardPasted",function(t){var e=t.diagram;t.diagram.selection.iterator.each(function(t){if("WallGroup"===t.category){var a=t;e.updateWall(a)}})}),a.addDiagramListener("ChangedSelection",function(t){var e=t.diagram;e.skipsUndoManager=!0,e.startTransaction("remove dimension links and angle nodes"),e.pointNodes.iterator.each(function(e){t.diagram.remove(e)}),e.dimensionLinks.iterator.each(function(e){t.diagram.remove(e)});var a=[];e.links.iterator.each(function(t){"DimensionLink"===t.data.category&&a.push(t)});for(var n=0;n<a.length;n++)t.diagram.remove(a[n]);e.pointNodes.clear(),e.dimensionLinks.clear(),e.angleNodes.iterator.each(function(e){t.diagram.remove(e)}),e.angleNodes.clear(),e.commitTransaction("remove dimension links and angle nodes"),e.skipsUndoManager=!1,e.updateWallDimensions(),e.updateWallAngles()}),a.addDiagramListener("SelectionDeleted",function(t){var e=t.diagram.toolManager.mouseDownTools.elt(3);e.joinAllColinearWalls(),e.splitAllWalls(),e.performAllMitering();var a=t.subject,n=new i.Set;a.iterator.each(function(t){if(t instanceof i.Group&&"WallGroup"===t.data.category){var e=t;n.add(e)}}),t.diagram.updateAllRoomBoundaries(n)}),a.nodeTemplateMap.add("",function(){var t=i.GraphObject.make;return t(i.Node,"Spot",{resizable:!0,rotatable:!0,toolTip:m(),resizeAdornmentTemplate:y(),rotateAdornmentTemplate:v(),contextMenu:g(),locationObjectName:"SHAPE",resizeObjectName:"SHAPE",rotateObjectName:"SHAPE",minSize:new i.Size(5,5),locationSpot:i.Spot.Center,selectionAdornmentTemplate:A(null)},new i.Binding("location","loc",i.Point.parse).makeTwoWay(i.Point.stringify),new i.Binding("layerName","isSelected",function(t){return t?"Foreground":""}).ofObject(),t(i.Shape,"Ellipse",{name:"SHAPE",stroke:"#000000",fill:"white"},new i.Binding("geometryString","geo"),new i.Binding("figure","shape").makeTwoWay(),new i.Binding("width").makeTwoWay(),new i.Binding("height").makeTwoWay(),new i.Binding("angle").makeTwoWay(),new i.Binding("fill","texture",function(t,e){return w(e,t)}),new i.Binding("fill","usesTexture",function(t,e){var a=e.part;if(null===a)return null;var n=a.data.texture;return w(e,n)})))}()),a.nodeTemplateMap.add("MultiPurposeNode",function(){var t=i.GraphObject.make;return t(i.Node,"Spot",{contextMenu:g(),toolTip:m(),locationSpot:i.Spot.Center,resizeAdornmentTemplate:y(),rotateAdornmentTemplate:v(),selectionAdornmentTemplate:A(null),locationObjectName:"SHAPE",resizable:!0,rotatable:!0,resizeObjectName:"SHAPE",rotateObjectName:"SHAPE",minSize:new i.Size(5,5)},new i.Binding("location","loc",i.Point.parse).makeTwoWay(i.Point.stringify),new i.Binding("layerName","isSelected",function(t){return t?"Foreground":""}).ofObject(),t(i.Shape,{strokeWidth:1,name:"SHAPE",fill:"rgba(128, 128, 128, 0.5)"},new i.Binding("angle").makeTwoWay(),new i.Binding("width").makeTwoWay(),new i.Binding("height").makeTwoWay(),new i.Binding("fill","texture",function(t,e){return w(e,t)}),new i.Binding("fill","usesTexture",function(t,e){var a=e.part;if(null===a)return null;var n=a.data.texture;return w(e,n)}),new i.Binding("stroke","isSelected",function(t,e){return t?i.Brush.lightenBy(e.stroke,.5):function(t){0===t.indexOf("#")&&(t=t.slice(1));3===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]);if(6!==t.length)throw new Error("Invalid HEX color.");var e=(255-parseInt(t.slice(0,2),16)).toString(16),a=(255-parseInt(t.slice(2,4),16)).toString(16),n=(255-parseInt(t.slice(4,6),16)).toString(16);return"#"+P(e)+P(a)+P(n)}(e.part.data.color)}).ofObject()),t(i.Panel,"Auto",new i.Binding("visible","showLabel"),t(i.Shape,"RoundedRectangle",{fill:"beige",opacity:.5,stroke:null}),t(i.TextBlock,{margin:5,wrap:i.TextBlock.WrapFit,textAlign:"center",editable:!0,isMultiline:!1,stroke:"black",font:"10pt sans-serif"},new i.Binding("text").makeTwoWay(),new i.Binding("angle","angle").makeTwoWay(),new i.Binding("font","height",function(t){return t>25?"10pt sans-serif":t<25&&t>15?"8pt sans-serif":"6pt sans-serif"}))))}()),a.nodeTemplateMap.add("WindowNode",function(){var t=i.GraphObject.make;return t(i.Node,"Spot",{contextMenu:g(),selectionObjectName:"SHAPE",selectionAdorned:!1,locationSpot:i.Spot.Center,toolTip:m(),minSize:new i.Size(5,5),resizable:!0,resizeAdornmentTemplate:T(),resizeObjectName:"SHAPE",rotatable:!1,dragComputation:W,layerName:"Foreground"},new i.Binding("location","loc",i.Point.parse).makeTwoWay(i.Point.stringify),new i.Binding("angle").makeTwoWay(),t(i.Shape,{name:"SHAPE",fill:"white",strokeWidth:0},new i.Binding("width","length").makeTwoWay(),new i.Binding("height").makeTwoWay(),new i.Binding("stroke","isSelected",function(t,e){return t?"dodgerblue":"black"}).ofObject(),new i.Binding("fill","isSelected",function(t,e){return t?"lightgray":"white"}).ofObject()),t(i.Shape,{name:"LINESHAPE",fill:"darkgray",strokeWidth:0,height:10},new i.Binding("width","length",function(t,e){return t-10}),new i.Binding("height","height",function(t,e){return t/5}),new i.Binding("stroke","isSelected",function(t,e){return t?"dodgerblue":"black"}).ofObject()))}()),a.nodeTemplateMap.add("PaletteWallNode",function(){var t=i.GraphObject.make;return t(i.Node,"Spot",{selectionAdorned:!1},t(i.Shape,{name:"SHAPE",fill:"black",strokeWidth:0,height:10,figure:"Rectangle"},new i.Binding("width","length").makeTwoWay(),new i.Binding("height").makeTwoWay(),new i.Binding("fill","isSelected",function(t,e){return t?"dodgerblue":"black"}).ofObject(),new i.Binding("stroke","isSelected",function(t,e){return t?"dodgerblue":"black"}).ofObject()))}()),a.nodeTemplateMap.add("DoorNode",function(){var t=i.GraphObject.make;return t(i.Node,"Spot",{contextMenu:g(),selectionObjectName:"SHAPE",selectionAdornmentTemplate:N(),locationSpot:i.Spot.BottomCenter,resizable:!0,resizeObjectName:"OPENING_SHAPE",toolTip:m(),minSize:new i.Size(10,10),dragComputation:W,resizeAdornmentTemplate:T(),layerName:"Foreground"},new i.Binding("location","loc",i.Point.parse).makeTwoWay(i.Point.stringify),new i.Binding("angle").makeTwoWay(),new i.Binding("locationSpot","doorOpeningHeight",function(t,e){return new i.Spot(.5,1,0,-t/2)}),t(i.Shape,{name:"SHAPE",fill:"rgba(0, 0, 0, 0)"},new i.Binding("width","length"),new i.Binding("height","length").makeTwoWay(),new i.Binding("stroke","isSelected",function(t,e){return t?"dodgerblue":"black"}).ofObject(),new i.Binding("geometryString","swing",function(t){return"left"===t?"F1 M0,0 v-150 a150,150 0 0,1 150,150 ":"F1 M275,175 v-150 a150,150 0 0,0 -150,150 "})),t(i.Shape,{name:"OPENING_SHAPE",fill:"white",strokeWidth:0,height:5,width:40,alignment:i.Spot.BottomCenter,alignmentFocus:i.Spot.Top},new i.Binding("height","doorOpeningHeight").makeTwoWay(),new i.Binding("stroke","isSelected",function(t,e){return t?"dodgerblue":"black"}).ofObject(),new i.Binding("fill","isSelected",function(t,e){return t?"lightgray":"white"}).ofObject(),new i.Binding("width","length").makeTwoWay()))}()),a.nodeTemplateMap.add("RoomNode",function(){var t=i.GraphObject.make;return t(i.Node,"Spot",{contextMenu:g(),toolTip:c(),selectionObjectName:"SHAPE",rotateObjectName:"SHAPE",locationSpot:i.Spot.TopLeft,reshapable:!0,copyable:!1,minSize:new i.Size(1,1),movable:!1,selectionAdornmentTemplate:A(["floor1.jpg","floor2.jpg","floor3.jpg","floor4.jpg","floor5.jpg","floor6.jpg","floor7.jpg"]),locationObjectName:"SHAPE",layerName:"Background"},new i.Binding("location","isSelected",function(t,e){var a=e.data.loc;if(t){var n=e.findObject("SHAPE").strokeWidth,o=new i.Point(a.x-2*n,a.y-2*n);return o}return void 0!==a?a:e.location}).ofObject(),t(i.Shape,{name:"SHAPE",fill:S(null),stroke:"black",strokeWidth:1},new i.Binding("stroke","isSelected",function(t,e){if(null!=e.part.containingGroup){var a=e.part.containingGroup;t&&(a.data.isSelected=!0)}return t?"dodgerblue":"black"}).ofObject(),new i.Binding("strokeWidth","isSelected",function(t,e){return t?5:1}).ofObject(),new i.Binding("fill","floorImage",function(t){return S(t)})),t(i.Panel,"Horizontal",{cursor:"move",name:"ROOM_LABEL",_isNodeLabel:!0},new i.Binding("alignment","labelAlignment"),t(i.Panel,"Auto",new i.Binding("visible","showLabel"),t(i.Shape,"RoundedRectangle",{fill:"beige",opacity:.5,stroke:null,strokeWidth:3,name:"ROOM_LABEL_SHAPE"},new i.Binding("stroke","isSelected",function(t){return t?"dodgerblue":null}).ofObject()),t(i.Panel,"Vertical",t(i.TextBlock,"Room Name",{editable:!0,cursor:"text",font:"normal normal bold 13px sans-serif"},new i.Binding("text","name").makeTwoWay()),t(i.TextBlock,"Room Size",{name:"ROOM_LABEL_SIZE"},new i.Binding("text","",function(t){var e=t.diagram,a=e.getRoomArea(t),n=e.convertPixelsToUnits(e.convertPixelsToUnits(a)).toFixed(2);return n+e.model.modelData.unitsAbbreviation+String.fromCharCode(178)}).ofObject()))),t("Button",{desiredSize:new i.Size(15,15),click:function(t,e){var a=e.part;if(null!==a){t.diagram.model.setDataProperty(a.data,"showFlooringOptions",!a.data.showFlooringOptions);var n=t.diagram;n.select(a)}},toolTip:t(i.Adornment,"Auto",t(i.Shape,{fill:"#FFFFCC"}),t(i.TextBlock,{margin:4,text:"Show/ hide floor types"}))},new i.Binding("visible","isSelected").ofObject(),t(i.Shape,"TriangleDown",{desiredSize:new i.Size(10,10)},new i.Binding("figure","showFlooringOptions",function(t){return t?"TriangleUp":"TriangleDown"})))))}()),a.groupTemplateMap.add("",function(){var t=i.GraphObject.make;return t(i.Group,"Vertical",{contextMenu:g(),toolTip:c()},new i.Binding("location","loc"),t(i.Panel,"Auto",t(i.Shape,"RoundedRectangle",{fill:"rgba(128,128,128,0.15)",stroke:"rgba(128, 128, 128, .05)",name:"SHAPE",strokeCap:"square"},new i.Binding("fill","isSelected",function(t,e){return t?"rgba(128, 128, 128, .15)":"rgba(128, 128, 128, 0.10)"}).ofObject()),t(i.Placeholder,{padding:5})))}()),a.groupTemplateMap.add("WallGroup",function(){var t=i.GraphObject.make;return t(i.Group,"Spot",{contextMenu:g(),toolTip:c(),selectionObjectName:"SHAPE",rotateObjectName:"SHAPE",locationSpot:i.Spot.TopLeft,reshapable:!0,minSize:new i.Size(1,1),movable:!1,selectionAdorned:!1,mouseDrop:x,mouseDragEnter:b,mouseDragLeave:k,copyable:!1},t(i.Shape,{name:"SHAPE",fill:"lightgray",stroke:"black",strokeWidth:1},new i.Binding("fill","color"),new i.Binding("stroke","isSelected",function(t,e){if(null!=e.part.containingGroup){var a=e.part.containingGroup;t&&(a.data.isSelected=!0)}return t?"dodgerblue":"black"}).ofObject()))}());var o=new l.WallBuildingTool;a.toolManager.mouseDownTools.insertAt(0,o);var d=new s.WallReshapingTool;a.toolManager.mouseDownTools.insertAt(3,d),o.isEnabled=!1;var u=new r.NodeLabelDraggingTool;return a.toolManager.mouseMoveTools.insertAt(0,u),a.toolManager.draggingTool.doMouseUp=function(){i.DraggingTool.prototype.doMouseUp.call(this),this.diagram.updateWallAngles(),this.isGridSnapEnabled=this.diagram.model.modelData.preferences.gridSnap},a.toolManager.draggingTool.doMouseMove=function(){this.diagram.lastInput.shift?this.isGridSnapEnabled=!1:this.isGridSnapEnabled=this.diagram.model.modelData.preferences.gridSnap,i.DraggingTool.prototype.doMouseMove.call(this)},a.toolManager.resizingTool.doMouseMove=function(){var t=this.diagram;this.adornedObject;t.updateWallDimensions(),i.ResizingTool.prototype.doMouseMove.call(this)},a.toolManager.resizingTool.computeMaxSize=function(){var t=this.adornedObject;if(null!==t){var e=t.part,a=null;if(null!==e&&(a=this.diagram.findPartForKey(e.data.group)),null!==a&&null!==e&&("DoorNode"===e.category||"WindowNode"===e.category)){for(var n,o=null,r=null,l=null,s=e.adornments.iterator;s.next();){var d=s.value;"WallPartResizeAdornment"===d.name&&(l=d)}if(null!==l)for(var u=l.elements.iterator;u.next();){var p=u.value,c=this.handle;null!==c&&(p instanceof i.Shape&&p.alignment===c.alignment&&(r=p.getDocumentPoint(i.Spot.Center)),p instanceof i.Shape&&p.alignment!==c.alignment&&(o=p.getDocumentPoint(i.Spot.Center)))}var g=Number.MAX_VALUE;a.memberParts.iterator.each(function(t){if(t.data.key!==e.data.key)for(var a=M(t),i=0;i<a.length;i++){var l=a[i],s=Math.sqrt(l.distanceSquaredPoint(r));if(s<g)Math.sqrt(l.distanceSquaredPoint(o))>s&&(g=s,n=l)}}),null==n&&(n=a.data.startpoint.distanceSquaredPoint(r)>a.data.startpoint.distanceSquaredPoint(o)?a.data.endpoint:a.data.startpoint);var f=0;return null!==o&&(f=Math.sqrt(o.distanceSquaredPoint(n))),new i.Size(f,a.data.thickness)}}return i.ResizingTool.prototype.computeMaxSize.call(this)},a.toolManager.draggingTool.isGridSnapEnabled=!0,a}return o(e,t),Object.defineProperty(e.prototype,"palettes",{get:function(){return this._palettes},set:function(t){this._palettes=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pointNodes",{get:function(){return this._pointNodes},set:function(t){this._pointNodes=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dimensionLinks",{get:function(){return this._dimensionLinks},set:function(t){this._dimensionLinks=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"angleNodes",{get:function(){return this._angleNodes},set:function(t){this._angleNodes=t},enumerable:!0,configurable:!0}),e.prototype.convertPixelsToUnits=function(t){this.model.modelData.units;return t*this.model.modelData.unitsConversionFactor},e.prototype.convertUnitsToPixels=function(t){this.model.modelData.units;return t/this.model.modelData.unitsConversionFactor},e.prototype.getUnitsAbbreviation=function(t){switch(t){case"centimeters":return"cm";case"meters":return"m";case"inches":return"in";case"feet":return"ft"}return t},e.prototype.convertUnits=function(t,e,a){var n=a;switch(t=this.getUnitsAbbreviation(t),e=this.getUnitsAbbreviation(e),t){case"cm":switch(e){case"m":n*=.01;break;case"ft":n*=.0328084;break;case"in":n*=.393701}break;case"m":switch(e){case"cm":n*=100;break;case"ft":n*=3.28084;break;case"in":n*=39.3701}break;case"ft":switch(e){case"cm":n*=30.48;break;case"m":n*=.3048;break;case"in":n*=12}break;case"in":switch(e){case"cm":n*=2.54;break;case"m":n*=.0254;break;case"ft":n*=.0833333}}return n},e.prototype.makeDefaultFurniturePaletteNodeData=function(){return O},e.prototype.makeDefaultWallpartsPaletteNodeData=function(){return j},e.prototype.enableWallBuilding=function(){var t=this,e=t.toolManager.mouseDownTools.elt(0);e.isBuildingDivider=!1;var a=t.toolManager.mouseDownTools.elt(3);e.isEnabled=!0,a.isEnabled=!1,t.currentCursor="crosshair",t.nodes.iterator.each(function(t){t.clearAdornments()}),t.clearSelection()},e.prototype.enableDividerBuilding=function(){var t=this.toolManager.mouseDownTools.elt(0);this.enableWallBuilding(),t.isBuildingDivider=!0,this.currentCursor="crosshair"},e.prototype.disableWallBuilding=function(){var t=this,e=t.toolManager.mouseDownTools.elt(0),a=t.toolManager.mouseDownTools.elt(3);e.isEnabled=!1,a.isEnabled=!0,e.isBuildingDivider=!1,t.currentCursor="",t.nodes.iterator.each(function(t){t.clearAdornments()}),t.clearSelection()},e.prototype.checkboxChanged=function(t){this.skipsUndoManager=!0,this.startTransaction("change preference");var e=document.getElementById(t);switch(t){case"showGridCheckbox":this.grid.visible=e.checked,this.model.modelData.preferences.showGrid=e.checked;break;case"gridSnapCheckbox":this.toolManager.draggingTool.isGridSnapEnabled=e.checked,this.model.modelData.preferences.gridSnap=e.checked;break;case"wallGuidelinesCheckbox":this.model.modelData.preferences.showWallGuidelines=e.checked;break;case"wallLengthsCheckbox":this.model.modelData.preferences.showWallLengths=e.checked,this.updateWallDimensions();break;case"wallAnglesCheckbox":this.model.modelData.preferences.showWallAngles=e.checked,this.updateWallAngles();break;case"onlySmallWallAnglesCheckbox":this.model.modelData.preferences.showOnlySmallWallAngles=e.checked,this.updateWallAngles()}this.commitTransaction("change preference"),this.skipsUndoManager=!1},e.prototype.changeUnits=function(t){for(var e=this,a=t.getElementsByTagName("input"),n=e.model.modelData.units,o=0;o<a.length;o++){var i=a[o];if(i.checked){var r=i.id;switch(e.model.setDataProperty(e.model.modelData,"units",r),i.id){case"centimeters":e.model.setDataProperty(e.model.modelData,"unitsAbbreviation","cm");break;case"meters":e.model.setDataProperty(e.model.modelData,"unitsAbbreviation","m");break;case"feet":e.model.setDataProperty(e.model.modelData,"unitsAbbreviation","ft");break;case"inches":e.model.setDataProperty(e.model.modelData,"unitsAbbreviation","in")}}}var l=e.model.modelData.unitsAbbreviation,s=document.getElementsByClassName("unitsBox");for(o=0;o<s.length;o++){s[o].value=l}var d=document.getElementById("unitsConversionFactorInput"),u=parseFloat(d.value),p=e.model.modelData.units,c=e.convertUnits(n,p,u);e.model.setDataProperty(e.model.modelData,"unitsConversionFactor",c),d.value=c.toString();var g=document.getElementsByClassName("unitsInput");for(o=0;o<g.length;o++){var f=g[o];if("unitsConversionFactorInput"!==f.id){var h=parseFloat(f.value);h=parseFloat(e.convertUnits(n,p,h).toFixed(4)),f.value=h.toString()}}},e.prototype.changeUnitsConversionFactor=function(t){var e=parseFloat(t.value);!isNaN(e)&&e&&void 0!==e&&(this.skipsUndoManager=!0,this.model.set(this.model.modelData,"unitsConversionFactor",e),this.skipsUndoManager=!1)},e.prototype.changeGridSize=function(t){var e=this;e.skipsUndoManager=!0,e.startTransaction("change grid size");var a=0;!isNaN(parseFloat(t.value))&&null!=t.value&&""!==t.value&&void 0!==t.value&&parseFloat(t.value)>0?a=parseFloat(t.value):(t.value=e.convertPixelsToUnits(10).toString(),a=parseFloat(t.value)),a=e.convertUnitsToPixels(a),e.grid.gridCellSize=new i.Size(a,a),e.model.setDataProperty(e.model.modelData,"gridSize",a),e.commitTransaction("change grid size"),e.skipsUndoManager=!1},e.prototype.getCounterClockwiseWallSide=function(t,e){var a=null,n=null;this.toolManager.mouseDownTools.elt(3).pointsApproximatelyEqual(t.data.endpoint,e)?(a="smpt1",n="smpt2"):(a="empt1",n="empt2");var o,i,r,l=e,s=t.data[n],d=t.data[a];return o=l,r=d,((i=s).x-o.x)*(r.y-o.y)-(i.y-o.y)*(r.x-o.x)>0?2:1},e.prototype.getLinesIntersection=function(t,e,a,n){var o=(t.y-e.y)/(t.x-e.x),r=(a.y-n.y)/(a.x-n.x);if(o===1/0||o===-1/0){var l=r*(s=t.x)+-1*(r*a.x-a.y);return new i.Point(s,l)}if(r===1/0||r===-1/0){l=o*(s=a.x)+-1*(o*t.x-t.y);return new i.Point(s,l)}if(Math.abs(o-r)<Math.pow(2,-52))return null;var s=(o*t.x-r*a.x+a.y-t.y)/(o-r);l=(o*r*(a.x-t.x)+r*t.y-o*a.y)/(r-o);return new i.Point(s,l)},e.prototype.updateAllRoomBoundaries=function(t){var e=this,a=e.toolManager.mouseDownTools.elt(3),n=e.findNodesByExample({category:"RoomNode"}),o=[];n.iterator.each(function(n){for(var r=!1,l=!1,s=new i.Set;!r&&!l;){for(var d=n.data.boundaryWalls,u=null,p=null,c=0;c<d.length+1;c++){var g=d[c%d.length],f=g[0],h=e.findNodeForKey(f);null!==h&&(t.contains(h)||s.contains(h)?null!==u&&null===p?p=g:null===u&&(u=null,p=null):null===u?u=g:null!==u&&null===p&&(p=g))}var m=null,y=null,v=null,P=null;if(null!==u&&null!==p){m=e.findNodeForKey(u[0]),v=u[1],y=e.findNodeForKey(p[0]),P=p[1],null!==u&&null!==m&&s.add(m);var w=m.data["smpt"+v],x=m.data["empt"+v],b=y.data["smpt"+P],k=y.data["empt"+P],S=e.getSegmentsIntersection(w,x,b,k);if(null!==S){var A=1===v?2:1,M=(S.distanceSquaredPoint(m.data["smpt"+A])<=S.distanceSquaredPoint(m.data["empt"+A])?m.data.startpoint:m.data.endpoint).directionPoint(S),W=a.translateAndRotatePoint(S,M-90,.1);r=e.maybeAddRoomNode(W,n.data.floorImage,n)}}else l=!0}r||o.push(n)});for(var r=0;r<o.length;r++)e.remove(o[r]);e.updateAllTargetBindings()},e.prototype.maybeAddRoomNode=function(t,e,a){null==a&&(a=null);var n=this,o=n.findNodesByExample({category:"WallGroup"}),i=!1;if(o.iterator.each(function(e){n.isPointInWall(e,t)&&(i=!0)}),n.findNodesByExample({category:"RoomNode"}).iterator.each(function(e){if((null===a||null!=a&&a.data.key!==e.data.key)&&n.isPointInRoom(e,t)){for(var o=!1,r=0;r<e.data.holes.length;r++){var l=e.data.holes[r],s=n.makePolygonFromRoomBoundaries(l);null!==s&&n.isPointInPolygon(s.toArray(),t)&&(o=!0)}o||(i=!0)}}),i)return!1;var r=n.getRoomWalls(t);if(null===r)return!1;var l=n.findRoomHoles(r,t);if(null!==a)n.startTransaction("update room boundaryWalls and holes"),n.model.setDataProperty(a.data,"boundaryWalls",r),n.model.setDataProperty(a.data,"holes",l),n.commitTransaction("update room boundaryWalls and holes");else{null==e&&(e="images/textures/floor1.jpg");var s={key:"Room",category:"RoomNode",name:"Room Name",boundaryWalls:r,holes:l,floorImage:e,showLabel:!0,showFlooringOptions:!0};n.model.addNodeData(s),a=n.findPartForData(s)}return n.updateRoom(a),!0},e.prototype.getRoomWalls=function(t){var e=this,a=e.findNodesByExample({category:"WallGroup"}),n=new i.Point(t.x,t.y-1e4),o=[];function r(a,o,l,s,d,u){if(null===a)return null;null==s&&(s=new i.Set),s.add(a);var p,c=e.toolManager.mouseDownTools.elt(3),g=a.data.startpoint,f=a.data.endpoint,h=new i.Point((g.x+f.x)/2,(g.y+f.y)/2).directionPoint(g);null==u?p=h>=90&&h<=270?g:f:(p=c.pointsApproximatelyEqual(g,u)?f:g,c.pointsApproximatelyEqual(g,u));var m=c.getAllWallsAtIntersection(p,!0);m.sort(function(t,a){var n=e.getWallsIntersection(t,a);if(null===n)return 0;var o=t.data.startpoint,i=t.data.endpoint,r=a.data.startpoint,l=a.data.endpoint,s=c.pointsApproximatelyEqual(p,o)?i:o,d=c.pointsApproximatelyEqual(p,r)?l:r,u=n.directionPoint(s),g=n.directionPoint(d);return u>g?1:u<g?-1:0});for(var y=m.toArray(),v=[],P=y.indexOf(a),w=0;w<y.length;w++){var x=y[P];v.push(x),P=(P+1)%y.length}m.clear();for(w=0;w<v.length;w++){x=v[w];m.add(x)}return m.iterator.each(function(i){if(i.data.key!==d.data.key&&!m.contains(d)||a.data.key===d.data.key){if(null!==s&&!s.contains(i)){if(null==o){o=[];var u=e.getLinesIntersection(t,n,a.data.smpt1,a.data.empt1),c=e.getLinesIntersection(t,n,a.data.smpt2,a.data.empt2);if(null!==u&&null!==c){var g=Math.sqrt(u.distanceSquaredPoint(t))<Math.sqrt(c.distanceSquaredPoint(t))?1:2;o.push([a.data.key,g])}}else o=function(t,a){for(var n=[],o=!1,i=0;i<t.length;i++){var r=t[i],l=r[0],s=e.findNodeForKey(l),d=r[1];o||(n.push([s.data.key,d]),s.data.key===a.data.key&&(o=!0))}return n}(o,a);var f=e.getCounterClockwiseWallSide(i,p);o.push([i.data.key,f]),r(i,o,l,s,d,p)}}else null!==o&&l.add(o)}),l}a.iterator.each(function(a){var i=e.getSegmentsIntersection(t,n,a.data.startpoint,a.data.endpoint);if(null!==i){var r=Math.sqrt(i.distanceSquaredPoint(t));o.push([a,r])}}),o.sort(function(t,e){var a=t[1],n=e[1];return a===n?0:a<n?-1:1});for(var l=null,s=null,d=0;d<o.length;d++){var u,p=o[d][0],c=new i.Set;if(null!==(c=r(p,null,c,null,p,null))&&0!==c.count){u=c.first();var g=e.makePolygonFromRoomBoundaries(u);if(null!==g){for(var f=0;f<u.length;f++){var h=u[f][0],m=e.findNodeForKey(h),y=m.data.endpoint,v=m.data.startpoint;(e.isPointInPolygon(g.toArray(),y)||e.isPointInPolygon(g.toArray(),v))&&!0}if(e.isPointInPolygon(g.toArray(),t)){l=g,s=u;break}}}}return null!==l?e.addInternalWallsToRoom(l,s):null},e.prototype.makePolygonFromRoomBoundaries=function(t){var e=new i.List,a=t;if(null===a)return null;var n=a[0][0],o=this.findNodeForKey(n),r=a[0][1],l=a[1][0],s=this.findNodeForKey(l);if(null===o||null===s)return null;var d=this.getWallsIntersection(o,s);if(null===d)return null;var u="smpt"+r,p="empt"+r,c=o.data[u],g=o.data[p],f=Math.sqrt(d.distanceSquaredPoint(c))<Math.sqrt(d.distanceSquaredPoint(g))?c:g,h=f.equals(c)?g:c;e.add(h),e.add(f);for(var m=f,y=0;y<a.length;y++){var v=a[y];if("string"!=typeof v){var P=v[0],w=this.findNodeForKey(P);if(null===w)return null;var x=v[1];if(w.data.key!==o.data.key){var b="smpt"+x,k="empt"+x,S=w.data[b],A=w.data[k],M=Math.sqrt(m.distanceSquaredPoint(S))<Math.sqrt(m.distanceSquaredPoint(A))?S:A,W=M.equals(S)?A:S;e.add(M),e.add(W),m=W,w}}}return e},e.prototype.sortWallsClockwise=function(t,e){var a=this.toolManager.mouseDownTools.elt(3),n=this.getWallsIntersection(t,e);if(null===n)return 0;var o=t.data.startpoint,i=t.data.endpoint,r=e.data.startpoint,l=e.data.endpoint,s=this.getSegmentsIntersection(o,i,r,l);if(null===s)return 0;var d=a.pointsApproximatelyEqual(s,o)?i:o,u=a.pointsApproximatelyEqual(s,r)?l:r,p=n.directionPoint(d),c=n.directionPoint(u);return p>c?1:p<c?-1:0},e.prototype.sortWallsClockwiseWithSetStartWall=function(t,e){var a=this;t.sort(function(t,e){return a.sortWallsClockwise(t,e)});for(var n=t.toArray(),o=[],i=n.indexOf(e),r=0;r<n.length;r++){var l=n[i];o.push(l),i=(i+1)%n.length}t.clear();for(r=0;r<o.length;r++){l=o[r];t.add(l)}return t},e.prototype.addInternalWallsToRoom=function(t,e){var a=this,n=a.findNodesByExample({category:"WallGroup"}),o=new i.Set;n.iterator.each(function(e){var n=e.data.startpoint,i=e.data.endpoint;(a.isPointInPolygon(t.toArray(),n)||a.isPointInPolygon(t.toArray(),i))&&o.add(e)});var r=a.toolManager.mouseDownTools.elt(3),l=new i.Set,s=new i.Map;return o.iterator.each(function(t){if(!l.contains(t)){for(var n=t.data.startpoint,d=t.data.endpoint,u=null,p=null,c=null,g=0;g<e.length;g++){var f=e[g];if("string"!=typeof f){var h=f[0],m=a.findNodeForKey(h),y=m.data.startpoint,v=m.data.endpoint;(r.pointsApproximatelyEqual(y,n)||r.pointsApproximatelyEqual(y,d)||r.pointsApproximatelyEqual(v,n)||r.pointsApproximatelyEqual(v,d))&&(null===u?(u=m,c=a.getSegmentsIntersection(u.data.startpoint,u.data.endpoint,n,d)):p=m)}}if(null!==c&&null!==u&&null!==p&&e[0][0]===u.data.key&&e[e.length-1][0]===p.data.key){var P;P=u,u=p,p=P}if(null!==c){var w=new i.List;null!==u&&w.add(u),o.iterator.each(function(t){var e=t.data.startpoint,a=t.data.endpoint;null!==c&&(r.pointsApproximatelyEqual(e,c)||r.pointsApproximatelyEqual(a,c))&&(w.add(t),l.add(t))}),null!==p&&w.add(p),null!==u&&(w=a.sortWallsClockwiseWithSetStartWall(w,u));var x=new i.Set;if(null!==u&&null!==p){var b=function t(e,n,o,l,s,d,u){return l.add(i.Point.stringify(o)),n.iterator.each(function(n){if(n.data.key!==e.data.key){if(n.data.key===u.data.key)return-1===s.indexOf("isDone")&&s.push("isDone"),s;if(-1!==s.indexOf("isDone"))return s;var p;p=a.getCounterClockwiseWallSide(n,o);for(var c=[n.data.key,p],g=0;g<s.length;g++){var f=s[g],h=f[0],m=a.findNodeForKey(h),y=f[1];if(n.data.key===m.data.key&&y===p)return}s.push(c);var v=r.pointsApproximatelyEqual(o,n.data.startpoint)?n.data.endpoint:n.data.startpoint,P=r.getAllWallsAtIntersection(v,!0);null!==P&&P.count>1&&(P=a.sortWallsClockwiseWithSetStartWall(P,n));var w=!1;l.contains(i.Point.stringify(v))||(w=!0);var x=!1;if(!w){var b=P.toArray()[1],k=a.getCounterClockwiseWallSide(b,v);for(g=0;g<s.length;g++){var S=s[g];h=S[0],m=a.findNodeForKey(h),y=S[1],m.data.key===b.data.key&&y===k&&(x=!0)}}var A=P.contains(d),M=!!w||!x&&!A;if(P.count>1&&M)return t(n,P,v,l,s,d,u);if(!A){var W=1===p?2:1,T=[n.data.key,W];s.push(T);var N=r.getAllWallsAtIntersection(o,!0);return null!==N&&N.count>1&&(N=a.sortWallsClockwiseWithSetStartWall(N,n)),t(n,N,o,l,s,d,u)}if(-1===s.indexOf("isDone"))return void s.push("isDone")}}),s}(u,w,c,x,[],u,p);b=b.slice(0,b.length-1),s.add(u,b)}}}}),s.iterator.each(function(t){for(var n,o=t.key,i=t.value,r=0;r<e.length;r++){var l=e[r];if("string"!=typeof l){var s=l[0];a.findNodeForKey(s).data.key===o.data.key&&(n=r+1)}}var d=e.slice(0,n),u=e.slice(n,e.length);e=d.concat(i).concat(u)}),e},e.prototype.getClockwiseWallEndpoint=function(t,e){var a,n,o,r=this.toolManager.mouseDownTools.elt(3),l=null,s=t.data["smpt"+e],d=t.data["empt"+e],u=new i.Point((s.x+d.x)/2,(s.y+d.y)/2),p=s.directionPoint(d)+180,c=t.data.thickness/2,g=r.translateAndRotatePoint(u,p,c),f=r.translateAndRotatePoint(u,p+180,c),h=null;return this.isPointInWall(t,g)?(h=g,f):(h=f,g),n=s,o=d,((a=h).y-n.y)*(o.x-n.x)>(a.x-n.x)*(o.y-n.y)?(l=t.data.endpoint,t.data.startpoint):(l=t.data.startpoint,t.data.endpoint),l},e.prototype.findRoomHoles=function(t,e){var a=this,n=a.toolManager.mouseDownTools.elt(3),o=a.findNodesByExample({category:"WallGroup"}),r=new i.Set,l=a.makePolygonFromRoomBoundaries(t);o.iterator.each(function(e){var n=e.data.startpoint,o=e.data.endpoint;if(null!==l&&(a.isPointInPolygon(l.toArray(),n)||a.isPointInPolygon(l.toArray(),o))){for(var i=!1,s=0;s<t.length;s++){var d=t[s][0];a.findNodeForKey(d).data.key===e.data.key&&(i=!0)}i||r.add(e)}});var s=new i.Set;var d=[];return r.iterator.each(function(t){if(!s.contains(t)){var o=t.data.startpoint,l=t.data.endpoint,u=new i.Point((o.x+l.x)/2,(o.y+l.y)/2),p=[];r.iterator.each(function(t){var n=a.getSegmentsIntersection(e,u,t.data.startpoint,t.data.endpoint);if(null!==n){var o=Math.sqrt(n.distanceSquaredPoint(e));p.push([t,o])}}),p.sort(function(t,e){var a=t[1],n=e[1];return a===n?0:a<n?-1:1});for(var c=null,g=0;g<p.length;g++){var f=p[g][0];s.contains(f)||null!==c||(c=f)}if(null!==c){var h=function t(o,r,l,d,u){var p=null;if(null==l){l=[];var c=o.data.startpoint,g=o.data.endpoint,f=new i.Point((c.x+g.x)/2,(c.y+g.y)/2),h=a.getLinesIntersection(e,f,o.data.smpt1,o.data.empt1),m=a.getLinesIntersection(e,f,o.data.smpt2,o.data.empt2);null!==h&&null!==m&&(p=Math.sqrt(h.distanceSquaredPoint(e))<Math.sqrt(m.distanceSquaredPoint(e))?1:2,s.add(o),l.push([o.data.key,p]))}if(-1!==l.indexOf("isDone"))return l;var y=null,v=null,P=o.data.startpoint,w=o.data.endpoint;null!=d?(y=n.pointsApproximatelyEqual(P,d)?w:P,v=n.pointsApproximatelyEqual(P,d)?P:w):null!==p&&null!==(y=a.getClockwiseWallEndpoint(o,p))&&(v=n.pointsApproximatelyEqual(y,P)?w:P),null==r&&(r=new i.Set),null!==y&&r.add(i.Point.stringify(y));var x=n.getAllWallsAtIntersection(y,!0),b=n.getAllWallsAtIntersection(v,!0);null!==x&&x.count>1&&(x=a.sortWallsClockwiseWithSetStartWall(x,o));var k=!1;null===y||r.contains(i.Point.stringify(y))||(k=!0);var S=!1;if(!k&&x.toArray().length>0){var A=null;if(A=x.toArray().length>1?x.toArray()[1]:x.toArray()[0],null!==y)for(var M=a.getCounterClockwiseWallSide(A,y),W=0;W<l.length;W++){var T=(I=l[W])[0],N=a.findNodeForKey(T),O=I[1];N.data.key===A.data.key&&O===M&&(S=!0)}}var j=!1,D=!1;for(W=0;W<l.length;W++){var B=(I=l[W])[0];(N=a.findNodeForKey(B)).data.key!==o.data.key||j?N.data.key===o.data.key&&j&&!D&&(D=!0):j=!0}var q=j&&D&&S&&l.length<3,E=(x.count>1&&x.toArray()[1].data.key===u.data.key&&(o.data.key!==u.data.key||q)||q&&(o.data.key,u.data.key),!!k||!S);if(E||-1!==l.indexOf("isDone")||l.push("isDone"),E&&x.iterator.each(function(e){if(null!==l&&e.data.key!==o.data.key&&-1===l.indexOf("isDone")){if(null!==y){var n=a.getCounterClockwiseWallSide(e,y),i=[e.data.key,n];l.push(i),s.add(e),t(e,r,l,y,u)}}else if(1===x.count&&null!==l&&-1===l.indexOf("isDone")){i=null;for(var d=0;d<l.length;d++){var p=l[d][0],c=a.findNodeForKey(p);if(c.data.key===e.data.key){var g=1===l[d][1]?2:1;i=[c.data.key,g]}}l.push(i),1===b.count&&l.push("isDone")}}),-1!==l.indexOf("isDone"))return l.slice(0,l.length-1);if(b.count>1){var L=x.last();null!==b&&null!==L&&(b=a.sortWallsClockwiseWithSetStartWall(b,L));var _=b.toArray()[1];if(null!==v){var F=a.getCounterClockwiseWallSide(_,v),I=[_.data.key,F],G=!1;for(W=0;W<l.length;W++){var C=l[W],R=I[0],z=a.findNodeForKey(R),H=C[0],U=a.findNodeForKey(H);z.data.key===U.data.key&&I[1]===C[1]&&(G=!0)}if(null===I||G){if(G)return l}else l.push(I),s.add(_),t(_,r,l,v,u)}}return-1!==l.indexOf("isDone")&&(l=l.slice(0,l.length-1)),l}(c,null,null,null,c),m=a.makePolygonFromRoomBoundaries(h);null!==m&&(r.iterator.each(function(t){var e=t.data.smpt1;(a.isPointInPolygon(m.toArray(),e)||a.isPointInPolygon(m.toArray(),e))&&s.add(t)}),d.push(h))}}}),d},e.prototype.getPathPts=function(t){var e=this,a=new i.List,n=t[0][0],o=e.findNodeForKey(n),r=t[0][1],l=t[1][0],s=e.findNodeForKey(l),d=e.getWallsIntersection(o,s);if(o.data.key===s.data.key&&(d=e.getClockwiseWallEndpoint(o,r)),null!==d){var u="smpt"+r,p="empt"+r,c=o.data[u],g=o.data[p],f=Math.sqrt(d.distanceSquaredPoint(c))<Math.sqrt(d.distanceSquaredPoint(g))?c:g,h=f.equals(c)?g:c;a.add(h),a.add(f);for(var m=f,y=o,v=0;v<t.length;v++){var P=t[v];if("string"!=typeof P){var w=P[0],x=e.findNodeForKey(w),b=P[1];if(0!==v){var k="smpt"+b,S="empt"+b,A=x.data[k],M=x.data[S],W=Math.sqrt(m.distanceSquaredPoint(A))<Math.sqrt(m.distanceSquaredPoint(M))?A:M,T=f.equals(A)?M:A;y.data.key===x.data.key&&(a.add(m),a.add(W)),a.add(W),a.add(T),m=T,y=x}}}}return a},e.prototype.getPolygonArea=function(t){for(var e=0,a=0,n=0;n<t.length;n++)e=(n+1)%t.length,a+=t[n].x*t[e].y,a-=t[n].y*t[e].x;return(a/=2)<0?-a:a},e.prototype.getRoomArea=function(t){for(var e=this.getPathPts(t.data.boundaryWalls),a=this.getPolygonArea(e.toArray()),n=0,o=t.data.holes,i=0;i<o.length;i++){var r=o[i],l=this.getPathPts(r);n+=this.getPolygonArea(l.toArray())}return a-n},e.prototype.isPointInWall=function(t,e){var a=[t.data.startpoint,t.data.smpt1,t.data.empt1,t.data.endpoint,t.data.empt2,t.data.smpt2,t.data.startpoint];return this.isPointInPolygon(a,e)},e.prototype.isPointInRoom=function(t,e){if(null==t||!(t instanceof i.Node)||"RoomNode"!==t.data.category)return!1;var a=this.makePolygonFromRoomBoundaries(t.data.boundaryWalls);if(null!==a){var n=a.toArray();return this.isPointInPolygon(n,e)}return!1},e.prototype.isPointInPolygon=function(t,e){for(var a=e.x,n=e.y,o=!1,i=0,r=t.length-1;i<t.length;r=i++){var l=t[i].x,s=t[i].y,d=t[r].x,u=t[r].y;s>n!=u>n&&a<(d-l)*(n-s)/(u-s)+l&&(o=!o)}return o},e.prototype.updateWall=function(t){if(t.data.startpoint&&t.data.endpoint){var e=t.findObject("SHAPE"),a=t.data,n=null,o=(a.startpoint,a.endpoint,a.smpt1,a.smpt2,a.empt1,a.empt2);t.data.isDivider&&(e.strokeWidth=2,e.opacity=.5),o=[a.startpoint,a.endpoint,a.smpt1,a.smpt2,a.empt1,a.empt2],(n=(new i.Geometry).add(new i.PathFigure(a.startpoint.x,a.startpoint.y).add(new i.PathSegment(i.PathSegment.Line,a.smpt1.x,a.smpt1.y)).add(new i.PathSegment(i.PathSegment.Line,a.empt1.x,a.empt1.y)).add(new i.PathSegment(i.PathSegment.Line,a.endpoint.x,a.endpoint.y)).add(new i.PathSegment(i.PathSegment.Line,a.empt2.x,a.empt2.y)).add(new i.PathSegment(i.PathSegment.Line,a.smpt2.x,a.smpt2.y)).add(new i.PathSegment(i.PathSegment.Line,a.startpoint.x,a.startpoint.y)))).normalize(),e.geometry=n;for(var r=Number.MAX_VALUE,l=Number.MAX_VALUE,s=0;s<o.length;s++){var d=o[s];d.x<r&&(r=d.x),d.y<l&&(l=d.y)}t.position=new i.Point(r,l),t.location=new i.Point(r,l)}},e.prototype.updateRoom=function(t){var e=this,a=t.findObject("SHAPE"),n=new i.Geometry,o=[],r=t.data.boundaryWalls;if(null!==r){var l=null;f(r);var s=t.data.holes;if(null!==s&&0!==s.length)for(var d=0;d<s.length;d++){f(s[d])}null!==l&&n.add(l),n.normalize(),a.geometry=n;var u=Number.MAX_VALUE,p=Number.MAX_VALUE;for(d=0;d<o.length;d++){var c=o[d];c.x<u&&(u=c.x),c.y<p&&(p=c.y)}t.position=new i.Point(u,p),t.location=new i.Point(u,p),e.model.setDataProperty(t.data,"loc",new i.Point(u,p));var g=e.getRoomArea(t);e.model.setDataProperty(t.data,"area",g)}function f(t){var a=t[0][0],n=e.findNodeForKey(a),r=t[0][1],s=t[1][0],d=e.findNodeForKey(s),u=e.getWallsIntersection(n,d);if(n.data.key===d.data.key&&(u=e.getClockwiseWallEndpoint(n,r)),null!==u){var p="smpt"+r,c="empt"+r,g=n.data[p],f=n.data[c],h=Math.sqrt(u.distanceSquaredPoint(g))<Math.sqrt(u.distanceSquaredPoint(f))?g:f,m=h.equals(g)?f:g,y=m.copy();o.push(m),o.push(h),null===l?l=new i.PathFigure(m.x,m.y):l.add(new i.PathSegment(i.PathSegment.Move,m.x,m.y)),l.add(new i.PathSegment(i.PathSegment.Line,h.x,h.y));for(var v=h,P=n,w=0;w<t.length;w++){var x=t[w];if("string"!=typeof x){var b=x[0],k=e.findNodeForKey(b),S=x[1];if(0!==w){var A="smpt"+S,M="empt"+S,W=k.data[A],T=k.data[M],N=Math.sqrt(v.distanceSquaredPoint(W))<Math.sqrt(v.distanceSquaredPoint(T))?W:T,O=N.equals(W)?T:W;P.data.key===k.data.key&&(l.add(new i.PathSegment(i.PathSegment.Line,v.x,v.y)),l.add(new i.PathSegment(i.PathSegment.Line,N.x,N.y))),l.add(new i.PathSegment(i.PathSegment.Line,N.x,N.y)),l.add(new i.PathSegment(i.PathSegment.Line,O.x,O.y)),o.push(N),o.push(O),v=O,P=k}}}l.add(new i.PathSegment(i.PathSegment.Line,y.x,y.y))}}},e.prototype.getAdjustedPoint=function(t,e,a,n){var o=t.copy();return t.offset(0,-.5*e.data.thickness-n),t.offset(-o.x,-o.y).rotate(a).offset(o.x,o.y),t},e.prototype.buildDimensionLink=function(t,e,a,n,o,r,l,s,d,u,p,c){a=s.getAdjustedPoint(a,t,o,r),n=s.getAdjustedPoint(n,t,o,r),(null==u||isNaN(u))&&(u=1),(null==c||isNaN(c))&&(c=2),null==p&&(p="gray");var g={key:t.data.key+"PointNode"+d+e,category:"PointNode",loc:i.Point.stringify(a)},f={key:t.data.key+"PointNode"+d+(e+1),category:"PointNode",loc:i.Point.stringify(n)},m={key:t.data.key+"DimensionLink",category:"DimensionLink",from:g.key,to:f.key,angle:o,wall:t.data.key,soloWallFlag:l},y=h(),v=h(),P=function(t,e,a){(null==t||isNaN(t))&&(t=1);(null==a||isNaN(a))&&(a=2);null==e&&(e="gray");var n=i.GraphObject.make;return n(i.Link,n(i.Shape,{stroke:e,strokeWidth:a,name:"SHAPE",opacity:t}),n(i.Shape,{toArrow:"OpenTriangle",stroke:e,strokeWidth:a,opacity:t}),n(i.Shape,{fromArrow:"BackwardOpenTriangle",stroke:e,strokeWidth:a,opacity:t}),n(i.Panel,"Auto",new i.Binding("angle","angle",function(t,e){return t>90&&t<270?(t+180)%360:t}),n(i.Shape,"RoundedRectangle",{fill:"beige",opacity:.8,stroke:null}),n(i.TextBlock,{text:"sometext",segmentOffset:new i.Point(0,-10),font:"13px sans-serif"},new i.Binding("text","",function(t){var e=t.diagram,a=t.data.length,n=e.convertPixelsToUnits(a).toFixed(2),o=e.model.modelData.unitsAbbreviation;return n.toString()+o}).ofObject(),new i.Binding("segmentOffset","angle",function(t,e){return new i.Point(0,10)}).ofObject(),new i.Binding("font","",function(t){var e=t.data.length;return e>40?"13px sans-serif":e<=40&&e>=20?"11px sans-serif":"9px sans-serif"}).ofObject())))}(u,p,c);s.pointNodes.add(y),s.pointNodes.add(v),s.dimensionLinks.add(P),s.add(y),s.add(v),s.add(P),y.data=g,v.data=f,P.data=m,P.fromNode=y,P.toNode=v,P.data.length=Math.sqrt(y.location.distanceSquaredPoint(v.location))},e.prototype.updateWallDimensions=function(){var t=this;if(t.skipsUndoManager=!0,t.startTransaction("update wall dimensions"),!t.model.modelData.preferences.showWallLengths)return t.pointNodes.iterator.each(function(e){t.remove(e)}),t.dimensionLinks.iterator.each(function(e){t.remove(e)}),t.pointNodes.clear(),t.dimensionLinks.clear(),t.commitTransaction("update wall dimensions"),void(t.skipsUndoManager=!1);t.pointNodes.iterator.each(function(e){t.remove(e)}),t.dimensionLinks.iterator.each(function(e){t.remove(e)}),t.pointNodes.clear(),t.dimensionLinks.clear();var e=t.selection,a=new i.Set;e.iterator.each(function(e){if("WindowNode"!==e.category&&"DoorNode"!==e.category||null===e.containingGroup||a.add(e.containingGroup),"WallGroup"===e.category&&e.data&&e.data.startpoint&&e.data.endpoint){var n=e,o=!1;if(n.memberParts.each(function(t){t.isSelected&&(o=!0)}),!o){var i=n.data.startpoint.directionPoint(n.data.endpoint),r=n.data.smpt1,l=n.data.empt1,s=r.x+r.y<=l.x+l.y?r:l,d=r.x+r.y>l.x+l.y?r:l;t.buildDimensionLink(n,1,s.copy(),d.copy(),(i+180)%360,10,!0,t,1);var u=n.data.smpt2,p=n.data.empt2;s=u.x+u.y<=p.x+p.y?u:p,d=u.x+u.y>p.x+p.y?u:p,t.buildDimensionLink(n,2,s.copy(),d.copy(),i,10,!0,t,1)}}}),a.iterator.each(function(e){for(var a=function(a){var n=e.data["smpt"+a],o=e.data["empt"+a],r=n.x+n.y<=o.x+o.y?n:o,l=n.x+n.y>o.x+o.y?n:o,s=e.data.startpoint.directionPoint(e.data.endpoint);1===a&&(s=(s+180)%360);var d=[];e.memberParts.iterator.each(function(a){if(a.isSelected){var n=M(a),o=n[0],i=n[1];t.rotateAndTranslatePoint(o,s+0,e.data.thickness/2),t.rotateAndTranslatePoint(i,s+0,e.data.thickness/2);d.push(o),d.push(i)}}),d.sort(function(t,e){return t.x+t.y>e.x+e.y?1:t.x+t.y<e.x+e.y?-1:0}),d.unshift(r),d.push(l);for(var u=1,p=0;p<d.length-1;p++){for(var c=null,g=null,f=t.pointNodes.iterator;f.next();){(v=f.value).data.key===e.data.key+"PointNode"+u&&(c=v),v.data.key===e.data.key+"PointNode"+(u+1)&&(g=v)}if(null!==c&&null!==g){var h=t.getAdjustedPoint(d[p].copy(),e,s,15),m=t.getAdjustedPoint(d[p+1].copy(),e,s,15);c.data.loc=i.Point.stringify(h),g.data.loc=i.Point.stringify(m),c.updateTargetBindings(),g.updateTargetBindings()}else t.buildDimensionLink(e,u,d[p].copy(),d[p+1].copy(),s,15,!1,t,a,.5,"gray",1);u+=2}var y=null;if(t.dimensionLinks.iterator.each(function(t){null!==t.fromNode&&null!==t.toNode&&t.fromNode.data.key===e.data.key+"PointNode"+a+u&&t.toNode.data.key===e.data.key+"PointNode"+a+(u+1)&&(y=t)}),null!==y){for(c=null,g=null,f=t.pointNodes.iterator;f.next();){var v;(v=f.value).data.key===e.data.key+"PointNode"+u&&(c=v),v.data.key===e.data.key+"PointNode"+(u+1)&&(g=v)}if(null!==c&&null!==g){h=t.getAdjustedPoint(d[0].copy(),e,s,25),m=t.getAdjustedPoint(d[d.length-1].copy(),e,s,25);c.data.loc=i.Point.stringify(h),g.data.loc=i.Point.stringify(m),c.updateTargetBindings(),g.updateTargetBindings()}}else t.buildDimensionLink(e,u,d[0].copy(),d[d.length-1].copy(),s,25,!1,t,a)},n=1;n<3;n++)a(n)}),t.dimensionLinks.iterator.each(function(e){var a=!1;(t.pointNodes.iterator.each(function(t){t.data.key===e.data.to&&(a=!0)}),a)?null!==e&&null!==e.toNode&&null!==e.fromNode&&Math.sqrt(e.toNode.location.distanceSquaredPoint(e.fromNode.location))<1&&!e.data.soloWallFlag&&(e.visible=!1):t.remove(e)}),t.commitTransaction("update wall dimensions"),t.skipsUndoManager=!1},e.prototype.rotateAndTranslatePoint=function(t,e,a){var n=t.x,o=t.y,r=Math.cos(n*Math.PI/180)*a+n,l=Math.sin(n*Math.PI/180)*a+o;return new i.Point(r,l)},e.prototype.getWallsIntersection=function(t,e){if(null===t||null===e)return null;var a=t.data.startpoint.x,n=t.data.startpoint.y,o=t.data.endpoint.x,r=t.data.endpoint.y,l=e.data.startpoint.x,s=e.data.startpoint.y,d=e.data.endpoint.x,u=e.data.endpoint.y;if(a===o&&n===r||l===d&&s===u)return null;var p=(u-s)*(o-a)-(d-l)*(r-n);function c(t,e){var a=t.x,n=e.x,o=t.y,i=e.y,r=Math.abs(n-a);return Math.abs(i-o)<.05&&r<.05}if(0===p)return c(t.data.startpoint,e.data.startpoint)||c(t.data.startpoint,e.data.endpoint)?t.data.startpoint:c(t.data.endpoint,e.data.startpoint)||c(t.data.endpoint,e.data.endpoint)?t.data.endpoint:null;var g=((d-l)*(n-s)-(u-s)*(a-l))/p,f=((o-a)*(n-s)-(r-n)*(a-l))/p,h=+g.toFixed(2),m=+f.toFixed(2);if(h<0||h>1||m<0||m>1)return null;var y=a+g*(o-a),v=n+g*(r-n);return new i.Point(y,v)},e.prototype.getSegmentsIntersection=function(t,e,a,n){var o=t.x,r=t.y,l=e.x,s=e.y,d=a.x,u=a.y,p=n.x,c=n.y;if(o===l&&r===s||d===p&&u===c)return null;var g=(c-u)*(l-o)-(p-d)*(s-r);function f(t,e){var a=t.x,n=e.x,o=t.y,i=e.y,r=Math.abs(n-a);return Math.abs(i-o)<.05&&r<.05}if(0===g)return f(t,a)||f(t,n)?t:f(e,a)||f(e,n)?e:null;var h=((p-d)*(r-u)-(c-u)*(o-d))/g,m=((l-o)*(r-u)-(s-r)*(o-d))/g,y=+h.toFixed(4),v=+m.toFixed(4);if(y<0||y>1||v<0||v>1)return null;var P=o+h*(l-o),w=r+h*(s-r);return new i.Point(P,w)},e.prototype.updateWallAngles=function(){var t=this;if(t.skipsUndoManager=!0,t.startTransaction("display angles"),t.model.modelData.preferences.showWallAngles){t.angleNodes.iterator.each(function(t){t.visible=!0});var e=[];t.selection.iterator.each(function(t){if("WallGroup"===t.category){var a=t;e.push(a)}});for(var a=function(a){var n=new i.Set,o=e[a];t.findNodesByExample({category:"WallGroup"}).iterator.each(function(e){if(null!==e.data&&null!==o.data&&!n.contains(e.data.key)&&e.data.key!==o.data.key&&null!==t.getWallsIntersection(o,e)&&!n.contains(e.data.key)){n.add(e.data.key);var a=t.getWallsIntersection(o,e);if(null!==a){var r=t.toolManager.mouseDownTools.elt(3).getAllWallsAtIntersection(a),l=[];r.iterator.each(function(e){var n=t.model.modelData.gridSize>=10?t.model.modelData.gridSize:10;Math.sqrt(e.data.startpoint.distanceSquaredPoint(a))>n&&l.push({point:e.data.startpoint,wall:e.data.key}),Math.sqrt(e.data.endpoint.distanceSquaredPoint(a))>n&&l.push({point:e.data.endpoint,wall:e.data.key})});for(var s=30,d=0;d<l.length;d++){var u=Math.sqrt(l[d].point.distanceSquaredPoint(a));u<s&&(s=u)}l.sort(function(t,e){if(t=t.point,e=e.point,t.x-a.x>=0&&e.x-a.x<0)return 1;if(t.x-a.x<0&&e.x-a.x>=0)return-1;if(t.x-a.x==0&&e.x-a.x==0)return t.y-a.y>=0||e.y-a.y>=0?t.y>e.y?1:-1:e.y>t.y?1:-1;var n=(t.x-a.x)*(e.y-a.y)-(e.x-a.x)*(t.y-a.y);return n<0?1:n>0?-1:(t.x-a.x)*(t.x-a.x)+(t.y-a.y)*(t.y-a.y)>(e.x-a.x)*(e.x-a.x)+(e.y-a.y)*(e.y-a.y)?1:-1});var p=function(e){var n=l[e],o=void 0;o=null!=l[e+1]?l[e+1]:l[0];var d=a.directionPoint(n.point),u=a.directionPoint(o.point),p=Math.abs(u-d+360)%360,c=d,g=[];r.iterator.each(function(t){g.push(t)}),g.sort(function(t,e){var a=t.data.key.match(/\d+/g),n=e.data.key.match(/\d+/g);return isNaN(a)?1:isNaN(n)?-1:a>n?1:-1});for(var h="",m=0;m<g.length;m++)h+=g[m].data.key;h+="angle"+e;for(var y,v=null,P=t.angleNodes.iterator;P.next();){var w=P.value;w.data.key===h&&(v=w)}if(null!==v)v.data.angle=c,v.data.sweep=p,v.data.loc=i.Point.stringify(a),v.data.maxRadius=s,v.updateTargetBindings();else{var x={key:h,category:"AngleNode",loc:i.Point.stringify(a),stroke:"dodgerblue",angle:c,sweep:p,maxRadius:s},b=(y=i.GraphObject.make)(i.Node,"Spot",{locationSpot:i.Spot.Center,locationObjectName:"SHAPE",selectionAdorned:!1},new i.Binding("location","loc",i.Point.parse).makeTwoWay(i.Point.stringify),y(i.Shape,"Circle",{name:"SHAPE",height:0,width:0}),y(i.Shape,{strokeWidth:1.5,fill:null},new i.Binding("geometry","",f).ofObject(),new i.Binding("stroke","sweep",function(t){return t%45<1||t%45>44?"dodgerblue":"lightblue"})),y(i.Panel,"Auto",{name:"ARCLABEL"},new i.Binding("alignment","sweep",function(t,e){var a=Math.min(30,e.part.data.maxRadius),n=e.part.data.angle,o=new i.Point(a,0).rotate(n+t/2);return new i.Spot(.5,.5,o.x,o.y)}),y(i.Shape,{fill:"white"},new i.Binding("stroke","sweep",function(t){return t%45<1||t%45>44?"dodgerblue":"lightblue"})),y(i.TextBlock,{font:"7pt sans-serif",margin:2},new i.Binding("text","sweep",function(t){return t.toFixed(2)+String.fromCharCode(176)}))));b.data=x,t.add(b),b.updateTargetBindings(),t.angleNodes.add(b)}};for(d=0;d<l.length;d++)p(d)}}})},n=0;n<e.length;n++)a(n);var o=[];t.angleNodes.iterator.each(function(e){for(var a=e.data.key.match(/\d+/g),n=(e.data.key.match(/wall/g)||[]).length,r=[],l=0;l<a.length-1;l++)r.push("wall"+a[l]);n!==a.length-1&&r.push("wall");for(l=0;l<r.length-1;l++){var s=t.findPartForKey(r[l]),d=t.findPartForKey(r[l+1]);null===t.getWallsIntersection(s,d)&&o.push(e)}var u=new i.Set,p=e.data.key.slice(0,e.data.key.indexOf("angle"));t.angleNodes.iterator.each(function(t){-1!==t.data.key.indexOf(p)&&u.add(t)}),u.iterator.each(function(t){t.data.loc!==e.data.loc&&o.push(t)}),0===e.data.sweep&&o.push(e)});for(n=0;n<o.length;n++)t.remove(o[n]),t.angleNodes.remove(o[n])}t.model.modelData.preferences.showOnlySmallWallAngles&&t.angleNodes.iterator.each(function(t){t.data.sweep>=180&&(t.visible=!1)}),t.model.modelData.preferences.showWallAngles||t.angleNodes.iterator.each(function(t){t.visible=!1}),t.commitTransaction("display angles"),t.skipsUndoManager=!1},e.prototype.findClosestLocOnWall=function(t,e){var a=[],n=t.data.startpoint.copy(),o=t.data.endpoint.copy(),r=n.x+n.y<=o.x+o.y?n:o,l=n.x+n.y>o.x+o.y?n:o,s=[];t.memberParts.iterator.each(function(t){var e=M(t);s.push(e[0]),s.push(e[1])}),s.sort(function(t,e){return t.x+t.y>e.x+e.y?1:t.x+t.y<e.x+e.y?-1:0}),a.push(r),(a=a.concat(s)).push(l);for(var d=[],u=0;u<a.length;u+=2){var p=a[u],c=a[u+1];Math.sqrt(p.distanceSquaredPoint(c))>=e.data.length&&d.push({pt1:p,pt2:c})}var g=Number.MAX_VALUE,f=null;for(u=0;u<d.length;u++){var h=d[u],m=h.pt1,y=h.pt2,v=Math.sqrt(m.distanceSquaredPoint(e.location)),P=Math.sqrt(y.distanceSquaredPoint(e.location));v<g&&(g=v,f=h),P<g&&(g=P,f=h)}if(null===f)return null;var w=Math.sqrt(f.pt1.distanceSquaredPoint(f.pt2)),x=e.data.length/2,b=new i.Point(f.pt1.x+x/w*(f.pt2.x-f.pt1.x),f.pt1.y+x/w*(f.pt2.y-f.pt1.y)),k=new i.Point(f.pt2.x+x/w*(f.pt1.x-f.pt2.x),f.pt2.y+x/w*(f.pt1.y-f.pt2.y));return e.location.copy().projectOntoLineSegmentPoint(b,k)},e}(i.Diagram);function u(t){function e(e){var a=e.containingGroup;if(e.containingGroup=null,null!==a)if(0===a.memberParts.count)t.remove(a);else if(1===a.memberParts.count){var n=a.memberParts.first();null!==n&&(n.containingGroup=null)}}t.startTransaction("ungroup selection");var a=t.selection,n=[];a.iterator.each(function(t){t instanceof i.Group?n.push(t):e(t)});for(var o=[],r=0;r<n.length;r++)n[r].memberParts.iterator.each(function(t){o.push(t)});for(r=0;r<o.length;r++)e(o[r]);p(t),t.commitTransaction("ungroup selection")}function p(t){var e=t.nodes,a=[];e.iterator.each(function(t){t instanceof i.Group&&0===t.memberParts.count&&"WallGroup"!==t.category&&a.push(t)});for(var n=0;n<a.length;n++)t.remove(a[n])}function c(){var t=i.GraphObject.make;return t(i.Adornment,"Auto",t(i.Shape,{fill:"#FFFFCC"}),t(i.TextBlock,{margin:4},new i.Binding("text","",function(t,e){var a=e.part.adornedObject.data;return"Name: "+("MultiPurposeNode"===e.part.adornedObject.category?a.text:a.caption)+"\nNotes: "+a.notes+"\nMembers: "+e.part.adornedObject.memberParts.count}).ofObject()))}function g(){var t=i.GraphObject.make;return t(i.Adornment,"Vertical",t("ContextMenuButton",t(i.TextBlock,"Make Room"),{click:function(t,e){var a=t.diagram,n=t.diagram.lastInput.documentPoint;a.maybeAddRoomNode(n,"images/textures/floor1.jpg")}}),t("ContextMenuButton",t(i.TextBlock,"Make Group"),{click:function(t,e){var a=e.part;null!==a&&function(t){t.startTransaction("group selection");var e=t.selection,a=[];e.iterator.each(function(t){t instanceof i.Group?t.memberParts.iterator.each(function(t){a.push(t)}):a.push(t)});for(var n=0;n<a.length;n++)a[n].isSelected=!0;u(t),t.commandHandler.groupSelection();var o=t.selection.first();null!==o&&(t.model.setDataProperty(o.data,"caption","Group"),t.model.setDataProperty(o.data,"notes","")),p(t),t.clearSelection(),t.select(o),t.commitTransaction("group selection")}(a.diagram)}},new i.Binding("visible","visible",function(t,e){var a=e.part.diagram;if(a.selection.count<=1)return!1;var n=!0;return a.selection.iterator.each(function(t){"WallGroup"!==t.category&&"WindowNode"!==t.category&&"DoorNode"!==t.category&&"RoomNode"!==t.category||(n=!1)}),n}).ofObject()),t("ContextMenuButton",t(i.TextBlock,"Ungroup"),{click:function(t,e){var a=e.part;null!==a&&u(a.diagram)}},new i.Binding("visible","",function(t,e){var a=e.part.diagram;if(null!==a){var n=a.selection.first();return n instanceof i.Node&&null!=n.containingGroup&&"WallGroup"!==n.containingGroup.category||n instanceof i.Group&&""===n.category}return!1}).ofObject()),t("ContextMenuButton",t(i.TextBlock,"Copy"),{click:function(t,e){var a=e.part;null!==a&&null!==a.diagram&&a.diagram.commandHandler.copySelection()}},new i.Binding("visible","",function(t,e){if(null!==e.part.diagram){var a=e.part.diagram.selection,n=a.count>0;return a.iterator.each(function(t){"WallGroup"!==t.category&&"WindowNode"!==t.category&&"DoorNode"!==t.category&&"RoomNode"!==t.category||(n=!1)}),n}return!1}).ofObject()),t("ContextMenuButton",t(i.TextBlock,"Cut"),{click:function(t,e){var a=e.part;null!==a&&null!==a.diagram&&a.diagram.commandHandler.cutSelection()}},new i.Binding("visible","",function(t,e){if(null!==e.part.diagram){var a=e.part.diagram.selection,n=a.count>0;return a.iterator.each(function(t){"WallGroup"!==t.category&&"WindowNode"!==t.category&&"DoorNode"!==t.category&&"RoomNode"!==t.category||(n=!1)}),n}return!1}).ofObject()),t("ContextMenuButton",t(i.TextBlock,"Delete"),{click:function(t,e){var a=e.part;null!==a&&null!==a.diagram&&a.diagram.commandHandler.deleteSelection()}},new i.Binding("visible","",function(t,e){return null!==e.part.diagram&&e.part.diagram.selection.count>0}).ofObject()),t("ContextMenuButton",t(i.TextBlock,"Paste"),{click:function(t,e){var a=e.part;null!==a&&null!==a.diagram&&a.diagram.commandHandler.pasteSelection(a.diagram.lastInput.documentPoint)}}))}function f(t){var e=t.data.angle,a=t.data.sweep,n=Math.min(30,t.data.maxRadius);if("number"==typeof a&&a>0){var o=new i.Point(n,0).rotate(e);return(new i.Geometry).add(new i.PathFigure(o.x+n,o.y+n).add(new i.PathSegment(i.PathSegment.Arc,e,a,n,n,n,n))).add(new i.PathFigure(0,0)).add(new i.PathFigure(2*n,2*n))}return(new i.Geometry).add(new i.PathFigure(0,0)).add(new i.PathFigure(2*n,2*n))}function h(){return(0,i.GraphObject.make)(i.Node,"Position",new i.Binding("location","loc",i.Point.parse).makeTwoWay(i.Point.stringify))}function m(){var t=i.GraphObject.make;return t(i.Adornment,"Auto",t(i.Shape,{fill:"#FFFFCC"}),t(i.TextBlock,{margin:4},new i.Binding("text","",function(t,e){var a=e.part.adornedObject.data;return"Name: "+("MultiPurposeNode"===e.part.adornedObject.category?a.text:a.caption)+"\nNotes: "+a.notes}).ofObject()))}function y(){var t=i.GraphObject.make;function e(e,a){return t(i.Shape,{alignment:e,cursor:a,figure:"Rectangle",desiredSize:new i.Size(7,7),fill:"lightblue",stroke:"dodgerblue"})}return t(i.Adornment,"Spot",t(i.Placeholder),e(i.Spot.Top,"n-resize"),e(i.Spot.TopRight,"n-resize"),e(i.Spot.BottomRight,"se-resize"),e(i.Spot.Right,"e-resize"),e(i.Spot.Bottom,"s-resize"),e(i.Spot.BottomLeft,"sw-resize"),e(i.Spot.Left,"w-resize"),e(i.Spot.TopLeft,"nw-resize"))}function v(){var t=i.GraphObject.make;return t(i.Adornment,t(i.Shape,"Circle",{cursor:"pointer",desiredSize:new i.Size(7,7),fill:"lightblue",stroke:"dodgerblue"}))}function P(t){return(new Array(2).join("0")+t).slice(-2)}function w(t,e){var a=t.part;return null===a?"":void 0!==a.data.usesTexture&&a.data.usesTexture?S(""===e?null:-1===e.indexOf("images/textures")?"images/textures/"+e:e):void 0!==a.data.color?a.data.color:"white"}e.Floorplan=d;var x=function(t,e){if(e instanceof i.Group&&!e.data.isDivider){var a=t.diagram,n=a.selection.first();if(n&&("WindowNode"===n.category||"DoorNode"===n.category)&&null===n.containingGroup){var o=a.findClosestLocOnWall(e,n);if(null===o)return a.remove(n),void alert("There's not enough room on the wall!");e.findObject("SHAPE").stroke="black",a.model.setDataProperty(n.data,"group",e.data.key),n.location=o.projectOntoLineSegmentPoint(e.data.startpoint,e.data.endpoint),n.angle=e.data.startpoint.directionPoint(e.data.endpoint),"WindowNode"===n.category&&a.model.setDataProperty(n.data,"height",e.data.thickness),"DoorNode"===n.category&&a.model.setDataProperty(n.data,"doorOpeningHeight",e.data.thickness)}a.updateWallDimensions()}},b=function(t,e){if(e instanceof i.Group&&!e.data.isDivider){var a=t.diagram,n=a.toolManager.draggingTool.draggedParts;null===n&&(n=a.toolManager.draggingTool.copiedParts),null!==n&&n.iterator.each(function(t){var a=t.key;"WindowNode"!==a.category&&"DoorNode"!==a.category||null!==a.containingGroup||(e.findObject("SHAPE").stroke="lightblue",a.angle=e.rotateObject.angle)})}},k=function(t,e){if(e instanceof i.Group){var a=t.diagram,n=e.findObject("SHAPE");if(null!==n){n.stroke="black";var o=a.toolManager.draggingTool.draggedParts;null===o&&(o=a.toolManager.draggingTool.copiedParts),null!==o&&o.iterator.each(function(t){var e=t.key;"WindowNode"!==e.category&&"DoorNode"!==e.category||null!==e.containingGroup||(e.angle=0)})}}};function S(t){var e=i.GraphObject.make;null==t&&(t="images/textures/floor1.jpg");var a=new Image;return a.src=t,e(i.Brush,"Pattern",{pattern:a})}function A(t){var e=i.GraphObject.make;return e(i.Adornment,"Spot",{locationObjectName:"BIGPANEL"},new i.Binding("location","",function(t){return"RoomNode"===t.data.category?t.adornedPart.findObject("ROOM_LABEL").getDocumentPoint(i.Spot.BottomLeft):t.adornedPart.getDocumentPoint(i.Spot.BottomLeft)}).ofObject(),new i.Binding("visible","",function(t){var e=t.adornedPart;return"RoomNode"===e.category||e.data.usesTexture}).ofObject(),e(i.Placeholder),e(i.Panel,"Horizontal",{name:"BIGPANEL"},e("Button",{desiredSize:new i.Size(15,15),click:function(t,e){var a=e.part.adornedPart;null!==a&&(a.diagram.model.setDataProperty(a.data,"showTextureOptions",!a.data.showTextureOptions),a.updateAdornments())}},new i.Binding("visible","",function(t){var e=t.adornedPart;return null===e||!(e.diagram instanceof i.Palette||"RoomNode"===e.category)}).ofObject(),e(i.Shape,"TriangleLeft",{desiredSize:new i.Size(10,10),name:"BUTTONSHAPE"},new i.Binding("figure","showTextureOptions",function(t){return t?"TriangleLeft":"TriangleRight"}))),e(i.Panel,"Horizontal",{name:"PANEL",itemArray:t,itemTemplate:e("Button",{desiredSize:new i.Size(30,30),click:function(t,e){if(null!==e.part&&e instanceof i.Panel){var a=e.part.adornedPart,n=e.findObject("BUTTON_IMAGE").source;"RoomNode"===a.category?t.diagram.model.setDataProperty(a.data,"floorImage",n):t.diagram.model.setDataProperty(a.data,"texture",n)}}},e(i.Picture,{name:"BUTTON_IMAGE"},new i.Binding("source","",function(t,e){return"string"!=typeof t?"":"./images/textures/"+t})))},new i.Binding("visible","",function(t){var e=t.adornedPart;if(e.diagram instanceof i.Palette)return!1;if("RoomNode"===e.category)return e.data.showFlooringOptions;var a=t.findObject("BUTTONSHAPE");return null!==a?"TriangleLeft"===a.figure:void 0}).ofObject(),new i.Binding("itemArray","",function(e){return void 0===e.textures||null===e.textures?t:e.textures}))))}function M(t){var e=t.location,a=t.data.length,n=0;if(null!==t.containingGroup){var o=t.containingGroup;n=o.data.startpoint.directionPoint(o.data.endpoint)}else n=180;var r=new i.Point(e.x+a/2,e.y),l=new i.Point(e.x-a/2,e.y);r.offset(-e.x,-e.y).rotate(n).offset(e.x,e.y),l.offset(-e.x,-e.y).rotate(n).offset(e.x,e.y);var s=[];return s.push(r),s.push(l),s}var W=function(t,e,a){if(null!==t.containingGroup&&"WallGroup"===t.containingGroup.category){var n=t.diagram,o=t.containingGroup,r=o.data.startpoint,l=o.data.endpoint;Math.sqrt(r.distanceSquaredPoint(t.location))+Math.sqrt(t.location.distanceSquaredPoint(l))!==Math.sqrt(r.distanceSquaredPoint(l))&&(t.location=t.location.copy().projectOntoLineSegmentPoint(r,l));var s=function(t){var e=t.containingGroup;if(null!==e){var a,n=e.data.startpoint.copy(),o=e.data.endpoint.copy(),r=new i.Set,l=new i.Set;e.memberParts.iterator.each(function(e){if(e.data.key!==t.data.key)for(var a=M(e),n=0;n<a.length;n++)a[n].x<t.location.x||a[n].y>t.location.y&&a[n].x===t.location.x?r.add(a[n]):l.add(a[n])}),parseFloat(n.x.toFixed(2))<parseFloat(t.location.x.toFixed(2))||n.y>t.location.y&&parseFloat(n.x.toFixed(2))===parseFloat(t.location.x.toFixed(2))?r.add(n):l.add(n),parseFloat(o.x.toFixed(2))<parseFloat(t.location.x.toFixed(2))||o.y>t.location.y&&parseFloat(o.x.toFixed(2))===parseFloat(t.location.x.toFixed(2))?r.add(o):l.add(o);var s,d=Number.MAX_VALUE;r.iterator.each(function(e){var n=e,o=Math.sqrt(n.distanceSquaredPoint(t.location));o<d&&(d=o,a=n)});var u=Number.MAX_VALUE;return l.iterator.each(function(e){var a=e,n=Math.sqrt(a.distanceSquaredPoint(t.location));n<u&&(u=n,s=a)}),{point1:a,point2:s}}}(t),d=s.point1,u=s.point2,p=Math.sqrt(d.distanceSquaredPoint(u)),c=t.data.length/2,g=new i.Point(d.x+c/p*(u.x-d.x),d.y+c/p*(u.y-d.y)),f=new i.Point(u.x+c/p*(d.x-u.x),u.y+c/p*(d.y-u.y));Math.abs((l.y-r.y)*e.x-(l.x-r.x)*e.y+l.x*r.y-l.y*r.x)/Math.sqrt(Math.pow(l.y-r.y,2)+Math.pow(l.x-r.x,2))>(20*o.data.thickness<100?20*o.data.thickness:100)&&(t.containingGroup=null,delete t.data.group,t.angle=0,n.pointNodes.iterator.each(function(t){n.remove(t)}),n.dimensionLinks.iterator.each(function(t){n.remove(t)}),n.pointNodes.clear(),n.dimensionLinks.clear(),n.updateWallDimensions()),e=e.copy().projectOntoLineSegmentPoint(g,f),n.skipsUndoManager=!0,n.startTransaction("set loc"),n.model.setDataProperty(t.data,"loc",i.Point.stringify(e)),n.commitTransaction("set loc"),n.skipsUndoManager=!1,n.updateWallDimensions()}return e};function T(){var t=i.GraphObject.make;return t(i.Adornment,"Spot",{name:"WallPartResizeAdornment"},t(i.Placeholder),t(i.Shape,{alignment:i.Spot.Left,cursor:"w-resize",figure:"Diamond",desiredSize:new i.Size(7,7),fill:"#ffffff",stroke:"#808080"}),t(i.Shape,{alignment:i.Spot.Right,cursor:"e-resize",figure:"Diamond",desiredSize:new i.Size(7,7),fill:"#ffffff",stroke:"#808080"}))}function N(){var t=i.GraphObject.make;return t(i.Adornment,"Vertical",{name:"DoorSelectionAdornment"},t(i.Panel,"Auto",t(i.Shape,{fill:null,stroke:null}),t(i.Placeholder)),t(i.Panel,"Horizontal",{defaultStretch:i.GraphObject.Vertical},t("Button",t(i.Picture,{source:"images/flipDoorOpeningLeft.png",column:0,desiredSize:new i.Size(12,12)},new i.Binding("source","",function(t){return null===t.adornedPart?"images/flipDoorOpeningRight.png":"left"===t.adornedPart.data.swing?"images/flipDoorOpeningRight.png":"images/flipDoorOpeningLeft.png"}).ofObject()),{click:function(t,e){var a=e.part;if(null!==a&&null!==a.diagram){var n=a.diagram;n.startTransaction("flip door");var o=e.part.adornedPart;null!==o&&("left"===o.data.swing?n.model.setDataProperty(o.data,"swing","right"):n.model.setDataProperty(o.data,"swing","left"),n.commitTransaction("flip door"))}},toolTip:t(i.Adornment,"Auto",t(i.Shape,{fill:"#FFFFCC"}),t(i.TextBlock,{margin:4,text:"Flip Door Opening"}))},new i.Binding("visible","",function(t){return null!==t.adornedPart&&null!==t.adornedPart.containingGroup}).ofObject()),t("Button",t(i.Picture,{source:"images/flipDoorSide.png",column:0,desiredSize:new i.Size(12,12)}),{click:function(t,e){var a=e.part;if(null!==a&&null!==a.diagram){var n=a.diagram;n.startTransaction("rotate door");var o=e.part.adornedPart;o.angle=(o.angle+180)%360,n.commitTransaction("rotate door")}},toolTip:t(i.Adornment,"Auto",t(i.Shape,{fill:"#FFFFCC"}),t(i.TextBlock,{margin:4,text:"Flip Door Side"}))}),new i.Binding("visible","",function(t){return null!==t.adornedPart&&null!==t.adornedPart.containingGroup}).ofObject()))}var O=[{category:"MultiPurposeNode",key:"MultiPurposeNode",caption:"Multi Purpose Node",color:"#ffffff",stroke:"#000000",name:"Writable Node",type:"Writable Node",shape:"Rectangle",text:"Write here",showLabel:!0,width:60,height:60,notes:"",texture:"granite1.jpg",usesTexture:!0,showTextureOptions:!0,textures:["wood1.jpg","wood2.jpg","granite1.jpg","porcelain1.jpg","steel1.jpg"]},{key:"roundTable",color:"#ffffff",stroke:"#000000",caption:"Round Table",type:"Round Table",shape:"Ellipse",width:61,height:61,notes:"",texture:"wood1.jpg",usesTexture:!0,showTextureOptions:!0,textures:["wood1.jpg","wood2.jpg","floor3.jpg","granite1.jpg","porcelain1.jpg"]},{key:"armChair",color:"purple",stroke:"#000000",caption:"Arm Chair",type:"Arm Chair",geo:"F1 M0 0 L40 0 40 40 0 40 0 0 M10 30 L10 10 M0 0 Q8 0 10 10 M0 40 Q20 15 40 40 M30 10 Q32 0 40 0 M30 10 L30 30",width:45,height:45,notes:"",texture:"fabric1.jpg",usesTexture:!0,showTextureOptions:!0,textures:["fabric1.jpg","fabric2.jpg","fabric3.jpg"]},{key:"sofaMedium",color:"#ffffff",stroke:"#000000",caption:"Sofa",type:"Sofa",geo:"F1 M0 0 L80 0 80 40 0 40 0 0 M10 35 L10 10 M0 0 Q8 0 10 10 M0 40 Q40 15 80 40 M70 10 Q72 0 80 0 M70 10 L70 35",height:45,width:90,notes:"",texture:"fabric2.jpg",usesTexture:!0,showTextureOptions:!0,textures:["fabric1.jpg","fabric2.jpg","fabric3.jpg"]},{key:"sink",color:"#ffffff",stroke:"#000000",caption:"Sink",type:"Sink",geo:"F1 M0 0 L40 0 40 40 0 40 0 0z M5 7.5 L18.5 7.5 M 21.5 7.5 L35 7.5 35 35 5 35 5 7.5 M 15 21.25 A 5 5 180 1 0 15 21.24M23 3.75 A 3 3 180 1 1 23 3.74 M21.5 6.25 L 21.5 12.5 18.5 12.5 18.5 6.25 M15 3.75 A 1 1 180 1 1 15 3.74M 10 4.25 L 10 3.25 13 3.25 M 13 4.25 L 10 4.25 M27 3.75 A 1 1 180 1 1 27 3.74 M 26.85 3.25 L 30 3.25 30 4.25 M 26.85 4.25 L 30 4.25",width:27,height:27,notes:"",texture:"steel1.jpg",usesTexture:!0,showTextureOptions:!0,textures:["copper1.jpg","steel1.jpg","steel2.jpg","porcelain1.jpg"]},{key:"doubleSink",color:"#ffffff",stroke:"#000000",caption:"Double Sink",type:"Double Sink",geo:"F1 M0 0 L75 0 75 40 0 40 0 0 M5 7.5 L35 7.5 35 35 5 35 5 7.5 M44 7.5 L70 7.5 70 35 40 35 40 9M15 21.25 A5 5 180 1 0 15 21.24 M50 21.25 A 5 5 180 1 0 50 21.24 M40.5 3.75 A3 3 180 1 1 40.5 3.74M40.5 3.75 L50.5 13.75 47.5 16.5 37.5 6.75 M32.5 3.75 A 1 1 180 1 1 32.5 3.74 M 27.5 4.25 L 27.5 3.25 30.5 3.25M 30.5 4.25 L 27.5 4.25 M44.5 3.75 A 1 1 180 1 1 44.5 3.74 M 44.35 3.25 L 47.5 3.25 47.5 4.25 M 44.35 4.25 L 47.5 4.25",height:27,width:52,notes:"",texture:"steel2.jpg",usesTexture:!0,showTextureOptions:!0,textures:["copper1.jpg","steel1.jpg","steel2.jpg","porcelain1.jpg"]},{key:"toilet",color:"#ffffff",stroke:"#000000",caption:"Toilet",type:"Toilet",geo:"F1 M0 0 L25 0 25 10 0 10 0 0 M20 10 L20 15 5 15 5 10 20 10 M5 15 Q0 15 0 25 Q0 40 12.5 40 Q25 40 25 25 Q25 15 20 15",width:25,height:35,notes:"",texture:"porcelain1.jpg",usesTexture:!0,showTextureOptions:!0,textures:["copper1.jpg","steel1.jpg","porcelain1.jpg"]},{key:"shower",color:"#ffffff",stroke:"#000000",caption:"Shower/Tub",type:"Shower/Tub",geo:"F1 M0 0 L40 0 40 60 0 60 0 0 M35 15 L35 55 5 55 5 15 Q5 5 20 5 Q35 5 35 15 M22.5 20 A2.5 2.5 180 1 1 22.5 19.99",width:45,height:75,notes:"",texture:"copper1.jpg",usesTexture:!0,showTextureOptions:!0,textures:["copper1.jpg","steel1.jpg","porcelain1.jpg"]},{key:"bed",color:"#ffffff",stroke:"#000000",caption:"Bed",type:"Bed",geo:"F1 M0 0 L40 0 40 60 0 60 0 0 M 7.5 2.5 L32.5 2.5 32.5 17.5 7.5 17.5 7.5 2.5 M0 20 L40 20 M0 25 L40 25",width:76.2,height:101.6,notes:"",texture:"fabric3.jpg",usesTexture:!0,showTextureOptions:!0,textures:["fabric1.jpg","fabric2.jpg","fabric3.jpg"]},{key:"staircase",color:"#ffffff",stroke:"#000000",caption:"Staircase",type:"Staircase",geo:"F1 M0 0 L 0 100 250 100 250 0 0 0 M25 100 L 25 0 M 50 100 L 50 0 M 75 100 L 75 0M 100 100 L 100 0 M 125 100 L 125 0 M 150 100 L 150 0 M 175 100 L 175 0 M 200 100 L 200 0 M 225 100 L 225 0",width:125,height:50,notes:"",texture:"",usesTexture:!0,showTextureOptions:!0,textures:["wood1.jpg","floor1.jpg","wood2.jpg","steel2.jpg","floor2.jpg"]},{key:"stove",color:"#ffffff",stroke:"#000000",caption:"Stove",type:"Stove",geo:"F1 M 0 0 L 0 100 100 100 100 0 0 0M 30 15 A 15 15 180 1 0 30.01 15M 30 20 A 10 10 180 1 0 30.01 20M 30 25 A 5 5 180 1 0 30.01 25M 70 15 A 15 15 180 1 0 70.01 15M 70 20 A 10 10 180 1 0 70.01 20M 70 25 A 5 5 180 1 0 70.01 25M 30 55 A 15 15 180 1 0 30.01 55M 30 60 A 10 10 180 1 0 30.01 60M 30 65 A 5 5 180 1 0 30.01 65M 70 55 A 15 15 180 1 0 70.01 55M 70 60 A 10 10 180 1 0 70.01 60M 70 65 A 5 5 180 1 0 70.01 65",width:75,height:75,notes:"",texture:"plaster1.jpg",usesTexture:!0,showTextureOptions:!0,textures:["steel1.jpg","porcelain1.jpg","copper1.jpg","plaster1.jpg"]},{key:"diningTable",color:"#ffffff",stroke:"#000000",caption:"Dining Table",type:"Dining Table",geo:"F1 M 0 0 L 0 100 200 100 200 0 0 0 M 25 0 L 25 -10 75 -10 75 0 M 125 0 L 125 -10 175 -10 175 0 M 200 25 L 210 25 210 75 200 75 M 125 100 L 125 110 L 175 110 L 175 100 M 25 100 L 25 110 75 110 75 100 M 0 75 -10 75 -10 25 0 25",width:125,height:62.5,notes:"",texture:"wood2.jpg",usesTexture:!0,showTextureOptions:!0,textures:["wood1.jpg","wood2.jpg","floor3.jpg","granite1.jpg","porcelain1.jpg","steel2.jpg"]}],j=[{category:"WindowNode",key:"window",color:"white",caption:"Window",type:"Window",shape:"Rectangle",height:10,length:60,notes:""},{key:"door",category:"DoorNode",caption:"Door",type:"Door",length:40,doorOpeningHeight:5,swing:"left",notes:""},{key:"floor",category:"FloorNode",src:"images/textures/floor1.jpg"}]},function(t,e,a){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)});Object.defineProperty(e,"__esModule",{value:!0});var i=a(0),r=function(t){function e(){var e=t.call(this)||this;return e.name="NodeLabelDragging",e.label=null,e._offset=new i.Point,e._originalAlignment=null,e._originalCenter=null,e}return o(e,t),e.prototype.canStart=function(){if(!i.Tool.prototype.canStart.call(this))return!1;var t=this.diagram;return null!==t&&(!!t.lastInput.left&&(!!this.isBeyondDragSize()&&null!==this.findLabel()))},e.prototype.findLabel=function(){var t=this.diagram,e=t.firstInput,a=t.findObjectAt(e.documentPoint,null,null);if(null===a||!(a.part instanceof i.Node))return null;for(a.part instanceof i.Node&&(a.part.isSelected=!0);null!==a.panel;){if(a._isNodeLabel&&a.panel.type===i.Panel.Spot&&a.panel.findMainElement()!==a)return a;a=a.panel}return null},e.prototype.doActivate=function(){if(this.startTransaction("Shifted Label"),this.label=this.findLabel(),null!==this.label&&(this._offset=this.diagram.firstInput.documentPoint.copy().subtract(this.label.getDocumentPoint(i.Spot.Center)),this._originalAlignment=this.label.alignment.copy(),null!==this.label&&null!==this.label.panel)){var t=this.label.panel.findMainElement();null!==t&&(this._originalCenter=t.getDocumentPoint(i.Spot.Center))}i.Tool.prototype.doActivate.call(this)},e.prototype.doDeactivate=function(){i.Tool.prototype.doDeactivate.call(this),this.stopTransaction()},e.prototype.doStop=function(){this.label=null,i.Tool.prototype.doStop.call(this)},e.prototype.doCancel=function(){if(null!==this.label&&null!==this._originalAlignment){var t=this.label.part;this.diagram.model.set(t.data,"labelAlignment",this._originalAlignment)}i.Tool.prototype.doCancel.call(this)},e.prototype.doMouseMove=function(){this.isActive&&this.updateAlignment()},e.prototype.doMouseUp=function(){this.isActive&&(this.updateAlignment(),this.transactionResult="Shifted Label",this.stopTool())},e.prototype.updateAlignment=function(){if(null!==this.label){var t=this.diagram.lastInput.documentPoint,e=this._originalCenter;if(null!==e){var a=new i.Spot(.5,.5,t.x-this._offset.x-e.x,t.y-this._offset.y-e.y),n=this.label.part;this.diagram.model.set(n.data,"labelAlignment",a)}}},e}(i.Tool);e.NodeLabelDraggingTool=r},function(t,e,a){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)});Object.defineProperty(e,"__esModule",{value:!0});var i=a(0),r=function(t){function e(e,a){var n=t.call(this,e)||this,o=i.GraphObject.make;return n.contentAlignment=i.Spot.Center,n.nodeTemplateMap=a.nodeTemplateMap,n.nodeTemplateMap.add("FloorNode",o(i.Node,"Auto",o(i.Shape,{fill:l(null),desiredSize:new i.Size(100,100)},new i.Binding("fill","floorImage",function(t){return l(t)})),o(i.TextBlock,"Drag me out to a wall-enclosed space to create a room",{desiredSize:new i.Size(90,NaN)},new i.Binding("visible","",function(t){return t.diagram instanceof i.Palette}).ofObject()))),n.toolManager.contextMenuTool.isEnabled=!1,a.palettes.push(n),n}return o(e,t),e}(i.Palette);function l(t){var e=i.GraphObject.make;null==t&&(t="images/textures/floor1.jpg");var a=new Image;return a.src=t,e(i.Brush,"Pattern",{pattern:a})}e.FloorplanPalette=r}]);
//# sourceMappingURL=gfp.js.map