{"version":3,"sources":["webpack://gfp/webpack/bootstrap","webpack://gfp/external \"go\"","webpack://gfp/./src/WallBuildingTool.js","webpack://gfp/./src/WallReshapingTool.js","webpack://gfp/./src/floorplannerFiles.js","webpack://gfp/./src/Floorplan.js","webpack://gfp/./src/NodeLabelDraggingTool.js","webpack://gfp/./src/FloorplanPalette.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","extendStatics","__extends","this","b","setPrototypeOf","__proto__","Array","__","constructor","go","WallBuildingTool","_super","_this","_buildingWall","_isBuildingDivider","_startPoint","_endPoint","_wallReshapingTool","set","configurable","doActivate","endPoint","startTransaction","diagram","isMouseCaptured","tool","fp","clickPt","lastInput","documentPoint","isSnapped","walls","findNodesByExample","category","iterator","each","w","isPointInWall","buildingWall","snapPt","projectOntoLineSegmentPoint","data","startpoint","endpoint","sp","ep","Math","sqrt","distanceSquaredPoint","gs","model","modelData","gridSize","toolManager","draggingTool","newx","round","x","newy","y","Point","startPoint","wallReshapingTool","mouseDownTools","elt","isActive","doMouseDown","currentCursor","caption","isBuildingDivider","type","smpt1","smpt2","empt1","empt2","thickness","parseFloat","wallThickness","color","isGroup","notes","isDivider","addNodeData","wall","findPartForKey","updateWall","part","findPartForData","transactionResult","raiseDiagramEvent","isEnabled","select","isBuilding","adornedShape","findObject","doKeyDown","selection","first","remove","pointNodes","node","dimensionLinks","link","clear","doDeactivate","Tool","doMouseMove","doMouseUp","updateWallDimensions","stopTransaction","WallReshapingTool","h","Shape","figure","desiredSize","Size","fill","stroke","cursor","_handleArchetype","_handle","_adornedShape","_reshapeObjectName","_angle","_length","_isBuilding","_isIntersecting","_joinedWalls","Set","_returnPoint","_returnData","_wallIntersecting","updateAdornments","Link","isSelected","isReadOnly","seleltgo","reshapeObjectName","selelt","adornment","findAdornment","makeAdornment","geometry","b_1","bounds","pb_1","actualBounds","graphObj","size","elements","undefined","xCheck","min","width","yCheck","height","isNaN","alignment","Spot","max","addAdornment","location","getDocumentPoint","Center","removeAdornment","canStart","allowReshape","left","findToolHandleAt","firstInput","handle","returnPoint","shape","adornedObject","wallParts","memberParts","count","locationsMap_1","Map","wallPart","add","returnData","adornedPart","mousePt","shift","stationaryPt","ang","directionPoint","length_1","newPoint","dx","dy","offset","rotate","spt","ept","isIntersecting","iw","getClosestIntersectingWall","wallIntersecting","performMiteringOnWall","distToSpt","distToEpt","getWallsIntersection","calcAngleAndLengthFromHandle","reshape","updateWallAngles","proposedPt","dummyWallData","dummyWall","closestWall","closestDistance","Number","MAX_VALUE","intersectPoint","isStationaryPtOnW","ab","toFixed","bc","ac","abs","dist","pointsApproximatelyEqual","p1","p2","x1","x2","y1","y2","diff1","performMitering","wa","wb","as","ae","bs","be","wat","wbt","wal","wbl","B","A","C","ow","isClockwise","a1","a2","PI","u","sin","v","ux","uy","vx","vy","D","E","minLength","mpt","prop","setDataProperty","getAllWallIntersectionPoints","intersectionPoints","ip","doAdd","ips","ip2","parse","stringify","getAllWallsAtIntersection","intersectionPoint","includeDividers","wallsInvolved","List","findObjectsNear","Group","contains","e","isPointOnSegment","doWallsShareAnEndpoint","maybeSplitWall","reshapingWall","movingPt","jw","joinedWalls","wallsAtEndpoint","ww","wallToSplit","maybePerformWallSplit","wallsAtStationaryPt","splitNewWall","data1","data2","l1","l2","alreadyExists","wc","ws","we","w1_1","findNodeForData","w2_1","premiterWall","performMiteringAtPoint","rooms","rw_1","bw","boundaryWalls","_loop_1","entry","isConnectedToBounds_1","nonIpEndpoint","j","length","wk2","isW1ConnectedToBounds_1","w1NonIpEndpoint_1","iw2","_loop_2","ww2_1","findNodeForKey","ww2OtherEndpoint","ww3","k","wk3","replacementWall","replacementEntry","getUpdatedEntry","newBounds","slice","commitTransaction","wi","sortWallsClockwiseWithSetStartWall","replacementEntry2","toArray","replacementEntry1","splice","group","wallsSet","maintainWallParts","w1op","w2op","splitAllWalls","areWallsParallel","isParallel","isWallColinear","isColinear","sharedEndpoint","endpointHasNonColinearWall_1","findAllColinearWalls","joinColinearWalls","cw1","performColinearWallJoining","wallsAtReturnPoint","wallsArr","w1","w2","cw2","jw2","colinearWalls","garbage","cwf","cw","pt1_1","pt2_1","farthestDist_1","cw2_1","copy","wallParts_1","cwParts","addAll","cw2w","pts1","pts2","newWall_1","wk","newEntry","newWallSet","wp","loc","newLoc","findClosestLocOnWall","push","oldEntry","nw","oldWallKey","oldWall","oldMiteringSide","oms","ome","pointAtX","a","slope","pt1","pt2","dist1","dist2","joinAllColinearWalls","handledWalls","premiterAllWalls","translateAndRotatePoint","point","angle","oldPoint","smp1","smp2","emp1","emp2","pt","performPremitering","sort","angA","angB","reverse","wiArr","performAllMitering","updateAllRoomBoundaries","stopTool","maybeCreateRoom","reshapedPoint","wallsInvolved_1","nextIndex","indexOf","tryToAddRoomBetweenTwoWalls","wOtherPoint","cwOtherPoint","halfAng1","halfAng2","maybeAddRoomNode","sPt","ePt","distanceSquared","member","wallDimensionLinkPointNodes_1","skipsUndoManager","kvp","rotateObject","glPoints","removeParts","Adornment","Panel","locationObjectName","locationSpot","strokeWidth","makeHandle","handleArchetype","otherH","adornments","next","atr","otherHandlePt","deltaY","deltaX","atan2","distanceBetween","snapPointToGrid","isGridSnapEnabled","oldGridSize","length_2","cos","reshapeWall","showMatches","preferences","showWallGuidelines","comparePt","hWall","checkPtLinedUp","comparePtCoord","ptCoord","makeGuideLinePoint","$","GraphObject","make","Node","TopLeft","Binding","makeTwoWay","data3","from","to","GLPoint1","GLPoint2","GLLink","fromNode","toNode","stationaryPoint","movingPoint","arr","oldAngle","distancesMap","closestPart","distanceToStationaryPt","endpoints","getWallPartEndpoints","distanceToMovingPt","partLength","point1","point2","distance1","distance2","distance","wallLength","sToE","eToS","newAngle","containingGroup","Floorplan","FloorplanPalette","NodeLabelDraggingTool_1","WallBuildingTool_1","WallReshapingTool_1","div","_palettes","_pointNodes","_dimensionLinks","_angleNodes","allowLink","undoManager","layout","isInitial","isOngoing","GraphLinksModel","units","unitsAbbreviation","unitsConversionFactor","showWallLengths","showWallAngles","showOnlySmallWallAngles","showGrid","gridSnap","grid","gridCellSize","visible","contextMenu","makeContextMenu","commandHandler","canGroupSelection","canUngroupSelection","archetypeGroupData","addDiagramListener","floorNode","floorImage","floorplan","missedDimensionLinks","links","angleNodes","wrt","deletedParts","subject","nodeTemplateMap","resizable","rotatable","toolTip","makeNodeToolTip","resizeAdornmentTemplate","makeFurnitureResizeAdornmentTemplate","rotateAdornmentTemplate","makeFurnitureRotateAdornmentTemplate","resizeObjectName","rotateObjectName","minSize","selectionAdornmentTemplate","makeTextureSelectionAdornment","ofObject","obj","updateNodeTexture","usesTexture","texture","TextBlock","margin","tb","Palette","makeDefaultNode","opacity","wrap","WrapFit","textAlign","editable","isMultiline","font","makeMultiPurposeNode","selectionObjectName","selectionAdorned","makeWallPartResizeAdornment","dragComputation","dragWallParts","layerName","makeWindowNode","makePaletteWallNode","makeDoorSelectionAdornment","BottomCenter","doh","swing","alignmentFocus","Top","makeDoorNode","makeGroupToolTip","reshapable","copyable","movable","makeTextureBrush","src","_isNodeLabel","is","room","area","getRoomArea","adjustedArea","convertPixelsToUnits","unitsAb","convertSquareUnitsToFeetSquared","String","fromCharCode","click","button","showFlooringOptions","text","makeRoomNode","groupTemplateMap","strokeCap","Placeholder","padding","makeDefaultGroup","mouseDrop","addWallPart","mouseDragEnter","wallPartDragOver","mouseDragLeave","wallPartDragAway","makeWallGroup","wallBuildingTool","insertAt","nodeLabelDraggingTool","NodeLabelDraggingTool","mouseMoveTools","DraggingTool","resizingTool","ResizingTool","computeMaxSize","obj_1","constrainingPt_1","stationaryPt_1","movingPt_1","resizeAdornment","oitr","adorn","ritr","el","closestDist_1","maxLength","convertInchesToFeetAndInches","numInches","feet","floor","inches","num","convertUnitsToPixels","getUnitsAbbreviation","convertUnits","oldUnits","newUnits","newNum","makeDefaultFurniturePaletteNodeData","FURNITURE_NODE_DATA_ARRAY","makeDefaultWallpartsPaletteNodeData","WALLPARTS_NODE_DATA_ARRAY","enableWallBuilding","nodes","clearAdornments","clearSelection","enableDividerBuilding","disableWallBuilding","checkboxChanged","checkboxId","element","document","getElementById","checked","changeUnits","form","radios","getElementsByTagName","prevUnits","radio","unitsStr","id","unitAbbrevInputs","getElementsByClassName","innerText","unitsConversionFactorInput","oldUnitsConversionFactor","newUnitsConverstionFactor","toString","unitInputs","input","LATICRETE_changeUnits","unitsString","changeUnitsConversionFactor","gridSizeInput","val","changeGridSize","inputVal","getCounterClockwiseWallSide","prop1","prop2","getLinesIntersection","b1","b2","am","bm","Infinity","ipy","ipx","pow","changedWalls","boundsFound","triedAllIntersections","seenW1","e1","e2","s1","s2","w1s","w1e","w2s","w2e","getSegmentsIntersection","w1os","newPt","updateAllTargetBindings","roomToUpdate","isPtOnRoomOrWall","isPointInRoom","isPtInHole","holes","hole","polygon","makePolygonFromRoomBoundaries","isPointInPolygon","getRoomWalls","findRoomHoles","roomData","showLabel","updateRoom","oPt","wallsDistArr","recursivelyFindPaths","path","possiblePaths","seenWalls","origWall","prevPt","sa","ccWalls","intersectionWalls","intersectionWallsReordered","ip1","side1","nodeToStopAt","copyNoMore","side","selectivelyCopyPath","distA","distB","roomOuterBoundaryPts","roomOuterBoundaryPath","wwk","addInternalWallsToRoom","firstWallKey","firstWall","firstSide","secondWallKey","secondWall","propS","propE","ptS","ptE","closestPt","farthestPt","equals","propS1","propE1","ptS1","ptE1","closestPt1","farthestPt1","sortWallsClockwise","offendingWalls","internalPathsToInsert","ows","owe","bw1","bw2","ip_1","temp","intersectionWalls_1","ow2","ow2s","ow2e","seenIp","recursivelyFindInteralClusterPath","iwalls","fw","otherEndpoint","hasNotSeenIp","alreadySeen","fiw","side2","entry1","atFinalIp","doContinue","otherSide","entry2","insertionIndex","entryWk","firstArr","secondArr","concat","getClockwiseWallEndpoint","rayS","rayE","mPt","insidePt","roomBoundaryWalls","isBoundaryWall","wallKey","mPt_1","wallsDistArr_1","entryWall","recursivelyFindHolePath","op","oiw","isSoloWallHole","pwk","pw","os","lw","last","parentw","entryExists","w1k","w2k","polygon_1","getPathPointsIgnoreMiteringSide","pts","prevWall","getPathPts","getPolygonArea","vs","area1","area2","hPts","orderedPoints","polyArr","inside","xi","yi","xj","yj","geo","Geometry","PathFigure","PathSegment","Line","normalize","smallestX","smallestY","position","fig","addPathToGeo","firstPt","Move","getAdjustedPoint","wallOffset","buildDimensionLink","index","soloWallFlag","miteringSide","pointNode1","makePointNode","pointNode2","toArrow","fromArrow","segmentOffset","pxDist","unitsDist","alreadyAbbreviated","feetAndInchesObj","textblock","makeDimensionLink","areWallPartsSelected_1","second","firstWallPt","lastWallPt","wallPartEndpoints","ep1","ep2","rotateAndTranslatePoint","unshift","linkPoint1","linkPoint2","itr","newLoc1","newLoc2","updateTargetBindings","totalWallDimensionLink","canStay","newX","newY","x3","y3","x4","y4","denominator","xa","xb","ya","yb","ua","ub","ua1","ub1","p3","p4","pa","pb","selectedWalls_1","seen","otherWall","intersectionPoint_1","endpoints_1","tolerance","maxRadius","det","_loop_3","sweep","keyArray","aIndex","match","bIndex","angleNode","aitr","aNode","newAngleNode","makeArc","panel","rad","cntr","garbage_1","keyNums","numWalls","wall1","wall2","possibleAngleNodes","allWalls","other","pNode","orderedConstrainingPts","possibleStretches","closestDist","closestStretch","testStretch","testPoint1","testPoint2","testDistance1","testDistance2","closestStretchLength","Diagram","ungroupSelection","ungroupNode","mpf","sel","groups","clearEmptyGroups","state","groupSelection","makeSelectionGroup","flag","deleteSelection","start","Arc","TopRight","BottomRight","Right","Bottom","BottomLeft","Left","alert","draggingParts","draggedParts","copiedParts","textureImage","Image","Brush","pattern","textures","showTextureOptions","sto","itemArray","itemTemplate","imageSource","source","Picture","str","gridPt","floorplan_1","wStart","wEnd","stretch","leftOrAbovePt","leftOrAbove","rightOrBelow","rightOrBelowPt","closestDistLeftOrAbove","closestDistRightOrBelow","getWallPartStretch","totalLength","defaultStretch","Vertical","column","door","doorOpeningHeight","label","_offset","_originalAlignment","_originalCenter","isBeyondDragSize","findLabel","findObjectAt","findMainElement","subtract","main","doStop","doCancel","updateAlignment","align","contentAlignment","makeFloorBrush","NaN","contextMenuTool","palettes"],"mappings":"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","file":"gfp.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","(function() { module.exports = window[\"go\"]; }());","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar go = require(\"gojs/release/go\");\r\nvar WallBuildingTool = (function (_super) {\r\n __extends(WallBuildingTool, _super);\r\n function WallBuildingTool() {\r\n var _this = _super.call(this) || this;\r\n _this._buildingWall = null;\r\n _this._isBuildingDivider = false;\r\n _this.name = 'WallBuilding';\r\n _this._startPoint = null;\r\n _this._endPoint = null;\r\n _this._wallReshapingTool = null;\r\n _this._isBuildingDivider = false;\r\n return _this;\r\n }\r\n Object.defineProperty(WallBuildingTool.prototype, \"startPoint\", {\r\n get: function () { return this._startPoint; },\r\n set: function (value) { this._startPoint = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallBuildingTool.prototype, \"endPoint\", {\r\n get: function () { return this._endPoint; },\r\n set: function (value) { this._endPoint = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallBuildingTool.prototype, \"wallReshapingTool\", {\r\n get: function () { return this._wallReshapingTool; },\r\n set: function (value) { this._wallReshapingTool = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallBuildingTool.prototype, \"buildingWall\", {\r\n get: function () { return this._buildingWall; },\r\n set: function (value) { this._buildingWall = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallBuildingTool.prototype, \"isBuildingDivider\", {\r\n get: function () { return this._isBuildingDivider; },\r\n set: function (value) { this._isBuildingDivider = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n WallBuildingTool.prototype.doActivate = function () {\r\n this.endPoint = null;\r\n this.startTransaction(this.name);\r\n this.diagram.isMouseCaptured = true;\r\n var tool = this;\r\n var fp = tool.diagram;\r\n var clickPt = tool.diagram.lastInput.documentPoint;\r\n var isSnapped = false;\r\n var walls = fp.findNodesByExample({ category: 'WallGroup' });\r\n walls.iterator.each(function (w) {\r\n if (fp.isPointInWall(w, clickPt)) {\r\n if (tool.buildingWall === null) {\r\n var snapPt = clickPt.projectOntoLineSegmentPoint(w.data.startpoint, w.data.endpoint);\r\n clickPt = snapPt;\r\n isSnapped = true;\r\n }\r\n }\r\n });\r\n walls.iterator.each(function (w) {\r\n var sp = w.data.startpoint;\r\n var ep = w.data.endpoint;\r\n var distSp = Math.sqrt(sp.distanceSquaredPoint(clickPt));\r\n if (distSp < 15) {\r\n clickPt = sp;\r\n isSnapped = true;\r\n }\r\n var distEp = Math.sqrt(ep.distanceSquaredPoint(clickPt));\r\n if (distEp < 15) {\r\n clickPt = ep;\r\n isSnapped = true;\r\n }\r\n });\r\n if (true) {\r\n var gs = fp.model.modelData.gridSize;\r\n if (!(tool.diagram.toolManager.draggingTool.isGridSnapEnabled) || isSnapped)\r\n gs = .0001;\r\n var newx = gs * Math.round(clickPt.x / gs);\r\n var newy = gs * Math.round(clickPt.y / gs);\r\n clickPt = new go.Point(newx, newy);\r\n }\r\n this.startPoint = clickPt;\r\n this.wallReshapingTool = fp.toolManager.mouseDownTools.elt(3);\r\n this.isActive = true;\r\n };\r\n WallBuildingTool.prototype.doMouseDown = function () {\r\n var diagram = this.diagram;\r\n var tool = this;\r\n tool.diagram.currentCursor = 'crosshair';\r\n var data = {\r\n key: 'wall', category: 'WallGroup', caption: tool.isBuildingDivider ? 'Divider' : 'Wall', type: tool.isBuildingDivider ? 'Divider' : 'Wall',\r\n startpoint: tool.startPoint, endpoint: tool.startPoint, smpt1: tool.startPoint, smpt2: tool.startPoint, empt1: tool.startPoint, empt2: tool.startPoint,\r\n thickness: tool._isBuildingDivider ? 5 : parseFloat(diagram.model.modelData.wallThickness), color: tool.isBuildingDivider ? 'black' : 'lightgray', isGroup: true, notes: '',\r\n isDivider: tool.isBuildingDivider\r\n };\r\n this.diagram.model.addNodeData(data);\r\n var wall = diagram.findPartForKey(data.key);\r\n this.buildingWall = wall;\r\n var fp = diagram;\r\n fp.updateWall(wall);\r\n var part = diagram.findPartForData(data);\r\n if (part === null)\r\n return;\r\n tool.transactionResult = tool.name;\r\n diagram.raiseDiagramEvent('PartCreated', part);\r\n if (tool.wallReshapingTool === null)\r\n return;\r\n tool.wallReshapingTool.isEnabled = true;\r\n diagram.select(part);\r\n tool.wallReshapingTool.isBuilding = true;\r\n tool.wallReshapingTool.adornedShape = part.findObject('SHAPE');\r\n tool.wallReshapingTool.doActivate();\r\n };\r\n WallBuildingTool.prototype.doKeyDown = function () {\r\n var fp = this.diagram;\r\n var e = fp.lastInput;\r\n if (e.key === 'Esc') {\r\n var wall = fp.selection.first();\r\n fp.remove(wall);\r\n fp.pointNodes.iterator.each(function (node) { fp.remove(node); });\r\n fp.dimensionLinks.iterator.each(function (link) { fp.remove(link); });\r\n fp.pointNodes.clear();\r\n fp.dimensionLinks.clear();\r\n this.doDeactivate();\r\n }\r\n go.Tool.prototype.doKeyDown.call(this);\r\n };\r\n WallBuildingTool.prototype.doMouseMove = function () {\r\n if (this.wallReshapingTool === null)\r\n return;\r\n this.diagram.currentCursor = 'crosshair';\r\n this.wallReshapingTool.doMouseMove();\r\n };\r\n WallBuildingTool.prototype.doDeactivate = function () {\r\n var diagram = this.diagram;\r\n this.buildingWall = null;\r\n this.diagram.currentCursor = '';\r\n this.diagram.isMouseCaptured = false;\r\n if (this.wallReshapingTool !== null) {\r\n this.wallReshapingTool.isEnabled = false;\r\n this.wallReshapingTool.adornedShape = null;\r\n this.wallReshapingTool.doMouseUp();\r\n this.wallReshapingTool.doDeactivate();\r\n this.wallReshapingTool.isBuilding = false;\r\n }\r\n var fp = diagram;\r\n fp.updateWallDimensions();\r\n this.stopTransaction();\r\n this.isActive = false;\r\n };\r\n return WallBuildingTool;\r\n}(go.Tool));\r\nexports.WallBuildingTool = WallBuildingTool;\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar go = require(\"gojs/release/go\");\r\nvar WallReshapingTool = (function (_super) {\r\n __extends(WallReshapingTool, _super);\r\n function WallReshapingTool() {\r\n var _this = _super.call(this) || this;\r\n var h = new go.Shape();\r\n h.figure = 'Diamond';\r\n h.desiredSize = new go.Size(12, 12);\r\n h.fill = 'lightblue';\r\n h.stroke = 'dodgerblue';\r\n h.cursor = 'move';\r\n _this._handleArchetype = h;\r\n _this._handle = null;\r\n _this._adornedShape = null;\r\n _this._reshapeObjectName = 'SHAPE';\r\n _this._angle = 0;\r\n _this._length = 0;\r\n _this._isBuilding = false;\r\n _this._isIntersecting = false;\r\n _this._joinedWalls = new go.Set();\r\n _this._returnPoint = null;\r\n _this._returnData = null;\r\n _this._joinedWalls = new go.Set();\r\n _this._wallIntersecting = null;\r\n return _this;\r\n }\r\n Object.defineProperty(WallReshapingTool.prototype, \"handleArchetype\", {\r\n get: function () { return this._handleArchetype; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"handle\", {\r\n get: function () { return this._handle; },\r\n set: function (value) { this._handle = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"adornedShape\", {\r\n get: function () { return this._adornedShape; },\r\n set: function (value) { this._adornedShape = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"angle\", {\r\n get: function () { return this._angle; },\r\n set: function (value) { this._angle = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"length\", {\r\n get: function () { return this._length; },\r\n set: function (value) { this._length = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"reshapeObjectName\", {\r\n get: function () { return this._reshapeObjectName; },\r\n set: function (value) { this._reshapeObjectName = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"isBuilding\", {\r\n get: function () { return this._isBuilding; },\r\n set: function (value) { this._isBuilding = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"returnData\", {\r\n get: function () { return this._returnData; },\r\n set: function (value) { this._returnData = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"returnPoint\", {\r\n get: function () { return this._returnPoint; },\r\n set: function (value) { this._returnPoint = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"isIntersecting\", {\r\n get: function () { return this._isIntersecting; },\r\n set: function (value) { this._isIntersecting = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"wallIntersecting\", {\r\n get: function () { return this._wallIntersecting; },\r\n set: function (value) { this._wallIntersecting = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WallReshapingTool.prototype, \"joinedWalls\", {\r\n get: function () { return this._joinedWalls; },\r\n set: function (value) { this._joinedWalls = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n WallReshapingTool.prototype.updateAdornments = function (part) {\r\n if (part === null || part instanceof go.Link)\r\n return;\r\n if (part.isSelected && !this.diagram.isReadOnly) {\r\n var seleltgo = part.findObject(this.reshapeObjectName);\r\n if (seleltgo !== null && seleltgo.part !== null && seleltgo.part.data.category === 'WallGroup') {\r\n var selelt = seleltgo;\r\n var adornment = part.findAdornment(this.name);\r\n if (adornment === null) {\r\n adornment = this.makeAdornment(selelt);\r\n }\r\n if (adornment !== null && selelt.part !== null && selelt.geometry != null) {\r\n var geo = selelt.geometry;\r\n var b_1 = geo.bounds;\r\n var pb_1 = selelt.part.actualBounds;\r\n var graphObj = adornment.findObject('BODY');\r\n if (graphObj === null)\r\n return;\r\n graphObj.desiredSize = b_1.size;\r\n adornment.elements.each(function (h) {\r\n if (h.name === undefined)\r\n return;\r\n var x = 0;\r\n var y = 0;\r\n switch (h.name) {\r\n case 'sPt': {\r\n x = part.data.startpoint.x - pb_1.x;\r\n y = part.data.startpoint.y - pb_1.y;\r\n break;\r\n }\r\n case 'ePt': {\r\n x = part.data.endpoint.x - pb_1.x;\r\n y = part.data.endpoint.y - pb_1.y;\r\n break;\r\n }\r\n }\r\n var xCheck = Math.min((x - b_1.x) / b_1.width, 1);\r\n var yCheck = Math.min((y - b_1.y) / b_1.height, 1);\r\n if (xCheck < 0)\r\n xCheck = 0;\r\n if (yCheck < 0)\r\n yCheck = 0;\r\n if (xCheck > 1)\r\n xCheck = 1;\r\n if (yCheck > 1)\r\n yCheck = 1;\r\n if (isNaN(xCheck))\r\n xCheck = 0;\r\n if (isNaN(yCheck))\r\n yCheck = 0;\r\n h.alignment = new go.Spot(Math.max(0, xCheck), Math.max(0, yCheck));\r\n });\r\n part.addAdornment(this.name, adornment);\r\n adornment.location = selelt.getDocumentPoint(go.Spot.Center);\r\n return;\r\n }\r\n }\r\n }\r\n part.removeAdornment(this.name);\r\n };\r\n WallReshapingTool.prototype.canStart = function () {\r\n if (!this.isEnabled)\r\n return false;\r\n var diagram = this.diagram;\r\n if (diagram === null || diagram.isReadOnly)\r\n return false;\r\n if (!diagram.allowReshape)\r\n return false;\r\n if (!diagram.lastInput.left)\r\n return false;\r\n var h = this.findToolHandleAt(diagram.firstInput.documentPoint, this.name);\r\n return (h !== null || this.isBuilding);\r\n };\r\n WallReshapingTool.prototype.doActivate = function () {\r\n var diagram = this.diagram;\r\n if (diagram === null)\r\n return;\r\n if (this.isBuilding) {\r\n if (this.adornedShape !== null && this.adornedShape.part !== null) {\r\n var wall = this.adornedShape.part;\r\n this.handle = this.findToolHandleAt(wall.data.endpoint, this.name);\r\n this.returnPoint = wall.data.startpoint;\r\n }\r\n }\r\n else {\r\n this.handle = this.findToolHandleAt(diagram.firstInput.documentPoint, this.name);\r\n if (this.handle === null)\r\n return;\r\n var adorn = this.handle.part;\r\n var shape = adorn.adornedObject;\r\n var wall = shape.part;\r\n if (!shape)\r\n return;\r\n this.adornedShape = shape;\r\n this.returnPoint = this.handle.name === 'sPt' ? wall.data.startpoint : wall.data.endpoint;\r\n var wallParts = wall.memberParts;\r\n if (wallParts.count !== 0) {\r\n var locationsMap_1 = new go.Map();\r\n wallParts.iterator.each(function (wallPart) {\r\n locationsMap_1.add(wallPart.data.key, wallPart.location);\r\n });\r\n this.returnData = locationsMap_1;\r\n }\r\n }\r\n diagram.isMouseCaptured = true;\r\n this.startTransaction(this.name);\r\n this.isActive = true;\r\n };\r\n WallReshapingTool.prototype.doMouseMove = function () {\r\n var fp = this.diagram;\r\n var tool = this;\r\n if (tool.handle === null)\r\n return;\r\n var adorn = tool.handle.part;\r\n var wall = adorn.adornedPart;\r\n var mousePt = fp.lastInput.documentPoint;\r\n if (tool.isActive && fp !== null) {\r\n if (fp.lastInput.shift) {\r\n var type = tool.handle.name;\r\n var stationaryPt = (type === 'sPt') ? wall.data.endpoint : wall.data.startpoint;\r\n var ang = stationaryPt.directionPoint(mousePt);\r\n var length_1 = Math.sqrt(stationaryPt.distanceSquaredPoint(mousePt));\r\n ang = Math.round(ang / 45) * 45;\r\n var newPoint = new go.Point(stationaryPt.x + length_1, stationaryPt.y);\r\n var dx = stationaryPt.x;\r\n var dy = stationaryPt.y;\r\n newPoint = newPoint.offset(-dx, -dy);\r\n newPoint = newPoint.rotate(ang);\r\n newPoint = newPoint.offset(dx, dy);\r\n mousePt = newPoint;\r\n }\r\n var walls = fp.findNodesByExample({ category: 'WallGroup' });\r\n walls.iterator.each(function (w) {\r\n if (w.data.key !== wall.data.key) {\r\n var spt = w.data.startpoint;\r\n var ept = w.data.endpoint;\r\n if (fp.isPointInWall(w, mousePt)) {\r\n mousePt = mousePt.projectOntoLineSegmentPoint(w.data.startpoint, w.data.endpoint);\r\n tool.isIntersecting = true;\r\n }\r\n if (Math.sqrt(spt.distanceSquaredPoint(mousePt)) < 10) {\r\n mousePt = spt;\r\n }\r\n else if (Math.sqrt(ept.distanceSquaredPoint(mousePt)) < 10) {\r\n mousePt = ept;\r\n }\r\n }\r\n });\r\n var iw = tool.getClosestIntersectingWall(mousePt);\r\n if (iw === null || tool.wallIntersecting !== null) {\r\n if (tool.wallIntersecting !== null && tool.wallIntersecting !== undefined && tool.wallIntersecting.data !== null) {\r\n tool.performMiteringOnWall(tool.wallIntersecting);\r\n }\r\n }\r\n if (iw != null) {\r\n tool.isIntersecting = true;\r\n tool.wallIntersecting = iw;\r\n mousePt = mousePt.projectOntoLineSegmentPoint(iw.data.startpoint, iw.data.endpoint);\r\n var distToSpt = Math.sqrt(mousePt.distanceSquaredPoint(iw.data.startpoint));\r\n var distToEpt = Math.sqrt(mousePt.distanceSquaredPoint(iw.data.endpoint));\r\n if (distToSpt < 25) {\r\n mousePt = iw.data.startpoint;\r\n }\r\n else if (distToEpt < 10) {\r\n mousePt = iw.data.endpoint;\r\n }\r\n }\r\n else {\r\n tool.isIntersecting = false;\r\n if (tool.wallIntersecting !== null && tool.wallIntersecting !== undefined &&\r\n tool.wallIntersecting.data !== null && fp.getWallsIntersection(wall, tool.wallIntersecting) === null) {\r\n tool.wallIntersecting = null;\r\n }\r\n }\r\n tool.calcAngleAndLengthFromHandle(mousePt);\r\n tool.reshape(mousePt);\r\n }\r\n tool.performMiteringOnWall(wall);\r\n fp.updateWallDimensions();\r\n fp.updateWallAngles();\r\n };\r\n WallReshapingTool.prototype.getClosestIntersectingWall = function (proposedPt) {\r\n var tool = this;\r\n if (tool.handle === null)\r\n return null;\r\n var adorn = tool.handle.part;\r\n var wall = adorn.adornedPart;\r\n var type = tool.handle.name;\r\n var stationaryPt = (type === 'sPt') ? wall.data.endpoint : wall.data.startpoint;\r\n var dummyWallData = {\r\n key: 'wall', category: 'WallGroup', caption: 'Wall', type: 'Wall', startpoint: stationaryPt,\r\n smpt1: stationaryPt, smpt2: stationaryPt, endpoint: proposedPt, empt1: proposedPt, empt2: proposedPt,\r\n thickness: parseFloat(tool.diagram.model.modelData.wallThickness), isGroup: true, notes: ''\r\n };\r\n tool.diagram.model.addNodeData(dummyWallData);\r\n var dummyWall = tool.diagram.findPartForKey(dummyWallData.key);\r\n var fp = tool.diagram;\r\n var walls = tool.diagram.findNodesByExample({ category: 'WallGroup' });\r\n var closestWall = null;\r\n var closestDistance = Number.MAX_VALUE;\r\n walls.iterator.each(function (w) {\r\n if (w.data.key !== wall.data.key && w.data.key !== dummyWall.data.key) {\r\n var intersectPoint = fp.getWallsIntersection(dummyWall, w);\r\n var isStationaryPtOnW = false;\r\n var ab = parseFloat(Math.sqrt(w.data.startpoint.distanceSquaredPoint(stationaryPt)).toFixed(2));\r\n var bc = parseFloat(Math.sqrt(stationaryPt.distanceSquaredPoint(w.data.endpoint)).toFixed(2));\r\n var ac = parseFloat(Math.sqrt(w.data.startpoint.distanceSquaredPoint(w.data.endpoint)).toFixed(2));\r\n if (Math.abs((ab + bc) - ac) <= .1) {\r\n isStationaryPtOnW = true;\r\n }\r\n if (intersectPoint !== null && !isStationaryPtOnW) {\r\n var dist = Math.sqrt(stationaryPt.distanceSquaredPoint(intersectPoint));\r\n if (dist < closestDistance) {\r\n closestDistance = dist;\r\n closestWall = w;\r\n }\r\n }\r\n }\r\n });\r\n fp.remove(dummyWall);\r\n return closestWall;\r\n };\r\n WallReshapingTool.prototype.pointsApproximatelyEqual = function (p1, p2) {\r\n var x1 = p1.x;\r\n var x2 = p2.x;\r\n var y1 = p1.y;\r\n var y2 = p2.y;\r\n var diff1 = Math.abs(x2 - x1);\r\n var diff2 = Math.abs(y2 - y1);\r\n if (diff2 < .05 && diff1 < .05) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n WallReshapingTool.prototype.performMitering = function (wa, wb) {\r\n var tool = this;\r\n var diagram = this.diagram;\r\n var as = wa.data.startpoint;\r\n var ae = wa.data.endpoint;\r\n var bs = wb.data.startpoint;\r\n var be = wb.data.endpoint;\r\n var wat = wa.data.thickness;\r\n var wbt = wb.data.thickness;\r\n var wal = Math.sqrt(as.distanceSquaredPoint(ae));\r\n var wbl = Math.sqrt(bs.distanceSquaredPoint(be));\r\n var B = diagram.getWallsIntersection(wa, wb);\r\n if (B === null) {\r\n return;\r\n }\r\n var A = (tool.pointsApproximatelyEqual(as, B)) ? ae : as;\r\n var C = (tool.pointsApproximatelyEqual(bs, B)) ? be : bs;\r\n var ow = null;\r\n var iw = null;\r\n if (!tool.pointsApproximatelyEqual(as, B) && !tool.pointsApproximatelyEqual(ae, B)) {\r\n ow = wa;\r\n iw = wb;\r\n }\r\n else if (!tool.pointsApproximatelyEqual(bs, B) && !tool.pointsApproximatelyEqual(be, B)) {\r\n ow = wb;\r\n iw = wa;\r\n }\r\n if (ow !== null && iw !== null && wa.data.key === iw.data.key) {\r\n if (tool.isClockwise(A, B, ow.data.startpoint)) {\r\n C = ow.data.startpoint;\r\n }\r\n else {\r\n C = ow.data.endpoint;\r\n }\r\n }\r\n if (ow !== null && iw !== null && wb.data.key === iw.data.key) {\r\n if (tool.isClockwise(B, C, ow.data.startpoint)) {\r\n A = ow.data.startpoint;\r\n }\r\n else {\r\n A = ow.data.endpoint;\r\n }\r\n }\r\n var a1 = B.directionPoint(A);\r\n var a2 = B.directionPoint(C);\r\n var ang = Math.abs(a1 - a2 + 360) % 360;\r\n if (Math.abs(ang - 180) < .1) {\r\n return;\r\n }\r\n ang = ang * (Math.PI / 180);\r\n var u = Math.abs(wbt / (2 * (Math.sin(ang))));\r\n var v = Math.abs(wat / (2 * (Math.sin(ang))));\r\n var ab = Math.sqrt(A.distanceSquaredPoint(B));\r\n var bc = Math.sqrt(B.distanceSquaredPoint(C));\r\n var ux = ((A.x - B.x) / ab) * u;\r\n var uy = ((A.y - B.y) / ab) * u;\r\n var vx = ((C.x - B.x) / bc) * v;\r\n var vy = ((C.y - B.y) / bc) * v;\r\n var D = new go.Point(B.x + ux + vx, B.y + uy + vy);\r\n var E = new go.Point(B.x - ux - vx, B.y - uy - vy);\r\n var minLength = Math.min(wal, wbl);\r\n if (Math.sqrt(D.distanceSquaredPoint(B)) > minLength) {\r\n return;\r\n }\r\n var mpt = tool.isClockwise(B, A, D) ? E : D;\r\n if (isNaN(mpt.x) || isNaN(mpt.y)) {\r\n return;\r\n }\r\n if (tool.pointsApproximatelyEqual(as, B) || tool.pointsApproximatelyEqual(ae, B)) {\r\n var prop = null;\r\n if (tool.pointsApproximatelyEqual(A, as)) {\r\n if (tool.isClockwise(A, B, mpt)) {\r\n prop = 'empt1';\r\n }\r\n else {\r\n prop = 'empt2';\r\n }\r\n }\r\n else if (tool.pointsApproximatelyEqual(A, ae)) {\r\n if (tool.isClockwise(A, B, mpt)) {\r\n prop = 'smpt2';\r\n }\r\n else {\r\n prop = 'smpt1';\r\n }\r\n }\r\n if (prop !== null) {\r\n diagram.model.setDataProperty(wa.data, prop, mpt);\r\n diagram.updateWall(wa);\r\n }\r\n }\r\n if (tool.pointsApproximatelyEqual(bs, B) || tool.pointsApproximatelyEqual(be, B)) {\r\n var prop = null;\r\n if (tool.pointsApproximatelyEqual(C, bs)) {\r\n if (tool.isClockwise(C, B, mpt)) {\r\n prop = 'empt1';\r\n }\r\n else {\r\n prop = 'empt2';\r\n }\r\n }\r\n else if (tool.pointsApproximatelyEqual(C, be)) {\r\n if (tool.isClockwise(C, B, mpt)) {\r\n prop = 'smpt2';\r\n }\r\n else {\r\n prop = 'smpt1';\r\n }\r\n }\r\n if (prop !== null) {\r\n diagram.model.setDataProperty(wb.data, prop, mpt);\r\n diagram.updateWall(wb);\r\n }\r\n }\r\n };\r\n WallReshapingTool.prototype.getAllWallIntersectionPoints = function () {\r\n var tool = this;\r\n var diagram = tool.diagram;\r\n var walls = diagram.findNodesByExample({ category: 'WallGroup' });\r\n var intersectionPoints = new go.Set();\r\n walls.iterator.each(function (w) {\r\n var otherWalls = diagram.findNodesByExample({ category: 'WallGroup' });\r\n otherWalls.iterator.each(function (ow) {\r\n if (ow.data.key === w.data.key)\r\n return;\r\n var ip = diagram.getWallsIntersection(w, ow);\r\n var doAdd = true;\r\n if (ip !== null) {\r\n intersectionPoints.iterator.each(function (ips) {\r\n var ip2 = go.Point.parse(ips);\r\n if (tool.pointsApproximatelyEqual(ip2, ip)) {\r\n doAdd = false;\r\n }\r\n });\r\n if (doAdd) {\r\n intersectionPoints.add(go.Point.stringify(ip));\r\n }\r\n }\r\n });\r\n });\r\n return intersectionPoints;\r\n };\r\n WallReshapingTool.prototype.getAllWallsAtIntersection = function (intersectionPoint, includeDividers) {\r\n if (includeDividers === undefined || includeDividers === null) {\r\n includeDividers = true;\r\n }\r\n var tool = this;\r\n var diagram = tool.diagram;\r\n var wallsInvolved = new go.List();\r\n if (intersectionPoint === null) {\r\n return wallsInvolved;\r\n }\r\n diagram.findObjectsNear(intersectionPoint, 1, function (x) {\r\n if (x.part !== null) {\r\n return x.part;\r\n }\r\n return null;\r\n }, function (p) {\r\n if (!(p instanceof go.Group && p.category === 'WallGroup' && (includeDividers || !p.data.isDivider) && !wallsInvolved.contains(p)))\r\n return false;\r\n var s = p.data.startpoint;\r\n var e = p.data.endpoint;\r\n return tool.isPointOnSegment(s, e, intersectionPoint);\r\n }, true, wallsInvolved);\r\n return wallsInvolved;\r\n };\r\n WallReshapingTool.prototype.doWallsShareAnEndpoint = function (wa, wb) {\r\n var tool = this;\r\n var as = wa.data.startpoint;\r\n var ae = wa.data.endpoint;\r\n var bs = wb.data.startpoint;\r\n var be = wb.data.endpoint;\r\n if (tool.pointsApproximatelyEqual(as, bs) || tool.pointsApproximatelyEqual(as, be)\r\n || tool.pointsApproximatelyEqual(ae, bs) || tool.pointsApproximatelyEqual(ae, be)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n WallReshapingTool.prototype.maybeSplitWall = function () {\r\n var tool = this;\r\n if (tool.handle === null)\r\n return;\r\n var adorn = tool.handle.part;\r\n var reshapingWall = adorn.adornedPart;\r\n var movingProp = tool.handle.name;\r\n var movingPt = movingProp === 'sPt' ? reshapingWall.data.startpoint : reshapingWall.data.endpoint;\r\n var jw = tool.joinedWalls;\r\n var wallsAtEndpoint = tool.getAllWallsAtIntersection(movingPt);\r\n wallsAtEndpoint.remove(reshapingWall);\r\n jw.iterator.each(function (ww) {\r\n wallsAtEndpoint.remove(ww);\r\n });\r\n if (wallsAtEndpoint.count === 1) {\r\n var wallToSplit = wallsAtEndpoint.first();\r\n if (wallToSplit !== null) {\r\n if (!tool.doWallsShareAnEndpoint(reshapingWall, wallToSplit)) {\r\n tool.maybePerformWallSplit(wallToSplit, movingPt);\r\n }\r\n }\r\n }\r\n if (tool.isBuilding) {\r\n var stationaryPt = movingPt === reshapingWall.data.startpoint ? reshapingWall.data.endpoint : reshapingWall.data.startpoint;\r\n var wallsAtStationaryPt = tool.getAllWallsAtIntersection(stationaryPt);\r\n wallsAtStationaryPt.remove(reshapingWall);\r\n jw.iterator.each(function (ww) {\r\n wallsAtEndpoint.remove(ww);\r\n });\r\n if (wallsAtStationaryPt.count === 1) {\r\n var wallToSplit = wallsAtStationaryPt.first();\r\n if (wallToSplit !== null) {\r\n if (!tool.doWallsShareAnEndpoint(reshapingWall, wallToSplit)) {\r\n tool.maybePerformWallSplit(wallToSplit, stationaryPt);\r\n }\r\n }\r\n }\r\n }\r\n if (jw !== null) {\r\n jw.iterator.each(function (ww) {\r\n tool.splitNewWall(ww);\r\n });\r\n }\r\n };\r\n WallReshapingTool.prototype.splitNewWall = function (w) {\r\n var tool = this;\r\n var fp = this.diagram;\r\n var walls = fp.findNodesByExample({ category: 'WallGroup' });\r\n var ips = new go.Set();\r\n walls.iterator.each(function (ww) {\r\n var ip = fp.getWallsIntersection(w, ww);\r\n if (ip !== null) {\r\n ips.add(ip);\r\n }\r\n });\r\n ips.iterator.each(function (ip) {\r\n var wi = tool.getAllWallsAtIntersection(ip);\r\n wi.iterator.each(function (ww) {\r\n var s = ww.data.startpoint;\r\n var e = ww.data.endpoint;\r\n if (!tool.pointsApproximatelyEqual(s, ip) && !tool.pointsApproximatelyEqual(e, ip)) {\r\n tool.maybePerformWallSplit(ww, ip);\r\n }\r\n });\r\n });\r\n };\r\n WallReshapingTool.prototype.maybePerformWallSplit = function (w, ip) {\r\n var tool = this;\r\n var fp = tool.diagram;\r\n var s = w.data.startpoint;\r\n var e = w.data.endpoint;\r\n var type = w.data.isDivider ? 'Divider' : 'Wall';\r\n var data1 = {\r\n key: 'wall', category: 'WallGroup', caption: type, type: type, color: w.data.color,\r\n startpoint: s, endpoint: ip, smpt1: s, smpt2: s, empt1: ip, empt2: ip,\r\n thickness: w.data.thickness, isGroup: true, notes: '',\r\n isDivider: w.data.isDivider\r\n };\r\n var data2 = {\r\n key: 'wall', category: 'WallGroup', caption: type, type: type, color: w.data.color,\r\n startpoint: ip, endpoint: e, smpt1: ip, smpt2: ip, empt1: e, empt2: e,\r\n thickness: w.data.thickness, isGroup: true, notes: '',\r\n isDivider: w.data.isDivider\r\n };\r\n var l1 = Math.sqrt(data1.startpoint.distanceSquaredPoint(data1.endpoint));\r\n var l2 = Math.sqrt(data2.startpoint.distanceSquaredPoint(data2.endpoint));\r\n var walls = fp.findNodesByExample({ category: 'WallGroup' });\r\n var alreadyExists = false;\r\n walls.iterator.each(function (wc) {\r\n var ws = wc.data.startpoint;\r\n var we = wc.data.endpoint;\r\n if ((tool.pointsApproximatelyEqual(s, ws) && tool.pointsApproximatelyEqual(ip, we)) ||\r\n (tool.pointsApproximatelyEqual(s, we) && tool.pointsApproximatelyEqual(ip, ws))) {\r\n alreadyExists = true;\r\n }\r\n if ((tool.pointsApproximatelyEqual(ip, ws) && tool.pointsApproximatelyEqual(e, we)) ||\r\n (tool.pointsApproximatelyEqual(ip, we) && tool.pointsApproximatelyEqual(e, ws))) {\r\n alreadyExists = true;\r\n }\r\n });\r\n if (l1 > 1 && l2 > 1 && !alreadyExists) {\r\n fp.model.addNodeData(data1);\r\n fp.model.addNodeData(data2);\r\n var w1_1 = fp.findNodeForData(data1);\r\n var w2_1 = fp.findNodeForData(data2);\r\n tool.premiterWall(w1_1);\r\n tool.premiterWall(w2_1);\r\n tool.performMiteringAtPoint(ip, false);\r\n if (tool.handle !== null) {\r\n var rooms = fp.findNodesByExample({ category: 'RoomNode' });\r\n var adorn = tool.handle.part;\r\n var rw_1 = adorn.adornedPart;\r\n rooms.iterator.each(function (r) {\r\n var bw = r.data.boundaryWalls;\r\n var _loop_1 = function (i) {\r\n var entry = bw[i];\r\n var wk = entry[0];\r\n if (wk === w.data.key) {\r\n var isConnectedToBounds_1 = false;\r\n var nonIpEndpoint = (tool.pointsApproximatelyEqual(rw_1.data.startpoint, ip)) ? rw_1.data.endpoint : rw_1.data.startpoint;\r\n var iw = tool.getAllWallsAtIntersection(nonIpEndpoint);\r\n iw.iterator.each(function (ww) {\r\n for (var j = 0; j < bw.length; j++) {\r\n var ee = bw[j];\r\n var wk2 = ee[0];\r\n if (ww.data.key === wk2 && ww.data.key !== rw_1.data.key) {\r\n isConnectedToBounds_1 = true;\r\n }\r\n }\r\n });\r\n if (isConnectedToBounds_1) {\r\n var isW1ConnectedToBounds_1 = false;\r\n var w1NonIpEndpoint_1 = (tool.pointsApproximatelyEqual(w1_1.data.startpoint, ip)) ? w1_1.data.endpoint : w1_1.data.startpoint;\r\n var iw2 = tool.getAllWallsAtIntersection(w1NonIpEndpoint_1);\r\n iw2.remove(w);\r\n iw2.iterator.each(function (ww) {\r\n var _loop_2 = function (j) {\r\n var entry2 = bw[j];\r\n var wk2 = entry2[0];\r\n if (ww.data.key === wk2 && w1_1.data.key !== ww.data.key) {\r\n var ww2_1 = fp.findNodeForKey(wk2);\r\n var ww2OtherEndpoint = (tool.pointsApproximatelyEqual(ww2_1.data.startpoint, w1NonIpEndpoint_1)) ? ww2_1.data.endpoint : ww2_1.data.startpoint;\r\n var iw3 = tool.getAllWallsAtIntersection(ww2OtherEndpoint);\r\n iw3.iterator.each(function (ww3) {\r\n for (var k = 0; k < bw.length; k++) {\r\n var entry3 = bw[k];\r\n var wk3 = entry3[0];\r\n if (wk3 === ww3.data.key && wk3 !== ww2_1.data.key) {\r\n isW1ConnectedToBounds_1 = true;\r\n }\r\n }\r\n });\r\n }\r\n };\r\n for (var j = 0; j < bw.length; j++) {\r\n _loop_2(j);\r\n }\r\n });\r\n var replacementWall = (isW1ConnectedToBounds_1) ? w1_1 : w2_1;\r\n var replacementEntry = tool.getUpdatedEntry(entry, replacementWall);\r\n fp.startTransaction();\r\n var newBounds = bw.slice();\r\n newBounds[i] = replacementEntry;\r\n fp.model.setDataProperty(r.data, 'boundaryWalls', newBounds);\r\n fp.commitTransaction();\r\n }\r\n else {\r\n var wi = new go.List();\r\n wi.add(rw_1);\r\n wi.add(w1_1);\r\n wi.add(w2_1);\r\n wi = fp.sortWallsClockwiseWithSetStartWall(wi, rw_1);\r\n var replacementEntry2 = tool.getUpdatedEntry(entry, wi.toArray()[1]);\r\n var replacementEntry1 = tool.getUpdatedEntry(entry, wi.toArray()[2]);\r\n fp.startTransaction();\r\n var newBounds = bw.slice();\r\n newBounds.splice(i, 1, replacementEntry1);\r\n newBounds.splice(i + 1, 0, replacementEntry2);\r\n fp.model.setDataProperty(r.data, 'boundaryWalls', newBounds);\r\n fp.commitTransaction();\r\n }\r\n }\r\n };\r\n for (var i = 0; i < bw.length; i++) {\r\n _loop_1(i);\r\n }\r\n });\r\n }\r\n var wallParts = fp.findNodesByExample({ group: w.data.key });\r\n var wallsSet = new go.Set();\r\n wallsSet.add(w1_1);\r\n wallsSet.add(w2_1);\r\n tool.maintainWallParts(wallParts, wallsSet);\r\n fp.remove(w);\r\n tool.premiterWall(w1_1);\r\n tool.premiterWall(w2_1);\r\n var w1op = tool.pointsApproximatelyEqual(w1_1.data.startpoint, ip) ? w1_1.data.endpoint : w1_1.data.startpoint;\r\n var w2op = tool.pointsApproximatelyEqual(w2_1.data.startpoint, ip) ? w2_1.data.endpoint : w2_1.data.startpoint;\r\n tool.performMiteringAtPoint(ip, false);\r\n tool.performMiteringAtPoint(w1op, false);\r\n tool.performMiteringAtPoint(w2op, false);\r\n }\r\n };\r\n WallReshapingTool.prototype.splitAllWalls = function () {\r\n var tool = this;\r\n var intersectionPoints = tool.getAllWallIntersectionPoints();\r\n intersectionPoints.iterator.each(function (ips) {\r\n var ip = go.Point.parse(ips);\r\n var wallsInvolved = tool.getAllWallsAtIntersection(ip);\r\n wallsInvolved.iterator.each(function (w) {\r\n var s = w.data.startpoint;\r\n var e = w.data.endpoint;\r\n if (!tool.pointsApproximatelyEqual(s, ip) && !tool.pointsApproximatelyEqual(e, ip)) {\r\n tool.maybePerformWallSplit(w, ip);\r\n }\r\n });\r\n });\r\n };\r\n WallReshapingTool.prototype.areWallsParallel = function (wa, wb) {\r\n var tool = this;\r\n var fp = this.diagram;\r\n var as = wa.data.startpoint;\r\n var ae = wa.data.endpoint;\r\n var bs = wb.data.startpoint;\r\n var be = wb.data.endpoint;\r\n var isParallel = false;\r\n var a1 = +as.directionPoint(ae);\r\n var a2 = +bs.directionPoint(be);\r\n if (Math.abs(a1 - a2) < 1 || (Math.abs(a1 - a2) > 179 && Math.abs(a1 - a2) < 181)) {\r\n isParallel = true;\r\n }\r\n return isParallel;\r\n };\r\n WallReshapingTool.prototype.isWallColinear = function (wa, wb) {\r\n var tool = this;\r\n var fp = this.diagram;\r\n if (wa.data.isDivider !== wb.data.isDivider) {\r\n return false;\r\n }\r\n var as = wa.data.startpoint;\r\n var ae = wa.data.endpoint;\r\n var bs = wb.data.startpoint;\r\n var be = wb.data.endpoint;\r\n var isColinear = false;\r\n if (tool.areWallsParallel(wa, wb)) {\r\n var sharedEndpoint = null;\r\n if (tool.pointsApproximatelyEqual(as, bs) || tool.pointsApproximatelyEqual(as, be)) {\r\n sharedEndpoint = as;\r\n }\r\n else if (tool.pointsApproximatelyEqual(ae, bs) || tool.pointsApproximatelyEqual(ae, be)) {\r\n sharedEndpoint = ae;\r\n }\r\n if (sharedEndpoint !== null) {\r\n var wi = tool.getAllWallsAtIntersection(sharedEndpoint);\r\n var endpointHasNonColinearWall_1 = false;\r\n wi.iterator.each(function (w) {\r\n if (!tool.areWallsParallel(w, wa)) {\r\n endpointHasNonColinearWall_1 = true;\r\n }\r\n });\r\n if (!endpointHasNonColinearWall_1) {\r\n isColinear = true;\r\n }\r\n }\r\n }\r\n return isColinear;\r\n };\r\n WallReshapingTool.prototype.findAllColinearWalls = function (w, set) {\r\n if (set === null || set === undefined) {\r\n set = new go.Set();\r\n }\r\n set.add(w);\r\n var tool = this;\r\n var diagram = tool.diagram;\r\n var walls = diagram.findNodesByExample({ category: 'WallGroup' });\r\n walls.iterator.each(function (ow) {\r\n if (tool.isWallColinear(w, ow) && set !== undefined && !set.contains(ow)) {\r\n set.add(ow);\r\n tool.findAllColinearWalls(ow, set);\r\n }\r\n });\r\n return set;\r\n };\r\n WallReshapingTool.prototype.joinColinearWalls = function () {\r\n var tool = this;\r\n if (tool.handle === null)\r\n return;\r\n var adorn = tool.handle.part;\r\n var reshapingWall = adorn.adornedPart;\r\n var cw1 = tool.findAllColinearWalls(reshapingWall);\r\n var jw = tool.performColinearWallJoining(cw1, reshapingWall);\r\n if (jw !== null) {\r\n tool.joinedWalls.add(jw);\r\n }\r\n var wallsAtReturnPoint = tool.getAllWallsAtIntersection(tool.returnPoint);\r\n if (wallsAtReturnPoint.count === 2) {\r\n var wallsArr = wallsAtReturnPoint.toArray();\r\n var w1 = wallsArr[0];\r\n var w2 = wallsArr[1];\r\n if (tool.isWallColinear(w1, w2)) {\r\n var cw2 = new go.Set();\r\n cw2.add(w1);\r\n cw2.add(w2);\r\n var jw2 = tool.performColinearWallJoining(cw2, w1);\r\n if (jw2 !== null) {\r\n tool.joinedWalls.add(jw2);\r\n }\r\n }\r\n }\r\n };\r\n WallReshapingTool.prototype.performColinearWallJoining = function (colinearWalls, w) {\r\n var tool = this;\r\n var fp = tool.diagram;\r\n var garbage = new go.Set();\r\n var cwf = colinearWalls.first();\r\n if (cwf === null) {\r\n return null;\r\n }\r\n if (w === undefined) {\r\n w = cwf;\r\n }\r\n var acceptedCategory = cwf.data.category;\r\n colinearWalls.iterator.each(function (cw) {\r\n if (cw.data.category !== acceptedCategory) {\r\n return;\r\n }\r\n });\r\n if (colinearWalls.count > 1) {\r\n var pt1_1 = null;\r\n var pt2_1 = null;\r\n var farthestDist_1 = 0;\r\n var cw2_1 = colinearWalls.copy();\r\n var wallParts_1 = new go.Set();\r\n colinearWalls.iterator.each(function (cw1) {\r\n var cwParts = fp.findNodesByExample({ group: cw1.data.key });\r\n wallParts_1.addAll(cwParts);\r\n cw2_1.iterator.each(function (cw2w) {\r\n var s1 = cw1.data.startpoint;\r\n var e1 = cw1.data.endpoint;\r\n var s2 = cw2w.data.startpoint;\r\n var e2 = cw2w.data.endpoint;\r\n var pts1 = [s1, e1];\r\n var pts2 = [s2, e2];\r\n for (var i = 0; i < pts1.length; i++) {\r\n var p1 = pts1[i];\r\n for (var j = 0; j < pts2.length; j++) {\r\n var p2 = pts2[j];\r\n var dist = Math.sqrt(p1.distanceSquaredPoint(p2));\r\n if (dist > farthestDist_1) {\r\n farthestDist_1 = dist;\r\n pt1_1 = p1;\r\n pt2_1 = p2;\r\n }\r\n }\r\n }\r\n });\r\n garbage.add(cw1);\r\n });\r\n var data = {\r\n key: 'wall', category: 'WallGroup', caption: 'Wall', type: 'Wall', color: w.data.color,\r\n startpoint: pt1_1, endpoint: pt2_1, smpt1: pt1_1, smpt2: pt1_1, empt1: pt2_1, empt2: pt2_1,\r\n thickness: w.data.thickness, isGroup: true, notes: '', isDivider: w.data.isDivider\r\n };\r\n fp.model.addNodeData(data);\r\n var newWall_1 = fp.findNodeForData(data);\r\n var rooms = fp.findNodesByExample({ category: 'RoomNode' });\r\n rooms.iterator.each(function (r) {\r\n var bw = r.data.boundaryWalls;\r\n for (var i = 0; i < bw.length; i++) {\r\n var e = bw[i];\r\n var wk = e[0];\r\n var ww = fp.findNodeForKey(wk);\r\n if (colinearWalls.contains(ww)) {\r\n tool.performMiteringOnWall(newWall_1);\r\n var newEntry = tool.getUpdatedEntry(e, newWall_1);\r\n fp.startTransaction();\r\n var newBounds = bw.slice();\r\n newBounds[i] = newEntry;\r\n fp.model.setDataProperty(r.data, 'boundaryWalls', newBounds);\r\n fp.commitTransaction();\r\n }\r\n }\r\n });\r\n var newWallSet = new go.Set();\r\n newWallSet.add(newWall_1);\r\n tool.performMiteringOnWall(newWall_1);\r\n tool.maintainWallParts(wallParts_1, newWallSet);\r\n garbage.iterator.each(function (ww) {\r\n fp.remove(ww);\r\n });\r\n tool.performMiteringOnWall(newWall_1);\r\n return newWall_1;\r\n }\r\n return null;\r\n };\r\n WallReshapingTool.prototype.maintainWallParts = function (wallParts, walls) {\r\n var tool = this;\r\n var fp = tool.diagram;\r\n var garbage = [];\r\n wallParts.iterator.each(function (wp) {\r\n var loc = wp.location;\r\n walls.iterator.each(function (w) {\r\n if (fp.isPointInWall(w, loc)) {\r\n var newLoc = fp.findClosestLocOnWall(w, wp);\r\n if (newLoc !== null) {\r\n fp.model.setDataProperty(wp.data, 'group', w.data.key);\r\n wp.location = newLoc.projectOntoLineSegmentPoint(w.data.startpoint, w.data.endpoint);\r\n if (wp.category === 'WindowNode') {\r\n fp.model.setDataProperty(wp.data, 'height', w.data.thickness);\r\n }\r\n if (wp.category === 'DoorNode') {\r\n fp.model.setDataProperty(wp.data, 'doorOpeningHeight', w.data.thickness);\r\n }\r\n }\r\n else {\r\n garbage.push(wp);\r\n }\r\n }\r\n });\r\n });\r\n for (var i = 0; i < garbage.length; i++) {\r\n fp.remove(garbage[i]);\r\n }\r\n };\r\n WallReshapingTool.prototype.getUpdatedEntry = function (oldEntry, nw) {\r\n var tool = this;\r\n var fp = tool.diagram;\r\n var oldWallKey = oldEntry[0];\r\n var oldWall = fp.findNodeForKey(oldWallKey);\r\n var oldMiteringSide = oldEntry[1];\r\n var newEntry = [nw.data.key, null];\r\n var oms = oldWall.data['smpt' + oldMiteringSide];\r\n var ome = oldWall.data['empt' + oldMiteringSide];\r\n function pointAtX(a, b, x) {\r\n var slope = (b.y - a.y) / (b.x - a.x);\r\n var y = a.y + (x - a.x) * slope;\r\n return new go.Point(x, y);\r\n }\r\n var pt1 = pointAtX(oms, ome, nw.data.smpt1.x);\r\n var pt2 = pointAtX(oms, ome, nw.data.smpt2.x);\r\n var dist1 = nw.data.smpt1.distanceSquaredPoint(pt1);\r\n var dist2 = nw.data.smpt2.distanceSquaredPoint(pt2);\r\n if (dist1 < dist2) {\r\n newEntry[1] = 1;\r\n }\r\n else {\r\n newEntry[1] = 2;\r\n }\r\n return newEntry;\r\n };\r\n WallReshapingTool.prototype.joinAllColinearWalls = function () {\r\n var tool = this;\r\n var diagram = tool.diagram;\r\n var walls = diagram.findNodesByExample({ category: 'WallGroup' });\r\n var handledWalls = new go.Set();\r\n walls.iterator.each(function (w) {\r\n if (!handledWalls.contains(w)) {\r\n handledWalls.add(w);\r\n var colinearWalls = new go.Set();\r\n colinearWalls.add(w);\r\n tool.findAllColinearWalls(w, colinearWalls);\r\n handledWalls.addAll(colinearWalls);\r\n tool.performColinearWallJoining(colinearWalls, w);\r\n }\r\n });\r\n tool.premiterAllWalls();\r\n };\r\n WallReshapingTool.prototype.translateAndRotatePoint = function (point, angle, offset) {\r\n var oldPoint = point.copy();\r\n var newPoint = point.copy();\r\n newPoint.offset(0, offset);\r\n newPoint.offset(-oldPoint.x, -oldPoint.y).rotate(angle).offset(oldPoint.x, oldPoint.y);\r\n return newPoint;\r\n };\r\n WallReshapingTool.prototype.premiterWall = function (w, prop) {\r\n var tool = this;\r\n var diagram = tool.diagram;\r\n var ang = w.data.startpoint.directionPoint(w.data.endpoint);\r\n var t = w.data.thickness;\r\n var sp = w.data.startpoint;\r\n var ep = w.data.endpoint;\r\n switch (prop) {\r\n case 'smpt1': {\r\n var smp1 = tool.translateAndRotatePoint(sp, ang, t / 2);\r\n diagram.model.setDataProperty(w.data, 'smpt1', smp1);\r\n break;\r\n }\r\n case 'smpt2': {\r\n var smp2 = tool.translateAndRotatePoint(sp, ang + 180, t / 2);\r\n diagram.model.setDataProperty(w.data, 'smpt2', smp2);\r\n break;\r\n }\r\n case 'empt1': {\r\n var emp1 = tool.translateAndRotatePoint(ep, ang, t / 2);\r\n diagram.model.setDataProperty(w.data, 'empt1', emp1);\r\n break;\r\n }\r\n case 'empt2': {\r\n var emp2 = tool.translateAndRotatePoint(ep, ang + 180, t / 2);\r\n diagram.model.setDataProperty(w.data, 'empt2', emp2);\r\n break;\r\n }\r\n default: {\r\n var emp1 = tool.translateAndRotatePoint(ep, ang, t / 2);\r\n diagram.model.setDataProperty(w.data, 'empt1', emp1);\r\n var emp2 = tool.translateAndRotatePoint(ep, ang + 180, t / 2);\r\n diagram.model.setDataProperty(w.data, 'empt2', emp2);\r\n var smp1 = tool.translateAndRotatePoint(sp, ang, t / 2);\r\n diagram.model.setDataProperty(w.data, 'smpt1', smp1);\r\n var smp2 = tool.translateAndRotatePoint(sp, ang + 180, t / 2);\r\n diagram.model.setDataProperty(w.data, 'smpt2', smp2);\r\n break;\r\n }\r\n }\r\n diagram.updateWall(w);\r\n };\r\n WallReshapingTool.prototype.premiterAllWalls = function () {\r\n var tool = this;\r\n var diagram = tool.diagram;\r\n var walls = diagram.findNodesByExample({ category: 'WallGroup' });\r\n walls.iterator.each(function (w) {\r\n tool.premiterWall(w);\r\n });\r\n };\r\n WallReshapingTool.prototype.performMiteringOnWall = function (w) {\r\n var tool = this;\r\n var sp = w.data.startpoint;\r\n var ep = w.data.endpoint;\r\n tool.premiterWall(w);\r\n tool.performMiteringAtPoint(sp, true);\r\n tool.performMiteringAtPoint(ep, true);\r\n };\r\n WallReshapingTool.prototype.performMiteringAtPoint = function (pt, performPremitering) {\r\n if (performPremitering === null || performPremitering === undefined) {\r\n performPremitering = true;\r\n }\r\n var tool = this;\r\n var fp = tool.diagram;\r\n var wi = tool.getAllWallsAtIntersection(pt, false);\r\n if (performPremitering) {\r\n wi.iterator.each(function (w) {\r\n if (tool.pointsApproximatelyEqual(w.data.startpoint, pt) || tool.pointsApproximatelyEqual(w.data.endpoint, pt)) {\r\n var prop = (tool.pointsApproximatelyEqual(w.data.startpoint, pt)) ? 's' : 'e';\r\n tool.premiterWall(w, prop + 'mpt1');\r\n tool.premiterWall(w, prop + 'mpt2');\r\n }\r\n });\r\n }\r\n wi.sort(function (a, b) {\r\n var B = fp.getWallsIntersection(a, b);\r\n if (B === null)\r\n return 0;\r\n var as = a.data.startpoint;\r\n var ae = a.data.endpoint;\r\n var bs = b.data.startpoint;\r\n var be = b.data.endpoint;\r\n var A = tool.pointsApproximatelyEqual(pt, as) ? ae : as;\r\n var C = tool.pointsApproximatelyEqual(pt, bs) ? be : bs;\r\n var angA = B.directionPoint(A);\r\n var angB = B.directionPoint(C);\r\n if (angA > angB)\r\n return 1;\r\n else if (angA < angB)\r\n return -1;\r\n else\r\n return 0;\r\n });\r\n wi.reverse();\r\n var wiArr = wi.toArray();\r\n for (var i = 0; i < wiArr.length; i++) {\r\n var wa = wiArr[i];\r\n var wb = null;\r\n if (i + 1 === wiArr.length) {\r\n wb = wiArr[0];\r\n }\r\n else {\r\n wb = wiArr[i + 1];\r\n }\r\n tool.performMitering(wa, wb);\r\n }\r\n };\r\n WallReshapingTool.prototype.performAllMitering = function () {\r\n var tool = this;\r\n var diagram = tool.diagram;\r\n tool.premiterAllWalls();\r\n var intersectionPoints = tool.getAllWallIntersectionPoints();\r\n intersectionPoints.iterator.each(function (ips) {\r\n var ip = go.Point.parse(ips);\r\n var wallsInvolved = tool.getAllWallsAtIntersection(ip);\r\n wallsInvolved.sort(function (a, b) {\r\n var B = diagram.getWallsIntersection(a, b);\r\n if (B === null)\r\n return 0;\r\n var as = a.data.startpoint;\r\n var ae = a.data.endpoint;\r\n var bs = b.data.startpoint;\r\n var be = b.data.endpoint;\r\n var A = tool.pointsApproximatelyEqual(ip, as) ? ae : as;\r\n var C = tool.pointsApproximatelyEqual(ip, bs) ? be : bs;\r\n var angA = B.directionPoint(A);\r\n var angB = B.directionPoint(C);\r\n if (angA > angB)\r\n return 1;\r\n else if (angA < angB)\r\n return -1;\r\n else\r\n return 0;\r\n });\r\n wallsInvolved.reverse();\r\n var wi = wallsInvolved.toArray();\r\n for (var i = 0; i < wi.length; i++) {\r\n var wa = wi[i];\r\n var wb = null;\r\n if (i + 1 === wi.length) {\r\n wb = wi[0];\r\n }\r\n else {\r\n wb = wi[i + 1];\r\n }\r\n if (!wa.data.isDivider && !wb.data.isDivider) {\r\n tool.performMitering(wa, wb);\r\n }\r\n }\r\n });\r\n };\r\n WallReshapingTool.prototype.isClockwise = function (a, b, c) {\r\n return ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)) > 0;\r\n };\r\n WallReshapingTool.prototype.isPointOnSegment = function (a, b, c) {\r\n var ac = Math.sqrt(a.distanceSquaredPoint(c));\r\n var bc = Math.sqrt(b.distanceSquaredPoint(c));\r\n var ab = Math.sqrt(a.distanceSquaredPoint(b));\r\n if (Math.abs(ab - (ac + bc)) <= .1) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n WallReshapingTool.prototype.doMouseUp = function () {\r\n var tool = this;\r\n var fp = this.diagram;\r\n if (tool.handle === null)\r\n return;\r\n tool.doMouseMove();\r\n var adorn = tool.handle.part;\r\n var wall = adorn.adornedPart;\r\n tool.joinColinearWalls();\r\n tool.maybeSplitWall();\r\n tool.joinedWalls.clear();\r\n var set = new go.Set();\r\n set.add(wall);\r\n fp.updateAllRoomBoundaries(set);\r\n this.stopTool();\r\n };\r\n WallReshapingTool.prototype.maybeCreateRoom = function () {\r\n var tool = this;\r\n if (tool.handle === null)\r\n return;\r\n var fp = this.diagram;\r\n var adorn = tool.handle.part;\r\n var wall = adorn.adornedPart;\r\n var reshapedPoint = tool.handle.name === 'ePt' ? wall.data.endpoint : wall.data.startpoint;\r\n var roomCount = fp.findNodesByExample({ category: 'RoomNode' }).count;\r\n if (roomCount === 0) {\r\n var wallsInvolved_1 = tool.getAllWallsAtIntersection(reshapedPoint);\r\n if (wallsInvolved_1.count === 1)\r\n return;\r\n wallsInvolved_1.sort(function (a, b) {\r\n var B = fp.getWallsIntersection(a, b);\r\n if (B === null)\r\n return 0;\r\n var as = a.data.startpoint;\r\n var ae = a.data.endpoint;\r\n var bs = b.data.startpoint;\r\n var be = b.data.endpoint;\r\n var A = tool.pointsApproximatelyEqual(reshapedPoint, as) ? ae : as;\r\n var C = tool.pointsApproximatelyEqual(reshapedPoint, bs) ? be : bs;\r\n var angA = B.directionPoint(A);\r\n var angB = B.directionPoint(C);\r\n if (angA > angB)\r\n return 1;\r\n else if (angA < angB)\r\n return -1;\r\n else\r\n return 0;\r\n });\r\n wallsInvolved_1.iterator.each(function (w) {\r\n var indexOfW = wallsInvolved_1.indexOf(w);\r\n var nextIndex = indexOfW + 1;\r\n if (nextIndex === wallsInvolved_1.length) {\r\n nextIndex = 0;\r\n }\r\n var w2 = wallsInvolved_1.get(nextIndex);\r\n var rc = fp.findNodesByExample({ category: 'RoomNode' }).count;\r\n if (rc === 0) {\r\n tool.tryToAddRoomBetweenTwoWalls(w, w2, reshapedPoint);\r\n }\r\n });\r\n }\r\n };\r\n WallReshapingTool.prototype.tryToAddRoomBetweenTwoWalls = function (w, w2, reshapedPoint) {\r\n var tool = this;\r\n var fp = tool.diagram;\r\n var wOtherPoint = tool.pointsApproximatelyEqual(reshapedPoint, w.data.startpoint) ? w.data.endpoint : w.data.startpoint;\r\n var cwOtherPoint = tool.pointsApproximatelyEqual(reshapedPoint, w2.data.startpoint) ? w2.data.endpoint : w2.data.startpoint;\r\n var a1 = reshapedPoint.directionPoint(wOtherPoint);\r\n var a2 = reshapedPoint.directionPoint(cwOtherPoint);\r\n var ang = Math.abs(a1 - a2 + 360) % 360;\r\n var ang2 = (ang + 180) % 360;\r\n var halfAng1 = a2 + (ang / 2) % 360;\r\n var halfAng2 = (halfAng1 + 180) % 360;\r\n var pt1 = tool.translateAndRotatePoint(reshapedPoint, halfAng1 - 90, 15);\r\n var pt2 = tool.translateAndRotatePoint(reshapedPoint, halfAng2 - 90, 15);\r\n if (!fp.maybeAddRoomNode(pt1, 'images/textures/floor1.jpg')) {\r\n fp.maybeAddRoomNode(pt2, 'images/textures/floor1.jpg');\r\n }\r\n };\r\n WallReshapingTool.prototype.doDeactivate = function () {\r\n var tool = this;\r\n var diagram = this.diagram;\r\n var fp = diagram;\r\n if (this.handle === null)\r\n return;\r\n var adorn = this.handle.part;\r\n var wall = adorn.adornedPart;\r\n var sPt = wall.data.startpoint;\r\n var ePt = wall.data.endpoint;\r\n var length = Math.sqrt(sPt.distanceSquared(ePt.x, ePt.y));\r\n if (length < 1) {\r\n diagram.remove(wall);\r\n wall.memberParts.iterator.each(function (member) { diagram.remove(member); });\r\n var wallDimensionLinkPointNodes_1 = [];\r\n fp.pointNodes.iterator.each(function (node) { if (node.data.key.indexOf(wall.data.key) !== -1)\r\n wallDimensionLinkPointNodes_1.push(node); });\r\n if (wallDimensionLinkPointNodes_1.length === 2) {\r\n diagram.remove(wallDimensionLinkPointNodes_1[0]);\r\n diagram.remove(wallDimensionLinkPointNodes_1[1]);\r\n }\r\n }\r\n if (diagram.lastInput.key === 'Esc' && !this.isBuilding) {\r\n diagram.skipsUndoManager = true;\r\n diagram.startTransaction('reset to old data');\r\n if (this.handle.name === 'sPt')\r\n wall.data.startpoint = this.returnPoint;\r\n else\r\n wall.data.endpoint = this.returnPoint;\r\n this.performAllMitering();\r\n fp.updateWall(wall);\r\n if (this.returnData) {\r\n this.returnData.iterator.each(function (kvp) {\r\n var key = kvp.key;\r\n var loc = kvp.value;\r\n var wallPart = diagram.findPartForKey(key);\r\n wallPart.location = loc;\r\n wallPart.rotateObject.angle = wall.rotateObject.angle;\r\n });\r\n }\r\n diagram.commitTransaction('reset to old data');\r\n diagram.skipsUndoManager = false;\r\n }\r\n var glPoints = this.diagram.findNodesByExample({ category: 'GLPointNode' });\r\n diagram.removeParts(glPoints, true);\r\n fp.updateWallDimensions();\r\n tool.maybeCreateRoom();\r\n diagram.commitTransaction(this.name);\r\n this.isActive = false;\r\n };\r\n WallReshapingTool.prototype.makeAdornment = function (selelt) {\r\n var adornment = new go.Adornment();\r\n adornment.type = go.Panel.Spot;\r\n adornment.locationObjectName = 'BODY';\r\n adornment.locationSpot = go.Spot.Center;\r\n var h = new go.Shape();\r\n h.name = 'BODY';\r\n h.fill = null;\r\n h.stroke = null;\r\n h.strokeWidth = 0;\r\n adornment.add(h);\r\n h = this.makeHandle();\r\n h.name = 'sPt';\r\n adornment.add(h);\r\n h = this.makeHandle();\r\n h.name = 'ePt';\r\n adornment.add(h);\r\n adornment.category = this.name;\r\n adornment.adornedObject = selelt;\r\n return adornment;\r\n };\r\n WallReshapingTool.prototype.makeHandle = function () {\r\n var h = this.handleArchetype;\r\n return h.copy();\r\n };\r\n WallReshapingTool.prototype.calcAngleAndLengthFromHandle = function (mousePt) {\r\n var tool = this;\r\n var h = this.handle;\r\n if (h === null)\r\n return;\r\n if (tool.adornedShape === null)\r\n return;\r\n var otherH = null;\r\n var node = tool.adornedShape.part;\r\n if (node === null)\r\n return;\r\n var adornments = node.adornments.iterator;\r\n var adornment;\r\n while (adornments.next()) {\r\n var a = adornments.value;\r\n if (a.category === tool.name) {\r\n adornment = a;\r\n }\r\n }\r\n if (adornment === undefined)\r\n return;\r\n var atr = adornment.elements;\r\n while (atr.next()) {\r\n var e = atr.value;\r\n if (e.name !== undefined && e.name !== h.name) {\r\n otherH = e;\r\n }\r\n }\r\n if (otherH === null)\r\n return;\r\n var otherHandlePt = otherH.getDocumentPoint(go.Spot.Center);\r\n var deltaY = mousePt.y - otherHandlePt.y;\r\n var deltaX = mousePt.x - otherHandlePt.x;\r\n var angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI);\r\n if (angle < 0)\r\n angle += 360;\r\n tool.angle = angle;\r\n var distanceBetween = Math.sqrt(mousePt.distanceSquared(otherHandlePt.x, otherHandlePt.y));\r\n tool.length = distanceBetween;\r\n };\r\n WallReshapingTool.prototype.snapPointToGrid = function (point) {\r\n var diagram = this.diagram;\r\n var gs = diagram.toolManager.draggingTool.isGridSnapEnabled ? diagram.model.modelData.gridSize : 1;\r\n var newx = gs * Math.round(point.x / gs);\r\n var newy = gs * Math.round(point.y / gs);\r\n var newPt = new go.Point(newx, newy);\r\n return newPt;\r\n };\r\n WallReshapingTool.prototype.reshape = function (newPoint) {\r\n var diagram = this.diagram;\r\n var tool = this;\r\n var shape = this.adornedShape;\r\n if (shape === null)\r\n return;\r\n if (tool.handle === null)\r\n return;\r\n var node = shape.part;\r\n if (node === null)\r\n return;\r\n if (this.diagram.lastInput.shift && !this.isIntersecting) {\r\n var sPt = void 0;\r\n if (tool.handle.name === 'sPt')\r\n sPt = node.data.endpoint;\r\n else\r\n sPt = node.data.startpoint;\r\n var oldGridSize = diagram.model.modelData.gridSize;\r\n var gridSize = diagram.model.modelData.gridSize;\r\n if (!(this.diagram.toolManager.draggingTool.isGridSnapEnabled))\r\n gridSize = 1;\r\n var angle = tool.angle;\r\n var length_2 = tool.length;\r\n if (angle > 67.5 && angle < 112.5) {\r\n var newy = sPt.y + length_2;\r\n newy = gridSize * Math.round(newy / gridSize);\r\n newPoint = new go.Point(sPt.x, newy);\r\n }\r\n if (angle > 112.5 && angle < 202.5) {\r\n var newx = sPt.x - length_2;\r\n newx = gridSize * Math.round(newx / gridSize);\r\n newPoint = new go.Point(newx, sPt.y);\r\n }\r\n if (angle > 247.5 && angle < 292.5) {\r\n var newy = sPt.y - length_2;\r\n newy = gridSize * Math.round(newy / gridSize);\r\n newPoint = new go.Point(sPt.x, newy);\r\n }\r\n if (angle > 337.5 || angle < 22.5) {\r\n var newx = sPt.x + length_2;\r\n newx = gridSize * Math.round(newx / gridSize);\r\n newPoint = new go.Point(newx, sPt.y);\r\n }\r\n if (angle > 22.5 && angle < 67.5) {\r\n var newx = (Math.sin(.785) * length_2);\r\n newx = gridSize * Math.round(newx / gridSize) + sPt.x;\r\n var newy = (Math.cos(.785) * length_2);\r\n newy = gridSize * Math.round(newy / gridSize) + sPt.y;\r\n newPoint = new go.Point(newx, newy);\r\n }\r\n if (angle > 112.5 && angle < 157.5) {\r\n var newx = (Math.sin(.785) * length_2);\r\n newx = sPt.x - (gridSize * Math.round(newx / gridSize));\r\n var newy = (Math.cos(.785) * length_2);\r\n newy = gridSize * Math.round(newy / gridSize) + sPt.y;\r\n newPoint = new go.Point(newx, newy);\r\n }\r\n if (angle > 202.5 && angle < 247.5) {\r\n var newx = (Math.sin(.785) * length_2);\r\n newx = sPt.x - (gridSize * Math.round(newx / gridSize));\r\n var newy = (Math.cos(.785) * length_2);\r\n newy = sPt.y - (gridSize * Math.round(newy / gridSize));\r\n newPoint = new go.Point(newx, newy);\r\n }\r\n if (angle > 292.5 && angle < 337.5) {\r\n var newx = (Math.sin(.785) * length_2);\r\n newx = sPt.x + (gridSize * Math.round(newx / gridSize));\r\n var newy = (Math.cos(.785) * length_2);\r\n newy = sPt.y - (gridSize * Math.round(newy / gridSize));\r\n newPoint = new go.Point(newx, newy);\r\n }\r\n gridSize = oldGridSize;\r\n }\r\n if (this.diagram.toolManager.draggingTool.isGridSnapEnabled && !tool.isIntersecting && !this.diagram.lastInput.shift) {\r\n newPoint = this.snapPointToGrid(newPoint);\r\n }\r\n else {\r\n newPoint = new go.Point(newPoint.x, newPoint.y);\r\n }\r\n var type = tool.handle.name;\r\n if (type === undefined)\r\n return;\r\n var stationaryPt = (type === 'sPt') ? node.data.endpoint : node.data.startpoint;\r\n var movingPt = (type === 'sPt') ? node.data.startpoint : node.data.endpoint;\r\n this.reshapeWall(node, stationaryPt, movingPt, newPoint, diagram);\r\n this.updateAdornments(node);\r\n this.showMatches();\r\n var fp = diagram;\r\n fp.updateWallDimensions();\r\n };\r\n WallReshapingTool.prototype.showMatches = function () {\r\n var tool = this;\r\n var diagram = tool.diagram;\r\n if (!diagram.model.modelData.preferences.showWallGuidelines)\r\n return;\r\n if (tool.adornedShape === null)\r\n return;\r\n if (tool.handle === null)\r\n return;\r\n var wall = tool.adornedShape.part;\r\n var comparePt;\r\n if (tool.handle.name === 'sPt')\r\n comparePt = wall.data.startpoint;\r\n else\r\n comparePt = wall.data.endpoint;\r\n var hWall = tool.adornedShape.part;\r\n var glPoints = diagram.findNodesByExample({ category: 'GLPointNode' });\r\n diagram.removeParts(glPoints, true);\r\n var walls = this.diagram.findNodesByExample({ category: 'WallGroup' });\r\n walls.iterator.each(function (w) {\r\n if (hWall !== null && w.data.key !== hWall.data.key) {\r\n var shape = w.findObject('SHAPE');\r\n var pt1 = w.data.startpoint;\r\n var pt2 = w.data.endpoint;\r\n tool.checkPtLinedUp(pt1, comparePt.x, pt1.x, comparePt);\r\n tool.checkPtLinedUp(pt1, comparePt.y, pt1.y, comparePt);\r\n tool.checkPtLinedUp(pt2, comparePt.x, pt2.x, comparePt);\r\n tool.checkPtLinedUp(pt2, comparePt.y, pt2.y, comparePt);\r\n }\r\n });\r\n };\r\n WallReshapingTool.prototype.checkPtLinedUp = function (pt, comparePtCoord, ptCoord, comparePt) {\r\n function makeGuideLinePoint() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Node, 'Spot', { locationSpot: go.Spot.TopLeft, locationObjectName: 'SHAPE', desiredSize: new go.Size(1, 1) }, new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify), $(go.Shape, { stroke: null, strokeWidth: 1, name: 'SHAPE', fill: 'black' }));\r\n }\r\n function makeGuideLineLink() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Link, $(go.Shape, { stroke: 'black', strokeWidth: 2, name: 'SHAPE' }, new go.Binding('strokeWidth', 'width'), new go.Binding('stroke', 'stroke')));\r\n }\r\n var diagram = this.diagram;\r\n var errorMargin = Math.abs(comparePtCoord - ptCoord);\r\n if (errorMargin < 2) {\r\n var data = { category: 'GLPointNode', loc: go.Point.stringify(pt), key: 'glpt' };\r\n var data2 = { key: 'movingPt', category: 'GLPointNode', loc: go.Point.stringify(comparePt) };\r\n var data3 = { key: 'guideline', category: 'guideLine', from: 'movingPt', to: data.key, stroke: 'blue' };\r\n var GLPoint1 = makeGuideLinePoint();\r\n var GLPoint2 = makeGuideLinePoint();\r\n var GLLink = makeGuideLineLink();\r\n diagram.add(GLPoint1);\r\n diagram.add(GLPoint2);\r\n diagram.add(GLLink);\r\n GLPoint1.data = data;\r\n GLPoint2.data = data2;\r\n GLLink.data = data3;\r\n GLLink.fromNode = GLPoint1;\r\n GLLink.toNode = GLPoint2;\r\n }\r\n };\r\n WallReshapingTool.prototype.reshapeWall = function (wall, stationaryPoint, movingPoint, newPoint, diagram) {\r\n var tool = this;\r\n var wallParts = wall.memberParts;\r\n var arr = [];\r\n var oldAngle = wall.data.startpoint.directionPoint(wall.data.endpoint);\r\n wallParts.iterator.each(function (part) { arr.push(part); });\r\n var distancesMap = new go.Map();\r\n var closestPart = null;\r\n var closestDistance = Number.MAX_VALUE;\r\n for (var i = 0; i < arr.length; i++) {\r\n var part = arr[i];\r\n var distanceToStationaryPt = Math.sqrt(part.location.distanceSquaredPoint(stationaryPoint));\r\n distancesMap.add(part.data.key, distanceToStationaryPt);\r\n var endpoints = tool.getWallPartEndpoints(part);\r\n var distanceToMovingPt = Math.min(Math.sqrt(endpoints[0].distanceSquaredPoint(movingPoint)), Math.sqrt(endpoints[1].distanceSquaredPoint(movingPoint)));\r\n if (distanceToMovingPt < closestDistance) {\r\n closestDistance = distanceToMovingPt;\r\n closestPart = part;\r\n }\r\n }\r\n if (closestPart !== null) {\r\n var loc = closestPart.location;\r\n var partLength = closestPart.data.length;\r\n var angle = oldAngle;\r\n var point1 = new go.Point((loc.x + (partLength / 2)), loc.y);\r\n var point2 = new go.Point((loc.x - (partLength / 2)), loc.y);\r\n point1.offset(-loc.x, -loc.y).rotate(angle).offset(loc.x, loc.y);\r\n point2.offset(-loc.x, -loc.y).rotate(angle).offset(loc.x, loc.y);\r\n var distance1 = Math.sqrt(stationaryPoint.distanceSquaredPoint(point1));\r\n var distance2 = Math.sqrt(stationaryPoint.distanceSquaredPoint(point2));\r\n var minLength = void 0;\r\n var newLoc = void 0;\r\n if (distance1 > distance2) {\r\n minLength = distance1;\r\n newLoc = point1;\r\n }\r\n else {\r\n minLength = distance2;\r\n newLoc = point2;\r\n }\r\n var testDistance = Math.sqrt(stationaryPoint.distanceSquaredPoint(newPoint));\r\n if (testDistance < minLength)\r\n newPoint = newLoc;\r\n }\r\n if (movingPoint === wall.data.endpoint) {\r\n diagram.model.setDataProperty(wall.data, 'endpoint', newPoint);\r\n }\r\n else {\r\n diagram.model.setDataProperty(wall.data, 'startpoint', newPoint);\r\n }\r\n var fp = diagram;\r\n fp.updateWall(wall);\r\n distancesMap.iterator.each(function (kvp) {\r\n var wallPart = diagram.findPartForKey(kvp.key);\r\n var distance = kvp.value;\r\n var wallLength = Math.sqrt(stationaryPoint.distanceSquaredPoint(movingPoint));\r\n var newLoc = new go.Point(stationaryPoint.x + ((distance / wallLength) * (movingPoint.x - stationaryPoint.x)), stationaryPoint.y + ((distance / wallLength) * (movingPoint.y - stationaryPoint.y)));\r\n wallPart.location = newLoc;\r\n var sToE = wall.data.startpoint.directionPoint(wall.data.endpoint);\r\n var eToS = wall.data.endpoint.directionPoint(wall.data.startpoint);\r\n var diffS = Math.abs(wallPart.angle - sToE);\r\n var diffE = Math.abs(wallPart.angle - eToS);\r\n var newAngle = (diffS < diffE) ? sToE : eToS;\r\n wallPart.angle = newAngle;\r\n });\r\n };\r\n WallReshapingTool.prototype.getWallPartEndpoints = function (wallPart) {\r\n var loc = wallPart.location;\r\n var partLength = wallPart.data.length;\r\n var angle = 0;\r\n if (wallPart.containingGroup !== null)\r\n angle = wallPart.containingGroup.rotateObject.angle;\r\n else\r\n angle = 180;\r\n var point1 = new go.Point((loc.x + (partLength / 2)), loc.y);\r\n var point2 = new go.Point((loc.x - (partLength / 2)), loc.y);\r\n point1.offset(-loc.x, -loc.y).rotate(angle).offset(loc.x, loc.y);\r\n point2.offset(-loc.x, -loc.y).rotate(angle).offset(loc.x, loc.y);\r\n var arr = [];\r\n arr.push(point1);\r\n arr.push(point2);\r\n return arr;\r\n };\r\n return WallReshapingTool;\r\n}(go.Tool));\r\nexports.WallReshapingTool = WallReshapingTool;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nmodule.exports = {\r\n Floorplan: require('./Floorplan').Floorplan,\r\n FloorplanPalette: require('./FloorplanPalette').FloorplanPalette,\r\n WallBuildingTool: require('./WallBuildingTool').WallBuildingTool,\r\n WallReshapingTool: require('./WallReshapingTool').WallReshapingTool\r\n};\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar go = require(\"gojs/release/go\");\r\nvar NodeLabelDraggingTool_1 = require(\"./NodeLabelDraggingTool\");\r\nvar WallBuildingTool_1 = require(\"./WallBuildingTool\");\r\nvar WallReshapingTool_1 = require(\"./WallReshapingTool\");\r\nvar Floorplan = (function (_super) {\r\n __extends(Floorplan, _super);\r\n function Floorplan(div) {\r\n var _this = _super.call(this, div) || this;\r\n _this._palettes = [];\r\n _this._pointNodes = new go.Set();\r\n _this._dimensionLinks = new go.Set();\r\n _this._angleNodes = new go.Set();\r\n var $ = go.GraphObject.make;\r\n _this.allowLink = false;\r\n _this.undoManager.isEnabled = true;\r\n _this.layout.isInitial = false;\r\n _this.layout.isOngoing = false;\r\n _this.model = $(go.GraphLinksModel, {\r\n modelData: {\r\n 'units': 'inches',\r\n 'unitsAbbreviation': 'in',\r\n 'unitsConversionFactor': .5,\r\n 'gridSize': 6,\r\n 'wallThickness': 10,\r\n 'preferences': {\r\n showWallGuidelines: true,\r\n showWallLengths: true,\r\n showWallAngles: true,\r\n showOnlySmallWallAngles: true,\r\n showGrid: true,\r\n gridSnap: true\r\n }\r\n }\r\n });\r\n _this.grid = $(go.Panel, 'Grid', { gridCellSize: new go.Size(_this.model.modelData.gridSize, _this.model.modelData.gridSize), visible: true }, $(go.Shape, 'LineH', { stroke: 'lightgray' }), $(go.Shape, 'LineV', { stroke: 'lightgray' }));\r\n _this.contextMenu = makeContextMenu();\r\n _this.commandHandler.canGroupSelection = function () { return true; };\r\n _this.commandHandler.canUngroupSelection = function () { return true; };\r\n _this.commandHandler.archetypeGroupData = { isGroup: true };\r\n _this.addDiagramListener('SelectionCopied', function (e) {\r\n var fp = e.diagram;\r\n fp.selection.iterator.each(function (part) {\r\n if (part.category === 'WallGroup') {\r\n var w = part;\r\n fp.updateWall(w);\r\n }\r\n });\r\n });\r\n _this.addDiagramListener('ExternalObjectsDropped', function (e) {\r\n var garbage = [];\r\n var fp = e.diagram;\r\n fp.selection.iterator.each(function (node) {\r\n if (node.category === 'FloorNode') {\r\n var floorNode = node;\r\n var pt = fp.lastInput.documentPoint;\r\n fp.maybeAddRoomNode(pt, floorNode.data.floorImage);\r\n garbage.push(floorNode);\r\n }\r\n });\r\n for (var i in garbage) {\r\n e.diagram.remove(garbage[i]);\r\n }\r\n });\r\n _this.addDiagramListener('ClipboardPasted', function (e) {\r\n var fp = e.diagram;\r\n e.diagram.selection.iterator.each(function (node) {\r\n if (node.category === 'WallGroup') {\r\n var w = node;\r\n fp.updateWall(w);\r\n }\r\n });\r\n });\r\n _this.addDiagramListener('ChangedSelection', function (e) {\r\n var floorplan = e.diagram;\r\n floorplan.skipsUndoManager = true;\r\n floorplan.startTransaction('remove dimension links and angle nodes');\r\n floorplan.pointNodes.iterator.each(function (node) { e.diagram.remove(node); });\r\n floorplan.dimensionLinks.iterator.each(function (link) { e.diagram.remove(link); });\r\n var missedDimensionLinks = [];\r\n floorplan.links.iterator.each(function (link) { if (link.data.category === 'DimensionLink')\r\n missedDimensionLinks.push(link); });\r\n for (var i = 0; i < missedDimensionLinks.length; i++) {\r\n e.diagram.remove(missedDimensionLinks[i]);\r\n }\r\n floorplan.pointNodes.clear();\r\n floorplan.dimensionLinks.clear();\r\n floorplan.angleNodes.iterator.each(function (node) { e.diagram.remove(node); });\r\n floorplan.angleNodes.clear();\r\n floorplan.commitTransaction('remove dimension links and angle nodes');\r\n floorplan.skipsUndoManager = false;\r\n floorplan.updateWallDimensions();\r\n floorplan.updateWallAngles();\r\n });\r\n _this.addDiagramListener('SelectionDeleted', function (e) {\r\n var wrt = e.diagram.toolManager.mouseDownTools.elt(3);\r\n wrt.joinAllColinearWalls();\r\n wrt.splitAllWalls();\r\n wrt.performAllMitering();\r\n var deletedParts = e.subject;\r\n var walls = new go.Set();\r\n deletedParts.iterator.each(function (p) {\r\n if (p instanceof go.Group && p.data.category === 'WallGroup') {\r\n var w = p;\r\n walls.add(w);\r\n }\r\n });\r\n var fp = e.diagram;\r\n fp.updateAllRoomBoundaries(walls);\r\n });\r\n _this.nodeTemplateMap.add('', makeDefaultNode());\r\n _this.nodeTemplateMap.add('MultiPurposeNode', makeMultiPurposeNode());\r\n _this.nodeTemplateMap.add('WindowNode', makeWindowNode());\r\n _this.nodeTemplateMap.add('PaletteWallNode', makePaletteWallNode());\r\n _this.nodeTemplateMap.add('DoorNode', makeDoorNode());\r\n _this.nodeTemplateMap.add('RoomNode', makeRoomNode());\r\n _this.groupTemplateMap.add('', makeDefaultGroup());\r\n _this.groupTemplateMap.add('WallGroup', makeWallGroup());\r\n var wallBuildingTool = new WallBuildingTool_1.WallBuildingTool();\r\n _this.toolManager.mouseDownTools.insertAt(0, wallBuildingTool);\r\n var wallReshapingTool = new WallReshapingTool_1.WallReshapingTool();\r\n _this.toolManager.mouseDownTools.insertAt(3, wallReshapingTool);\r\n wallBuildingTool.isEnabled = false;\r\n var nodeLabelDraggingTool = new NodeLabelDraggingTool_1.NodeLabelDraggingTool();\r\n _this.toolManager.mouseMoveTools.insertAt(0, nodeLabelDraggingTool);\r\n _this.toolManager.draggingTool.doMouseUp = function () {\r\n go.DraggingTool.prototype.doMouseUp.call(this);\r\n var fp = this.diagram;\r\n fp.updateWallAngles();\r\n this.isGridSnapEnabled = this.diagram.model.modelData.preferences.gridSnap;\r\n };\r\n _this.toolManager.draggingTool.doMouseMove = function () {\r\n if (this.diagram.lastInput.shift) {\r\n this.isGridSnapEnabled = false;\r\n }\r\n else\r\n this.isGridSnapEnabled = this.diagram.model.modelData.preferences.gridSnap;\r\n go.DraggingTool.prototype.doMouseMove.call(this);\r\n };\r\n _this.toolManager.resizingTool.doMouseMove = function () {\r\n var floorplan = this.diagram;\r\n var node = this.adornedObject;\r\n floorplan.updateWallDimensions();\r\n go.ResizingTool.prototype.doMouseMove.call(this);\r\n };\r\n _this.toolManager.resizingTool.computeMaxSize = function () {\r\n var tool = this;\r\n var adornedObject = tool.adornedObject;\r\n if (adornedObject !== null) {\r\n var obj_1 = adornedObject.part;\r\n var wall = null;\r\n if (obj_1 !== null) {\r\n wall = this.diagram.findPartForKey(obj_1.data.group);\r\n }\r\n if ((wall !== null && obj_1 !== null && (obj_1.category === 'DoorNode' || obj_1.category === 'WindowNode'))) {\r\n var stationaryPt_1 = null;\r\n var movingPt_1 = null;\r\n var resizeAdornment = null;\r\n var oitr = obj_1.adornments.iterator;\r\n while (oitr.next()) {\r\n var adorn = oitr.value;\r\n if (adorn.name === 'WallPartResizeAdornment') {\r\n resizeAdornment = adorn;\r\n }\r\n }\r\n if (resizeAdornment !== null) {\r\n var ritr = resizeAdornment.elements.iterator;\r\n while (ritr.next()) {\r\n var el = ritr.value;\r\n var handle = tool.handle;\r\n if (handle !== null) {\r\n if (el instanceof go.Shape && el.alignment === handle.alignment) {\r\n movingPt_1 = el.getDocumentPoint(go.Spot.Center);\r\n }\r\n if (el instanceof go.Shape && el.alignment !== handle.alignment) {\r\n stationaryPt_1 = el.getDocumentPoint(go.Spot.Center);\r\n }\r\n }\r\n }\r\n }\r\n var constrainingPt_1;\r\n var closestDist_1 = Number.MAX_VALUE;\r\n wall.memberParts.iterator.each(function (part) {\r\n if (part.data.key !== obj_1.data.key) {\r\n var endpoints = getWallPartEndpoints(part);\r\n for (var i = 0; i < endpoints.length; i++) {\r\n var point = endpoints[i];\r\n var distanceToMovingPt = Math.sqrt(point.distanceSquaredPoint(movingPt_1));\r\n if (distanceToMovingPt < closestDist_1) {\r\n var distanceToStationaryPt = Math.sqrt(point.distanceSquaredPoint(stationaryPt_1));\r\n if (distanceToStationaryPt > distanceToMovingPt) {\r\n closestDist_1 = distanceToMovingPt;\r\n constrainingPt_1 = point;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n if (constrainingPt_1 === undefined || constrainingPt_1 === null) {\r\n if (wall.data.startpoint.distanceSquaredPoint(movingPt_1) > wall.data.startpoint.distanceSquaredPoint(stationaryPt_1))\r\n constrainingPt_1 = wall.data.endpoint;\r\n else\r\n constrainingPt_1 = wall.data.startpoint;\r\n }\r\n var maxLength = 0;\r\n if (stationaryPt_1 !== null) {\r\n maxLength = Math.sqrt(stationaryPt_1.distanceSquaredPoint(constrainingPt_1));\r\n }\r\n return new go.Size(maxLength, wall.data.thickness);\r\n }\r\n }\r\n return go.ResizingTool.prototype.computeMaxSize.call(tool);\r\n };\r\n _this.toolManager.draggingTool.isGridSnapEnabled = true;\r\n return _this;\r\n }\r\n Object.defineProperty(Floorplan.prototype, \"palettes\", {\r\n get: function () { return this._palettes; },\r\n set: function (value) { this._palettes = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Floorplan.prototype, \"pointNodes\", {\r\n get: function () { return this._pointNodes; },\r\n set: function (value) { this._pointNodes = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Floorplan.prototype, \"dimensionLinks\", {\r\n get: function () { return this._dimensionLinks; },\r\n set: function (value) { this._dimensionLinks = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Floorplan.prototype, \"angleNodes\", {\r\n get: function () { return this._angleNodes; },\r\n set: function (value) { this._angleNodes = value; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Floorplan.prototype.convertInchesToFeetAndInches = function (numInches) {\r\n var numFeet = Math.floor(numInches / 12);\r\n var inchesRemainder = numInches % 12;\r\n return {\r\n feet: numFeet,\r\n inches: inchesRemainder\r\n };\r\n };\r\n Floorplan.prototype.convertSquareUnitsToFeetSquared = function (num, units) {\r\n switch (units) {\r\n case 'feet': {\r\n return num;\r\n }\r\n case 'inches': {\r\n return num * .00694444;\r\n }\r\n case 'centimeters': {\r\n return num * .00107639;\r\n }\r\n case 'meters': {\r\n return num * 10.7639;\r\n }\r\n }\r\n return -1;\r\n };\r\n Floorplan.prototype.convertPixelsToUnits = function (num) {\r\n var units = this.model.modelData.units;\r\n var factor = this.model.modelData.unitsConversionFactor;\r\n return num * factor;\r\n };\r\n Floorplan.prototype.convertUnitsToPixels = function (num) {\r\n var units = this.model.modelData.units;\r\n var factor = this.model.modelData.unitsConversionFactor;\r\n return num / factor;\r\n };\r\n Floorplan.prototype.getUnitsAbbreviation = function (units) {\r\n switch (units) {\r\n case 'centimeters': {\r\n return 'cm';\r\n }\r\n case 'meters': {\r\n return 'm';\r\n }\r\n case 'inches': {\r\n return 'in';\r\n }\r\n case 'feet': {\r\n return 'ft';\r\n }\r\n }\r\n return units;\r\n };\r\n Floorplan.prototype.convertUnits = function (oldUnits, newUnits, num) {\r\n var fp = this;\r\n var newNum = num;\r\n oldUnits = fp.getUnitsAbbreviation(oldUnits);\r\n newUnits = fp.getUnitsAbbreviation(newUnits);\r\n switch (oldUnits) {\r\n case 'cm': {\r\n switch (newUnits) {\r\n case 'm': {\r\n newNum *= .01;\r\n break;\r\n }\r\n case 'ft': {\r\n newNum *= 0.0328084;\r\n break;\r\n }\r\n case 'in': {\r\n newNum *= 0.393701;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case 'm': {\r\n switch (newUnits) {\r\n case 'cm': {\r\n newNum *= 100;\r\n break;\r\n }\r\n case 'ft': {\r\n newNum *= 3.28084;\r\n break;\r\n }\r\n case 'in': {\r\n newNum *= 39.3701;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case 'ft': {\r\n switch (newUnits) {\r\n case 'cm': {\r\n newNum *= 30.48;\r\n break;\r\n }\r\n case 'm': {\r\n newNum *= 0.3048;\r\n break;\r\n }\r\n case 'in': {\r\n newNum *= 12;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case 'in': {\r\n switch (newUnits) {\r\n case 'cm': {\r\n newNum *= 2.54;\r\n break;\r\n }\r\n case 'm': {\r\n newNum *= 0.0254;\r\n break;\r\n }\r\n case 'ft': {\r\n newNum *= 0.0833333;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return newNum;\r\n };\r\n Floorplan.prototype.makeDefaultFurniturePaletteNodeData = function () {\r\n return FURNITURE_NODE_DATA_ARRAY;\r\n };\r\n Floorplan.prototype.makeDefaultWallpartsPaletteNodeData = function () {\r\n return WALLPARTS_NODE_DATA_ARRAY;\r\n };\r\n Floorplan.prototype.enableWallBuilding = function () {\r\n var fp = this;\r\n var wallBuildingTool = fp.toolManager.mouseDownTools.elt(0);\r\n wallBuildingTool.isBuildingDivider = false;\r\n var wallReshapingTool = fp.toolManager.mouseDownTools.elt(3);\r\n wallBuildingTool.isEnabled = true;\r\n wallReshapingTool.isEnabled = false;\r\n fp.currentCursor = 'crosshair';\r\n fp.nodes.iterator.each(function (n) { n.clearAdornments(); });\r\n fp.clearSelection();\r\n };\r\n Floorplan.prototype.enableDividerBuilding = function () {\r\n var fp = this;\r\n var wallBuildingTool = fp.toolManager.mouseDownTools.elt(0);\r\n fp.enableWallBuilding();\r\n wallBuildingTool.isBuildingDivider = true;\r\n fp.currentCursor = 'crosshair';\r\n };\r\n Floorplan.prototype.disableWallBuilding = function () {\r\n var fp = this;\r\n var wallBuildingTool = fp.toolManager.mouseDownTools.elt(0);\r\n var wallReshapingTool = fp.toolManager.mouseDownTools.elt(3);\r\n wallBuildingTool.isEnabled = false;\r\n wallReshapingTool.isEnabled = true;\r\n wallBuildingTool.isBuildingDivider = false;\r\n fp.currentCursor = '';\r\n fp.nodes.iterator.each(function (n) { n.clearAdornments(); });\r\n fp.clearSelection();\r\n };\r\n Floorplan.prototype.checkboxChanged = function (checkboxId) {\r\n var floorplan = this;\r\n floorplan.skipsUndoManager = true;\r\n floorplan.startTransaction('change preference');\r\n var element = document.getElementById(checkboxId);\r\n switch (checkboxId) {\r\n case 'showGridCheckbox': {\r\n floorplan.grid.visible = element.checked;\r\n floorplan.model.modelData.preferences.showGrid = element.checked;\r\n break;\r\n }\r\n case 'gridSnapCheckbox': {\r\n floorplan.toolManager.draggingTool.isGridSnapEnabled = element.checked;\r\n floorplan.model.modelData.preferences.gridSnap = element.checked;\r\n break;\r\n }\r\n case 'wallGuidelinesCheckbox':\r\n floorplan.model.modelData.preferences.showWallGuidelines = element.checked;\r\n break;\r\n case 'wallLengthsCheckbox':\r\n floorplan.model.modelData.preferences.showWallLengths = element.checked;\r\n floorplan.updateWallDimensions();\r\n break;\r\n case 'wallAnglesCheckbox':\r\n floorplan.model.modelData.preferences.showWallAngles = element.checked;\r\n floorplan.updateWallAngles();\r\n break;\r\n case 'onlySmallWallAnglesCheckbox': {\r\n floorplan.model.modelData.preferences.showOnlySmallWallAngles = element.checked;\r\n floorplan.updateWallAngles();\r\n break;\r\n }\r\n }\r\n floorplan.commitTransaction('change preference');\r\n floorplan.skipsUndoManager = false;\r\n };\r\n Floorplan.prototype.changeUnits = function (form) {\r\n var fp = this;\r\n if (typeof form === 'string') {\r\n fp.LATICRETE_changeUnits(form);\r\n return;\r\n }\r\n var radios = form.getElementsByTagName('input');\r\n var prevUnits = fp.model.modelData.units;\r\n for (var i = 0; i < radios.length; i++) {\r\n var radio = radios[i];\r\n if (radio.checked) {\r\n var unitsStr = radio.id;\r\n fp.model.setDataProperty(fp.model.modelData, 'units', unitsStr);\r\n switch (radio.id) {\r\n case 'centimeters':\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsAbbreviation', 'cm');\r\n break;\r\n case 'meters':\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsAbbreviation', 'm');\r\n break;\r\n case 'feet':\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsAbbreviation', 'ft');\r\n break;\r\n case 'inches':\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsAbbreviation', 'in');\r\n break;\r\n }\r\n }\r\n }\r\n var unitsAbbreviation = fp.model.modelData.unitsAbbreviation;\r\n var unitAbbrevInputs = document.getElementsByClassName('unitLabel');\r\n for (var i = 0; i < unitAbbrevInputs.length; i++) {\r\n var uaLabel = unitAbbrevInputs[i];\r\n uaLabel.innerText = unitsAbbreviation;\r\n }\r\n var unitsConversionFactorInput = document.getElementById('unitsConversionFactorInput');\r\n var oldUnitsConversionFactor = parseFloat(unitsConversionFactorInput.value);\r\n var units = fp.model.modelData.units;\r\n var newUnitsConverstionFactor = fp.convertUnits(prevUnits, units, oldUnitsConversionFactor);\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsConversionFactor', newUnitsConverstionFactor);\r\n unitsConversionFactorInput.value = newUnitsConverstionFactor.toString();\r\n var unitInputs = document.getElementsByClassName('unitsInput');\r\n for (var i = 0; i < unitInputs.length; i++) {\r\n var input = unitInputs[i];\r\n if (input.id !== 'unitsConversionFactorInput') {\r\n var value = parseFloat(input.value);\r\n value = parseFloat(fp.convertUnits(prevUnits, units, value).toFixed(4));\r\n input.value = value.toString();\r\n }\r\n }\r\n };\r\n Floorplan.prototype.LATICRETE_changeUnits = function (unitsString) {\r\n var fp = this;\r\n fp.skipsUndoManager = true;\r\n var prevUnits = fp.model.modelData.units;\r\n fp.model.setDataProperty(fp.model.modelData, 'units', unitsString);\r\n switch (unitsString) {\r\n case 'centimeters':\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsAbbreviation', 'cm');\r\n break;\r\n case 'meters':\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsAbbreviation', 'm');\r\n break;\r\n case 'feet':\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsAbbreviation', 'ft');\r\n break;\r\n case 'inches':\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsAbbreviation', 'in');\r\n break;\r\n }\r\n var unitsAbbreviation = fp.model.modelData.unitsAbbreviation;\r\n var unitAbbrevInputs = document.getElementsByClassName('unitLabel');\r\n for (var i = 0; i < unitAbbrevInputs.length; i++) {\r\n var uaLabel = unitAbbrevInputs[i];\r\n uaLabel.innerText = unitsAbbreviation;\r\n }\r\n var unitsConversionFactorInput = document.getElementById('unitsConversionFactorInput');\r\n var oldUnitsConversionFactor = parseFloat(unitsConversionFactorInput.value);\r\n var units = fp.model.modelData.units;\r\n var newUnitsConverstionFactor = fp.convertUnits(prevUnits, units, oldUnitsConversionFactor);\r\n fp.model.setDataProperty(fp.model.modelData, 'unitsConversionFactor', newUnitsConverstionFactor);\r\n unitsConversionFactorInput.value = newUnitsConverstionFactor.toString();\r\n var unitInputs = document.getElementsByClassName('unitsInput');\r\n for (var i = 0; i < unitInputs.length; i++) {\r\n var input = unitInputs[i];\r\n if (input.id !== 'unitsConversionFactorInput') {\r\n var value = parseFloat(input.value);\r\n value = parseFloat(fp.convertUnits(prevUnits, units, value).toFixed(4));\r\n input.value = value.toString();\r\n }\r\n }\r\n fp.skipsUndoManager = false;\r\n };\r\n Floorplan.prototype.changeUnitsConversionFactor = function (unitsConversionFactorInput, gridSizeInput) {\r\n var floorplan = this;\r\n var val = parseFloat(unitsConversionFactorInput.value);\r\n if (isNaN(val) || !val || val === undefined)\r\n return;\r\n floorplan.skipsUndoManager = true;\r\n floorplan.model.set(floorplan.model.modelData, 'unitsConversionFactor', val);\r\n if (gridSizeInput) {\r\n floorplan.changeGridSize(gridSizeInput);\r\n }\r\n floorplan.skipsUndoManager = false;\r\n };\r\n Floorplan.prototype.changeGridSize = function (gridSizeInput) {\r\n var fp = this;\r\n fp.skipsUndoManager = true;\r\n fp.startTransaction('change grid size');\r\n var inputVal = 0;\r\n if (!isNaN(parseFloat(gridSizeInput.value)) && gridSizeInput.value != null && gridSizeInput.value !== '' &&\r\n gridSizeInput.value !== undefined && parseFloat(gridSizeInput.value) > 0)\r\n inputVal = parseFloat(gridSizeInput.value);\r\n else {\r\n gridSizeInput.value = fp.convertPixelsToUnits(10).toString();\r\n inputVal = parseFloat(gridSizeInput.value);\r\n }\r\n inputVal = fp.convertUnitsToPixels(inputVal);\r\n fp.grid.gridCellSize = new go.Size(inputVal, inputVal);\r\n fp.model.setDataProperty(fp.model.modelData, 'gridSize', inputVal);\r\n fp.commitTransaction('change grid size');\r\n fp.skipsUndoManager = false;\r\n };\r\n Floorplan.prototype.getCounterClockwiseWallSide = function (w, ip) {\r\n var fp = this;\r\n var wrt = fp.toolManager.mouseDownTools.elt(3);\r\n var prop1 = null;\r\n var prop2 = null;\r\n if (wrt.pointsApproximatelyEqual(w.data.endpoint, ip)) {\r\n prop1 = 'smpt1';\r\n prop2 = 'smpt2';\r\n }\r\n else {\r\n prop1 = 'empt1';\r\n prop2 = 'empt2';\r\n }\r\n var A = ip;\r\n var B = w.data[prop2];\r\n var C = w.data[prop1];\r\n function isClockwise(a, b, c) {\r\n var bool = ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)) > 0;\r\n return bool;\r\n }\r\n if (!isClockwise(A, B, C)) {\r\n return 1;\r\n }\r\n else\r\n return 2;\r\n };\r\n Floorplan.prototype.getLinesIntersection = function (a1, a2, b1, b2) {\r\n var am = (a1.y - a2.y) / (a1.x - a2.x);\r\n var bm = (b1.y - b2.y) / (b1.x - b2.x);\r\n if (am === Infinity || am === -Infinity) {\r\n var ipx = a1.x;\r\n var bi = -1 * ((bm * b1.x) - b1.y);\r\n var ipy = (bm * ipx) + bi;\r\n return new go.Point(ipx, ipy);\r\n }\r\n if (bm === Infinity || bm === -Infinity) {\r\n var ipx = b1.x;\r\n var ai = -1 * ((am * a1.x) - a1.y);\r\n var ipy = (am * ipx) + ai;\r\n return new go.Point(ipx, ipy);\r\n }\r\n if (Math.abs(am - bm) < Math.pow(2, -52)) {\r\n return null;\r\n }\r\n else {\r\n var ipx = (am * a1.x - bm * b1.x + b1.y - a1.y) / (am - bm);\r\n var ipy = (am * bm * (b1.x - a1.x) + bm * a1.y - am * b1.y) / (bm - am);\r\n var ip = new go.Point(ipx, ipy);\r\n return ip;\r\n }\r\n };\r\n Floorplan.prototype.updateAllRoomBoundaries = function (changedWalls) {\r\n var fp = this;\r\n var wrt = fp.toolManager.mouseDownTools.elt(3);\r\n var rooms = fp.findNodesByExample({ category: 'RoomNode' });\r\n var garbage = [];\r\n rooms.iterator.each(function (r) {\r\n var boundsFound = false;\r\n var triedAllIntersections = false;\r\n var seenW1 = new go.Set();\r\n while (!boundsFound && !triedAllIntersections) {\r\n var bw = r.data.boundaryWalls;\r\n var e1 = null;\r\n var e2 = null;\r\n for (var i = 0; i < bw.length + 1; i++) {\r\n var entry = bw[i % (bw.length)];\r\n var wk = entry[0];\r\n var ww = fp.findNodeForKey(wk);\r\n if (ww === null)\r\n continue;\r\n if (!changedWalls.contains(ww) && !seenW1.contains(ww)) {\r\n if (e1 === null) {\r\n e1 = entry;\r\n }\r\n else if (e1 !== null && e2 === null) {\r\n e2 = entry;\r\n }\r\n }\r\n else if (e1 !== null && e2 === null) {\r\n e2 = entry;\r\n }\r\n else if (e1 === null) {\r\n e1 = null;\r\n e2 = null;\r\n }\r\n }\r\n var w1 = null;\r\n var w2 = null;\r\n var s1 = null;\r\n var s2 = null;\r\n if (e1 !== null && e2 !== null) {\r\n w1 = fp.findNodeForKey(e1[0]);\r\n s1 = e1[1];\r\n w2 = fp.findNodeForKey(e2[0]);\r\n s2 = e2[1];\r\n }\r\n else {\r\n triedAllIntersections = true;\r\n continue;\r\n }\r\n if (e1 !== null && w1 !== null) {\r\n seenW1.add(w1);\r\n }\r\n var w1s = w1.data['smpt' + s1];\r\n var w1e = w1.data['empt' + s1];\r\n var w2s = w2.data['smpt' + s2];\r\n var w2e = w2.data['empt' + s2];\r\n var ip = fp.getSegmentsIntersection(w1s, w1e, w2s, w2e);\r\n if (ip === null) {\r\n continue;\r\n }\r\n var w1os = (s1 === 1) ? 2 : 1;\r\n var distToS = ip.distanceSquaredPoint(w1.data['smpt' + w1os]);\r\n var distToE = ip.distanceSquaredPoint(w1.data['empt' + w1os]);\r\n var oip = distToS <= distToE ? w1.data.startpoint : w1.data.endpoint;\r\n var ang = oip.directionPoint(ip);\r\n var newPt = wrt.translateAndRotatePoint(ip, ang - 90, 0.1);\r\n boundsFound = fp.maybeAddRoomNode(newPt, r.data.floorImage, r);\r\n }\r\n if (!boundsFound) {\r\n garbage.push(r);\r\n }\r\n });\r\n for (var i = 0; i < garbage.length; i++) {\r\n fp.remove(garbage[i]);\r\n }\r\n fp.updateAllTargetBindings();\r\n };\r\n Floorplan.prototype.maybeAddRoomNode = function (pt, floorImage, roomToUpdate) {\r\n if (roomToUpdate === undefined || roomToUpdate === null) {\r\n roomToUpdate = null;\r\n }\r\n var fp = this;\r\n var walls = fp.findNodesByExample({ category: 'WallGroup' });\r\n var isPtOnRoomOrWall = false;\r\n walls.iterator.each(function (w) {\r\n if (fp.isPointInWall(w, pt)) {\r\n isPtOnRoomOrWall = true;\r\n }\r\n });\r\n var rooms = fp.findNodesByExample({ category: 'RoomNode' });\r\n rooms.iterator.each(function (r) {\r\n if (roomToUpdate === null || (roomToUpdate !== null && roomToUpdate !== undefined && roomToUpdate.data.key !== r.data.key)) {\r\n var isInRoom = fp.isPointInRoom(r, pt);\r\n if (isInRoom) {\r\n var isPtInHole = false;\r\n for (var i = 0; i < r.data.holes.length; i++) {\r\n var hole = r.data.holes[i];\r\n var polygon = fp.makePolygonFromRoomBoundaries(hole);\r\n if (polygon !== null) {\r\n if (fp.isPointInPolygon(polygon.toArray(), pt)) {\r\n isPtInHole = true;\r\n }\r\n }\r\n }\r\n if (!isPtInHole) {\r\n isPtOnRoomOrWall = true;\r\n }\r\n }\r\n }\r\n });\r\n if (isPtOnRoomOrWall) {\r\n return false;\r\n }\r\n var boundaryWalls = fp.getRoomWalls(pt);\r\n if (boundaryWalls === null) {\r\n return false;\r\n }\r\n var holes = fp.findRoomHoles(boundaryWalls, pt);\r\n if (roomToUpdate !== null) {\r\n fp.startTransaction('update room boundaryWalls and holes');\r\n fp.model.setDataProperty(roomToUpdate.data, 'boundaryWalls', boundaryWalls);\r\n fp.model.setDataProperty(roomToUpdate.data, 'holes', holes);\r\n fp.commitTransaction('update room boundaryWalls and holes');\r\n }\r\n else {\r\n if (floorImage === null || floorImage === undefined) {\r\n floorImage = 'images/textures/floor1.jpg';\r\n }\r\n var roomData = {\r\n key: 'Room', category: 'RoomNode', name: 'Room Name',\r\n boundaryWalls: boundaryWalls, holes: holes, floorImage: floorImage, showLabel: true, showFlooringOptions: true\r\n };\r\n fp.model.addNodeData(roomData);\r\n roomToUpdate = fp.findPartForData(roomData);\r\n }\r\n fp.updateRoom(roomToUpdate);\r\n return true;\r\n };\r\n Floorplan.prototype.getRoomWalls = function (pt) {\r\n var fp = this;\r\n var walls = fp.findNodesByExample({ category: 'WallGroup' });\r\n var oPt = new go.Point(pt.x, pt.y - 10000);\r\n var wallsDistArr = [];\r\n walls.iterator.each(function (w) {\r\n var ip = fp.getSegmentsIntersection(pt, oPt, w.data.startpoint, w.data.endpoint);\r\n if (ip !== null) {\r\n var dist = Math.sqrt(ip.distanceSquaredPoint(pt));\r\n wallsDistArr.push([w, dist]);\r\n }\r\n });\r\n wallsDistArr.sort(function (a, b) {\r\n var distA = a[1];\r\n var distB = b[1];\r\n if (distA === distB)\r\n return 0;\r\n else if (distA < distB)\r\n return -1;\r\n else\r\n return 1;\r\n });\r\n function selectivelyCopyPath(path, nodeToStopAt) {\r\n var p = [];\r\n var copyNoMore = false;\r\n for (var i = 0; i < path.length; i++) {\r\n var entry = path[i];\r\n var wk = entry[0];\r\n var w = fp.findNodeForKey(wk);\r\n var side = entry[1];\r\n if (!copyNoMore) {\r\n p.push([w.data.key, side]);\r\n if (w.data.key === nodeToStopAt.data.key) {\r\n copyNoMore = true;\r\n }\r\n }\r\n }\r\n return p;\r\n }\r\n function recursivelyFindPaths(wall, path, possiblePaths, seenWalls, origWall, prevPt) {\r\n if (wall === null) {\r\n return null;\r\n }\r\n if (seenWalls === undefined || seenWalls === null) {\r\n seenWalls = new go.Set();\r\n }\r\n seenWalls.add(wall);\r\n var wrt = fp.toolManager.mouseDownTools.elt(3);\r\n var sPt = wall.data.startpoint;\r\n var ePt = wall.data.endpoint;\r\n var mpt = new go.Point((sPt.x + ePt.x) / 2, (sPt.y + ePt.y) / 2);\r\n var sa = mpt.directionPoint(sPt);\r\n var ip;\r\n var op;\r\n if (prevPt === undefined || prevPt === null) {\r\n ip = (sa >= 90 && sa <= 270) ? sPt : ePt;\r\n op = (sa >= 90 && sa <= 270) ? ePt : sPt;\r\n }\r\n else {\r\n ip = (wrt.pointsApproximatelyEqual(sPt, prevPt)) ? ePt : sPt;\r\n op = (wrt.pointsApproximatelyEqual(sPt, prevPt)) ? sPt : ePt;\r\n }\r\n var ccWalls = wrt.getAllWallsAtIntersection(ip, true);\r\n ccWalls.sort(function (a, b) {\r\n var B = fp.getWallsIntersection(a, b);\r\n if (B === null)\r\n return 0;\r\n var as = a.data.startpoint;\r\n var ae = a.data.endpoint;\r\n var bs = b.data.startpoint;\r\n var be = b.data.endpoint;\r\n var A = wrt.pointsApproximatelyEqual(ip, as) ? ae : as;\r\n var C = wrt.pointsApproximatelyEqual(ip, bs) ? be : bs;\r\n var angA = B.directionPoint(A);\r\n var angB = B.directionPoint(C);\r\n if (angA > angB)\r\n return 1;\r\n else if (angA < angB)\r\n return -1;\r\n else\r\n return 0;\r\n });\r\n var intersectionWalls = ccWalls.toArray();\r\n var intersectionWallsReordered = [];\r\n var j = intersectionWalls.indexOf(wall);\r\n for (var i = 0; i < intersectionWalls.length; i++) {\r\n var w = intersectionWalls[j];\r\n intersectionWallsReordered.push(w);\r\n j = (j + 1) % intersectionWalls.length;\r\n }\r\n ccWalls.clear();\r\n for (var i = 0; i < intersectionWallsReordered.length; i++) {\r\n var w = intersectionWallsReordered[i];\r\n ccWalls.add(w);\r\n }\r\n ccWalls.iterator.each(function (w) {\r\n if ((w.data.key === origWall.data.key || ccWalls.contains(origWall)) && wall.data.key !== origWall.data.key) {\r\n if (path !== null) {\r\n possiblePaths.add(path);\r\n }\r\n }\r\n else if (seenWalls !== null && !seenWalls.contains(w)) {\r\n if (path === undefined || path === null) {\r\n path = [];\r\n var ip1 = fp.getLinesIntersection(pt, oPt, wall.data.smpt1, wall.data.empt1);\r\n var ip2 = fp.getLinesIntersection(pt, oPt, wall.data.smpt2, wall.data.empt2);\r\n if (ip1 !== null && ip2 !== null) {\r\n var dist1 = Math.sqrt(ip1.distanceSquaredPoint(pt));\r\n var dist2 = Math.sqrt(ip2.distanceSquaredPoint(pt));\r\n var side1 = (dist1 < dist2) ? 1 : 2;\r\n path.push([wall.data.key, side1]);\r\n }\r\n }\r\n else {\r\n path = selectivelyCopyPath(path, wall);\r\n }\r\n var side = fp.getCounterClockwiseWallSide(w, ip);\r\n path.push([w.data.key, side]);\r\n recursivelyFindPaths(w, path, possiblePaths, seenWalls, origWall, ip);\r\n }\r\n });\r\n return possiblePaths;\r\n }\r\n var roomOuterBoundaryPts = null;\r\n var roomOuterBoundaryPath = null;\r\n for (var i = 0; i < wallsDistArr.length; i++) {\r\n var entry = wallsDistArr[i];\r\n var w = entry[0];\r\n var path = [];\r\n var possiblePaths = new go.Set();\r\n possiblePaths = recursivelyFindPaths(w, null, possiblePaths, null, w, null);\r\n if (possiblePaths === null || possiblePaths.count === 0)\r\n continue;\r\n path = possiblePaths.first();\r\n var polygon = fp.makePolygonFromRoomBoundaries(path);\r\n if (polygon !== null) {\r\n var pathIncludesInternalWall = false;\r\n for (var j = 0; j < path.length; j++) {\r\n var e = path[j];\r\n var wwk = e[0];\r\n var ww = fp.findNodeForKey(wwk);\r\n var ept = ww.data.endpoint;\r\n var spt = ww.data.startpoint;\r\n if (fp.isPointInPolygon(polygon.toArray(), ept) || fp.isPointInPolygon(polygon.toArray(), spt)) {\r\n pathIncludesInternalWall = true;\r\n }\r\n }\r\n if (fp.isPointInPolygon(polygon.toArray(), pt)) {\r\n roomOuterBoundaryPts = polygon;\r\n roomOuterBoundaryPath = path;\r\n break;\r\n }\r\n }\r\n }\r\n if (roomOuterBoundaryPts !== null) {\r\n var newRoomBoundaryWalls = fp.addInternalWallsToRoom(roomOuterBoundaryPts, roomOuterBoundaryPath);\r\n return newRoomBoundaryWalls;\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n Floorplan.prototype.makePolygonFromRoomBoundaries = function (path) {\r\n var fp = this;\r\n var polygon = new go.List();\r\n var boundaryWalls = path;\r\n if (boundaryWalls === null) {\r\n return null;\r\n }\r\n var firstWallKey = boundaryWalls[0][0];\r\n var firstWall = fp.findNodeForKey(firstWallKey);\r\n var firstSide = boundaryWalls[0][1];\r\n var secondWallKey = boundaryWalls[1][0];\r\n var secondWall = fp.findNodeForKey(secondWallKey);\r\n if (firstWall === null || secondWall === null) {\r\n return null;\r\n }\r\n var ip = fp.getWallsIntersection(firstWall, secondWall);\r\n if (ip === null)\r\n return null;\r\n var propS = 'smpt' + firstSide;\r\n var propE = 'empt' + firstSide;\r\n var ptS = firstWall.data[propS];\r\n var ptE = firstWall.data[propE];\r\n var distS = Math.sqrt(ip.distanceSquaredPoint(ptS));\r\n var distE = Math.sqrt(ip.distanceSquaredPoint(ptE));\r\n var closestPt = (distS < distE) ? ptS : ptE;\r\n var farthestPt = closestPt.equals(ptS) ? ptE : ptS;\r\n polygon.add(farthestPt);\r\n polygon.add(closestPt);\r\n var prevPt = closestPt;\r\n var prevWall = firstWall;\r\n for (var i = 0; i < boundaryWalls.length; i++) {\r\n var entry = boundaryWalls[i];\r\n if (typeof entry === 'string')\r\n continue;\r\n var wk = entry[0];\r\n var w = fp.findNodeForKey(wk);\r\n if (w === null) {\r\n return null;\r\n }\r\n var s = entry[1];\r\n if (w.data.key !== firstWall.data.key) {\r\n var propS1 = 'smpt' + s;\r\n var propE1 = 'empt' + s;\r\n var ptS1 = w.data[propS1];\r\n var ptE1 = w.data[propE1];\r\n var distS1 = Math.sqrt(prevPt.distanceSquaredPoint(ptS1));\r\n var distE1 = Math.sqrt(prevPt.distanceSquaredPoint(ptE1));\r\n var closestPt1 = (distS1 < distE1) ? ptS1 : ptE1;\r\n var farthestPt1 = closestPt1.equals(ptS1) ? ptE1 : ptS1;\r\n polygon.add(closestPt1);\r\n polygon.add(farthestPt1);\r\n prevPt = farthestPt1;\r\n prevWall = w;\r\n }\r\n }\r\n return polygon;\r\n };\r\n Floorplan.prototype.sortWallsClockwise = function (a, b) {\r\n var fp = this;\r\n var wrt = fp.toolManager.mouseDownTools.elt(3);\r\n var B = fp.getWallsIntersection(a, b);\r\n if (B === null) {\r\n return 0;\r\n }\r\n var as = a.data.startpoint;\r\n var ae = a.data.endpoint;\r\n var bs = b.data.startpoint;\r\n var be = b.data.endpoint;\r\n var ip = fp.getSegmentsIntersection(as, ae, bs, be);\r\n if (ip === null) {\r\n return 0;\r\n }\r\n var A = wrt.pointsApproximatelyEqual(ip, as) ? ae : as;\r\n var C = wrt.pointsApproximatelyEqual(ip, bs) ? be : bs;\r\n var angA = B.directionPoint(A);\r\n var angB = B.directionPoint(C);\r\n if (angA > angB)\r\n return 1;\r\n else if (angA < angB)\r\n return -1;\r\n else\r\n return 0;\r\n };\r\n Floorplan.prototype.sortWallsClockwiseWithSetStartWall = function (walls, wall) {\r\n var fp = this;\r\n walls.sort(function (a, b) {\r\n return fp.sortWallsClockwise(a, b);\r\n });\r\n var intersectionWalls = walls.toArray();\r\n var intersectionWallsReordered = [];\r\n var j = intersectionWalls.indexOf(wall);\r\n for (var i = 0; i < intersectionWalls.length; i++) {\r\n var w = intersectionWalls[j];\r\n intersectionWallsReordered.push(w);\r\n j = (j + 1) % intersectionWalls.length;\r\n }\r\n walls.clear();\r\n for (var i = 0; i < intersectionWallsReordered.length; i++) {\r\n var w = intersectionWallsReordered[i];\r\n walls.add(w);\r\n }\r\n return walls;\r\n };\r\n Floorplan.prototype.addInternalWallsToRoom = function (roomOuterBoundaryPts, roomOuterBoundaryPath) {\r\n var fp = this;\r\n var walls = fp.findNodesByExample({ category: 'WallGroup' });\r\n var offendingWalls = new go.Set();\r\n walls.iterator.each(function (w) {\r\n var s = w.data.startpoint;\r\n var e = w.data.endpoint;\r\n if (fp.isPointInPolygon(roomOuterBoundaryPts.toArray(), s) || fp.isPointInPolygon(roomOuterBoundaryPts.toArray(), e)) {\r\n offendingWalls.add(w);\r\n }\r\n });\r\n function recursivelyFindInteralClusterPath(wall, iwalls, ip, seenIp, path, bw1, bw2) {\r\n seenIp.add(go.Point.stringify(ip));\r\n iwalls.iterator.each(function (fw) {\r\n if (fw.data.key !== wall.data.key) {\r\n if (fw.data.key === bw2.data.key) {\r\n if (path.indexOf('isDone') === -1) {\r\n path.push('isDone');\r\n }\r\n return path;\r\n }\r\n if (path.indexOf('isDone') !== -1) {\r\n return path;\r\n }\r\n var side = null;\r\n side = fp.getCounterClockwiseWallSide(fw, ip);\r\n var entry = [fw.data.key, side];\r\n for (var i = 0; i < path.length; i++) {\r\n var e = path[i];\r\n var wk = e[0];\r\n var w = fp.findNodeForKey(wk);\r\n var s = e[1];\r\n if (fw.data.key === w.data.key && s === side) {\r\n return;\r\n }\r\n }\r\n path.push(entry);\r\n var otherEndpoint = (wrt.pointsApproximatelyEqual(ip, fw.data.startpoint)) ? fw.data.endpoint : fw.data.startpoint;\r\n var iw = wrt.getAllWallsAtIntersection(otherEndpoint, true);\r\n if (iw !== null && iw.count > 1) {\r\n iw = fp.sortWallsClockwiseWithSetStartWall(iw, fw);\r\n }\r\n var hasNotSeenIp = false;\r\n if (!seenIp.contains(go.Point.stringify(otherEndpoint))) {\r\n hasNotSeenIp = true;\r\n }\r\n var alreadySeen = false;\r\n if (!hasNotSeenIp) {\r\n var fiw = iw.toArray()[1];\r\n var side2 = fp.getCounterClockwiseWallSide(fiw, otherEndpoint);\r\n for (var i = 0; i < path.length; i++) {\r\n var entry1 = path[i];\r\n var wk = entry1[0];\r\n var w = fp.findNodeForKey(wk);\r\n var s = entry1[1];\r\n if (w.data.key === fiw.data.key && s === side2) {\r\n alreadySeen = true;\r\n }\r\n }\r\n }\r\n var atFinalIp = iw.contains(bw1);\r\n var doContinue = hasNotSeenIp ? true : (!alreadySeen && !atFinalIp);\r\n if (iw.count > 1 && doContinue) {\r\n return recursivelyFindInteralClusterPath(fw, iw, otherEndpoint, seenIp, path, bw1, bw2);\r\n }\r\n else if (!atFinalIp) {\r\n var otherSide = (side === 1) ? 2 : 1;\r\n var entry2 = [fw.data.key, otherSide];\r\n path.push(entry2);\r\n var iw2 = wrt.getAllWallsAtIntersection(ip, true);\r\n if (iw2 !== null && iw2.count > 1) {\r\n iw2 = fp.sortWallsClockwiseWithSetStartWall(iw2, fw);\r\n }\r\n return recursivelyFindInteralClusterPath(fw, iw2, ip, seenIp, path, bw1, bw2);\r\n }\r\n else if (path.indexOf('isDone') === -1) {\r\n path.push('isDone');\r\n return;\r\n }\r\n }\r\n });\r\n return path;\r\n }\r\n var wrt = fp.toolManager.mouseDownTools.elt(3);\r\n var handledWalls = new go.Set();\r\n var internalPathsToInsert = new go.Map();\r\n offendingWalls.iterator.each(function (ow) {\r\n if (!handledWalls.contains(ow)) {\r\n var ows = ow.data.startpoint;\r\n var owe = ow.data.endpoint;\r\n var bw1 = null;\r\n var bw2 = null;\r\n var ip_1 = null;\r\n for (var i = 0; i < roomOuterBoundaryPath.length; i++) {\r\n var entry = roomOuterBoundaryPath[i];\r\n if (typeof entry === 'string')\r\n continue;\r\n var wk = entry[0];\r\n var w = fp.findNodeForKey(wk);\r\n var s = w.data.startpoint;\r\n var e = w.data.endpoint;\r\n if (wrt.pointsApproximatelyEqual(s, ows) || wrt.pointsApproximatelyEqual(s, owe)\r\n || wrt.pointsApproximatelyEqual(e, ows) || wrt.pointsApproximatelyEqual(e, owe)) {\r\n if (bw1 === null) {\r\n bw1 = w;\r\n ip_1 = fp.getSegmentsIntersection(bw1.data.startpoint, bw1.data.endpoint, ows, owe);\r\n }\r\n else {\r\n bw2 = w;\r\n }\r\n }\r\n }\r\n if (ip_1 !== null && bw1 !== null && bw2 !== null &&\r\n roomOuterBoundaryPath[0][0] === bw1.data.key && roomOuterBoundaryPath[roomOuterBoundaryPath.length - 1][0] === bw2.data.key) {\r\n var temp = null;\r\n temp = bw1;\r\n bw1 = bw2;\r\n bw2 = temp;\r\n }\r\n if (ip_1 !== null) {\r\n var intersectionWalls_1 = new go.List();\r\n if (bw1 !== null) {\r\n intersectionWalls_1.add(bw1);\r\n }\r\n offendingWalls.iterator.each(function (ow2) {\r\n var ow2s = ow2.data.startpoint;\r\n var ow2e = ow2.data.endpoint;\r\n if (ip_1 !== null) {\r\n if (wrt.pointsApproximatelyEqual(ow2s, ip_1) || wrt.pointsApproximatelyEqual(ow2e, ip_1)) {\r\n intersectionWalls_1.add(ow2);\r\n handledWalls.add(ow2);\r\n }\r\n }\r\n });\r\n if (bw2 !== null) {\r\n intersectionWalls_1.add(bw2);\r\n }\r\n if (bw1 !== null) {\r\n intersectionWalls_1 = fp.sortWallsClockwiseWithSetStartWall(intersectionWalls_1, bw1);\r\n }\r\n var path = [];\r\n var seenIp = new go.Set();\r\n if (bw1 !== null && bw2 !== null) {\r\n var p = recursivelyFindInteralClusterPath(bw1, intersectionWalls_1, ip_1, seenIp, path, bw1, bw2);\r\n p = p.slice(0, p.length - 1);\r\n internalPathsToInsert.add(bw1, p);\r\n }\r\n }\r\n }\r\n });\r\n internalPathsToInsert.iterator.each(function (kvp) {\r\n var bw = kvp.key;\r\n var path = kvp.value;\r\n var insertionIndex;\r\n for (var i = 0; i < roomOuterBoundaryPath.length; i++) {\r\n var entry = roomOuterBoundaryPath[i];\r\n if (typeof entry === 'string')\r\n continue;\r\n var entryWk = entry[0];\r\n var entryW = fp.findNodeForKey(entryWk);\r\n if (entryW.data.key === bw.data.key) {\r\n insertionIndex = i + 1;\r\n }\r\n }\r\n var firstArr = roomOuterBoundaryPath.slice(0, insertionIndex);\r\n var secondArr = roomOuterBoundaryPath.slice(insertionIndex, roomOuterBoundaryPath.length);\r\n roomOuterBoundaryPath = firstArr.concat(path).concat(secondArr);\r\n });\r\n return roomOuterBoundaryPath;\r\n };\r\n Floorplan.prototype.getClockwiseWallEndpoint = function (w, side) {\r\n var fp = this;\r\n var wrt = fp.toolManager.mouseDownTools.elt(3);\r\n var ip = null;\r\n var op = null;\r\n var sPt = w.data['smpt' + side];\r\n var ePt = w.data['empt' + side];\r\n var mPt = new go.Point((sPt.x + ePt.x) / 2, (sPt.y + ePt.y) / 2);\r\n var a = sPt.directionPoint(ePt) + 180;\r\n var offset = w.data.thickness / 2;\r\n var pt1 = wrt.translateAndRotatePoint(mPt, a, offset);\r\n var pt2 = wrt.translateAndRotatePoint(mPt, a + 180, offset);\r\n var insidePt = null;\r\n var outsidePt = null;\r\n function isPointLeftOfRay(pt, rayS, rayE) {\r\n return (pt.y - rayS.y) * (rayE.x - rayS.x)\r\n > (pt.x - rayS.x) * (rayE.y - rayS.y);\r\n }\r\n if (fp.isPointInWall(w, pt1)) {\r\n insidePt = pt1;\r\n outsidePt = pt2;\r\n }\r\n else {\r\n insidePt = pt2;\r\n outsidePt = pt1;\r\n }\r\n if (isPointLeftOfRay(insidePt, sPt, ePt)) {\r\n ip = w.data.endpoint;\r\n op = w.data.startpoint;\r\n }\r\n else {\r\n ip = w.data.startpoint;\r\n op = w.data.endpoint;\r\n }\r\n return ip;\r\n };\r\n Floorplan.prototype.findRoomHoles = function (roomBoundaryWalls, pt) {\r\n var fp = this;\r\n var wrt = fp.toolManager.mouseDownTools.elt(3);\r\n var walls = fp.findNodesByExample({ category: 'WallGroup' });\r\n var offendingWalls = new go.Set();\r\n var roomOuterBoundaryPts = fp.makePolygonFromRoomBoundaries(roomBoundaryWalls);\r\n walls.iterator.each(function (w) {\r\n var s = w.data.startpoint;\r\n var e = w.data.endpoint;\r\n if (roomOuterBoundaryPts !== null && (fp.isPointInPolygon(roomOuterBoundaryPts.toArray(), s) || fp.isPointInPolygon(roomOuterBoundaryPts.toArray(), e))) {\r\n var isBoundaryWall = false;\r\n for (var i = 0; i < roomBoundaryWalls.length; i++) {\r\n var entry = roomBoundaryWalls[i];\r\n var wallKey = entry[0];\r\n var wall = fp.findNodeForKey(wallKey);\r\n if (wall.data.key === w.data.key) {\r\n isBoundaryWall = true;\r\n }\r\n }\r\n if (!isBoundaryWall) {\r\n offendingWalls.add(w);\r\n }\r\n }\r\n });\r\n var seenWalls = new go.Set();\r\n function recursivelyFindHolePath(w, seenIp, path, prevPt, origWall) {\r\n var side = null;\r\n if (path === null || path === undefined) {\r\n path = [];\r\n var ws = w.data.startpoint;\r\n var we = w.data.endpoint;\r\n var mPt = new go.Point((ws.x + we.x) / 2, (ws.y + we.y) / 2);\r\n var ip1 = fp.getLinesIntersection(pt, mPt, w.data.smpt1, w.data.empt1);\r\n var ip2 = fp.getLinesIntersection(pt, mPt, w.data.smpt2, w.data.empt2);\r\n if (ip1 !== null && ip2 !== null) {\r\n var dist1 = Math.sqrt(ip1.distanceSquaredPoint(pt));\r\n var dist2 = Math.sqrt(ip2.distanceSquaredPoint(pt));\r\n side = (dist1 < dist2) ? 1 : 2;\r\n seenWalls.add(w);\r\n path.push([w.data.key, side]);\r\n }\r\n }\r\n if (path.indexOf('isDone') !== -1) {\r\n return path;\r\n }\r\n var ip = null;\r\n var op = null;\r\n var sPt = w.data.startpoint;\r\n var ePt = w.data.endpoint;\r\n if (prevPt !== null && prevPt !== undefined) {\r\n ip = (wrt.pointsApproximatelyEqual(sPt, prevPt)) ? ePt : sPt;\r\n op = (wrt.pointsApproximatelyEqual(sPt, prevPt)) ? sPt : ePt;\r\n }\r\n else {\r\n if (side !== null) {\r\n ip = fp.getClockwiseWallEndpoint(w, side);\r\n if (ip !== null) {\r\n op = (wrt.pointsApproximatelyEqual(ip, sPt)) ? ePt : sPt;\r\n }\r\n }\r\n }\r\n if (seenIp === null || seenIp === undefined) {\r\n seenIp = new go.Set();\r\n }\r\n if (ip !== null) {\r\n seenIp.add(go.Point.stringify(ip));\r\n }\r\n var iw = wrt.getAllWallsAtIntersection(ip, true);\r\n var oiw = wrt.getAllWallsAtIntersection(op, true);\r\n if (iw !== null && iw.count > 1) {\r\n iw = fp.sortWallsClockwiseWithSetStartWall(iw, w);\r\n }\r\n var hasNotSeenIp = false;\r\n if (ip !== null && !seenIp.contains(go.Point.stringify(ip))) {\r\n hasNotSeenIp = true;\r\n }\r\n var alreadySeen = false;\r\n if (!hasNotSeenIp && iw.toArray().length > 0) {\r\n var fiw = null;\r\n if (iw.toArray().length > 1) {\r\n fiw = iw.toArray()[1];\r\n }\r\n else {\r\n fiw = iw.toArray()[0];\r\n }\r\n if (ip !== null) {\r\n var side2 = fp.getCounterClockwiseWallSide(fiw, ip);\r\n for (var i = 0; i < path.length; i++) {\r\n var entry = path[i];\r\n var wk = entry[0];\r\n var ww = fp.findNodeForKey(wk);\r\n var s = entry[1];\r\n if (ww.data.key === fiw.data.key && s === side2) {\r\n alreadySeen = true;\r\n }\r\n }\r\n }\r\n }\r\n var s1 = false;\r\n var s2 = false;\r\n for (var i = 0; i < path.length; i++) {\r\n var entry = path[i];\r\n var wwk = entry[0];\r\n var ww = fp.findNodeForKey(wwk);\r\n if (ww.data.key === w.data.key && !s1) {\r\n s1 = true;\r\n }\r\n else if (ww.data.key === w.data.key && s1 && !s2) {\r\n s2 = true;\r\n }\r\n }\r\n var isSoloWallHole = s1 && s2 && alreadySeen && path.length < 3;\r\n var isNextClockwiseWallOrigWall = (iw.count > 1 && iw.toArray()[1].data.key === origWall.data.key);\r\n var atFinalIp = isNextClockwiseWallOrigWall && (w.data.key !== origWall.data.key || (isSoloWallHole)) || (isSoloWallHole && w.data.key === origWall.data.key);\r\n var doContinue = hasNotSeenIp ? true : (!alreadySeen);\r\n if (!doContinue && path.indexOf('isDone') === -1) {\r\n path.push('isDone');\r\n }\r\n if (doContinue) {\r\n iw.iterator.each(function (fw) {\r\n if (path !== null && fw.data.key !== w.data.key && path.indexOf('isDone') === -1) {\r\n if (ip !== null) {\r\n var side1 = fp.getCounterClockwiseWallSide(fw, ip);\r\n var entry = [fw.data.key, side1];\r\n path.push(entry);\r\n seenWalls.add(fw);\r\n recursivelyFindHolePath(fw, seenIp, path, ip, origWall);\r\n }\r\n }\r\n else if (iw.count === 1 && path !== null && path.indexOf('isDone') === -1) {\r\n var entry = null;\r\n for (var i = 0; i < path.length; i++) {\r\n var pwk = path[i][0];\r\n var pw = fp.findNodeForKey(pwk);\r\n if (pw.data.key === fw.data.key) {\r\n var s = path[i][1];\r\n var os = (s === 1) ? 2 : 1;\r\n entry = [pw.data.key, os];\r\n }\r\n }\r\n path.push(entry);\r\n if (oiw.count === 1) {\r\n path.push('isDone');\r\n }\r\n }\r\n });\r\n }\r\n if (path.indexOf('isDone') !== -1) {\r\n return path.slice(0, path.length - 1);\r\n }\r\n else if (oiw.count > 1) {\r\n var lw = iw.last();\r\n if (oiw !== null && lw !== null) {\r\n oiw = fp.sortWallsClockwiseWithSetStartWall(oiw, lw);\r\n }\r\n var parentw = oiw.toArray()[1];\r\n if (op !== null) {\r\n var side1 = fp.getCounterClockwiseWallSide(parentw, op);\r\n var entry = [parentw.data.key, side1];\r\n var entryExists = false;\r\n for (var i = 0; i < path.length; i++) {\r\n var entry2 = path[i];\r\n var w1k = entry[0];\r\n var w1 = fp.findNodeForKey(w1k);\r\n var w2k = entry2[0];\r\n var w2 = fp.findNodeForKey(w2k);\r\n if (w1.data.key === w2.data.key && entry[1] === entry2[1]) {\r\n entryExists = true;\r\n }\r\n }\r\n if (entry !== null && !entryExists) {\r\n path.push(entry);\r\n seenWalls.add(parentw);\r\n recursivelyFindHolePath(parentw, seenIp, path, op, origWall);\r\n }\r\n else if (entryExists) {\r\n return path;\r\n }\r\n }\r\n }\r\n if (path.indexOf('isDone') !== -1) {\r\n path = path.slice(0, path.length - 1);\r\n }\r\n return path;\r\n }\r\n var holes = [];\r\n offendingWalls.iterator.each(function (ow) {\r\n if (!seenWalls.contains(ow)) {\r\n var sPt = ow.data.startpoint;\r\n var ePt = ow.data.endpoint;\r\n var mPt_1 = new go.Point((sPt.x + ePt.x) / 2, (sPt.y + ePt.y) / 2);\r\n var wallsDistArr_1 = [];\r\n offendingWalls.iterator.each(function (w) {\r\n var ip = fp.getSegmentsIntersection(pt, mPt_1, w.data.startpoint, w.data.endpoint);\r\n if (ip !== null) {\r\n var dist = Math.sqrt(ip.distanceSquaredPoint(pt));\r\n wallsDistArr_1.push([w, dist]);\r\n }\r\n });\r\n wallsDistArr_1.sort(function (a, b) {\r\n var distA = a[1];\r\n var distB = b[1];\r\n if (distA === distB)\r\n return 0;\r\n else if (distA < distB)\r\n return -1;\r\n else\r\n return 1;\r\n });\r\n var fw = null;\r\n for (var i = 0; i < wallsDistArr_1.length; i++) {\r\n var entryWall = wallsDistArr_1[i][0];\r\n if (!seenWalls.contains(entryWall) && fw === null) {\r\n fw = entryWall;\r\n }\r\n }\r\n if (fw !== null) {\r\n var path = recursivelyFindHolePath(fw, null, null, null, fw);\r\n var polygon_1 = fp.makePolygonFromRoomBoundaries(path);\r\n if (polygon_1 !== null) {\r\n offendingWalls.iterator.each(function (ow2) {\r\n var s = ow2.data.smpt1;\r\n if (fp.isPointInPolygon(polygon_1.toArray(), s) || fp.isPointInPolygon(polygon_1.toArray(), s)) {\r\n seenWalls.add(ow2);\r\n }\r\n });\r\n holes.push(path);\r\n }\r\n }\r\n }\r\n });\r\n return holes;\r\n };\r\n Floorplan.prototype.getPathPointsIgnoreMiteringSide = function (path) {\r\n var fp = this;\r\n var pts = new go.List();\r\n var firstWallKey = path[0][0];\r\n var firstWall = fp.findNodeForKey(firstWallKey);\r\n var firstSide = path[0][1];\r\n var secondWallKey = path[1][0];\r\n var secondWall = fp.findNodeForKey(secondWallKey);\r\n var ip = fp.getWallsIntersection(firstWall, secondWall);\r\n if (firstWall.data.key === secondWall.data.key) {\r\n ip = fp.getClockwiseWallEndpoint(firstWall, firstSide);\r\n }\r\n if (ip !== null) {\r\n var ptS = firstWall.data.startpoint;\r\n var ptE = firstWall.data.endpoint;\r\n var distS = Math.sqrt(ip.distanceSquaredPoint(ptS));\r\n var distE = Math.sqrt(ip.distanceSquaredPoint(ptE));\r\n var closestPt = (distS < distE) ? ptS : ptE;\r\n var farthestPt = closestPt.equals(ptS) ? ptE : ptS;\r\n pts.add(farthestPt);\r\n pts.add(closestPt);\r\n var prevPt = closestPt;\r\n var prevWall = firstWall;\r\n for (var i = 0; i < path.length; i++) {\r\n var entry = path[i];\r\n if (typeof entry === 'string')\r\n continue;\r\n var wk = entry[0];\r\n var w = fp.findNodeForKey(wk);\r\n var s = entry[1];\r\n if (i !== 0) {\r\n var ptS1 = w.data.startpoint;\r\n var ptE1 = w.data.endpoint;\r\n var distS1 = Math.sqrt(prevPt.distanceSquaredPoint(ptS1));\r\n var distE1 = Math.sqrt(prevPt.distanceSquaredPoint(ptE1));\r\n var closestPt1 = (distS1 < distE1) ? ptS1 : ptE1;\r\n var farthestPt1 = closestPt.equals(ptS1) ? ptE1 : ptS1;\r\n if (prevWall.data.key === w.data.key) {\r\n pts.add(prevPt);\r\n pts.add(closestPt1);\r\n }\r\n pts.add(closestPt1);\r\n pts.add(farthestPt1);\r\n prevPt = farthestPt1;\r\n prevWall = w;\r\n }\r\n }\r\n }\r\n return pts;\r\n };\r\n Floorplan.prototype.getPathPts = function (path) {\r\n var fp = this;\r\n var pts = new go.List();\r\n var firstWallKey = path[0][0];\r\n var firstWall = fp.findNodeForKey(firstWallKey);\r\n var firstSide = path[0][1];\r\n var secondWallKey = path[1][0];\r\n var secondWall = fp.findNodeForKey(secondWallKey);\r\n var ip = fp.getWallsIntersection(firstWall, secondWall);\r\n if (firstWall.data.key === secondWall.data.key) {\r\n ip = fp.getClockwiseWallEndpoint(firstWall, firstSide);\r\n }\r\n if (ip !== null) {\r\n var propS = 'smpt' + firstSide;\r\n var propE = 'empt' + firstSide;\r\n var ptS = firstWall.data[propS];\r\n var ptE = firstWall.data[propE];\r\n var distS = Math.sqrt(ip.distanceSquaredPoint(ptS));\r\n var distE = Math.sqrt(ip.distanceSquaredPoint(ptE));\r\n var closestPt = (distS < distE) ? ptS : ptE;\r\n var farthestPt = closestPt.equals(ptS) ? ptE : ptS;\r\n pts.add(farthestPt);\r\n pts.add(closestPt);\r\n var prevPt = closestPt;\r\n var prevWall = firstWall;\r\n for (var i = 0; i < path.length; i++) {\r\n var entry = path[i];\r\n if (typeof entry === 'string')\r\n continue;\r\n var wk = entry[0];\r\n var w = fp.findNodeForKey(wk);\r\n var s = entry[1];\r\n if (i !== 0) {\r\n var propS1 = 'smpt' + s;\r\n var propE1 = 'empt' + s;\r\n var ptS1 = w.data[propS1];\r\n var ptE1 = w.data[propE1];\r\n var distS1 = Math.sqrt(prevPt.distanceSquaredPoint(ptS1));\r\n var distE1 = Math.sqrt(prevPt.distanceSquaredPoint(ptE1));\r\n var closestPt1 = (distS1 < distE1) ? ptS1 : ptE1;\r\n var farthestPt1 = closestPt.equals(ptS1) ? ptE1 : ptS1;\r\n if (prevWall.data.key === w.data.key) {\r\n pts.add(prevPt);\r\n pts.add(closestPt1);\r\n }\r\n pts.add(closestPt1);\r\n pts.add(farthestPt1);\r\n prevPt = farthestPt1;\r\n prevWall = w;\r\n }\r\n }\r\n }\r\n return pts;\r\n };\r\n Floorplan.prototype.getPolygonArea = function (vs) {\r\n var j = 0;\r\n var area = 0;\r\n for (var i = 0; i < vs.length; i++) {\r\n j = (i + 1) % vs.length;\r\n area += vs[i].x * vs[j].y;\r\n area -= vs[i].y * vs[j].x;\r\n }\r\n area /= 2;\r\n return (area < 0 ? -area : area);\r\n };\r\n Floorplan.prototype.getRoomArea = function (r) {\r\n var fp = this;\r\n var pts = fp.getPathPointsIgnoreMiteringSide(r.data.boundaryWalls);\r\n var area1 = fp.getPolygonArea(pts.toArray());\r\n var area2 = 0;\r\n var holes = r.data.holes;\r\n for (var i = 0; i < holes.length; i++) {\r\n var h = holes[i];\r\n var hPts = fp.getPathPointsIgnoreMiteringSide(h);\r\n var hArea = fp.getPolygonArea(hPts.toArray());\r\n area2 += hArea;\r\n }\r\n return area1 - area2;\r\n };\r\n Floorplan.prototype.isPointInWall = function (w, p) {\r\n var floorplan = this;\r\n var orderedPoints = [\r\n w.data.startpoint,\r\n w.data.smpt1,\r\n w.data.empt1,\r\n w.data.endpoint,\r\n w.data.empt2,\r\n w.data.smpt2,\r\n w.data.startpoint\r\n ];\r\n return floorplan.isPointInPolygon(orderedPoints, p);\r\n };\r\n Floorplan.prototype.isPointInRoom = function (r, p) {\r\n var fp = this;\r\n if (r === null || r === undefined || !(r instanceof go.Node) || r.data.category !== 'RoomNode')\r\n return false;\r\n var polygon = fp.makePolygonFromRoomBoundaries(r.data.boundaryWalls);\r\n if (polygon !== null) {\r\n var polyArr = polygon.toArray();\r\n var isInRoom = fp.isPointInPolygon(polyArr, p);\r\n return isInRoom;\r\n }\r\n return false;\r\n };\r\n Floorplan.prototype.isPointInPolygon = function (vs, point) {\r\n var x = point.x;\r\n var y = point.y;\r\n var inside = false;\r\n for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {\r\n var xi = vs[i].x;\r\n var yi = vs[i].y;\r\n var xj = vs[j].x;\r\n var yj = vs[j].y;\r\n var intersect = ((yi > y) !== (yj > y))\r\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n if (intersect)\r\n inside = !inside;\r\n }\r\n return inside;\r\n };\r\n Floorplan.prototype.updateWall = function (wall) {\r\n if (wall.data.startpoint && wall.data.endpoint) {\r\n var shape = wall.findObject('SHAPE');\r\n var data = wall.data;\r\n var geo = null;\r\n var pts = [data.startpoint, data.endpoint, data.smpt1, data.smpt2, data.empt1, data.empt2];\r\n if (wall.data.isDivider) {\r\n shape.strokeWidth = 1;\r\n shape.opacity = 1;\r\n shape.fill = 'black';\r\n }\r\n else {\r\n shape.strokeWidth = 1;\r\n }\r\n pts = [data.startpoint, data.endpoint, data.smpt1, data.smpt2, data.empt1, data.empt2];\r\n geo = new go.Geometry()\r\n .add(new go.PathFigure(data.startpoint.x, data.startpoint.y)\r\n .add(new go.PathSegment(go.PathSegment.Line, data.smpt1.x, data.smpt1.y))\r\n .add(new go.PathSegment(go.PathSegment.Line, data.empt1.x, data.empt1.y))\r\n .add(new go.PathSegment(go.PathSegment.Line, data.endpoint.x, data.endpoint.y))\r\n .add(new go.PathSegment(go.PathSegment.Line, data.empt2.x, data.empt2.y))\r\n .add(new go.PathSegment(go.PathSegment.Line, data.smpt2.x, data.smpt2.y))\r\n .add(new go.PathSegment(go.PathSegment.Line, data.startpoint.x, data.startpoint.y)));\r\n geo.normalize();\r\n shape.geometry = geo;\r\n var smallestX = Number.MAX_VALUE;\r\n var smallestY = Number.MAX_VALUE;\r\n for (var i = 0; i < pts.length; i++) {\r\n var pt = pts[i];\r\n if (pt.x < smallestX) {\r\n smallestX = pt.x;\r\n }\r\n if (pt.y < smallestY) {\r\n smallestY = pt.y;\r\n }\r\n }\r\n wall.position = new go.Point(smallestX, smallestY);\r\n wall.location = new go.Point(smallestX, smallestY);\r\n }\r\n };\r\n Floorplan.prototype.updateRoom = function (room) {\r\n var fp = this;\r\n var shape = room.findObject('SHAPE');\r\n var geo = new go.Geometry();\r\n var pts = [];\r\n var bw = room.data.boundaryWalls;\r\n if (bw === null)\r\n return;\r\n var fig = null;\r\n addPathToGeo(bw);\r\n function addPathToGeo(boundaryWalls) {\r\n var firstWallKey = boundaryWalls[0][0];\r\n var firstWall = fp.findNodeForKey(firstWallKey);\r\n var firstSide = boundaryWalls[0][1];\r\n var secondWallKey = boundaryWalls[1][0];\r\n var secondWall = fp.findNodeForKey(secondWallKey);\r\n var ip = fp.getWallsIntersection(firstWall, secondWall);\r\n if (firstWall.data.key === secondWall.data.key) {\r\n ip = fp.getClockwiseWallEndpoint(firstWall, firstSide);\r\n }\r\n if (ip === null)\r\n return;\r\n var propS = 'smpt' + firstSide;\r\n var propE = 'empt' + firstSide;\r\n var ptS = firstWall.data[propS];\r\n var ptE = firstWall.data[propE];\r\n var distS = Math.sqrt(ip.distanceSquaredPoint(ptS));\r\n var distE = Math.sqrt(ip.distanceSquaredPoint(ptE));\r\n var closestPt = (distS < distE) ? ptS : ptE;\r\n var farthestPt = closestPt.equals(ptS) ? ptE : ptS;\r\n var firstPt = farthestPt.copy();\r\n pts.push(farthestPt);\r\n pts.push(closestPt);\r\n if (fig === null) {\r\n fig = new go.PathFigure(farthestPt.x, farthestPt.y);\r\n }\r\n else {\r\n fig.add(new go.PathSegment(go.PathSegment.Move, farthestPt.x, farthestPt.y));\r\n }\r\n fig.add(new go.PathSegment(go.PathSegment.Line, closestPt.x, closestPt.y));\r\n var prevPt = closestPt;\r\n var prevWall = firstWall;\r\n for (var i = 0; i < boundaryWalls.length; i++) {\r\n var entry = boundaryWalls[i];\r\n if (typeof entry === 'string')\r\n continue;\r\n var wk = entry[0];\r\n var w = fp.findNodeForKey(wk);\r\n var s = entry[1];\r\n if (i !== 0) {\r\n var propS1 = 'smpt' + s;\r\n var propE1 = 'empt' + s;\r\n var ptS1 = w.data[propS1];\r\n var ptE1 = w.data[propE1];\r\n var distS1 = Math.sqrt(prevPt.distanceSquaredPoint(ptS1));\r\n var distE1 = Math.sqrt(prevPt.distanceSquaredPoint(ptE1));\r\n var closestPt1 = (distS1 < distE1) ? ptS1 : ptE1;\r\n var farthestPt1 = closestPt1.equals(ptS1) ? ptE1 : ptS1;\r\n if (prevWall.data.key === w.data.key) {\r\n fig.add(new go.PathSegment(go.PathSegment.Line, prevPt.x, prevPt.y));\r\n fig.add(new go.PathSegment(go.PathSegment.Line, closestPt1.x, closestPt1.y));\r\n }\r\n fig.add(new go.PathSegment(go.PathSegment.Line, closestPt1.x, closestPt1.y));\r\n fig.add(new go.PathSegment(go.PathSegment.Line, farthestPt1.x, farthestPt1.y));\r\n pts.push(closestPt1);\r\n pts.push(farthestPt1);\r\n prevPt = farthestPt1;\r\n prevWall = w;\r\n }\r\n }\r\n fig.add(new go.PathSegment(go.PathSegment.Line, firstPt.x, firstPt.y));\r\n }\r\n var holes = room.data.holes;\r\n if (holes !== null && holes.length !== 0) {\r\n for (var i = 0; i < holes.length; i++) {\r\n var holePath = holes[i];\r\n addPathToGeo(holePath);\r\n }\r\n }\r\n if (fig !== null) {\r\n geo.add(fig);\r\n }\r\n geo.normalize();\r\n shape.geometry = geo;\r\n var smallestX = Number.MAX_VALUE;\r\n var smallestY = Number.MAX_VALUE;\r\n for (var i = 0; i < pts.length; i++) {\r\n var pt = pts[i];\r\n if (pt.x < smallestX) {\r\n smallestX = pt.x;\r\n }\r\n if (pt.y < smallestY) {\r\n smallestY = pt.y;\r\n }\r\n }\r\n room.position = new go.Point(smallestX, smallestY);\r\n room.location = new go.Point(smallestX, smallestY);\r\n fp.model.setDataProperty(room.data, 'loc', new go.Point(smallestX, smallestY));\r\n var area = fp.getRoomArea(room);\r\n fp.model.setDataProperty(room.data, 'area', area);\r\n };\r\n Floorplan.prototype.getAdjustedPoint = function (point, wall, angle, wallOffset) {\r\n var oldPoint = point.copy();\r\n point.offset(0, -(wall.data.thickness * .5) - wallOffset);\r\n point.offset(-oldPoint.x, -oldPoint.y).rotate(angle).offset(oldPoint.x, oldPoint.y);\r\n return point;\r\n };\r\n Floorplan.prototype.buildDimensionLink = function (wall, index, point1, point2, angle, wallOffset, soloWallFlag, floorplan, miteringSide, opacity, stroke, strokeWidth) {\r\n point1 = floorplan.getAdjustedPoint(point1, wall, angle, wallOffset);\r\n point2 = floorplan.getAdjustedPoint(point2, wall, angle, wallOffset);\r\n if (opacity === undefined || opacity === null || isNaN(opacity)) {\r\n opacity = 1;\r\n }\r\n if (strokeWidth === undefined || strokeWidth === null || isNaN(strokeWidth)) {\r\n strokeWidth = 2;\r\n }\r\n if (stroke === undefined || stroke === null) {\r\n stroke = 'gray';\r\n }\r\n var data1 = { key: wall.data.key + 'PointNode' + miteringSide + index, category: 'PointNode', loc: go.Point.stringify(point1) };\r\n var data2 = { key: wall.data.key + 'PointNode' + miteringSide + (index + 1), category: 'PointNode', loc: go.Point.stringify(point2) };\r\n var data3 = {\r\n key: wall.data.key + 'DimensionLink', category: 'DimensionLink', from: data1.key, to: data2.key,\r\n angle: angle, wall: wall.data.key, soloWallFlag: soloWallFlag\r\n };\r\n var pointNode1 = makePointNode();\r\n var pointNode2 = makePointNode();\r\n var link = makeDimensionLink(opacity, stroke, strokeWidth);\r\n floorplan.pointNodes.add(pointNode1);\r\n floorplan.pointNodes.add(pointNode2);\r\n floorplan.dimensionLinks.add(link);\r\n floorplan.add(pointNode1);\r\n floorplan.add(pointNode2);\r\n floorplan.add(link);\r\n pointNode1.data = data1;\r\n pointNode2.data = data2;\r\n link.data = data3;\r\n link.fromNode = pointNode1;\r\n link.toNode = pointNode2;\r\n link.data.length = Math.sqrt(pointNode1.location.distanceSquaredPoint(pointNode2.location));\r\n };\r\n Floorplan.prototype.updateWallDimensions = function () {\r\n var floorplan = this;\r\n floorplan.skipsUndoManager = true;\r\n floorplan.startTransaction('update wall dimensions');\r\n if (!floorplan.model.modelData.preferences.showWallLengths) {\r\n floorplan.pointNodes.iterator.each(function (node) { floorplan.remove(node); });\r\n floorplan.dimensionLinks.iterator.each(function (link) { floorplan.remove(link); });\r\n floorplan.pointNodes.clear();\r\n floorplan.dimensionLinks.clear();\r\n floorplan.commitTransaction('update wall dimensions');\r\n floorplan.skipsUndoManager = false;\r\n return;\r\n }\r\n floorplan.pointNodes.iterator.each(function (node) { floorplan.remove(node); });\r\n floorplan.dimensionLinks.iterator.each(function (link) { floorplan.remove(link); });\r\n floorplan.pointNodes.clear();\r\n floorplan.dimensionLinks.clear();\r\n var selection = floorplan.selection;\r\n var walls = new go.Set();\r\n selection.iterator.each(function (part) {\r\n if ((part.category === 'WindowNode' || part.category === 'DoorNode') && part.containingGroup !== null) {\r\n walls.add(part.containingGroup);\r\n }\r\n if (part.category === 'WallGroup' && part.data && part.data.startpoint && part.data.endpoint) {\r\n var wall = part;\r\n var areWallPartsSelected_1 = false;\r\n wall.memberParts.each(function (wp) {\r\n if (wp.isSelected) {\r\n areWallPartsSelected_1 = true;\r\n }\r\n });\r\n if (!areWallPartsSelected_1) {\r\n var ang = wall.data.startpoint.directionPoint(wall.data.endpoint);\r\n var s1 = wall.data.smpt1;\r\n var e1 = wall.data.empt1;\r\n var first = ((s1.x + s1.y) <= (e1.x + e1.y)) ? s1 : e1;\r\n var second = ((s1.x + s1.y) > (e1.x + e1.y)) ? s1 : e1;\r\n floorplan.buildDimensionLink(wall, 1, first.copy(), second.copy(), (ang + 180) % 360, 10, true, floorplan, 1);\r\n var s2 = wall.data.smpt2;\r\n var e2 = wall.data.empt2;\r\n first = ((s2.x + s2.y) <= (e2.x + e2.y)) ? s2 : e2;\r\n second = ((s2.x + s2.y) > (e2.x + e2.y)) ? s2 : e2;\r\n floorplan.buildDimensionLink(wall, 2, first.copy(), second.copy(), ang, 10, true, floorplan, 1);\r\n }\r\n }\r\n });\r\n walls.iterator.each(function (wall) {\r\n var _loop_1 = function (i) {\r\n var startpoint = wall.data['smpt' + i];\r\n var endpoint = wall.data['empt' + i];\r\n var firstWallPt = ((startpoint.x + startpoint.y) <= (endpoint.x + endpoint.y)) ? startpoint : endpoint;\r\n var lastWallPt = ((startpoint.x + startpoint.y) > (endpoint.x + endpoint.y)) ? startpoint : endpoint;\r\n var angle = wall.data.startpoint.directionPoint(wall.data.endpoint);\r\n if (i === 1) {\r\n angle = (angle + 180) % 360;\r\n }\r\n var wallPartEndpoints = [];\r\n wall.memberParts.iterator.each(function (wallPart) {\r\n if (wallPart.isSelected) {\r\n var endpoints = getWallPartEndpoints(wallPart);\r\n var ep1 = endpoints[0];\r\n var ep2 = endpoints[1];\r\n var newEp1 = floorplan.rotateAndTranslatePoint(ep1, angle + 0, wall.data.thickness / 2);\r\n var newEp2 = floorplan.rotateAndTranslatePoint(ep2, angle + 0, wall.data.thickness / 2);\r\n wallPartEndpoints.push(ep1);\r\n wallPartEndpoints.push(ep2);\r\n }\r\n });\r\n wallPartEndpoints.sort(function (a, b) {\r\n if ((a.x + a.y) > (b.x + b.y))\r\n return 1;\r\n if ((a.x + a.y) < (b.x + b.y))\r\n return -1;\r\n else\r\n return 0;\r\n });\r\n wallPartEndpoints.unshift(firstWallPt);\r\n wallPartEndpoints.push(lastWallPt);\r\n var k = 1;\r\n for (var j = 0; j < wallPartEndpoints.length - 1; j++) {\r\n var linkPoint1 = null;\r\n var linkPoint2 = null;\r\n var itr = floorplan.pointNodes.iterator;\r\n while (itr.next()) {\r\n var node = itr.value;\r\n if (node.data.key === wall.data.key + 'PointNode' + k) {\r\n linkPoint1 = node;\r\n }\r\n if (node.data.key === wall.data.key + 'PointNode' + (k + 1)) {\r\n linkPoint2 = node;\r\n }\r\n }\r\n if (linkPoint1 !== null && linkPoint2 !== null) {\r\n var newLoc1 = floorplan.getAdjustedPoint(wallPartEndpoints[j].copy(), wall, angle, 15);\r\n var newLoc2 = floorplan.getAdjustedPoint(wallPartEndpoints[j + 1].copy(), wall, angle, 15);\r\n linkPoint1.data.loc = go.Point.stringify(newLoc1);\r\n linkPoint2.data.loc = go.Point.stringify(newLoc2);\r\n linkPoint1.updateTargetBindings();\r\n linkPoint2.updateTargetBindings();\r\n }\r\n else {\r\n floorplan.buildDimensionLink(wall, k, wallPartEndpoints[j].copy(), wallPartEndpoints[j + 1].copy(), angle, 15, false, floorplan, i, .5, 'gray', 1);\r\n }\r\n k += 2;\r\n }\r\n var totalWallDimensionLink = null;\r\n floorplan.dimensionLinks.iterator.each(function (link) {\r\n if (link.fromNode !== null && link.toNode !== null && (link.fromNode.data.key === wall.data.key + 'PointNode' + i + k) &&\r\n (link.toNode.data.key === wall.data.key + 'PointNode' + i + (k + 1))) {\r\n totalWallDimensionLink = link;\r\n }\r\n });\r\n if (totalWallDimensionLink !== null) {\r\n var linkPoint1 = null;\r\n var linkPoint2 = null;\r\n var itr = floorplan.pointNodes.iterator;\r\n while (itr.next()) {\r\n var node = itr.value;\r\n if (node.data.key === wall.data.key + 'PointNode' + k) {\r\n linkPoint1 = node;\r\n }\r\n if (node.data.key === wall.data.key + 'PointNode' + (k + 1)) {\r\n linkPoint2 = node;\r\n }\r\n }\r\n if (linkPoint1 !== null && linkPoint2 !== null) {\r\n var newLoc1 = floorplan.getAdjustedPoint(wallPartEndpoints[0].copy(), wall, angle, 25);\r\n var newLoc2 = floorplan.getAdjustedPoint(wallPartEndpoints[wallPartEndpoints.length - 1].copy(), wall, angle, 25);\r\n linkPoint1.data.loc = go.Point.stringify(newLoc1);\r\n linkPoint2.data.loc = go.Point.stringify(newLoc2);\r\n linkPoint1.updateTargetBindings();\r\n linkPoint2.updateTargetBindings();\r\n }\r\n }\r\n else {\r\n floorplan.buildDimensionLink(wall, k, wallPartEndpoints[0].copy(), wallPartEndpoints[wallPartEndpoints.length - 1].copy(), angle, 25, false, floorplan, i);\r\n }\r\n };\r\n for (var i = 1; i < 3; i++) {\r\n _loop_1(i);\r\n }\r\n });\r\n floorplan.dimensionLinks.iterator.each(function (link) {\r\n var canStay = false;\r\n floorplan.pointNodes.iterator.each(function (node) {\r\n if (node.data.key === link.data.to)\r\n canStay = true;\r\n });\r\n if (!canStay)\r\n floorplan.remove(link);\r\n else {\r\n if (link !== null && link.toNode !== null && link.fromNode !== null) {\r\n var length_1 = Math.sqrt(link.toNode.location.distanceSquaredPoint(link.fromNode.location));\r\n if (length_1 < 1 && !link.data.soloWallFlag)\r\n link.visible = false;\r\n }\r\n }\r\n });\r\n floorplan.commitTransaction('update wall dimensions');\r\n floorplan.skipsUndoManager = false;\r\n };\r\n Floorplan.prototype.rotateAndTranslatePoint = function (pt, angle, distance) {\r\n var x = pt.x;\r\n var y = pt.y;\r\n var newX = Math.cos(x * Math.PI / 180) * distance + x;\r\n var newY = Math.sin(x * Math.PI / 180) * distance + y;\r\n var newPt = new go.Point(newX, newY);\r\n return newPt;\r\n };\r\n Floorplan.prototype.getWallsIntersection = function (w1, w2) {\r\n if (w1 === null || w2 === null) {\r\n return null;\r\n }\r\n var x1 = w1.data.startpoint.x;\r\n var y1 = w1.data.startpoint.y;\r\n var x2 = w1.data.endpoint.x;\r\n var y2 = w1.data.endpoint.y;\r\n var x3 = w2.data.startpoint.x;\r\n var y3 = w2.data.startpoint.y;\r\n var x4 = w2.data.endpoint.x;\r\n var y4 = w2.data.endpoint.y;\r\n if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) {\r\n return null;\r\n }\r\n var denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\r\n function pointsApproximatelyEqual(p1, p2) {\r\n var xa = p1.x;\r\n var xb = p2.x;\r\n var ya = p1.y;\r\n var yb = p2.y;\r\n var diff1 = Math.abs(xb - xa);\r\n var diff2 = Math.abs(yb - ya);\r\n if (diff2 < .05 && diff1 < .05) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n if (denominator === 0) {\r\n if (pointsApproximatelyEqual(w1.data.startpoint, w2.data.startpoint) || pointsApproximatelyEqual(w1.data.startpoint, w2.data.endpoint))\r\n return w1.data.startpoint;\r\n if (pointsApproximatelyEqual(w1.data.endpoint, w2.data.startpoint) || pointsApproximatelyEqual(w1.data.endpoint, w2.data.endpoint))\r\n return w1.data.endpoint;\r\n return null;\r\n }\r\n var ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\r\n var ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;\r\n var ua1 = +ua.toFixed(2);\r\n var ub1 = +ub.toFixed(2);\r\n if (ua1 < 0 || ua1 > 1 || ub1 < 0 || ub1 > 1) {\r\n return null;\r\n }\r\n var x = x1 + ua * (x2 - x1);\r\n var y = y1 + ua * (y2 - y1);\r\n return new go.Point(x, y);\r\n };\r\n Floorplan.prototype.getSegmentsIntersection = function (p1, p2, p3, p4) {\r\n var x1 = p1.x;\r\n var y1 = p1.y;\r\n var x2 = p2.x;\r\n var y2 = p2.y;\r\n var x3 = p3.x;\r\n var y3 = p3.y;\r\n var x4 = p4.x;\r\n var y4 = p4.y;\r\n if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) {\r\n return null;\r\n }\r\n var denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\r\n function pointsApproximatelyEqual(pa, pb) {\r\n var xa = pa.x;\r\n var xb = pb.x;\r\n var ya = pa.y;\r\n var yb = pb.y;\r\n var diff1 = Math.abs(xb - xa);\r\n var diff2 = Math.abs(yb - ya);\r\n if (diff2 < .05 && diff1 < .05) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n if (denominator === 0) {\r\n if (pointsApproximatelyEqual(p1, p3) || pointsApproximatelyEqual(p1, p4))\r\n return p1;\r\n if (pointsApproximatelyEqual(p2, p3) || pointsApproximatelyEqual(p2, p4))\r\n return p2;\r\n return null;\r\n }\r\n var ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\r\n var ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;\r\n var ua1 = +ua.toFixed(4);\r\n var ub1 = +ub.toFixed(4);\r\n if (ua1 < 0 || ua1 > 1 || ub1 < 0 || ub1 > 1) {\r\n return null;\r\n }\r\n var x = x1 + ua * (x2 - x1);\r\n var y = y1 + ua * (y2 - y1);\r\n return new go.Point(x, y);\r\n };\r\n Floorplan.prototype.updateWallAngles = function () {\r\n var floorplan = this;\r\n floorplan.skipsUndoManager = true;\r\n floorplan.startTransaction('display angles');\r\n if (floorplan.model.modelData.preferences.showWallAngles) {\r\n floorplan.angleNodes.iterator.each(function (node) { node.visible = true; });\r\n var selectedWalls_1 = [];\r\n floorplan.selection.iterator.each(function (part) {\r\n if (part.category === 'WallGroup') {\r\n var w = part;\r\n selectedWalls_1.push(w);\r\n }\r\n });\r\n var _loop_2 = function (i) {\r\n var seen = new go.Set();\r\n var wall = selectedWalls_1[i];\r\n var possibleWalls = floorplan.findNodesByExample({ category: 'WallGroup' });\r\n possibleWalls.iterator.each(function (otherWall) {\r\n if (otherWall.data === null || wall.data === null || seen.contains(otherWall.data.key))\r\n return;\r\n if ((otherWall.data.key !== wall.data.key) && (floorplan.getWallsIntersection(wall, otherWall) !== null) && (!seen.contains(otherWall.data.key))) {\r\n seen.add(otherWall.data.key);\r\n var intersectionPoint_1 = floorplan.getWallsIntersection(wall, otherWall);\r\n if (intersectionPoint_1 !== null) {\r\n var wrt = floorplan.toolManager.mouseDownTools.elt(3);\r\n var wallsInvolved = wrt.getAllWallsAtIntersection(intersectionPoint_1);\r\n var endpoints_1 = [];\r\n wallsInvolved.iterator.each(function (w) {\r\n var tolerance = (floorplan.model.modelData.gridSize >= 10) ? floorplan.model.modelData.gridSize : 10;\r\n if (Math.sqrt(w.data.startpoint.distanceSquaredPoint(intersectionPoint_1)) > tolerance)\r\n endpoints_1.push({ point: w.data.startpoint, wall: w.data.key });\r\n if (Math.sqrt(w.data.endpoint.distanceSquaredPoint(intersectionPoint_1)) > tolerance)\r\n endpoints_1.push({ point: w.data.endpoint, wall: w.data.key });\r\n });\r\n var maxRadius = 30;\r\n for (var j = 0; j < endpoints_1.length; j++) {\r\n var distance = Math.sqrt(endpoints_1[j].point.distanceSquaredPoint(intersectionPoint_1));\r\n if (distance < maxRadius)\r\n maxRadius = distance;\r\n }\r\n endpoints_1.sort(function (a, b) {\r\n a = a.point;\r\n b = b.point;\r\n if (a.x - intersectionPoint_1.x >= 0 && b.x - intersectionPoint_1.x < 0)\r\n return 1;\r\n if (a.x - intersectionPoint_1.x < 0 && b.x - intersectionPoint_1.x >= 0)\r\n return -1;\r\n if (a.x - intersectionPoint_1.x === 0 && b.x - intersectionPoint_1.x === 0) {\r\n if (a.y - intersectionPoint_1.y >= 0 || b.y - intersectionPoint_1.y >= 0)\r\n return a.y > b.y ? 1 : -1;\r\n return b.y > a.y ? 1 : -1;\r\n }\r\n var det = (a.x - intersectionPoint_1.x) * (b.y - intersectionPoint_1.y) - (b.x - intersectionPoint_1.x) * (a.y - intersectionPoint_1.y);\r\n if (det < 0)\r\n return 1;\r\n if (det > 0)\r\n return -1;\r\n var d1 = (a.x - intersectionPoint_1.x) * (a.x - intersectionPoint_1.x) + (a.y - intersectionPoint_1.y) * (a.y - intersectionPoint_1.y);\r\n var d2 = (b.x - intersectionPoint_1.x) * (b.x - intersectionPoint_1.x) + (b.y - intersectionPoint_1.y) * (b.y - intersectionPoint_1.y);\r\n return d1 > d2 ? 1 : -1;\r\n });\r\n var _loop_3 = function (j) {\r\n var p1 = endpoints_1[j];\r\n var p2 = void 0;\r\n if (endpoints_1[j + 1] != null) {\r\n p2 = endpoints_1[j + 1];\r\n }\r\n else {\r\n p2 = endpoints_1[0];\r\n }\r\n var a1 = intersectionPoint_1.directionPoint(p1.point);\r\n var a2 = intersectionPoint_1.directionPoint(p2.point);\r\n var sweep = Math.abs(a2 - a1 + 360) % 360;\r\n var angle = a1;\r\n var keyArray = [];\r\n wallsInvolved.iterator.each(function (w) { keyArray.push(w); });\r\n keyArray.sort(function (a, b) {\r\n var aIndex = a.data.key.match(/\\d+/g);\r\n var bIndex = b.data.key.match(/\\d+/g);\r\n if (isNaN(aIndex))\r\n return 1;\r\n if (isNaN(bIndex))\r\n return -1;\r\n else\r\n return aIndex > bIndex ? 1 : -1;\r\n });\r\n var key = '';\r\n for (var k = 0; k < keyArray.length; k++)\r\n key += keyArray[k].data.key;\r\n key += 'angle' + j;\r\n var angleNode = null;\r\n var aitr = floorplan.angleNodes.iterator;\r\n while (aitr.next()) {\r\n var aNode = aitr.value;\r\n if (aNode.data.key === key) {\r\n angleNode = aNode;\r\n }\r\n }\r\n if (angleNode !== null) {\r\n angleNode.data.angle = angle;\r\n angleNode.data.sweep = sweep;\r\n angleNode.data.loc = go.Point.stringify(intersectionPoint_1);\r\n angleNode.data.maxRadius = maxRadius;\r\n angleNode.updateTargetBindings();\r\n }\r\n else {\r\n var data = {\r\n key: key, category: 'AngleNode', loc: go.Point.stringify(intersectionPoint_1),\r\n stroke: 'dodgerblue', angle: angle, sweep: sweep, maxRadius: maxRadius\r\n };\r\n var newAngleNode = makeAngleNode();\r\n newAngleNode.data = data;\r\n floorplan.add(newAngleNode);\r\n newAngleNode.updateTargetBindings();\r\n floorplan.angleNodes.add(newAngleNode);\r\n }\r\n };\r\n for (var j = 0; j < endpoints_1.length; j++) {\r\n _loop_3(j);\r\n }\r\n }\r\n }\r\n });\r\n };\r\n for (var i = 0; i < selectedWalls_1.length; i++) {\r\n _loop_2(i);\r\n }\r\n var garbage_1 = [];\r\n floorplan.angleNodes.iterator.each(function (node) {\r\n var keyNums = node.data.key.match(/\\d+/g);\r\n var numWalls = (node.data.key.match(/wall/g) || []).length;\r\n var wallsInvolved = [];\r\n for (var i = 0; i < keyNums.length - 1; i++) {\r\n wallsInvolved.push('wall' + keyNums[i]);\r\n }\r\n if (numWalls !== keyNums.length - 1) {\r\n wallsInvolved.push('wall');\r\n }\r\n for (var i = 0; i < wallsInvolved.length - 1; i++) {\r\n var wall1 = floorplan.findPartForKey(wallsInvolved[i]);\r\n var wall2 = floorplan.findPartForKey(wallsInvolved[i + 1]);\r\n var intersectionPoint = floorplan.getWallsIntersection(wall1, wall2);\r\n if (intersectionPoint === null)\r\n garbage_1.push(node);\r\n }\r\n var possibleAngleNodes = new go.Set();\r\n var allWalls = node.data.key.slice(0, node.data.key.indexOf('angle'));\r\n floorplan.angleNodes.iterator.each(function (other) { if (other.data.key.indexOf(allWalls) !== -1)\r\n possibleAngleNodes.add(other); });\r\n possibleAngleNodes.iterator.each(function (pNode) {\r\n if (pNode.data.loc !== node.data.loc) {\r\n garbage_1.push(pNode);\r\n }\r\n });\r\n if (node.data.sweep === 0)\r\n garbage_1.push(node);\r\n });\r\n for (var i = 0; i < garbage_1.length; i++) {\r\n floorplan.remove(garbage_1[i]);\r\n floorplan.angleNodes.remove(garbage_1[i]);\r\n }\r\n }\r\n if (floorplan.model.modelData.preferences.showOnlySmallWallAngles) {\r\n floorplan.angleNodes.iterator.each(function (node) { if (node.data.sweep >= 180)\r\n node.visible = false; });\r\n }\r\n if (!floorplan.model.modelData.preferences.showWallAngles) {\r\n floorplan.angleNodes.iterator.each(function (node) { node.visible = false; });\r\n }\r\n floorplan.commitTransaction('display angles');\r\n floorplan.skipsUndoManager = false;\r\n };\r\n Floorplan.prototype.findClosestLocOnWall = function (wall, part) {\r\n var orderedConstrainingPts = [];\r\n var startpoint = wall.data.startpoint.copy();\r\n var endpoint = wall.data.endpoint.copy();\r\n var firstWallPt = ((startpoint.x + startpoint.y) <= (endpoint.x + endpoint.y)) ? startpoint : endpoint;\r\n var lastWallPt = ((startpoint.x + startpoint.y) > (endpoint.x + endpoint.y)) ? startpoint : endpoint;\r\n var wallPartEndpoints = [];\r\n wall.memberParts.iterator.each(function (wallPart) {\r\n var endpoints = getWallPartEndpoints(wallPart);\r\n wallPartEndpoints.push(endpoints[0]);\r\n wallPartEndpoints.push(endpoints[1]);\r\n });\r\n wallPartEndpoints.sort(function (a, b) {\r\n if ((a.x + a.y) > (b.x + b.y)) {\r\n return 1;\r\n }\r\n if ((a.x + a.y) < (b.x + b.y)) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n orderedConstrainingPts.push(firstWallPt);\r\n orderedConstrainingPts = orderedConstrainingPts.concat(wallPartEndpoints);\r\n orderedConstrainingPts.push(lastWallPt);\r\n var possibleStretches = [];\r\n for (var i = 0; i < orderedConstrainingPts.length; i += 2) {\r\n var point1 = orderedConstrainingPts[i];\r\n var point2 = orderedConstrainingPts[i + 1];\r\n var distanceBetween = Math.sqrt(point1.distanceSquaredPoint(point2));\r\n if (distanceBetween >= part.data.length) {\r\n possibleStretches.push({ pt1: point1, pt2: point2 });\r\n }\r\n }\r\n var closestDist = Number.MAX_VALUE;\r\n var closestStretch = null;\r\n for (var i = 0; i < possibleStretches.length; i++) {\r\n var testStretch = possibleStretches[i];\r\n var testPoint1 = testStretch.pt1;\r\n var testPoint2 = testStretch.pt2;\r\n var testDistance1 = Math.sqrt(testPoint1.distanceSquaredPoint(part.location));\r\n var testDistance2 = Math.sqrt(testPoint2.distanceSquaredPoint(part.location));\r\n if (testDistance1 < closestDist) {\r\n closestDist = testDistance1;\r\n closestStretch = testStretch;\r\n }\r\n if (testDistance2 < closestDist) {\r\n closestDist = testDistance2;\r\n closestStretch = testStretch;\r\n }\r\n }\r\n if (closestStretch === null) {\r\n return null;\r\n }\r\n var closestStretchLength = Math.sqrt(closestStretch.pt1.distanceSquaredPoint(closestStretch.pt2));\r\n var offset = part.data.length / 2;\r\n var pt1 = new go.Point(closestStretch.pt1.x + ((offset / closestStretchLength) * (closestStretch.pt2.x - closestStretch.pt1.x)), closestStretch.pt1.y + ((offset / closestStretchLength) * (closestStretch.pt2.y - closestStretch.pt1.y)));\r\n var pt2 = new go.Point(closestStretch.pt2.x + ((offset / closestStretchLength) * (closestStretch.pt1.x - closestStretch.pt2.x)), closestStretch.pt2.y + ((offset / closestStretchLength) * (closestStretch.pt1.y - closestStretch.pt2.y)));\r\n var newLoc = part.location.copy().projectOntoLineSegmentPoint(pt1, pt2);\r\n return newLoc;\r\n };\r\n return Floorplan;\r\n}(go.Diagram));\r\nexports.Floorplan = Floorplan;\r\nfunction makeSelectionGroup(floorplan) {\r\n floorplan.startTransaction('group selection');\r\n var sel = floorplan.selection;\r\n var nodes = [];\r\n sel.iterator.each(function (n) {\r\n if (n instanceof go.Group) {\r\n n.memberParts.iterator.each(function (part) {\r\n nodes.push(part);\r\n });\r\n }\r\n else {\r\n nodes.push(n);\r\n }\r\n });\r\n for (var i = 0; i < nodes.length; i++) {\r\n nodes[i].isSelected = true;\r\n }\r\n ungroupSelection(floorplan);\r\n floorplan.commandHandler.groupSelection();\r\n var group = floorplan.selection.first();\r\n if (group !== null) {\r\n floorplan.model.setDataProperty(group.data, 'caption', 'Group');\r\n floorplan.model.setDataProperty(group.data, 'notes', '');\r\n }\r\n clearEmptyGroups(floorplan);\r\n floorplan.clearSelection();\r\n floorplan.select(group);\r\n floorplan.commitTransaction('group selection');\r\n}\r\nfunction ungroupSelection(floorplan) {\r\n floorplan.startTransaction('ungroup selection');\r\n function ungroupNode(node) {\r\n var group = node.containingGroup;\r\n node.containingGroup = null;\r\n if (group !== null) {\r\n if (group.memberParts.count === 0) {\r\n floorplan.remove(group);\r\n }\r\n else if (group.memberParts.count === 1) {\r\n var mpf = group.memberParts.first();\r\n if (mpf !== null) {\r\n mpf.containingGroup = null;\r\n }\r\n }\r\n }\r\n }\r\n var sel = floorplan.selection;\r\n var groups = [];\r\n sel.iterator.each(function (n) {\r\n if (!(n instanceof go.Group)) {\r\n ungroupNode(n);\r\n }\r\n else {\r\n groups.push(n);\r\n }\r\n });\r\n var nodes = [];\r\n for (var i = 0; i < groups.length; i++) {\r\n groups[i].memberParts.iterator.each(function (n) { nodes.push(n); });\r\n }\r\n for (var i = 0; i < nodes.length; i++) {\r\n ungroupNode(nodes[i]);\r\n }\r\n clearEmptyGroups(floorplan);\r\n floorplan.commitTransaction('ungroup selection');\r\n}\r\nfunction clearEmptyGroups(floorplan) {\r\n var nodes = floorplan.nodes;\r\n var arr = [];\r\n nodes.iterator.each(function (node) {\r\n if (node instanceof go.Group && node.memberParts.count === 0 && node.category !== 'WallGroup') {\r\n arr.push(node);\r\n }\r\n });\r\n for (var i = 0; i < arr.length; i++) {\r\n floorplan.remove(arr[i]);\r\n }\r\n}\r\nfunction makeGroupToolTip() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Adornment, 'Auto', $(go.Shape, { fill: '#FFFFCC' }), $(go.TextBlock, { margin: 4 }, new go.Binding('text', '', function (text, obj) {\r\n var data = obj.part.adornedObject.data;\r\n var name = (obj.part.adornedObject.category === 'MultiPurposeNode') ? data.text : data.caption;\r\n return 'Name: ' + name + '\\nNotes: ' + data.notes + '\\nMembers: ' + obj.part.adornedObject.memberParts.count;\r\n }).ofObject()));\r\n}\r\nfunction makeContextMenu() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Adornment, 'Vertical', $('ContextMenuButton', $(go.TextBlock, 'Make Room'), {\r\n click: function (e, obj) {\r\n var fp = e.diagram;\r\n var pt = e.diagram.lastInput.documentPoint;\r\n fp.maybeAddRoomNode(pt, 'images/textures/floor1.jpg');\r\n }\r\n }, new go.Binding('visible', '', function () {\r\n var state = window.state;\r\n if (state && state !== 'RoomDimensioning') {\r\n return false;\r\n }\r\n return true;\r\n })), $('ContextMenuButton', $(go.TextBlock, 'Make Group'), {\r\n click: function (e, obj) {\r\n var part = obj.part;\r\n if (part !== null) {\r\n var fp = part.diagram;\r\n makeSelectionGroup(fp);\r\n }\r\n }\r\n }, new go.Binding('visible', 'visible', function (v, obj) {\r\n var floorplan = obj.part.diagram;\r\n if (floorplan.selection.count <= 1) {\r\n return false;\r\n }\r\n var flag = true;\r\n floorplan.selection.iterator.each(function (node) {\r\n if (node.category === 'WallGroup' || node.category === 'WindowNode' || node.category === 'DoorNode' || node.category === 'RoomNode') {\r\n flag = false;\r\n }\r\n });\r\n return flag;\r\n }).ofObject()), $('ContextMenuButton', $(go.TextBlock, 'Ungroup'), {\r\n click: function (e, obj) {\r\n var part = obj.part;\r\n if (part !== null) {\r\n var fp = part.diagram;\r\n ungroupSelection(fp);\r\n }\r\n }\r\n }, new go.Binding('visible', '', function (v, obj) {\r\n var floorplan = obj.part.diagram;\r\n if (floorplan !== null) {\r\n var node = floorplan.selection.first();\r\n return ((node instanceof go.Node && node.containingGroup != null && node.containingGroup.category !== 'WallGroup') ||\r\n (node instanceof go.Group && node.category === ''));\r\n }\r\n return false;\r\n }).ofObject()), $('ContextMenuButton', $(go.TextBlock, 'Delete'), {\r\n click: function (e, obj) {\r\n var part = obj.part;\r\n if (part !== null && part.diagram !== null) {\r\n part.diagram.commandHandler.deleteSelection();\r\n }\r\n }\r\n }, new go.Binding('visible', '', function (v, obj) {\r\n if (obj.part.diagram.isReadOnly) {\r\n return false;\r\n }\r\n if (obj.part.diagram !== null) {\r\n return obj.part.diagram.selection.count > 0;\r\n }\r\n return false;\r\n }).ofObject()));\r\n}\r\nfunction makeDefaultGroup() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Group, 'Vertical', {\r\n contextMenu: makeContextMenu(),\r\n toolTip: makeGroupToolTip()\r\n }, new go.Binding('location', 'loc'), $(go.Panel, 'Auto', $(go.Shape, 'RoundedRectangle', { fill: 'rgba(128,128,128,0.15)', stroke: 'rgba(128, 128, 128, .05)', name: 'SHAPE', strokeCap: 'square' }, new go.Binding('fill', 'isSelected', function (s, obj) {\r\n return s ? 'rgba(128, 128, 128, .15)' : 'rgba(128, 128, 128, 0.10)';\r\n }).ofObject()), $(go.Placeholder, { padding: 5 })));\r\n}\r\nfunction makeArc(node) {\r\n var ang = node.data.angle;\r\n var sweep = node.data.sweep;\r\n var rad = Math.min(30, node.data.maxRadius);\r\n if (typeof sweep === 'number' && sweep > 0) {\r\n var start = new go.Point(rad, 0).rotate(ang);\r\n return new go.Geometry()\r\n .add(new go.PathFigure(start.x + rad, start.y + rad)\r\n .add(new go.PathSegment(go.PathSegment.Arc, ang, sweep, rad, rad, rad, rad)))\r\n .add(new go.PathFigure(0, 0))\r\n .add(new go.PathFigure(2 * rad, 2 * rad));\r\n }\r\n else {\r\n return new go.Geometry()\r\n .add(new go.PathFigure(0, 0))\r\n .add(new go.PathFigure(2 * rad, 2 * rad));\r\n }\r\n}\r\nfunction makePointNode() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Node, 'Position', new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify));\r\n}\r\nfunction makeAngleNode() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Node, 'Spot', { locationSpot: go.Spot.Center, locationObjectName: 'SHAPE', selectionAdorned: false }, new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify), $(go.Shape, 'Circle', { name: 'SHAPE', height: 0, width: 0 }), $(go.Shape, { strokeWidth: 1.5, fill: null }, new go.Binding('geometry', '', makeArc).ofObject(), new go.Binding('stroke', 'sweep', function (sweep) {\r\n return (sweep % 45 < 1 || sweep % 45 > 44) ? 'dodgerblue' : 'lightblue';\r\n })), $(go.Panel, 'Auto', { name: 'ARCLABEL' }, new go.Binding('alignment', 'sweep', function (sweep, panel) {\r\n var rad = Math.min(30, panel.part.data.maxRadius);\r\n var angle = panel.part.data.angle;\r\n var cntr = new go.Point(rad, 0).rotate(angle + sweep / 2);\r\n return new go.Spot(0.5, 0.5, cntr.x, cntr.y);\r\n }), $(go.Shape, { fill: 'white' }, new go.Binding('stroke', 'sweep', function (sweep) {\r\n return (sweep % 45 < 1 || sweep % 45 > 44) ? 'dodgerblue' : 'lightblue';\r\n })), $(go.TextBlock, { font: '7pt sans-serif', margin: 2 }, new go.Binding('text', 'sweep', function (sweep) {\r\n return sweep.toFixed(2) + String.fromCharCode(176);\r\n }))));\r\n}\r\nfunction makeDimensionLink(opacity, stroke, strokeWidth) {\r\n if (opacity === null || opacity === undefined || isNaN(opacity)) {\r\n opacity = 1;\r\n }\r\n if (strokeWidth === null || strokeWidth === undefined || isNaN(strokeWidth)) {\r\n strokeWidth = 2;\r\n }\r\n if (stroke === null || stroke === undefined) {\r\n stroke = 'gray';\r\n }\r\n var $ = go.GraphObject.make;\r\n return $(go.Link, $(go.Shape, { stroke: stroke, strokeWidth: strokeWidth, name: 'SHAPE', opacity: opacity }), $(go.Shape, { toArrow: 'OpenTriangle', stroke: stroke, strokeWidth: strokeWidth, opacity: opacity }), $(go.Shape, { fromArrow: 'BackwardOpenTriangle', stroke: stroke, strokeWidth: strokeWidth, opacity: opacity }), $(go.Panel, 'Auto', new go.Binding('angle', 'angle', function (angle, link) {\r\n if (angle > 90 && angle < 270) {\r\n return (angle + 180) % 360;\r\n }\r\n return angle;\r\n }), $(go.Shape, 'RoundedRectangle', { fill: 'beige', opacity: .8, stroke: null }), $(go.TextBlock, { text: 'sometext', segmentOffset: new go.Point(0, -10), font: '13px sans-serif' }, new go.Binding('text', '', function (link) {\r\n var floorplan = link.diagram;\r\n var pxDist = link.data.length;\r\n var unitsDist = floorplan.convertPixelsToUnits(pxDist).toFixed(2);\r\n var alreadyAbbreviated = false;\r\n if (floorplan.model.modelData.units === 'inches') {\r\n var feetAndInchesObj = floorplan.convertInchesToFeetAndInches(unitsDist);\r\n var feet = parseFloat(feetAndInchesObj.feet.toFixed(2));\r\n if (feet === 0.00) {\r\n feet = '';\r\n }\r\n else {\r\n feet = feet.toString();\r\n feet += 'ft';\r\n }\r\n var inches = parseFloat(feetAndInchesObj.inches.toFixed(2));\r\n if (inches === 0.00) {\r\n inches = '';\r\n }\r\n else {\r\n inches = inches.toString();\r\n inches += 'in';\r\n }\r\n unitsDist = feet + inches;\r\n alreadyAbbreviated = true;\r\n }\r\n var unitsAbbreviation = floorplan.model.modelData.unitsAbbreviation;\r\n if (!alreadyAbbreviated) {\r\n return unitsDist.toString() + unitsAbbreviation;\r\n }\r\n else {\r\n return unitsDist.toString();\r\n }\r\n }).ofObject(), new go.Binding('segmentOffset', 'angle', function (angle, textblock) {\r\n return new go.Point(0, 10);\r\n }).ofObject(), new go.Binding('font', '', function (link) {\r\n var distance = link.data.length;\r\n if (distance > 40) {\r\n return '13px sans-serif';\r\n }\r\n if (distance <= 40 && distance >= 20) {\r\n return '11px sans-serif';\r\n }\r\n else {\r\n return '9px sans-serif';\r\n }\r\n }).ofObject())));\r\n}\r\nfunction makeNodeToolTip() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Adornment, 'Auto', $(go.Shape, { fill: '#FFFFCC' }), $(go.TextBlock, { margin: 4 }, new go.Binding('text', '', function (text, obj) {\r\n var data = obj.part.adornedObject.data;\r\n var name = (obj.part.adornedObject.category === 'MultiPurposeNode') ? data.text : data.caption;\r\n return 'Name: ' + name + '\\nNotes: ' + data.notes;\r\n }).ofObject()));\r\n}\r\nfunction makeFurnitureResizeAdornmentTemplate() {\r\n var $ = go.GraphObject.make;\r\n function makeHandle(alignment, cursor) {\r\n return $(go.Shape, { alignment: alignment, cursor: cursor, figure: 'Rectangle', desiredSize: new go.Size(7, 7), fill: 'lightblue', stroke: 'dodgerblue' });\r\n }\r\n return $(go.Adornment, 'Spot', $(go.Placeholder), makeHandle(go.Spot.Top, 'n-resize'), makeHandle(go.Spot.TopRight, 'n-resize'), makeHandle(go.Spot.BottomRight, 'se-resize'), makeHandle(go.Spot.Right, 'e-resize'), makeHandle(go.Spot.Bottom, 's-resize'), makeHandle(go.Spot.BottomLeft, 'sw-resize'), makeHandle(go.Spot.Left, 'w-resize'), makeHandle(go.Spot.TopLeft, 'nw-resize'));\r\n}\r\nfunction makeFurnitureRotateAdornmentTemplate() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Adornment, $(go.Shape, 'Circle', { cursor: 'pointer', desiredSize: new go.Size(7, 7), fill: 'lightblue', stroke: 'dodgerblue' }));\r\n}\r\nfunction invertColor(hex) {\r\n if (hex.indexOf('#') === 0) {\r\n hex = hex.slice(1);\r\n }\r\n if (hex.length === 3) {\r\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\r\n }\r\n if (hex.length !== 6) {\r\n throw new Error('Invalid HEX color.');\r\n }\r\n var r = (255 - parseInt(hex.slice(0, 2), 16)).toString(16);\r\n var g = (255 - parseInt(hex.slice(2, 4), 16)).toString(16);\r\n var b = (255 - parseInt(hex.slice(4, 6), 16)).toString(16);\r\n return '#' + padZero(r) + padZero(g) + padZero(b);\r\n}\r\nfunction padZero(str) {\r\n var len = 2;\r\n var zeros = new Array(len).join('0');\r\n return (zeros + str).slice(-len);\r\n}\r\nfunction makeDefaultNode() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Node, 'Spot', {\r\n resizable: true,\r\n rotatable: true,\r\n toolTip: makeNodeToolTip(),\r\n resizeAdornmentTemplate: makeFurnitureResizeAdornmentTemplate(),\r\n rotateAdornmentTemplate: makeFurnitureRotateAdornmentTemplate(),\r\n contextMenu: makeContextMenu(),\r\n locationObjectName: 'SHAPE',\r\n resizeObjectName: 'SHAPE',\r\n rotateObjectName: 'SHAPE',\r\n minSize: new go.Size(5, 5),\r\n locationSpot: go.Spot.Center,\r\n selectionAdornmentTemplate: makeTextureSelectionAdornment(null)\r\n }, new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify), new go.Binding('layerName', 'isSelected', function (s) {\r\n return s ? 'Foreground' : '';\r\n }).ofObject(), $(go.Panel, 'Vertical', $(go.Shape, 'Ellipse', {\r\n name: 'SHAPE', stroke: '#000000',\r\n fill: 'white'\r\n }, new go.Binding('geometryString', 'geo'), new go.Binding('figure', 'shape').makeTwoWay(), new go.Binding('width').makeTwoWay(), new go.Binding('height').makeTwoWay(), new go.Binding('angle').makeTwoWay(), new go.Binding('fill', 'texture', function (t, obj) {\r\n return updateNodeTexture(obj, t);\r\n }), new go.Binding('fill', 'usesTexture', function (usesTexture, obj) {\r\n var node = obj.part;\r\n if (node === null)\r\n return null;\r\n var t = node.data.texture;\r\n return updateNodeTexture(obj, t);\r\n })), $(go.TextBlock, 'default text', { margin: 5 }, new go.Binding('text', 'caption'), new go.Binding('visible', '', function (tb) {\r\n var node = tb.part;\r\n if (node && node.diagram) {\r\n return node.diagram instanceof go.Palette;\r\n }\r\n return false;\r\n }).ofObject())));\r\n}\r\nfunction makeMultiPurposeNode() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Node, 'Spot', {\r\n contextMenu: makeContextMenu(),\r\n toolTip: makeNodeToolTip(),\r\n locationSpot: go.Spot.Center,\r\n resizeAdornmentTemplate: makeFurnitureResizeAdornmentTemplate(),\r\n rotateAdornmentTemplate: makeFurnitureRotateAdornmentTemplate(),\r\n selectionAdornmentTemplate: makeTextureSelectionAdornment(null),\r\n locationObjectName: 'SHAPE',\r\n resizable: true,\r\n rotatable: true,\r\n resizeObjectName: 'SHAPE',\r\n rotateObjectName: 'SHAPE',\r\n minSize: new go.Size(5, 5)\r\n }, new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify), new go.Binding('layerName', 'isSelected', function (s) { return s ? 'Foreground' : ''; }).ofObject(), $(go.Panel, 'Vertical', $(go.Panel, 'Spot', $(go.Shape, { strokeWidth: 1, name: 'SHAPE', fill: 'rgba(128, 128, 128, 0.5)' }, new go.Binding('angle').makeTwoWay(), new go.Binding('width').makeTwoWay(), new go.Binding('height').makeTwoWay(), new go.Binding('fill', 'texture', function (t, obj) {\r\n return updateNodeTexture(obj, t);\r\n }), new go.Binding('fill', 'usesTexture', function (usesTexture, obj) {\r\n var node = obj.part;\r\n if (node === null)\r\n return null;\r\n var t = node.data.texture;\r\n return updateNodeTexture(obj, t);\r\n })), $(go.Panel, 'Auto', new go.Binding('visible', 'showLabel'), $(go.Shape, 'RoundedRectangle', { fill: 'beige', opacity: .5, stroke: null }), $(go.TextBlock, {\r\n margin: 5,\r\n wrap: go.TextBlock.WrapFit,\r\n textAlign: 'center',\r\n editable: true,\r\n isMultiline: false,\r\n stroke: 'black',\r\n font: '10pt sans-serif'\r\n }, new go.Binding('text').makeTwoWay(), new go.Binding('angle', 'angle').makeTwoWay(), new go.Binding('font', 'height', function (height) {\r\n if (height > 25) {\r\n return '10pt sans-serif';\r\n }\r\n if (height < 25 && height > 15) {\r\n return '8pt sans-serif';\r\n }\r\n else {\r\n return '6pt sans-serif';\r\n }\r\n })))), $(go.TextBlock, 'default text', { margin: 5 }, new go.Binding('text', 'caption'), new go.Binding('visible', '', function (tb) {\r\n var node = tb.part;\r\n if (node && node.diagram) {\r\n return node.diagram instanceof go.Palette;\r\n }\r\n return false;\r\n }).ofObject())));\r\n}\r\nfunction updateNodeTexture(obj, t) {\r\n var node = obj.part;\r\n if (node === null)\r\n return '';\r\n if (node.data.usesTexture !== undefined && node.data.usesTexture) {\r\n if (t === '') {\r\n return makeTextureBrush(null);\r\n }\r\n else {\r\n var str = t.indexOf('images/textures') === -1 ? 'images/textures/' + t : t;\r\n return makeTextureBrush(str);\r\n }\r\n }\r\n else {\r\n if (node.data.color !== undefined) {\r\n return node.data.color;\r\n }\r\n else {\r\n return 'white';\r\n }\r\n }\r\n}\r\nvar addWallPart = function (e, wall) {\r\n if (!(wall instanceof go.Group))\r\n return;\r\n if (wall.data.isDivider)\r\n return;\r\n var floorplan = e.diagram;\r\n var wallPart = floorplan.selection.first();\r\n if ((wallPart && (wallPart.category === 'WindowNode' || wallPart.category === 'DoorNode') && wallPart.containingGroup === null)) {\r\n var newLoc = floorplan.findClosestLocOnWall(wall, wallPart);\r\n if (newLoc !== null) {\r\n var shape = wall.findObject('SHAPE');\r\n shape.stroke = 'black';\r\n floorplan.model.setDataProperty(wallPart.data, 'group', wall.data.key);\r\n wallPart.location = newLoc.projectOntoLineSegmentPoint(wall.data.startpoint, wall.data.endpoint);\r\n wallPart.angle = wall.data.startpoint.directionPoint(wall.data.endpoint);\r\n if (wallPart.category === 'WindowNode') {\r\n floorplan.model.setDataProperty(wallPart.data, 'height', wall.data.thickness);\r\n }\r\n if (wallPart.category === 'DoorNode') {\r\n floorplan.model.setDataProperty(wallPart.data, 'doorOpeningHeight', wall.data.thickness);\r\n }\r\n }\r\n else {\r\n floorplan.remove(wallPart);\r\n alert(\"There's not enough room on the wall!\");\r\n return;\r\n }\r\n }\r\n floorplan.updateWallDimensions();\r\n};\r\nvar wallPartDragOver = function (e, wall) {\r\n if (!(wall instanceof go.Group))\r\n return;\r\n if (wall.data.isDivider)\r\n return;\r\n var floorplan = e.diagram;\r\n var draggingParts = floorplan.toolManager.draggingTool.draggedParts;\r\n if (draggingParts === null) {\r\n draggingParts = floorplan.toolManager.draggingTool.copiedParts;\r\n }\r\n if (draggingParts !== null) {\r\n draggingParts.iterator.each(function (kvp) {\r\n var part = kvp.key;\r\n if ((part.category === 'WindowNode' || part.category === 'DoorNode') && part.containingGroup === null) {\r\n var shape = wall.findObject('SHAPE');\r\n shape.stroke = 'lightblue';\r\n part.angle = wall.rotateObject.angle;\r\n }\r\n });\r\n }\r\n};\r\nvar wallPartDragAway = function (e, wall) {\r\n if (!(wall instanceof go.Group))\r\n return;\r\n var floorplan = e.diagram;\r\n var shape = wall.findObject('SHAPE');\r\n if (shape !== null) {\r\n shape.stroke = 'black';\r\n var draggingParts = floorplan.toolManager.draggingTool.draggedParts;\r\n if (draggingParts === null) {\r\n draggingParts = floorplan.toolManager.draggingTool.copiedParts;\r\n }\r\n if (draggingParts !== null) {\r\n draggingParts.iterator.each(function (kvp) {\r\n var part = kvp.key;\r\n if ((part.category === 'WindowNode' || part.category === 'DoorNode') && part.containingGroup === null) {\r\n part.angle = 0;\r\n }\r\n });\r\n }\r\n }\r\n};\r\nfunction makeWallGroup() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Group, 'Spot', {\r\n contextMenu: makeContextMenu(),\r\n toolTip: makeGroupToolTip(),\r\n selectionObjectName: 'SHAPE',\r\n rotateObjectName: 'SHAPE',\r\n locationSpot: go.Spot.TopLeft,\r\n reshapable: true,\r\n minSize: new go.Size(1, 1),\r\n movable: false,\r\n selectionAdorned: false,\r\n mouseDrop: addWallPart,\r\n mouseDragEnter: wallPartDragOver,\r\n mouseDragLeave: wallPartDragAway,\r\n copyable: false\r\n }, $(go.Shape, {\r\n name: 'SHAPE',\r\n fill: 'lightgray', stroke: 'black', strokeWidth: 1\r\n }, new go.Binding('fill', 'color'), new go.Binding('stroke', 'isSelected', function (s, obj) {\r\n if (obj.part.containingGroup != null) {\r\n var group = obj.part.containingGroup;\r\n if (s) {\r\n group.data.isSelected = true;\r\n }\r\n }\r\n return s ? 'dodgerblue' : 'black';\r\n }).ofObject()));\r\n}\r\nfunction makeTextureBrush(src) {\r\n var $ = go.GraphObject.make;\r\n if (src === null || src === undefined) {\r\n src = 'images/textures/floor1.jpg';\r\n }\r\n var textureImage = new Image();\r\n textureImage.src = src;\r\n return $(go.Brush, 'Pattern', { pattern: textureImage });\r\n}\r\nfunction makeTextureSelectionAdornment(textures) {\r\n var $ = go.GraphObject.make;\r\n return $(go.Adornment, 'Spot', { locationObjectName: 'BIGPANEL' }, new go.Binding('location', '', function (obj) {\r\n if (obj.data.category === 'RoomNode') {\r\n var roomLabel = obj.adornedPart.findObject('ROOM_LABEL');\r\n var loc = roomLabel.getDocumentPoint(go.Spot.BottomLeft);\r\n return loc;\r\n }\r\n else {\r\n return obj.adornedPart.getDocumentPoint(go.Spot.BottomLeft);\r\n }\r\n }).ofObject(), new go.Binding('visible', '', function (adorn) {\r\n var node = adorn.adornedPart;\r\n if (node.category !== 'RoomNode') {\r\n return node.data.usesTexture;\r\n }\r\n return true;\r\n }).ofObject(), $(go.Placeholder), $(go.Panel, 'Horizontal', { name: 'BIGPANEL' }, $('Button', {\r\n desiredSize: new go.Size(15, 15),\r\n click: function (e, obj) {\r\n var adorn = obj.part;\r\n var node = adorn.adornedPart;\r\n if (node !== null) {\r\n var fp = node.diagram;\r\n fp.model.setDataProperty(node.data, 'showTextureOptions', !node.data.showTextureOptions);\r\n node.updateAdornments();\r\n }\r\n }\r\n }, new go.Binding('visible', '', function (adorn) {\r\n var node = adorn.adornedPart;\r\n if (node !== null && (node.diagram instanceof go.Palette || node.category === 'RoomNode')) {\r\n return false;\r\n }\r\n return true;\r\n }).ofObject(), $(go.Shape, 'TriangleLeft', { desiredSize: new go.Size(10, 10), name: 'BUTTONSHAPE' }, new go.Binding('figure', 'showTextureOptions', function (sto) {\r\n return sto ? 'TriangleLeft' : 'TriangleRight';\r\n }))), $(go.Panel, 'Horizontal', {\r\n name: 'PANEL',\r\n itemArray: textures,\r\n itemTemplate: $('Button', {\r\n desiredSize: new go.Size(30, 30),\r\n click: function (e, button) {\r\n if (button.part === null || !(button instanceof go.Panel))\r\n return;\r\n var adorn = button.part;\r\n var node = adorn.adornedPart;\r\n var imagePicture = button.findObject('BUTTON_IMAGE');\r\n var imageSource = imagePicture.source;\r\n if (node.category === 'RoomNode') {\r\n e.diagram.model.setDataProperty(node.data, 'floorImage', imageSource);\r\n }\r\n else {\r\n e.diagram.model.setDataProperty(node.data, 'texture', imageSource);\r\n }\r\n }\r\n }, $(go.Picture, { name: 'BUTTON_IMAGE' }, new go.Binding('source', '', function (str, b) {\r\n if (typeof str !== 'string')\r\n return '';\r\n return './images/textures/' + str;\r\n })))\r\n }, new go.Binding('visible', '', function (a) {\r\n var node = a.adornedPart;\r\n if (node.diagram instanceof go.Palette)\r\n return false;\r\n if (node.category === 'RoomNode') {\r\n return node.data.showFlooringOptions;\r\n }\r\n else {\r\n var button = a.findObject('BUTTONSHAPE');\r\n if (button !== null) {\r\n return button.figure === 'TriangleLeft';\r\n }\r\n }\r\n }).ofObject(), new go.Binding('itemArray', '', function (data) {\r\n if (data.textures === undefined || data.textures === null) {\r\n return textures;\r\n }\r\n else {\r\n return data.textures;\r\n }\r\n }))));\r\n}\r\nfunction makeRoomNode() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Node, 'Spot', {\r\n contextMenu: makeContextMenu(),\r\n toolTip: makeGroupToolTip(),\r\n selectionObjectName: 'SHAPE',\r\n rotateObjectName: 'SHAPE',\r\n locationSpot: go.Spot.TopLeft,\r\n reshapable: true,\r\n copyable: false,\r\n minSize: new go.Size(1, 1),\r\n movable: false,\r\n selectionAdornmentTemplate: makeTextureSelectionAdornment(['floor1.jpg', 'floor2.jpg', 'floor3.jpg', 'floor4.jpg', 'floor5.jpg', 'floor6.jpg', 'floor7.jpg']),\r\n locationObjectName: 'SHAPE',\r\n layerName: 'Background'\r\n }, $(go.Shape, {\r\n name: 'SHAPE',\r\n fill: makeTextureBrush(null), stroke: 'black', strokeWidth: 1\r\n }, new go.Binding('stroke', 'isSelected', function (s, obj) {\r\n if (obj.part.containingGroup != null) {\r\n var group = obj.part.containingGroup;\r\n if (s) {\r\n group.data.isSelected = true;\r\n }\r\n }\r\n return s ? 'dodgerblue' : 'black';\r\n }).ofObject(), new go.Binding('fill', 'floorImage', function (src) {\r\n return makeTextureBrush(src);\r\n })), $(go.Panel, 'Horizontal', {\r\n cursor: 'move',\r\n name: 'ROOM_LABEL',\r\n _isNodeLabel: true\r\n }, new go.Binding('alignment', 'labelAlignment'), $(go.Panel, 'Auto', new go.Binding('visible', 'showLabel'), $(go.Shape, 'RoundedRectangle', { fill: 'beige', opacity: .5, stroke: null, strokeWidth: 3, name: 'ROOM_LABEL_SHAPE' }, new go.Binding('stroke', 'isSelected', function (is) {\r\n return is ? 'dodgerblue' : null;\r\n }).ofObject()), $(go.Panel, 'Vertical', $(go.TextBlock, 'Room Name', { editable: true, cursor: 'text', font: 'normal normal bold 13px sans-serif' }, new go.Binding('text', 'name').makeTwoWay()), $(go.TextBlock, 'Room Size', { name: 'ROOM_LABEL_SIZE' }, new go.Binding('text', '', function (room) {\r\n var fp = room.diagram;\r\n var area = fp.getRoomArea(room);\r\n var adjustedArea = fp.convertPixelsToUnits(fp.convertPixelsToUnits(area)).toFixed(2);\r\n var unitsAb = fp.model.modelData.unitsAbbreviation;\r\n if (fp.model.modelData.units === 'inches') {\r\n adjustedArea = parseFloat(adjustedArea);\r\n adjustedArea = fp.convertSquareUnitsToFeetSquared(adjustedArea, 'inches').toFixed(2);\r\n unitsAb = 'ft';\r\n }\r\n return adjustedArea + unitsAb + String.fromCharCode(178);\r\n }).ofObject()))), $('Button', {\r\n desiredSize: new go.Size(15, 15),\r\n click: function (e, button) {\r\n var r = button.part;\r\n if (r === null)\r\n return;\r\n e.diagram.model.setDataProperty(r.data, 'showFlooringOptions', !r.data.showFlooringOptions);\r\n var fp = e.diagram;\r\n fp.select(r);\r\n },\r\n toolTip: $(go.Adornment, 'Auto', $(go.Shape, { fill: '#FFFFCC' }), $(go.TextBlock, { margin: 4, text: 'Show/ hide floor types' }))\r\n }, new go.Binding('visible', 'isSelected').ofObject(), $(go.Shape, 'TriangleDown', { desiredSize: new go.Size(10, 10) }, new go.Binding('figure', 'showFlooringOptions', function (showFlooringOptions) {\r\n return showFlooringOptions ? 'TriangleUp' : 'TriangleDown';\r\n })))));\r\n}\r\nfunction getWallPartEndpoints(wallPart) {\r\n var loc = wallPart.location;\r\n var partLength = wallPart.data.length;\r\n var angle = 0;\r\n if (wallPart.containingGroup !== null) {\r\n var w = wallPart.containingGroup;\r\n angle = w.data.startpoint.directionPoint(w.data.endpoint);\r\n }\r\n else {\r\n angle = 180;\r\n }\r\n var point1 = new go.Point((loc.x + (partLength / 2)), loc.y);\r\n var point2 = new go.Point((loc.x - (partLength / 2)), loc.y);\r\n point1.offset(-loc.x, -loc.y).rotate(angle).offset(loc.x, loc.y);\r\n point2.offset(-loc.x, -loc.y).rotate(angle).offset(loc.x, loc.y);\r\n var arr = [];\r\n arr.push(point1);\r\n arr.push(point2);\r\n return arr;\r\n}\r\nfunction getWallPartStretch(part) {\r\n var wall = part.containingGroup;\r\n if (wall === null)\r\n return;\r\n var startpoint = wall.data.startpoint.copy();\r\n var endpoint = wall.data.endpoint.copy();\r\n var leftOrAbove = new go.Set();\r\n var rightOrBelow = new go.Set();\r\n wall.memberParts.iterator.each(function (wallPart) {\r\n if (wallPart.data.key !== part.data.key) {\r\n var endpoints = getWallPartEndpoints(wallPart);\r\n for (var i = 0; i < endpoints.length; i++) {\r\n if (endpoints[i].x < part.location.x || (endpoints[i].y > part.location.y && endpoints[i].x === part.location.x)) {\r\n leftOrAbove.add(endpoints[i]);\r\n }\r\n else {\r\n rightOrBelow.add(endpoints[i]);\r\n }\r\n }\r\n }\r\n });\r\n if (parseFloat(startpoint.x.toFixed(2)) < parseFloat(part.location.x.toFixed(2)) ||\r\n (startpoint.y > part.location.y && parseFloat(startpoint.x.toFixed(2)) === parseFloat(part.location.x.toFixed(2)))) {\r\n leftOrAbove.add(startpoint);\r\n }\r\n else {\r\n rightOrBelow.add(startpoint);\r\n }\r\n if (parseFloat(endpoint.x.toFixed(2)) < parseFloat(part.location.x.toFixed(2)) ||\r\n (endpoint.y > part.location.y && parseFloat(endpoint.x.toFixed(2)) === parseFloat(part.location.x.toFixed(2)))) {\r\n leftOrAbove.add(endpoint);\r\n }\r\n else {\r\n rightOrBelow.add(endpoint);\r\n }\r\n var leftOrAbovePt;\r\n var closestDistLeftOrAbove = Number.MAX_VALUE;\r\n leftOrAbove.iterator.each(function (point) {\r\n var pt = point;\r\n var distance = Math.sqrt(pt.distanceSquaredPoint(part.location));\r\n if (distance < closestDistLeftOrAbove) {\r\n closestDistLeftOrAbove = distance;\r\n leftOrAbovePt = pt;\r\n }\r\n });\r\n var rightOrBelowPt;\r\n var closestDistRightOrBelow = Number.MAX_VALUE;\r\n rightOrBelow.iterator.each(function (point) {\r\n var pt = point;\r\n var distance = Math.sqrt(pt.distanceSquaredPoint(part.location));\r\n if (distance < closestDistRightOrBelow) {\r\n closestDistRightOrBelow = distance;\r\n rightOrBelowPt = pt;\r\n }\r\n });\r\n var stretch = { point1: leftOrAbovePt, point2: rightOrBelowPt };\r\n return stretch;\r\n}\r\nvar dragWallParts = function (part, pt, gridPt) {\r\n if (part.containingGroup !== null && part.containingGroup.category === 'WallGroup') {\r\n var floorplan_1 = part.diagram;\r\n var wall = part.containingGroup;\r\n var wStart = wall.data.startpoint;\r\n var wEnd = wall.data.endpoint;\r\n var dist1 = Math.sqrt(wStart.distanceSquaredPoint(part.location));\r\n var dist2 = Math.sqrt(part.location.distanceSquaredPoint(wEnd));\r\n var totalDist = Math.sqrt(wStart.distanceSquaredPoint(wEnd));\r\n if (dist1 + dist2 !== totalDist) {\r\n part.location = part.location.copy().projectOntoLineSegmentPoint(wStart, wEnd);\r\n }\r\n var stretch = getWallPartStretch(part);\r\n var leftOrAbovePt = stretch.point1;\r\n var rightOrBelowPt = stretch.point2;\r\n var totalLength = Math.sqrt(leftOrAbovePt.distanceSquaredPoint(rightOrBelowPt));\r\n var distance = (part.data.length / 2);\r\n var point1 = new go.Point(leftOrAbovePt.x + ((distance / totalLength) * (rightOrBelowPt.x - leftOrAbovePt.x)), leftOrAbovePt.y + ((distance / totalLength) * (rightOrBelowPt.y - leftOrAbovePt.y)));\r\n var point2 = new go.Point(rightOrBelowPt.x + ((distance / totalLength) * (leftOrAbovePt.x - rightOrBelowPt.x)), rightOrBelowPt.y + ((distance / totalLength) * (leftOrAbovePt.y - rightOrBelowPt.y)));\r\n var distFromWall = Math.abs(((wEnd.y - wStart.y) * pt.x) - ((wEnd.x - wStart.x) * pt.y) + (wEnd.x * wStart.y) - (wEnd.y * wStart.x)) /\r\n Math.sqrt(Math.pow((wEnd.y - wStart.y), 2) + Math.pow((wEnd.x - wStart.x), 2));\r\n var tolerance = (20 * wall.data.thickness < 100) ? (20 * wall.data.thickness) : 100;\r\n if (distFromWall > tolerance) {\r\n part.containingGroup = null;\r\n delete part.data.group;\r\n part.angle = 0;\r\n floorplan_1.pointNodes.iterator.each(function (node) { floorplan_1.remove(node); });\r\n floorplan_1.dimensionLinks.iterator.each(function (link) { floorplan_1.remove(link); });\r\n floorplan_1.pointNodes.clear();\r\n floorplan_1.dimensionLinks.clear();\r\n floorplan_1.updateWallDimensions();\r\n }\r\n pt = pt.copy().projectOntoLineSegmentPoint(point1, point2);\r\n floorplan_1.skipsUndoManager = true;\r\n floorplan_1.startTransaction('set loc');\r\n floorplan_1.model.setDataProperty(part.data, 'loc', go.Point.stringify(pt));\r\n floorplan_1.commitTransaction('set loc');\r\n floorplan_1.skipsUndoManager = false;\r\n floorplan_1.updateWallDimensions();\r\n }\r\n return pt;\r\n};\r\nfunction makeWallPartResizeAdornment() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Adornment, 'Spot', { name: 'WallPartResizeAdornment' }, $(go.Placeholder), $(go.Shape, { alignment: go.Spot.Left, cursor: 'w-resize', figure: 'Diamond', desiredSize: new go.Size(7, 7), fill: '#ffffff', stroke: '#808080' }), $(go.Shape, { alignment: go.Spot.Right, cursor: 'e-resize', figure: 'Diamond', desiredSize: new go.Size(7, 7), fill: '#ffffff', stroke: '#808080' }));\r\n}\r\nfunction makeDoorSelectionAdornment() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Adornment, 'Vertical', { name: 'DoorSelectionAdornment' }, $(go.Panel, 'Auto', $(go.Shape, { fill: null, stroke: null }), $(go.Placeholder)), $(go.Panel, 'Horizontal', { defaultStretch: go.GraphObject.Vertical }, $('Button', $(go.Picture, { source: 'icons/flipDoorOpeningLeft.png', column: 0, desiredSize: new go.Size(12, 12) }, new go.Binding('source', '', function (obj) {\r\n if (obj.adornedPart === null) {\r\n return 'icons/flipDoorOpeningRight.png';\r\n }\r\n else if (obj.adornedPart.data.swing === 'left') {\r\n return 'icons/flipDoorOpeningRight.png';\r\n }\r\n else {\r\n return 'icons/flipDoorOpeningLeft.png';\r\n }\r\n }).ofObject()), {\r\n click: function (e, obj) {\r\n var part = obj.part;\r\n if (part !== null && part.diagram !== null) {\r\n var floorplan = part.diagram;\r\n floorplan.startTransaction('flip door');\r\n var adorn = obj.part;\r\n var door = adorn.adornedPart;\r\n if (door !== null) {\r\n if (door.data.swing === 'left') {\r\n floorplan.model.setDataProperty(door.data, 'swing', 'right');\r\n }\r\n else {\r\n floorplan.model.setDataProperty(door.data, 'swing', 'left');\r\n }\r\n floorplan.commitTransaction('flip door');\r\n }\r\n }\r\n },\r\n toolTip: $(go.Adornment, 'Auto', $(go.Shape, { fill: '#FFFFCC' }), $(go.TextBlock, { margin: 4, text: 'Flip Door Opening' }))\r\n }, new go.Binding('visible', '', function (obj) { return (obj.adornedPart === null) ? false : (obj.adornedPart.containingGroup !== null); }).ofObject()), $('Button', $(go.Picture, { source: 'images/flipDoorSide.png', column: 0, desiredSize: new go.Size(12, 12) }), {\r\n click: function (e, obj) {\r\n var part = obj.part;\r\n if (part !== null && part.diagram !== null) {\r\n var floorplan = part.diagram;\r\n floorplan.startTransaction('rotate door');\r\n var adorn = obj.part;\r\n var door = adorn.adornedPart;\r\n door.angle = (door.angle + 180) % 360;\r\n floorplan.commitTransaction('rotate door');\r\n }\r\n },\r\n toolTip: $(go.Adornment, 'Auto', $(go.Shape, { fill: '#FFFFCC' }), $(go.TextBlock, { margin: 4, text: 'Flip Door Side' }))\r\n }), new go.Binding('visible', '', function (obj) { return (obj.adornedPart === null) ? false : (obj.adornedPart.containingGroup !== null); }).ofObject()));\r\n}\r\nfunction makeWindowNode() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Node, 'Spot', {\r\n contextMenu: makeContextMenu(),\r\n selectionObjectName: 'SHAPE',\r\n selectionAdorned: false,\r\n locationSpot: go.Spot.Center,\r\n toolTip: makeNodeToolTip(),\r\n minSize: new go.Size(5, 5),\r\n resizable: true,\r\n resizeAdornmentTemplate: makeWallPartResizeAdornment(),\r\n resizeObjectName: 'SHAPE',\r\n rotatable: false,\r\n dragComputation: dragWallParts,\r\n layerName: 'Foreground'\r\n }, new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify), new go.Binding('angle').makeTwoWay(), $(go.Shape, { name: 'SHAPE', fill: 'white', strokeWidth: 0 }, new go.Binding('width', 'length').makeTwoWay(), new go.Binding('height').makeTwoWay(), new go.Binding('stroke', 'isSelected', function (s, obj) { return s ? 'dodgerblue' : 'black'; }).ofObject(), new go.Binding('fill', 'isSelected', function (s, obj) { return s ? 'lightgray' : 'white'; }).ofObject()), $(go.Shape, { name: 'LINESHAPE', fill: 'darkgray', strokeWidth: 0, height: 10 }, new go.Binding('width', 'length', function (width, obj) { return width - 10; }), new go.Binding('height', 'height', function (height, obj) { return (height / 5); }), new go.Binding('stroke', 'isSelected', function (s, obj) { return s ? 'dodgerblue' : 'black'; }).ofObject()));\r\n}\r\nfunction makeDoorNode() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Node, 'Spot', {\r\n contextMenu: makeContextMenu(),\r\n selectionObjectName: 'SHAPE',\r\n selectionAdornmentTemplate: makeDoorSelectionAdornment(),\r\n locationSpot: go.Spot.BottomCenter,\r\n resizable: true,\r\n resizeObjectName: 'OPENING_SHAPE',\r\n toolTip: makeNodeToolTip(),\r\n minSize: new go.Size(10, 10),\r\n dragComputation: dragWallParts,\r\n resizeAdornmentTemplate: makeWallPartResizeAdornment(),\r\n layerName: 'Foreground'\r\n }, new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify), new go.Binding('angle').makeTwoWay(), new go.Binding('locationSpot', 'doorOpeningHeight', function (doh, obj) { return new go.Spot(0.5, 1, 0, -(doh / 2)); }), $(go.Shape, { name: 'SHAPE', fill: 'rgba(0, 0, 0, 0)' }, new go.Binding('width', 'length'), new go.Binding('height', 'length').makeTwoWay(), new go.Binding('stroke', 'isSelected', function (s, obj) { return s ? 'dodgerblue' : 'black'; }).ofObject(), new go.Binding('geometryString', 'swing', function (swing) {\r\n if (swing === 'left') {\r\n return 'F1 M0,0 v-150 a150,150 0 0,1 150,150 ';\r\n }\r\n else {\r\n return 'F1 M275,175 v-150 a150,150 0 0,0 -150,150 ';\r\n }\r\n })), $(go.Shape, {\r\n name: 'OPENING_SHAPE', fill: 'white',\r\n strokeWidth: 0, height: 5, width: 40,\r\n alignment: go.Spot.BottomCenter, alignmentFocus: go.Spot.Top\r\n }, new go.Binding('height', 'doorOpeningHeight').makeTwoWay(), new go.Binding('stroke', 'isSelected', function (s, obj) { return s ? 'dodgerblue' : 'black'; }).ofObject(), new go.Binding('fill', 'isSelected', function (s, obj) { return s ? 'lightgray' : 'white'; }).ofObject(), new go.Binding('width', 'length').makeTwoWay()));\r\n}\r\nfunction makePaletteWallNode() {\r\n var $ = go.GraphObject.make;\r\n return $(go.Node, 'Spot', { selectionAdorned: false }, $(go.Shape, { name: 'SHAPE', fill: 'black', strokeWidth: 0, height: 10, figure: 'Rectangle' }, new go.Binding('width', 'length').makeTwoWay(), new go.Binding('height').makeTwoWay(), new go.Binding('fill', 'isSelected', function (s, obj) { return s ? 'dodgerblue' : 'black'; }).ofObject(), new go.Binding('stroke', 'isSelected', function (s, obj) { return s ? 'dodgerblue' : 'black'; }).ofObject()));\r\n}\r\nvar FURNITURE_NODE_DATA_ARRAY = [\r\n {\r\n category: 'MultiPurposeNode',\r\n key: 'MultiPurposeNode',\r\n caption: 'Generic Cutout',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n name: 'Writable Node',\r\n type: 'Writable Node',\r\n shape: 'Rectangle',\r\n text: 'Write here',\r\n showLabel: true,\r\n width: 60,\r\n height: 60,\r\n notes: '',\r\n texture: 'wood1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['wood1.jpg', 'wood2.jpg', 'floor3.jpg', 'granite1.jpg', 'porcelain1.jpg']\r\n },\r\n {\r\n key: 'armChair',\r\n color: 'white',\r\n stroke: '#000000',\r\n caption: 'Arm Chair',\r\n type: 'Arm Chair',\r\n 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',\r\n width: 45,\r\n height: 45,\r\n notes: '',\r\n texture: 'fabric1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['fabric1.jpg', 'fabric2.jpg', 'fabric3.jpg']\r\n },\r\n {\r\n category: 'MultiPurposeNode',\r\n key: 'Refrigerator',\r\n caption: 'Refrigerator',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n type: 'Refrigerator',\r\n shape: 'Square',\r\n width: 55,\r\n height: 55,\r\n showLabel: false,\r\n notes: '',\r\n texture: 'steel1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false\r\n },\r\n {\r\n key: 'sink',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Sink',\r\n type: 'Sink',\r\n 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.24' +\r\n 'M23 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.74' +\r\n 'M 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',\r\n width: 27,\r\n height: 27,\r\n notes: '',\r\n texture: 'steel1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['copper1.jpg', 'steel1.jpg', 'steel2.jpg', 'porcelain1.jpg']\r\n },\r\n {\r\n category: 'MultiPurposeNode',\r\n key: 'Dishwasher',\r\n caption: 'Dishwasher',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n type: 'Dishwasher',\r\n shape: 'Square',\r\n width: 35,\r\n height: 35,\r\n showLabel: false,\r\n notes: '',\r\n texture: 'steel1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false\r\n },\r\n {\r\n key: 'toilet',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Toilet',\r\n type: 'Toilet',\r\n 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',\r\n width: 25,\r\n height: 35,\r\n notes: '',\r\n texture: 'porcelain1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['copper1.jpg', 'steel1.jpg', 'porcelain1.jpg']\r\n },\r\n {\r\n key: 'shower',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Shower/Tub',\r\n type: 'Shower/Tub',\r\n 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',\r\n width: 45,\r\n height: 75,\r\n notes: '',\r\n texture: 'copper1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['copper1.jpg', 'steel1.jpg', 'porcelain1.jpg']\r\n },\r\n {\r\n key: 'bed',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Bed',\r\n type: 'Bed',\r\n 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',\r\n width: 76.2,\r\n height: 101.6,\r\n notes: '',\r\n texture: 'fabric3.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['fabric1.jpg', 'fabric2.jpg', 'fabric3.jpg']\r\n },\r\n {\r\n key: 'roundTable',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Round Tables',\r\n type: 'Round Table',\r\n shape: 'Ellipse',\r\n width: 61,\r\n height: 61,\r\n notes: '',\r\n texture: 'wood1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['wood1.jpg', 'wood2.jpg', 'floor3.jpg', 'granite1.jpg', 'porcelain1.jpg']\r\n },\r\n {\r\n key: 'stove',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Stove',\r\n type: 'Stove',\r\n geo: 'F1 M 0 0 L 0 100 100 100 100 0 0 0' +\r\n 'M 30 15 A 15 15 180 1 0 30.01 15' +\r\n 'M 30 20 A 10 10 180 1 0 30.01 20' +\r\n 'M 30 25 A 5 5 180 1 0 30.01 25' +\r\n 'M 70 15 A 15 15 180 1 0 70.01 15' +\r\n 'M 70 20 A 10 10 180 1 0 70.01 20' +\r\n 'M 70 25 A 5 5 180 1 0 70.01 25' +\r\n 'M 30 55 A 15 15 180 1 0 30.01 55' +\r\n 'M 30 60 A 10 10 180 1 0 30.01 60' +\r\n 'M 30 65 A 5 5 180 1 0 30.01 65' +\r\n 'M 70 55 A 15 15 180 1 0 70.01 55' +\r\n 'M 70 60 A 10 10 180 1 0 70.01 60' +\r\n 'M 70 65 A 5 5 180 1 0 70.01 65',\r\n width: 65,\r\n height: 65,\r\n notes: '',\r\n texture: 'plaster1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['steel1.jpg', 'porcelain1.jpg', 'copper1.jpg', 'plaster1.jpg']\r\n },\r\n {\r\n key: 'doubleSink',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Double Sink',\r\n type: 'Double Sink',\r\n 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 9' +\r\n 'M15 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.74' +\r\n 'M40.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.25' +\r\n 'M 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',\r\n height: 27,\r\n width: 52,\r\n notes: '',\r\n texture: 'steel2.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['copper1.jpg', 'steel1.jpg', 'steel2.jpg', 'porcelain1.jpg']\r\n },\r\n {\r\n key: 'sofaMedium',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Sofa',\r\n type: 'Sofa',\r\n 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',\r\n height: 45,\r\n width: 80,\r\n notes: '',\r\n texture: 'fabric2.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['fabric1.jpg', 'fabric2.jpg', 'fabric3.jpg']\r\n },\r\n {\r\n category: 'MultiPurposeNode',\r\n key: 'Countertop',\r\n caption: 'Countertop',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n type: 'Countertop',\r\n shape: 'Rectangle',\r\n width: 100,\r\n height: 30,\r\n showLabel: false,\r\n notes: '',\r\n texture: 'wood1.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['wood1.jpg', 'wood2.jpg', 'granite1.jpg']\r\n },\r\n {\r\n key: 'diningTable',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Dining Table',\r\n type: 'Dining Table',\r\n 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' +\r\n ' 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',\r\n width: 100,\r\n height: 62.5,\r\n notes: '',\r\n texture: 'wood2.jpg',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['wood1.jpg', 'wood2.jpg', 'floor3.jpg', 'granite1.jpg', 'porcelain1.jpg', 'steel2.jpg']\r\n },\r\n {\r\n key: 'staircase',\r\n color: '#ffffff',\r\n stroke: '#000000',\r\n caption: 'Staircase',\r\n type: 'Staircase',\r\n 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 0' +\r\n 'M 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',\r\n width: 100,\r\n height: 50,\r\n notes: '',\r\n texture: '',\r\n usesTexture: false,\r\n showTextureOptions: false,\r\n textures: ['wood1.jpg', 'floor1.jpg', 'wood2.jpg', 'steel2.jpg', 'floor2.jpg']\r\n }\r\n];\r\nvar WALLPARTS_NODE_DATA_ARRAY = [\r\n {\r\n category: 'WindowNode',\r\n key: 'window',\r\n color: 'white',\r\n caption: 'Window',\r\n type: 'Window',\r\n shape: 'Rectangle',\r\n height: 10,\r\n length: 60,\r\n notes: ''\r\n },\r\n {\r\n key: 'door',\r\n category: 'DoorNode',\r\n caption: 'Door',\r\n type: 'Door',\r\n length: 40,\r\n doorOpeningHeight: 5,\r\n swing: 'left',\r\n notes: ''\r\n }\r\n];\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar go = require(\"gojs/release/go\");\r\nvar NodeLabelDraggingTool = (function (_super) {\r\n __extends(NodeLabelDraggingTool, _super);\r\n function NodeLabelDraggingTool() {\r\n var _this = _super.call(this) || this;\r\n _this.name = 'NodeLabelDragging';\r\n _this.label = null;\r\n _this._offset = new go.Point();\r\n _this._originalAlignment = null;\r\n _this._originalCenter = null;\r\n return _this;\r\n }\r\n NodeLabelDraggingTool.prototype.canStart = function () {\r\n if (!go.Tool.prototype.canStart.call(this))\r\n return false;\r\n var diagram = this.diagram;\r\n if (diagram === null)\r\n return false;\r\n var e = diagram.lastInput;\r\n if (!e.left)\r\n return false;\r\n if (!this.isBeyondDragSize())\r\n return false;\r\n return this.findLabel() !== null;\r\n };\r\n NodeLabelDraggingTool.prototype.findLabel = function () {\r\n var diagram = this.diagram;\r\n var e = diagram.firstInput;\r\n var elt = diagram.findObjectAt(e.documentPoint, null, null);\r\n if (elt === null || !(elt.part instanceof go.Node))\r\n return null;\r\n if (elt.part instanceof go.Node) {\r\n elt.part.isSelected = true;\r\n }\r\n while (elt.panel !== null) {\r\n if (elt._isNodeLabel && elt.panel.type === go.Panel.Spot && elt.panel.findMainElement() !== elt)\r\n return elt;\r\n elt = elt.panel;\r\n }\r\n return null;\r\n };\r\n NodeLabelDraggingTool.prototype.doActivate = function () {\r\n this.startTransaction('Shifted Label');\r\n this.label = this.findLabel();\r\n if (this.label !== null) {\r\n this._offset = this.diagram.firstInput.documentPoint.copy().subtract(this.label.getDocumentPoint(go.Spot.Center));\r\n this._originalAlignment = this.label.alignment.copy();\r\n if (this.label !== null && this.label.panel !== null) {\r\n var main = this.label.panel.findMainElement();\r\n if (main !== null) {\r\n this._originalCenter = main.getDocumentPoint(go.Spot.Center);\r\n }\r\n }\r\n }\r\n go.Tool.prototype.doActivate.call(this);\r\n };\r\n NodeLabelDraggingTool.prototype.doDeactivate = function () {\r\n go.Tool.prototype.doDeactivate.call(this);\r\n this.stopTransaction();\r\n };\r\n NodeLabelDraggingTool.prototype.doStop = function () {\r\n this.label = null;\r\n go.Tool.prototype.doStop.call(this);\r\n };\r\n NodeLabelDraggingTool.prototype.doCancel = function () {\r\n if (this.label !== null && this._originalAlignment !== null) {\r\n var node = this.label.part;\r\n this.diagram.model.set(node.data, 'labelAlignment', this._originalAlignment);\r\n }\r\n go.Tool.prototype.doCancel.call(this);\r\n };\r\n NodeLabelDraggingTool.prototype.doMouseMove = function () {\r\n if (!this.isActive)\r\n return;\r\n this.updateAlignment();\r\n };\r\n NodeLabelDraggingTool.prototype.doMouseUp = function () {\r\n if (!this.isActive)\r\n return;\r\n this.updateAlignment();\r\n this.transactionResult = 'Shifted Label';\r\n this.stopTool();\r\n };\r\n NodeLabelDraggingTool.prototype.updateAlignment = function () {\r\n if (this.label === null)\r\n return;\r\n var last = this.diagram.lastInput.documentPoint;\r\n var cntr = this._originalCenter;\r\n if (cntr !== null) {\r\n var align = new go.Spot(0.5, 0.5, last.x - this._offset.x - cntr.x, last.y - this._offset.y - cntr.y);\r\n var node = this.label.part;\r\n this.diagram.model.set(node.data, 'labelAlignment', align);\r\n }\r\n };\r\n return NodeLabelDraggingTool;\r\n}(go.Tool));\r\nexports.NodeLabelDraggingTool = NodeLabelDraggingTool;\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar go = require(\"gojs/release/go\");\r\nvar FloorplanPalette = (function (_super) {\r\n __extends(FloorplanPalette, _super);\r\n function FloorplanPalette(div, floorplan) {\r\n var _this = _super.call(this, div) || this;\r\n var $ = go.GraphObject.make;\r\n _this.contentAlignment = go.Spot.Center;\r\n _this.nodeTemplateMap = floorplan.nodeTemplateMap;\r\n _this.nodeTemplateMap.add('FloorNode', $(go.Node, 'Auto', $(go.Shape, { fill: makeFloorBrush(null), desiredSize: new go.Size(100, 100) }, new go.Binding('fill', 'floorImage', function (src) {\r\n return makeFloorBrush(src);\r\n })), $(go.TextBlock, 'Drag me out to a wall-enclosed space to create a room', { desiredSize: new go.Size(90, NaN) }, new go.Binding('visible', '', function (node) {\r\n if (node.diagram instanceof go.Palette) {\r\n return true;\r\n }\r\n return false;\r\n }).ofObject())));\r\n _this.toolManager.contextMenuTool.isEnabled = false;\r\n floorplan.palettes.push(_this);\r\n return _this;\r\n }\r\n return FloorplanPalette;\r\n}(go.Palette));\r\nexports.FloorplanPalette = FloorplanPalette;\r\nfunction makeFloorBrush(src) {\r\n var $ = go.GraphObject.make;\r\n if (src === null || src === undefined) {\r\n src = 'images/textures/floor1.jpg';\r\n }\r\n var floorImage = new Image();\r\n floorImage.src = src;\r\n return $(go.Brush, 'Pattern', { pattern: floorImage });\r\n}\r\n"],"sourceRoot":""}