// 3D Building Designer created by ON THE Z, Inc.
// Visit onthez.com to find out about licensing a 3D interactive web app, designer, or configurator for your website users.
var e = function(e) {
for (var t in dat.controllers) dat.controllers.hasOwnProperty(t) && e(dat.controllers[t])
},
t = function(e) {
return e ? this.__li.setAttribute("id", e) : this.__li.removeAttribute("id"), this
},
a = function(e) {
return e ? this.__li.setAttribute("class", e) : this.__li.removeAttribute("class"), this
};
function o(e, t, a) {
this.categories = a || !1, this.name = e, this.hex = t, this.id = this.name.replace(/[^a-zA-Z]/gi, "");
a = new THREE.Color(this.hex);
this.r = Math.round(255 * a.r), this.g = Math.round(255 * a.g), this.b = Math.round(255 * a.b)
}
e(function(e) {
e.prototype.hasOwnProperty("id") || (e.prototype.id = t)
}), e(function(e) {
e.prototype.hasOwnProperty("class") || (e.prototype.class = a)
}), Detector.webgl || Detector.addGetWebGLMessage();
var r, m, w, h, ee = "",
F = [new o("Galvalume", "#888888", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Black", "#090606", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Charcoal", "#434343", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Taupe", "#7a7d6a", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Gray", "#a0a298", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Alamo", "#e2eae7", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Briliant Arctic", "#fcffff", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Forest", "#2a492f", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Crimson", "#a31116", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Rustic", "#701f1c", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Burgundy", "#31151e", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Gallery", "#153351", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Ivory", "#f4e0bd", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Light Stone", "#c6c8aa", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Tan", "#a08b67", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Brown", "#3e291f", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"]), new o("Burnished Slate", "#363027", ["roof", "wall", "trim", "soffit", "interior", "wainscot", "other"])];
let R = !1,
B = !1,
v, ia, M, S, E, W, P, H, k, c, G = !0,
te, N, L, C, j, na, z, ra, I, ae, oe, ie, ne, _, re, se, le, he, ce, de, d, p, g, u, b, y, f, pe, sa, la, me, ge, ue, Te, be, q, A, V, U, Q, X, Y, n = [null, null, null, null, null, null],
ye = !1,
fe = "standard",
we = 0,
T = null,
ve = null,
Ee, Pe, ha, pa, ma, ga, ua, Ta, ba, ya, fa, wa, va, De, Me, We, xe, Oe, Re, Be, Se, He, Ne, Le, Ce, je, ze, Ie, Fe, ke, Ge, $e, _e, qe, Ae, Ve, Ue, Qe, Xe, Ye, Ze, Je, Ke, et, tt, at, ot, it, nt, rt, st, lt, ht, ct, dt, pt, mt, gt, ut, Tt, bt = !1,
yt = !1,
ft = !1,
wt = !1,
vt = 6,
Et = 3 * vt,
ca, Pt, Dt, Mt, Wt, xt, Ot, Rt, Bt;
var Ea, Z = !1,
St = !1,
Ht = !1,
Nt = !1,
Lt = !1,
Ct = !1,
jt = !1,
zt = !1,
It = !1,
Ft = 0,
kt = 0,
Gt = 0,
$t = 0,
_t = 0,
qt = 0,
At = new THREE.Color(11573622),
Vt = new THREE.Color(11508086),
Ut = new THREE.Color(7895160),
Qt = new THREE.Color(4861486);
let Xt = window.location.href,
Yt = new URL(Xt),
Zt = document.currentScript.getAttribute("data-version"),
Jt = Yt.pathname.replace(/\/+$/, ""),
D = "",
Kt = Yt.searchParams.get("id"),
ea = Yt.searchParams.get("dt"),
ta = (Z = null !== Kt && null !== ea, r = document.currentScript.hasAttribute("data-status") ? document.currentScript.getAttribute("data-status") : "live", document.currentScript.hasAttribute("data-ref") && (m = document.currentScript.getAttribute("data-ref")), w = !!document.currentScript.hasAttribute("data-color-visualizer") && document.currentScript.getAttribute("data-color-visualizer"), document.currentScript.getAttribute("data-company-name")),
aa = document.currentScript.getAttribute("data-tool-name"),
oa = (!Z && w && (Z = !0), "US"),
Pa = (document.currentScript.hasAttribute("data-localization") && (oa = document.currentScript.getAttribute("data-localization")), {
US: {
Color: "Color",
color: "color",
Colors: "Colors",
colors: "colors"
},
CA: {
Color: "Colour",
color: "colour",
Colors: "Colours",
colors: "colours"
}
}),
Da = {
1234: {
object: "directions-1234.lwo"
},
ABCD: {
object: "directions-abcd.lwo",
N: {
name: "End Wall B",
short: "EWB",
abbr: "B"
},
S: {
name: "End Wall D",
short: "EWD",
abbr: "D"
},
E: {
name: "Side Wall C",
short: "SWC",
abbr: "C"
},
W: {
name: "Side Wall A",
short: "SWA",
abbr: "A"
},
NE: {
name: "Corner BC",
short: "BC",
abbr: "BC"
},
NW: {
name: "Corner AB",
short: "AB",
abbr: "AB"
},
SE: {
name: "Corner CD",
short: "CD",
abbr: "CD"
},
SW: {
name: "Corner AD",
short: "AD",
abbr: "AD"
}
},
"Front Back Left Right": {
object: "directions-frontBackLeftRight.lwo"
},
"Front End Wall": {
object: "directions-frontEndWall.lwo",
N: {
name: "Front End Wall",
short: "Front",
abbr: "F"
},
S: {
name: "Back End Wall",
short: "Back",
abbr: "B"
},
E: {
name: "Left Side Wall",
short: "Left",
abbr: "L"
},
W: {
name: "Right Side Wall",
short: "Right",
abbr: "R"
},
NE: {
name: "Front Left Corner",
short: "Front Left",
abbr: "FL"
},
NW: {
name: "Front Right Corner",
short: "Front Right",
abbr: "FR"
},
SE: {
name: "Back Left Corner",
short: "Back Left",
abbr: "BL"
},
SW: {
name: "Back Right Corner",
short: "Back Right",
abbr: "BR"
}
},
"Front Side Wall": {
object: "directions-frontSideWall.lwo",
N: {
name: "Right End Wall",
short: "Right",
abbr: "R"
},
S: {
name: "Left End Wall",
short: "Left",
abbr: "L"
},
E: {
name: "Front Side Wall",
short: "Front",
abbr: "F"
},
W: {
name: "Back Side Wall",
short: "Back",
abbr: "B"
},
NE: {
name: "Front Right Corner",
short: "Front Right",
abbr: "FR"
},
NW: {
name: "Back Right Corner",
short: "Back Right",
abbr: "BR"
},
SE: {
name: "Front Left Corner",
short: "Front Left",
abbr: "FL"
},
SW: {
name: "Back Left Corner",
short: "Back Left",
abbr: "BL"
}
},
"Front Side Wall Reversed": {
object: "directions-frontSideWallReversed.lwo",
N: {
name: "Left End Wall",
short: "Left",
abbr: "L"
},
S: {
name: "Right End Wall",
short: "Right",
abbr: "R"
},
E: {
name: "Back Side Wall",
short: "Back",
abbr: "B"
},
W: {
name: "Front Side Wall",
short: "Front",
abbr: "F"
},
NE: {
name: "Back Left Corner",
short: "Back Left",
abbr: "BL"
},
NW: {
name: "Front Left Corner",
short: "Front Left",
abbr: "FL"
},
SE: {
name: "Back Right Corner",
short: "Back Right",
abbr: "BR"
},
SW: {
name: "Front Right Corner",
short: "Front Right",
abbr: "FR"
}
},
"North Front": {
object: "directions-northFront.lwo",
N: {
name: "North End Wall",
short: "North",
abbr: "N"
},
S: {
name: "South End Wall",
short: "South",
abbr: "S"
},
E: {
name: "East Side Wall",
short: "East",
abbr: "E"
},
W: {
name: "West Side Wall",
short: "West",
abbr: "W"
},
NE: {
name: "Northeast Corner",
short: "Northeast",
abbr: "NE"
},
NW: {
name: "Northwest Corner",
short: "Northwest",
abbr: "NW"
},
SE: {
name: "Southeast Corner",
short: "Southeast",
abbr: "SE"
},
SW: {
name: "Southwest Corner",
short: "Southwest",
abbr: "SW"
}
},
"South Front": {
object: "directions-southFront.lwo",
N: {
name: "South End Wall",
short: "South",
abbr: "S"
},
S: {
name: "North End Wall",
short: "North",
abbr: "N"
},
E: {
name: "West Side Wall",
short: "West",
abbr: "W"
},
W: {
name: "East Side Wall",
short: "East",
abbr: "E"
},
NE: {
name: "Southwest Corner",
short: "Southwest",
abbr: "SW"
},
NW: {
name: "Southeast Corner",
short: "Southeast",
abbr: "SE"
},
SE: {
name: "Northwest Corner",
short: "Northwest",
abbr: "NW"
},
SW: {
name: "Northeast Corner",
short: "Northeast",
abbr: "NE"
}
},
"Front Side Wall A": {
object: "directions-frontSideWallA.lwo",
N: {
name: "Left End Wall B",
short: "Left B",
abbr: "L"
},
S: {
name: "Right End Wall D",
short: "Right D",
abbr: "R"
},
E: {
name: "Back Side Wall C",
short: "Back C",
abbr: "B"
},
W: {
name: "Front Side Wall A",
short: "Front A",
abbr: "F"
},
NE: {
name: "Back Left Corner",
short: "Back Left",
abbr: "BL"
},
NW: {
name: "Front Left Corner",
short: "Front Left",
abbr: "FL"
},
SE: {
name: "Back Right Corner",
short: "Back Right",
abbr: "BR"
},
SW: {
name: "Front Right Corner",
short: "Front Right",
abbr: "FR"
}
}
},
J = Da["Front End Wall"];
k = new dat.GUI({
autoplace: !1,
width: 300,
hideable: !1
});
var Ma = new ro,
Wa = new eo,
xa = new ao;
function Oa() {
this.width = 40, this.depth = 60, this.height = 12, this.roofType = "Gabled", this.asymmetrical = 0, this.roofPitch = 3, this.frameType = "Open Web Truss", this.ground = "Grass Plains", this.maxTrussSpacing = 14, this.maxPostSpacing = 14, this.maxLeantoPostSpacing = this.maxPostSpacing, this.secondaryMembers = "Steel", this.frameConstruction = "Open Web Tapered", this.girtSpacing = 2, this.flushGirts = !1, this.standingGirts = !0, this.girtThickness = 2.5 / 12, this.purlinSpacing = 2, this.flushPurlins = !1, this.standingPurlins = !0, this.purlinThickness = 3.5 / 12, this.logoPlacement = "Wall", this.logoShape = "Oval", this.hideWalls = 0, this.allowLeanToCeilingHeight = !1, this.roofColor = "Burnished Slate", this.wallColor = "Light Stone", this.trimColor = "Brown", this.soffitColor = "Gray", this.wainscotColor = "Charcoal", this.boardAndBattenWoodenBarnSiding = !1, this.enclosedN = !0, this.enclosedS = !0, this.enclosedE = !0, this.enclosedW = !0, this.wainscot1 = !1, this.wainscot2 = !1, this.wainscot3 = !1, this.wainscot4 = !1, this.wainscotHeight = 3, this.baseTrim = !1, this.gableFront = 0, this.gableBack = 0, this.eaveL = 0, this.eavePitchL = 4, this.eaveSoffitL = !1, this.eaveR = 0, this.eavePitchR = 4, this.eaveSoffitR = !1, this.boxedOverhangs = !1, this.cupola18in = 0, this.cupola2 = 0, this.cupola3 = 0, this.cupola4 = 0, this.cupolaWindow18in = 0, this.cupolaWindow2 = 0, this.cupolaWindow3 = 0, this.cupolaWindow4 = 0, this.eaveLightsEast = !1, this.eaveLightsWest = !1, this.eaveLightWidth = 48, this.eaveLightHeight = 24, this.eaveLightPanelsEast = !1, this.eaveLightPanelsWest = !1, this.weatherVane = "None", this.leanTo1 = !1, this.leanTo1CutL = 0, this.leanTo1CutR = 0, this.leanTo1Drop = 1, this.leanTo1Length = 8, this.leanTo1Depth = 6, this.leanTo1Height = 8, this.leanTo1Pitch = 4, this.leanTo1Enclosed = !0, this.leanTo1Walls = "Fully Enclosed", this.leanTo2 = !1, this.leanTo2CutL = 0, this.leanTo2CutR = 0, this.leanTo2Drop = 1, this.leanTo2Length = 8, this.leanTo2Depth = 6, this.leanTo2Height = 8, this.leanTo2Pitch = 4, this.leanTo2Enclosed = !0, this.leanTo2Walls = "Fully Enclosed", this.leanTo3 = !1, this.leanTo3CutL = 0, this.leanTo3CutR = 0, this.leanTo3Drop = 1, this.leanTo3Length = 8, this.leanTo3Depth = 6, this.leanTo3Height = 8, this.leanTo3Pitch = 4, this.leanTo3Enclosed = !0, this.leanTo3Walls = "Fully Enclosed", this.leanTo4 = !1, this.leanTo4CutL = 0, this.leanTo4CutR = 0, this.leanTo4Drop = 1, this.leanTo4Length = 8, this.leanTo4Depth = 6, this.leanTo4Height = 8, this.leanTo4Pitch = 4, this.leanTo4Enclosed = !0, this.leanTo4Walls = "Fully Enclosed", this.maxPorchPostSpacing = this.maxPostSpacing, this.porchN = !1, this.porchS = !1, this.porchE = !1, this.porchW = !1, this.porchWrapNW = !1, this.porchWrapNE = !1, this.porchWrapSE = !1, this.porchWrapSW = !1, this.porchWrapHipNW = !1, this.porchWrapHipNE = !1, this.porchWrapHipSE = !1, this.porchWrapHipSW = !1, this.coveredGableExtensionN = !1, this.coveredGableExtensionNCutL = 5, this.coveredGableExtensionNCutR = 5, this.coveredGableExtensionNHeight = 8, this.coveredGableExtensionNDepth = 6, this.coveredGableExtensionNPitch = 4, this.coveredGableExtensionNEnclosed = !1, this.coveredGableExtensionNStructure = "Wood", this.coveredGableExtensionS = !1, this.coveredGableExtensionSCutL = 5, this.coveredGableExtensionSCutR = 5, this.coveredGableExtensionSHeight = 8, this.coveredGableExtensionSDepth = 6, this.coveredGableExtensionSPitch = 4, this.coveredGableExtensionSEnclosed = !1, this.coveredGableExtensionSStructure = "Wood", this.coveredGableExtensionE = !1, this.coveredGableExtensionECutL = 5, this.coveredGableExtensionECutR = 5, this.coveredGableExtensionEHeight = 8, this.coveredGableExtensionEDepth = 6, this.coveredGableExtensionEPitch = 4, this.coveredGableExtensionEEnclosed = !1, this.coveredGableExtensionEStructure = "Wood", this.coveredGableExtensionW = !1, this.coveredGableExtensionWCutL = 5, this.coveredGableExtensionWCutR = 5, this.coveredGableExtensionWHeight = 8, this.coveredGableExtensionWDepth = 6, this.coveredGableExtensionWPitch = 4, this.coveredGableExtensionWEnclosed = !1, this.coveredGableExtensionWStructure = "Wood", this.windowPictureQty = 0, this.windowSliderQty = 0, this.windowDoubleHungQty = 0, this.windowSingleHungQty = 0, this.windowTwinsetQty = 0, this.windowCasementQty = 0, this.windowSlopeLeftQty = 0, this.windowSlopeRightQty = 0, this.windowAwningQty = 0, this.windowHopperQty = 0, this.windowFramedOpeningQty = 0, this.louverQty = 0, this.mansardQty = 0, this.mansardHipQty = 0, this.walkDoorSolidQty = 0, this.walkDoorSolidDoubleQty = 0, this.walkDoorHalfGlassDoubleQty = 0, this.walkDoorHalfGlassQty = 0, this.walkDoor6PanelQty = 0, this.walkDoor6PanelDoubleQty = 0, this.walkDoor6LiteQty = 0, this.walkDoor9LiteQty = 0, this.walkDoor9LiteDoubleQty = 0, this.walkDoorSlidingGlassDoubleQty = 0, this.walkDoorFrenchDoubleDoubleQty = 0, this.walkDoorAllGlassQty = 0, this.walkDoorAllGlassDoubleQty = 0, this.walkDoorCrossbuckQty = 0, this.walkDoorEquineQty = 0, this.walkDoorFramedOpeningQty = 0, this.garageOverheadPanelQty = 0, this.garageOverheadPanelWindowQty = 0, this.garageOverheadFlatQty = 0, this.garageOverheadFlatWindowQty = 0, this.garageOverheadFlatModernQty = 0, this.garageOverheadRibbedQty = 0, this.garageSlideQty = 0, this.garageSlideLeftQty = 0, this.garageSlideRightQty = 0, this.garageSlideCrossbuckQty = 0, this.garageBiFoldQty = 0, this.garageHydraulicQty = 0, this.garageRollUpQty = 0, this.garageFramedOpeningQty = 0, this.divisionWall = !1, this.divisionAmount = 8, this.divisionMaterial = "Steel", this.perimeterWalls = "None", this.perimeterWalls2 = "None", this.flooring = "None", this.flooring2 = "None", this.ceiling = "None", this.ceiling2 = "None", this.insulation = !1, this.insulationRoof = "None", this.insulationWalls = "None", this.interiorWallQty = 0, this.interiorDoorQty = 0, this.mezzanineBays = 0, this.mezzanineStartingBay = 1, this.mezzanineDepth = 0, this.useMezzanineDepth = !1, this.mezzanineHeight = 8, this.mezzanineSupport = "Floor Support", this.person = 0, this.truck = 0, this.car = 0, this.airplane = 0, this.atv = 0, this.jetski = 0, this.combine = 0, this.tractor = 0, this.boat = 0, this.skiBoat = 0, this.driveway = 0, this.grainCart = 0, this.semiTruck = 0, this.semiTrailer = 0, this.semiTrailer53 = 0, this.backhoe = 0, this.cornHead6 = 0, this.cornHead = 0, this.cornHead12 = 0, this.beanHead = 0, this.beanHead35 = 0, this.beanHead40 = 0, this.desk = 0, this.chair = 0, this.conferenceTable = 0, this.lawnMower = 0, this.rv = 0, this.camper = 0, this.horseStall = 0, this.hayBales = 0, this.workbench = 0, this.airCompressor = 0, this.cultivator = 0, this.utv = 0, this.kitchenChair = 0, this.nightStand = 0, this.coffeeTable = 0, this.endTable = 0, this.version = Zt
}
Oa.prototype.settings = {
roofPitchMin: .5,
roofPitchMax: 5,
showPostsWithOpenGableWall: !1,
showLeantoWallTriangleWhenOpen: !1,
showExtensionTriangleWhenOpen: !1,
firstGirtSpacingOffGround: 0,
shadows: "medium",
ground: "grass",
showWatermark: !1,
watermarkOpacity: .15,
showLogoOnTruss: !1,
downspountsOnEndsOnly: !1,
ridgidFrameStraightColumns: !1,
disclaimerButtonText: "",
disclaimerText: "",
boxedEaves: !1,
postsOnGableRoofOverhangsOver: 5,
enclosedGableRoofOverhangTriangles: !1,
woodenPorchPosts: !0,
variableLargeDoorSizes: !0,
leantoRoofOverhangsFollowMainRoof: !0,
allowZeroPitchRoof: !1,
showPostFrameBottomPlate: !1,
restrictPeakOfCoverdGablesToEaveHeight: !1,
restrictEaveOfCoverdGablesToEaveHeight: !0,
wrappedPorchPostColorMatches: "trimColor",
vaultedCeiling: !0,
showPorchMidPostsOnEndwallsOnly: !0,
showPorchPostsOnEndwallsOnly: !0
}, Oa.prototype.coreBuildingDimensions = function() {
return {
width: this.width,
depth: this.depth,
height: this.height,
center: {
x: 0,
y: 0,
z: 0
},
northEdge: this.depth / 2,
southEdge: this.depth / -2,
eastEdge: this.width / -2,
westEdge: this.width / 2
}
}, Oa.prototype.buildingWithLeantoDimensions = function() {
this.coreBuildingDimensions().width, this.coreBuildingDimensions().depth;
var e = this.coreBuildingDimensions().height;
let t = this.coreBuildingDimensions().northEdge,
a = this.coreBuildingDimensions().southEdge,
o = this.coreBuildingDimensions().eastEdge,
i = this.coreBuildingDimensions().westEdge;
da.leanTo1 && (t += da.leanTo1Depth), da.leanTo3 && (a -= da.leanTo3Depth), da.leanTo2 && (o -= da.leanTo2Depth), da.leanTo4 && (i += da.leanTo4Depth);
var n = Math.abs(t) + Math.abs(a),
r = Math.abs(o) + Math.abs(i),
s = {};
return s.x = (o + i) / 2, s.y = this.peakHeight() / 2, s.z = (t + a) / 2, {
width: r,
depth: n,
height: e,
center: s,
northEdge: t,
southEdge: a,
eastEdge: o,
westEdge: i
}
}, Oa.prototype.buildingWithGableExtensionsDimensions = function() {
let e, t, a, o, i, n, r;
e = da.hasOwnProperty("coveredGableExtensionN") && da.coveredGableExtensionN ? Math.max(this.buildingWithLeantoDimensions().northEdge, this.coreBuildingDimensions().northEdge + da.coveredGableExtensionNDepth) : this.buildingWithLeantoDimensions().northEdge, t = da.hasOwnProperty("coveredGableExtensionS") && da.coveredGableExtensionS ? Math.min(this.buildingWithLeantoDimensions().southEdge, this.coreBuildingDimensions().southEdge - da.coveredGableExtensionSDepth) : this.buildingWithLeantoDimensions().southEdge, a = da.hasOwnProperty("coveredGableExtensionE") && da.coveredGableExtensionE ? Math.min(this.buildingWithLeantoDimensions().eastEdge, this.coreBuildingDimensions().eastEdge - da.coveredGableExtensionEDepth) : this.buildingWithLeantoDimensions().eastEdge, o = da.hasOwnProperty("coveredGableExtensionW") && da.coveredGableExtensionW ? Math.max(this.buildingWithLeantoDimensions().westEdge, this.coreBuildingDimensions().westEdge + da.coveredGableExtensionWDepth) : this.buildingWithLeantoDimensions().westEdge, n = Math.abs(e) + Math.abs(t), i = Math.abs(a) + Math.abs(o), r = this.buildingWithLeantoDimensions().height;
var s = {};
return s.x = (a + o) / 2, s.y = this.peakHeight() / 2, s.z = (e + t) / 2, {
width: i,
depth: n,
height: r,
center: s,
northEdge: e,
southEdge: t,
eastEdge: a,
westEdge: o
}
}, Oa.prototype.buildingWithPorchesDimensions = function() {
let e = this.buildingWithGableExtensionsDimensions().width,
t = this.buildingWithGableExtensionsDimensions().depth;
var a = this.buildingWithGableExtensionsDimensions().height,
o = this.buildingWithGableExtensionsDimensions().northEdge,
i = this.buildingWithGableExtensionsDimensions().southEdge,
n = this.buildingWithGableExtensionsDimensions().eastEdge,
r = this.buildingWithGableExtensionsDimensions().westEdge;
let s = 0,
l = 0,
h = 0,
c = 0;
da.porchN && (d = ia.getObjectByName("porchN-clone"), s = d.userData.porchDepth, t += d.userData.porchDepth), da.porchS && (d = ia.getObjectByName("porchS-clone"), l = d.userData.porchDepth, t += d.userData.porchDepth), da.porchE && (d = ia.getObjectByName("porchE-clone"), h = d.userData.porchDepth, e += d.userData.porchDepth), da.porchW && (d = ia.getObjectByName("porchW-clone"), c = d.userData.porchDepth, e += d.userData.porchDepth), da.porchWrapNW && (d = ia.getObjectByName("porchWrapNW-clone"), s = Math.max(s, d.userData.porchDepth), c = Math.max(c, d.userData.porchDepth)), da.porchWrapNE && (d = ia.getObjectByName("porchWrapNE-clone"), s = Math.max(s, d.userData.porchDepth), h = Math.max(h, d.userData.porchDepth)), da.porchWrapSE && (d = ia.getObjectByName("porchWrapSE-clone"), l = Math.max(l, d.userData.porchDepth), h = Math.max(h, d.userData.porchDepth)), da.porchWrapSW && (d = ia.getObjectByName("porchWrapSW-clone"), l = Math.max(l, d.userData.porchDepth), c = Math.max(c, d.userData.porchDepth)), da.porchWrapHipNW && (d = ia.getObjectByName("porchWrapHipNW-clone"), s = Math.max(s, d.userData.porchDepth), c = Math.max(c, d.userData.porchDepth)), da.porchWrapHipNE && (d = ia.getObjectByName("porchWrapHipNE-clone"), s = Math.max(s, d.userData.porchDepth), h = Math.max(h, d.userData.porchDepth)), da.porchWrapHipSE && (d = ia.getObjectByName("porchWrapHipSE-clone"), l = Math.max(l, d.userData.porchDepth), h = Math.max(h, d.userData.porchDepth)), da.porchWrapHipSW && (d = ia.getObjectByName("porchWrapHipSW-clone"), l = Math.max(l, d.userData.porchDepth), c = Math.max(c, d.userData.porchDepth)), o += s, i -= l, n -= h, r += c, e += n + r, t += o + i;
var d = {};
return d.x = (n + r) / 2, d.y = this.peakHeight() / 2, d.z = (o + i) / 2, {
width: e,
depth: t,
height: a,
center: d,
northEdge: o,
southEdge: i,
eastEdge: n,
westEdge: r
}
}, Oa.prototype.roofHeightAtX = function(e) {
e = e || 0;
let t = this.height,
a = 0,
o = this.width / 2 * (this.roofPitch / 12),
i = ("Asymmetrical" == this.roofType && (a = this.asymmetrical, o = (this.width + Math.abs(this.asymmetrical)) / 2 * (this.roofPitch / 12)), 0),
n = 0;
return "Single Slope" == this.roofType ? (i = 0 <= this.roofPitch ? this.width / -2 - e : this.width / 2 - e, t += Math.abs(i * this.roofPitch / 12)) : 0 <= a && e <= a ? (i = Math.abs(this.width / -2 - e), t += i * this.roofPitch / 12) : a < 0 && e >= a ? (i = Math.abs(this.width / 2 - e), t += i * this.roofPitch / 12) : 0 <= a && e >= a ? (i = Math.abs(this.width / 2 - e), n = Math.abs(this.width / 2 - a), t += Zo(i, 0, n, 0, o)) : a < 0 && e <= a && (i = Math.abs(this.width / -2 - e), n = Math.abs(this.width / -2 - a), t += Zo(i, 0, n, 0, o)), t
}, Oa.prototype.peakHeight = function() {
return "Asymmetrical" == this.roofType ? this.roofHeightAtX(this.asymmetrical) : "Single Slope" == this.roofType ? 0 <= this.roofPitch ? this.roofHeightAtX(this.width / 2) : this.roofHeightAtX(this.width / -2) : this.roofHeightAtX(0)
}, Oa.prototype.wallHeightL = function() {
return "Single Slope" === da.roofType && da.width * da.roofPitch / 12 < 0 ? da.height + da.width * Math.abs(da.roofPitch) / 12 : da.height
}, Oa.prototype.wallHeightR = function() {
return "Single Slope" === da.roofType && 0 < da.width * da.roofPitch / 12 ? da.height + da.width * Math.abs(da.roofPitch) / 12 : da.height
};
var da = new Oa;
if (R && console.log(da), Z) {
Z = !0;
let e = "load.php?id=" + Kt + "&dt=" + ea;
w && null == Kt && null == ea && (e = "color-visualizer-default.json"), $.getJSON(e, function(e) {
if (e.hasOwnProperty("success") && !1 === e.success && e.hasOwnProperty("errors")) console.log(e.errors);
else if (e.hasOwnProperty("params") && null !== e.params) {
console.log("Loading saved building"), R && console.log(e), e.hasOwnProperty("version") ? e.version !== Zt && window.location.replace("./v" + e.version) : (e.params.hasOwnProperty("weatherVane") && ("true" === e.params.weatherVane || !0 === e.params.weatherVane ? e.params.weatherVane = "Rooster" : e.params.weatherVane = "None"), e.hasOwnProperty("doorsWindows") && null !== e.doorsWindows && 0 !== Object.keys(e.doorsWindows).length && (e.doorsWindows.filter(e => "window3x4-clone" == e.name).forEach(e => {
e.name = "windowDoubleHung-clone", e.grid = "1", e.scale = "3,4,0"
}), e.doorsWindows.filter(e => "window3x4Shutters-clone" == e.name).forEach(e => {
e.name = "windowDoubleHung-clone", e.grid = "1", e.scale = "3,4,0", e.shutters = "1"
}), e.doorsWindows.filter(e => "window4x3-clone" == e.name).forEach(e => {
e.name = "windowSlider-clone", e.grid = "1", e.scale = "4,3,0"
}), e.doorsWindows.filter(e => "window4x3Shutters-clone" == e.name).forEach(e => {
e.name = "windowSlider-clone", e.grid = "1", e.scale = "4,3,0", e.shutters = "1"
}), e.doorsWindows.filter(e => "walkDoorEquine-clone" == e.name).forEach(e => {
e.scale = "4,7,0"
}), e.doorsWindows.filter(e => "walkDoorSolid-clone" == e.name).forEach(e => {
e.scale = "3,6.67,0"
}), e.doorsWindows.filter(e => "walkDoorHalfGlass-clone" == e.name).forEach(e => {
e.scale = "3,6.67,0"
}), e.doorsWindows.filter(e => "walkDoor9Lite-clone" == e.name).forEach(e => {
e.scale = "3,6.67,0"
}), e.doorsWindows.filter(e => "walkDoorCrossbuck-clone" == e.name).forEach(e => {
e.scale = "3,6.67,0"
}), e.doorsWindows.filter(e => "garageOverhead-clone" == e.name).forEach(e => {
e.name = "garageOverheadPanel-clone"
}), e.doorsWindows.filter(e => "garageOverheadWindow-clone" == e.name).forEach(e => {
e.name = "garageOverheadPanelWindow-clone"
})), e.hasOwnProperty("porches") && null !== e.porches && 0 !== Object.keys(e.porches).length && e.porches.forEach(e => {
var t, a = e.rotation.split(",");
e.rotation = "0," + a[1] + "," + a[2], e.hasOwnProperty("porchOverhang") || (e.hasOwnProperty("porchOverhang") || (e.porchOverhang = 0), e.hasOwnProperty("posts") || (e.posts = 0), e.hasOwnProperty("postMiter") || (e.postMiter = ""), e.hasOwnProperty("postWrap") || (e.postWrap = ""), a = e.position.split(","), t = e.scale.split(","), e.scale = t[0] + "," + a[1] + "," + t[2], e.position = a[0] + ",0," + a[2], e.ceilingHeight = a[1] - e.porchDepth * e.porchPitch / 12, console.log(a[1] - e.porchDepth * e.porchPitch / 12)), console.log(e)
})), e.params.hasOwnProperty("hideWalls") && (e.params.hideWalls = 0), e.hasOwnProperty("porches") && null !== e.porches && (Ht = e.porches), e.hasOwnProperty("doorsWindows") && null !== e.doorsWindows && (Nt = e.doorsWindows), e.hasOwnProperty("scaleItems") && null !== e.scaleItems && (Lt = e.scaleItems), e.hasOwnProperty("interiorItems") && null !== e.interiorItems && (Ct = e.interiorItems);
var a = e.params;
for (let t in a) a.hasOwnProperty(t) && da.hasOwnProperty(t) && ("object" != typeof a[t] || null === a[t] || Array.isArray(a[t]) ? isNaN(a[t]) ? "true" !== a[t] && "false" !== a[t] || (a[t] = "true" === a[t]) : a[t] = parseFloat(a[t]) : Object.keys(a[t]).forEach(e => {
isNaN(a[t][e]) ? "true" !== a[t][e] && "false" !== a[t][e] || (a[t][e] = "true" === a[t][e]) : a[t][e] = parseFloat(a[t][e])
}), da[t] = a[t]);
Ia()
}
})
}
var Ra = {},
Ba = {},
Sa = !1,
Ha = !1,
Na = new THREE.Vector3,
La = [],
Ca = [],
ja = new THREE.Raycaster,
i = new THREE.Vector2;
function za() {
for (var e = TWEEN.getAll(), t = e.length - 1; 0 <= t; t--) e[t].stop()
}
function Ia() {
Fa(), Ga(), P.addEventListener("start", function() {
P.autoRotate = !1, za()
}), W.domElement.addEventListener("mousedown", Ya, !1), W.domElement.addEventListener("mousemove", Za, !1), W.domElement.addEventListener("mouseup", Ja, !1), W.domElement.addEventListener("touchstart", Ya, !1), W.domElement.addEventListener("touchmove", Za, !1), W.domElement.addEventListener("touchend", Ja, !1), $(".guiColor select").each(function() {
$(this).val() ? $(this).addClass($(this).children(":selected").val().replace(/\W/g, "")) : console.error("Invalid color selected.")
}).on("change", function(e) {
$(this).attr("class", "").addClass($(this).children(":selected").val().replace(/\W/g, ""))
}), T = null, ve = null
}
function Fa() {
(ia = new THREE.Scene).background = new THREE.Color(16777215), Detector.webgl ? W = new THREE.WebGLRenderer({
antialias: !0,
preserveDrawingBuffer: !0
}) : $("#modal-loading").modal("hide");
var e = Oo(),
t = (W.shadowMap.enabled = !0, W.shadowMap.type = THREE.PCFSoftShadowMap, W.localClippingEnabled = !0, (v = W.domElement).setAttribute("id", "viewport3D"), document.getElementById("builder").appendChild(v), (S = new THREE.PerspectiveCamera(60, e.aspectRatio, .1, 1e3)).name = "UserCamera", S.position.set(1.25 * da.width, da.height + 0, 1.25 * da.depth), S.layers.enable(1), ia.add(S), (E = new THREE.OrthographicCamera(-v.clientWidth / 2, v.clientWidth / 2, v.clientHeight / 2, -v.clientHeight / 2, 1, 1e3)).name = "TopView", E.position.set(0, 0, 400), E.layers.enable(1), ia.add(E), M = S, (P = new THREE.OrbitControls(S, W.domElement)).enableKeys = !1, P.autoRotate = !0, P.autoRotateSpeed = .03, P.enableDamping = !0, P.dampingFactor = .1, P.rotateSpeed = .1, P.minDistance = 1, P.maxDistance = 250, P.panSpeed = .1, P.maxPolarAngle = Math.PI / 2 + .05, P.target.set(0, da.height / 2, 0), P.addEventListener("change", () => {
S.position.y <= .5 && (S.position.y = .5), G = !0
}), w && (P.minDistance = 40, P.enablePan = !1), (H = new THREE.OrbitControls(E, W.domElement)).enableKeys = !1, H.enableRotate = !1, H.screenSpacePanning = !0, H.minZoom = .25, H.maxZoom = 10, H.target.set(0, 0, 0), H.addEventListener("change", () => {
G = !0
}), xt = "Half Trusses", Ot = "Half Truss", Rt = "Gable Entries", Bt = "Gable Entry", w || (g = k.addFolder("Building Dimensions")), e = k.addFolder(Pa[oa].Colors), y = k.addFolder("Wainscot"), w || (n = k.addFolder("Roof Extension Options")), w || (t = k.addFolder(xt)), !w && (da.hasOwnProperty("coveredGableExtensionN") || da.hasOwnProperty("coveredGableExtensionS") || da.hasOwnProperty("coveredGableExtensionE") || da.hasOwnProperty("coveredGableExtensionW")) && (b = k.addFolder(Rt)), w || (f = k.addFolder("Porches")), w || (p = k.addFolder("Windows & Doors")), w || (m = k.addFolder("Interior")), w || (folderEnvironment = k.addFolder("Environment")), w || (da.hasOwnProperty("location") && g.add(da, "location", ["Manitoba", "Saskatchewan"]).name("Building Location").onChange(function() {
x()
}), (da.hasOwnProperty("size") ? g.add(da, "size", ["30'x40'", "30'x60'", "40'x40'", "40'x60'", "40'x80'"]).name("Building Size").listen() : (g.add(da, "width", 12, 200).step(1).name("Width (ft)").onChange(function() {
x()
}), g.add(da, "depth", 2, 304).step(1).name("Length (ft)"))).onChange(function() {
x()
}), g.add(da, "height", 6, 24).step(1).name("Eave Height (ft)").onChange(function() {
x()
}), g.add(da, "roofType", ["Gabled", "Single Slope", "Asymmetrical"]).name("Roof Type").listen().onChange(function() {
Qa()
}), g.add(da, "asymmetrical", -20, 20).step(1).name("Asymmetrical").onChange(function() {
x()
}), g.add(da, "roofPitch", da.settings.roofPitchMin, da.settings.roofPitchMax).step(.5).name('Roof Pitch / 12"').listen().onChange(function() {
x()
}), da.hasOwnProperty("frameConstruction") && g.add(da, "frameConstruction", ["Open Web Tapered", "Residential Flush", "I-beams"]).name("Column Type").listen().onChange(function() {
x()
}), da.hasOwnProperty("postType") && g.add(da, "postType", ["6x6 Solid", "8x8 Solid", "Glue Laminated", "Steel Tube"]).name("Post Type").listen().onChange(function() {
x()
}), da.hasOwnProperty("columnSize") && g.add(da, "columnSize", ["6x6", "8x8"]).name("Column Size").listen().onChange(function() {
x()
}), da.hasOwnProperty("purlinType") && g.add(da, "purlinType", ["2x6 Wood", "2x6 Metal C-channel"]).name("Purlin Type").listen().onChange(function() {
x()
}), da.hasOwnProperty("snowLoad") && g.add(da, "snowLoad", ["None", "20", "30", "40", "50", "60"]).name("Snow Load lbs/ft²").listen().onChange(function() {
x()
}), da.hasOwnProperty("wallPanelType") && g.add(da, "wallPanelType", ["Single Skin", "Insulated Panels"]).name("Wall Panel Type").listen().onChange(function() {
x()
}), da.hasOwnProperty("roofPanelType") && g.add(da, "roofPanelType", ["Screw Down", "Standing Seam"]).name("Roof Panel Type").listen().onChange(function() {
x()
}), secondaryMembers = g.add(da, "secondaryMembers", ["Steel", "Wood"]).name("Secondary Members").listen().onChange(function() {
x(), Xa()
}), folderEnvironment.add(da, "ground", ["None", "Grass Plains", "Treed Vally", "Clearing", "Green Mountains", "Rocky Mountains", "Desert"]).name("Ground").listen().onChange(function() {
ai()
})), De = e.add(da, "roofColor", F.filter(e => e.categories.includes("roof")).map(e => e.name)).class("guiColor").name("Roof Color").onChange(function() {
O()
}), Me = e.add(da, "wallColor", F.filter(e => e.categories.includes("wall")).map(e => e.name)).class("guiColor").name("Wall Color").onChange(function() {
O()
}), da.hasOwnProperty("trimCornerColor") || (We = e.add(da, "trimColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Trim Color").onChange(function() {
O()
})), da.hasOwnProperty("trimBaseColor") && (Oe = e.add(da, "trimBaseColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Trim Color - Base").onChange(function() {
O()
})), da.hasOwnProperty("trimGableColor") && (Re = e.add(da, "trimGableColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Trim Color - Gable").onChange(function() {
O()
})), da.hasOwnProperty("trimCornerColor") && (Be = e.add(da, "trimCornerColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Trim Color - Corner").onChange(function() {
O()
})), da.hasOwnProperty("trimEaveColor") && (Se = e.add(da, "trimEaveColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Trim Color - Eave").onChange(function() {
O()
})), da.hasOwnProperty("doorWindowTrimColor") && (_e = e.add(da, "doorWindowTrimColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Door & Window Trim").onChange(function() {
O()
})), da.hasOwnProperty("windowTrimColor") && (qe = e.add(da, "windowTrimColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Window Trim").onChange(function() {
O()
})), da.hasOwnProperty("doorTrimColor") && (Ae = e.add(da, "doorTrimColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Window Trim").onChange(function() {
O()
})), da.hasOwnProperty("garageDoorTrimColor") && (Ve = e.add(da, "garageDoorTrimColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Window Trim").onChange(function() {
O()
})), da.hasOwnProperty("walkDoorTrimColor") && (Ue = e.add(da, "walkDoorTrimColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Window Trim").onChange(function() {
O()
})), da.hasOwnProperty("trimEaveLightsColor") && ($e = e.add(da, "trimEaveLightsColor", F.filter(e => e.categories.includes("eaveLightTrim")).map(e => e.name)).class("guiColor").name("Eave Lights Trim").onChange(function() {
O()
})), da.hasOwnProperty("ridgeCapColor") && e.add(da, "ridgeCapColor", ["Match Trim", "Match Roof"]).name("Ridge Cap Color").onChange(function() {
O()
}), da.hasOwnProperty("gutterColor") && (ke = e.add(da, "gutterColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Gutter Color").onChange(function() {
O()
})), da.hasOwnProperty("downspoutColor") && (Ge = e.add(da, "downspoutColor", F.filter(e => e.categories.includes("trim")).map(e => e.name)).class("guiColor").name("Downspout Color").onChange(function() {
O()
})), He = e.add(da, "soffitColor", F.filter(e => e.categories.includes("soffit")).map(e => e.name)).class("guiColor").name("Soffit Color").onChange(function() {
O()
}), da.hasOwnProperty("trackColor") && (Fe = e.add(da, "trackColor", F.filter(e => e.categories.includes("trackColor")).map(e => e.name)).class("guiColor").name("Door Track").onChange(function() {
O()
})), w || (Ne = e.add(da, "wainscotColor", F.filter(e => e.categories.includes("wainscot")).map(e => e.name)).class("guiColor").name("Wainscot Color").onChange(function() {
O()
})), y.add(da, "wainscot1").name("Wainscot " + J.N.short).onChange(function() {
if (da.wainscot1 || da.wainscot2 || da.wainscot3 || da.wainscot4) {
if (!da.hasOwnProperty("_previousTrimColor")) {
da._previousTrimColor = da.trimColor;
}
if (We && da.trimColor !== "Charcoal") {
We.setValue("Charcoal");
}
} else {
if (da.hasOwnProperty("_previousTrimColor") && We) {
We.setValue(da._previousTrimColor);
delete da._previousTrimColor;
}
}
K()
}), y.add(da, "wainscot3").name("Wainscot " + J.S.short).onChange(function() {
if (da.wainscot1 || da.wainscot2 || da.wainscot3 || da.wainscot4) {
if (!da.hasOwnProperty("_previousTrimColor")) {
da._previousTrimColor = da.trimColor;
}
if (We && da.trimColor !== "Charcoal") {
We.setValue("Charcoal");
}
} else {
if (da.hasOwnProperty("_previousTrimColor") && We) {
We.setValue(da._previousTrimColor);
delete da._previousTrimColor;
}
}
K()
}), y.add(da, "wainscot2").name("Wainscot " + J.E.short).onChange(function() {
if (da.wainscot1 || da.wainscot2 || da.wainscot3 || da.wainscot4) {
if (!da.hasOwnProperty("_previousTrimColor")) {
da._previousTrimColor = da.trimColor;
}
if (We && da.trimColor !== "Charcoal") {
We.setValue("Charcoal");
}
} else {
if (da.hasOwnProperty("_previousTrimColor") && We) {
We.setValue(da._previousTrimColor);
delete da._previousTrimColor;
}
}
K()
}), y.add(da, "wainscot4").name("Wainscot " + J.W.short).onChange(function() {
if (da.wainscot1 || da.wainscot2 || da.wainscot3 || da.wainscot4) {
if (!da.hasOwnProperty("_previousTrimColor")) {
da._previousTrimColor = da.trimColor;
}
if (We && da.trimColor !== "Charcoal") {
We.setValue("Charcoal");
}
} else {
if (da.hasOwnProperty("_previousTrimColor") && We) {
We.setValue(da._previousTrimColor);
delete da._previousTrimColor;
}
}
K()
}), w || (da.hasOwnProperty("roofMaterial") && n.add(da, "roofMaterial", ["Screw Down Roof (SDR)", "Standing Seam Roof (SSR)"]).name("Roof Material").listen().onChange(function() {
x()
}), n.add(da, "gableFront", 0, 5).step(1).name(J.N.abbr + " Gable Overhang").onChange(function() {
x()
}), n.add(da, "gableBack", 0, 5).step(1).name(J.S.abbr + " Gable Overhang").onChange(function() {
x()
}), n.add(da, "eaveL", 0, 3).step(1).name(J.E.abbr + " Eave Overhang").onChange(function() {
x()
}), n.add(da, "eaveR", 0, 3).step(1).name(J.W.abbr + " Eave Overhang").onChange(function() {
x()
}), n.add(da, "cupola2", 0, vt).step(1).name("2' Cupola").onChange(function() {
Ua()
}), n.add(da, "cupola3", 0, vt).step(1).name("3' Cupola").onChange(function() {
Ua()
}), n.add(da, "cupola4", 0, vt).step(1).name("4' Cupola").onChange(function() {
Ua()
}), (y = t.addFolder(J.N.name + " " + Ot)).add(da, "leanTo1").name("Enabled").onChange(function() {
x(), K()
}), y.add(da, "leanTo1Drop", 0, 20).step(1).name("Drop").onChange(function() {
x()
}), y.add(da, "leanTo1CutL", 0, 20).step(1).name("Cut L").onChange(function() {
x()
}), y.add(da, "leanTo1CutR", 0, 20).step(1).name("Cut R").onChange(function() {
x()
}), y.add(da, "leanTo1Depth", 1, 50).step(1).name("Depth").onChange(function() {
x()
}), y.add(da, "leanTo1Pitch", 1, 6).step(1).name("Roof Pitch").onChange(function() {
x()
}), y.add(da, "leanTo1Walls", ["Fully Enclosed", "Open", "Upper Triangles Only", "Length Enclosed", "Length 1ft", "Length 2ft", "Length 3ft", "Length 4ft"]).name("Walls").listen().onChange(function() {
x(), K()
}), (n = t.addFolder(J.E.name + " " + Ot)).add(da, "leanTo2").name("Enabled").onChange(function() {
x(), K()
}), n.add(da, "leanTo2Drop", 0, 20).step(1).name("Drop").onChange(function() {
x()
}), n.add(da, "leanTo2CutL", 0, 20).step(1).name("Cut L").onChange(function() {
x()
}), n.add(da, "leanTo2CutR", 0, 20).step(1).name("Cut R").onChange(function() {
x()
}), n.add(da, "leanTo2Depth", 1, 50).step(1).name("Width").onChange(function() {
x()
}), n.add(da, "leanTo2Pitch", 1, 6).step(1).name("Roof Pitch").onChange(function() {
x()
}), n.add(da, "leanTo2Walls", ["Fully Enclosed", "Open", "Upper Triangles Only", "Length Enclosed", "Length 1ft", "Length 2ft", "Length 3ft", "Length 4ft"]).name("Walls").listen().onChange(function() {
x(), K()
}), (y = t.addFolder(J.S.name + " " + Ot)).add(da, "leanTo3").name("Enabled").onChange(function() {
x(), K()
}), y.add(da, "leanTo3Drop", 0, 20).step(1).name("Drop").onChange(function() {
x()
}), y.add(da, "leanTo3CutL", 0, 20).step(1).name("Cut L").onChange(function() {
x()
}), y.add(da, "leanTo3CutR", 0, 20).step(1).name("Cut R").onChange(function() {
x()
}), y.add(da, "leanTo3Depth", 1, 50).step(1).name("Depth").onChange(function() {
x()
}), y.add(da, "leanTo3Pitch", 1, 6).step(1).name("Roof Pitch").onChange(function() {
x()
}), y.add(da, "leanTo3Walls", ["Fully Enclosed", "Open", "Upper Triangles Only", "Length Enclosed", "Length 1ft", "Length 2ft", "Length 3ft", "Length 4ft"]).name("Walls").listen().onChange(function() {
x(), K()
}), (n = t.addFolder(J.W.name + " " + Ot)).add(da, "leanTo4").name("Enabled").onChange(function() {
x(), K()
}), n.add(da, "leanTo4Drop", 0, 20).step(1).name("Drop").onChange(function() {
x()
}), n.add(da, "leanTo4CutL", 0, 20).step(1).name("Cut L").onChange(function() {
x()
}), n.add(da, "leanTo4CutR", 0, 20).step(1).name("Cut R").onChange(function() {
x()
}), n.add(da, "leanTo4Depth", 1, 50).step(1).name("Width").onChange(function() {
x()
}), n.add(da, "leanTo4Pitch", 1, 6).step(1).name("Roof Pitch").onChange(function() {
x()
}), n.add(da, "leanTo4Walls", ["Fully Enclosed", "Open", "Upper Triangles Only", "Length Enclosed", "Length 1ft", "Length 2ft", "Length 3ft", "Length 4ft"]).name("Walls").listen().onChange(function() {
x(), K()
}), da.hasOwnProperty("coveredGableExtensionN") && ((y = b.addFolder(J.N.name + " " + Bt)).add(da, "coveredGableExtensionN").name("Enabled").onChange(function() {
x(), K()
}), y.add(da, "coveredGableExtensionNHeight", 6, 20).step(1).name("Height").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionNCutL", 0, 200).step(1).name("Cut L").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionNCutR", 0, 200).step(1).name("Cut R").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionNDepth", 6, 60).step(1).name("Depth").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionNPitch", da.settings.roofPitchMin, da.settings.roofPitchMax).step(1).name("Roof Pitch").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionNEnclosed").name("Enclosed").onChange(function() {
x(), K()
}), y.add(da, "coveredGableExtensionNStructure", ["Wood", "Steel"]).name("Structure").listen().onChange(function() {
x()
})), da.hasOwnProperty("coveredGableExtensionS") && ((t = b.addFolder(J.S.name + " " + Bt)).add(da, "coveredGableExtensionS").name("Enabled").onChange(function() {
x(), K()
}), t.add(da, "coveredGableExtensionSHeight", 6, 20).step(1).name("Height").onChange(function() {
x()
}), t.add(da, "coveredGableExtensionSCutL", 0, 200).step(1).name("Cut L").onChange(function() {
x()
}), t.add(da, "coveredGableExtensionSCutR", 0, 200).step(1).name("Cut R").onChange(function() {
x()
}), t.add(da, "coveredGableExtensionSDepth", 6, 60).step(1).name("Depth").onChange(function() {
x()
}), t.add(da, "coveredGableExtensionSPitch", da.settings.roofPitchMin, da.settings.roofPitchMax).step(1).name("Roof Pitch").onChange(function() {
x()
}), t.add(da, "coveredGableExtensionSEnclosed").name("Enclosed").onChange(function() {
x(), K()
}), t.add(da, "coveredGableExtensionSStructure", ["Wood", "Steel"]).name("Structure").listen().onChange(function() {
x()
})), da.hasOwnProperty("coveredGableExtensionE") && ((n = b.addFolder(J.E.name + " " + Bt)).add(da, "coveredGableExtensionE").name("Enabled").onChange(function() {
x(), K()
}), n.add(da, "coveredGableExtensionEHeight", 6, 20).step(1).name("Height").onChange(function() {
x()
}), n.add(da, "coveredGableExtensionECutL", 0, 200).step(1).name("Cut L").onChange(function() {
x()
}), n.add(da, "coveredGableExtensionECutR", 0, 200).step(1).name("Cut R").onChange(function() {
x()
}), n.add(da, "coveredGableExtensionEDepth", 6, 60).step(1).name("Depth").onChange(function() {
x()
}), n.add(da, "coveredGableExtensionEPitch", da.settings.roofPitchMin, da.settings.roofPitchMax).step(1).name("Roof Pitch").onChange(function() {
x()
}), n.add(da, "coveredGableExtensionEEnclosed").name("Enclosed").onChange(function() {
x(), K()
}), n.add(da, "coveredGableExtensionEStructure", ["Wood", "Steel"]).name("Structure").listen().onChange(function() {
x()
})), da.hasOwnProperty("coveredGableExtensionW") && ((y = b.addFolder(J.W.name + " " + Bt)).add(da, "coveredGableExtensionW").name("Enabled").onChange(function() {
x(), K()
}), y.add(da, "coveredGableExtensionWHeight", 6, 20).step(1).name("Height").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionWCutL", 0, 200).step(1).name("Cut L").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionWCutR", 0, 200).step(1).name("Cut R").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionWDepth", 6, 60).step(1).name("Depth").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionWPitch", da.settings.roofPitchMin, da.settings.roofPitchMax).step(1).name("Roof Pitch").onChange(function() {
x()
}), y.add(da, "coveredGableExtensionWEnclosed").name("Enclosed").onChange(function() {
x(), K()
}), y.add(da, "coveredGableExtensionWStructure", ["Wood", "Steel"]).name("Structure").listen().onChange(function() {
x()
})), f.add(da, "porchN").name(J.N.name + " Porch").listen().onChange(function() {
x()
}), f.add(da, "porchS").name(J.S.name + " Porch").listen().onChange(function() {
x()
}), f.add(da, "porchE").name(J.E.name + " Porch").listen().onChange(function() {
x()
}), f.add(da, "porchW").name(J.W.name + " Porch").listen().onChange(function() {
x()
}), f.add(da, "porchWrapNW").name(J.NW.abbr + " Wrap Porch").listen().onChange(function() {
x()
}), f.add(da, "porchWrapNE").name(J.NE.abbr + " Wrap Porch").listen().onChange(function() {
x()
}), f.add(da, "porchWrapSE").name(J.SE.abbr + " Wrap Porch").listen().onChange(function() {
x()
}), f.add(da, "porchWrapSW").name(J.SW.abbr + " Wrap Porch").listen().onChange(function() {
x()
}), p.add(Ma, "addWindowSlider").name("Add Slider Window"), p.add(Ma, "addWalkDoorSolid").name("Add Walk Door Solid"), p.add(Ma, "addWalkDoorHalfGlass").name("Add Walk Door Half Glass"), p.add(Ma, "addGarageOverheadPanel").name("Add Overhead Panel Door"), p.add(Ma, "addGarageSlide").name("Add Sliding Doors"), p.add(Ma, "addGarageBiFold").name("Add Bi-Fold Door"), p.add(Ma, "addGarageHydraulic").name("Add Hydraulic Door"), p.add(Ma, "addGarageRollUp").name("Add Roll Up Door"), (da.useMezzanineDepth ? m.add(da, "mezzanineDepth", 0, 200).step(1).name("Mezzanine Depth") : (m.add(da, "mezzanineBays", 0, 20).step(1).name("Mezzanine Bays").onChange(function() {
x()
}), m.add(da, "mezzanineStartingBay", 1, 20).step(1).name("Mezzanine Starting Bay"))).onChange(function() {
x()
}), m.add(da, "mezzanineHeight", 6, 20).step(1).name("Mezzanine Height").onChange(function() {
x()
}), da.hasOwnProperty("mezzanineSupport") && m.add(da, "mezzanineSupport", ["Floor Support", "Roof Support"]).name("Mezzanine Support").listen().onChange(function() {
x()
}), da.hasOwnProperty("mezzanineRailing") && m.add(da, "mezzanineRailing", ["None", "Framed", "Steel Covered"]).name("Mezzanine Railing").listen().onChange(function() {
x()
}), da.hasOwnProperty("mezzanineStairs") && m.add(da, "mezzanineStairs", ["None", "Left Straight", "Right Straight", "Left Landing", "Right Landing"]).name("Mezzanine Stairs").listen().onChange(function() {
x()
})), (w ? e : g).open(), k.open(), (na = new THREE.Group).name = "buildingNull", ia.add(na), (ra = new THREE.Group).name = "hiddenItemsNull", ia.add(ra), (z = new THREE.Group).name = "dimensionsNull", na.add(z), new THREE.Group),
a = (t.name = "lightsNull", ia.add(t), new THREE.HemisphereLight(16770491, 16760576, 1)),
o = (a.color.setHex(16777215), a.groundColor.setHex(16777215), a.name = "HemisphereLight", t.add(a), new THREE.AmbientLight(4210752, 1)),
i = (o.name = "AmbientLight", t.add(o), new THREE.DirectionalLight("white", 1));
switch (i.name = "FrontDirectionalLight", i.position.set(60, 75, 120), i.target.position.set(0, 0, 0), i.castShadow = !0, i.shadow.mapSize.width = 4096, i.shadow.mapSize.height = 4096, i.shadow.camera.right = 110, i.shadow.camera.left = -110, i.shadow.camera.top = 110, i.shadow.camera.bottom = -110, i.shadow.camera.near = 25, i.shadow.camera.far = 300, i.shadow.camera.visible = !0, i.shadow.bias = -5e-4, t.add(i), da.settings.shadows) {
case "none":
a.intensity = .5, o.intensity = .5, i.intensity = .5, i.castShadow = !1;
break;
case "dark":
a.intensity = .25, o.intensity = .25, i.intensity = .75;
break;
case "medium":
a.intensity = .3, o.intensity = .8, i.intensity = .5;
break;
default:
a.intensity = .5, o.intensity = 1, i.intensity = .1
}
var n = new THREE.DirectionalLight("white", .2);
n.name = "BackDirectionalLight", n.position.set(-30, 75, -150), n.target.position.set(0, 0, 0), t.add(n), (n = new THREE.DirectionalLight("white", .2)).name = "BackLeftDirectionalLight", n.position.set(-100, -75, 50), n.target.position.set(0, 0, 0), t.add(n), (n = new THREE.DirectionalLight("white", .2)).name = "BackRightDirectionalLight", n.position.set(75, 25, -100), n.target.position.set(0, 0, 0), t.add(n), ia.fog = new THREE.Fog(12637405, 250, 1e3);
let r, s, l, h, c, d;
r = new THREE.SphereGeometry(750, 25, 25), l = D + "images/sky/sky-sq.jpg", c = new THREE.TextureLoader, h = c.load(l), s = new THREE.MeshBasicMaterial({
name: "skySphere-Material",
map: h,
fog: !1
}), (L = new THREE.Mesh(r, s)).material.side = THREE.BackSide, L.name = "skySphere-Mesh", ia.add(L), da.settings.showWatermark && (l = "images/logo-watermark.png", c = new THREE.TextureLoader(T), h = c.load(l), r = new THREE.PlaneGeometry(1, 1), (s = new THREE.MeshBasicMaterial({
name: "watermark",
map: h,
opacity: da.settings.watermarkOpacity,
transparent: !0
})).depthTest = !1, s.polygonOffset = !0, s.polygonOffsetFactor = -1, (b = new THREE.Mesh(r, s)).name = "watermark", b.castShadow = !1, b.receiveShadow = !1, b.position.set(0, 0, -1.25), M.add(b)), da.settings.showLogoOnTruss && (l = "images/logo-watermark.png", c = new THREE.TextureLoader, (h = c.load(l)).anisotropy = W.capabilities.getMaxAnisotropy(), r = new THREE.PlaneGeometry(1, 1), (s = new THREE.MeshBasicMaterial({
name: "logo",
map: h,
transparent: !0
})).polygonOffset = !0, s.polygonOffsetFactor = -1, (y = new THREE.Mesh(r, s)).name = "postLogo", y.castShadow = !1, y.receiveShadow = !1, y.position.y = -1, y.visible = !1, y.frustumCulled = !1, ra.add(y)), j = new THREE.GridHelper(1e3, 100, 13421772, 13421772), C = new THREE.GridHelper(1e3, 1200, 13421772, 13421772), j.material.transparent = !0, C.material.transparent = !0, j.material.opacity = .5, C.material.opacity = .35, j.visible = !1, C.visible = !1, ia.add(j), ia.add(C), (c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/ground.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !0, t.castShadow = !1, t.receiveShadow = !0, t.frustumCulled = !1, t.name = "ground", 0 < t.material.length ? t.material.forEach(function(e) {
t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0), "MeshStandardMaterial" == e.type && null !== e.roughnessMap && (e.roughness = 1)
}) : (t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0), "MeshStandardMaterial" == t.material.type && null !== t.material.roughnessMap && (t.material.roughness = 1)), (c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/ground.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !0, t.castShadow = !1, t.receiveShadow = !0, t.frustumCulled = !1, 0 < t.material.length ? t.material.forEach(function(e) {
t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0), "MeshStandardMaterial" == e.type && null !== e.roughnessMap && (e.roughness = 1)
}) : (t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0), "MeshStandardMaterial" == t.material.type && null !== t.material.roughnessMap && (t.material.roughness = 1)), N = t, ia.add(t), ai()
})
})
})
}), l = D + "images/ground/map/mapBlend.jpg", c = new THREE.TextureLoader, (h = c.load(l)).anisotropy = W.capabilities.getMaxAnisotropy(), h.anisotropy = 5, da.hasOwnProperty("mapEnabled") && ((I = new THREE.Group).name = "mapRotationNull", I.visible = da.mapEnabled, I.userData.previouslyShown = !1, ia.add(I), r = new THREE.PlaneGeometry(1, 1), s = new THREE.MeshPhongMaterial({
name: "map1",
alphaMap: h,
transparent: !0,
polygonOffset: !0,
polygonOffsetFactor: 1,
fog: !1
}), (object3d = new THREE.Mesh(r, s)).rotateX(-Math.PI / 2), object3d.name = "map1", object3d.renderOrder = -1, object3d.castShadow = !1, object3d.receiveShadow = !0, ae = object3d, I.add(object3d), (r = new THREE.PlaneGeometry(4, 4)).applyMatrix((new THREE.Matrix4).makeTranslation(0, 0, -.01)), s = new THREE.MeshPhongMaterial({
name: "map2",
alphaMap: h,
transparent: !0,
polygonOffset: !0,
polygonOffsetFactor: 2,
fog: !1
}), (object3d = new THREE.Mesh(r, s)).name = "map2", object3d.receiveShadow = !(object3d.castShadow = !(object3d.renderOrder = -2)), oe = object3d, ae.add(object3d), (r = new THREE.PlaneGeometry(8, 8)).applyMatrix((new THREE.Matrix4).makeTranslation(0, 0, -.02)), s = new THREE.MeshPhongMaterial({
name: "map3",
polygonOffset: !0,
polygonOffsetFactor: 3,
fog: !1
}), (object3d = new THREE.Mesh(r, s)).name = "map3", object3d.receiveShadow = !(object3d.castShadow = !(object3d.renderOrder = -3)), ie = object3d, ae.add(object3d), (f = k.addFolder("Place Building On Map")).add({
clicked: function() {
ti()
}
}, "clicked").id("mapNavButton").name("Open Map Details Menu"), f.add(da, "mapRotation", -180, 180).step(1).name("Rotate Building").onChange(function() {
ia.rotation.y = THREE.Math.degToRad(da.mapRotation), na.rotation.y = -THREE.Math.degToRad(da.mapRotation), de.rotation.y = -THREE.Math.degToRad(da.mapRotation)
}), f.add(da.mapPosition, "x", -400, 400).step(.1).name("Move East/West").onChange(function() {
ae.position.x = da.mapPosition.x
}), f.add(da.mapPosition, "z", -400, 400).step(.1).name("Move North/South").onChange(function() {
ae.position.z = da.mapPosition.z
})), r = new THREE.BoxGeometry(1, .05, 1), l = D + "images/building/concrete.jpg", c = new THREE.TextureLoader, (h = c.load(l)).anisotropy = W.capabilities.getMaxAnisotropy(), h.wrapS = THREE.RepeatWrapping, h.wrapT = THREE.RepeatWrapping, s = new THREE.MeshPhongMaterial({
color: "white",
name: "foundation-Material",
map: h,
bumpMap: h,
bumpScale: .04,
specularMap: h
}), (ne = new THREE.Mesh(r, s)).name = "foundation", ne.castShadow = !0, ne.receiveShadow = !0, na.add(ne), $a(), (te = (new THREE.TextureLoader).load(D + "images/building/building-normal.jpg")).anisotropy = W.capabilities.getMaxAnisotropy(), te.wrapS = THREE.RepeatWrapping, te.wrapT = THREE.RepeatWrapping, (r = new THREE.BoxGeometry(1, 1, 1)).applyMatrix((new THREE.Matrix4).makeTranslation(0, .5, 0)), s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide,
visible: !1
}), (re = new THREE.Mesh(r, s)).name = "boundingBoxes", na.add(re), (r = new THREE.BoxGeometry(1, 1, 1)).applyMatrix((new THREE.Matrix4).makeTranslation(0, .5, 0)), s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide,
visible: !1
}), B && (s = new THREE.MeshPhongMaterial({
color: 11199999,
wireframe: !0,
wireframeLinewidth: 3,
side: THREE.DoubleSide
})), (se = new THREE.Mesh(r, s)).name = "buildingBoundingBox", Ca.push(se), re.add(se), (r = new THREE.BoxGeometry(1, 1, 1)).applyMatrix((new THREE.Matrix4).makeTranslation(0, .5, .5)), s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide,
visible: !1
}), B && (s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide
}));
var p = new THREE.Mesh(r, s),
m = (p.name = "leanTo1BoundingBox", p.rotation.y = 0, Ca.push(p), re.add(p), (r = new THREE.BoxGeometry(1, 1, 1)).applyMatrix((new THREE.Matrix4).makeTranslation(0, .5, .5)), s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide,
visible: !1
}), B && (s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide
})), new THREE.Mesh(r, s)),
e = (m.name = "leanTo2BoundingBox", m.rotation.y = Math.PI / -2, Ca.push(m), re.add(m), (r = new THREE.BoxGeometry(1, 1, 1)).applyMatrix((new THREE.Matrix4).makeTranslation(0, .5, .5)), s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide,
visible: !1
}), B && (s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide
})), new THREE.Mesh(r, s)),
g = (e.name = "leanTo3BoundingBox", e.rotation.y = Math.PI, Ca.push(e), re.add(e), (r = new THREE.BoxGeometry(1, 1, 1)).applyMatrix((new THREE.Matrix4).makeTranslation(0, .5, .5)), s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide,
visible: !1
}), B && (s = new THREE.MeshPhongMaterial({
color: 16770491,
wireframe: !0,
side: THREE.DoubleSide
})), new THREE.Mesh(r, s));
switch (g.name = "leanTo4BoundingBox", g.rotation.y = Math.PI / 2, Ca.push(g), re.add(g), da.secondaryMembers) {
case "Insulated Panels":
Ea = At;
break;
case "Red Iron":
Ea = Qt;
break;
case "Metal":
case "Steel":
Ea = Ut;
break;
default:
Ea = At
}(r = new THREE.PlaneBufferGeometry).translate(0, -.5, 0), s = new THREE.MeshStandardMaterial({
color: 13369395,
side: THREE.DoubleSide
}), (q = new THREE.Mesh(r, s)).name = "floor", q.rotation.x = THREE.Math.degToRad(90), q.position.y = .03, q.visible = !1, na.add(q), (r = new THREE.PlaneBufferGeometry).translate(0, .5, 0), s = new THREE.MeshStandardMaterial({
color: 13369395,
side: THREE.DoubleSide
}), (A = new THREE.Mesh(r, s)).name = "floor2", A.rotation.x = THREE.Math.degToRad(90), A.position.y = .03, A.visible = !1, na.add(A), (r = new THREE.PlaneBufferGeometry).translate(.5, -.5, 0), s = new THREE.MeshStandardMaterial({
color: 13369395,
side: THREE.DoubleSide
}), (V = new THREE.Mesh(r, s)).name = "ceilingL", V.rotation.x = THREE.Math.degToRad(90), V.visible = !1, na.add(V), (r = new THREE.PlaneBufferGeometry).translate(-.5, -.5, 0), s = new THREE.MeshStandardMaterial({
color: 13369395,
side: THREE.DoubleSide
}), (U = new THREE.Mesh(r, s)).name = "ceilingR", U.rotation.x = THREE.Math.degToRad(90), U.visible = !1, na.add(U), (r = new THREE.PlaneBufferGeometry).translate(.5, .5, 0), s = new THREE.MeshStandardMaterial({
color: 13369395,
side: THREE.DoubleSide
}), (Q = new THREE.Mesh(r, s)).name = "ceiling2L", Q.rotation.x = THREE.Math.degToRad(90), Q.visible = !1, na.add(Q), (r = new THREE.PlaneBufferGeometry).translate(-.5, .5, 0), s = new THREE.MeshStandardMaterial({
color: 13369395,
side: THREE.DoubleSide
}), (X = new THREE.Mesh(r, s)).name = "ceiling2R", X.rotation.x = THREE.Math.degToRad(90), X.visible = !1, na.add(X), c = new THREE.TextureLoader, l = D + "images/building/floor-carpet.jpg", (h = c.load(l)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), h.wrapS = THREE.RepeatWrapping, h.wrapT = THREE.RepeatWrapping;
let u = c.load(l);
u.anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), u.wrapS = THREE.RepeatWrapping, u.wrapT = THREE.RepeatWrapping, ct = new THREE.MeshPhongMaterial({
map: h,
color: 16777215,
specular: 3947580,
shininess: 5,
side: THREE.DoubleSide
}), Tt = new THREE.MeshPhongMaterial({
map: u,
color: 16777215,
specular: 3947580,
shininess: 5,
side: THREE.DoubleSide
}), l = D + "images/building/floor-tile.jpg", (h = c.load(l)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), h.wrapS = THREE.RepeatWrapping, h.wrapT = THREE.RepeatWrapping, (u = c.load(l)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), u.wrapS = THREE.RepeatWrapping, u.wrapT = THREE.RepeatWrapping, lt = new THREE.MeshPhongMaterial({
map: h,
color: 16777215,
specular: 3947580,
shininess: 30,
side: THREE.DoubleSide
}), gt = new THREE.MeshPhongMaterial({
map: u,
color: 16777215,
specular: 3947580,
shininess: 30,
side: THREE.DoubleSide
}), l = D + "images/building/floor-wood.jpg", (h = c.load(l)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), h.wrapS = THREE.RepeatWrapping, h.wrapT = THREE.RepeatWrapping, (u = c.load(l)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), u.wrapS = THREE.RepeatWrapping, u.wrapT = THREE.RepeatWrapping, ht = new THREE.MeshPhongMaterial({
map: h,
color: 16777215,
specular: 3947580,
shininess: 20,
side: THREE.DoubleSide
}), ut = new THREE.MeshPhongMaterial({
map: u,
color: 16777215,
specular: 3947580,
shininess: 20,
side: THREE.DoubleSide
}), l = D + "images/building/ceiling-tile2x2.jpg", (h = c.load(l)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), h.wrapS = THREE.RepeatWrapping, h.wrapT = THREE.RepeatWrapping, (u = c.load(l)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), u.wrapS = THREE.RepeatWrapping, u.wrapT = THREE.RepeatWrapping, nt = new THREE.MeshPhongMaterial({
map: h,
color: 16777215,
specular: 3947580,
shininess: 10,
side: THREE.DoubleSide
}), dt = new THREE.MeshPhongMaterial({
map: u,
color: 16777215,
specular: 3947580,
shininess: 10,
side: THREE.DoubleSide
}), l = D + "images/building/building-normal.jpg", (h = c.load(l)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), h.wrapS = THREE.RepeatWrapping, h.wrapT = THREE.RepeatWrapping, (u = c.load(l)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), u.wrapS = THREE.RepeatWrapping, u.wrapT = THREE.RepeatWrapping, rt = new THREE.MeshPhongMaterial({
normalMap: h,
color: 16777215,
specular: 3947580,
shininess: 40,
side: THREE.DoubleSide
}), pt = new THREE.MeshPhongMaterial({
normalMap: u,
color: 16777215,
specular: 3947580,
shininess: 40,
side: THREE.DoubleSide
}), rt.color.setStyle(F.filter(e => e.name === da.interiorPanelColor).map(e => e.hex)), pt.color.setStyle(F.filter(e => e.name === da.interiorPanelColor).map(e => e.hex)), (c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/Mansards.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, t.castShadow = !0, t.receiveShadow = !0, t.frustumCulled = !1, 0 < t.material.length ? t.material.forEach(function(e) {
t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0), "MeshStandardMaterial" == e.type && null !== e.roughnessMap && (e.roughness = 1)
}) : (t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0), "MeshStandardMaterial" == t.material.type && null !== t.material.roughnessMap && (t.material.roughness = 1)), ra.add(t)
})
});
var T = new THREE.LoadingManager,
b = ((c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/Cupola.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, t.castShadow = !0, t.receiveShadow = !0, 0 < t.material.length ? t.material.forEach(function(e) {
e.castShadow = !0, e.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0)
}) : (t.material.castShadow = !0, t.material.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0)), ra.add(t);
for (let e = 1; e <= vt; e++) {
var a = t.clone();
a.visible = !1, a.name = t.name + "-" + e, da[t.name] >= e && (a.visible = !0), na.add(a)
}
})
}), (c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/WeatherVane.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, ra.add(t);
for (let e = 1; e <= Et; e++) {
var a = t.clone();
a.visible = !1, a.name = t.name + "-" + e, na.add(a)
}
})
}), da.hasOwnProperty("ridgeVents") && ((c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/RidgeVents.lwo", function(e) {
e.meshes.forEach(function(e) {
e.visible = !1, ra.add(e)
})
})), r = new THREE.PlaneGeometry(350, 350, 1), s = new THREE.MeshBasicMaterial({
color: 16776960
}), R ? s.wireframe = !0 : (s.transparent = !0, s.opacity = 0), (ce = new THREE.Mesh(r, s)).position.y = 1, ce.rotation.x = THREE.Math.degToRad(-90), ia.add(ce), (de = new THREE.Group).name = "measurementsNull", ia.add(de), c.load(D + "objects/measure.lwo", function(e) {
e.meshes.forEach(function(e) {
e.visible = !1, e.frustumCulled = !1, e.userData.fileType = "lwo", ra.add(e)
})
}), c.load(D + "objects/WindowsDoors.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, 0 < t.material.length ? t.material.forEach(function(e) {
e.castShadow = !0, e.receiveShadow = !0, e.emissive.setHex(0), t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0)
}) : (t.material.castShadow = !0, t.material.receiveShadow = !0, t.material.emissive.setHex(0), t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0)), ra.add(t)
})
}), (pa = new THREE.Group).name = "RigidFramingParent", na.add(pa), (ma = new THREE.Group).name = "RigidFramingMaster", pa.add(ma), (c = new THREE.LWOLoader).load(D + "objects/Frame-Rigid.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, t.frustumCulled = !1, 0 < t.material.length ? t.material.forEach(function(e) {
e.castShadow = !0, e.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0)
}) : (t.material.castShadow = !0, t.material.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0)), ma.add(t)
}), (d = pa.getObjectByName("columnSide").clone()).name = "columnSideR", d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, da.settings.ridgidFrameStraightColumns && (d.morphTargetInfluences[d.morphTargetDictionary.unTaper] = 1), ma.add(d), (d = pa.getObjectByName("columnSide").clone()).name = "columnSideL", d.visible = !0, d.position.y = .05, da.settings.ridgidFrameStraightColumns && (d.morphTargetInfluences[d.morphTargetDictionary.unTaper] = 1), ma.add(d), (d = pa.getObjectByName("beamRoof").clone()).name = "beamRoofR", d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, ma.add(d), (d = pa.getObjectByName("beamRoof").clone()).name = "beamRoofL", d.visible = !0, d.position.y = .05, ma.add(d), ma.traverse(function(e) {
e instanceof THREE.Mesh && "Truss" == e.material.name && e.material.color.copy(Ea)
})
}), (Ta = new THREE.Group).name = "PostFrameParent", na.add(Ta), (ba = new THREE.Group).name = "PostFrameMaster", Ta.add(ba), (c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/Frame-PostFrame.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, t.frustumCulled = !1, t.castShadow = !0, 0 < t.material.length ? t.material.forEach(function(e) {
e.castShadow = !0, e.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0)
}) : (t.material.castShadow = !0, t.material.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0)), ba.add(t)
}), (d = Ta.getObjectByName("columnSide").clone()).name = "columnSideR", d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, ba.add(d), (d = Ta.getObjectByName("columnSide").clone()).name = "columnSideL", d.visible = !0, d.position.y = .05, ba.add(d);
e = Ta.getObjectByName("webbing").clone();
if (e.name = "webbingVertR1", e.visible = !1, ba.add(e), (e = Ta.getObjectByName("webbing").clone()).name = "webbingVertR2", e.visible = !1, ba.add(e), (e = Ta.getObjectByName("webbing").clone()).name = "webbingVertL1", e.visible = !1, ba.add(e), (e = Ta.getObjectByName("webbing").clone()).name = "webbingVertL2", e.visible = !1, ba.add(e), (e = Ta.getObjectByName("webbing").clone()).name = "webbingDiagR1", e.visible = !1, ba.add(e), (e = Ta.getObjectByName("webbing").clone()).name = "webbingDiagR2", e.visible = !1, ba.add(e), (e = Ta.getObjectByName("webbing").clone()).name = "webbingDiagL1", e.visible = !1, ba.add(e), (e = Ta.getObjectByName("webbing").clone()).name = "webbingDiagL2", e.visible = !1, ba.add(e), (d = Ta.getObjectByName("beamRoof").clone()).name = "beamRoofR", d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, ba.add(d), (d = Ta.getObjectByName("beamRoof").clone()).name = "beamRoofL", d.visible = !0, d.position.y = .05, ba.add(d), (d = Ta.getObjectByName("truss")).visible = !0, da.settings.showLogoOnTruss) {
let e = ia.getObjectByName("postLogo").clone();
e.visible = !0, e.frustumCulled = !1, e.position.z = .3, e.position.y = -.35, e.scale.set(1.1, 1.1, 1.1), d.add(e), (e = e.clone()).visible = !0, e.frustumCulled = !1, e.rotation.y = THREE.Math.degToRad(180), e.position.z = -.3, d.add(e)
}
}), (wa = new THREE.Group).name = "OpenWebFrameParent", wa.visible = !1, na.add(wa), (va = new THREE.Group).name = "OpenWebFrameMaster", wa.add(va), (c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/Frame-OpenWebFrame.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, t.frustumCulled = !1, t.castShadow = !0, 0 < t.material.length ? t.material.forEach(function(e) {
e.castShadow = !0, e.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0)
}) : (t.material.castShadow = !0, t.material.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0)), va.add(t)
}), da.hasOwnProperty("frameConstruction") && "I-beams" == da.frameConstruction ? ((d = wa.getObjectByName("beamRoof").clone()).name = "columnSideR", d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.rotation.z = THREE.Math.degToRad(90), d.position.y = .05, va.add(d), (d = wa.getObjectByName("beamRoof").clone()).name = "columnSideL", d.visible = !0, d.rotation.z = THREE.Math.degToRad(90), d.position.y = .05, va.add(d)) : ((d = wa.getObjectByName("columnSide").clone()).name = "columnSideR", d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, va.add(d), (d = wa.getObjectByName("columnSide").clone()).name = "columnSideL", d.visible = !0, d.position.y = .05, va.add(d), (d = wa.getObjectByName("columnTubeSide").clone()).name = "columnTubeSideR", d.visible = !1, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, va.add(d), (d = wa.getObjectByName("columnTubeSide").clone()).name = "columnTubeSideL", d.visible = !1, d.position.y = .05, va.add(d)), (d = wa.getObjectByName("columnSideInner").clone()).name = "columnSideInnerR", d.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, va.add(d), (d = wa.getObjectByName("columnSideInner").clone()).name = "columnSideInnerL", d.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, d.position.y = .05, va.add(d), (d = wa.getObjectByName("beamRoof").clone()).name = "beamRoofR", d.applyMatrix((new THREE.Matrix4).makeScale(-1, 1, 1)), d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, va.add(d), (d = wa.getObjectByName("beamRoof").clone()).name = "beamRoofL", d.visible = !0, d.position.y = .05, va.add(d), (d = wa.getObjectByName("beamRoofInner").clone()).name = "beamRoofInnerR", d.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, va.add(d), (d = wa.getObjectByName("beamRoofInner").clone()).applyMatrix((new THREE.Matrix4).makeScale(-1, 1, 1)), d.name = "beamRoofInnerL", d.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, d.position.y = .05, va.add(d), (d = wa.getObjectByName("trussVert").clone()).name = "columnSideTangentR", d.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, va.add(d), (d = wa.getObjectByName("trussVert").clone()).name = "columnSideTangentL", d.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, d.position.y = .05, va.add(d)
}), (ya = new THREE.Group).name = "HybridFrameParent", ya.visible = !1, na.add(ya), (fa = new THREE.Group).name = "HybridFrameMaster", ya.add(fa), (c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/Frame-HybridFrame.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, t.frustumCulled = !1, t.castShadow = !0, 0 < t.material.length ? t.material.forEach(function(e) {
e.castShadow = !0, e.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0)
}) : (t.material.castShadow = !0, t.material.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0)), fa.add(t)
}), (d = ya.getObjectByName("columnSide").clone()).name = "columnSideR", d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, fa.add(d), (d = ya.getObjectByName("columnSide").clone()).name = "columnSideL", d.visible = !0, d.position.y = .05, fa.add(d);
e = ya.getObjectByName("trussVert").clone();
e.name = "trussVertR1", e.applyMatrix((new THREE.Matrix4).makeScale(-1, 1, 1)), e.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, fa.add(e), (e = ya.getObjectByName("trussVert").clone()).name = "trussVertR2", e.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, fa.add(e), (e = ya.getObjectByName("trussVert").clone()).name = "trussVertL1", e.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, fa.add(e), (e = ya.getObjectByName("trussVert").clone()).name = "trussVertL2", e.applyMatrix((new THREE.Matrix4).makeScale(-1, 1, 1)), e.visible = !da.hasOwnProperty("frameConstruction") || "I-beams" != da.frameConstruction, fa.add(e), (d = ya.getObjectByName("beamRoof").clone()).name = "beamRoofR", d.applyMatrix((new THREE.Matrix4).makeScale(-1, 1, 1)), d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, fa.add(d), (d = ya.getObjectByName("beamRoof").clone()).name = "beamRoofL", d.visible = !0, d.position.y = .05, fa.add(d), fa.traverse(function(e) {
e instanceof THREE.Mesh && "Truss" == e.material.name && e.material.color.copy(Ea)
})
}), (ga = new THREE.Group).name = "SteelTrussFramingParent", ga.visible = !1, na.add(ga), (ua = new THREE.Group).name = "SteelTrussFramingMaster", ga.add(ua), (c = new THREE.LWOLoader).load(D + "objects/Frame-SteelTruss.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, t.frustumCulled = !1, 0 < t.material.length ? t.material.forEach(function(e) {
e.castShadow = !0, e.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0)
}) : (t.material.castShadow = !0, t.material.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0)), ua.add(t)
}), (d = ga.getObjectByName("columnSide").clone()).name = "columnSideR", d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, ua.add(d), (d = ga.getObjectByName("columnSide").clone()).name = "columnSideL", d.visible = !0, d.position.y = .05, ua.add(d);
e = ga.getObjectByName("webbing").clone();
e.name = "webbingVertR1", e.visible = !1, ua.add(e), (e = ga.getObjectByName("webbing").clone()).name = "webbingVertR2", e.visible = !1, ua.add(e), (e = ga.getObjectByName("webbing").clone()).name = "webbingVertL1", e.visible = !1, ua.add(e), (e = ga.getObjectByName("webbing").clone()).name = "webbingVertL2", e.visible = !1, ua.add(e), (e = ga.getObjectByName("webbing").clone()).name = "webbingDiagR1", e.visible = !1, ua.add(e), (e = ga.getObjectByName("webbing").clone()).name = "webbingDiagR2", e.visible = !1, ua.add(e), (e = ga.getObjectByName("webbing").clone()).name = "webbingDiagL1", e.visible = !1, ua.add(e), (e = ga.getObjectByName("webbing").clone()).name = "webbingDiagL2", e.visible = !1, ua.add(e), (d = ga.getObjectByName("beamRoof").clone()).name = "beamRoofR", d.visible = !0, d.rotation.y = THREE.Math.degToRad(180), d.position.y = .05, ua.add(d), (d = ga.getObjectByName("beamRoof").clone()).name = "beamRoofL", d.visible = !0, d.position.y = .05, ua.add(d), (d = ga.getObjectByName("truss")).visible = !0, ua.traverse(function(e) {
e instanceof THREE.Mesh && "Truss" == e.material.name && e.material.color.copy(Ea)
})
}), r = new THREE.BoxGeometry(.125, 1, 1), s = new THREE.MeshPhongMaterial({
color: Ea,
name: "framing",
specular: 3947580,
shininess: 40
}), new THREE.Mesh(r, s)),
y = (b.visible = !1, b.castShadow = !0, b.receiveShadow = !1, b.name = "masterSecondaryFramingPiece", ra.add(b), (r = new THREE.BoxGeometry(.2, .085, 1)).translate(-.1, 0, 0), s = new THREE.MeshPhongMaterial({
color: 12026452,
name: "mezzanineWood",
specular: 5394505,
shininess: 15
}), new THREE.Mesh(r, s)),
f = (y.visible = !1, y.name = "MezzanineWood", ra.add(y), (r = new THREE.BoxGeometry(.2, .085, 1)).translate(-.1, 0, 0), s = new THREE.MeshPhongMaterial({
color: 7895160,
name: "mezzanineFrame",
specular: 5394505,
shininess: 15
}), new THREE.Mesh(r, s));
f.visible = !1, f.name = "Mezzanine", ra.add(f), r = new THREE.PlaneGeometry(1, 1, 1), s = new THREE.MeshBasicMaterial({
color: 65535
}), R ? s.wireframe = !0 : (s.transparent = !0, s.opacity = 0), (le = new THREE.Mesh(r, s)).position.y = .05, le.rotation.x = THREE.Math.degToRad(-90), ia.add(le), (he = new THREE.Group).name = "interiorNull", ia.add(he), c.load(D + "objects/interiorObjects.lwo", function(e) {
e.meshes.forEach(function(e) {
e.visible = !1, e.frustumCulled = !1, e.userData.fileType = "lwo", ra.add(e)
}), (Y = ia.getObjectByName("interiorWall").clone()).visible = da.divisionWall, Y.name = "dividingWall";
var e = D + "images/building/building-normal.jpg",
t = (new THREE.TextureLoader).load(e),
e = (t.anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), t.wrapS = THREE.RepeatWrapping, t.wrapT = THREE.RepeatWrapping, D + "images/building/OSB.jpg"),
a = (new THREE.TextureLoader).load(e);
a.anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), a.wrapS = THREE.RepeatWrapping, a.wrapT = THREE.RepeatWrapping;
for (let e = 0; e < Y.material.length; e++) "interiorWallUpper" === Y.material[e].name && (Y.material[e].normalMap = t, Y.userData.metalTexture = t, Y.userData.topMaterial = Y.material[e]), "interiorWallLower" === Y.material[e].name && (Y.material[e].map = a, Y.userData.woodTexture = a, Y.userData.bottomMaterial = Y.material[e]);
na.add(Y)
}), (c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/Building.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, t.frustumCulled = !1, t.castShadow = !0, t.receiveShadow = !0, 0 < t.material.length ? t.material.forEach(function(e) {
e.castShadow = !0, e.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (e.morphTargets = !0)
}) : (t.material.castShadow = !0, t.material.receiveShadow = !0, t.hasOwnProperty("morphTargetInfluences") && (t.material.morphTargets = !0)), "roofR" == t.name && ((sa = t).visible = !0, (la = t.GdeepCloneMaterials()).name = "roofL", la.visible = !0, la.rotation.y = Math.PI, la.material.side = THREE.DoubleSide, la.castShadow = !0, la.receiveShadow = !0, la.frustumCulled = !1, na.add(la)), "building" == t.name && ((_ = t).castShadow = !0, _.receiveShadow = !0, _.visible = !0), t.name.startsWith("Logo") && t.material.forEach(function(e) {
var t;
"Logo" == e.name && (t = (c = new THREE.TextureLoader).load("images/logo-square.jpg"), e.map = t, e.needsUpdate = !0)
}), na.add(t)
})
}), (c = new THREE.LWOLoader).setResourcePath(D + "images/"), c.load(D + "objects/" + J.object, function(e) {
e.meshes.forEach(function(t) {
t.visible = !0, t.castShadow = !1, t.receiveShadow = !0, t.frustumCulled = !1, 0 < t.material.length ? t.material.forEach(function(e) {
void 0 !== t.morphTargetDictionary && (e.morphTargets = !0), "MeshStandardMaterial" == e.type && null !== e.roughnessMap && (e.roughness = 1)
}) : (void 0 !== t.morphTargetDictionary && (t.material.morphTargets = !0), "MeshStandardMaterial" == t.material.type && null !== t.material.roughnessMap && (t.material.roughness = 1)), na.add(t)
})
}), (c = new THREE.LWOLoader).load(D + "objects/dimensions.lwo", function(e) {
e.meshes.forEach(function(t) {
t.visible = !1, t.castShadow = !1, t.receiveShadow = !1, t.frustumCulled = !1, 0 < t.material.length ? t.material.forEach(function(e) {
void 0 !== t.morphTargetDictionary && (e.morphTargets = !0), "MeshStandardMaterial" == e.type && null !== e.roughnessMap && (e.roughness = 1)
}) : (void 0 !== t.morphTargetDictionary && (t.material.morphTargets = !0), "MeshStandardMaterial" == t.material.type && null !== t.material.roughnessMap && (t.material.roughness = 1), t.material.color.setHex(0), t.material.emissive.setHex(0)), ra.add(t)
})
}), Ye = new THREE.Plane(new THREE.Vector3(-1, 0, 0), 0), Ze = new THREE.Plane(new THREE.Vector3(1, 0, 0), 0), Je = new THREE.Plane(new THREE.Vector3(-1, 0, 0), 0), Ke = new THREE.Plane(new THREE.Vector3(1, 0, 0), 0), et = new THREE.Plane(new THREE.Vector3(1, 0, 0), 0), tt = new THREE.Plane(new THREE.Vector3(-1, 0, 0), 0), at = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0), ot = new THREE.Plane(new THREE.Vector3(0, 0, -1), 0), it = new THREE.Plane(new THREE.Vector3(0, 0, -1), 0), Qe = [Ye, Ze, Je, Ke], Xe = [at, ot], R && (p = new THREE.PlaneHelper(Ye, 35, 16776960), na.add(p)), R && (m = new THREE.PlaneHelper(Ze, 35, 65535), na.add(m)), R && (e = new THREE.PlaneHelper(Je, 35, 15921664), na.add(e)), R && (g = new THREE.PlaneHelper(Ke, 35, 62194), na.add(g)), R && (T = new THREE.PlaneHelper(et, 35, 15921664), ia.add(T)), R && (b = new THREE.PlaneHelper(tt, 35, 62194), ia.add(b)), R && (y = new THREE.PlaneHelper(at, 35, 15921664), na.add(y)), R && (f = new THREE.PlaneHelper(ot, 35, 62194), na.add(f)), R && (p = new THREE.PlaneHelper(it, 35, 62194), na.add(p)), R && ((Dt = new Stats).domElement.style.position = "absolute", Dt.domElement.style.bottom = "0px", Dt.domElement.style.zIndex = 100, document.getElementById("builder").appendChild(Dt.domElement), console.log(ia), console.log(da))
}
function ka() {
if (Z && !1 !== Nt)
for (var e in Nt) Nt.hasOwnProperty(e) && l(Nt[e].name.replace("-clone", ""), Nt[e]);
if (Z && !1 !== Lt)
for (var t in Lt) Lt.hasOwnProperty(t) && s(Lt[t].name.replace("scale-", "").replace("-clone", ""), Lt[t]);
if (Z && !1 !== Ht && 0 < Ht.length && Ht.forEach(function(e) {
var t = e.name.replace("-clone", ""),
a = t.replace("porch", "").replace("Wrap", "").replace("Hip", "").replace("GableExtension", ""),
o = t.replace(a, "");
_a(da[t], a, o, e)
}), Z && !1 !== Ct)
for (var a in Ct) Ct.hasOwnProperty(a) && oo(Ct[a].name.replace("-clone", ""), Ct[a]);
var o, i, n = !1;
for (o in Pt) n = !!Pt.hasOwnProperty(o);
if (n)
for (var r in Pt) Pt.hasOwnProperty(r) && (i = (r = Pt[r].split(","))[0], r.shift(), l(i, r));
Z = !1, ve = T, T = null, Io(), ia.traverse(function(e) {
e.userData.hasOwnProperty("hasBoundingBox") && e.userData.hasBoundingBox && Go(e)
})
}
function Ga() {
_o(), requestAnimationFrame(Ga), G && (W.render(ia, M), G = !1), R && Dt.update(), TWEEN.update(), P.update(), H.update(), Po()
}
function $a() {
var e = ia.getObjectByName("foundation"),
t = 0,
a = 0,
o = 0,
i = 0;
da.leanTo2 && (t = da.leanTo2Depth), da.leanTo4 && (a = da.leanTo4Depth), da.leanTo1 && (o = da.leanTo1Depth), da.leanTo3 && (i = da.leanTo3Depth), da.hasOwnProperty("coveredGableExtensionE") && da.coveredGableExtensionE && da.coveredGableExtensionEEnclosed && (t = Math.max(t, da.coveredGableExtensionEDepth)), da.hasOwnProperty("coveredGableExtensionW") && da.coveredGableExtensionW && da.coveredGableExtensionWEnclosed && (a = Math.max(a, da.coveredGableExtensionWDepth)), da.hasOwnProperty("coveredGableExtensionN") && da.coveredGableExtensionN && da.coveredGableExtensionNEnclosed && (o = Math.max(o, da.coveredGableExtensionNDepth)), da.hasOwnProperty("coveredGableExtensionS") && da.coveredGableExtensionS && da.coveredGableExtensionSEnclosed && (i = Math.max(i, da.coveredGableExtensionSDepth)), e.scale.x = da.width + t + a + 8 / 12, e.scale.z = da.depth + o + i + 8 / 12, e.position.x = (a - t) / 2, e.position.z = (o - i) / 2, e.material.map.repeat.set((da.width + 8 / 12) / 10, (da.depth + 8 / 12) / 10), e.material.map.offset.x = (da.width + 8 / 12) / -20 + .5, e.material.map.offset.y = (da.depth + 8 / 12) / -20 + .5, void 0 !== le && (le.scale.x = e.scale.x - 1, le.scale.y = e.scale.z - 1, le.position.x = e.position.x, le.position.z = e.position.z), H.target.set(ia.getObjectByName("foundation").position.x, 0, ia.getObjectByName("foundation").position.z), E.position.set(ia.getObjectByName("foundation").position.x, 50, ia.getObjectByName("foundation").position.z), St && (a = da.buildingWithPorchesDimensions(), void 0 !== ia.getObjectByName("North") && a.northEdge && (ia.getObjectByName("North").position.z = a.northEdge + 10), void 0 !== ia.getObjectByName("East") && a.eastEdge && (ia.getObjectByName("East").position.x = a.eastEdge - 10), void 0 !== ia.getObjectByName("South") && a.southEdge && (ia.getObjectByName("South").position.z = a.southEdge - 10), void 0 !== ia.getObjectByName("West")) && a.westEdge && (ia.getObjectByName("West").position.x = a.westEdge + 10)
}
function x() {
let o;
if (da.hasOwnProperty("size") && (C = da.size.split("x"), da.width = parseInt(C[0].replace("'", "")), da.depth = parseInt(C[1].replace("'", ""))), da.hasOwnProperty("frameConstruction") && ("Weld Up" == da.frameConstruction && (da.settings.ridgidFrameStraightColumns = !0), "Bolt Up" == da.frameConstruction && (da.settings.ridgidFrameStraightColumns = !1), C = ma.getObjectByName("columnSideR"), e = ma.getObjectByName("columnSideL"), da.settings.ridgidFrameStraightColumns ? (C.morphTargetInfluences[C.morphTargetDictionary.unTaper] = 1, e.morphTargetInfluences[e.morphTargetDictionary.unTaper] = 1) : (C.morphTargetInfluences[C.morphTargetDictionary.unTaper] = 0, e.morphTargetInfluences[e.morphTargetDictionary.unTaper] = 0)), da.hasOwnProperty("location")) {
switch (da.location) {
case "Saskatchewan":
da.flushGirts = !1, da.flushPurlins = !1, da.girtSpacing = 2, da.purlinSpacing = 2;
break;
case "Manitoba":
da.flushGirts = !0, da.flushPurlins = !0, da.girtSpacing = 4, da.purlinSpacing = 2
}
ee !== da.location && (ee = da.location, F.forEach(function(e) {}))
}
da.secondaryMembers;
switch (da.secondaryMembers) {
case "Insulated Panels":
Ea = At;
break;
case "Red Iron":
Ea = Qt;
break;
case "Metal":
case "Steel":
Ea = Ut;
break;
default:
Ea = At
}
if (ma.traverse(function(e) {
e instanceof THREE.Mesh && "Truss" == e.material.name && e.material.color.copy(Ea)
}), ra.getObjectByName("masterSecondaryFramingPiece").material.color.copy(Ea), da.roofType, k.__folders.hasOwnProperty("Interior"))
for (let e = 0; e < k.__folders.Interior.__controllers.length; e++) {
var t = k.__folders.Interior.__controllers[e];
"divisionAmount" === t.property && (t.max(da.depth), da.divisionAmount > da.depth - 8 && (da.divisionAmount = da.depth - 8), t.updateDisplay())
}
if ("Asymmetrical" === da.roofType && k.__folders.hasOwnProperty("Building Dimensions"))
for (let e = 0; e < k.__folders["Building Dimensions"].__controllers.length; e++) {
var a = k.__folders["Building Dimensions"].__controllers[e];
"asymmetrical" === a.property && (a.domElement.parentElement.parentElement.hidden = !1, a.min(da.width / -2 + 3), a.max(da.width / 2 - 3), da.asymmetrical < da.width / -2 + 3 && (da.asymmetrical = da.width / -2 + 3), da.asymmetrical > da.width / 2 - 3 && (da.asymmetrical = da.width / 2 - 3), a.updateDisplay())
}
da.settings.hasOwnProperty("alternateTrussSpacingOver40FT") && (40 < da.width ? da.maxTrussSpacing = da.settings.alternateTrussSpacingOver40FT.over : da.maxTrussSpacing = da.settings.alternateTrussSpacingOver40FT.under), da.settings.hasOwnProperty("alternatePostSpacingOver40FT") && (40 < da.width ? da.maxPostSpacing = da.settings.alternatePostSpacingOver40FT.over : da.maxPostSpacing = da.settings.alternatePostSpacingOver40FT.under), Ye.constant = da.width / -2, Ze.constant = da.width / -2, at.constant = da.depth / -2, ot.constant = da.depth / -2;
let i, n = 0;
var r = da.eaveLightHeight / 12;
if (void 0 === na.getObjectByName("eaveLightsClones") && void 0 === na.getObjectByName("eaveLightsClones") && ((i = new THREE.Group).name = "eaveLightsClones", na.add(i)), void 0 !== na.getObjectByName("eaveLightsClones")) {
na.remove(na.getObjectByName("eaveLightsClones")), void 0 === na.getObjectByName("eaveLightsClones") && ((i = new THREE.Group).name = "eaveLightsClones", na.add(i));
let t = -.15,
a = -.15;
var s, l, h = .25,
c = da.eaveLightWidth / 12;
if ("Single Slope" === da.roofType && (n = da.width * da.roofPitch / 12, t += da.roofHeightAtX(da.width / -2) - da.height, a += da.roofHeightAtX(da.width / 2) - da.height), da.eaveLightsEast)
for (let e = 0; e <= (da.depth - .5) / c; e++)(o = ra.getObjectByName("eaveLight").clone()).position.set(da.width / -2, da.height + t, da.depth / -2 + c / 2 + e * c + h), o.morphTargetInfluences[o.morphTargetDictionary.height] = r - 1, o.morphTargetInfluences[o.morphTargetDictionary.width] = c - 1, e + 1 > (da.depth - .5) / c && (s = da.depth / 2 - o.position.z - h + c / 2, o.morphTargetInfluences[o.morphTargetDictionary.width] = s - 1, o.position.z += (c - s) / -2), o.name = "eaveLight-clone", o.visible = !0, i.add(o);
if (da.eaveLightsWest)
for (let e = 0; e <= (da.depth - .5) / c; e++)(o = ra.getObjectByName("eaveLight").clone()).position.set(da.width / 2, da.height + a, da.depth / -2 + c / 2 + e * c + h), o.morphTargetInfluences[o.morphTargetDictionary.height] = r - 1, o.morphTargetInfluences[o.morphTargetDictionary.width] = c - 1, e + 1 > (da.depth - .5) / c && (l = da.depth / 2 - o.position.z - h + c / 2, o.morphTargetInfluences[o.morphTargetDictionary.width] = l - 1, o.position.z += (c - l) / -2), o.name = "eaveLight-clone", o.visible = !0, i.add(o)
}
let d;
if (void 0 === na.getObjectByName("eaveLightPanelClones") && void 0 === na.getObjectByName("eaveLightPanelClones") && ((d = new THREE.Group).name = "eaveLightPanelClones", na.add(d)), void 0 !== na.getObjectByName("eaveLightPanelClones")) {
if (na.remove(na.getObjectByName("eaveLightPanelClones")), void 0 === na.getObjectByName("eaveLightPanelClones") && ((d = new THREE.Group).name = "eaveLightPanelClones", na.add(d)), n = .1, "Single Slope" === da.roofType && (n = da.width * da.roofPitch / 12), da.eaveLightPanelsEast)
for (let e = 0; e <= da.depth - 2; e++)(o = ra.getObjectByName("eaveLightPanel").clone()).position.set(da.width / -2, da.height - .25 + Math.max(n, 0), e - (da.depth - 2) / 2), o.rotation.y = THREE.Math.degToRad(90), o.morphTargetInfluences[o.morphTargetDictionary.height] = r - 1, o.name = "eaveLightPanel-clone", o.visible = !0, d.add(o);
if (da.eaveLightPanelsWest)
for (let e = 0; e <= da.depth - 2; e++)(o = ra.getObjectByName("eaveLightPanel").clone()).position.set(da.width / 2, da.height - .25 + Math.max(n, 0), e - (da.depth - 2) / 2), o.rotation.y = THREE.Math.degToRad(-90), o.morphTargetInfluences[o.morphTargetDictionary.height] = r - 1, o.name = "eaveLightPanel-clone", o.visible = !0, d.add(o)
}
if (k.__folders.hasOwnProperty(xt)) {
if (k.__folders[xt].__folders.hasOwnProperty(J.N.name + " " + Ot))
for (let e = 0; e < k.__folders[xt].__folders[J.N.name + " " + Ot].__controllers.length; e++) {
var p = k.__folders[xt].__folders[J.N.name + " " + Ot].__controllers[e];
"leanTo1Drop" === p.property && (p.max(Math.round(da.height - da.leanTo1Pitch / 12 * da.leanTo1Depth - 3)), !Z && da.leanTo1Drop > p.__max && (da.leanTo1Drop = p.__max), da.leanTo1Drop < 0 && (da.leanTo1Drop = 0), da.leanTo1Height = da.height - da.leanTo1Drop, p.updateDisplay()), "leanTo1CutL" === p.property && (p.max(da.width - da.leanTo1CutR - 6), !Z && da.leanTo1CutL > p.__max && (da.leanTo1CutL = p.__max), da.leanTo1CutL < 0 && (da.leanTo1CutL = 0), p.updateDisplay()), "leanTo1CutR" === p.property && (p.max(da.width - da.leanTo1CutL - 6), !Z && da.leanTo1CutR > p.__max && (da.leanTo1CutR = p.__max), da.leanTo1CutR < 0 && (da.leanTo1CutR = 0), p.updateDisplay(), da.leanTo1Length = da.width - da.leanTo1CutL - da.leanTo1CutR), "leanTo1Height" === p.property && (p.max(da.height), !Z && da.leanTo1Height > da.height && (da.leanTo1Height = da.height), p.updateDisplay()), "leanTo1Length" === p.property && (p.max(da.width), !Z && da.leanTo1Length > da.width && (da.leanTo1Length = da.width), p.updateDisplay())
}
if (k.__folders[xt].__folders.hasOwnProperty(J.S.name + " " + Ot))
for (let e = 0; e < k.__folders[xt].__folders[J.S.name + " " + Ot].__controllers.length; e++) {
var m = k.__folders[xt].__folders[J.S.name + " " + Ot].__controllers[e];
"leanTo3Drop" === m.property && (m.max(Math.round(da.height - da.leanTo3Pitch / 12 * da.leanTo3Depth - 3)), !Z && da.leanTo3Drop > m.__max && (da.leanTo3Drop = m.__max), da.leanTo3Drop < 0 && (da.leanTo3Drop = 0), da.leanTo3Height = da.height - da.leanTo3Drop, m.updateDisplay()), "leanTo3CutL" === m.property && (m.max(da.width - da.leanTo3CutR - 6), !Z && da.leanTo3CutL > m.__max && (da.leanTo3CutL = m.__max), da.leanTo3CutL < 0 && (da.leanTo3CutL = 0), m.updateDisplay()), "leanTo3CutR" === m.property && (m.max(da.width - da.leanTo3CutL - 6), !Z && da.leanTo3CutR > m.__max && (da.leanTo3CutR = m.__max), da.leanTo3CutR < 0 && (da.leanTo3CutR = 0), m.updateDisplay(), da.leanTo3Length = da.width - da.leanTo3CutL - da.leanTo3CutR), "leanTo3Height" === m.property && (m.max(da.height), !Z && da.leanTo3Height > da.height && (da.leanTo3Height = da.height), m.updateDisplay()), "leanTo3Length" === m.property && (m.max(da.width), !Z && da.leanTo3Length > da.width && (da.leanTo3Length = da.width), m.updateDisplay())
}
if (k.__folders[xt].__folders.hasOwnProperty(J.E.name + " " + Ot))
for (let e = 0; e < k.__folders[xt].__folders[J.E.name + " " + Ot].__controllers.length; e++) {
var g = k.__folders[xt].__folders[J.E.name + " " + Ot].__controllers[e];
"leanTo2Drop" === g.property && (g.max(Math.round(da.wallHeightL() - da.leanTo2Pitch / 12 * da.leanTo2Depth - 3)), !Z && da.leanTo2Drop > g.__max && (da.leanTo2Drop = g.__max), da.leanTo2Drop < 0 && (da.leanTo2Drop = 0), da.leanTo2Height = da.wallHeightL() - da.leanTo2Drop, g.updateDisplay()), "leanTo2CutL" === g.property && (g.max(da.depth - da.leanTo2CutR - 6), !Z && da.leanTo2CutL > g.__max && (da.leanTo2CutL = g.__max), da.leanTo2CutL < 0 && (da.leanTo2CutL = 0), g.updateDisplay()), "leanTo2CutR" === g.property && (g.max(da.depth - da.leanTo2CutL - 6), !Z && da.leanTo2CutR > g.__max && (da.leanTo2CutR = g.__max), da.leanTo2CutR < 0 && (da.leanTo2CutR = 0), g.updateDisplay(), da.leanTo2Length = da.depth - da.leanTo2CutL - da.leanTo2CutR), "leanTo2Height" === g.property && (g.max(da.wallHeightL()), !Z && da.leanTo2Height > da.wallHeightL() && (da.leanTo2Height = da.wallHeightL()), g.updateDisplay()), "leanTo2Length" === g.property && (g.max(da.depth), !Z && da.leanTo2Length > da.depth && (da.leanTo2Length = da.depth), g.updateDisplay())
}
if (k.__folders[xt].__folders.hasOwnProperty(J.W.name + " " + Ot))
for (let e = 0; e < k.__folders[xt].__folders[J.W.name + " " + Ot].__controllers.length; e++) {
var u = k.__folders[xt].__folders[J.W.name + " " + Ot].__controllers[e];
"leanTo4Drop" === u.property && (u.max(Math.round(da.wallHeightR() - da.leanTo4Pitch / 12 * da.leanTo4Depth - 3)), !Z && da.leanTo4Drop > u.__max && (da.leanTo4Drop = u.__max), da.leanTo4Drop < 0 && (da.leanTo4Drop = 0), da.leanTo4Height = da.wallHeightR() - da.leanTo4Drop, u.updateDisplay()), "leanTo4CutL" === u.property && (u.max(da.depth - da.leanTo4CutR - 6), !Z && da.leanTo4CutL > u.__max && (da.leanTo4CutL = u.__max), da.leanTo4CutL < 0 && (da.leanTo4CutL = 0), u.updateDisplay()), "leanTo4CutR" === u.property && (u.max(da.depth - da.leanTo4CutL - 6), !Z && da.leanTo4CutR > u.__max && (da.leanTo4CutR = u.__max), da.leanTo4CutR < 0 && (da.leanTo4CutR = 0), u.updateDisplay(), da.leanTo4Length = da.depth - da.leanTo4CutL - da.leanTo4CutR), "leanTo4Height" === u.property && (u.max(da.wallHeightR()), !Z && da.leanTo4Height > da.wallHeightR() && (da.leanTo4Height = da.wallHeightR()), u.updateDisplay()), "leanTo4Length" === u.property && (u.max(da.depth), !Z && da.leanTo4Length > da.depth && (da.leanTo4Length = da.depth), u.updateDisplay())
}
}
let T;
if (da.leanTo1 || da.leanTo3 || da.leanTo2 || da.leanTo4) {
if (ia.getObjectByName("leanTo1"))
for (let e = 1; e <= 4; e++)
if (T = "leanTo" + e, ia.getObjectByName(T).visible == da[T] || Z || (1 === e || 3 === e ? da[T + "Length"] = da.width - da[T + "CutL"] - da[T + "CutR"] : da[T + "Length"] = da.depth - da[T + "CutL"] - da[T + "CutR"]), void 0 !== ia.getObjectByName(T)) {
ia.getObjectByName(T).visible = da[T], ia.getObjectByName(T + "Roof").visible = da[T], 0 != da[T] && da[T + "Enclosed"] && "Fully Enclosed" === da[T + "Walls"] || (ia.getObjectByName(T + "BoundingBox").position.set(0, 0, 0), ia.getObjectByName(T + "BoundingBox").scale.set(.1, .1, .1)), 2 !== e && e;
var b = ia.getObjectByName(T);
if (da[T + "Enclosed"] && 0 === da.hideWalls && "Fully Enclosed" == da[T + "Walls"]) b.morphTargetInfluences[b.morphTargetDictionary.unEnclosedHeight] = 0, ia.getObjectByName(T).traverse(function(t) {
if (t instanceof THREE.Mesh)
for (let e = 0; e < t.material.length; e++) "BuildingWalls" !== t.material[e].name.substring(0, 13) && "BuildingWainscot" !== t.material[e].name.substring(0, 16) && "LeantoWalls" !== t.material[e].name.substring(0, 11) && "LeantoWainscot" !== t.material[e].name.substring(0, 14) && "BuildingTrim" !== t.material[e].name.substring(0, 12) || (t.material[e].visible = !0)
});
else if (0 === da.hideWalls && (!da[T + "Enclosed"] || "Fully Enclosed" !== da[T + "Walls"]))
if (da.settings.showLeantoWallTriangleWhenOpen || "Upper Triangles Only" == da[T + "Walls"]) b.morphTargetInfluences[b.morphTargetDictionary.unEnclosedHeight] = (da[T + "Height"] - da[T + "Pitch"] / 12 * da[T + "Depth"] - .5) / 100, ia.getObjectByName(T).traverse(function(t) {
if (t instanceof THREE.Mesh)
for (let e = 0; e < t.material.length; e++) "BuildingWalls" !== t.material[e].name.substring(0, 13) && "BuildingWainscot" !== t.material[e].name.substring(0, 16) && "LeantoWalls" !== t.material[e].name.substring(0, 11) && "LeantoWainscot" !== t.material[e].name.substring(0, 14) && "BuildingTrim" !== t.material[e].name.substring(0, 12) || (t.material[e].visible = !0)
});
else if (da[T + "Walls"].startsWith("Length")) {
let e = da[T + "Walls"].replace(/^(Length )/, "");
"Enclosed" == (e = (e = e.replace(/ft$/, "")).replace(/"$/, "")) ? b.morphTargetInfluences[b.morphTargetDictionary.unEnclosedHeight] = 0: b.morphTargetInfluences[b.morphTargetDictionary.unEnclosedHeight] = (da[T + "Height"] - da[T + "Pitch"] / 12 * da[T + "Depth"] - e) / 100, ia.getObjectByName(T).traverse(function(t) {
if (t instanceof THREE.Mesh)
for (let e = 0; e < t.material.length; e++)(t.material[e].name.startsWith("LeantoWallsWidth") || t.material[e].name.startsWith("LeantoWainscot1") || t.material[e].name.startsWith("LeantoWainscot3") || t.material[e].name.startsWith("LeantoWainscotTrim1") || t.material[e].name.startsWith("LeantoWainscotTrim3") || t.material[e].name.startsWith("BuildingTrim1") || t.material[e].name.startsWith("BuildingTrim3") || t.material[e].name.startsWith("BuildingTrim-Base1") || t.material[e].name.startsWith("BuildingTrim-Base3")) && (t.material[e].visible = !1), (t.material[e].name.startsWith("LeantoWallsDepth") || t.material[e].name.startsWith("LeantoWainscot2") || t.material[e].name.startsWith("LeantoWainscotTrim2") || t.material[e].name.startsWith("BuildingTrim2") || t.material[e].name.startsWith("BuildingTrim-Base2")) && (t.material[e].visible = !0)
})
} else ia.getObjectByName(T).traverse(function(t) {
if (t instanceof THREE.Mesh)
for (let e = 0; e < t.material.length; e++) "BuildingWalls" !== t.material[e].name.substring(0, 13) && "BuildingWainscot" !== t.material[e].name.substring(0, 16) && "LeantoWalls" !== t.material[e].name.substring(0, 11) && "LeantoWainscot" !== t.material[e].name.substring(0, 14) && "BuildingTrim" !== t.material[e].name.substring(0, 12) || (t.material[e].visible = !1)
})
}
} else
for (let e = 0; e < 4; e++) {
var j = (T = "leanTo" + (e + 1)) + "BoundingBox";
void 0 !== ia.getObjectByName(T) && (ia.getObjectByName(T).visible = da[T], ia.getObjectByName(T + "Roof").visible = da[T], ia.getObjectByName(j).position.set(0, 0, 0), ia.getObjectByName(j).scale.set(.1, .1, .1))
}(da.hasOwnProperty("coveredGableExtensionN") || da.hasOwnProperty("coveredGableExtensionS") || da.hasOwnProperty("coveredGableExtensionE") || da.hasOwnProperty("coveredGableExtensionW")) && ei(ia, da, k, Z, J, ba, Ta, re, Ca, Qe, Xe, po);
var y = ia.getObjectByName("building").material;
for (let e = 0; e < y.length; e++) 0 !== da.hideWalls || "BuildingTrim-Corner" !== y[e].name && "BuildingTrim1" !== y[e].name && "BuildingTrim2" !== y[e].name && "BuildingTrim3" !== y[e].name && "BuildingTrim4" !== y[e].name || (y[e].visible = !0), 0 !== da.hideWalls || "BuildingWallsDepthL" !== y[e].name && "BuildingWallsDepthL-Interior" !== y[e].name && "BuildingWallsDepthR" !== y[e].name && "BuildingWallsDepthR-Interior" !== y[e].name || (y[e].visible = !0), 0 !== da.hideWalls || "BuildingWallsDepthL-Interior" !== y[e].name && "BuildingWallsDepthR-Interior" !== y[e].name && "BuildingWallsWidthLeftBack-Interior" !== y[e].name && "BuildingWallsWidthLeftFront-Interior" !== y[e].name && "BuildingWallsWidthRightBack-Interior" !== y[e].name && "BuildingWallsWidthRightFront-Interior" !== y[e].name || (y[e].visible = !0);
var f, w, v = [0, 0, 0, 0, 0];
for (let e = 1; e <= 4; e++) {
var z = ia.getObjectByName("building").morphTargetDictionary["TrimStartHeight" + e];
ia.getObjectByName("building").morphTargetInfluences[z] = (da.height - Math.abs(v[e] - da.height)) / 100
}
da.gutters && da.hideWalls <= 1 ? ia.traverse(function(t) {
if (t instanceof THREE.Mesh && t.material)
if (t.material.length)
for (let e = 0; e < t.material.length; e++) t.material[e].name.startsWith("Gutters") && (t.material[e].visible = !0);
else t.material.name.startsWith("Downspouts") && (t.material.visible = !0)
}) : ia.traverse(function(t) {
if (t instanceof THREE.Mesh && t.material)
if (t.material.length)
for (let e = 0; e < t.material.length; e++) t.material[e].name.startsWith("Gutters") && (t.material[e].visible = !1);
else t.material.name.startsWith("Downspouts") && (t.material.visible = !1)
}), da.boxedOverhangs ? (C = 2 * Math.cos(da.roofPitch / 12), e = 2 * Math.atan(da.roofPitch / 12), la.morphTargetInfluences[la.morphTargetDictionary.boxedOverhangX] = e, la.morphTargetInfluences[la.morphTargetDictionary.boxedOverhangY] = C, "Single Slope" === da.roofType ? sa.morphTargetInfluences[sa.morphTargetDictionary.boxedOverhangX] = -e : sa.morphTargetInfluences[sa.morphTargetDictionary.boxedOverhangX] = e, sa.morphTargetInfluences[sa.morphTargetDictionary.boxedOverhangY] = C) : (la.morphTargetInfluences[la.morphTargetDictionary.boxedOverhangX] = 0, la.morphTargetInfluences[la.morphTargetDictionary.boxedOverhangY] = 0, sa.morphTargetInfluences[sa.morphTargetDictionary.boxedOverhangX] = 0, sa.morphTargetInfluences[sa.morphTargetDictionary.boxedOverhangY] = 0), Xa(), void 0 !== na.getObjectByName("skylightNullR") && na.remove(ia.getObjectByName("skylightNullR")), void 0 !== na.getObjectByName("skylightNullL") && na.remove(ia.getObjectByName("skylightNullL")), (f = new THREE.Group).name = "skylightNullR", f.position.copy(sa.position), f.rotation.z = sa.rotation.z, f.position.z = 0, na.add(f), (w = new THREE.Group).name = "skylightNullL", w.position.copy(la.position), w.rotation.z = la.rotation.z, w.rotation.y = THREE.Math.degToRad(180), w.position.z = 0, na.add(w);
var E, P = ia.getObjectByName("skylight");
if (da.skylights) {
var I = da.depth / (da.skylights / 2);
let t;
da.width < 25 && (da.skylights = 0);
for (let e = 1; e <= da.skylights / 2; e++) o = P.clone(), t = da.depth / -2 + I * (e - .5), o.position.set(2, 0, t), o.name = "skylight-clone", o.morphTargetInfluences[o.morphTargetDictionary.width] = .2, o.morphTargetInfluences[o.morphTargetDictionary.depth] = .002, o.frustumCulled = !1, o.visible = !0, w.add(o);
for (let e = 1; e <= da.skylights / 2; e++) o = P.clone(), t = da.depth / -2 + I * (e - .5), o.position.set(2, 0, -t), o.name = "skylight-clone", o.morphTargetInfluences[o.morphTargetDictionary.width] = .2, o.morphTargetInfluences[o.morphTargetDictionary.depth] = .002, o.frustumCulled = !1, o.visible = !0, f.add(o);
for (let e = 0; e < P.material.length; e++) "Skylight" !== P.material[e].name && "Skylight-Inside" !== P.material[e].name || (P.material[e].normalMap.repeat.set(4, 1), P.material[e].normalMap.offset.x = 4.5)
}
if (0 === da.hideWalls) {
da.showGableTriangleWithOpenGableWall ? (da.enclosedN ? _.morphTargetInfluences[_.morphTargetDictionary.unEnclosedHeight1] = 0 : _.morphTargetInfluences[_.morphTargetDictionary.unEnclosedHeight1] = da.height - .5, da.enclosedS ? _.morphTargetInfluences[_.morphTargetDictionary.unEnclosedHeight3] = 0 : _.morphTargetInfluences[_.morphTargetDictionary.unEnclosedHeight3] = da.height - .5) : (_.morphTargetInfluences[_.morphTargetDictionary.unEnclosedHeight1] = 0, _.morphTargetInfluences[_.morphTargetDictionary.unEnclosedHeight3] = 0);
for (let e = 0; e < _.material.length; e++)((E = _.material[e]).name.startsWith("BuildingWallsWidthLeftFront") || E.name.startsWith("BuildingWallsWidthRightFront") || "BuildingWainscot1" === E.name || "BuildingWainscotTrim1" === E.name || "BuildingTrimN" === E.name || "BuildingTrim-Base1" === E.name) && (da.enclosedN || da.showGableTriangleWithOpenGableWall ? E.visible = !0 : E.visible = !1), (E.name.startsWith("BuildingWallsWidthLeftBack") || E.name.startsWith("BuildingWallsWidthRightBack") || "BuildingWainscot3" === E.name || "BuildingWainscotTrim3" === E.name || "BuildingTrimS" === E.name || "BuildingTrim-Base3" === E.name) && (da.enclosedS || da.showGableTriangleWithOpenGableWall ? E.visible = !0 : E.visible = !1), !E.name.startsWith("BuildingWallsDepthL") && "BuildingWainscot2" !== E.name && "BuildingWainscotTrim2" !== E.name && "BuildingTrimE" !== E.name && "BuildingTrim-Base2" !== E.name || (da.enclosedE ? E.visible = !0 : E.visible = !1), !E.name.startsWith("BuildingWallsDepthR") && "BuildingWainscot4" !== E.name && "BuildingWainscotTrim4" !== E.name && "BuildingTrimW" !== E.name && "BuildingTrim-Base4" !== E.name || (da.enclosedW ? E.visible = !0 : E.visible = !1), !E.name.startsWith("BuildingTrim1") || da.enclosedN || da.enclosedE || (E.visible = !1), !E.name.startsWith("BuildingTrim2") || da.enclosedS || da.enclosedE || (E.visible = !1), !E.name.startsWith("BuildingTrim3") || da.enclosedS || da.enclosedW || (E.visible = !1), !E.name.startsWith("BuildingTrim4") || da.enclosedN || da.enclosedW || (E.visible = !1), !da.hasOwnProperty("baseTrim") || E.name.startsWith("BuildingTrim-Base") && !da.baseTrim && (E.visible = !1)
}
if (k.__folders.hasOwnProperty("Interior")) {
if (da.hasOwnProperty("perimeterWallHeight"))
for (let e = 0; e < k.__folders.Interior.__controllers.length; e++) {
var D = k.__folders.Interior.__controllers[e];
"perimeterWallHeight" === D.property && (D.max(da.height), D.updateDisplay(), da.perimeterWallHeight > da.height) && (da.perimeterWallHeight = da.height, no())
}
if (da.divisionWall)
for (let e = 0; e < k.__folders.Interior.__controllers.length; e++) {
var M = k.__folders.Interior.__controllers[e];
"divisionAmount" !== M.property && "divisionMaterial" !== M.property && "perimeterWalls2" !== M.property && "flooring2" !== M.property && "ceiling2" !== M.property || (M.domElement.parentElement.parentElement.hidden = !1, M.updateDisplay())
} else if (k.__folders.hasOwnProperty("Interior"))
for (let e = 0; e < k.__folders.Interior.__controllers.length; e++) {
var W = k.__folders.Interior.__controllers[e];
"divisionAmount" !== W.property && "divisionMaterial" !== W.property && "perimeterWalls2" !== W.property && "flooring2" !== W.property && "ceiling2" !== W.property || (W.domElement.parentElement.parentElement.hidden = !0, W.updateDisplay())
}
}
if (da.divisionWall && 0 < da.divisionAmount ? Y.visible = !0 : Y.visible = !1, Y.position.z = da.depth / 2 - da.divisionAmount, Y.scale.x = da.width - 1.4, Y.scale.y = da.height - .8, "Steel" == da.divisionMaterial ? (Y.userData.topMaterial.map = null, Y.userData.topMaterial.normalMap = Y.userData.metalTexture, Y.userData.topMaterial.specular.setHex(6250335), Y.userData.topMaterial.shininess = 90, Y.userData.topMaterial.reflectivity = .05, Y.userData.topMaterial.normalMap.repeat.set(12 * (da.width - 1.4) / 9, 1), Y.userData.bottomMaterial.map = null, Y.userData.bottomMaterial.normalMap = Y.userData.metalTexture, Y.userData.bottomMaterial.specular.setHex(6250335), Y.userData.bottomMaterial.shininess = 90, Y.userData.bottomMaterial.reflectivity = .05, Y.userData.bottomMaterial.normalMap.repeat.set(12 * (da.width - 1.4) / 9, 1)) : "Half Wood" == da.divisionMaterial ? (Y.userData.topMaterial.map = null, Y.userData.topMaterial.normalMap = Y.userData.metalTexture, Y.userData.topMaterial.specular.setHex(6250335), Y.userData.topMaterial.shininess = 90, Y.userData.topMaterial.reflectivity = .05, Y.userData.topMaterial.normalMap.repeat.set(12 * (da.width - 1.4) / 9, 1), Y.userData.bottomMaterial.map = Y.userData.woodTexture, Y.userData.bottomMaterial.normalMap = null, Y.userData.bottomMaterial.specular.setHex(2500134), Y.userData.bottomMaterial.shininess = 5.117649, Y.userData.bottomMaterial.reflectivity = 0, Y.userData.bottomMaterial.map.repeat.set((da.width - 1.4) / 2.5, (da.height - .8) / 2.5)) : "Wood" == da.divisionMaterial ? (Y.userData.topMaterial.map = Y.userData.woodTexture, Y.userData.topMaterial.normalMap = null, Y.userData.topMaterial.specular.setHex(2500134), Y.userData.topMaterial.shininess = 5.117649, Y.userData.topMaterial.reflectivity = 0, Y.userData.topMaterial.map.repeat.set((da.width - 1.4) / 2.5, (da.height - .8) / 2.5), Y.userData.bottomMaterial.map = Y.userData.woodTexture, Y.userData.bottomMaterial.normalMap = null, Y.userData.bottomMaterial.specular.setHex(2500134), Y.userData.bottomMaterial.shininess = 5.117649, Y.userData.bottomMaterial.reflectivity = 0, Y.userData.bottomMaterial.map.repeat.set((da.width - 1.4) / 2.5, (da.height - .8) / 2.5)) : "Drywall" == da.divisionMaterial && (Y.userData.topMaterial.map = null, Y.userData.topMaterial.normalMap = null, Y.userData.topMaterial.specular.setHex(14540253), Y.userData.topMaterial.shininess = 6, Y.userData.topMaterial.reflectivity = 0, Y.userData.bottomMaterial.map = null, Y.userData.bottomMaterial.normalMap = null, Y.userData.bottomMaterial.specular.setHex(14540253), Y.userData.bottomMaterial.shininess = 6, Y.userData.bottomMaterial.reflectivity = 0), Y.userData.bottomMaterial.needsUpdate = !0, Y.userData.topMaterial.needsUpdate = !0, "None" == da.flooring ? q.visible = !1 : (q.visible = !0, q.scale.x = da.width, da.divisionWall ? q.scale.y = da.divisionAmount : q.scale.y = da.depth, q.position.z = da.depth / 2, "Ceramic Tile" == da.flooring ? (q.material = lt, q.material.map.repeat.set(q.scale.x / 4, q.scale.y / 4)) : "Wood" == da.flooring ? (q.material = ht, q.material.map.repeat.set(q.scale.x / 4, q.scale.y / 10)) : "Carpet" == da.flooring && (q.material = ct, q.material.map.repeat.set(q.scale.x / 3, q.scale.y / 3))), "None" != da.flooring2 && da.divisionWall ? (A.visible = !0, A.scale.x = da.width, da.divisionWall ? A.scale.y = da.depth - da.divisionAmount : A.scale.y = da.depth, A.position.z = da.depth / -2, "Ceramic Tile" == da.flooring2 ? (A.material = gt, A.material.map.repeat.set(A.scale.x / 4, A.scale.y / 4)) : "Wood" == da.flooring2 ? (A.material = ut, A.material.map.repeat.set(A.scale.x / 4, A.scale.y / 10)) : "Carpet" == da.flooring2 && (A.material = Tt, A.material.map.repeat.set(A.scale.x / 3, A.scale.y / 3))) : A.visible = !1, "None" == da.ceiling || 1 < da.hideWalls ? (V.visible = !1, U.visible = !1) : (V.visible = !0, U.visible = !0, da.divisionWall ? (V.scale.y = da.divisionAmount - .7, U.scale.y = da.divisionAmount - .7) : (V.scale.y = da.depth - 1.4, U.scale.y = da.depth - 1.4), V.position.z = da.depth / 2 - .7, U.position.z = da.depth / 2 - .7, "Post Frame" == da.frameType ? (V.position.y = da.height - 1.1, U.position.y = da.height - 1.1, V.scale.x = da.width / 2 - .7, U.scale.x = da.width / 2 - .7, V.position.x = da.width / -2 + .7, U.position.x = da.width / 2 - .7, V.rotation.y = 0, U.rotation.y = 0) : (V.position.y = da.height - 1.58, U.position.y = da.height - 1.58, V.position.x = da.width / -2 + .7, U.position.x = da.width / 2 - .7, V.rotation.y = Math.atan2(da.roofPitch, 12), U.rotation.y = Math.atan2(-da.roofPitch, 12), V.scale.x = -V.position.x / Math.cos(V.rotation.y), U.scale.x = U.position.x / Math.cos(U.rotation.y)), "Steel" == da.ceiling ? (V.material = rt, V.material.normalMap.repeat.set(12 * V.scale.x / 9, 1), U.material = rt, U.material.normalMap.repeat.set(12 * U.scale.x / 9, 1)) : "Wood" == da.ceiling ? (V.material = st, V.material.map.repeat.set(V.scale.x / 4, V.scale.y / 4), U.material = mt, U.material.map.repeat.set(U.scale.x / 4, U.scale.y / 4)) : "2x2 Tile" == da.ceiling && (V.material = nt, V.material.map.repeat.set(V.scale.x / 2, V.scale.y / 2), U.material = nt, U.material.map.repeat.set(U.scale.x / 2, U.scale.y / 2))), "None" == da.ceiling2 || !da.divisionWall || 1 < da.hideWalls ? (Q.visible = !1, X.visible = !1) : (Q.visible = !0, X.visible = !0, da.divisionWall ? (Q.scale.y = da.depth - da.divisionAmount - .7, X.scale.y = da.depth - da.divisionAmount - .7) : (Q.scale.y = da.depth - 1.4, X.scale.y = da.depth - 1.4), Q.position.z = da.depth / -2 + .7, X.position.z = da.depth / -2 + .7, "Post Frame" == da.frameType ? (Q.position.y = da.height - 1.1, X.position.y = da.height - 1.1, Q.scale.x = da.width / 2 - .7, X.scale.x = da.width / 2 - .7, Q.position.x = da.width / -2 + .7, X.position.x = da.width / 2 - .7, Q.rotation.y = 0, X.rotation.y = 0) : (Q.position.y = da.height - 1.58, X.position.y = da.height - 1.58, Q.position.x = da.width / -2 + .7, X.position.x = da.width / 2 - .7, Q.rotation.y = Math.atan2(da.roofPitch, 12), X.rotation.y = Math.atan2(-da.roofPitch, 12), Q.scale.x = -Q.position.x / Math.cos(Q.rotation.y), X.scale.x = X.position.x / Math.cos(X.rotation.y)), "Steel" == da.ceiling2 ? (Q.material = pt, Q.material.normalMap.repeat.set(12 * Q.scale.x / 9, 1), X.material = pt, X.material.normalMap.repeat.set(12 * X.scale.x / 9, 1)) : "2x2 Tile" == da.ceiling2 && (Q.material = dt, Q.material.map.repeat.set(Q.scale.x / 2, Q.scale.y / 2), X.material = dt, X.material.map.repeat.set(X.scale.x / 2, X.scale.y / 2))), _a(da.porchN, "N", "porch"), _a(da.porchS, "S", "porch"), _a(da.porchE, "E", "porch"), _a(da.porchW, "W", "porch"), _a(da.porchWrapNW, "NW", "porchWrap"), _a(da.porchWrapNE, "NE", "porchWrap"), _a(da.porchWrapSW, "SW", "porchWrap"), _a(da.porchWrapSE, "SE", "porchWrap"), _a(da.porchWrapHipNW, "NW", "porchWrapHip"), _a(da.porchWrapHipNE, "NE", "porchWrapHip"), _a(da.porchWrapHipSW, "SW", "porchWrapHip"), _a(da.porchWrapHipSE, "SE", "porchWrapHip"), Xa(), qo(), ca.sort(function(e, t) {
return e - t
}), ca.reverse(), k.__folders.hasOwnProperty("Interior")) {
for (let e = 0; e < k.__folders.Interior.__controllers.length; e++) {
var x = k.__folders.Interior.__controllers[e];
"mezzanineStartingBay" === x.property && (x.max(ca.length - 1), da.mezzanineStartingBay > ca.length - 1 && (da.mezzanineStartingBay = ca.length - 1), x.updateDisplay()), "mezzanineBays" === x.property && (x.max(ca.length - da.mezzanineStartingBay), da.mezzanineBays > ca.length - da.mezzanineStartingBay && (da.mezzanineBays = ca.length - da.mezzanineStartingBay), x.updateDisplay()), "mezzanineDepth" === x.property && (x.max(da.depth), da.mezzanineDepth > da.depth && (da.mezzanineDepth = da.depth), x.updateDisplay())
}
for (let e = 0; e < k.__folders.Interior.__controllers.length; e++) {
var O = k.__folders.Interior.__controllers[e];
"mezzanineHeight" === O.property && (O.max(da.height), da.mezzanineHeight > da.height && (da.mezzanineHeight = da.height - 1), O.updateDisplay())
}
}
if (void 0 !== na.getObjectByName("mezzanineParent") && na.remove(na.getObjectByName("mezzanineParent")), 0 < da.mezzanineBays || 0 < da.mezzanineDepth) {
var R, B = new THREE.Group,
S = (B.name = "mezzanineParent", na.add(B), "Post Frame" == da.frameType || "Hybrid" == da.frameType ? ia.getObjectByName("Mezzanine").material.color.setHex(12026452) : ia.getObjectByName("Mezzanine").material.color.setHex(7895160), (R = da.useMezzanineDepth ? (da.mezzanineBays = Math.floor(da.mezzanineDepth / ca.spacingBetweenTrusses), -ca[0]) : (da.mezzanineDepth = da.mezzanineBays * ca.spacingBetweenTrusses, -ca[da.mezzanineStartingBay - 1])) + da.mezzanineDepth),
H = (da.mezzanineDepth == da.depth && (S = ca[0]), da.mezzanineDepth),
N = (da.mezzanineDepth == da.depth && (H = -ca[ca.length - 1] + ca[0]), (o = ia.getObjectByName("MezzanineWood").clone()).position.set(0, da.mezzanineHeight, R), o.rotation.y = Math.PI / 2, o.scale.z = da.width - .6, 1 == da.mezzanineStartingBay && (o.scale.z -= .3), da.mezzanineStartingBay + da.mezzanineBays == ca.length && (o.scale.z -= .3), o.scale.x = 5 * H, o.visible = !0, B.add(o), ia.getObjectByName("Mezzanine").clone());
if (N.position.set(0, da.mezzanineHeight - .04, R), N.rotation.y = Math.PI / 2, N.rotation.x = Math.PI / 2, N.scale.set(.25, 2, da.width - .6), N.visible = !0, B.add(N), (o = N.clone()).position.set(0, da.mezzanineHeight - .6, R), o.rotation.y = Math.PI / 2, o.rotation.x = Math.PI / 2, o.scale.set(.25, 2, da.width - .6), o.visible = !0, B.add(o), (o = N.clone()).name = "Mezzanine-Truss-Top", o.position.set(0, da.mezzanineHeight - .04, S), o.rotation.y = Math.PI / 2, o.rotation.x = Math.PI / 2, o.scale.set(.25, 2, da.width - .6), "Post Frame" == da.frameType && (o.scale.x = 3), o.visible = !0, B.add(o), "Post Frame" !== da.frameType && ((o = N.clone()).name = "Mezzanine-Truss-Bottom", o.position.set(0, da.mezzanineHeight - .6, S), o.rotation.x = Math.PI / 2, o.rotation.y = Math.PI / 2, o.scale.set(.25, 2, da.width - .6), o.visible = !0, B.add(o)), da.useMezzanineDepth)
for (let e = 0; e < da.width / 3; e++)(o = ia.getObjectByName("MezzanineWood").clone()).position.set(1.5 * e, da.mezzanineHeight, (R + S) / 2), o.rotation.z = Math.PI / 2, o.scale.z = H, o.scale.x = 3, o.visible = !0, B.add(o), (o = ia.getObjectByName("MezzanineWood").clone()).position.set(-1.5 * e, da.mezzanineHeight, (R + S) / 2), o.rotation.z = Math.PI / 2, o.scale.z = H, o.scale.x = 3, o.visible = !0, B.add(o);
for (let t = da.mezzanineStartingBay - 1; t < da.mezzanineBays + da.mezzanineStartingBay - 1; t++) {
(o = N.clone()).name = "Mezzanine-Truss-Top", o.position.set(0, da.mezzanineHeight - .04, -ca[t + 1]), o.rotation.y = Math.PI / 2, o.rotation.x = Math.PI / 2, o.scale.set(.25, 2, da.width - .6), "Post Frame" == da.frameType && (o.scale.x = 3), o.visible = !0, B.add(o), "Post Frame" !== da.frameType && ((o = N.clone()).name = "Mezzanine-Truss-Bottom", o.position.set(0, da.mezzanineHeight - .6, -ca[t + 1]), o.rotation.x = Math.PI / 2, o.rotation.y = Math.PI / 2, o.scale.set(.25, 2, da.width - .6), o.visible = !0, B.add(o));
for (var L = 0; L < da.width / 3; L++)
if (da.useMezzanineDepth || ((o = ia.getObjectByName("MezzanineWood").clone()).position.set(1.5 * L, da.mezzanineHeight, -ca[t + 1] + (ca[t] - ca[t + 1]) / -2), o.rotation.z = Math.PI / 2, o.rotation.y = 0, o.scale.z = ca[t] - ca[t + 1] - .06, o.scale.x = 3, o.visible = !0, B.add(o), (o = ia.getObjectByName("MezzanineWood").clone()).position.set(-1.5 * L, da.mezzanineHeight, -ca[t + 1] + (ca[t] - ca[t + 1]) / -2), o.rotation.z = Math.PI / 2, o.rotation.y = 0, o.scale.z = ca[t] - ca[t + 1] - .06, o.scale.x = 3, o.visible = !0, B.add(o)), "Post Frame" !== da.frameType) {
let e;
t == da.mezzanineStartingBay - 1 && ((o = N.clone()).material.color.copy(Ea), o.name = "Mezzanine-Webbing-Vertical", o.position.set(1.5 * L + .1, da.mezzanineHeight - .35, -ca[t]), o.scale.set(1, .5, .55), o.rotation.x = Math.PI / 2, o.rotation.y = 0, B.add(o), (o = N.clone()).name = "Mezzanine-Webbing-Vertical", o.position.set(-1.5 * L + .1, da.mezzanineHeight - .35, -ca[t]), o.scale.set(1, .5, .55), o.rotation.x = Math.PI / 2, o.rotation.y = 0, B.add(o), 3 * (L + 1) < da.width) && (e = L % 2 == 0 ? 1 : -1, (o = N.clone()).name = "Mezzanine-Webbing-Diagonal", o.position.set(1.5 * L + .85, da.mezzanineHeight - .35, -ca[t]), o.scale.set(.25, .5, 1.6), o.rotation.x = Math.PI / 2, o.rotation.y = 1.23 * e, B.add(o), e = L % 2 == 0 ? 1 : -1, (o = N.clone()).name = "Mezzanine-Webbing-Diagonal", o.position.set(-1.5 * L + .85, da.mezzanineHeight - .35, -ca[t]), o.scale.set(.25, .5, 1.6), o.rotation.x = Math.PI / 2, o.rotation.y = 1.23 * e, B.add(o)), (o = N.clone()).name = "Mezzanine-Webbing-Vertical", o.position.set(1.5 * L + .1, da.mezzanineHeight - .35, -ca[t + 1]), o.scale.set(1, .5, .55), o.rotation.x = Math.PI / 2, o.rotation.y = 0, B.add(o), (o = N.clone()).name = "Mezzanine-Webbing-Vertical", o.position.set(-1.5 * L + .1, da.mezzanineHeight - .35, -ca[t + 1]), o.scale.set(1, .5, .55), o.rotation.x = Math.PI / 2, o.rotation.y = 0, B.add(o), 3 * (L + 1) < da.width && (e = L % 2 == 0 ? 1 : -1, (o = N.clone()).name = "Mezzanine-Webbing-Diagonal", o.position.set(1.5 * L + .85, da.mezzanineHeight - .35, -ca[t + 1]), o.scale.set(.25, .5, 1.6), o.rotation.x = Math.PI / 2, o.rotation.y = 1.23 * e, B.add(o), e = L % 2 == 0 ? 1 : -1, (o = N.clone()).name = "Mezzanine-Webbing-Diagonal", o.position.set(-1.5 * L + .85, da.mezzanineHeight - .35, -ca[t + 1]), o.scale.set(.25, .5, 1.6), o.rotation.x = Math.PI / 2, o.rotation.y = 1.23 * e, B.add(o))
}
}
var e, C;
let t = da.width - .6,
a = 0;
if (da.hasOwnProperty("mezzanineStairs") && "None" !== da.mezzanineStairs && (t -= 4, da.mezzanineStairs.startsWith("Left") ? a = 2 : da.mezzanineStairs.startsWith("Right") && (a = -2)), "Framed" == da.mezzanineRailing) {
(o = N.clone()).position.set(a, da.mezzanineHeight + 4, S - .15), o.rotation.x = THREE.Math.degToRad(0), o.scale.set(1.5, 1.5, t), o.visible = !0, B.add(o), (o = N.clone()).position.set(a, da.mezzanineHeight + 3, S - .15), o.rotation.x = THREE.Math.degToRad(-90), o.scale.set(1.5, 1.5, t), o.visible = !0, B.add(o), (o = N.clone()).position.set(a, da.mezzanineHeight + 2, S - .15), o.rotation.x = THREE.Math.degToRad(-90), o.scale.set(1.5, 1.5, t), o.visible = !0, B.add(o), (o = N.clone()).position.set(a, da.mezzanineHeight + 1, S - .15), o.rotation.x = THREE.Math.degToRad(-90), o.scale.set(1.5, 1.5, t), o.visible = !0, B.add(o);
for (let e = 0; e < t / 4; e++) o = N.clone(), da.mezzanineStairs.startsWith("Right") ? o.position.set(t / 2 - a - 4 * e, da.mezzanineHeight + 2, S - .15) : o.position.set(a - t / 2 + 4 * e, da.mezzanineHeight + 2, S - .15), o.rotation.y = THREE.Math.degToRad(0), o.rotation.z = THREE.Math.degToRad(-90), o.scale.set(1.5, 1.5, 4), o.visible = !0, B.add(o)
} else "Steel Covered" == da.mezzanineRailing && (e = new THREE.BoxGeometry(1, 1, 1), (newTexture = te.clone()).needsUpdate = !0, (C = new THREE.MeshPhongMaterial({
normalMap: newTexture,
color: 16777215,
specular: 3947580,
shininess: 40,
side: THREE.DoubleSide
})).normalMap = newTexture, (o = new THREE.Mesh(e, C)).position.set(a, da.mezzanineHeight + 2, S - .15), o.scale.set(t, 4, 4 / 12), B.add(o), C.normalMap.repeat.set(12 * t / 9, 1));
if (da.hasOwnProperty("mezzanineStairs") && "Left Straight" == da.mezzanineStairs) {
(o = ia.getObjectByName("Stairs").clone()).position.set(a - da.width / 2 + .6, da.mezzanineHeight, S), o.visible = !0, o.castShadow = !0, o.receiveShadow = !1;
for (let e = 0; e < o.material.length; e++) o.material[e].clippingPlanes = [it], o.material[e].clipIntersection = !0, o.material[e].clipShadows = !0, o.material[e].name.startsWith("StairsMetal") && ("Steel Covered" == da.mezzanineRailing ? o.material[e].visible = !0 : o.material[e].visible = !1);
B.add(o), it.constant = S + da.mezzanineHeight / 7 * 11 + .01, it.normal.set(0, 0, -1)
}
if (da.hasOwnProperty("mezzanineStairs") && "Right Straight" == da.mezzanineStairs) {
(o = ia.getObjectByName("Stairs").clone()).position.set(da.width / 2 + a - .6, da.mezzanineHeight, S), o.visible = !0, o.castShadow = !0, o.receiveShadow = !1;
for (let e = 0; e < o.material.length; e++) o.material[e].clippingPlanes = [it], o.material[e].clipIntersection = !0, o.material[e].clipShadows = !0, o.material[e].name.startsWith("StairsMetal") && ("Steel Covered" == da.mezzanineRailing ? o.material[e].visible = !0 : o.material[e].visible = !1);
B.add(o), it.constant = S + da.mezzanineHeight / 7 * 11 + .01, it.normal.set(0, 0, -1)
}
if (da.hasOwnProperty("mezzanineStairs") && "Left Landing" == da.mezzanineStairs) {
(o = ia.getObjectByName("Stairs-L").clone()).position.set(da.width / -2 + .6, da.mezzanineHeight, S), o.visible = !0, o.castShadow = !0, o.receiveShadow = !1;
for (let e = 0; e < o.material.length; e++) o.material[e].clippingPlanes = [it], o.material[e].clipIntersection = !0, o.material[e].clipShadows = !0, o.material[e].name.startsWith("StairsMetal") && ("Steel Covered" == da.mezzanineRailing ? o.material[e].visible = !0 : o.material[e].visible = !1);
B.add(o), it.constant = da.width / -2 + .6 + 4 + da.mezzanineHeight / 7 * 11 + .01, it.normal.set(-1, 0, 0)
}
if (da.hasOwnProperty("mezzanineStairs") && "Right Landing" == da.mezzanineStairs) {
(o = ia.getObjectByName("Stairs-R").clone()).position.set(da.width / 2 - .6, da.mezzanineHeight, S), o.visible = !0, o.castShadow = !0, o.receiveShadow = !1;
for (let e = 0; e < o.material.length; e++) o.material[e].clippingPlanes = [it], o.material[e].clipIntersection = !0, o.material[e].clipShadows = !0, o.material[e].name.startsWith("StairsMetal") && ("Steel Covered" == da.mezzanineRailing ? o.material[e].visible = !0 : o.material[e].visible = !1);
B.add(o), it.constant = da.width / -2 + .6 + 4 + da.mezzanineHeight / 7 * 11 + .01, it.normal.set(1, 0, 0)
}
}
ia.traverse(function(i) {
if ("scale-driveway-clone" === i.name) {
let e = 0,
t = 0,
a = 0,
o = 0;
da.leanTo2 && (e = da.leanTo2Depth), da.leanTo4 && (t = da.leanTo4Depth), da.leanTo1 && (a = da.leanTo1Depth), da.leanTo3 && (o = da.leanTo3Depth), 0 === i.rotation.y ? i.position.z = da.depth / 2 + a : i.rotation.y === Math.PI / -2 ? i.position.x = da.width / -2 - e : i.rotation.y === Math.PI ? i.position.z = da.depth / -2 - o : i.rotation.y === Math.PI / 2 && (i.position.x = da.width / 2 + t)
}
if (i instanceof THREE.Mesh) {
var e = 0;
if ("building" === i.name) {
"Asymmetrical" === da.roofType ? i.morphTargetInfluences[i.morphTargetDictionary.right] = da.asymmetrical / 100 : i.morphTargetInfluences[i.morphTargetDictionary.right] = 0;
var t, a;
for (da.leanTo2 && da.leanTo2Depth, da.leanTo4 && da.leanTo4Depth, da.leanTo1 && da.leanTo1Depth, da.leanTo3 && da.leanTo3Depth, se.scale.set(da.width, da.peakHeight(), da.depth), i.morphTargetInfluences[i.morphTargetDictionary.width] = (da.width - 1) / 100, i.morphTargetInfluences[i.morphTargetDictionary.depth] = (da.depth - 1) / 1e3, i.morphTargetInfluences[i.morphTargetDictionary.height] != (da.height - 1) / 100 && (i.morphTargetInfluences[i.morphTargetDictionary.height] = (da.height - 1) / 100), e = 0; e < i.material.length; e++) "BuildingWallsWidthLeftFront" !== i.material[e].name && "BuildingWallsWidthLeftBack" !== i.material[e].name && "BuildingWallsWidthLeftFront-Interior" !== i.material[e].name && "BuildingWallsWidthLeftBack-Interior" !== i.material[e].name || (a = "Asymmetrical" === da.roofType ? (t = da.width + 2 * da.asymmetrical, da.asymmetrical) : (t = da.width, 0), da.hasOwnProperty("boardAndBattenWoodenBarnSiding") && da.boardAndBattenWoodenBarnSiding && (i.material[e].map.repeat.set(t / 3, 2), i.material[e].map.offset.x = 12 * (t + a) / 9 + .5), i.material[e].normalMap.repeat.set(12 * t / 9, 1), i.material[e].normalMap.offset.x = 12 * (t + a) / 9 + .5), "BuildingWallsWidthRightFront" !== i.material[e].name && "BuildingWallsWidthRightBack" !== i.material[e].name && "BuildingWallsWidthRightFront-Interior" !== i.material[e].name && "BuildingWallsWidthRightBack-Interior" !== i.material[e].name || (a = "Asymmetrical" === da.roofType ? (t = da.width - 2 * da.asymmetrical, da.asymmetrical) : (t = da.width, 0), i.material[e].normalMap.repeat.set(12 * t / 9, 1), i.material[e].normalMap.offset.x = 12 * (t + a) / 9 + .5), "BuildingWallsWidth" !== i.material[e].name && "BuildingWainscot1" !== i.material[e].name && "BuildingWainscot3" !== i.material[e].name || (i.material[e].normalMap.repeat.set(12 * da.width / 9, 1), i.material[e].normalMap.offset.x = 12 * da.width / 9 + .5), "BuildingWallsDepthL" !== i.material[e].name && "BuildingWallsDepthR" !== i.material[e].name && "BuildingWallsDepthL-Interior" !== i.material[e].name && "BuildingWallsDepthR-Interior" !== i.material[e].name && "BuildingWainscot2" !== i.material[e].name && "BuildingWainscot4" !== i.material[e].name || (i.material[e].normalMap.repeat.set(12 * da.depth / 9, 1), i.material[e].normalMap.offset.x = 12 * da.depth / 9 + .5), "BuildingCeilingLeft-Interior" !== i.material[e].name && "BuildingCeilingRight-Interior" !== i.material[e].name || (i.material[e].normalMap.repeat.set(12 * da.depth / 9, 1), i.material[e].normalMap.offset.x = 12 * da.depth / 9 + .5)
}
if ("roofL" === i.name || "roofR" === i.name || "roofEaveL" === i.name || "roofEaveR" === i.name)
for (i.morphTargetInfluences[i.morphTargetDictionary.depth] = (da.depth + da.gableFront + da.gableBack - 1) / 1e3, i.position.z = da.gableFront / 2 - da.gableBack / 2, e = 0; e < i.material.length; e++) "BuildingRoof" !== i.material[e].name && "BuildingSoffit" !== i.material[e].name || (i.material[e].normalMap.repeat.set(12 * (da.depth + da.gableFront + da.gableBack) / 9, 1), i.material[e].normalMap.offset.x = 12 * (da.depth + da.gableFront / 2 - 6 * da.gableBack) / 9 + .5);
if ("leanTo1" === i.name || "leanTo2" === i.name || "leanTo3" === i.name || "leanTo4" === i.name) {
let o = i.name.replace(/\D/g, ""),
e = 0,
t = 0;
"leanTo1" === i.name || "leanTo3" === i.name ? e = da[i.name + "CutL"] / 2 - da[i.name + "CutR"] / 2 : t = da[i.name + "CutL"] / 2 - da[i.name + "CutR"] / 2, "leanTo1" === i.name && (i.position.set(e, 0, da.depth / 2), ia.getObjectByName(i.name + "Roof").position.set(e, 0, da.depth / 2)), "leanTo2" === i.name && (i.position.set(da.width / -2, 0, t), ia.getObjectByName(i.name + "Roof").position.set(da.width / -2, 0, t)), "leanTo3" === i.name && (i.position.set(-e, 0, da.depth / -2), ia.getObjectByName(i.name + "Roof").position.set(-e, 0, da.depth / -2)), "leanTo4" === i.name && (i.position.set(da.width / 2, 0, -t), ia.getObjectByName(i.name + "Roof").position.set(da.width / 2, 0, -t)), "leanTo1" === i.name && da.leanTo1 && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls && ia.getObjectByName("leanTo1BoundingBox").position.set(e, 0, da.depth / 2), "leanTo2" === i.name && da.leanTo2 && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls && ia.getObjectByName("leanTo2BoundingBox").position.set(da.width / -2, 0, t), "leanTo3" === i.name && da.leanTo3 && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls && ia.getObjectByName("leanTo3BoundingBox").position.set(-e, 0, da.depth / -2), "leanTo4" === i.name && da.leanTo4 && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls && ia.getObjectByName("leanTo4BoundingBox").position.set(da.width / 2, 0, -t), !da.settings.allowZeroPitchRoof && da["leanTo" + o + "Pitch"] < .5 && (da["leanTo" + o + "Pitch"] = .5), !da.settings.allowZeroPitchRoof && (.5 < da["leanTo" + o + "Pitch"] || da["leanTo" + o + "Pitch"] < -.5) && (da["leanTo" + o + "Pitch"] = Math.round(da["leanTo" + o + "Pitch"])), (1 == o || 3 == o) && da["leanTo" + o + "Height"] > da.height && (da["leanTo" + o + "Height"] = da.height), da.leanTo2Height > da.wallHeightL() && (da["leanTo" + o + "Height"] = da.wallHeightL()), da.leanTo4Height > da.wallHeightR() && (da["leanTo" + o + "Height"] = da.wallHeightR()), 1 == o || 3 == o ? da["leanTo" + o + "Length"] > da.width && (da["leanTo" + o + "Length"] = da.width) : 2 != o && 4 != o || da["leanTo" + o + "Length"] > da.depth && (da["leanTo" + o + "Length"] = da.depth);
var n = da["leanTo" + o + "Depth"] * da["leanTo" + o + "Pitch"] / 12,
r = Math.atan(da["leanTo" + o + "Depth"] / n),
s = Math.sqrt(Math.pow(n, 2) + Math.pow(da["leanTo" + o + "Depth"], 2)),
l = (i.morphTargetInfluences[i.morphTargetDictionary.roofPeak] = n / 100, ia.getObjectByName("leanTo" + o + "Roof").position.y = da["leanTo" + o + "Height"] + .1, 1 == o && ia.getObjectByName("leanTo" + o + "Roof").rotation.set(-r, Math.PI / -2, Math.PI / -2), 2 == o && ia.getObjectByName("leanTo" + o + "Roof").rotation.set(0, Math.PI, r - Math.PI / 2), 3 == o && ia.getObjectByName("leanTo" + o + "Roof").rotation.set(r - Math.PI, Math.PI / 2, Math.PI / 2), 4 == o && ia.getObjectByName("leanTo" + o + "Roof").rotation.set(0, 0, Math.PI / -2 + r), 2 == o && (ia.getObjectByName("leanTo" + o + "Roof").position.z = t + (da.gableFront - da.gableBack) / 2), 4 == o && (ia.getObjectByName("leanTo" + o + "Roof").position.z = -t + (da.gableFront - da.gableBack) / 2), 2 == o && (ia.getObjectByName("leanTo" + o + "Roof").morphTargetInfluences[ia.getObjectByName("leanTo" + o + "Roof").morphTargetDictionary.width] = (s - .5) / 50, da.settings.leantoRoofOverhangsFollowMainRoof) && (ia.getObjectByName("leanTo" + o + "Roof").morphTargetInfluences[ia.getObjectByName("leanTo" + o + "Roof").morphTargetDictionary.width] += da.eaveL / 50), 4 == o && (ia.getObjectByName("leanTo" + o + "Roof").morphTargetInfluences[ia.getObjectByName("leanTo" + o + "Roof").morphTargetDictionary.width] = (s - .5) / 50, da.settings.leantoRoofOverhangsFollowMainRoof) && (ia.getObjectByName("leanTo" + o + "Roof").morphTargetInfluences[ia.getObjectByName("leanTo" + o + "Roof").morphTargetDictionary.width] += da.eaveR / 50), 2 == o || 4 == o ? (ia.getObjectByName("leanTo" + o + "Roof").morphTargetInfluences[ia.getObjectByName("leanTo" + o + "Roof").morphTargetDictionary.depth] = (da["leanTo" + o + "Length"] - 1) / 1e3, da.settings.leantoRoofOverhangsFollowMainRoof && (ia.getObjectByName("leanTo" + o + "Roof").morphTargetInfluences[ia.getObjectByName("leanTo" + o + "Roof").morphTargetDictionary.depth] += (da.gableFront + da.gableBack) / 1e3)) : (ia.getObjectByName("leanTo" + o + "Roof").morphTargetInfluences[ia.getObjectByName("leanTo" + o + "Roof").morphTargetDictionary.width] = (s - .5) / 50, ia.getObjectByName("leanTo" + o + "Roof").morphTargetInfluences[ia.getObjectByName("leanTo" + o + "Roof").morphTargetDictionary.depth] = (da["leanTo" + o + "Length"] - 1) / 1e3), i.morphTargetInfluences[i.morphTargetDictionary.depth] = (da["leanTo" + o + "Length"] - 1) / 1e3, i.morphTargetInfluences[i.morphTargetDictionary.width] = (da["leanTo" + o + "Depth"] - .5) / 50, i.morphTargetInfluences[i.morphTargetDictionary.height] = (da["leanTo" + o + "Height"] - 1 - n) / 100, "leanTo1" === i.name && da.leanTo1 && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls && ia.getObjectByName("leanTo1BoundingBox").scale.set(da["leanTo" + o + "Length"], da["leanTo" + o + "Height"], da["leanTo" + o + "Depth"]), "leanTo2" === i.name && da.leanTo2 && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls && ia.getObjectByName("leanTo2BoundingBox").scale.set(da["leanTo" + o + "Length"], da["leanTo" + o + "Height"], da["leanTo" + o + "Depth"]), "leanTo3" === i.name && da.leanTo3 && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls && ia.getObjectByName("leanTo3BoundingBox").scale.set(da["leanTo" + o + "Length"], da["leanTo" + o + "Height"], da["leanTo" + o + "Depth"]), "leanTo4" === i.name && da.leanTo4 && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls && ia.getObjectByName("leanTo4BoundingBox").scale.set(da["leanTo" + o + "Length"], da["leanTo" + o + "Height"], da["leanTo" + o + "Depth"]), ia.getObjectByName("leanTo" + o).material);
let a = 0;
for (let e = 0; e < l.length; e++) "LeantoWallsDepth" !== l[e].name && "LeantoWainscot2" !== l[e].name || (a = da["leanTo" + o + "Length"], l[e].normalMap.repeat.set(12 * a / 9, 1), l[e].normalMap.offset.x = a + .5), "LeantoWallsWidth" !== l[e].name && "LeantoWainscot1" !== l[e].name && "LeantoWainscot3" !== l[e].name || (a = da["leanTo" + o + "Depth"], l[e].normalMap.repeat.set(24 * a / 9, 1), l[e].normalMap.offset.x = 24 * a / 9 + .5);
if (da.leanTo2 && da.leanTo2Height == da.wallHeightL() && da.leanTo2Length == da.depth) ia.traverse(function(t) {
if (t instanceof THREE.Mesh && "leanTo2Roof" === t.name)
for (let e = 0; e < t.material.length; e++) "BuildingTrim-RoofPivot" !== t.material[e].name && "BuildingRidgeCap" !== t.material[e].name || (t.material[e].visible = !1);
for (let e = 0; e < la.material.length; e++) "BuildingTrim-RoofEdge" === la.material[e].name && (la.material[e].visible = !1)
});
else
for (let e = 0; e < la.material.length; e++) da.hideWalls <= 1 && "BuildingTrim-RoofEdge" === la.material[e].name && (la.material[e].visible = !0);
if (da.leanTo4 && da.leanTo4Height == da.wallHeightR() && da.leanTo4Length == da.depth) ia.traverse(function(t) {
if (t instanceof THREE.Mesh && "leanTo4Roof" === t.name)
for (let e = 0; e < t.material.length; e++) "BuildingTrim-RoofPivot" !== t.material[e].name && "BuildingRidgeCap" !== t.material[e].name || (t.material[e].visible = !1);
for (let e = 0; e < sa.material.length; e++) "BuildingTrim-RoofEdge" === sa.material[e].name && (sa.material[e].visible = !1)
});
else
for (let e = 0; e < sa.material.length; e++) da.hideWalls <= 1 && "BuildingTrim-RoofEdge" === sa.material[e].name && (sa.material[e].visible = !0);
if (l = ia.getObjectByName("building").material, da["leanTo" + o] && da["leanTo" + o + "Enclosed"] && "Fully Enclosed" == da["leanTo" + o + "Walls"] && ((1 == o || 3 == o) && da["leanTo" + o + "Length"] == da.width || (2 == o || 4 == o) && da["leanTo" + o + "Length"] == da.depth))
if (da["leanTo" + o + "Height"] == da.wallHeightL() && 2 == o || da["leanTo" + o + "Height"] == da.wallHeightR() && 4 == o)
for (let e = 0; e < l.length; e++) 2 != o || "BuildingWallsDepthL" !== l[e].name && "BuildingWallsDepthL-Interior" !== l[e].name || (l[e].visible = !1), 4 != o || "BuildingWallsDepthR" !== l[e].name && "BuildingWallsDepthR-Interior" !== l[e].name || (l[e].visible = !1), l[e].name === "BuildingTrim" + o && (l[e].visible = !1), o - 1 == 0 ? "BuildingTrim4" === l[e].name && (l[e].visible = !1) : l[e].name === "BuildingTrim" + (o - 1) && (l[e].visible = !1);
else {
let e, t, a;
a = 1 == o ? (e = +o + 1, t = +o + 3, da.depth) : 4 == o ? (e = +o - 3, t = +o - 1, da.depth) : (e = +o + 1, t = +o - 1, da.width), v[t] = Math.max(v[t], da["leanTo" + o + "Height"]), da["leanTo" + t] && da["leanTo" + t + "Length"] == a && (v[t] = Math.max(v[t], da["leanTo" + t + "Height"])), v[o] = Math.max(v[o], da["leanTo" + o + "Height"]), da["leanTo" + e] && da["leanTo" + e + "Length"] == a && (v[o] = Math.max(v[o], da["leanTo" + e + "Height"]))
}
}
if ((i.name.startsWith("window") || i.name.startsWith("walkDoor") || i.name.startsWith("garage") || i.name.startsWith("mansard")) && La.includes(i.getObjectByName("itemSelectionBox"))) {
let t = new THREE.Raycaster;
r = new THREE.Vector3, s = new THREE.Vector3, n = (i.getWorldDirection(s), r.copy(i.position).add(s.multiplyScalar(200)), new THREE.Vector3), s = i.getWorldDirection(n).multiply(new THREE.Vector3(-1, 1, -1));
t.set(r, s), setTimeout(function() {
var e = t.intersectObjects(Ca, !0);
0 < e.length && e[0].object.name.endsWith("BoundingBox") ? i.position.copy(e[0].point) : (da[i.name.replace("-clone", "") + "Qty"]--, ia.remove(i)), G = !0
}, 25)
}
}
}), $a(), K(), io(), no(), Va(), Ua(), di(ye), G = !0
}
function _a(r, s, l, h) {
r = r || !1, s = s || !1, l = l || !1, h = h || !1;
let c, d = 0,
p = 0,
m = 0,
g = 0,
u = (da.leanTo2 && da.leanTo2Length == da.depth && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls && (d = da.leanTo2Depth), da.leanTo4 && da.leanTo4Length == da.depth && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls && (p = da.leanTo4Depth), da.leanTo1 && da.leanTo1Length == da.width && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls && (m = da.leanTo1Depth), da.leanTo3 && da.leanTo3Length == da.width && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls && (g = da.leanTo3Depth), 0),
T = 0,
b = 0;
if (r) {
"NW" == s && (u = da.width / 2 + p, T = da.depth / 2 + m), "NE" == s && (u = da.width / -2 - d, T = da.depth / 2 + m, b = Math.PI / -2), "SW" == s && (u = da.width / 2 + p, T = da.depth / -2 - g, b = Math.PI / 2), "SE" == s && (u = da.width / -2 - d, T = da.depth / -2 - g, b = Math.PI), "N" == s && (u = !1, T = da.depth / 2 + m), "S" == s && (u = !1, T = da.depth / -2 - g, b = Math.PI), "E" == s && (u = da.width / -2 - d, T = !1, b = Math.PI / -2), "W" == s && (u = da.width / 2 + p, T = !1, b = Math.PI / 2);
let e = 4;
let t = 10;
let a = 0;
let o = 0;
if (na.getObjectByName(l + s + "-clone")) c = na.getObjectByName(l + s + "-clone"), u && (c.position.x = u), T && (c.position.z = T), c.visible = !0, Aa(l + s + "-clone");
else if (na.getObjectByName(l)) {
if ((c = na.getObjectByName(l).GdeepCloneMaterials()).name = l + s + "-clone", c.visible = !0, c.castShadow = !0, Fo(c), u && (c.position.x = u), T && (c.position.z = T), c.rotation.y = b, na.add(c), c.morphTargetInfluences[c.morphTargetDictionary.porchDepth] = -2, a = (e - 3.5) / 12 * 8, c.morphTargetInfluences[c.morphTargetDictionary.slope] = a, da.height - 1 < 10 && (t = da.height - 1), c.morphTargetInfluences[c.morphTargetDictionary.height] = t - 13.5 - a, da.allowLeanToCeilingHeight ? (c.morphTargetInfluences[c.morphTargetDictionary.ceilingHeight] = da.height - 10 - 1.5, da.allowLeanToCeilingHeight && da.height < 10.5 && (c.morphTargetInfluences[c.morphTargetDictionary.ceilingHeight] = da.height - 10 - 8 * e / 12)) : (o = t - 8 * e / 12 - .25, c.morphTargetInfluences[c.morphTargetDictionary.ceilingHeight] = o - 10 - 4 / 12), c.morphTargetInfluences[c.morphTargetDictionary.Overhang] = 0, !da.settings.woodenPorchPosts)
for (let e = 0; e < c.material.length; e++) "PorchPosts" === c.material[e].name && (c.material[e].visible = !1), "PorchPostsMetal" === c.material[e].name && c.material[e].color.copy(Ea);
if (da.settings.hasOwnProperty("showPorchPostsOnEndwallsOnly") && da.settings.showPorchPostsOnEndwallsOnly) {
if ("E" == s || "W" == s)
for (let e = 0; e < c.material.length; e++) "PorchPosts" !== c.material[e].name && "PorchPostsMetal" !== c.material[e].name || (c.material[e].visible = !1);
"NW" != s && "SE" != s || console.log(c), "NE" != s && "SW" != s || console.log(c)
}
Aa(l + s + "-clone")
}
if ("object" == typeof h) {
var r = h.position.split(","),
r = (c.position.x = parseFloat(r[0]), c.position.z = parseFloat(r[2]), h.rotation.split(",")),
r = (c.rotation.x = parseFloat(r[0]), c.rotation.y = parseFloat(r[1]), c.rotation.z = parseFloat(r[2]), h.scale.split(",")),
y = parseFloat(r[0]),
f = parseFloat(r[1]),
r = parseFloat(r[2]),
w = parseFloat(h.porchDepth);
if (c.userData.porchDepth = w, o = parseFloat(h.ceilingHeight), c.userData.ceilingHeight = o, h.hasOwnProperty("porchPitch") && (e = parseFloat(h.porchPitch), c.userData.porchPitch = e), a = (e - 3.5) / 12 * w, c.morphTargetInfluences[c.morphTargetDictionary.slope] = a, c.morphTargetInfluences[c.morphTargetDictionary.width] = y - 10, "NW" != s && "NE" != s && "SW" != s && "SE" != s || (c.morphTargetInfluences[c.morphTargetDictionary.depth] = r - 10), c.morphTargetInfluences[c.morphTargetDictionary.height] = f - 13.5 - a, c.morphTargetInfluences[c.morphTargetDictionary.porchDepth] = w - 10, da.allowLeanToCeilingHeight ? (c.morphTargetInfluences[c.morphTargetDictionary.ceilingHeight] = da.height - 10 - 1.5, da.allowLeanToCeilingHeight && da.height < 10.5 && (c.morphTargetInfluences[c.morphTargetDictionary.ceilingHeight] = da.height - 10 - w * e / 12)) : c.morphTargetInfluences[c.morphTargetDictionary.ceilingHeight] = o - 10 - 4 / 12, c.morphTargetInfluences[c.morphTargetDictionary.Overhang] = h.porchOverhang / 12, "1" == h.postMiter && (c.morphTargetInfluences[c.morphTargetDictionary.miters] = 1), "1" == h.postWrap)
for (var v = 0; v < c.material.length; v++) "PorchPosts" === c.material[v].name && (c.material[v].color.setStyle(F.filter(e => e.name === da[da.settings.wrappedPorchPostColorMatches]).map(e => e.hex)), c.material[v].specular.setHex(3947580), c.material[v].shininess.value = 40);
if (h.hasOwnProperty("posts")) {
let t = !1;
"1" == h.posts && (t = !0);
for (let e = 0; e < c.material.length; e++) "PorchPosts" !== c.material[e].name && "PorchPostsMetal" !== c.material[e].name || !da.settings.woodenPorchPosts && "PorchPostsMetal" !== c.material[e].name || (c.material[e].visible = t)
}
Aa(l + s + "-clone")
}
c.userData.porchSide = s, c.userData.masterObjectName = l, c.userData.name = c.name, c.userData.position = {
x: c.position.x,
y: c.position.y,
z: c.position.z
}, "N" == s && (c.userData.toBuildingCenter = c.position.x), "S" == s && (c.userData.toBuildingCenter = -c.position.x), "E" == s && (c.userData.toBuildingCenter = -c.position.z), "W" == s && (c.userData.toBuildingCenter = c.position.z), c.userData.rotation = b, c.userData.porchSide = s, c.userData.width = c.morphTargetInfluences[c.morphTargetDictionary.width] + 10, c.userData.height = c.morphTargetInfluences[c.morphTargetDictionary.height] + 13.5, c.userData.porchPitch = e, "NW" != s && "NE" != s && "SW" != s && "SE" != s || (c.userData.depth = c.morphTargetInfluences[c.morphTargetDictionary.depth] + 10), c.userData.postMiter = !!parseInt(c.morphTargetInfluences[c.morphTargetDictionary.miters]);
let i = !1,
n = !0;
for (let e = 0; e < c.material.length; e++) "PorchPosts" === c.material[e].name && 40 == c.material[e].shininess.value && (i = !0), "PorchPostsMetal" === c.material[e].name && (n = c.material[e].visible);
c.userData.postWrap = i, c.userData.posts = n, c.userData.porchPitch = e, c.userData.porchOverhang = c.morphTargetInfluences[c.morphTargetDictionary.Overhang], c.userData.porchDepth = c.morphTargetInfluences[c.morphTargetDictionary.porchDepth] + 10, c.userData.ceilingHeight = c.morphTargetInfluences[c.morphTargetDictionary.ceilingHeight] + 10, c.userData.scale = {
x: c.userData.width,
y: c.userData.height,
z: c.userData.porchDepth
}, qa(c), Go(c)
} else na.getObjectByName(l + s + "-clone") && (na.getObjectByName(l + s + "-clone").visible = !1), Aa(l + s + "-clone", !0)
}
function qa(a) {
a = a || !1;
for (let t = 0; t < a.material.length; t++) {
var o = 12 * (a.morphTargetInfluences[a.morphTargetDictionary.width] + 10) / 9;
let e = 0;
"porchWrapHip" === a.name.substring(0, 12) || "porchWrap" === a.name.substring(0, 9) ? (e = 12 * (a.morphTargetInfluences[a.morphTargetDictionary.depth] + 10) / 9, "BuildingRoofWidth" !== a.material[t].name && "BuildingWallsWidth" !== a.material[t].name || a.material[t].normalMap.repeat.set(o, 1), "BuildingRoofDepth" !== a.material[t].name && "BuildingWallsDepth" !== a.material[t].name || a.material[t].normalMap.repeat.set(e, 1)) : (e = 0, "BuildingRoof" !== a.material[t].name && "BuildingWalls" !== a.material[t].name || a.material[t].normalMap.repeat.set(o, 1))
}
}
function Aa(a, e) {
if (a = a || !1, e = e || !1, void 0 !== na.getObjectByName(a)) {
var o, i = na.getObjectByName(a);
if (!0 === i.visible) {
if (void 0 === i.getObjectByName("porchPosts") ? ((o = new THREE.Group).name = "porchPosts", i.add(o)) : o = i.getObjectByName("porchPosts"), po(o), !1 === e && i.userData.hasOwnProperty("posts") && !0 === i.userData.posts) {
var n = 0,
e = 0,
t = 0,
r = 0,
n = i.morphTargetInfluences[i.morphTargetDictionary.width],
e = i.morphTargetInfluences[i.morphTargetDictionary.depth],
t = i.morphTargetInfluences[i.morphTargetDictionary.porchDepth],
r = i.morphTargetInfluences[i.morphTargetDictionary.ceilingHeight],
s = (e = "porchWrapHip" === a.substring(0, 12) ? (n = n + 10 + 10 + 2 * t, e + 10 + 10 + 2 * t) : "porchWrap" === a.substring(0, 9) ? (n = n + 10 + 10 + +t, e + 10 + 10 + +t) : (n += 10, 0), t += 10, da.maxPorchPostSpacing),
l = Math.floor(n / s) - 1,
h = Math.floor(e / s) - 1,
c = ((da.settings.hasOwnProperty("showPorchMidPostsOnEndwallsOnly") && da.settings.showPorchMidPostsOnEndwallsOnly || da.settings.hasOwnProperty("showPorchPostsOnEndwallsOnly") && da.settings.showPorchPostsOnEndwallsOnly) && ((a.startsWith("porchWrapNW") || a.startsWith("porchWrapHipNW") || a.startsWith("porchWrapSE") || a.startsWith("porchWrapHipSE")) && (console.log("wrap A: " + a), h = 0), (a.startsWith("porchWrapNE") || a.startsWith("porchWrapHipNE") || a.startsWith("porchWrapSW") || a.startsWith("porchWrapHipSW")) && (console.log("wrap: " + a), l = 0), a.startsWith("porchE") || a.startsWith("porchW")) && (l = 0), n / ((l = Math.max(0, l)) + 1)),
d = e / ((h = Math.max(0, h)) + 1);
if ("porchWrap" === a.substring(0, 9) && (o.position.x = t), o.position.z = t - .4, void 0 !== na.getObjectByName("porchPost") && void 0 !== na.getObjectByName("porchPostMetal")) {
let t;
if (da.settings.woodenPorchPosts) t = na.getObjectByName("porchPost");
else {
t = na.getObjectByName("porchPostMetal");
for (let e = 0; e < t.material.length; e++) "PorchPostsMetal" === t.material[e].name && t.material[e].color.copy(Ea)
}
for (let e = 1; e <= l + h; e++) {
var p = t.GdeepCloneMaterials();
p.name = "porchPost-Clone", p.castShadow = !0, p.visible = !0, p.rotation.x = 0, e <= l ? "porchWrap" === a.substring(0, 9) ? p.position.x = e * -c : p.position.x = n / 2 + e * -c : (p.rotation.y = Math.PI / 2, p.position.z = (e - l) * -d), p.morphTargetInfluences[p.morphTargetDictionary.ceilingHeight] = r, p.morphTargetInfluences[p.morphTargetDictionary.miters] = i.morphTargetInfluences[i.morphTargetDictionary.miters];
for (let e = 0; e < i.material.length; e++)
if ("PorchPosts" === i.material[e].name && i.material[e].color.getHex() !== At.getHex() && i.material[e].color.getHex() !== Vt.getHex())
for (let e = 0; e < p.material.length; e++) "PorchPosts" === p.material[e].name && (p.material[e].color.setStyle(F.filter(e => e.name === da[da.settings.wrappedPorchPostColorMatches]).map(e => e.hex)), p.material[e].specular.setHex(3947580), p.material[e].shininess.value = 40);
o.add(p)
}
}
}
da.settings.hasOwnProperty("showPorchPostsOnEndwallsOnly") && da.settings.showPorchPostsOnEndwallsOnly && ((a.startsWith("porchWrapNW") || a.startsWith("porchWrapHipNW") || a.startsWith("porchWrapSE") || a.startsWith("porchWrapHipSE")) && (h = 0), (a.startsWith("porchWrapNE") || a.startsWith("porchWrapHipNE") || a.startsWith("porchWrapSW") || a.startsWith("porchWrapHipSW")) && (l = 0), a.startsWith("porchE") || a.startsWith("porchW"))
}
}
}
function Va() {
var e = da.cupola18in + da.cupola2 + da.cupola3 + da.cupola4 + da.cupolaWindow18in + da.cupolaWindow2 + da.cupolaWindow3 + da.cupolaWindow4;
let a = da.width / 2 * da.roofPitch / 12 + da.height;
ia.traverse(function(e) {
e instanceof THREE.Mesh && e.name.startsWith("weatherVane") && (e.visible = !1, e.parent = ia)
}), "None" !== da.weatherVane && 0 == e && (ia.getObjectByName("weatherVane" + da.weatherVane + "-1").visible = !0, ia.getObjectByName("weatherVane" + da.weatherVane + "-1").position.set(0, a, da.depth / 2 - .25));
let o = 1;
0 < e && "None" !== da.weatherVane && ia.traverse(function(e) {
var t;
e instanceof THREE.Mesh && e.name.startsWith("cupola") && e.visible && (a = e.name.startsWith("cupola3") || e.name.startsWith("cupolaWindow3") ? 4.25 : e.name.startsWith("cupola4") || e.name.startsWith("cupolaWindow4") ? 5.25 : 2.75, (t = ia.getObjectByName("weatherVane" + da.weatherVane + "-" + o)).position.set(0, a, 0), t.visible = !0, t.parent = e, o++)
}), G = !0
}
function Ua() {
var e = da.cupola18in + da.cupola2 + da.cupola3 + da.cupola4 + da.cupolaWindow18in + da.cupolaWindow2 + da.cupolaWindow3 + da.cupolaWindow4,
t = da.roofPitch / 12 * 2 / 100,
a = ia.getObjectByName("roofR").position.x,
o = ia.getObjectByName("roofR").position.y,
i = (da.depth - 3 - 3) / (e - 1),
n = da.depth / 2 - 3,
r = (1 === e && (n = 0), 2 === e && (i = 2 * (n = da.depth / 2 / 2)), da.cupola18in),
s = 0,
l = da.cupolaWindow18in,
h = 0,
c = da.cupola2,
d = 0,
p = da.cupolaWindow2,
m = 0,
g = da.cupola3,
u = 0,
T = da.cupolaWindow3,
b = 0,
y = da.cupola4,
f = da.cupolaWindow4;
1 < da.cupola18in && (r = Math.round(da.cupola18in / 2), s = da.cupola18in - r), 1 < da.cupolaWindow18in && (l = Math.round(da.cupolaWindow18in / 2), h = da.cupolaWindow18in - l), 1 < da.cupola2 && (c = Math.round(da.cupola2 / 2), d = da.cupola2 - c), 1 < da.cupolaWindow2 && (p = Math.round(da.cupolaWindow2 / 2), m = da.cupolaWindow2 - p), 1 < da.cupola3 && (g = Math.round(da.cupola3 / 2), u = da.cupola3 - g), 1 < da.cupolaWindow3 && (T = Math.round(da.cupolaWindow3 / 2), b = da.cupolaWindow3 - T);
for (let e = 1; e <= vt; e++) ia.getObjectByName("cupola18in-" + e) && (ia.getObjectByName("cupola18in-" + e).visible = !1), ia.getObjectByName("cupola2-" + e) && (ia.getObjectByName("cupola2-" + e).visible = !1), ia.getObjectByName("cupola3-" + e) && (ia.getObjectByName("cupola3-" + e).visible = !1), ia.getObjectByName("cupola4-" + e) && (ia.getObjectByName("cupola4-" + e).visible = !1), ia.getObjectByName("cupolaWindow18in-" + e) && (ia.getObjectByName("cupolaWindow18in-" + e).visible = !1), ia.getObjectByName("cupolaWindow2-" + e) && (ia.getObjectByName("cupolaWindow2-" + e).visible = !1), ia.getObjectByName("cupolaWindow3-" + e) && (ia.getObjectByName("cupolaWindow3-" + e).visible = !1), ia.getObjectByName("cupolaWindow4-" + e) && (ia.getObjectByName("cupolaWindow4-" + e).visible = !1), ia.getObjectByName("cupola18in-" + e) && da.cupola18in >= e && (ia.getObjectByName("cupola18in-" + e).visible = !0), ia.getObjectByName("cupola2-" + e) && da.cupola2 >= e && (ia.getObjectByName("cupola2-" + e).visible = !0), ia.getObjectByName("cupola3-" + e) && da.cupola3 >= e && (ia.getObjectByName("cupola3-" + e).visible = !0), ia.getObjectByName("cupola4-" + e) && da.cupola4 >= e && (ia.getObjectByName("cupola4-" + e).visible = !0), ia.getObjectByName("cupolaWindow18in-" + e) && da.cupolaWindow18in >= e && (ia.getObjectByName("cupolaWindow18in-" + e).visible = !0), ia.getObjectByName("cupolaWindow2-" + e) && da.cupolaWindow2 >= e && (ia.getObjectByName("cupolaWindow2-" + e).visible = !0), ia.getObjectByName("cupolaWindow3-" + e) && da.cupolaWindow3 >= e && (ia.getObjectByName("cupolaWindow3-" + e).visible = !0), ia.getObjectByName("cupolaWindow4-" + e) && da.cupolaWindow4 >= e && (ia.getObjectByName("cupolaWindow4-" + e).visible = !0);
let w = 1,
v;
for (let e = 1; e <= r; e++) v = ia.getObjectByName("cupola18in-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = 1; e <= l; e++) v = ia.getObjectByName("cupolaWindow18in-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = 1; e <= c; e++) v = ia.getObjectByName("cupola2-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = 1; e <= p; e++) v = ia.getObjectByName("cupolaWindow2-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = 1; e <= g; e++) v = ia.getObjectByName("cupola3-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = 1; e <= T; e++) v = ia.getObjectByName("cupolaWindow3-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = 1; e <= y; e++) v = ia.getObjectByName("cupola4-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = 1; e <= f; e++) v = ia.getObjectByName("cupolaWindow4-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = T + 1; e <= b + T; e++) v = ia.getObjectByName("cupolaWindow3-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = g + 1; e <= u + g; e++) v = ia.getObjectByName("cupola3-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = p + 1; e <= m + p; e++) v = ia.getObjectByName("cupolaWindow2-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = c + 1; e <= d + c; e++) v = ia.getObjectByName("cupola2-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = l + 1; e <= h + l; e++) v = ia.getObjectByName("cupolaWindow18in-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
for (let e = r + 1; e <= s + r; e++) v = ia.getObjectByName("cupola18in-" + e), 1 < w && (n += -i), v.position.set(a, o, n), v.morphTargetInfluences[v.morphTargetDictionary.cupolaSlope] = t, w++;
Va(), G = !0
}
function K() {
if (da.wainscot1 || da.wainscot2 || da.wainscot3 || da.wainscot4) {
if (k.__folders.hasOwnProperty("Colors"))
for (let e = 0; e < k.__folders.Colors.__controllers.length; e++) {
var t = k.__folders.Colors.__controllers[e];
"wainscotColor" === t.property && (t.domElement.parentElement.parentElement.hidden = !1, t.updateDisplay())
}
} else if (k.__folders.hasOwnProperty("Colors"))
for (let e = 0; e < k.__folders.Colors.__controllers.length; e++) {
var a = k.__folders.Colors.__controllers[e];
"wainscotColor" === a.property && (a.domElement.parentElement.parentElement.hidden = !0, a.updateDisplay())
}
ia.traverse(function(t) {
if (0 === da.hideWalls && t instanceof THREE.Mesh && ("building" === t.name || "leanTo1" === t.name || "leanTo2" === t.name || "leanTo3" === t.name || "leanTo4" === t.name || t.name.startsWith("coveredGableExtension"))) {
t.hasOwnProperty("morphTargetDictionary") && t.morphTargetDictionary.hasOwnProperty("wainscotHeight") && (da.hasOwnProperty("wainscotHeight") ? t.morphTargetInfluences[t.morphTargetDictionary.wainscotHeight] = da.wainscotHeight - 1 : t.morphTargetInfluences[t.morphTargetDictionary.wainscotHeight] = 2.5);
for (let e = 0; e < t.material.length; e++) "BuildingWainscot1" !== t.material[e].name && !t.material[e].name.startsWith("BuildingWainscotTrim1") && ("leanTo1" !== t.name || "LeantoWainscot1" !== t.material[e].name && "LeantoWainscotTrim1" !== t.material[e].name && "LeantoWainscot2" !== t.material[e].name && "LeantoWainscotTrim2" !== t.material[e].name && "LeantoWainscot3" !== t.material[e].name && "LeantoWainscotTrim3" !== t.material[e].name) || (da.wainscot1 && (da.enclosedN && t.material[e].name.startsWith("BuildingWainscot") && (!da.leanTo1 || da.leanTo1 && !da.leanTo1Enclosed) || t.material[e].name.startsWith("LeantoWainscot") && da.leanTo1 && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls) ? t.material[e].visible = !0 : t.material[e].visible = !1), "BuildingWainscot2" !== t.material[e].name && !t.material[e].name.startsWith("BuildingWainscotTrim2") && ("leanTo2" !== t.name || "LeantoWainscot1" !== t.material[e].name && "LeantoWainscotTrim1" !== t.material[e].name && "LeantoWainscot2" !== t.material[e].name && "LeantoWainscotTrim2" !== t.material[e].name && "LeantoWainscot3" !== t.material[e].name && "LeantoWainscotTrim3" !== t.material[e].name) || (da.wainscot2 && (da.enclosedE && t.material[e].name.startsWith("BuildingWainscot") && (!da.leanTo2 || da.leanTo2 && (!da.leanTo2Enclosed || "Fully Enclosed" !== da.leanTo2Walls)) || t.material[e].name.startsWith("LeantoWainscot") && da.leanTo2 && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls) ? t.material[e].visible = !0 : t.material[e].visible = !1), "BuildingWainscot3" !== t.material[e].name && !t.material[e].name.startsWith("BuildingWainscotTrim3") && ("leanTo3" !== t.name || "LeantoWainscot1" !== t.material[e].name && "LeantoWainscotTrim1" !== t.material[e].name && "LeantoWainscot2" !== t.material[e].name && "LeantoWainscotTrim2" !== t.material[e].name && "LeantoWainscot3" !== t.material[e].name && "LeantoWainscotTrim3" !== t.material[e].name) || (da.wainscot3 && (da.enclosedS && t.material[e].name.startsWith("BuildingWainscot") && (!da.leanTo3 || da.leanTo3 && !da.leanTo3Enclosed) || t.material[e].name.startsWith("LeantoWainscot") && da.leanTo3 && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls) ? t.material[e].visible = !0 : t.material[e].visible = !1), "BuildingWainscot4" !== t.material[e].name && !t.material[e].name.startsWith("BuildingWainscotTrim4") && ("leanTo4" !== t.name || "LeantoWainscot1" !== t.material[e].name && "LeantoWainscotTrim1" !== t.material[e].name && "LeantoWainscot2" !== t.material[e].name && "LeantoWainscotTrim2" !== t.material[e].name && "LeantoWainscot3" !== t.material[e].name && "LeantoWainscotTrim3" !== t.material[e].name) || (da.wainscot4 && (da.enclosedW && t.material[e].name.startsWith("BuildingWainscot") && (!da.leanTo4 || da.leanTo4 && (!da.leanTo4Enclosed || "Fully Enclosed" !== da.leanTo4Walls)) || t.material[e].name.startsWith("LeantoWainscot") && da.leanTo4 && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls) ? t.material[e].visible = !0 : t.material[e].visible = !1), "BuildingWainscot1" !== t.material[e].name && "BuildingWainscot2" !== t.material[e].name && "BuildingWainscot3" !== t.material[e].name && "BuildingWainscot4" !== t.material[e].name && "LeantoWainscot1" !== t.material[e].name && "LeantoWainscot2" !== t.material[e].name && "LeantoWainscot3" !== t.material[e].name || (("Stone" === da.wainscotColor || "Brick" === da.wainscotColor) && (da.wainscot1 || da.wainscot2 || da.wainscot3 || da.wainscot4) || (t.morphTargetInfluences[t.morphTargetDictionary.trimWainscot1] = 0, t.morphTargetInfluences[t.morphTargetDictionary.trimWainscot2] = 0, t.morphTargetInfluences[t.morphTargetDictionary.trimWainscot3] = 0, t.morphTargetInfluences[t.morphTargetDictionary.trimWainscot4] = 0), t.geometry.dynamic = !0, t.geometry.hasOwnProperty("normalsNeedUpdate") && (t.geometry.normalsNeedUpdate = !0), t.geometry.hasOwnProperty("tangentsNeedUpdate") && (t.geometry.tangentsNeedUpdate = !0)), da.leanTo1 && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls && da.leanTo1Length === da.depth && !1 === da.wainscot1 && da.wainscot2 && "leanTo1" === t.name && ("LeantoWainscot1" === t.material[e].name || "LeantoWainscotTrim1" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo1 && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls && da.leanTo1Length === da.depth && !1 === da.wainscot1 && da.wainscot4 && "leanTo1" === t.name && ("LeantoWainscot3" === t.material[e].name || "LeantoWainscotTrim3" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo1 && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls && da.leanTo1Length === da.width && da.wainscot1 && !1 === da.wainscot2 && "leanTo1" === t.name && ("LeantoWainscot1" === t.material[e].name || "LeantoWainscotTrim1" === t.material[e].name) && (t.material[e].visible = !1), da.leanTo1 && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls && da.leanTo1Length === da.width && da.wainscot1 && !1 === da.wainscot4 && "leanTo1" === t.name && ("LeantoWainscot3" === t.material[e].name || "LeantoWainscotTrim3" === t.material[e].name) && (t.material[e].visible = !1), da.leanTo2 && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls && da.leanTo2Length === da.depth && !1 === da.wainscot2 && da.wainscot1 && "leanTo2" === t.name && ("LeantoWainscot3" === t.material[e].name || "LeantoWainscotTrim3" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo2 && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls && da.leanTo2Length === da.depth && !1 === da.wainscot2 && da.wainscot3 && "leanTo2" === t.name && ("LeantoWainscot1" === t.material[e].name || "LeantoWainscotTrim1" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo2 && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls && da.leanTo2Length === da.depth && da.wainscot2 && !1 === da.wainscot1 && "leanTo2" === t.name && ("LeantoWainscot3" === t.material[e].name || "LeantoWainscotTrim3" === t.material[e].name) && (t.material[e].visible = !1), da.leanTo2 && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls && da.leanTo2Length === da.depth && da.wainscot2 && !1 === da.wainscot3 && "leanTo2" === t.name && ("LeantoWainscot1" === t.material[e].name || "LeantoWainscotTrim1" === t.material[e].name) && (t.material[e].visible = !1), da.leanTo3 && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls && da.leanTo3Length === da.depth && !1 === da.wainscot3 && da.wainscot2 && "leanTo3" === t.name && ("LeantoWainscot3" === t.material[e].name || "LeantoWainscotTrim3" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo3 && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls && da.leanTo3Length === da.depth && !1 === da.wainscot3 && da.wainscot4 && "leanTo3" === t.name && ("LeantoWainscot1" === t.material[e].name || "LeantoWainscotTrim1" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo3 && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls && da.leanTo3Length === da.width && da.wainscot3 && !1 === da.wainscot2 && "leanTo3" === t.name && ("LeantoWainscot3" === t.material[e].name || "LeantoWainscotTrim3" === t.material[e].name) && (t.material[e].visible = !1), da.leanTo3 && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls && da.leanTo3Length === da.width && da.wainscot3 && !1 === da.wainscot4 && "leanTo3" === t.name && ("LeantoWainscot1" === t.material[e].name || "LeantoWainscotTrim1" === t.material[e].name) && (t.material[e].visible = !1), da.leanTo4 && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls && da.leanTo4Length === da.depth && !1 === da.wainscot4 && da.wainscot1 && "leanTo4" === t.name && ("LeantoWainscot1" === t.material[e].name || "LeantoWainscotTrim1" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo4 && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls && da.leanTo4Length === da.depth && !1 === da.wainscot4 && da.wainscot3 && "leanTo4" === t.name && ("LeantoWainscot3" === t.material[e].name || "LeantoWainscotTrim3" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo4 && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls && da.leanTo4Length === da.depth && da.wainscot4 && !1 === da.wainscot1 && "leanTo4" === t.name && ("LeantoWainscot1" === t.material[e].name || "LeantoWainscotTrim1" === t.material[e].name) && (t.material[e].visible = !1), da.leanTo4 && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls && da.leanTo4Length === da.depth && da.wainscot4 && !1 === da.wainscot3 && "leanTo4" === t.name && ("LeantoWainscot3" === t.material[e].name || "LeantoWainscotTrim3" === t.material[e].name) && (t.material[e].visible = !1), da.leanTo1 && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls && da.wainscot1 && da.leanTo1Length !== da.width && ("BuildingWainscot1" === t.material[e].name || "BuildingWainscotTrim1" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo2 && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls && da.wainscot2 && da.leanTo2Length !== da.depth && ("BuildingWainscot2" === t.material[e].name || "BuildingWainscotTrim2" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo3 && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls && da.wainscot3 && da.leanTo3Length !== da.width && ("BuildingWainscot3" === t.material[e].name || "BuildingWainscotTrim3" === t.material[e].name) && (t.material[e].visible = !0), da.leanTo4 && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls && da.wainscot4 && da.leanTo4Length !== da.depth && ("BuildingWainscot4" === t.material[e].name || "BuildingWainscotTrim4" === t.material[e].name) && (t.material[e].visible = !0)
}
}), G = !0
}
function Qa() {
var e = 0;
if ("Gabled" === da.roofType) {
if (k.__folders.hasOwnProperty("Building Dimensions"))
for (e = 0; e < k.__folders["Building Dimensions"].__controllers.length; e++) {
var t = k.__folders["Building Dimensions"].__controllers[e];
"asymmetrical" === t.property && (t.domElement.parentElement.parentElement.hidden = !0, t.updateDisplay()), "roofPitch" === t.property && (t.min(da.settings.roofPitchMin), da.roofPitch < da.settings.roofPitchMin && (da.roofPitch = da.settings.roofPitchMin), t.updateDisplay())
}
ia.traverse(function(t) {
if (t instanceof THREE.Mesh) {
if ("roofL" === t.name || "roofR" === t.name)
for (let e = 0; e < t.material.length; e++) "BuildingRidgeCap" === t.material[e].name && (t.material[e].visible = !0);
"building" === t.name && (t.morphTargetInfluences[t.morphTargetDictionary.heightRight] = 0, t.morphTargetInfluences[t.morphTargetDictionary.heightLeft] = 0)
}
})
}
if ("Single Slope" === da.roofType) {
if (k.__folders.hasOwnProperty("Building Dimensions"))
for (e = 0; e < k.__folders["Building Dimensions"].__controllers.length; e++) {
var a = k.__folders["Building Dimensions"].__controllers[e];
"asymmetrical" === a.property && (a.domElement.parentElement.parentElement.hidden = !0, a.updateDisplay()), "roofPitch" === a.property && (a.min(-da.settings.roofPitchMax), a.updateDisplay())
}
ia.traverse(function(t) {
if (t instanceof THREE.Mesh && ("roofL" === t.name || "roofR" === t.name))
for (let e = 0; e < t.material.length; e++) "BuildingRidgeCap" === t.material[e].name && (t.material[e].visible = !1)
})
}
if ("Asymmetrical" === da.roofType) {
if (k.__folders.hasOwnProperty("Building Dimensions"))
for (e = 0; e < k.__folders["Building Dimensions"].__controllers.length; e++) {
var o = k.__folders["Building Dimensions"].__controllers[e];
"asymmetrical" === o.property && (o.domElement.parentElement.parentElement.hidden = !1, o.min(da.width / -2 + 3), o.max(da.width / 2 - 3), da.asymmetrical < da.width / -2 + 3 && (da.asymmetrical = da.width / -2 + 3), da.asymmetrical > da.width / 2 - 3 && (da.asymmetrical = da.width / 2 - 3), o.updateDisplay()), "roofPitch" === o.property && (o.min(da.settings.roofPitchMin), da.roofPitch < 3 && (da.roofPitch = 3), o.updateDisplay())
}
ia.traverse(function(t) {
if (t instanceof THREE.Mesh) {
if ("roofL" === t.name || "roofR" === t.name)
for (let e = 0; e < t.material.length; e++) "BuildingRidgeCap" === t.material[e].name && (t.material[e].visible = !0);
"building" === t.name && (t.morphTargetInfluences[t.morphTargetDictionary.heightRight] = 0, t.morphTargetInfluences[t.morphTargetDictionary.heightLeft] = 0)
}
})
}
x()
}
function Xa() {
.5 < da.eavePitchL ? da.eavePitchL = Math.round(da.eavePitchL) : da.eavePitchL = .5, .5 < da.eavePitchR ? da.eavePitchR = Math.round(da.eavePitchR) : da.eavePitchR = .5;
var e, t, a;
da.height;
let o = 0,
i, n, r, s, l, h, c, d, p;
if ("Single Slope" === da.roofType ? (da.width, Math.abs(da.roofPitch), o = da.width * Math.abs(da.roofPitch) / 12, i = Math.atan(da.width / o), n = i, r = -i, da.roofPitch < 0 && (n = -i, r = i), s = Math.sqrt(Math.pow(o, 2) + Math.pow(da.width, 2)), l = s / 2, h = s / 2, da.roofPitch < 0 ? la.rotation.z = Math.PI / -180 * -90 - i : la.rotation.z = Math.PI / 180 * -90 + i, la.position.x = 0, la.position.y = o / 2 + da.height + .1, la.morphTargetInfluences[la.morphTargetDictionary.width] = (s / 2 - .5) / 50 + da.eaveL / 50, da.roofPitch < 0 ? sa.rotation.z = -Math.PI / -180 * -90 + i : sa.rotation.z = -Math.PI / 180 * -90 - i, sa.position.x = 0, sa.position.y = o / 2 + da.height + .1, sa.morphTargetInfluences[sa.morphTargetDictionary.width] = (s / 2 - .5) / 50 + da.eaveR / 50, da.roofPitch < 0 ? (_.morphTargetInfluences[_.morphTargetDictionary.heightLeft] = o / 100, _.morphTargetInfluences[_.morphTargetDictionary.heightRight] = 0) : (_.morphTargetInfluences[_.morphTargetDictionary.heightRight] = o / 100, _.morphTargetInfluences[_.morphTargetDictionary.heightLeft] = 0), _.morphTargetInfluences[_.morphTargetDictionary.roofPeak] = o / 100 / 2) : "Asymmetrical" === da.roofType ? (!da.settings.allowZeroPitchRoof && da.roofPitch < .5 && (da.roofPitch = .5), !da.settings.allowZeroPitchRoof && (.5 < da.roofPitch || da.roofPitch < -.5) && (da.roofPitch = Math.round(da.roofPitch)), c = da.width / 2 + da.asymmetrical, d = da.width / 2 - da.asymmetrical, p = Math.max(c, d), o = p * da.roofPitch / 12, n = Math.atan(c / o), r = Math.atan(d / o), l = Math.sqrt(Math.pow(o, 2) + Math.pow(c, 2)), h = Math.sqrt(Math.pow(o, 2) + Math.pow(d, 2)), ia.traverse(function(e) {
e instanceof THREE.Mesh && ("roofL" === e.name && (e.rotation.z = Math.PI / 180 * -90 + n, e.position.x = da.asymmetrical, e.position.y = o + da.height + .1, e.morphTargetInfluences[e.morphTargetDictionary.width] = (l - .5) / 50 + da.eaveL / 50), "roofR" === e.name && (e.rotation.z = -Math.PI / 180 * 90 + r, e.position.x = da.asymmetrical, e.position.y = o + da.height + .1, e.morphTargetInfluences[e.morphTargetDictionary.width] = (h - .5) / 50 + da.eaveR / 50), "building" === e.name) && (e.morphTargetInfluences[e.morphTargetDictionary.roofPeak] = o / 100)
})) : (!da.settings.allowZeroPitchRoof && da.roofPitch < .5 && (da.roofPitch = .5), !da.settings.allowZeroPitchRoof && (.5 < da.roofPitch || da.roofPitch < -.5) && (da.roofPitch = Math.round(da.roofPitch)), o = da.width / 2 * da.roofPitch / 12, i = Math.atan(da.width / 2 / o), n = i, r = i, s = Math.sqrt(Math.pow(o, 2) + Math.pow(da.width / 2, 2)), l = s, h = s, da.leanTo2 && (da.leanTo2Depth, Math.tan(Math.atan(da.leanTo2Pitch / 12))), da.leanTo4 && (da.leanTo4Depth, Math.tan(Math.atan(da.leanTo4Pitch / 12))), ia.traverse(function(e) {
e instanceof THREE.Mesh && ("roofL" === e.name && (e.rotation.z = Math.PI / 180 * -90 + i, e.position.x = 0, e.position.y = o + da.height + .1, 0 < da.eaveL && (!da.leanTo2 || da.leanTo2 && da.leanTo2Height < da.height) ? e.morphTargetInfluences[e.morphTargetDictionary.width] = (s - .5) / 50 + da.eaveL / 50 : e.morphTargetInfluences[e.morphTargetDictionary.width] = (s - .5) / 50), "roofR" === e.name && (e.rotation.z = -Math.PI / 180 * 90 + i, e.position.x = 0, e.position.y = o + da.height + .1, 0 < da.eaveR && (!da.leanTo4 || da.leanTo4 && da.leanTo4Height < da.height) ? e.morphTargetInfluences[e.morphTargetDictionary.width] = (s - .5) / 50 + da.eaveR / 50 : e.morphTargetInfluences[e.morphTargetDictionary.width] = (s - .5) / 50), "roofEaveL" !== e.name && "roofEaveR" !== e.name || (e.visible = !1), "building" === e.name) && (e.morphTargetInfluences[e.morphTargetDictionary.roofPeak] = o / 100)
})), da.settings.boxedEaves && (u = ia.getObjectByName("boxedEaveL"), T = ia.getObjectByName("boxedEaveR"), 0 < da.eaveL && (u.visible = !0), 0 < da.eaveR && (T.visible = !0), u.position.y = da.wallHeightL(), T.position.y = da.wallHeightR(), u.position.x = da.width / -2, T.position.x = da.width / 2, u.position.z = -da.gableBack / 2 + da.gableFront / 2, T.position.z = -da.gableBack / 2 + da.gableFront / 2, u.morphTargetInfluences[u.morphTargetDictionary.depth] = da.depth + da.gableBack + da.gableFront - 1, T.morphTargetInfluences[T.morphTargetDictionary.depth] = da.depth + da.gableBack + da.gableFront - 1, u.morphTargetInfluences[u.morphTargetDictionary.width] = da.eaveL / Math.hypot(12, da.roofPitch) * 12 - 1.1, T.morphTargetInfluences[T.morphTargetDictionary.width] = da.eaveR / Math.hypot(12, da.roofPitch) * 12 - 1.1, u.morphTargetInfluences[u.morphTargetDictionary.height] = da.eaveL / Math.hypot(12, da.roofPitch) * da.roofPitch - .5, T.morphTargetInfluences[T.morphTargetDictionary.height] = da.eaveR / Math.hypot(12, da.roofPitch) * da.roofPitch - .5, u.morphTargetInfluences[u.morphTargetDictionary.slope] = u.morphTargetInfluences[u.morphTargetDictionary.height] + 1 - .5, T.morphTargetInfluences[T.morphTargetDictionary.slope] = T.morphTargetInfluences[T.morphTargetDictionary.height] + 1 - .5), da.hasOwnProperty("ridgeVents")) {
var m = ia.getObjectByName("RidgeVent");
if (0 == da.ridgeVents)
for (let e = 1; e <= 6; e++) void 0 !== ia.getObjectByName("RidgeVent" + e + "-clone") && (na.getObjectByName("RidgeVent" + e + "-clone").visible = !1);
else {
let t;
for (let e = 1; e <= 6; e++) void 0 === ia.getObjectByName("RidgeVent" + e + "-clone") && ((t = m.clone()).name = "RidgeVent" + e + "-clone", na.add(t)), t = ia.getObjectByName("RidgeVent" + e + "-clone"), e <= da.ridgeVents ? t.visible = !0 : t.visible = !1, t.position.y = ia.getObjectByName("roofR").position.y, t.position.z = da.depth / -2 - da.depth / (2 * da.ridgeVents) + da.depth / (2 * da.ridgeVents) * 2 * e
}
}
let g = "Logo-" + da.logoShape;
"Wall" == da.logoPlacement && (g = "Logo-Round"), ia.getObjectByName(g) && (ue || ((ue = ia.getObjectByName(g)).castShadow = !0, ue.receiveShadow = !0, ue.visible = !0), Te || ((Te = ue.clone()).name += "2", Te.rotation.y = THREE.Math.degToRad(180), na.add(Te)), "Peak" == da.logoPlacement && (e = "Asymmetrical" === da.roofType ? da.asymmetrical : 0, t = "Single Slope" === da.roofType ? da.height + o / 2 - .25 : da.height + o - .25, b = da.depth / 2 + da.gableFront + .1, a = da.depth / 2 + da.gableBack + .1), "Wall" == da.logoPlacement && (e = "Asymmetrical" === da.roofType ? da.asymmetrical : 0, t = "Single Slope" === da.roofType ? da.height + o / 2 - 1.5 : da.height + o - 1.5, b = da.depth / 2 + .1, a = da.depth / 2 + .1), "None" == da.logoPlacement ? (ue.visible = !1, Te.visible = !1) : (ue.position.set(e, t, b), Te.position.set(e, t, -a)));
var u = new THREE.Vector3,
T = new THREE.Vector3,
b = new THREE.Vector3;
u.set(0, 1, 0).applyQuaternion(la.quaternion), T.set(0, -1, 0).applyQuaternion(la.quaternion), b.copy(la.position), Je.setFromNormalAndCoplanarPoint(u, b), et.setFromNormalAndCoplanarPoint(T, b), u = new THREE.Vector3, T = new THREE.Vector3, b = new THREE.Vector3, u.set(0, 1, 0).applyQuaternion(sa.quaternion), T.set(0, -1, 0).applyQuaternion(sa.quaternion), b.copy(sa.position), Ke.setFromNormalAndCoplanarPoint(u, b), tt.setFromNormalAndCoplanarPoint(T, b)
}
function O() {
ia.traverse(function(a) {
if (a instanceof THREE.Mesh && a.material) {
a.name.startsWith("ceiling") && "Steel" == da.ceiling && a.material.color.setStyle(F.filter(e => e.name === da.interiorPanelColor).map(e => e.hex)), "Downspouts" === a.material.name && (da.hasOwnProperty("downspoutColor") ? a.material.color.setStyle(F.filter(e => e.name === da.downspoutColor).map(e => e.hex)) : da.hasOwnProperty("gutterColor") ? a.material.color.setStyle(F.filter(e => e.name === da.gutterColor).map(e => e.hex)) : da.hasOwnProperty("trimCornerColor") ? a.material.color.setStyle(F.filter(e => e.name === da.trimCornerColor).map(e => e.hex)) : da.hasOwnProperty("trimWallColor") ? a.material.color.setStyle(F.filter(e => e.name === da.trimWallColor).map(e => e.hex)) : a.material.color.setStyle(F.filter(e => e.name === da.trimColor).map(e => e.hex)));
for (let t = 0; t < a.material.length; t++) {
if (("BuildingRoof" === a.material[t].name || "BuildingRoofWidth" === a.material[t].name || "BuildingRoofDepth" === a.material[t].name || "CupolaRoof" === a.material[t].name || "BuildingRidgeCap" === a.material[t].name || a.material[t].name.startsWith("Shutters")) && (a.material[t].color.setStyle(F.filter(e => e.name === da.roofColor).map(e => e.hex)), da.hasOwnProperty("shutterColor")) && a.material[t].name.startsWith("Shutters") && a.material[t].color.setStyle(F.filter(e => e.name === da.shutterColor).map(e => e.hex)), a.name.startsWith("garageSlide") || "BuildingWallsWidth" !== a.material[t].name && "BuildingWallsWidthLeftFront" !== a.material[t].name && "BuildingWallsWidthLeftBack" !== a.material[t].name && "BuildingWallsWidthRightFront" !== a.material[t].name && "BuildingWallsWidthRightBack" !== a.material[t].name && "BuildingWallsDepth" !== a.material[t].name && "BuildingWallsDepthL" !== a.material[t].name && "BuildingWallsDepthR" !== a.material[t].name && "BuildingWalls" !== a.material[t].name && "LeantoWallsWidth" !== a.material[t].name && "LeantoWallsDepth" !== a.material[t].name || a.material[t].color.setStyle(F.filter(e => e.name === da.wallColor).map(e => e.hex)), "PorchPosts" === a.material[t].name && a.material[t].color && a.material[t].color.getHex() !== At.getHex() && a.material[t].color.getHex() !== Vt.getHex() && a.material[t].color.setStyle(F.filter(e => e.name === da[da.settings.wrappedPorchPostColorMatches]).map(e => e.hex)), da.hasOwnProperty("baseTrim") && a.material[t].name.startsWith("BuildingTrim-Base") && (da.baseTrim ? a.material[t].visible = !0 : a.material[t].visible = !1), (a.material[t].name.startsWith("BuildingTrim") || "BuildingRidgeCap" === a.material[t].name || "Track" === a.material[t].name) && (a.material[t].color.setStyle(F.filter(e => e.name === da.trimColor).map(e => e.hex)), da.hasOwnProperty("trimWallColor") && (a.material[t].name.startsWith("BuildingTrim-Base") || a.material[t].name.startsWith("BuildingTrim-Corner") || "BuildingTrim1" == a.material[t].name || "BuildingTrim2" == a.material[t].name || "BuildingTrim3" == a.material[t].name || "BuildingTrim4" == a.material[t].name) && a.material[t].color.setStyle(F.filter(e => e.name === da.trimWallColor).map(e => e.hex)), da.hasOwnProperty("doorWindowTrimColor") && a.material[t].name.startsWith("BuildingTrim") && (a.name.startsWith("window") || a.name.startsWith("walkDoor") || a.name.startsWith("garage")) && a.material[t].color.setStyle(F.filter(e => e.name === da.doorWindowTrimColor).map(e => e.hex)), da.hasOwnProperty("doorTrimColor") && a.material[t].name.startsWith("BuildingTrim") && (a.name.startsWith("walkDoor") || a.name.startsWith("garage")) && a.material[t].color.setStyle(F.filter(e => e.name === da.doorTrimColor).map(e => e.hex)), da.hasOwnProperty("walkDoorTrimColor") && a.material[t].name.startsWith("BuildingTrim") && a.name.startsWith("walkDoor") && a.material[t].color.setStyle(F.filter(e => e.name === da.walkDoorTrimColor).map(e => e.hex)), da.hasOwnProperty("garageDoorTrimColor") && a.material[t].name.startsWith("BuildingTrim") && a.name.startsWith("garage") && a.material[t].color.setStyle(F.filter(e => e.name === da.garageDoorTrimColor).map(e => e.hex)), da.hasOwnProperty("windowTrimColor") && a.material[t].name.startsWith("BuildingTrim") && a.name.startsWith("window") && a.material[t].color.setStyle(F.filter(e => e.name === da.windowTrimColor).map(e => e.hex)), da.hasOwnProperty("trimRoofColor") && (a.material[t].name.startsWith("BuildingTrim-RoofPivot") || a.material[t].name.startsWith("BuildingTrim-Gable") || "BuildingRidgeCap" === a.material[t].name || a.material[t].name.startsWith("BuildingTrim-RoofEdge") || a.name.startsWith("cupola") && a.material[t].name.startsWith("BuildingTrim")) && a.material[t].color.setStyle(F.filter(e => e.name === da.trimRoofColor).map(e => e.hex)), ((a.material[t].name.startsWith("BuildingTrim-Base1") && da.wainscot1) || (a.material[t].name.startsWith("BuildingTrim-Base2") && da.wainscot2) || (a.material[t].name.startsWith("BuildingTrim-Base3") && da.wainscot3) || (a.material[t].name.startsWith("BuildingTrim-Base4") && da.wainscot4)) && da.hasOwnProperty("wainscotColor") && a.material[t].color.setStyle(F.filter(e => e.name === da.wainscotColor).map(e => e.hex)), da.hasOwnProperty("trimBaseColor") && a.material[t].name.startsWith("BuildingTrim-Base") && !((a.material[t].name.startsWith("BuildingTrim-Base1") && da.wainscot1) || (a.material[t].name.startsWith("BuildingTrim-Base2") && da.wainscot2) || (a.material[t].name.startsWith("BuildingTrim-Base3") && da.wainscot3) || (a.material[t].name.startsWith("BuildingTrim-Base4") && da.wainscot4)) && a.material[t].color.setStyle(F.filter(e => e.name === da.trimBaseColor).map(e => e.hex)), da.hasOwnProperty("trimGableColor") && (a.material[t].name.startsWith("BuildingTrim-RoofPivot") || a.material[t].name.startsWith("BuildingTrim-Gable") || "BuildingRidgeCap" === a.material[t].name) && a.material[t].color.setStyle(F.filter(e => e.name === da.trimGableColor).map(e => e.hex)), da.hasOwnProperty("trimCornerColor") && (a.material[t].name.startsWith("BuildingTrim-Corner") || "BuildingTrim1" == a.material[t].name || "BuildingTrim2" == a.material[t].name || "BuildingTrim3" == a.material[t].name || "BuildingTrim4" == a.material[t].name) && a.material[t].color.setStyle(F.filter(e => e.name === da.trimCornerColor).map(e => e.hex)), da.hasOwnProperty("trimEaveColor") && a.material[t].name.startsWith("BuildingTrim-RoofEdge") && a.material[t].color.setStyle(F.filter(e => e.name === da.trimEaveColor).map(e => e.hex)), da.hasOwnProperty("trackColor")) && a.material[t].name.startsWith("Track") && a.material[t].color.setStyle(F.filter(e => e.name === da.trackColor).map(e => e.hex)), da.hasOwnProperty("ridgeCapColor") && ("Match Trim" == da.ridgeCapColor && "BuildingRidgeCap" === a.material[t].name && a.material[t].color.setStyle(F.filter(e => e.name === da.trimColor).map(e => e.hex)), "Match Roof" == da.ridgeCapColor) && "BuildingRidgeCap" === a.material[t].name && a.material[t].color.setStyle(F.filter(e => e.name === da.roofColor).map(e => e.hex)), "Gutters" === a.material[t].name && (da.hasOwnProperty("gutterColor") ? a.material[t].color.setStyle(F.filter(e => e.name === da.gutterColor).map(e => e.hex)) : da.hasOwnProperty("downspoutColor") ? a.material[t].color.setStyle(F.filter(e => e.name === da.downspoutColor).map(e => e.hex)) : da.hasOwnProperty("trimRoofColor") ? a.material[t].color.setStyle(F.filter(e => e.name === da.trimRoofColor).map(e => e.hex)) : a.material[t].color.setStyle(F.filter(e => e.name === da.trimColor).map(e => e.hex))), da.hasOwnProperty("walkDoorColor") && a.name.startsWith("walkDoor") && "Door" === a.material[t].name && a.material[t].color.setStyle(F.filter(e => e.name === da.walkDoorColor).map(e => e.hex)), da.hasOwnProperty("largeDoorColor") && a.name.startsWith("garage") && ("Door" === a.material[t].name || "RollUpDoor" === a.material[t].name || "BuildingWalls" === a.material[t].name) && a.material[t].color.setStyle(F.filter(e => e.name === da.largeDoorColor).map(e => e.hex)), da.hasOwnProperty("commercialDoorColor") && a.name.startsWith("garageOverheadFlat") && "Door" === a.material[t].name && a.material[t].color.setStyle(F.filter(e => e.name === da.commercialDoorColor).map(e => e.hex)), da.hasOwnProperty("residentialDoorColor") && a.name.startsWith("garageOverheadPanel") && "Door" === a.material[t].name && a.material[t].color.setStyle(F.filter(e => e.name === da.residentialDoorColor).map(e => e.hex)), (a.name.startsWith("garageSlide") || a.name.startsWith("garageBiFold") || a.name.startsWith("garageHydraulic")) && "BuildingWalls" === a.material[t].name) {
a.material[t].color.setStyle(F.filter(e => e.name === da.wallColor).map(e => e.hex));
let e = 20 * a.morphTargetInfluences[a.morphTargetDictionary.width] + 10;
a.name.startsWith("garageSlide") && (e /= 2), a.material[t].normalMap.repeat.set(12 * e / 9, 1), a.material[t].needsUpdate = !0
}
a.name.startsWith("perimeterWall") && ("Steel" === da.perimeterWalls ? a.material[t].color.setStyle(F.filter(e => e.name === da.interiorPanelColor).map(e => e.hex)) : "Half Wood" === da.perimeterWalls ? ("interiorWallUpper" === a.material[t].name && a.material[t].color.setStyle(F.filter(e => e.name === da.interiorPanelColor).map(e => e.hex)), "interiorWallLower" === a.material[t].name && a.material[t].color.setStyle("#ffffff")) : "Drywall" === da.perimeterWalls ? a.material[t].color.setStyle("#eeeeee") : a.material[t].color.setStyle("#ffffff")), (a.material[t].name.startsWith("BuildingWainscot1") || a.material[t].name.startsWith("BuildingWainscot2") || a.material[t].name.startsWith("BuildingWainscot3") || a.material[t].name.startsWith("BuildingWainscot4") || "BuildingWainscotTrim1" === a.material[t].name || "BuildingWainscotTrim2" === a.material[t].name || "BuildingWainscotTrim3" === a.material[t].name || "BuildingWainscotTrim4" === a.material[t].name || "LeantoWainscot1" === a.material[t].name || "LeantoWainscot2" === a.material[t].name || "LeantoWainscot3" === a.material[t].name || "LeantoWainscotTrim1" === a.material[t].name || "LeantoWainscotTrim2" === a.material[t].name || "LeantoWainscotTrim3" === a.material[t].name) && a.material[t].color.setStyle(F.filter(e => e.name === da.wainscotColor).map(e => e.hex)), (a.material[t].name.startsWith("BuildingWainscot1") || a.material[t].name.startsWith("BuildingWainscot2") || a.material[t].name.startsWith("BuildingWainscot3") || a.material[t].name.startsWith("BuildingWainscot4") || "LeantoWainscot1" === a.material[t].name || "LeantoWainscot2" === a.material[t].name || "LeantoWainscot3" === a.material[t].name) && (("Stone" === da.wainscotColor || "Brick" === da.wainscotColor) && (da.wainscot1 || da.wainscot2 || da.wainscot3 || da.wainscot4) || (a.morphTargetInfluences[a.morphTargetDictionary.trimWainscot1] = 0, a.morphTargetInfluences[a.morphTargetDictionary.trimWainscot2] = 0, a.morphTargetInfluences[a.morphTargetDictionary.trimWainscot3] = 0, a.morphTargetInfluences[a.morphTargetDictionary.trimWainscot4] = 0), a.geometry.dynamic = !0, a.geometry.hasOwnProperty("normalsNeedUpdate") && (a.geometry.normalsNeedUpdate = !0), a.geometry.hasOwnProperty("tangentsNeedUpdate") && (a.geometry.tangentsNeedUpdate = !0), "Stone" === da.wainscotColor ? (a.material[t].color.setHex(16777215), a.material[t].specular.setHex(0), a.material[t].shininess = .1, a.material[t].map = (new THREE.TextureLoader).load(D + "images/building/Stone.jpg"), a.material[t].normalScale.set(.01, .01), a.material[t].map.wrapS = THREE.RepeatWrapping, a.material[t].map.wrapT = THREE.RepeatWrapping, a.material[t].map.anisotropy = 1, a.material[t].map.repeat.x = a.material[t].normalMap.repeat.x / 8, a.material[t].map.offset.x = a.material[t].normalMap.offset.x / 8) : "Brick" === da.wainscotColor ? (a.material[t].color.setHex(16777215), a.material[t].specular.setHex(0), a.material[t].shininess = .1, a.material[t].map = (new THREE.TextureLoader).load(D + "images/building/Brick.jpg"), a.material[t].normalScale.set(.01, .01), a.material[t].map.wrapS = THREE.RepeatWrapping, a.material[t].map.wrapT = THREE.RepeatWrapping, a.material[t].map.anisotropy = 1, a.material[t].map.repeat.x = a.material[t].normalMap.repeat.x / 8, a.material[t].map.offset.x = a.material[t].normalMap.offset.x / 8) : (a.material[t].map = null, a.material[t].normalScale.set(1, 1), a.material[t].specular.setHex(4144959), a.material[t].shininess = 40), a.material[t].needsUpdate = !0), "BuildingSoffit" === a.material[t].name && a.material[t].color.setStyle(F.filter(e => e.name === da.soffitColor).map(e => e.hex)), "EaveLightsTrim" === a.material[t].name && (da.hasOwnProperty("trimEaveLightsColor") ? a.material[t].color.setStyle(F.filter(e => e.name === da.trimEaveLightsColor).map(e => e.hex)) : a.material[t].color.setStyle(F.filter(e => e.name === da.trimColor).map(e => e.hex)))
}
}
}), G = !0
}
function Ya(e) {
var t = !1,
a = ("touchstart" !== e.type && "touchmove" !== e.type && "touchend" !== e.type || (t = !0), i.x = (e.clientX - W.domElement.getBoundingClientRect().left) / W.domElement.clientWidth * 2 - 1, i.y = 2 * -((e.clientY - W.domElement.getBoundingClientRect().top) / W.domElement.clientHeight) + 1, t && (i.x = (e.touches[0].clientX - W.domElement.getBoundingClientRect().left) / W.domElement.clientWidth * 2 - 1, i.y = 2 * -((e.touches[0].clientY - W.domElement.getBoundingClientRect().top) / W.domElement.clientHeight) + 1), ja.setFromCamera(i, M), Ba = t ? (Ra = {
x: e.touches[0].clientX,
y: e.touches[0].clientY
}, {
x: e.touches[0].clientX,
y: e.touches[0].clientY
}) : (Ra = {
x: e.clientX,
y: e.clientY
}, {
x: e.clientX,
y: e.clientY
}), Ha = !0, ho(), ja.intersectObjects(La)),
o = -1;
for (let e = 0; e < a.length; e++)
if (a[e].object.name.startsWith("selectionBox") && (a[e].object = a[e].object.parent), a[e].object.userData.hasOwnProperty("fileType") && "lwo" == a[e].object.userData.fileType) {
if ((M !== E || !a[e].object.name.startsWith("buildingBoundingBox")) && !0 === a[e].object.visible) {
o = e;
break
}
} else if (!0 === a[e].object.parent.visible) {
o = e;
break
}
w && 0 < a.length && -1 < o && !a[o].object.parent.name.startsWith("scale") && (o = -1), !0 === It || 2 === It ? ($("#popup").hide(), $("#line").hide()) : 0 < a.length && -1 < o && (0 === e.button || t && 1 === e.touches.length) && ("buildingBoundingBox" != a[o].object.name && "leanTo1BoundingBox" != a[o].object.name && "leanTo2BoundingBox" != a[o].object.name && "leanTo3BoundingBox" != a[o].object.name && "leanTo4BoundingBox" != a[o].object.name || M == E) && (M == E && 1 < a.length && ("buildingBoundingBox" == a[o].object.name || "leanTo1BoundingBox" == a[o].object.name || "leanTo2BoundingBox" == a[o].object.name || "leanTo3BoundingBox" == a[o].object.name || "leanTo4BoundingBox" == a[o].object.name) && (a[0] = a[1]), e.stopPropagation(), P.enableRotate = !1, H.enablePan = !1, zt = !0, "porc" === a[o].object.name.substring(0, 4) || "scal" === a[o].object.parent.name.substring(0, 4) || a[o].object.name.startsWith("scale") && a[o].object.userData.hasOwnProperty("fileType") && "lwo" == a[o].object.userData.fileType || a[o].object.name.startsWith("mansard") || "wind" === a[o].object.name.substring(0, 4) || "walk" === a[o].object.name.substring(0, 4) || "gara" === a[o].object.name.substring(0, 4) ? (ve = T, $o(T = a[o].object), a = a[o].object.name.startsWith("scale") && "lwo" == a[o].object.userData.fileType ? ja.intersectObject(N) : a[o].object.parent.name.startsWith("scale") ? (T = a[o].object.parent, ja.intersectObject(N)) : ja.intersectObjects(Ca, !0), Mo()) : a[o].object.name.startsWith("measure") ? (null != T && ia.traverse(function(t) {
if (t instanceof THREE.Mesh && !T.name.startsWith("measure"))
if (t.renderOrder = 1, t.material.length)
for (let e = 0; e < t.material.length; e++) t.material[e].opacity = 1, t.material[e].depthTest = !0, t.material[e].emissive.setHex(0);
else t.material.opacity = 1, t.material.depthTest = !0, t.material.emissive.setHex(0)
}), ve = T, T = null, T = a[o].object, a = ja.intersectObject(ce), $("#popup").hide(), $("#line").hide()) : (ve = T, T = null, T = a[o].object.userData.hasOwnProperty("fileType") && "lwo" == a[o].object.userData.fileType ? a[o].object : a[o].object.parent, a = ja.intersectObject(N), $o(T), $("#popup").is(":visible") ? ($("#line").show(), Po(), Mo()) : ($("#popup").hide(), $("#line").hide())))
}
function Za(e) {
Io();
let t = !1,
s = null,
l;
if (Ha) {
if ("touchstart" !== e.type && "touchmove" !== e.type && "touchend" !== e.type || (t = !0), i.x = (e.clientX - W.domElement.getBoundingClientRect().left) / W.domElement.clientWidth * 2 - 1, i.y = 2 * -((e.clientY - W.domElement.getBoundingClientRect().top) / W.domElement.clientHeight) + 1, t && (e.preventDefault(), i.x = (e.touches[0].clientX - W.domElement.getBoundingClientRect().left) / W.domElement.clientWidth * 2 - 1, i.y = 2 * -((e.touches[0].clientY - W.domElement.getBoundingClientRect().top) / W.domElement.clientHeight) + 1), ja.setFromCamera(i, M), Ba = {
x: i.x,
y: i.y
}, "popup" !== e.target.id && "popup" !== e.target.parentNode.id && "popup" !== e.target.parentNode.parentNode.id && "popup" !== e.target.parentNode.parentNode.parentNode.id && (!1 === Sa && (v.getBoundingClientRect(), t ? (1 < Math.abs(Ra.x - (e.touches[0].pageX - v.offsetLeft)) || 1 < Math.abs(Ra.y - (e.touches[0].pageY - v.offsetTop))) && (Sa = !0) : (1 < Math.abs(Ra.x - (e.pageX - v.offsetLeft)) || 1 < Math.abs(Ra.y - (e.pageY - v.offsetTop))) && (Sa = !0)), T) && Sa) {
Mo();
let a = 0,
o = 0,
i = 0,
n = 0,
r = "front";
if (!zt || 0 !== e.button && 1 !== e.touches.length || !T.name.startsWith("mansard") && "porc" !== T.name.substring(0, 4) && "wind" !== T.name.substring(0, 4) && "walk" !== T.name.substring(0, 4) && "gara" !== T.name.substring(0, 4) || 0 != jt) {
if (zt && (0 === e.button || 1 === e.touches.length) && (void 0 !== (l = T.name.startsWith("measure") ? ja.intersectObject(ce) : T.name.startsWith("interior") ? ja.intersectObject(le) : ja.intersectObject(N))[0] && (s = l[0].point.sub(Na), T.position.copy(s), T.name.startsWith("measure")) && (T.userData.position = {
x: s.x,
y: s.y,
z: s.z
}, Co(T)), "scale-driveway-clone" === T.name)) {
var h = -1 * s.z - da.width / 2,
c = s.x - da.depth / 2,
d = s.z - da.width / 2,
p = -1 * s.x - da.depth / 2,
m = Math.min(h, c, d, p);
h === m ? (T.rotation.y = 0, r = 1) : c === m ? (T.rotation.y = Math.PI / -2, r = 2) : d === m ? (T.rotation.y = +Math.PI, r = 3) : p === m && (T.rotation.y = Math.PI / 2, r = 4), a = 0, o = 0, i = 0, n = 0, da.leanTo2 && (a = da.leanTo2Depth), da.leanTo4 && (o = da.leanTo4Depth), da.leanTo1 && (i = da.leanTo1Depth), da.leanTo3 && (n = da.leanTo3Depth);
let e, t;
e = 19 <= da.width && (1 === r || 3 === r) ? Math.min(Math.max(s.x, da.width / -2 + 9.5), da.width / 2 - 9.5) : Math.min(Math.max(s.x, da.width / -2), da.width / 2), t = 19 <= da.depth && (2 === r || 4 === r) ? Math.min(Math.max(s.z, da.depth / -2 + 9.5), da.depth / 2 - 9.5) : Math.min(Math.max(s.z, da.depth / -2), da.depth / 2), 1 === r && (t += i), 2 === r && (e -= a), 3 === r && (t -= n), 4 === r && (e += o), T.position.set(e, 0, t)
}
} else {
h = 0, c = 0, d = 0, p = 0;
if (l = ja.intersectObjects(Ca, !0), "porc" === T.name.substring(0, 4) && (l = l.concat(ja.intersectObject(N))), 0 < (l = "porchWrap" === T.name.substring(0, 9) ? [] : l).length && Sa) {
"porc" !== T.name.substring(0, 4) ? 0 === l[0].faceIndex || 1 === l[0].faceIndex ? T.rotation.y = Math.PI / 2 + l[0].object.rotation.y : 2 === l[0].faceIndex || 3 === l[0].faceIndex ? T.rotation.y = Math.PI / -2 + l[0].object.rotation.y : 8 === l[0].faceIndex || 9 === l[0].faceIndex ? T.rotation.y = 0 + l[0].object.rotation.y : 10 === l[0].faceIndex || 11 === l[0].faceIndex ? T.rotation.y = +Math.PI + l[0].object.rotation.y : r = !1 : r = !1, !1 !== r && (0 === T.rotation.y && (r = "front"), T.rotation.y === Math.PI / 2 && (r = "right"), T.rotation.y === Math.PI / -2 && (r = "left"), T.rotation.y === +Math.PI) && (r = "back");
var m = T.morphTargetInfluences[T.morphTargetDictionary.width],
g = T.morphTargetInfluences[T.morphTargetDictionary.height];
let e = 0;
null !== T.morphTargetDictionary.depth && (e = T.morphTargetInfluences[T.morphTargetDictionary.depth]), "window3x4-clone" === T.name || "window3x4Grid-clone" === T.name ? ("front" !== r && "back" !== r || (h = 2, c = 4.7, d = 2.5), "left" !== r && "right" !== r || (p = 2, c = 4.7, d = 2.5)) : "window3x4Shutters-clone" === T.name ? ("front" !== r && "back" !== r || (h = 3, c = 4.7, d = 2.5), "left" !== r && "right" !== r || (p = 3, c = 4.7, d = 2.5)) : "window4x3-clone" === T.name || "window4x3Grid-clone" === T.name ? ("front" !== r && "back" !== r || (h = 2.5, c = 5.2, d = 2), "left" !== r && "right" !== r || (p = 2.5, c = 5.2, d = 2)) : "window4x3Shutters-clone" === T.name ? ("front" !== r && "back" !== r || (h = 4, c = 5.2, d = 2), "left" !== r && "right" !== r || (p = 4, c = 5.2, d = 2)) : "windowPicture-clone" === T.name || "windowCasement-clone" === T.name || "windowSlider-clone" === T.name || "windowDoubleHung-clone" === T.name || "windowSingleHung-clone" === T.name || "windowTwinset-clone" === T.name || "windowAwning-clone" === T.name || "windowHopper-clone" === T.name || "windowSlopeLeft-clone" === T.name || "windowSlopeRight-clone" === T.name ? ("front" !== r && "back" !== r || (h = 1 + m / 2, c = 1 + g / 2 + 2, d = 1 + g / 2), "left" !== r && "right" !== r || (p = 1 + m / 2, c = 1 + g / 2 + 2, d = 1 + g / 2)) : "windowLouver-clone" === T.name ? ("front" !== r && "back" !== r || (h = 1 + m / 2, c = .5 + g / 2, d = 1 + g / 2), "left" !== r && "right" !== r || (p = 1 + m / 2, c = .5 + g / 2, d = 1 + g / 2)) : "windowFramedOpening-clone" === T.name ? ("front" !== r && "back" !== r || (h = 1 + m / 2, c = 1 + g / 2 + 2, d = 1 + g / 2), "left" !== r && "right" !== r || (p = 1 + m / 2, c = 1 + g / 2 + 2, d = 1 + g / 2)) : "walkDoorSolid-clone" === T.name ? ("front" !== r && "back" !== r || (h = 2 + m / 2, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoorSolidDouble-clone" === T.name ? ("front" !== r && "back" !== r || (h = 3.5 + m / 2, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoorHalfGlass-clone" === T.name ? ("front" !== r && "back" !== r || (h = 2 + m / 2, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoorHalfGlassDouble-clone" === T.name ? ("front" !== r && "back" !== r || (h = 3.5 + m / 2, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoor6Panel-clone" === T.name ? ("front" !== r && "back" !== r || (h = 2.5, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoor6PanelDouble-clone" === T.name ? ("front" !== r && "back" !== r || (h = 3.5 + m / 2, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoor6Lite-clone" === T.name || "walkDoor9Lite-clone" === T.name ? ("front" !== r && "back" !== r || (h = 2.5, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoor9LiteDouble-clone" === T.name || "walkDoorSlidingGlassDouble-clone" === T.name || "walkDoorFrenchDouble-clone" === T.name ? ("front" !== r && "back" !== r || (h = 3.5 + m / 2, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoorAllGlass-clone" === T.name ? ("front" !== r && "back" !== r || (h = 2.5, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoorAllGlassDouble-clone" === T.name ? ("front" !== r && "back" !== r || (h = 3.5 + m / 2, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoorCrossbuck-clone" === T.name ? ("front" !== r && "back" !== r || (h = 2.5, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "walkDoorEquine-clone" === T.name ? ("front" !== r && "back" !== r || (h = 3, c = 0), "left" !== r && "right" !== r || (p = 3, c = 0)) : "walkDoorFramedOpening-clone" === T.name ? ("front" !== r && "back" !== r || (h = 2 + m / 2, c = 0), "left" !== r && "right" !== r || (p = 2.5, c = 0)) : "garageOverheadPanel-clone" === T.name || "garageOverheadPanelWindow-clone" === T.name || "garageOverheadFlat-clone" === T.name || "garageOverheadFlatWindow-clone" === T.name || "garageOverheadFlatModern-clone" === T.name || "garageOverheadRibbed-clone" === T.name ? ("front" !== r && "back" !== r || (h = 6 + 10 * m, c = 0), "left" !== r && "right" !== r || (p = 6 + 10 * m, c = 0)) : "garageSlide-clone" === T.name || "garageSlideLeft-clone" === T.name || "garageSlideRight-clone" === T.name || "garageSlideCrossbuck-clone" === T.name ? ("front" !== r && "back" !== r || (h = 10.25 + 10 * m * 2, c = 0), "left" !== r && "right" !== r || (p = 10.25 + 10 * m * 2, c = 0)) : "garageBiFold-clone" === T.name || "garageHydraulic-clone" === T.name || "garageRollUp-clone" === T.name || "garageFramedOpening-clone" === T.name ? ("front" !== r && "back" !== r || (h = 6 + 10 * m, c = 0), "left" !== r && "right" !== r || (p = 6 + 10 * m, c = 0)) : "mansard-clone" === T.name ? ("front" !== r && "back" !== r || (h = 1 + m / 2, c = 4.7, d = 2.5 + e), "left" !== r && "right" !== r || (p = 1 + m / 2, c = 4.7, d = 2.5 + e)) : "mansardHip-clone" === T.name && ("front" !== r && "back" !== r || (h = 2.5 + m / 2, c = 4.7, d = 2 + e), "left" !== r && "right" !== r || (p = 2.5 + m / 2, c = 4.7, d = 2 + e)), "porc" === T.name.substring(0, 4) ? (null === (s = l[0].point.sub(Na)) && (l = ja.intersectObject(N), s = l[0].point.sub(Na)), a = 0, o = 0, i = 0, n = 0, da.leanTo2 && (a = da.leanTo2Depth), da.leanTo4 && (o = da.leanTo4Depth), da.leanTo1 && (i = da.leanTo1Depth), da.leanTo3 && (n = da.leanTo3Depth), da.hasOwnProperty("coveredGableExtensionE") && da.coveredGableExtensionE && da.coveredGableExtensionEEnclosed && (a = Math.max(a, da.coveredGableExtensionEDepth)), da.hasOwnProperty("coveredGableExtensionW") && da.coveredGableExtensionW && da.coveredGableExtensionWEnclosed && (o = Math.max(o, da.coveredGableExtensionWDepth)), da.hasOwnProperty("coveredGableExtensionN") && da.coveredGableExtensionN && da.coveredGableExtensionNEnclosed && (i = Math.max(i, da.coveredGableExtensionNDepth)), da.hasOwnProperty("coveredGableExtensionS") && da.coveredGableExtensionS && da.coveredGableExtensionSEnclosed && (n = Math.max(n, da.coveredGableExtensionSDepth)), "porchN-clone" === T.name && (s.z = da.depth / 2 + i, h = 6), "porchS-clone" === T.name && (s.z = da.depth / -2 - n), "porchE-clone" === T.name && (s.x = da.width / -2 - a), "porchW-clone" === T.name && (s.x = da.width / 2 + o), s.y = 0) : r ? (null === (s = l[0].point.sub(Na)) && "porc" === T.name.substring(0, 4) && (l = ja.intersectObject(N), s = l[0].point.sub(Na)), a = 0, o = 0, i = 0, n = 0, da.leanTo2 && (a = da.leanTo2Depth), da.leanTo4 && (o = da.leanTo4Depth), da.leanTo1 && (i = da.leanTo1Depth), da.leanTo3 && (n = da.leanTo3Depth), da.hasOwnProperty("coveredGableExtensionE") && da.coveredGableExtensionE && da.coveredGableExtensionEEnclosed && (a = Math.max(a, da.coveredGableExtensionEDepth)), da.hasOwnProperty("coveredGableExtensionW") && da.coveredGableExtensionW && da.coveredGableExtensionWEnclosed && (o = Math.max(o, da.coveredGableExtensionWDepth)), da.hasOwnProperty("coveredGableExtensionN") && da.coveredGableExtensionN && da.coveredGableExtensionNEnclosed && (i = Math.max(i, da.coveredGableExtensionNDepth)), da.hasOwnProperty("coveredGableExtensionS") && da.coveredGableExtensionS && da.coveredGableExtensionSEnclosed && (n = Math.max(n, da.coveredGableExtensionSDepth)), s.x = Math.min(Math.max(s.x, da.width / -2 - a + h), da.width / 2 + o - h), s.y = 0 === c ? 0 : Math.min(Math.max(s.y, c), da.roofHeightAtX(s.x) - d), s.z = Math.min(Math.max(s.z, da.depth / -2 - n + p), da.depth / 2 + i - p)) : s.z = Math.min(Math.max(s.z, da.depth / -2 + p), da.depth / 2 - p), null != s && T.position.copy(s)
}
}
}
} else if (T && (!0 === It || 2 === It) && T.name.startsWith("measure")) t = !1, "touchstart" !== e.type && "touchmove" !== e.type && "touchend" !== e.type || (t = !0), i.x = (e.clientX - W.domElement.getBoundingClientRect().left) / W.domElement.clientWidth * 2 - 1, i.y = 2 * -((e.clientY - W.domElement.getBoundingClientRect().top) / W.domElement.clientHeight) + 1, t && (e.preventDefault(), i.x = (e.touches[0].clientX - W.domElement.getBoundingClientRect().left) / W.domElement.clientWidth * 2 - 1, i.y = 2 * -((e.touches[0].clientY - W.domElement.getBoundingClientRect().top) / W.domElement.clientHeight) + 1), ja.setFromCamera(i, M), Ba = {
x: i.x,
y: i.y
}, void 0 !== (l = ja.intersectObject(ce))[0] && (s = l[0].point.sub(Na), T.position.copy(s), T.userData.position = {
x: s.x,
y: s.y,
z: s.z
}), 2 === It && (Co(T), G = !0);
else {
t = !1, "touchstart" !== e.type && "touchmove" !== e.type && "touchend" !== e.type || (t = !0), i.x = (e.clientX - W.domElement.getBoundingClientRect().left) / W.domElement.clientWidth * 2 - 1, i.y = 2 * -((e.clientY - W.domElement.getBoundingClientRect().top) / W.domElement.clientHeight) + 1, t && (e.preventDefault(), i.x = (e.touches[0].clientX - W.domElement.getBoundingClientRect().left) / W.domElement.clientWidth * 2 - 1, i.y = 2 * -((e.touches[0].clientY - W.domElement.getBoundingClientRect().top) / W.domElement.clientHeight) + 1), ja.setFromCamera(i, M), l = ja.intersectObjects(La, !0);
for (let e = 0; e < l.length; e++)
if (l[e].object.name.startsWith("itemSelectionBox")) {
if (w && !l[e].object.parent.name.startsWith("scale")) break;
l[e].object = l[e].object.parent, ko(l[e].object);
break
}
}
}
function Ja(e) {
var t = !1;
"touchstart" !== e.type && "touchmove" !== e.type && "touchend" !== e.type || (t = !0), i.x = (e.clientX - W.domElement.getBoundingClientRect().left) / W.domElement.clientWidth * 2 - 1, i.y = 2 * -((e.clientY - W.domElement.getBoundingClientRect().top) / W.domElement.clientHeight) + 1, t && (i = {
x: Ba.x,
y: Ba.y
}), T && !1 === Sa ? T.name.startsWith("interior") || T.name.startsWith("mansard") || T.name.startsWith("porch") || T.name.startsWith("scale") || T.name.startsWith("window") || T.name.startsWith("walk") || T.name.startsWith("garage") ? $("#popup").is(":hidden") ? ($("#popup").css("display", "flex"), t = Math.min(e.clientX + 50, $("#viewport3D").innerWidth() - $("#popup").outerWidth()), e = Math.max(e.clientY - 275, 0), $("#popup").css({
top: e,
left: t
}), $("#line").show(), Po(), Mo()) : ve && T.uuid === ve.uuid && !T.name.startsWith("measure") && ($("#popup").hide(), $("#line").hide(), ve = T, T = null, Io()) : T && T.name.startsWith("measure") && !0 === It ? (Lo(T), G = !0) : T && T.name.startsWith("measure") && 2 === It && (It = !1, ve = T, T = null, G = !0) : T && Sa && $("#popup").is(":hidden") && !T.name.startsWith("measure") && ($o(!1), ve = T, T = null, G = !0), qt = _t = $t = Gt = kt = Ft = 0, Sa = Ha = zt = !1, $("#touchGUI").hide(), P.enableRotate = !0, P.enablePan = !w, P.enableZoom = !0, H.enablePan = !w, H.enableZoom = !0
}
function Ka(e, t, a) {
e = e || "", t = t || 0, a = a || !1;
var o = new THREE.Vector3,
o = ia.getObjectByName("UserCamera").getWorldDirection(o),
o = Math.atan2(o.x, o.z),
i = ia.getObjectByName("UserCamera").position;
let n = 1,
r = 0,
s = 0,
l = 0,
h = (i.x < da.width / 2 && i.x > da.width / -2 && i.y < da.height / 2 && 0 < i.y && i.z < da.depth / 2 && i.z > da.depth / -2 && (n = -1), 0),
c = 0,
d = 0,
p = 0;
da.leanTo1 && da.leanTo1Enclosed && "Fully Enclosed" == da.leanTo1Walls && (d = da.leanTo1Depth), da.leanTo2 && da.leanTo2Enclosed && "Fully Enclosed" == da.leanTo2Walls && (h = da.leanTo2Depth), da.leanTo3 && da.leanTo3Enclosed && "Fully Enclosed" == da.leanTo3Walls && (p = da.leanTo3Depth), da.leanTo4 && da.leanTo4Enclosed && "Fully Enclosed" == da.leanTo4Walls && (c = da.leanTo4Depth), da.hasOwnProperty("coveredGableExtensionE") && da.coveredGableExtensionE && da.coveredGableExtensionEEnclosed && (h = Math.max(h, da.coveredGableExtensionEDepth)), da.hasOwnProperty("coveredGableExtensionW") && da.coveredGableExtensionW && da.coveredGableExtensionWEnclosed && (c = Math.max(c, da.coveredGableExtensionWDepth)), da.hasOwnProperty("coveredGableExtensionN") && da.coveredGableExtensionN && da.coveredGableExtensionNEnclosed && (d = Math.max(d, da.coveredGableExtensionNDepth)), da.hasOwnProperty("coveredGableExtensionS") && da.coveredGableExtensionS && da.coveredGableExtensionSEnclosed && (p = Math.max(p, da.coveredGableExtensionSDepth)), l = Math.abs(o * n) < Math.PI / 4 || Math.abs(o * n) > 3 * Math.PI / 4 ? Math.abs(o) > Math.PI / 2 ? (s = (da.depth / 2 + d) * n + n * n, .5 * Math.PI * Math.abs(n - 1)) : (s = (da.depth / -2 - p) * n - n * n, .5 * Math.PI * (n + 1)) : 0 < i.x ? (r = (da.width / 2 + c) * n + n * n, Math.PI / 2 * n) : (r = (da.width / -2 - h) * n - n * n, Math.PI / -2 * n);
var m = ia.getObjectByName(e).GdeepCloneMaterials();
if (m.name = e + "-clone", m.visible = !0, m.castShadow = !0, m.receiveShadow = !1, m.userData.scale = {
x: 1,
y: 1,
z: 1
}, m.name.startsWith("walkDoor") && (m.userData.doorSwing = 1, m.userData.scale = {
x: 3,
y: 7,
z: 0
}), m.name.startsWith("walkDoor") && m.name.endsWith("Double-clone") && (m.userData.doorSwing = 1, m.userData.scale = {
x: 6,
y: 7,
z: 0
}), m.name.startsWith("garage") && (m.userData.scale = {
x: 10,
y: Math.min(da.height - 2, 10),
z: 0
}), m.name.startsWith("mansardHip") && (m.userData.scale = {
x: 6,
y: 2,
z: 2
}), m.userData.position = {
x: r,
y: t,
z: s
}, m.userData.rotation = {
x: 0,
y: l,
z: 0
}, Fo(m), a) {
if ("object" == typeof a) {
o = a.position.split(",");
if (m.position.set(parseFloat(o[0]), parseFloat(o[1]), parseFloat(o[2])), m.userData.position = {
x: parseFloat(o[0]),
y: parseFloat(o[1]),
z: parseFloat(o[2])
}, o = a.rotation.split(","), m.rotation.set(parseFloat(o[0]), parseFloat(o[1]), parseFloat(o[2])), m.userData.rotation = {
x: parseFloat(o[0]),
y: parseFloat(o[1]),
z: parseFloat(o[2])
}, m.name.startsWith("walk") && (o = a.scale.split(","), m.name.endsWith("Double-clone") ? m.morphTargetInfluences[m.morphTargetDictionary.width] = parseFloat(o[0]) - 6 : m.morphTargetInfluences[m.morphTargetDictionary.width] = parseFloat(o[0]) - 3, m.morphTargetInfluences[m.morphTargetDictionary.height] = parseFloat(o[1]) - 7, m.userData.scale = {
x: parseFloat(o[0]),
y: parseFloat(o[1]),
z: parseFloat(o[2])
}), m.name.startsWith("window") && (o = a.scale.split(","), m.morphTargetInfluences[m.morphTargetDictionary.width] = parseFloat(o[0]) - 1, m.morphTargetInfluences[m.morphTargetDictionary.height] = parseFloat(o[1]) - 1, m.userData.scale = {
x: parseFloat(o[0]),
y: parseFloat(o[1]),
z: parseFloat(o[2])
}, m.name.startsWith("windowSlope")) && (m.morphTargetInfluences[m.morphTargetDictionary.slope] = da.roofPitch / 12 * parseFloat(o[0])), m.name.startsWith("gara") && (o = a.scale.split(","), m.morphTargetInfluences[m.morphTargetDictionary.width] = (parseFloat(o[0]) - 10) / 10 / 2, m.morphTargetInfluences[m.morphTargetDictionary.height] = (parseFloat(o[1]) - 10) / 10, m.userData.scale = {
x: parseFloat(o[0]),
y: parseFloat(o[1]),
z: parseFloat(o[2])
}), m.name.startsWith("mansard") && (o = a.scale.split(","), m.name.startsWith("mansardHip") ? m.morphTargetInfluences[m.morphTargetDictionary.width] = parseFloat(o[0]) - 5 : m.morphTargetInfluences[m.morphTargetDictionary.width] = parseFloat(o[0]) - 1, m.userData.scale = {
x: parseFloat(o[0]),
y: parseFloat(o[1]),
z: parseFloat(o[2])
}), "-1" === a.doorSwing && (m.scale.x = -1, T.userData.doorSwing = -1), a.shutters) m.morphTargetInfluences[m.morphTargetDictionary.hideShutters] = 0;
else {
m.morphTargetInfluences[m.morphTargetDictionary.hideShutters] = 1;
for (let e = 0; e < m.material.length; e++) "Shutters" === m.material[e].name && (m.material[e].visible = !1)
}
if (a.grid)
for (let e = 0; e < m.material.length; e++) "WindowGrid" === m.material[e].name && (m.material[e].visible = !0);
else
for (let e = 0; e < m.material.length; e++) "WindowGrid" === m.material[e].name && (m.material[e].visible = !1);
ve = T, T = null, Io()
}
} else {
if (m.position.set(r, t, s), m.rotation.set(0, l, 0), m.name.startsWith("mansard") && (m.userData.scale = {
x: 6,
y: 2,
z: 2
}, m.name.startsWith("mansardHip") ? m.morphTargetInfluences[m.morphTargetDictionary.width] = 1 : m.morphTargetInfluences[m.morphTargetDictionary.width] = 5), m.name.startsWith("window")) {
let e = 3,
t = 3;
m.name.startsWith("windowSlider") && (e = 3, t = 3), m.name.startsWith("windowDoubleHung") && (e = 3, t = 3), m.name.startsWith("windowTwinset") && (e = 3, t = 4), m.name.startsWith("windowPicture") && (e = 3, t = 4), m.name.startsWith("windowSingleHung") && (e = 3, t = 4), m.name.startsWith("windowLouver") && (e = 4, t = 2), m.userData.scale = {
x: e,
y: t,
z: 0
}, m.morphTargetInfluences[m.morphTargetDictionary.width] = e - 1, m.morphTargetInfluences[m.morphTargetDictionary.height] = t - 1, m.name.startsWith("windowSlope") && (m.morphTargetInfluences[m.morphTargetDictionary.slope] = da.roofPitch / 12 * e)
}
if (m.name.startsWith("window"))
for (let e = 0; e < m.material.length; e++) "Shutters" === m.material[e].name && (m.material[e].visible = !1, m.morphTargetInfluences[m.morphTargetDictionary.hideShutters] = 1), "WindowGrid" === m.material[e].name && (m.material[e].visible = !1);
if (m.name.startsWith("walkDoor")) {
let e = 3,
t = 80 / 12;
m.name.startsWith("walkDoorEquine") && (e = 4, t = 82 / 12), m.name.endsWith("Double") && (e = 6, t = 80 / 12), m.userData.scale = {
x: e,
y: t,
z: 0
}, m.name.endsWith("Double") ? m.morphTargetInfluences[m.morphTargetDictionary.width] = e - 6 : m.morphTargetInfluences[m.morphTargetDictionary.width] = e - 3, m.morphTargetInfluences[m.morphTargetDictionary.height] = t - 7
}
m.name.startsWith("gara") && (m.morphTargetInfluences[m.morphTargetDictionary.width] = (m.userData.scale.x - 10) / 10 / 2, m.morphTargetInfluences[m.morphTargetDictionary.height] = (m.userData.scale.y - 10) / 10), da.hasOwnProperty(e + "Qty") && da[e + "Qty"]++, $o(m)
}
na.add(m), O(), G = !0
}
function eo() {
this.addPerson = function() {
s("person")
}, this.addTruck = function() {
s("truck")
}, this.addCar = function() {
s("car")
}, this.addAirplane = function() {
s("airplane")
}, this.addATV = function() {
s("atv")
}, this.addJetski = function() {
s("jetski")
}, this.addCombine = function() {
s("combine")
}, this.addTractor = function() {
s("tractor")
}, this.addBoat = function() {
s("boat")
}, this.addSkiBoat = function() {
s("skiBoat")
}, this.addDriveway = function() {
s("driveway")
}, this.addGrainCart = function() {
s("grainCart")
}, this.addSemiTruck = function() {
s("semiTruck")
}, this.addSemiTrailer = function() {
s("semiTrailer")
}, this.addSemiTrailer53 = function() {
s("semiTrailer53")
}, this.addBackhoe = function() {
s("backhoe")
}, this.addCornHead6 = function() {
s("cornHead6")
}, this.addCornHead = function() {
s("cornHead")
}, this.addCornHead12 = function() {
s("cornHead12")
}, this.addBeanHead = function() {
s("beanHead")
}, this.addBeanHead35 = function() {
s("beanHead35")
}, this.addBeanHead40 = function() {
s("beanHead40")
}, this.addDesk = function() {
s("desk")
}, this.addChair = function() {
s("chair")
}, this.addConferenceTable = function() {
s("conferenceTable")
}, this.addLawnMower = function() {
s("lawnMower")
}, this.addRV = function() {
s("rv")
}, this.addCamper = function() {
s("camper")
}, this.addHorseStall = function() {
s("horseStall")
}, this.addHayBales = function() {
s("hayBales")
}, this.addWorkbench = function() {
s("workbench")
}, this.addAirCompressor = function() {
s("airCompressor")
}, this.addBed = function() {
s("bed")
}, this.addCouch = function() {
s("couch")
}, this.addRidingMower = function() {
s("ridingMower")
}, this.addKitchenTable = function() {
s("kitchenTable")
}, this.addRecliner = function() {
s("recliner")
}, this.addToilet = function() {
s("toilet")
}, this.addUtilitySink = function() {
s("utilitySink")
}, this.addPedestalSink = function() {
s("pedestalSink")
}, this.addHorse = function() {
s("horse")
}, this.addUTV = function() {
s("utv")
}, this.addCultivator = function() {
s("cultivator")
}, this.addKitchenChair = function() {
s("kitchenChair")
}, this.addNightStand = function() {
s("nightStand")
}, this.addCoffeeTable = function() {
s("coffeeTable")
}, this.addEndTable = function() {
s("endTable")
}
}
function s(t, a) {
var e, o;
t = t || !1, a = a || !1, void 0 === ia.getObjectByName(t) ? (e = D + "objects/scale-" + t, (o = new THREE.LWOLoader).setResourcePath(D + "images/"), o.load(e + ".lwo", function(e) {
e.meshes.forEach(function(e) {
e.name = t, e.visible = !1, e.castShadow = !0, e.receiveShadow = !0, e.frustumCulled = !1, e.userData.fileType = "lwo", e.hasOwnProperty("morphTargetInfluences") && (e.material.morphTargets = !0), 0 < e.material.length ? e.material.forEach(function(e) {
"MeshStandardMaterial" == e.type && null !== e.roughnessMap && (e.roughness = 1)
}) : "MeshStandardMaterial" == e.material.type && null !== e.material.roughnessMap && (e.material.roughness = 1), ra.add(e), to(t, a)
})
})) : to(t, a)
}
function to(e, t) {
e = e || "", t = t || !1;
var a = 0,
o = 0,
i = 0,
n = 0,
n = (da.leanTo1 && (i = da.leanTo1Depth), da.leanTo2 && (a = da.leanTo2Depth), da.leanTo3 && (n = da.leanTo3Depth), da.leanTo4 && (o = da.leanTo4Depth), da.hasOwnProperty("coveredGableExtensionE") && da.coveredGableExtensionE && da.coveredGableExtensionEEnclosed && (a = Math.max(a, da.coveredGableExtensionEDepth)), da.hasOwnProperty("coveredGableExtensionW") && da.coveredGableExtensionW && da.coveredGableExtensionWEnclosed && (o = Math.max(o, da.coveredGableExtensionWDepth)), da.hasOwnProperty("coveredGableExtensionN") && da.coveredGableExtensionN && da.coveredGableExtensionNEnclosed && (i = Math.max(i, da.coveredGableExtensionNDepth)), da.hasOwnProperty("coveredGableExtensionS") && da.coveredGableExtensionS && da.coveredGableExtensionSEnclosed && (n = Math.max(n, da.coveredGableExtensionSDepth)), []),
o = ("person" == e && (n = [da.width / 2 + o + .75, 0, da.depth / 2 + i + 3.5]), "truck" == e && (n = [da.width / 2 + o + 7.75, 0, da.depth / 2 + i - 3.25]), "car" == e && (n = [da.width / 2 + o + 16, 0, da.depth / 2 + i - 3.25]), "airplane" == e && (n = [da.width / -2 - a - 12, 0, da.depth / 2 + i + 8.5]), "atv" == e && (n = [da.width / 2 - 4.5, 0, da.depth / 2 + i + 5.5]), "utv" == e && (n = [da.width / 2 - 4.5, 0, da.depth / 2 + i + 5.5]), "jetski" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "combine" == e && (n = [da.width / -2 + 8.4, 0, da.depth / 2 + i + 23.5]), "tractor" == e && (n = [da.width / 2 - 10, 0, da.depth / 2 + i + 11.5]), "boat" == e && (n = [da.width / 2 + 3, 0, da.depth / 2 + i + 14]), "skiBoat" == e && (n = [da.width / 2 + 3, 0, da.depth / 2 + i + 14]), "driveway" == e && (n = [0, 0, +(da.depth / 2 + i)]), "grainCart" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "semiTruck" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "semiTrailer" == e && (n = [da.width / 2 + 6.25, 0, da.depth / 2 + i + 22.75]), "semiTrailer53" == e && (n = [da.width / 2 + 6.25, 0, da.depth / 2 + i + 26.75]), "backhoe" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "cornHead6" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "cornHead" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "cornHead12" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "beanHead" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "beanHead35" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "beanHead40" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "cultivator" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "desk" == e && (n = [0, 0, 0]), "chair" == e && (n = [0, 0, 0]), "conferenceTable" == e && (n = [0, 0, 0]), "lawnMower" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "rv" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "camper" == e && (n = [da.width / 2 - 3.25, 0, da.depth / 2 + i + 16.75]), "horseStall" == e && (n = [0, 0, 0]), "hayBales" == e && (n = [0, 0, 0]), "workbench" == e && (n = [0, 0, 0]), "airCompressor" == e && (n = [0, 0, 0]), "bed" == e && (n = [0, 0, 0]), "couch" == e && (n = [0, 0, 0]), "kitchenTable" == e && (n = [0, 0, 0]), "recliner" == e && (n = [0, 0, 0]), "toilet" == e && (n = [0, 0, 0]), "utilitySink" == e && (n = [0, 0, 0]), "pedestalSink" == e && (n = [0, 0, 0]), "ridingMower" == e && (n = [da.width / 2 - 10, 0, da.depth / 2 + i + 11.5]), "horse" == e && (n = [da.width / 2 - 10, 0, da.depth / 2 + i + 11.5]), "kitchenChair" == e && (n = [0, 0, 0]), "nightStand" == e && (n = [0, 0, 0]), "coffeeTable" == e && (n = [0, 0, 0]), "endTable" == e && (n = [0, 0, 0]), ia.getObjectByName(e).GdeepCloneMaterials());
o.name = "scale-" + e + "-clone", o.visible = !0, o.castShadow = !0, o.receiveShadow = !0, o.userData.fileType = ia.getObjectByName(e).userData.fileType, o.userData.rotationMultiplyer = 0, Fo(o), t ? "object" == typeof t && (a = t.position.split(","), o.position.set(parseFloat(a[0]), parseFloat(a[1]), parseFloat(a[2])), a = t.rotation.split(","), o.rotation.set(parseFloat(a[0]), parseFloat(a[1]), parseFloat(a[2])), o.userData.rotationMultiplyer = parseFloat(a[1])) : o.position.set(n[0], n[1], n[2]), na.add(o), da.hasOwnProperty(e) && da[e]++, G = !0
}
function ao() {
this.addInteriorWall = function() {
oo("interiorWall")
}, this.addInteriorDoor = function() {
oo("interiorDoor")
}
}
function oo(e, t) {
e = e || !1, t = t || !1;
var a = ia.getObjectByName(e);
let o;
if ((o = "interiorWall" == e ? a.deepClone() : a.clone()).name += "-clone", o.visible = !0, o.userData.rotationMultiplyer = 0, o.userData.position = new THREE.Vector3, o.userData.scale = new THREE.Vector3(1, 1, 1), o.userData.toNorthWall = function(e) {
if (void 0 === e) return o.position.z + da.coreBuildingDimensions().northEdge;
o.userData.position.z = o.position.z = da.coreBuildingDimensions().northEdge - e
}, "interiorDoor" == e && (o.userData.doorSwing = 1), he.add(o), "interiorWall" === e) {
var a = D + "images/building/building-normal.jpg",
i = (new THREE.TextureLoader).load(a),
a = (i.anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), i.wrapS = THREE.RepeatWrapping, i.wrapT = THREE.RepeatWrapping, D + "images/building/OSB.jpg"),
n = (new THREE.TextureLoader).load(a);
n.anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), n.wrapS = THREE.RepeatWrapping, n.wrapT = THREE.RepeatWrapping;
for (let e = 0; e < o.material.length; e++) o.material[e] = o.material[e].clone(), "interiorWallUpper" === o.material[e].name && (o.material[e].normalMap = i, o.userData.metalTexture = i, o.userData.topMaterial = o.material[e]), "interiorWallLower" === o.material[e].name && (o.userData.woodTexture = n, o.userData.bottomMaterial = o.material[e]);
o.scale.x = 5, o.userData.scale.x = 5, o.userData.material = "Steel"
}
Fo(o), t ? (a = t.position.split(","), o.position.set(parseFloat(a[0]), parseFloat(a[1]), parseFloat(a[2])), a = t.rotation.split(","), o.rotation.set(parseFloat(a[0]), parseFloat(a[1]), parseFloat(a[2])), o.userData.rotationMultiplyer = parseFloat(a[1]), a = t.scale.split(","), o.scale.set(parseFloat(a[0]), parseFloat(a[1]), parseFloat(a[2])), o.userData.width = parseFloat(a[0]), o.userData.height = parseFloat(a[1]), t.hasOwnProperty("doorSwing") && (-1 == t.doorSwing ? (o.userData.doorSwing = -1, o.scale.x = -1) : o.userData.doorSwing = 1), t.hasOwnProperty("material") && (o.userData.material = t.material)) : da.hasOwnProperty(e + "Qty") && da[e + "Qty"]++, io(), t || ($("#popup").show(), $("#line").show(), Po(), Mo())
}
function io() {
ia.traverse(function(e) {
var t, a;
e instanceof THREE.Mesh && ("interiorWall-clone" == e.name || "dividingWall" == e.name) && (t = e.scale.y = da.height - 1, a = e.scale.x, e.userData.height = t, e.userData.width = a, "interiorWall-clone" == e.name) && ("Half Wood" == e.userData.material ? (e.userData.topMaterial.map = null, e.userData.topMaterial.normalMap = e.userData.metalTexture, e.userData.topMaterial.specular.setHex(6250335), e.userData.topMaterial.shininess = 90, e.userData.topMaterial.reflectivity = .05, e.userData.topMaterial.normalMap.repeat.set(12 * a / 9, 1), e.userData.bottomMaterial.map = e.userData.woodTexture, e.userData.bottomMaterial.normalMap = null, e.userData.bottomMaterial.specular.setHex(2500134), e.userData.bottomMaterial.shininess = 5.117649, e.userData.bottomMaterial.reflectivity = 0, e.userData.bottomMaterial.map.repeat.set(a / 2.5, t / 2.5)) : "Wood" == e.userData.material ? (e.userData.topMaterial.map = e.userData.woodTexture, e.userData.topMaterial.normalMap = null, e.userData.topMaterial.specular.setHex(2500134), e.userData.topMaterial.shininess = 5.117649, e.userData.topMaterial.reflectivity = 0, e.userData.topMaterial.map.repeat.set(a / 2.5, t / 2.5), e.userData.bottomMaterial.map = e.userData.woodTexture, e.userData.bottomMaterial.normalMap = null, e.userData.bottomMaterial.specular.setHex(2500134), e.userData.bottomMaterial.shininess = 5.117649, e.userData.bottomMaterial.reflectivity = 0, e.userData.bottomMaterial.map.repeat.set(a / 2.5, t / 2.5)) : "Drywall" == da.divisionMaterial ? (e.userData.topMaterial.map = null, e.userData.topMaterial.normalMap = null, e.userData.topMaterial.specular.setHex(14540253), e.userData.topMaterial.shininess = 6, e.userData.topMaterial.reflectivity = 0, e.userData.bottomMaterial.map = null, e.userData.bottomMaterial.normalMap = null, e.userData.bottomMaterial.specular.setHex(14540253), e.userData.bottomMaterial.shininess = 6, e.userData.bottomMaterial.reflectivity = 0) : (e.userData.topMaterial.map = null, e.userData.topMaterial.normalMap = e.userData.metalTexture, e.userData.topMaterial.specular.setHex(6250335), e.userData.topMaterial.shininess = 90, e.userData.topMaterial.reflectivity = .05, e.userData.topMaterial.normalMap.repeat.set(12 * a / 9, 1), e.userData.bottomMaterial.map = null, e.userData.bottomMaterial.normalMap = e.userData.metalTexture, e.userData.bottomMaterial.specular.setHex(6250335), e.userData.bottomMaterial.shininess = 90, e.userData.bottomMaterial.reflectivity = .05, e.userData.bottomMaterial.normalMap.repeat.set(12 * a / 9, 1)), e.userData.topMaterial.needsUpdate = !0, e.userData.bottomMaterial.needsUpdate = !0)
})
}
function no() {
var t, a, e;
if (null == n[0])
for (let e = 0; e < 6; e++) {
(t = Y.deepClone()).name = "perimeterWall" + (e + 1), t.scale.z = .075, t.userData.material = "Steel", i = D + "images/building/building-normal.jpg", (a = (new THREE.TextureLoader).load(i)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), a.wrapS = THREE.RepeatWrapping, a.wrapT = THREE.RepeatWrapping;
var o, i = D + "images/building/OSB.jpg";
(o = (new THREE.TextureLoader).load(i)).anisotropy = Math.min(W.capabilities.getMaxAnisotropy(), 5), o.wrapS = THREE.RepeatWrapping, o.wrapT = THREE.RepeatWrapping;
for (let e = 0; e < t.material.length; e++) t.material[e] = t.material[e].clone(), "interiorWallUpper" === t.material[e].name && (t.material[e].normalMap = a, t.userData.metalTexture = a, t.userData.topMaterial = t.material[e]), "interiorWallLower" === t.material[e].name && (t.userData.woodTexture = o, t.userData.bottomMaterial = t.material[e]);
na.add(t), n[e] = t
}
n[0].hasOwnProperty("parent") && (n[0].visible = !1, n[1].visible = !1, n[2].visible = !1, n[3].visible = !1, n[4].visible = !1, n[5].visible = !1, da.divisionWall || "None" === da.perimeterWalls || 0 !== da.hideWalls || (n[0].visible = !0, n[1].visible = !0, n[2].visible = !0, n[3].visible = !0), da.divisionWall && "None" !== da.perimeterWalls && 0 === da.hideWalls && (n[0].visible = !0, n[1].visible = !0, n[5].visible = !0), da.divisionWall && "None" !== da.perimeterWalls2 && 0 === da.hideWalls && (n[2].visible = !0, n[3].visible = !0, n[4].visible = !0), e = .15, da.divisionWall || "None" === da.perimeterWalls ? da.divisionWall && "None" !== da.perimeterWalls && (n[0].position.set(0, 0, da.depth / 2 - e), n[1].position.set(da.width / -2 + e, 0, (da.depth - da.divisionAmount - e) / 2), n[5].position.set(da.width / 2 - e, 0, (da.depth - da.divisionAmount - e) / 2), n[0].rotation.y = 0, n[1].rotation.y = THREE.Math.degToRad(90), n[5].rotation.y = THREE.Math.degToRad(90), n[0].scale.x = da.width - .3, n[1].scale.x = da.divisionAmount - e, n[5].scale.x = da.divisionAmount - e, n[0].userData.material = da.perimeterWalls, n[1].userData.material = da.perimeterWalls, n[5].userData.material = da.perimeterWalls) : (n[0].position.set(0, 0, da.depth / 2 - e), n[1].position.set(da.width / -2 + e, 0, 0), n[2].position.set(0, 0, da.depth / -2 + e), n[3].position.set(da.width / 2 - e, 0, 0), n[0].rotation.y = 0, n[1].rotation.y = THREE.Math.degToRad(90), n[2].rotation.y = 0, n[3].rotation.y = THREE.Math.degToRad(90), n[0].scale.x = da.width - .3, n[1].scale.x = da.depth - .3, n[2].scale.x = da.width - .3, n[3].scale.x = da.depth - .3, n[0].userData.material = da.perimeterWalls, n[1].userData.material = da.perimeterWalls, n[2].userData.material = da.perimeterWalls, n[3].userData.material = da.perimeterWalls), da.divisionWall && "None" !== da.perimeterWalls2 && (n[2].position.set(da.width / -2 + e, 0, (da.divisionAmount - e) / -2), n[3].position.set(0, 0, da.depth / -2 + e), n[4].position.set(da.width / 2 - e, 0, (da.divisionAmount - e) / -2), n[2].rotation.y = THREE.Math.degToRad(90), n[3].rotation.y = 0, n[4].rotation.y = THREE.Math.degToRad(90), n[2].scale.x = da.depth - e - da.divisionAmount, n[3].scale.x = da.width - .3, n[4].scale.x = da.depth - e - da.divisionAmount, n[2].userData.material = da.perimeterWalls2, n[3].userData.material = da.perimeterWalls2, n[4].userData.material = da.perimeterWalls2), ia.traverse(function(t) {
if (t instanceof THREE.Mesh && t.name.startsWith("perimeterWall") && ("None" !== da.perimeterWalls || "None" !== da.perimeterWalls2)) {
let e = t.userData.height = t.scale.y = da.height - 1;
if (da.hasOwnProperty("perimeterWallHeight")) e = t.userData.height = t.scale.y = da.perimeterWallHeight;
else if (da.settings.vaultedCeiling && ("perimeterWall1" == t.name || "perimeterWall3" == t.name)) {
console.log(t), e = t.userData.height = t.scale.y = da.peakHeight();
for (let e = 0; e < t.material.length; e++) t.material[e].clippingPlanes = [et, tt], t.material[e].clipIntersection = !1, t.material[e].clipShadows = !0
}
var a = t.userData.width = t.scale.x;
"Half Wood" == t.userData.material ? (t.userData.topMaterial.map = null, t.userData.topMaterial.normalMap = t.userData.metalTexture, t.userData.topMaterial.specular.setHex(6250335), t.userData.topMaterial.shininess = 90, t.userData.topMaterial.reflectivity = .05, t.userData.topMaterial.normalMap.repeat.set(12 * a / 9, 1), t.userData.bottomMaterial.map = t.userData.woodTexture, t.userData.bottomMaterial.normalMap = null, t.userData.bottomMaterial.specular.setHex(2500134), t.userData.bottomMaterial.shininess = 5.117649, t.userData.bottomMaterial.reflectivity = 0, t.userData.bottomMaterial.map.repeat.set(a / 2.5, e / 2.5)) : "Wood" == t.userData.material ? (t.userData.topMaterial.map = t.userData.woodTexture, t.userData.topMaterial.normalMap = null, t.userData.topMaterial.specular.setHex(2500134), t.userData.topMaterial.shininess = 5.117649, t.userData.topMaterial.reflectivity = 0, t.userData.topMaterial.map.repeat.set(a / 2.5, e / 2.5), t.userData.bottomMaterial.map = t.userData.woodTexture, t.userData.bottomMaterial.normalMap = null, t.userData.bottomMaterial.specular.setHex(2500134), t.userData.bottomMaterial.shininess = 5.117649, t.userData.bottomMaterial.reflectivity = 0, t.userData.bottomMaterial.map.repeat.set(a / 2.5, e / 2.5)) : "Drywall" == t.userData.material ? (t.userData.topMaterial.map = null, t.userData.topMaterial.normalMap = null, t.userData.topMaterial.specular.setHex(14540253), t.userData.topMaterial.shininess = 6, t.userData.topMaterial.reflectivity = 0, t.userData.bottomMaterial.map = null, t.userData.bottomMaterial.normalMap = null, t.userData.bottomMaterial.specular.setHex(14540253), t.userData.bottomMaterial.shininess = 6, t.userData.bottomMaterial.reflectivity = 0) : (t.userData.topMaterial.map = null, t.userData.topMaterial.normalMap = t.userData.metalTexture, t.userData.topMaterial.specular.setHex(6250335), t.userData.topMaterial.shininess = 90, t.userData.topMaterial.reflectivity = .05, t.userData.topMaterial.normalMap.repeat.set(12 * a / 9, 1), t.userData.bottomMaterial.map = null, t.userData.bottomMaterial.normalMap = t.userData.metalTexture, t.userData.bottomMaterial.specular.setHex(6250335), t.userData.bottomMaterial.shininess = 90, t.userData.bottomMaterial.reflectivity = .05, t.userData.bottomMaterial.normalMap.repeat.set(12 * a / 9, 1)), t.userData.topMaterial.needsUpdate = !0, t.userData.bottomMaterial.needsUpdate = !0
}
}))
}
function ro() {
this.addWindow3x4 = function() {
l("window3x4")
}, this.addWindow3x4Grid = function() {
l("window3x4Grid")
}, this.addWindow3x4Shutters = function() {
l("window3x4Shutters")
}, this.addWindow4x3 = function() {
l("window4x3")
}, this.addWindow4x3Grid = function() {
l("window4x3Grid")
}, this.addWindow4x3Shutters = function() {
l("window4x3Shutters")
}, this.addWindowPicture = function() {
l("windowPicture")
}, this.addWindowSlider = function() {
l("windowSlider")
}, this.addWindowCasement = function() {
l("windowCasement")
}, this.addWindowDoubleHung = function() {
l("windowDoubleHung")
}, this.addWindowSingleHung = function() {
l("windowSingleHung")
}, this.addWindowTwinset = function() {
l("windowTwinset")
}, this.addWindowAwning = function() {
l("windowAwning")
}, this.addWindowHopper = function() {
l("windowHopper")
}, this.addWindowSlopeLeft = function() {
l("windowSlopeLeft")
}, this.addWindowSlopeRight = function() {
l("windowSlopeRight")
}, this.addLouver = function() {
l("windowLouver")
}, this.addWindowFramedOpening = function() {
l("windowFramedOpening")
}, this.addMansard = function() {
l("mansard")
}, this.addMansardHip = function() {
l("mansardHip")
}, this.addWalkDoorSolid = function() {
l("walkDoorSolid")
}, this.addWalkDoorSolidDouble = function() {
l("walkDoorSolidDouble")
}, this.addWalkDoorHalfGlass = function() {
l("walkDoorHalfGlass")
}, this.addWalkDoorHalfGlassDouble = function() {
l("walkDoorHalfGlassDouble")
}, this.addWalkDoor6Panel = function() {
l("walkDoor6Panel")
}, this.addWalkDoor6PanelDouble = function() {
l("walkDoor6PanelDouble")
}, this.addWalkDoor6Lite = function() {
l("walkDoor6Lite")
}, this.addWalkDoor9Lite = function() {
l("walkDoor9Lite")
}, this.addWalkDoor9LiteDouble = function() {
l("walkDoor9LiteDouble")
}, this.addWalkDoorSlidingGlassDouble = function() {
l("walkDoorSlidingGlassDouble")
}, this.addWalkDoorFrenchDouble = function() {
l("walkDoorFrenchDouble")
}, this.addWalkDoorAllGlass = function() {
l("walkDoorAllGlass")
}, this.addWalkDoorAllGlassDouble = function() {
l("walkDoorAllGlassDouble")
}, this.addWalkDoorCrossbuck = function() {
l("walkDoorCrossbuck")
}, this.addWalkDoorEquine = function() {
l("walkDoorEquine")
}, this.addWalkDoorFramedOpening = function() {
l("walkDoorFramedOpening")
}, this.addGarageOverheadPanel = function() {
l("garageOverheadPanel")
}, this.addGarageOverheadPanelWindow = function() {
l("garageOverheadPanelWindow")
}, this.addGarageOverheadFlat = function() {
l("garageOverheadFlat")
}, this.addGarageOverheadFlatWindow = function() {
l("garageOverheadFlatWindow")
}, this.addGarageOverheadFlatModern = function() {
l("garageOverheadFlatModern")
}, this.addGarageOverheadRibbed = function() {
l("garageOverheadRibbed")
}, this.addGarageSlide = function() {
l("garageSlide")
}, this.addGarageSlideLeft = function() {
l("garageSlideLeft")
}, this.addGarageSlideRight = function() {
l("garageSlideRight")
}, this.addGarageSlideCrossbuck = function() {
l("garageSlideCrossbuck")
}, this.addGarageBiFold = function() {
l("garageBiFold")
}, this.addGarageHydraulic = function() {
l("garageHydraulic")
}, this.addGarageRollUp = function() {
l("garageRollUp")
}, this.addGarageFramedOpening = function() {
l("garageFramedOpening")
}
}
function l(e, t) {
t = t || !1, "mansard" === (e = e || !1) || "mansardHip" === e ? Ka(e, 8, t) : e.startsWith("window") ? Ka(e, 5, t) : (e.startsWith("walkDoor") || e.startsWith("garage")) && Ka(e, 0, t)
}
function so(e, t) {
for (var a = 0; a < t.length; a++)
if (t[a] === e) return !0;
return !1
}
function lo(t) {
t.userData.hasOwnProperty("hasBoundingBox") && t.userData.hasBoundingBox && so(t.userData.selectionBox, La) && (La = La.filter(function(e) {
return e != t.userData.selectionBox
})), so(t, La) && (La = La.filter(function(e) {
return e != t
}))
}
function ho() {
var t = [];
for (let e = 0; e < La.length; e++) null !== La[e].parent && La[e].parent !== ia && null !== La[e].parent.parent && t.push(La[e]);
La = t
}
function co(a) {
if (null !== a) {
let t;
if (lo(a), void 0 !== a.children)
if (0 < a.children.length) {
t = a.parent;
for (let e = 0; e < a.children.length; e++) co(a.children[e]);
if (a.geometry && (ia.remove(a.geometry), a.geometry.dispose(), a.geometry = void 0), void 0 !== a.material && 0 < a.material.length)
for (let e = 0; e < a.material.length; e++) a.material[e] && (a.material[e].map && (ia.remove(a.material[e].map), a.material[e].map.dispose(), a.material[e].map = void 0), t.remove(a.material[e]), a.material[e].dispose(), a.material[e] = void 0);
else a.material.map && (ia.remove(a.material.map), a.material.map.dispose(), a.material.map = void 0), t.remove(a.material), a.material.dispose(), a.material = void 0
} else {
if (t = a.parent, 0 < a.material.length)
for (let e = 0; e < a.material.length; e++) a.material[e] && (a.material[e].map && (ia.remove(a.material[e].map), a.material[e].map.dispose(), a.material[e].map = void 0), t.remove(a.material[e]), a.material[e].dispose(), a.material[e] = void 0);
else a.material.map && (ia.remove(a.material.map), a.material.map.dispose(), a.material.map = void 0), t.remove(a.material), a.material.dispose(), a.material = void 0;
a.geometry && (t.remove(a.geometry), a.geometry.dispose(), a.geometry = void 0)
}
}(parent = a.parent).remove(a)
}
function po(t) {
for (let e = t.children.length - 1; 0 <= e; e--) t.remove(t.children[e])
}
function mo(i = {}) {
try {
var n = M.aspect,
r = W.getSize(new THREE.Vector2);
let e = r.x,
t = r.y,
a = .92,
o = !1;
return i.hasOwnProperty("width") && Number.isInteger(i.width) && (e = i.width, o = !0), i.hasOwnProperty("height") && Number.isInteger(i.height) && (t = i.height, o = !0), i.hasOwnProperty("compression") && !isNaN(parseFloat(i.compression)) && (a = parseFloat(i.compression)), o && (M.aspect = e / t, W.setSize(e, t, !1), M.updateProjectionMatrix(), W.autoClear = !1, W.render(ia, M)), Mt = W.domElement.toDataURL("image/jpeg", a), o && (M.aspect = n, W.setSize(r, !1), M.updateProjectionMatrix(), W.autoClear = !0, W.render(ia, M)), Mt
} catch (e) {
console.log(e)
}
}
function go() {
setTimeout(function() {
mo({
width: 1920,
height: 800,
compression: .55
}), $("#printImage").html(''), Wt = !1, uo(), setTimeout(function() {
window.print()
}, 100)
}, 50)
}
function uo() {
let e = "";
var t, r = {
mansard: "Mansard Standard",
mansardHip: "Mansard Hip End",
window3x4: "Window (3x4)",
window3x4Grid: "Window (3x4) w/ Grid",
window3x4Shutters: "Window (3x4) w/ Shuters",
window4x3: "Window (4x3)",
window4x3Grid: "Window (4x3) w/ Grid",
window4x3Shutters: "Window (4x3) w/ Shuters",
windowPicture: "Picture Window",
windowSlider: "Slider Window",
windowCasement: "Casement Window",
windowDoubleHung: "Double Hung Window",
windowSingleHung: "Single Hung Window",
windowTwinset: "Twinset Window",
windowAwning: "Awning Window",
windowHopper: "Hopper Window",
windowSlopeLeft: "Left Slope Window",
windowSlopeRight: "Right Slope Window",
windowLouver: "Louver",
windowFramedOpening: "Window Frame Out",
walkDoorSolid: "Walk Door Solid",
walkDoorSolidDouble: "Walk Door Solid Double",
walkDoorHalfGlass: "Walk Door Half Lite",
walkDoorHalfGlassDouble: "Walk Door Half Lite Double",
walkDoor6Panel: "Walk Door 6-Panel",
walkDoor6PanelDouble: "Walk Door 6-Panel Double",
walkDoor6Lite: "Walk Door 6-Lite",
walkDoor9Lite: "Walk Door 9-Lite",
walkDoor9LiteDouble: "Walk Door 9-Lite Double",
walkDoorSlidingGlassDouble: "Sliding Glass Patio Door",
walkDoorFrenchDouble: "French Double Door",
walkDoorAllGlass: "Walk Door All Glass",
walkDoorAllGlassDouble: "Walk Door All Glass Double",
walkDoorCrossbuck: "Walk Door Crossbuck",
walkDoorEquine: "Dutch Door Equine",
walkDoorFramedOpening: "Walk Door Frame Out",
garageOverheadPanel: "Overhead Panel Door",
garageOverheadPanelWindow: "Overhead Panel Window Door",
garageOverheadFlat: "Overhead Commercial Door",
garageOverheadFlat: "Overhead Flat Window Door",
garageOverheadFlatModern: "Overhead Modern Door",
garageOverheadRibbed: "Overhead Ribbed Door",
garageSlide: "Sliding Doors",
garageSlideLeft: "Sliding Door Left",
garageSlideRight: "Sliding Door Right",
garageSlideCrossbuck: "Sliding Crossbuck Doors",
garageBiFold: "Bi-Fold Door",
garageHydraulic: "Hydraulic Door",
garageRollUp: "Roll Up Door",
garageFramedOpening: "Framed Opening",
interiorWall: "Interior Wall",
interiorDoor: "Interior Door"
},
s = "";
for (t in da) da.hasOwnProperty(t) && t.lastIndexOf("Qty", t.length - 3) === t.length - 3 && 0 < da[t] && (s += r[t.replace("Qty", "")] + " Qty: " + da[t] + "
");
s += "
Item Sizes:
";
let a = "",
o = "";
ia.traverse(function(o) {
if (o instanceof THREE.Mesh) {
if ((o.name.startsWith("interior") || o.name.startsWith("mansard") || "wind" === o.name.substring(0, 4) || "walk" === o.name.substring(0, 4) || "gara" === o.name.substring(0, 4)) && o.name.lastIndexOf("-clone", o.name.length - 6) === o.name.length - 6) {
var e = o.name.replace("-clone", ""),
i = 1,
n = 1;
let t = !1,
a = !1;
if ("window3x4" === e ? (i = 3, n = 4) : "window4x3" === e ? (i = 4, n = 3) : "window3x4Grid" === e ? (i = 3, n = 4) : "window4x3Grid" === e ? (i = 4, n = 3) : "window3x4Shutters" === e ? (i = 3, n = 4) : "window4x3Shutters" === e ? (i = 4, n = 3) : e.startsWith("walk") ? (i = o.userData.scale.x, n = o.userData.scale.y) : "gara" === e.substring(0, 4) ? n = i = 10 : e.startsWith("mansardHip") ? (i = 5, n = 2) : e.startsWith("mansard") ? (i = 1, n = 2) : e.startsWith("interiorWall") ? (i = o.userData.width, n = o.userData.height) : e.startsWith("interiorDoor") && (i = 3, n = 7), e.startsWith("walk") && o.hasOwnProperty("morphTargetDictionary") && o.morphTargetDictionary.hasOwnProperty("width") ? i = Math.round(12 * (i + o.morphTargetInfluences[o.morphTargetDictionary.width])) : !e.startsWith("window") && !e.startsWith("mansard") && o.hasOwnProperty("morphTargetDictionary") && o.morphTargetDictionary.hasOwnProperty("width") && (i = parseFloat((i + 10 * o.morphTargetInfluences[o.morphTargetDictionary.width] * 2).toFixed(2))), e.startsWith("mansard") ? (i = parseFloat((i + o.morphTargetInfluences[o.morphTargetDictionary.width]).toFixed(2)), n = parseFloat((n + o.morphTargetInfluences[o.morphTargetDictionary.depth]).toFixed(2))) : e.startsWith("walk") && o.hasOwnProperty("morphTargetDictionary") && o.morphTargetDictionary.hasOwnProperty("height") ? n = Math.round(12 * (n + o.morphTargetInfluences[o.morphTargetDictionary.height])) : e.startsWith("garage") && (n = parseFloat((n + 10 * o.morphTargetInfluences[o.morphTargetDictionary.height]).toFixed(2))), e.startsWith("window")) {
i = parseFloat((i + o.morphTargetInfluences[o.morphTargetDictionary.width]).toFixed(2)), n = parseFloat((n + o.morphTargetInfluences[o.morphTargetDictionary.height]).toFixed(2));
for (let e = 0; e < o.material.length; e++) "WindowGrid" === o.material[e].name && (t = o.material[e].visible), "Shutters" === o.material[e].name && (a = o.material[e].visible)
}
s = s + r[e] + ": w" + i + "' x h" + n + "'", void 0 !== t && t && (s += " with grid"), void 0 !== a && a && (s += " with shutters"), s += "
"
}
o.name.startsWith("porch") && o.name.endsWith("-clone") && o.visible && ("porchWrapHip" == o.userData.masterObjectName ? a += "" + J[o.userData.porchSide].abbr + " Wrap Hip Porch" : "porchWrap" == o.userData.masterObjectName ? a += "" + J[o.userData.porchSide].abbr + " Wrap Porch" : "porch" == o.userData.masterObjectName && (a += "" + J[o.userData.porchSide].abbr + " Porch"), a += " Width: " + o.userData.width + ",", "porch" !== o.userData.masterObjectName && (a += " length: " + o.userData.depth + "',"), a += " Height: " + Math.round(4 * o.userData.height) / 4 + "',", da.allowLeanToCeilingHeight && (a += " Ceiling Height:" + o.userData.ceilingHeight + "',"), a = (a = (a += " Porch Depth: " + o.userData.porchDepth + "',") + " Porch Roof Pitch: " + o.userData.porchPitch + "',") + " Porch Overhang: " + o.userData.porchOverhang + "',", o.userData.postMiter && (a += " Post Miters,"), o.userData.postWrap && (a += " Wrapped Posts"), o.userData.posts || (a += " No Posts"), a += "
")
}
});
var i = "",
n = (da.hasOwnProperty("postFooting") && (i += "Post Footing: " + da.postFooting + "
"), da.hasOwnProperty("postType") && (i += "Post Type: " + da.postType + "
"), da.hasOwnProperty("frameConstruction") && (i += "Frame Type: " + da.frameConstruction + "
"), da.hasOwnProperty("columnSize") && (i += "Column Size: " + da.columnSize + "
"), da.hasOwnProperty("purlinType") && (i += "Purlin Type: " + da.purlinType + "
"), da.hasOwnProperty("wallPanelType") && (i += "Wall Panel Type: " + da.wallPanelType + "
"), da.hasOwnProperty("roofPanelType") && (i += "Roof Panel Type: " + da.roofPanelType + "
"), da.hasOwnProperty("snowLoad") && "None" !== da.snowLoad && (i += "Snow Load: " + da.snowLoad + "lbs/ft²
"), da.hasOwnProperty("windLoad") && "None" !== da.windLoad && (i += "Wind Load: " + da.windLoad + "mph
"), da.hasOwnProperty("baseTrim") && da.baseTrim && (i += "Base Trim: Yes
"), da.hasOwnProperty("permits") && da.baseTrim && (i += "Permits: Yes
"), da.hasOwnProperty("engineerPlans") && da.baseTrim && (i += "Engineer Plans: Yes
"), da.hasOwnProperty("clearingLand") && da.baseTrim && (i += "Clearing Land: Yes
"), da.hasOwnProperty("sitePrep") && da.baseTrim && (i += "Site Prep: Yes
"), da.hasOwnProperty("concreteFoundation") && da.baseTrim && (i += "Concrete Foundation: Yes
"), da.hasOwnProperty("concreteApproach") && da.baseTrim && (i += "Concrete Approach: Yes
"), da.hasOwnProperty("gravel") && da.baseTrim && (i += "Gravel: Yes
"), da.hasOwnProperty("asphalt") && da.baseTrim && (i += "Asphalt: Yes
"), da.hasOwnProperty("masonry") && da.baseTrim && (i += "Masonry: Yes
"), "");
(da.wainscot1 || da.wainscot2 || da.wainscot3 || da.wainscot4) && (n = "