@colijnit/homedecorator 262.1.2 → 262.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/plugins/render/render-progress/render-progress.component.scss +57 -10
- package/app/plugins/room-planner/components/configuration-preset-loader/configuration-preset-loader.component.scss +65 -0
- package/fesm2022/colijnit-homedecorator.mjs +1029 -1238
- package/fesm2022/colijnit-homedecorator.mjs.map +1 -1
- package/index.d.ts +133 -174
- package/package.json +2 -2
|
@@ -82,7 +82,7 @@ import { DecoNodeType } from '@colijnit/configuratorapi/build/enum/deco-node-typ
|
|
|
82
82
|
import JSZip from 'jszip';
|
|
83
83
|
import { Answer } from '@colijnit/configuratorapi/build/model/answer';
|
|
84
84
|
import { SelectorStructure } from '@colijnit/configuratorapi/build/model/selector-structure.bo';
|
|
85
|
-
import { Evaluator, Brush,
|
|
85
|
+
import { Evaluator, Brush, SUBTRACTION } from 'three-bvh-csg';
|
|
86
86
|
import { Line2 } from 'three/examples/jsm/lines/Line2.js';
|
|
87
87
|
import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js';
|
|
88
88
|
import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js';
|
|
@@ -253,8 +253,10 @@ var MessageType;
|
|
|
253
253
|
MessageType["ChangeArticleConfigurationType"] = "ChangeArticleConfigurationType";
|
|
254
254
|
MessageType["RenderUploadProgress"] = "RenderUploadProgress";
|
|
255
255
|
MessageType["RenderUploadFinished"] = "RenderUploadFinished";
|
|
256
|
+
MessageType["RenderFinished"] = "RenderFinished";
|
|
256
257
|
MessageType["RemoveSlowConnectionToast"] = "RemoveSlowConnectionToast";
|
|
257
258
|
MessageType["OpenConfigurator"] = "OpenConfigurator";
|
|
259
|
+
MessageType["LoadConfigurationFromPreset"] = "LoadConfigurationFromPreset";
|
|
258
260
|
})(MessageType || (MessageType = {}));
|
|
259
261
|
|
|
260
262
|
class Preset {
|
|
@@ -3663,6 +3665,7 @@ class HomedecoratorAppEventService {
|
|
|
3663
3665
|
this.externalOpen = new Subject();
|
|
3664
3666
|
this.searchClick = new Subject();
|
|
3665
3667
|
this.shareProject = new Subject();
|
|
3668
|
+
this.configurationFromPresetLoaded = new BehaviorSubject(false);
|
|
3666
3669
|
}
|
|
3667
3670
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorAppEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3668
3671
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorAppEventService, providedIn: 'root' }); }
|
|
@@ -4372,6 +4375,9 @@ class HomedecoratorConnectorAdapterService {
|
|
|
4372
4375
|
return result.resultObject;
|
|
4373
4376
|
}
|
|
4374
4377
|
}
|
|
4378
|
+
async initForPreset(presetId, goodId, showLoader = true) {
|
|
4379
|
+
return await this._connector.initForPreset(presetId, goodId, showLoader);
|
|
4380
|
+
}
|
|
4375
4381
|
// public async addToCart(goodId: number, goodType: GoodType, instanceId: number, sessionId: string, quantity: number = 1): Promise<void> {
|
|
4376
4382
|
// const json: string = await this._getJSONFromArticleObject(goodId, goodType, instanceId, sessionId, quantity);
|
|
4377
4383
|
// this._appEventService.addToCart.next({article: json, quantity: 1});
|
|
@@ -7209,6 +7215,18 @@ class HomedecoratorConnectorService {
|
|
|
7209
7215
|
async getGoogleTranslation(sourceLang, targetLang, list) {
|
|
7210
7216
|
return await this._connector.getGoogleTranslation(sourceLang, targetLang, list);
|
|
7211
7217
|
}
|
|
7218
|
+
getExternalSourceFromId(externalSourceId) {
|
|
7219
|
+
return this._connector.getExternalSourceFromId(externalSourceId);
|
|
7220
|
+
}
|
|
7221
|
+
async getGoodIdFromArticleNr(sku) {
|
|
7222
|
+
return await this._connector.getGoodIdFromArticleNr(sku);
|
|
7223
|
+
}
|
|
7224
|
+
async initForPreset(presetId, goodId) {
|
|
7225
|
+
return await this._connector.initForPreset(presetId, goodId);
|
|
7226
|
+
}
|
|
7227
|
+
async getPublicParams(url, upId) {
|
|
7228
|
+
return await this._connector.getPublicParams(url, upId);
|
|
7229
|
+
}
|
|
7212
7230
|
_prepareSelectionsToDisplayImages() {
|
|
7213
7231
|
if (this.selectionsToDisplay && this.selectionsToDisplay.length > 0) {
|
|
7214
7232
|
for (let i = 0; i < this.selectionsToDisplay.length; i++) {
|
|
@@ -9841,8 +9859,8 @@ class OutputSettings {
|
|
|
9841
9859
|
}
|
|
9842
9860
|
class SceneSettings {
|
|
9843
9861
|
}
|
|
9844
|
-
|
|
9845
|
-
}
|
|
9862
|
+
class RenderSettings {
|
|
9863
|
+
}
|
|
9846
9864
|
class Camera {
|
|
9847
9865
|
}
|
|
9848
9866
|
class CameraDOF {
|
|
@@ -10047,7 +10065,7 @@ class ApiServiceModule {
|
|
|
10047
10065
|
};
|
|
10048
10066
|
}
|
|
10049
10067
|
_setRenderSettings(renderParameters) {
|
|
10050
|
-
const settings = new RenderSettings
|
|
10068
|
+
const settings = new RenderSettings();
|
|
10051
10069
|
settings.width = renderParameters.width;
|
|
10052
10070
|
settings.height = renderParameters.height;
|
|
10053
10071
|
settings.outputType = OutputType.Jpeg;
|
|
@@ -10057,7 +10075,7 @@ class ApiServiceModule {
|
|
|
10057
10075
|
return settings;
|
|
10058
10076
|
}
|
|
10059
10077
|
_setProductRenderSettings(renderParameters) {
|
|
10060
|
-
const settings = new RenderSettings
|
|
10078
|
+
const settings = new RenderSettings();
|
|
10061
10079
|
settings.width = renderParameters.width;
|
|
10062
10080
|
settings.height = renderParameters.height;
|
|
10063
10081
|
settings.outputType = OutputType.Jpeg;
|
|
@@ -14822,7 +14840,7 @@ class BaseWall extends Mesh {
|
|
|
14822
14840
|
this.remove(item);
|
|
14823
14841
|
this.onItems = this.onItems.filter(i => i !== item);
|
|
14824
14842
|
this.itemsChanged = true;
|
|
14825
|
-
this._reCreateWallGeometry();
|
|
14843
|
+
// this._reCreateWallGeometry();
|
|
14826
14844
|
}
|
|
14827
14845
|
resetRoom() {
|
|
14828
14846
|
this.oppositeCache.clear();
|
|
@@ -15106,12 +15124,26 @@ class BaseWall extends Mesh {
|
|
|
15106
15124
|
this.items
|
|
15107
15125
|
.filter((item) => item.getMaskedGeometry())
|
|
15108
15126
|
.forEach((item) => {
|
|
15109
|
-
|
|
15127
|
+
// Subtract the opening as a single material group. A multi-group mask (a BoxGeometry has 6
|
|
15128
|
+
// groups) makes SUBTRACTION emit triangles for only the groups that actually cut the wall,
|
|
15129
|
+
// leaving empty groups that crash the evaluator (assignBufferData reads an absent group).
|
|
15130
|
+
// Clone first so the item's own geometry is never mutated or disposed by the wall.
|
|
15131
|
+
const geo = item.getMaskedGeometry().clone();
|
|
15132
|
+
geo.clearGroups();
|
|
15110
15133
|
const holesBrush = new Brush(geo);
|
|
15134
|
+
holesBrush.material = this.material[this.frontMaterialIndex];
|
|
15111
15135
|
holesBrush.position.copy(item.position);
|
|
15112
15136
|
holesBrush.quaternion.copy(item.quaternion);
|
|
15113
15137
|
holesBrush.updateMatrixWorld();
|
|
15114
|
-
|
|
15138
|
+
try {
|
|
15139
|
+
this.brush = this._evaluator.evaluate(this.brush, holesBrush, SUBTRACTION);
|
|
15140
|
+
}
|
|
15141
|
+
catch (e) {
|
|
15142
|
+
// The mask produced no geometry - it doesn't intersect the wall (e.g. a transient placement
|
|
15143
|
+
// position before the item is positioned on the wall). SUBTRACTION then leaves an empty
|
|
15144
|
+
// material group that the evaluator chokes on. Skip this hole; the cut runs again once the
|
|
15145
|
+
// item is positioned correctly (see InWallItem.placeOnWall). this.brush is left untouched.
|
|
15146
|
+
}
|
|
15115
15147
|
this._tempHoles.push(holesBrush);
|
|
15116
15148
|
});
|
|
15117
15149
|
const newGeometry = this.brush.geometry;
|
|
@@ -15149,6 +15181,22 @@ class Wall extends BaseWall {
|
|
|
15149
15181
|
this.userData = new Object();
|
|
15150
15182
|
const cloned = new this.constructor(new Corner(this.start.x, this.start.y), new Corner(this.end.x, this.end.y), this.height, this.thickness, this.frontColor, this.backColor, this.version, this.frontTexture, this.backTexture, false);
|
|
15151
15183
|
Object3D.prototype.copy.call(cloned, this, recursive);
|
|
15184
|
+
// Object3D.copy does not carry over geometry, so the constructor's plain box (built with an
|
|
15185
|
+
// empty items list, i.e. without window/door openings) would survive. A recursive clone -
|
|
15186
|
+
// such as the scene clone used for GLB export - must preserve the CSG-cut geometry. Use an
|
|
15187
|
+
// owned copy so disposing the export scene cannot free the live wall's geometry. The
|
|
15188
|
+
// non-recursive clone (the intersection wall) intentionally keeps its solid box for raycasting.
|
|
15189
|
+
if (recursive && this.geometry) {
|
|
15190
|
+
const cutGeometry = this.geometry.clone();
|
|
15191
|
+
cloned.geometry = cutGeometry;
|
|
15192
|
+
// The constructor built colour-only materials (createTextures = false), so the live wall's
|
|
15193
|
+
// textures would be missing from the export. Copy the live materials, cloned together with
|
|
15194
|
+
// their textures, so the export scene owns its own copies - disposing that scene must not
|
|
15195
|
+
// free the textures still in use by the live wall.
|
|
15196
|
+
ObjectUtils.DisposeMaterial(cloned.material);
|
|
15197
|
+
const clonedMaterial = ObjectUtils.CloneMaterial(this.material, false);
|
|
15198
|
+
cloned.material = clonedMaterial;
|
|
15199
|
+
}
|
|
15152
15200
|
cloned.userData = tempUserData;
|
|
15153
15201
|
this.userData = tempUserData;
|
|
15154
15202
|
return cloned;
|
|
@@ -16990,6 +17038,9 @@ class WallItem extends Item {
|
|
|
16990
17038
|
else {
|
|
16991
17039
|
DistanceUtils.UpdateSideDistances(this.distancesObject, this, this.currentWall, this.worldPosVec.clone(), this.getHalfSize(), this.worldRotation.y);
|
|
16992
17040
|
}
|
|
17041
|
+
// The arrows are built in the item's x/y plane at z ~= 0 (the item origin). For an in-wall item that
|
|
17042
|
+
// origin is the wall centre, so push the whole group forward to the wall face like the labels.
|
|
17043
|
+
this.distancesObject.position.z = this._measurementZOffset();
|
|
16993
17044
|
this.add(this.distancesObject);
|
|
16994
17045
|
return null;
|
|
16995
17046
|
}
|
|
@@ -17031,12 +17082,20 @@ class WallItem extends Item {
|
|
|
17031
17082
|
}
|
|
17032
17083
|
return new Vector3();
|
|
17033
17084
|
}
|
|
17085
|
+
/**
|
|
17086
|
+
* Local z at which measurement labels/distance arrows are drawn so they sit just in front of the wall.
|
|
17087
|
+
* Surface-mounted items sit on the wall face, so a small offset suffices. In-wall items override this
|
|
17088
|
+
* (they are centred inside the wall, so the offset must clear half the wall thickness).
|
|
17089
|
+
*/
|
|
17090
|
+
_measurementZOffset() {
|
|
17091
|
+
return 0.01;
|
|
17092
|
+
}
|
|
17034
17093
|
_createHeightMeasurement() {
|
|
17035
17094
|
this.heightMesh = MeasurementUtils.makeHeightTextMesh(this.getHeight(), itemMeasurementsTextColor, itemMeasurementsTextSize, false, true);
|
|
17036
17095
|
this.heightMesh.geometry.computeBoundingBox();
|
|
17037
17096
|
const width = this.heightMesh.geometry.boundingBox.max.x - this.heightMesh.geometry.boundingBox.min.x;
|
|
17038
17097
|
this.heightMesh.name = this.heightMeshName;
|
|
17039
|
-
this.heightMesh.position.set(-this.halfSize.x - width, this.showDistances ? this._measurementYPositionOffset : 0,
|
|
17098
|
+
this.heightMesh.position.set(-this.halfSize.x - width, this.showDistances ? this._measurementYPositionOffset : 0, this._measurementZOffset());
|
|
17040
17099
|
this.add(this.heightMesh);
|
|
17041
17100
|
}
|
|
17042
17101
|
_createWidthMeasurement() {
|
|
@@ -17044,7 +17103,7 @@ class WallItem extends Item {
|
|
|
17044
17103
|
this.widthMesh.geometry.computeBoundingBox();
|
|
17045
17104
|
const width = this.widthMesh.geometry.boundingBox.max.x - this.widthMesh.geometry.boundingBox.min.x;
|
|
17046
17105
|
this.widthMesh.name = this.widthMeshName;
|
|
17047
|
-
this.widthMesh.position.set(0 - (width / 2), this.halfSize.y,
|
|
17106
|
+
this.widthMesh.position.set(0 - (width / 2), this.halfSize.y, this._measurementZOffset());
|
|
17048
17107
|
this.add(this.widthMesh);
|
|
17049
17108
|
}
|
|
17050
17109
|
_getMaskedGeometry() {
|
|
@@ -17233,6 +17292,8 @@ class InWallItem extends WallItem {
|
|
|
17233
17292
|
this._openCloseIndicatorColor = '#606E8C';
|
|
17234
17293
|
this._frameWidth = 0.07;
|
|
17235
17294
|
this._frameDepth = 0.1;
|
|
17295
|
+
/** Extra depth added on top of the wall thickness so the dynamically built mask always pierces the wall. */
|
|
17296
|
+
this._maskDepthMargin = 0.1;
|
|
17236
17297
|
this._isWindow = false;
|
|
17237
17298
|
this._doorpost = false;
|
|
17238
17299
|
this._setDefault();
|
|
@@ -17256,6 +17317,25 @@ class InWallItem extends WallItem {
|
|
|
17256
17317
|
ObjectUtils.DisposeMaterial(this.frameMaterial);
|
|
17257
17318
|
ObjectUtils.DisposeMaterial(this.doorMaterialFront);
|
|
17258
17319
|
ObjectUtils.DisposeMaterial(this.windowMaterial);
|
|
17320
|
+
if (this._customMaskGeometry) {
|
|
17321
|
+
this._customMaskGeometry.dispose();
|
|
17322
|
+
this._customMaskGeometry = undefined;
|
|
17323
|
+
}
|
|
17324
|
+
}
|
|
17325
|
+
/**
|
|
17326
|
+
* Custom doors/windows are built at runtime and have no GLB `_mask` mesh, so the base lookup finds
|
|
17327
|
+
* nothing usable. Return the dynamically generated opening mask instead. Build it lazily here so any
|
|
17328
|
+
* instance (incl. clones that never ran createCustomMesh) yields a mask as soon as the wall asks for
|
|
17329
|
+
* one - otherwise the wall is left solid for that item.
|
|
17330
|
+
*/
|
|
17331
|
+
getMaskedGeometry() {
|
|
17332
|
+
if (this.isCustom) {
|
|
17333
|
+
if (!this._customMaskGeometry && this.getWidth() > 0 && this.getHeight() > 0) {
|
|
17334
|
+
this._updateCustomMaskGeometry(this.getWidth(), this.getHeight());
|
|
17335
|
+
}
|
|
17336
|
+
return this._customMaskGeometry ? this._customMaskGeometry : null;
|
|
17337
|
+
}
|
|
17338
|
+
return super.getMaskedGeometry();
|
|
17259
17339
|
}
|
|
17260
17340
|
updateOpeningObject() {
|
|
17261
17341
|
if (this.openCloseIndicatorObject) {
|
|
@@ -17307,6 +17387,10 @@ class InWallItem extends WallItem {
|
|
|
17307
17387
|
this.createCustomMesh(this.getWidth(), this.getHeight());
|
|
17308
17388
|
}
|
|
17309
17389
|
super.placeOnWall(wall);
|
|
17390
|
+
// super.placeOnWall positions the item on the wall (_boundMove) only AFTER the initial addItem cut,
|
|
17391
|
+
// and _boundMove itself does not redraw. Re-cut now so the opening is subtracted at the item's final
|
|
17392
|
+
// position (the addItem cut ran at a transient position where the mask may not intersect the wall).
|
|
17393
|
+
this.redrawWall();
|
|
17310
17394
|
}
|
|
17311
17395
|
/** */
|
|
17312
17396
|
getWallOffset() {
|
|
@@ -17386,16 +17470,22 @@ class InWallItem extends WallItem {
|
|
|
17386
17470
|
return meshes;
|
|
17387
17471
|
}
|
|
17388
17472
|
else {
|
|
17389
|
-
|
|
17390
|
-
|
|
17391
|
-
|
|
17392
|
-
|
|
17393
|
-
|
|
17394
|
-
|
|
17395
|
-
|
|
17396
|
-
|
|
17397
|
-
|
|
17398
|
-
|
|
17473
|
+
return super.getVisibleMeshes();
|
|
17474
|
+
// const visibleMeshes: (Mesh)[] = [];
|
|
17475
|
+
// if (!this.visible) {
|
|
17476
|
+
// return [];
|
|
17477
|
+
// }
|
|
17478
|
+
// this.traverse(c => {
|
|
17479
|
+
// if (c.visible &&
|
|
17480
|
+
// !this.excludedMeshes.includes(c.name) &&
|
|
17481
|
+
// !ObjectUtils.ChildOf(c, this.heightMeshName) &&
|
|
17482
|
+
// !ObjectUtils.ChildOf(c, this.widthMeshName) &&
|
|
17483
|
+
// !ObjectUtils.ChildOf(c, this.distancesObjectName) &&
|
|
17484
|
+
// c instanceof Mesh) {
|
|
17485
|
+
// visibleMeshes.push(c);
|
|
17486
|
+
// }
|
|
17487
|
+
// });
|
|
17488
|
+
// return visibleMeshes;
|
|
17399
17489
|
}
|
|
17400
17490
|
}
|
|
17401
17491
|
async createTextureMaterial(options) {
|
|
@@ -17438,6 +17528,8 @@ class InWallItem extends WallItem {
|
|
|
17438
17528
|
createCustomMesh(width, height) {
|
|
17439
17529
|
const halfWidth = width / 2;
|
|
17440
17530
|
const halfFrame = (this._frameWidth / 2);
|
|
17531
|
+
// Rebuild the opening mask on every (re)build so it tracks the current size of the custom item.
|
|
17532
|
+
this._updateCustomMaskGeometry(width, height);
|
|
17441
17533
|
this.leftFrame = this._createFrameSide(this._frameWidth, this._getHeightFrame(height), this._frameDepth);
|
|
17442
17534
|
this.leftFrame.rotation.set(this._isWindow ? 180 * (Math.PI / 180) : 0, 0, 0);
|
|
17443
17535
|
this.leftFrame.position.x = -halfWidth + halfFrame;
|
|
@@ -17471,7 +17563,9 @@ class InWallItem extends WallItem {
|
|
|
17471
17563
|
}
|
|
17472
17564
|
this.customMesh = new THREE.Mesh(customGeo, this._isWindow ? this.windowMaterial : this.doorMaterialFront);
|
|
17473
17565
|
this.customMesh.castShadow = this._isWindow ? false : !this.isGlass;
|
|
17474
|
-
|
|
17566
|
+
// Windows are transparent glass: let them render in the normal (post-opaque) transparent pass so
|
|
17567
|
+
// you see through the opening. renderOrder -1 (before opaque) is kept for the opaque door panel.
|
|
17568
|
+
this.customMesh.renderOrder = this._isWindow ? 0 : -1;
|
|
17475
17569
|
this.customMesh.name = 'customMesh';
|
|
17476
17570
|
if (this._isWindow) {
|
|
17477
17571
|
this.customMesh.name += 'Window';
|
|
@@ -17591,17 +17685,22 @@ class InWallItem extends WallItem {
|
|
|
17591
17685
|
this.frameMaterial = new THREE.MeshPhongMaterial({ side: side, name: 'frameMaterial' });
|
|
17592
17686
|
this.frameMaterial.color = new THREE.Color(this.frameColor);
|
|
17593
17687
|
if (this._isWindow) {
|
|
17594
|
-
|
|
17688
|
+
// Name must contain 'glass' so MaterialUtils.ShowHideMaterials keeps it transparent when the wall
|
|
17689
|
+
// is shown - otherwise it forces transparent=false/opacity=1 and the pane looks solid.
|
|
17690
|
+
this.windowMaterial = new THREE.MeshPhongMaterial({ side: side, color: this.windowColor, name: 'windowGlassMaterial' });
|
|
17595
17691
|
this.windowMaterial.transparent = true;
|
|
17596
17692
|
this.windowMaterial.alphaTest = 0;
|
|
17597
17693
|
this.windowMaterial.opacity = 0.2;
|
|
17598
17694
|
this.windowMaterial.map = undefined;
|
|
17695
|
+
// Glass must not write depth, otherwise it occludes the view through the wall opening and the
|
|
17696
|
+
// pane looks solid instead of see-through.
|
|
17697
|
+
this.windowMaterial.depthWrite = false;
|
|
17599
17698
|
this.windowMaterial.needsUpdate = true;
|
|
17600
|
-
this.windowMaterial.side = THREE.FrontSide;
|
|
17699
|
+
// this.windowMaterial.side = THREE.FrontSide;
|
|
17601
17700
|
this.object.material = [this.frameMaterial, this.windowMaterial];
|
|
17602
17701
|
}
|
|
17603
17702
|
else {
|
|
17604
|
-
this.doorMaterialFront = new THREE.MeshPhongMaterial({ side: side, name: '
|
|
17703
|
+
this.doorMaterialFront = new THREE.MeshPhongMaterial({ side: side, name: 'doorGlassMaterialFront' });
|
|
17605
17704
|
this.doorMaterialFront.color = new THREE.Color(this.doorColor);
|
|
17606
17705
|
if (this._doorpost) {
|
|
17607
17706
|
this.doorMaterialFront.transparent = true;
|
|
@@ -17610,6 +17709,22 @@ class InWallItem extends WallItem {
|
|
|
17610
17709
|
this.object.material = [this.frameMaterial, this.doorMaterialFront];
|
|
17611
17710
|
}
|
|
17612
17711
|
}
|
|
17712
|
+
/**
|
|
17713
|
+
* Builds the geometry used to subtract the opening from the wall. It spans the full width/height of
|
|
17714
|
+
* the custom item and is made deeper than the wall (plus a margin) so the CSG subtraction always
|
|
17715
|
+
* pierces the wall completely. base-wall positions it via the item's own position/quaternion, so the
|
|
17716
|
+
* box is centred on the item origin (the opening centre on the wall plane).
|
|
17717
|
+
*/
|
|
17718
|
+
_updateCustomMaskGeometry(width, height) {
|
|
17719
|
+
const wallThickness = this.currentWall ? this.currentWall.thickness : 0.5;
|
|
17720
|
+
const maskDepth = wallThickness + (2 * this._maskDepthMargin);
|
|
17721
|
+
if (this._customMaskGeometry) {
|
|
17722
|
+
this._customMaskGeometry.dispose();
|
|
17723
|
+
}
|
|
17724
|
+
// The wall (base-wall) subtracts this as a single group, so the BoxGeometry's material groups are
|
|
17725
|
+
// irrelevant here - we only need a box of the right opening size and a depth that pierces the wall.
|
|
17726
|
+
this._customMaskGeometry = new BoxGeometry(width, height, maskDepth);
|
|
17727
|
+
}
|
|
17613
17728
|
_getHeightFrame(height) {
|
|
17614
17729
|
return height - (this._isWindow ? 2 * (this._frameWidth - 0.02) : this._frameWidth - 0.02);
|
|
17615
17730
|
}
|
|
@@ -17740,6 +17855,13 @@ class InWallItem extends WallItem {
|
|
|
17740
17855
|
this._createDepthMeasurement();
|
|
17741
17856
|
}
|
|
17742
17857
|
}
|
|
17858
|
+
/**
|
|
17859
|
+
* In-wall items sit centred inside the wall (getWallOffset() === 0), so the labels/arrows must clear
|
|
17860
|
+
* half the wall thickness to end up in front of the wall face instead of buried inside it.
|
|
17861
|
+
*/
|
|
17862
|
+
_measurementZOffset() {
|
|
17863
|
+
return (this.currentWall ? this.currentWall.thickness / 2 : 0) + 0.02;
|
|
17864
|
+
}
|
|
17743
17865
|
_createDepthMeasurement() {
|
|
17744
17866
|
const depth = this.opening && this.opening.double ? Math.round((this.getWidth() / 2) * 100) / 100 : this.getWidth();
|
|
17745
17867
|
this.depthMesh = MeasurementUtils.makeDepthTextMesh(depth, 0xFF00FF, 0.08, false, true);
|
|
@@ -22951,7 +23073,7 @@ class SceneEventService {
|
|
|
22951
23073
|
this._messageBusService.emit(MessageType.SaveState, { action: `3D ${action}` });
|
|
22952
23074
|
}), this._debouncedSaveState.pipe(debounceTime(200)).subscribe(() => {
|
|
22953
23075
|
this._hudService.updateLabelMeasurements();
|
|
22954
|
-
}), this._viewModeService.viewModeChanged.subscribe(mode => this.setExploreMode(mode === ViewMode.WalkThrough)), this._itemGroupService.objectAdded.subscribe((object) => this.setSelectedObject(object)), this._itemGroupService.grouped.subscribe((object) => this.setSelectedObject(object)), this._itemGroupService.ungrouped.subscribe(() => this.setSelectedObject(null)), this._messageBusService.subscribe(MessageType.ItemRemoved, () => this.setSelectedObject(null)), this._messageBusService.subscribe(MessageType.StartGroupObject, () => this._setGroupingMode(true)));
|
|
23076
|
+
}), this._viewModeService.viewModeChanged.subscribe(mode => this.setExploreMode(mode === ViewMode.WalkThrough)), this._itemGroupService.objectAdded.subscribe((object) => this.setSelectedObject(object)), this._itemGroupService.grouped.subscribe((object) => this.setSelectedObject(object)), this._itemGroupService.ungrouped.subscribe(() => this.setSelectedObject(null)), this._messageBusService.subscribe(MessageType.ItemRemoved, () => this.setSelectedObject(null)), this._messageBusService.subscribe(MessageType.StartGroupObject, () => this._setGroupingMode(true)), this._messageBusService.subscribe(MessageType.CancelGroupObject, () => this._setGroupingMode(false)));
|
|
22955
23077
|
}
|
|
22956
23078
|
setExploreMode(on = true) {
|
|
22957
23079
|
if (on) {
|
|
@@ -22998,7 +23120,25 @@ class SceneEventService {
|
|
|
22998
23120
|
}
|
|
22999
23121
|
this._switchState(SceneEventState.DND);
|
|
23000
23122
|
this._dragAndDropService.draggedStatus.dragEnter();
|
|
23001
|
-
|
|
23123
|
+
let screenPoint = new Vector2(x, y);
|
|
23124
|
+
const useViewportCentre = !z && x === 0 && y === 0 && !!this._element;
|
|
23125
|
+
if (useViewportCentre) {
|
|
23126
|
+
// The object library adds items with a (0,0) sentinel (there is no real cursor). Screen (0,0) is
|
|
23127
|
+
// the top-left corner, so the floor raycast lands at an arbitrary, camera-dependent spot. Use the
|
|
23128
|
+
// viewport centre instead.
|
|
23129
|
+
screenPoint = new Vector2(this._element.clientWidth / 2, this._element.clientHeight / 2);
|
|
23130
|
+
}
|
|
23131
|
+
const vec3 = z ? new Vector3(x, y, z) : this.intersectingVec3(screenPoint);
|
|
23132
|
+
if (useViewportCentre && isWallType(draggedData.type)) {
|
|
23133
|
+
// No cursor was used (library add), so there is no hit wall and getClosestWall() on a floor point
|
|
23134
|
+
// picks an arbitrary wall. Target the wall whose front the camera is looking at instead, and seed
|
|
23135
|
+
// it so the existing _changeWall() flow attaches the item to that wall. getClosestWall() itself is
|
|
23136
|
+
// left untouched (project loading via presets.service relies on it).
|
|
23137
|
+
const facingWall = this._wallMostFacingCamera();
|
|
23138
|
+
if (facingWall) {
|
|
23139
|
+
this._dragAndDropService.intersectedWall = { object: facingWall, point: vec3 ? vec3.clone() : new Vector3() };
|
|
23140
|
+
}
|
|
23141
|
+
}
|
|
23002
23142
|
if (this._dragAndDropService.draggedItem) {
|
|
23003
23143
|
this._dragAndDropService.draggedStatus.objectLoaded();
|
|
23004
23144
|
this._dragAndDropService.updateDraggedPosition(vec3);
|
|
@@ -23010,6 +23150,35 @@ class SceneEventService {
|
|
|
23010
23150
|
this._dragAndDropService.dragFloorDecoration(this._floorIntersection(this._sceneService.positionInSceneToScreen(vec3)));
|
|
23011
23151
|
}
|
|
23012
23152
|
}
|
|
23153
|
+
/**
|
|
23154
|
+
* The wall whose front face the camera is looking at most directly. Used to pick a sensible target
|
|
23155
|
+
* wall when an item is added without a cursor (object library). A wall's front normal is its +Z axis
|
|
23156
|
+
* in world space; the wall most facing the camera maximises frontNormal · (cameraPos - wallPos), which
|
|
23157
|
+
* naturally excludes the transparent near wall (its front points away from the camera).
|
|
23158
|
+
*/
|
|
23159
|
+
_wallMostFacingCamera() {
|
|
23160
|
+
const walls = this._wallService.walls;
|
|
23161
|
+
if (!walls || !walls.length) {
|
|
23162
|
+
return null;
|
|
23163
|
+
}
|
|
23164
|
+
const cameraPosition = this._cameraService.camera.position;
|
|
23165
|
+
const wallPosition = new Vector3();
|
|
23166
|
+
const frontNormal = new Vector3();
|
|
23167
|
+
const toCamera = new Vector3();
|
|
23168
|
+
let best = null;
|
|
23169
|
+
let bestDot = -Infinity;
|
|
23170
|
+
for (const wall of walls) {
|
|
23171
|
+
wall.getWorldPosition(wallPosition);
|
|
23172
|
+
wall.getWorldDirection(frontNormal).normalize();
|
|
23173
|
+
toCamera.subVectors(cameraPosition, wallPosition).normalize();
|
|
23174
|
+
const dot = frontNormal.dot(toCamera);
|
|
23175
|
+
if (dot > bestDot) {
|
|
23176
|
+
bestDot = dot;
|
|
23177
|
+
best = wall;
|
|
23178
|
+
}
|
|
23179
|
+
}
|
|
23180
|
+
return best;
|
|
23181
|
+
}
|
|
23013
23182
|
intersectingVec3(vec2, intersection) {
|
|
23014
23183
|
if (!intersection) {
|
|
23015
23184
|
const gIntersections = this._groundIntersections(vec2);
|
|
@@ -23443,7 +23612,9 @@ class SceneEventService {
|
|
|
23443
23612
|
}
|
|
23444
23613
|
_setGroupingMode(enableGrouping) {
|
|
23445
23614
|
this._groupingMode = enableGrouping;
|
|
23446
|
-
|
|
23615
|
+
if (this._groupingMode) {
|
|
23616
|
+
this._addToItemGroup(this._intersectedObject, this._prevSelectedObject);
|
|
23617
|
+
}
|
|
23447
23618
|
}
|
|
23448
23619
|
_getDraggedData() {
|
|
23449
23620
|
return this._dragAndDropService.draggedData;
|
|
@@ -28236,64 +28407,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
28236
28407
|
type: Injectable
|
|
28237
28408
|
}], ctorParameters: () => [{ type: ThreedInPhotoBuildService }, { type: ThreedInPhotoViewService }, { type: ThreedInPhotoConnectionService }, { type: ThreedInPhotoSceneService }, { type: ThreedInPhotoRenderService }, { type: i1$2.MatDialog }, { type: SceneEventService }, { type: CameraService }, { type: ViewModeService }] });
|
|
28238
28409
|
|
|
28239
|
-
var ConnectionStatus;
|
|
28240
|
-
(function (ConnectionStatus) {
|
|
28241
|
-
ConnectionStatus[ConnectionStatus["IsUndefined"] = 0] = "IsUndefined";
|
|
28242
|
-
ConnectionStatus[ConnectionStatus["IsConnected"] = 1] = "IsConnected";
|
|
28243
|
-
ConnectionStatus[ConnectionStatus["TryingToConnect"] = 2] = "TryingToConnect";
|
|
28244
|
-
ConnectionStatus[ConnectionStatus["IsDisConnected"] = 3] = "IsDisConnected";
|
|
28245
|
-
})(ConnectionStatus || (ConnectionStatus = {}));
|
|
28246
|
-
|
|
28247
|
-
var RenderStatus;
|
|
28248
|
-
(function (RenderStatus) {
|
|
28249
|
-
RenderStatus[RenderStatus["IsUndefined"] = 0] = "IsUndefined";
|
|
28250
|
-
RenderStatus[RenderStatus["IsRunning"] = 1] = "IsRunning";
|
|
28251
|
-
RenderStatus[RenderStatus["IsSuccess"] = 2] = "IsSuccess";
|
|
28252
|
-
RenderStatus[RenderStatus["IsStopped"] = 3] = "IsStopped";
|
|
28253
|
-
RenderStatus[RenderStatus["IsWaiting"] = 4] = "IsWaiting";
|
|
28254
|
-
})(RenderStatus || (RenderStatus = {}));
|
|
28255
|
-
|
|
28256
|
-
class RenderQueueItem {
|
|
28257
|
-
constructor() {
|
|
28258
|
-
this.startDateTime = new Date();
|
|
28259
|
-
this.rendered = false;
|
|
28260
|
-
this.renderProgress = 0;
|
|
28261
|
-
this.renderIterations = 0;
|
|
28262
|
-
this.renderStatus = RenderStatus.IsUndefined;
|
|
28263
|
-
}
|
|
28264
|
-
}
|
|
28265
|
-
|
|
28266
|
-
var ToastType;
|
|
28267
|
-
(function (ToastType) {
|
|
28268
|
-
ToastType[ToastType["Success"] = 0] = "Success";
|
|
28269
|
-
ToastType[ToastType["Warning"] = 1] = "Warning";
|
|
28270
|
-
ToastType[ToastType["Error"] = 2] = "Error";
|
|
28271
|
-
})(ToastType || (ToastType = {}));
|
|
28272
|
-
|
|
28273
|
-
class Toast {
|
|
28274
|
-
constructor() {
|
|
28275
|
-
this.type = ToastType.Success;
|
|
28276
|
-
}
|
|
28277
|
-
}
|
|
28278
|
-
|
|
28279
|
-
class RenderData {
|
|
28280
|
-
constructor() {
|
|
28281
|
-
this.cameraFOV = 45;
|
|
28282
|
-
}
|
|
28283
|
-
}
|
|
28284
|
-
|
|
28285
|
-
class RenderSettings {
|
|
28286
|
-
constructor() {
|
|
28287
|
-
this.camRotationX = 0.24;
|
|
28288
|
-
this.camRotationY = 0;
|
|
28289
|
-
this.environmentName = '';
|
|
28290
|
-
this.environmentHdr = '';
|
|
28291
|
-
this.environmentRotation = 0;
|
|
28292
|
-
this.environmentIntensity = null;
|
|
28293
|
-
this.extraLights = [];
|
|
28294
|
-
}
|
|
28295
|
-
}
|
|
28296
|
-
|
|
28297
28410
|
class ExportObject {
|
|
28298
28411
|
}
|
|
28299
28412
|
|
|
@@ -28385,6 +28498,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
28385
28498
|
type: Injectable
|
|
28386
28499
|
}], ctorParameters: () => [{ type: HomedecoratorSettingsService }, { type: HomedecoratorConnectorAdapterService }, { type: ThreedselectorService }] });
|
|
28387
28500
|
|
|
28501
|
+
var RenderStatus;
|
|
28502
|
+
(function (RenderStatus) {
|
|
28503
|
+
RenderStatus[RenderStatus["IsUndefined"] = 0] = "IsUndefined";
|
|
28504
|
+
RenderStatus[RenderStatus["IsRunning"] = 1] = "IsRunning";
|
|
28505
|
+
RenderStatus[RenderStatus["IsSuccess"] = 2] = "IsSuccess";
|
|
28506
|
+
RenderStatus[RenderStatus["IsStopped"] = 3] = "IsStopped";
|
|
28507
|
+
RenderStatus[RenderStatus["IsWaiting"] = 4] = "IsWaiting";
|
|
28508
|
+
})(RenderStatus || (RenderStatus = {}));
|
|
28509
|
+
|
|
28510
|
+
class RenderQueueItem {
|
|
28511
|
+
constructor() {
|
|
28512
|
+
this.startDateTime = new Date();
|
|
28513
|
+
this.rendered = false;
|
|
28514
|
+
this.renderProgress = 0;
|
|
28515
|
+
this.renderIterations = 0;
|
|
28516
|
+
this.renderStatus = RenderStatus.IsUndefined;
|
|
28517
|
+
}
|
|
28518
|
+
}
|
|
28519
|
+
|
|
28388
28520
|
class ToastService {
|
|
28389
28521
|
constructor(_dictionaryService) {
|
|
28390
28522
|
this._dictionaryService = _dictionaryService;
|
|
@@ -28401,597 +28533,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
28401
28533
|
type: Injectable
|
|
28402
28534
|
}], ctorParameters: () => [{ type: HomedecoratorDictionaryService }] });
|
|
28403
28535
|
|
|
28404
|
-
class RenderService {
|
|
28405
|
-
static MakeWindowMaterialTransparent(material) {
|
|
28406
|
-
// console.log(material);
|
|
28407
|
-
material.transparent = true;
|
|
28408
|
-
material.opacity = Math.min(material.opacity, 0.4);
|
|
28409
|
-
return material;
|
|
28410
|
-
}
|
|
28411
|
-
constructor(_settingsService, _exportService, _cameraService, _sceneService, _toastService, _messageBusService, _googleTagManager, _roomService, _floorService) {
|
|
28412
|
-
this._settingsService = _settingsService;
|
|
28413
|
-
this._exportService = _exportService;
|
|
28414
|
-
this._cameraService = _cameraService;
|
|
28415
|
-
this._sceneService = _sceneService;
|
|
28416
|
-
this._toastService = _toastService;
|
|
28417
|
-
this._messageBusService = _messageBusService;
|
|
28418
|
-
this._googleTagManager = _googleTagManager;
|
|
28419
|
-
this._roomService = _roomService;
|
|
28420
|
-
this._floorService = _floorService;
|
|
28421
|
-
this.renderModes = RenderModes;
|
|
28422
|
-
this.streaming = {};
|
|
28423
|
-
this.renderedRoomImages = [];
|
|
28424
|
-
this.connectionStatus = ConnectionStatus.IsUndefined;
|
|
28425
|
-
this.renders = [];
|
|
28426
|
-
this.cameraPositions = [];
|
|
28427
|
-
this.imageSizes = [
|
|
28428
|
-
{ id: 1, name: ' 720p (HD)', width: 1280, height: 720 },
|
|
28429
|
-
{ id: 2, name: '1080P (HD)', width: 1920, height: 1080 },
|
|
28430
|
-
{ id: 3, name: '1440p (2K)', width: 2560, height: 1440 },
|
|
28431
|
-
{ id: 4, name: '2160p (4K)', width: 4096, height: 2160 }
|
|
28432
|
-
];
|
|
28433
|
-
this.lightnings = [
|
|
28434
|
-
{ id: 1, name: 'Light', settings: [] },
|
|
28435
|
-
{ id: 2, name: 'Medium', settings: [] },
|
|
28436
|
-
{ id: 3, name: 'Heay', settings: [] }
|
|
28437
|
-
];
|
|
28438
|
-
this.renderEnvironments = [
|
|
28439
|
-
{ id: 1, name: 'None', hdrFile: '', intensity: 1.0 },
|
|
28440
|
-
{ id: 2, name: 'Modern city', hdrFile: 'canary_wharf_2k.hdr', intensity: 2.5 },
|
|
28441
|
-
{ id: 3, name: 'City park', hdrFile: 'dresden_moat_2k.hdr', intensity: 2.5 },
|
|
28442
|
-
{ id: 4, name: 'Night in the city', hdrFile: 'hansaplatz_2k.hdr', intensity: 1.0 },
|
|
28443
|
-
{ id: 5, name: 'Night in the countryside', hdrFile: 'kloppenheim_02_2k.hdr', intensity: 1.0 },
|
|
28444
|
-
{ id: 6, name: 'Forest', hdrFile: 'nagoya_wall_path_2k.hdr', intensity: 1.0 },
|
|
28445
|
-
{ id: 7, name: 'Snow', hdrFile: 'snowy_forest_path_01_2k.hdr', intensity: 1.0 },
|
|
28446
|
-
{ id: 8, name: 'Pasture', hdrFile: 'spruit_sunrise_2k.hdr', intensity: 1.0 },
|
|
28447
|
-
{ id: 9, name: 'Field', hdrFile: 'sunflowers_2k.hdr', intensity: 1.0 },
|
|
28448
|
-
{ id: 10, name: 'Old city and canals', hdrFile: 'tears_of_steel_bridge_2k.hdr', intensity: 1.0 },
|
|
28449
|
-
{ id: 11, name: 'Estate', hdrFile: 'tiergarten_2k.hdr', intensity: 1.0 },
|
|
28450
|
-
{ id: 12, name: 'Beach', hdrFile: 'umhlanga_sunrise_2k.hdr', intensity: 2.5 },
|
|
28451
|
-
{ id: 13, name: 'Residential area with park', hdrFile: 'urban_street_01_2k.hdr', intensity: 1.0 },
|
|
28452
|
-
{ id: 14, name: 'Residential area', hdrFile: 'urban_street_03_2k.hdr', intensity: 1.0 },
|
|
28453
|
-
];
|
|
28454
|
-
this.renderScenes = [
|
|
28455
|
-
{ id: 1, name: 'scene_grass_cycles_MRP', sceneAssetId: 'scene_grass_cycles_MRP' },
|
|
28456
|
-
{ id: 2, name: 'scene_lake_cycles_MRP', sceneAssetId: 'scene_lake_cycles_MRP' },
|
|
28457
|
-
{ id: 3, name: 'scene_sky_cycles_MRP', sceneAssetId: 'scene_sky_cycles_MRP' },
|
|
28458
|
-
{ id: 4, name: 'scene_garden_cycles_MRP', sceneAssetId: 'scene_garden_cycles_MRP' },
|
|
28459
|
-
{ id: 5, name: 'scene_nature_cycles_MRP', sceneAssetId: 'scene_nature_cycles_MRP' },
|
|
28460
|
-
{ id: 5, name: 'scene_01', sceneAssetId: 'scene_01' }
|
|
28461
|
-
];
|
|
28462
|
-
this._ceilingLightMargin = 0.5;
|
|
28463
|
-
this.selectedImageSize = 2;
|
|
28464
|
-
this.selectedEnvironment = 1;
|
|
28465
|
-
this.selectedRenderScene = this.renderScenes[0].sceneAssetId;
|
|
28466
|
-
this.blendFilesRender = this._settingsService.settings.blendFilesRender;
|
|
28467
|
-
this.positions = 1;
|
|
28468
|
-
this.save = false;
|
|
28469
|
-
this.renderRoomImageChanged = new BehaviorSubject('');
|
|
28470
|
-
this.renderingStarted = new Subject();
|
|
28471
|
-
this.renderImageChanged = new BehaviorSubject('');
|
|
28472
|
-
this.renderQueue = [];
|
|
28473
|
-
this.currentQueueRenderItem = new RenderQueueItem();
|
|
28474
|
-
this.currentProductHash = '';
|
|
28475
|
-
this._subs = [];
|
|
28476
|
-
this.sceneData = {};
|
|
28477
|
-
this._subs.push(this._settingsService.settingsLoaded.subscribe((loaded) => {
|
|
28478
|
-
if (loaded) {
|
|
28479
|
-
this.serverData = this._settingsService.settings.renderParameters;
|
|
28480
|
-
if (this.serverData) {
|
|
28481
|
-
this.serverData.setup = false;
|
|
28482
|
-
this.checkConnection();
|
|
28483
|
-
this._renderServiceHeartBeat();
|
|
28484
|
-
}
|
|
28485
|
-
}
|
|
28486
|
-
}));
|
|
28487
|
-
}
|
|
28488
|
-
ngOnDestroy() {
|
|
28489
|
-
this._subs.forEach(s => s.unsubscribe());
|
|
28490
|
-
}
|
|
28491
|
-
async checkConnection() {
|
|
28492
|
-
//
|
|
28493
|
-
// if (this.service.validate() === false) {
|
|
28494
|
-
//
|
|
28495
|
-
// try {
|
|
28496
|
-
//
|
|
28497
|
-
// const url = `${(this.serverData.secure ? 'wss' : 'ws')}://${this.serverData.host}:${this.serverData.port}/service/`;
|
|
28498
|
-
// await this.service.connect(url).then(() => {
|
|
28499
|
-
// this.serverData.setup = true;
|
|
28500
|
-
// }).catch((rej) => {
|
|
28501
|
-
// });
|
|
28502
|
-
//
|
|
28503
|
-
// this.service.on('error', async (object) => {
|
|
28504
|
-
// this.serverData.setup = false;
|
|
28505
|
-
// if (this.connectionStatus !== ConnectionStatus.TryingToConnect) {
|
|
28506
|
-
// this.connectionStatus = ConnectionStatus.IsDisConnected;
|
|
28507
|
-
// }
|
|
28508
|
-
// await this._onRenderError();
|
|
28509
|
-
// });
|
|
28510
|
-
// this.service.on('close', async (object) => {
|
|
28511
|
-
// this.serverData.setup = false;
|
|
28512
|
-
// if (this.connectionStatus !== ConnectionStatus.TryingToConnect) {
|
|
28513
|
-
// this.connectionStatus = ConnectionStatus.IsDisConnected;
|
|
28514
|
-
// }
|
|
28515
|
-
// await this._onRenderClose();
|
|
28516
|
-
// });
|
|
28517
|
-
//
|
|
28518
|
-
// } catch (err) {
|
|
28519
|
-
//
|
|
28520
|
-
// this.serverData.setup = false;
|
|
28521
|
-
// }
|
|
28522
|
-
// }
|
|
28523
|
-
}
|
|
28524
|
-
_renderServiceHeartBeat() {
|
|
28525
|
-
setInterval(() => {
|
|
28526
|
-
if (this.connectionStatus === ConnectionStatus.IsDisConnected) {
|
|
28527
|
-
if (this._settingsService.settings.options.showRenderConnectionInfo) {
|
|
28528
|
-
const toast = new Toast();
|
|
28529
|
-
toast.message = 'CONNECTION_WITH_RENDER_SERVICE_LOST';
|
|
28530
|
-
toast.type = ToastType.Error;
|
|
28531
|
-
this._toastService.showToast(toast);
|
|
28532
|
-
}
|
|
28533
|
-
this.connectionStatus = ConnectionStatus.TryingToConnect;
|
|
28534
|
-
this.checkConnection();
|
|
28535
|
-
}
|
|
28536
|
-
else if (this.connectionStatus === ConnectionStatus.TryingToConnect) {
|
|
28537
|
-
if (this.serverData.setup === false) {
|
|
28538
|
-
this._messageBusService.emit(MessageType.RenderServiceTryToConnect);
|
|
28539
|
-
this.checkConnection();
|
|
28540
|
-
}
|
|
28541
|
-
else {
|
|
28542
|
-
if (this._settingsService.settings.options.showRenderConnectionInfo) {
|
|
28543
|
-
const toast = new Toast();
|
|
28544
|
-
toast.message = 'RE_CONNECTED_WITH_RENDER_SERVICE';
|
|
28545
|
-
toast.type = ToastType.Success;
|
|
28546
|
-
this._toastService.showToast(toast);
|
|
28547
|
-
}
|
|
28548
|
-
this.connectionStatus = ConnectionStatus.IsConnected;
|
|
28549
|
-
}
|
|
28550
|
-
}
|
|
28551
|
-
else if (this.connectionStatus === ConnectionStatus.IsConnected) {
|
|
28552
|
-
this._messageBusService.emit(MessageType.RenderServiceConnected);
|
|
28553
|
-
}
|
|
28554
|
-
}, 2000);
|
|
28555
|
-
}
|
|
28556
|
-
getRenderParameters(type) {
|
|
28557
|
-
const params = new RenderData();
|
|
28558
|
-
if (type !== RenderModes.RenderIone) {
|
|
28559
|
-
const currentImageSize = this.getImageSizeOnId(this.selectedImageSize);
|
|
28560
|
-
params.imageWidth = Number(currentImageSize.width);
|
|
28561
|
-
params.imageHeight = Number(currentImageSize.height);
|
|
28562
|
-
}
|
|
28563
|
-
params.configuredItem = this._getConfiguredFurnitureItem();
|
|
28564
|
-
params.cameraFOV = this._cameraService.camera.fov;
|
|
28565
|
-
params.type = type;
|
|
28566
|
-
if (type === this.renderModes.RenderShop) {
|
|
28567
|
-
params.cameraFOV = 30;
|
|
28568
|
-
if (this._settingsService.settings.renderParameters.settings !== undefined) {
|
|
28569
|
-
params.settings = this._settingsService.settings.renderParameters.settings;
|
|
28570
|
-
}
|
|
28571
|
-
}
|
|
28572
|
-
else if (type === this.renderModes.RenderRoom) {
|
|
28573
|
-
const renderEnvironment = this.getRenderEnvironmentOnId(this.selectedEnvironment);
|
|
28574
|
-
params.settings = new RenderSettings();
|
|
28575
|
-
params.settings.environmentHdr = renderEnvironment.hdrFile;
|
|
28576
|
-
params.settings.environmentIntensity = renderEnvironment.intensity;
|
|
28577
|
-
const floorPlanHasRooms = this._roomService.rooms[0];
|
|
28578
|
-
const ceilingOrFloor = floorPlanHasRooms ? this._roomService.rooms[0].ceilingPlane : this._floorService.getFloorPlane();
|
|
28579
|
-
const bb = new Box3().setFromObject(ceilingOrFloor);
|
|
28580
|
-
const bbSize = new Vector3();
|
|
28581
|
-
bb.getSize(bbSize);
|
|
28582
|
-
params.settings.extraLights = [
|
|
28583
|
-
{
|
|
28584
|
-
x1: bb.min.x + this._ceilingLightMargin,
|
|
28585
|
-
z1: bb.min.z + this._ceilingLightMargin,
|
|
28586
|
-
x2: bb.max.x - this._ceilingLightMargin,
|
|
28587
|
-
z2: bb.max.z - this._ceilingLightMargin,
|
|
28588
|
-
height: floorPlanHasRooms ? ceilingOrFloor.position.y : 2.6,
|
|
28589
|
-
}
|
|
28590
|
-
];
|
|
28591
|
-
}
|
|
28592
|
-
return params;
|
|
28593
|
-
}
|
|
28594
|
-
// The GLTFExporter needs lights to be configured like this,
|
|
28595
|
-
// otherwise they will all point in the same direction.
|
|
28596
|
-
_fixLight(element) {
|
|
28597
|
-
element.target.parent = element;
|
|
28598
|
-
element.lookAt(element.target.position);
|
|
28599
|
-
element.target.position.x = 0;
|
|
28600
|
-
element.target.position.y = 0;
|
|
28601
|
-
element.target.position.z = -1;
|
|
28602
|
-
}
|
|
28603
|
-
_elementMustBeRemoved(element) {
|
|
28604
|
-
if (element.type === 'PerspectiveCamera') {
|
|
28605
|
-
return true;
|
|
28606
|
-
}
|
|
28607
|
-
if (!element.name) {
|
|
28608
|
-
return false;
|
|
28609
|
-
}
|
|
28610
|
-
const lcName = element.name.toLowerCase();
|
|
28611
|
-
// elements with a name starting with c_ are connectors,
|
|
28612
|
-
// which should not be visible.
|
|
28613
|
-
if (lcName.startsWith('c_')) {
|
|
28614
|
-
return true;
|
|
28615
|
-
}
|
|
28616
|
-
if (element.name.startsWith('snapping-preview-mesh')) {
|
|
28617
|
-
return true;
|
|
28618
|
-
}
|
|
28619
|
-
return false;
|
|
28620
|
-
}
|
|
28621
|
-
async _exportToGlb() {
|
|
28622
|
-
const assetPath = this._settingsService.settings.assetPath;
|
|
28623
|
-
// The ground plane looks odd in renders.
|
|
28624
|
-
// The hud-ring and hud-circle are the walkthrough mode marker,
|
|
28625
|
-
// which is not supposed to be rendered.
|
|
28626
|
-
const elementsToRemove = ['ground-plane', 'hud-ring', 'hud-circle'];
|
|
28627
|
-
let scene;
|
|
28628
|
-
try {
|
|
28629
|
-
scene = this._sceneService.scene.clone();
|
|
28630
|
-
elementsToRemove.forEach(elementName => {
|
|
28631
|
-
const selectedObject = scene.getObjectByName(elementName);
|
|
28632
|
-
scene.remove(selectedObject);
|
|
28633
|
-
});
|
|
28634
|
-
// Using the parents, because scene.remove does not seem to work correctly.
|
|
28635
|
-
const parents = [];
|
|
28636
|
-
scene.traverse(element => {
|
|
28637
|
-
if (element instanceof DirectionalLight || element instanceof SpotLight) {
|
|
28638
|
-
this._fixLight(element);
|
|
28639
|
-
}
|
|
28640
|
-
if (element.visible === false) {
|
|
28641
|
-
// console.log("Element " + element.name + " was invisible, making it visible.");
|
|
28642
|
-
element.visible = true;
|
|
28643
|
-
}
|
|
28644
|
-
if (element instanceof Mesh && element.name && element.name.startsWith('customMeshWindow')) {
|
|
28645
|
-
let hasCustomTexture = false;
|
|
28646
|
-
if (element.material instanceof Material$1) {
|
|
28647
|
-
if (element.material instanceof MeshPhongMaterial && element.material.map) {
|
|
28648
|
-
hasCustomTexture = true;
|
|
28649
|
-
}
|
|
28650
|
-
element.material = RenderService.MakeWindowMaterialTransparent(element.material);
|
|
28651
|
-
}
|
|
28652
|
-
else if (Array.isArray(element.material)) {
|
|
28653
|
-
element.material.forEach(function (material, index) {
|
|
28654
|
-
if (material instanceof MeshPhongMaterial && material.map) {
|
|
28655
|
-
hasCustomTexture = true;
|
|
28656
|
-
}
|
|
28657
|
-
element.material[index] = RenderService.MakeWindowMaterialTransparent(material);
|
|
28658
|
-
});
|
|
28659
|
-
}
|
|
28660
|
-
if (!hasCustomTexture) {
|
|
28661
|
-
element.name = 'glass';
|
|
28662
|
-
}
|
|
28663
|
-
}
|
|
28664
|
-
if (this._elementMustBeRemoved(element)) {
|
|
28665
|
-
parents.push(element.parent);
|
|
28666
|
-
}
|
|
28667
|
-
});
|
|
28668
|
-
parents.forEach(parent => {
|
|
28669
|
-
for (let i = parent.children.length - 1; i >= 0; i--) {
|
|
28670
|
-
if (this._elementMustBeRemoved(parent.children[i])) {
|
|
28671
|
-
parent.remove(parent.children[i]);
|
|
28672
|
-
}
|
|
28673
|
-
}
|
|
28674
|
-
});
|
|
28675
|
-
scene.add(this._cameraService.camera.clone());
|
|
28676
|
-
const options = {
|
|
28677
|
-
trs: false,
|
|
28678
|
-
onlyVisible: false,
|
|
28679
|
-
truncateDrawRange: true,
|
|
28680
|
-
binary: true,
|
|
28681
|
-
forceIndices: false,
|
|
28682
|
-
forcePowerOfTwoTextures: false,
|
|
28683
|
-
// maxTextureSize: 500,
|
|
28684
|
-
embedImages: true,
|
|
28685
|
-
};
|
|
28686
|
-
const exporter = new GLTFExporter();
|
|
28687
|
-
let filename = '';
|
|
28688
|
-
return new Promise((resolve, reject) => {
|
|
28689
|
-
exporter.parse(scene, async (exportedScene) => {
|
|
28690
|
-
const blob = new Blob([exportedScene], { type: 'application/octet-stream' });
|
|
28691
|
-
const result = await FileUtils.SaveGLBFile(blob, assetPath);
|
|
28692
|
-
if (result !== false) {
|
|
28693
|
-
filename = result.path;
|
|
28694
|
-
}
|
|
28695
|
-
resolve(filename);
|
|
28696
|
-
}, () => {
|
|
28697
|
-
}, options);
|
|
28698
|
-
});
|
|
28699
|
-
}
|
|
28700
|
-
catch (e) {
|
|
28701
|
-
throw (e);
|
|
28702
|
-
}
|
|
28703
|
-
}
|
|
28704
|
-
async startRendering() {
|
|
28705
|
-
if (this.renderQueue.length > 0) {
|
|
28706
|
-
await this.checkConnection();
|
|
28707
|
-
if (this.renderQueue[0].renderProgress === 0 || this.renderQueue[0].renderProgress === undefined) {
|
|
28708
|
-
this.renderQueue[0].renderStatus = RenderStatus.IsRunning;
|
|
28709
|
-
this.currentQueueRenderItem = this.renderQueue[0];
|
|
28710
|
-
this.renderQueue.shift();
|
|
28711
|
-
this.currentQueueRenderItem.params.glbPath = await this._exportToGlb()
|
|
28712
|
-
.catch((e) => {
|
|
28713
|
-
return Promise.reject(e);
|
|
28714
|
-
});
|
|
28715
|
-
await this._startRenderLoop();
|
|
28716
|
-
}
|
|
28717
|
-
}
|
|
28718
|
-
}
|
|
28719
|
-
async _colijnRenderScene(params) {
|
|
28720
|
-
return new Promise((resolve, reject) => {
|
|
28721
|
-
const requestParams = [{
|
|
28722
|
-
id: 1,
|
|
28723
|
-
jsonrpc: '2.0',
|
|
28724
|
-
method: 'colijn_render_scene_from_glb',
|
|
28725
|
-
params: params
|
|
28726
|
-
}];
|
|
28727
|
-
const xhr = new XMLHttpRequest();
|
|
28728
|
-
xhr.open('POST', this._getRenderServiceUrl());
|
|
28729
|
-
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|
28730
|
-
xhr.onload = () => {
|
|
28731
|
-
if (xhr.status >= 200 && xhr.status < 300) {
|
|
28732
|
-
resolve(JSON.parse(xhr.responseText));
|
|
28733
|
-
}
|
|
28734
|
-
else {
|
|
28735
|
-
reject(xhr.statusText);
|
|
28736
|
-
}
|
|
28737
|
-
};
|
|
28738
|
-
xhr.onerror = () => reject(xhr.statusText);
|
|
28739
|
-
xhr.send(JSON.stringify(requestParams));
|
|
28740
|
-
});
|
|
28741
|
-
}
|
|
28742
|
-
async _startRenderLoop() {
|
|
28743
|
-
// temporary solution because large request over websockets are not working because of an error in the software of migenius
|
|
28744
|
-
let [info] = await this._colijnRenderScene(this.currentQueueRenderItem.params);
|
|
28745
|
-
info = info.result;
|
|
28746
|
-
/*
|
|
28747
|
-
const [ info ] = await this.service.queue_commands()
|
|
28748
|
-
.queue(new Command('colijn_render_scene', this.currentQueueRenderItem.params), true)
|
|
28749
|
-
.execute();
|
|
28750
|
-
*/
|
|
28751
|
-
this.currentQueueRenderItem.host = this._settingsService.settings.url;
|
|
28752
|
-
this.currentQueueRenderItem.key = info.scene_name;
|
|
28753
|
-
this.currentQueueRenderItem.type = this.currentQueueRenderItem.params.type;
|
|
28754
|
-
this.currentQueueRenderItem.startDateTime = new Date();
|
|
28755
|
-
this.currentQueueRenderItem.imageSize = this.currentQueueRenderItem.params.imageWidth + ' x ' + this.currentQueueRenderItem.params.imageHeight;
|
|
28756
|
-
this._setRenderProgress(RenderStatus.IsRunning, 0, 0);
|
|
28757
|
-
this.sceneData = info;
|
|
28758
|
-
if (!this.sceneData || this.sceneData.error) {
|
|
28759
|
-
return;
|
|
28760
|
-
}
|
|
28761
|
-
if (this.sceneData.image_info && this.sceneData.image_info.needs_render === true) {
|
|
28762
|
-
this.currentQueueRenderItem.rendered = true;
|
|
28763
|
-
await this._startRenderStream();
|
|
28764
|
-
}
|
|
28765
|
-
else {
|
|
28766
|
-
this._afterRendering();
|
|
28767
|
-
}
|
|
28768
|
-
}
|
|
28769
|
-
async _quitRenderLoop() {
|
|
28770
|
-
// if (this.sceneData.loop_name !== undefined && this.service.validate() !== false) {
|
|
28771
|
-
// const [] = await this.service.queue_commands()
|
|
28772
|
-
// .queue(new Command('render_loop_quit', {
|
|
28773
|
-
// render_loop_name: this.sceneData.loop_name
|
|
28774
|
-
// }))
|
|
28775
|
-
// .execute();
|
|
28776
|
-
// this.service.remove_stream(this.sceneData.loop_name);
|
|
28777
|
-
// }
|
|
28778
|
-
}
|
|
28779
|
-
async _startRenderStream() {
|
|
28780
|
-
//
|
|
28781
|
-
// try {
|
|
28782
|
-
//
|
|
28783
|
-
// this.streaming.stream = this.service.create_stream();
|
|
28784
|
-
// await this.streaming.stream.start({render_loop_name: this.sceneData.loop_name, image_format: 'jpg', quality: '100'});
|
|
28785
|
-
//
|
|
28786
|
-
// this.streaming.stream.on('image', async (object) => {
|
|
28787
|
-
// this._htmlImageDisplay(object, null);
|
|
28788
|
-
// const [progress] = await this.service.queue_commands()
|
|
28789
|
-
// .queue(new Command('render_loop_get_render_progress', {
|
|
28790
|
-
// render_loop_name: this.sceneData.loop_name
|
|
28791
|
-
// }), true)
|
|
28792
|
-
// .execute();
|
|
28793
|
-
//
|
|
28794
|
-
// if (progress.progression !== undefined) {
|
|
28795
|
-
// this._setRenderProgress(RenderStatus.IsRunning, Math.ceil((progress.progression * 100)), progress.iteration);
|
|
28796
|
-
// }
|
|
28797
|
-
//
|
|
28798
|
-
// if (object.result === 1) {
|
|
28799
|
-
//
|
|
28800
|
-
// await this.service.queue_commands()
|
|
28801
|
-
// .queue(new Command('render_loop_save_to_disk', {
|
|
28802
|
-
// render_loop_name: this.sceneData.loop_name,
|
|
28803
|
-
// format: 'jpg',
|
|
28804
|
-
// quality: 90,
|
|
28805
|
-
// path: this.sceneData.image_info.url
|
|
28806
|
-
// }), true)
|
|
28807
|
-
// .execute();
|
|
28808
|
-
//
|
|
28809
|
-
// if (this.streaming.stream !== undefined) {
|
|
28810
|
-
// this.streaming.stream.stop();
|
|
28811
|
-
// }
|
|
28812
|
-
// await this._quitRenderLoop();
|
|
28813
|
-
// this._afterRendering();
|
|
28814
|
-
// return;
|
|
28815
|
-
//
|
|
28816
|
-
// } else if (object.result < 0) {
|
|
28817
|
-
//
|
|
28818
|
-
// await this._onRenderError();
|
|
28819
|
-
// return;
|
|
28820
|
-
// }
|
|
28821
|
-
// });
|
|
28822
|
-
//
|
|
28823
|
-
// } catch (err) {
|
|
28824
|
-
//
|
|
28825
|
-
// await this._onRenderError();
|
|
28826
|
-
// return;
|
|
28827
|
-
// }
|
|
28828
|
-
}
|
|
28829
|
-
_setRenderProgress(status, progress, iterations) {
|
|
28830
|
-
if (!this.serverData) {
|
|
28831
|
-
return;
|
|
28832
|
-
}
|
|
28833
|
-
this.currentQueueRenderItem.endDateTime = new Date();
|
|
28834
|
-
this.currentQueueRenderItem.renderStatus = status;
|
|
28835
|
-
this.currentQueueRenderItem.renderProgress = progress;
|
|
28836
|
-
if (iterations > 0) {
|
|
28837
|
-
this.currentQueueRenderItem.renderIterations = iterations;
|
|
28838
|
-
}
|
|
28839
|
-
if (this.serverData.renderMode === RenderModes.RenderIone) {
|
|
28840
|
-
const render = this.getRenderOnId(this.currentQueueRenderItem.params.render.id);
|
|
28841
|
-
render.status = status;
|
|
28842
|
-
render.progress = progress;
|
|
28843
|
-
}
|
|
28844
|
-
}
|
|
28845
|
-
async _onRenderError() {
|
|
28846
|
-
this._setRenderProgress(RenderStatus.IsStopped, 0, 0);
|
|
28847
|
-
await this._quitRenderLoop();
|
|
28848
|
-
}
|
|
28849
|
-
async _onRenderClose() {
|
|
28850
|
-
this._setRenderProgress(RenderStatus.IsStopped, 0, 0);
|
|
28851
|
-
}
|
|
28852
|
-
_afterRendering() {
|
|
28853
|
-
if (!this.serverData) {
|
|
28854
|
-
return;
|
|
28855
|
-
}
|
|
28856
|
-
this._setRenderProgress(RenderStatus.IsSuccess, 100, 0);
|
|
28857
|
-
const imageUrl = this._settingsService.settings.assetPath.replace('content43/', '') + this.sceneData.image_info.url;
|
|
28858
|
-
if (this.serverData.renderMode === RenderModes.RenderRoom) {
|
|
28859
|
-
this.renderedRoomImages.unshift(imageUrl);
|
|
28860
|
-
}
|
|
28861
|
-
this.renderImageChanged.next(imageUrl);
|
|
28862
|
-
if (this.serverData.renderMode === RenderModes.RenderIone) {
|
|
28863
|
-
const render = this.getRenderOnId(this.currentQueueRenderItem.params.render.id);
|
|
28864
|
-
render.url = imageUrl;
|
|
28865
|
-
}
|
|
28866
|
-
const configuredItem = this.currentQueueRenderItem.params.configuredItem;
|
|
28867
|
-
const isSingleItem = this.serverData.renderMode !== RenderModes.RenderRoom;
|
|
28868
|
-
this._googleTagManager.sendEvent(GoogleTagManagerEvent.Render, {
|
|
28869
|
-
'articleNr': isSingleItem ? configuredItem.sku : 'renderRoom',
|
|
28870
|
-
'product': isSingleItem ? configuredItem.name : 'renderRoom',
|
|
28871
|
-
'dimensions': this.currentQueueRenderItem.imageSize
|
|
28872
|
-
});
|
|
28873
|
-
this.startRendering();
|
|
28874
|
-
}
|
|
28875
|
-
_getRenderServiceUrl() {
|
|
28876
|
-
return `${(this.serverData.secure ? 'https' : 'http')}://${this.serverData.host}:${this.serverData.port}`;
|
|
28877
|
-
}
|
|
28878
|
-
forceRenderImage() {
|
|
28879
|
-
const floorGroup = this._getFirstCustomFloorItemFromScene();
|
|
28880
|
-
if (floorGroup !== null) {
|
|
28881
|
-
this._checkVisibleUpdates(floorGroup, true);
|
|
28882
|
-
}
|
|
28883
|
-
}
|
|
28884
|
-
async _checkVisibleUpdates(furniture, forceRender = false) {
|
|
28885
|
-
if (!this.serverData) {
|
|
28886
|
-
return;
|
|
28887
|
-
}
|
|
28888
|
-
if (!furniture) {
|
|
28889
|
-
return;
|
|
28890
|
-
}
|
|
28891
|
-
if (this.serverData.renderMode === this.renderModes.RenderIone) {
|
|
28892
|
-
const object = this._exportService.getExportObjectFromCustomFloorGroup(furniture);
|
|
28893
|
-
this.currentProductHash = object.defaultRenderPath;
|
|
28894
|
-
}
|
|
28895
|
-
else if (this.serverData.renderMode === this.renderModes.RenderShop) {
|
|
28896
|
-
const object = this._exportService.getExportObjectFromCustomFloorGroup(furniture);
|
|
28897
|
-
if (!(JSON.stringify(this.prevItem) !== JSON.stringify(object) || forceRender)) {
|
|
28898
|
-
return;
|
|
28899
|
-
}
|
|
28900
|
-
this.renderingStarted.next();
|
|
28901
|
-
this.prevItem = object;
|
|
28902
|
-
const queueItem = new RenderQueueItem();
|
|
28903
|
-
queueItem.params = this.getRenderParameters(this.renderModes.RenderShop);
|
|
28904
|
-
queueItem.params.cameraMatrix = this._cameraService.camera.matrixWorldInverse.elements;
|
|
28905
|
-
queueItem.params.forceRender = forceRender;
|
|
28906
|
-
this.renderQueue = [];
|
|
28907
|
-
this.renderQueue.push(queueItem);
|
|
28908
|
-
await this.startRendering();
|
|
28909
|
-
}
|
|
28910
|
-
}
|
|
28911
|
-
_htmlImageDisplay(image, urlCreator) {
|
|
28912
|
-
try {
|
|
28913
|
-
urlCreator = urlCreator || (window ? (window.URL || window.webkitURL) : undefined);
|
|
28914
|
-
}
|
|
28915
|
-
catch (e) {
|
|
28916
|
-
}
|
|
28917
|
-
const blob = new Blob([image.image], { type: image.mime_type });
|
|
28918
|
-
const url = urlCreator.createObjectURL(blob);
|
|
28919
|
-
this.renderRoomImageChanged.next(url);
|
|
28920
|
-
}
|
|
28921
|
-
getRenderOnId(id) {
|
|
28922
|
-
let returnRender = null;
|
|
28923
|
-
this.renders.forEach((x) => {
|
|
28924
|
-
if (x.id === id) {
|
|
28925
|
-
returnRender = x;
|
|
28926
|
-
}
|
|
28927
|
-
});
|
|
28928
|
-
return returnRender;
|
|
28929
|
-
}
|
|
28930
|
-
getImageSizeOnId(id) {
|
|
28931
|
-
let returnSize = null;
|
|
28932
|
-
this.imageSizes.forEach((x) => {
|
|
28933
|
-
if (x.id === id) {
|
|
28934
|
-
returnSize = x;
|
|
28935
|
-
}
|
|
28936
|
-
});
|
|
28937
|
-
return returnSize;
|
|
28938
|
-
}
|
|
28939
|
-
getRenderEnvironmentOnId(id) {
|
|
28940
|
-
let returnEnvironment = null;
|
|
28941
|
-
this.renderEnvironments.forEach((renderEnvironment) => {
|
|
28942
|
-
if (renderEnvironment.id === id) {
|
|
28943
|
-
returnEnvironment = renderEnvironment;
|
|
28944
|
-
return;
|
|
28945
|
-
}
|
|
28946
|
-
});
|
|
28947
|
-
return returnEnvironment;
|
|
28948
|
-
}
|
|
28949
|
-
getLightningOnId(id) {
|
|
28950
|
-
let returnLightning = null;
|
|
28951
|
-
this.lightnings.forEach((x) => {
|
|
28952
|
-
if (x.id === id) {
|
|
28953
|
-
returnLightning = x;
|
|
28954
|
-
}
|
|
28955
|
-
});
|
|
28956
|
-
return returnLightning;
|
|
28957
|
-
}
|
|
28958
|
-
/******************************************** Export functions ********************************************/
|
|
28959
|
-
_getFirstCustomFloorItemFromScene() {
|
|
28960
|
-
const children = this._sceneService.scene.children;
|
|
28961
|
-
if (children.length <= 0) {
|
|
28962
|
-
return null;
|
|
28963
|
-
}
|
|
28964
|
-
for (let a = 0; a < children.length; a++) {
|
|
28965
|
-
if (children[a] instanceof CustomFloorItem) {
|
|
28966
|
-
return children[a];
|
|
28967
|
-
}
|
|
28968
|
-
if (children[a] instanceof ItemGroup) {
|
|
28969
|
-
const itemGroup = children[a];
|
|
28970
|
-
if (itemGroup.items.length > 0) {
|
|
28971
|
-
itemGroup.items.forEach((item) => {
|
|
28972
|
-
if (item instanceof CustomFloorItem) {
|
|
28973
|
-
return item;
|
|
28974
|
-
}
|
|
28975
|
-
});
|
|
28976
|
-
}
|
|
28977
|
-
}
|
|
28978
|
-
}
|
|
28979
|
-
return null;
|
|
28980
|
-
}
|
|
28981
|
-
_getConfiguredFurnitureItem() {
|
|
28982
|
-
const floorgroup = this._getFirstCustomFloorItemFromScene();
|
|
28983
|
-
if (floorgroup === null) {
|
|
28984
|
-
return null;
|
|
28985
|
-
}
|
|
28986
|
-
return this._exportService.getExportObjectFromCustomFloorGroup(floorgroup);
|
|
28987
|
-
}
|
|
28988
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderService, deps: [{ token: HomedecoratorSettingsService }, { token: ExportService }, { token: CameraService }, { token: SceneService }, { token: ToastService }, { token: MessageBusService }, { token: GoogleTagManagerService }, { token: RoomService }, { token: FloorService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28989
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderService }); }
|
|
28990
|
-
}
|
|
28991
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderService, decorators: [{
|
|
28992
|
-
type: Injectable
|
|
28993
|
-
}], ctorParameters: () => [{ type: HomedecoratorSettingsService }, { type: ExportService }, { type: CameraService }, { type: SceneService }, { type: ToastService }, { type: MessageBusService }, { type: GoogleTagManagerService }, { type: RoomService }, { type: FloorService }] });
|
|
28994
|
-
|
|
28995
28536
|
class LoadFurnitureWithoutSceneService extends LoadFurnitureBaseService {
|
|
28996
28537
|
loadFurniture(furnitureData, shouldCopyInstance, looseOriginalConfiguration, standAlone, fromScratch, fromPreset, loadFromProject) {
|
|
28997
28538
|
throw new Error('Method not implemented.');
|
|
@@ -29034,7 +28575,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
29034
28575
|
type: Injectable
|
|
29035
28576
|
}], ctorParameters: () => [{ type: LoadFurnitureService }, { type: LoadFurnitureWithoutSceneService }, { type: HomedecoratorSettingsService }, { type: HomedecoratorConnectorService }] });
|
|
29036
28577
|
|
|
29037
|
-
class
|
|
28578
|
+
class RenderService {
|
|
29038
28579
|
constructor(messageService, _settingsService, _buildFurnitureService, _cameraService, _sceneService, _ione, _ioneConnectorAdapter, _threedSelectorService, _toastService, _messageBusService, _googleTagManager, _roomService, _floorService, _wallService, _ceilingService, _loadFurnitureService, _utilsService, _presetService, _apiServiceModule, _appEventService, _dictionaryService) {
|
|
29039
28580
|
this.messageService = messageService;
|
|
29040
28581
|
this._settingsService = _settingsService;
|
|
@@ -29064,9 +28605,14 @@ class NewRenderService {
|
|
|
29064
28605
|
this.renderRoomImageChanged = new BehaviorSubject('');
|
|
29065
28606
|
this.currentQueueRenderItem = new RenderQueueItem();
|
|
29066
28607
|
this.renderedRoomImages = [];
|
|
28608
|
+
this.blendFilesRender = false;
|
|
29067
28609
|
this._overWriteTransparency = false;
|
|
29068
28610
|
this._subs = [];
|
|
29069
|
-
this._subs.push(this.messageService.subscribe(MessageType.BlenderRenderFileReady, (file) => this.procesRenderFile(file)))
|
|
28611
|
+
this._subs.push(this.messageService.subscribe(MessageType.BlenderRenderFileReady, (file) => this.procesRenderFile(file)), this._settingsService.settingsLoaded.subscribe((loaded) => {
|
|
28612
|
+
if (loaded) {
|
|
28613
|
+
this.blendFilesRender = this._settingsService.settings.blendFilesRender;
|
|
28614
|
+
}
|
|
28615
|
+
}));
|
|
29070
28616
|
}
|
|
29071
28617
|
ngOnDestroy() {
|
|
29072
28618
|
this._subs.forEach(s => s.unsubscribe());
|
|
@@ -29091,7 +28637,14 @@ class NewRenderService {
|
|
|
29091
28637
|
}
|
|
29092
28638
|
}
|
|
29093
28639
|
async renderRoom(settings, preview = false) {
|
|
29094
|
-
|
|
28640
|
+
let sceneData;
|
|
28641
|
+
try {
|
|
28642
|
+
sceneData = await this._exportToGlb();
|
|
28643
|
+
}
|
|
28644
|
+
catch (e) {
|
|
28645
|
+
this.renderImageError.next(this._dictionaryService.get(e.message));
|
|
28646
|
+
return;
|
|
28647
|
+
}
|
|
29095
28648
|
const data = this._getDataForRoomRender(settings);
|
|
29096
28649
|
data.files = {
|
|
29097
28650
|
glbData: this._arrayBufferToBase64(sceneData)
|
|
@@ -29115,6 +28668,21 @@ class NewRenderService {
|
|
|
29115
28668
|
let scene;
|
|
29116
28669
|
try {
|
|
29117
28670
|
scene = this._sceneService.scene.clone(true);
|
|
28671
|
+
const masksToRemove = new Map();
|
|
28672
|
+
scene.traverse((child) => {
|
|
28673
|
+
if (child.parent && child instanceof Mesh && child.name && child.name.toLowerCase().indexOf('_mask') > -1) {
|
|
28674
|
+
masksToRemove.set(child.parent.uuid, child.uuid);
|
|
28675
|
+
}
|
|
28676
|
+
});
|
|
28677
|
+
masksToRemove.forEach((maskUuid, parentUuid) => {
|
|
28678
|
+
const parent = scene.getObjectByProperty('uuid', parentUuid);
|
|
28679
|
+
if (parent) {
|
|
28680
|
+
const mask = parent.getObjectByProperty('uuid', maskUuid);
|
|
28681
|
+
if (mask) {
|
|
28682
|
+
parent.remove(mask);
|
|
28683
|
+
}
|
|
28684
|
+
}
|
|
28685
|
+
});
|
|
29118
28686
|
const lightsToRemove = scene.children.filter(c => c instanceof Light);
|
|
29119
28687
|
lightsToRemove.forEach(light => {
|
|
29120
28688
|
if ((light instanceof SpotLight || light instanceof DirectionalLight) && light.target) {
|
|
@@ -29135,6 +28703,10 @@ class NewRenderService {
|
|
|
29135
28703
|
if (!this._cameraService.isCameraFacingFront(wall) && !wall.orphan && !wall.isInnerWall()) {
|
|
29136
28704
|
wall.name = 'CULLING_wall';
|
|
29137
28705
|
}
|
|
28706
|
+
wall.userData = {};
|
|
28707
|
+
// for (let i = wall.children.length; i >= 0; i--) {
|
|
28708
|
+
// wall.remove(wall.children[i]);
|
|
28709
|
+
// }
|
|
29138
28710
|
});
|
|
29139
28711
|
const ceilings = scene.children.filter(c => c.name && c.name === this._ceilingService.ceilingName);
|
|
29140
28712
|
ceilings.forEach(ceiling => {
|
|
@@ -29153,7 +28725,9 @@ class NewRenderService {
|
|
|
29153
28725
|
embedImages: true,
|
|
29154
28726
|
};
|
|
29155
28727
|
scene.name = 'mrp_room_' + scene.uuid;
|
|
29156
|
-
const glb = await this._getGlbFromObject(scene, options)
|
|
28728
|
+
const glb = await this._getGlbFromObject(scene, options).catch((error) => {
|
|
28729
|
+
throw (error);
|
|
28730
|
+
});
|
|
29157
28731
|
// this._utilsService.downloadFile(scene.name + '.glb', new Blob([glb], {type: 'model/gltf-binary'}));
|
|
29158
28732
|
ObjectUtils.DisposeObject(scene);
|
|
29159
28733
|
scene = null;
|
|
@@ -29168,7 +28742,8 @@ class NewRenderService {
|
|
|
29168
28742
|
return new Promise((resolve, reject) => {
|
|
29169
28743
|
exporter.parse(object, async (exportedScene) => {
|
|
29170
28744
|
resolve(exportedScene);
|
|
29171
|
-
}, () => {
|
|
28745
|
+
}, (error) => {
|
|
28746
|
+
reject(error);
|
|
29172
28747
|
}, options);
|
|
29173
28748
|
});
|
|
29174
28749
|
}
|
|
@@ -29287,7 +28862,19 @@ class NewRenderService {
|
|
|
29287
28862
|
method: 'POST',
|
|
29288
28863
|
data: JSON.stringify(data),
|
|
29289
28864
|
url: `${host}getRenderFromGlb`,
|
|
29290
|
-
responseType: 'json'
|
|
28865
|
+
responseType: 'json',
|
|
28866
|
+
onUploadProgress: (progressEvent) => {
|
|
28867
|
+
const total = progressEvent.total ?? 0;
|
|
28868
|
+
if (total > 0) {
|
|
28869
|
+
const percent = Math.round((progressEvent.loaded * 100) / total);
|
|
28870
|
+
this._messageBusService.emit(MessageType.RenderUploadProgress, percent);
|
|
28871
|
+
if (percent >= 100) {
|
|
28872
|
+
this._messageBusService.emit(MessageType.RenderUploadFinished, true);
|
|
28873
|
+
}
|
|
28874
|
+
}
|
|
28875
|
+
}
|
|
28876
|
+
}).catch((error) => {
|
|
28877
|
+
return error;
|
|
29291
28878
|
});
|
|
29292
28879
|
if (result.status === 200) {
|
|
29293
28880
|
// const image = `data:${result.data.fileType};base64,${result.data.image}`;
|
|
@@ -29308,7 +28895,12 @@ class NewRenderService {
|
|
|
29308
28895
|
this.renderImageError.next(this._dictionaryService.get('BLENDER_PRODUCT_RENDER_ERROR'));
|
|
29309
28896
|
}
|
|
29310
28897
|
// Remove the loading indicator.
|
|
29311
|
-
this._messageBusService.emit(MessageType.
|
|
28898
|
+
this._messageBusService.emit(MessageType.RenderFinished, true);
|
|
28899
|
+
}
|
|
28900
|
+
else {
|
|
28901
|
+
this.renderImageChanged.next('');
|
|
28902
|
+
this.renderImageError.next(this._dictionaryService.get('BLENDER_PRODUCT_RENDER_ERROR'));
|
|
28903
|
+
this._messageBusService.emit(MessageType.RenderFinished, true);
|
|
29312
28904
|
}
|
|
29313
28905
|
}
|
|
29314
28906
|
}
|
|
@@ -29627,10 +29219,10 @@ class NewRenderService {
|
|
|
29627
29219
|
this._overWriteTransparency = true;
|
|
29628
29220
|
}
|
|
29629
29221
|
}
|
|
29630
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type:
|
|
29631
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type:
|
|
29222
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderService, deps: [{ token: MessageBusService }, { token: HomedecoratorSettingsService }, { token: SwitchBuildFurnitureService }, { token: CameraService }, { token: SceneService }, { token: HomedecoratorConnectorService }, { token: HomedecoratorConnectorAdapterService }, { token: ThreedselectorService }, { token: ToastService }, { token: MessageBusService }, { token: GoogleTagManagerService }, { token: RoomService }, { token: FloorService }, { token: WallService }, { token: CeilingService }, { token: SwitchLoadFurnitureService }, { token: UtilsService }, { token: PresetsService }, { token: ApiServiceModule }, { token: HomedecoratorAppEventService }, { token: HomedecoratorDictionaryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
29223
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderService }); }
|
|
29632
29224
|
}
|
|
29633
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type:
|
|
29225
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderService, decorators: [{
|
|
29634
29226
|
type: Injectable
|
|
29635
29227
|
}], ctorParameters: () => [{ type: MessageBusService }, { type: HomedecoratorSettingsService }, { type: SwitchBuildFurnitureService }, { type: CameraService }, { type: SceneService }, { type: HomedecoratorConnectorService }, { type: HomedecoratorConnectorAdapterService }, { type: ThreedselectorService }, { type: ToastService }, { type: MessageBusService }, { type: GoogleTagManagerService }, { type: RoomService }, { type: FloorService }, { type: WallService }, { type: CeilingService }, { type: SwitchLoadFurnitureService }, { type: UtilsService }, { type: PresetsService }, { type: ApiServiceModule }, { type: HomedecoratorAppEventService }, { type: HomedecoratorDictionaryService }] });
|
|
29636
29228
|
|
|
@@ -30521,6 +30113,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
30521
30113
|
type: Injectable
|
|
30522
30114
|
}], ctorParameters: () => [{ type: HomedecoratorSettingsService }, { type: HomedecoratorConnectorService }] });
|
|
30523
30115
|
|
|
30116
|
+
var ToastType;
|
|
30117
|
+
(function (ToastType) {
|
|
30118
|
+
ToastType[ToastType["Success"] = 0] = "Success";
|
|
30119
|
+
ToastType[ToastType["Warning"] = 1] = "Warning";
|
|
30120
|
+
ToastType[ToastType["Error"] = 2] = "Error";
|
|
30121
|
+
})(ToastType || (ToastType = {}));
|
|
30122
|
+
|
|
30123
|
+
class Toast {
|
|
30124
|
+
constructor() {
|
|
30125
|
+
this.type = ToastType.Success;
|
|
30126
|
+
}
|
|
30127
|
+
}
|
|
30128
|
+
|
|
30524
30129
|
class ConnectionHeathService {
|
|
30525
30130
|
constructor(_http, _settingService, _toastService, _messageService) {
|
|
30526
30131
|
this._http = _http;
|
|
@@ -31542,6 +31147,100 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
31542
31147
|
type: Injectable
|
|
31543
31148
|
}] });
|
|
31544
31149
|
|
|
31150
|
+
class ConfigurationPresetLoadService {
|
|
31151
|
+
set sku(value) {
|
|
31152
|
+
this._sku = value;
|
|
31153
|
+
}
|
|
31154
|
+
get sku() {
|
|
31155
|
+
return this._sku;
|
|
31156
|
+
}
|
|
31157
|
+
set instanceId(value) {
|
|
31158
|
+
this._instanceId = value;
|
|
31159
|
+
}
|
|
31160
|
+
get instanceId() {
|
|
31161
|
+
return this._instanceId;
|
|
31162
|
+
}
|
|
31163
|
+
set externalSourceId(value) {
|
|
31164
|
+
this._externalSourceId = value;
|
|
31165
|
+
}
|
|
31166
|
+
get externalSourceId() {
|
|
31167
|
+
return this._externalSourceId;
|
|
31168
|
+
}
|
|
31169
|
+
set showConfigurationLoad(value) {
|
|
31170
|
+
this._showConfigurationLoad = value;
|
|
31171
|
+
}
|
|
31172
|
+
get showConfigurationLoad() {
|
|
31173
|
+
return this._showConfigurationLoad;
|
|
31174
|
+
}
|
|
31175
|
+
constructor(_homedecoratorConnectorService, _settingsService, _homedecoratorConnectorAdapterService, _messageService, _homedecoratorEventService) {
|
|
31176
|
+
this._homedecoratorConnectorService = _homedecoratorConnectorService;
|
|
31177
|
+
this._settingsService = _settingsService;
|
|
31178
|
+
this._homedecoratorConnectorAdapterService = _homedecoratorConnectorAdapterService;
|
|
31179
|
+
this._messageService = _messageService;
|
|
31180
|
+
this._homedecoratorEventService = _homedecoratorEventService;
|
|
31181
|
+
this._showConfigurationLoad = false;
|
|
31182
|
+
this._subs = [];
|
|
31183
|
+
this._subs.push(this._messageService.subscribe(MessageType.ViewModeChanged, (mode) => this._updateMode(mode)));
|
|
31184
|
+
}
|
|
31185
|
+
ngOnDestroy() {
|
|
31186
|
+
this.reset();
|
|
31187
|
+
this._subs.forEach(sub => sub.unsubscribe());
|
|
31188
|
+
}
|
|
31189
|
+
async LoadPreset() {
|
|
31190
|
+
// Loading is a bitch
|
|
31191
|
+
// Init it for the preset (just java prod conf things)
|
|
31192
|
+
// Then tell it to load.
|
|
31193
|
+
if (this.goodId) {
|
|
31194
|
+
const initResponse = await this._homedecoratorConnectorService.initForPreset(this.instanceId, this.goodId);
|
|
31195
|
+
if (initResponse && initResponse.validationResult && initResponse.validationResult.success) {
|
|
31196
|
+
this._messageService.emit(MessageType.LoadConfigurationFromPreset, {
|
|
31197
|
+
sku: this.sku,
|
|
31198
|
+
instanceId: this.instanceId,
|
|
31199
|
+
settings: this._externalSourceOptions
|
|
31200
|
+
});
|
|
31201
|
+
this.reset();
|
|
31202
|
+
}
|
|
31203
|
+
}
|
|
31204
|
+
}
|
|
31205
|
+
async loadArticleDataForPreset() {
|
|
31206
|
+
if (this.sku && this.instanceId) {
|
|
31207
|
+
if (this.externalSourceId) {
|
|
31208
|
+
// Even if we define externalSourceId as a number, we got a string.
|
|
31209
|
+
const externalSource = this._homedecoratorConnectorService.getExternalSourceFromId(+this.externalSourceId);
|
|
31210
|
+
if (externalSource) {
|
|
31211
|
+
const params = await this._homedecoratorConnectorService.getPublicParams(externalSource.url, parseInt(externalSource.schema));
|
|
31212
|
+
const homeDecoSettings = Object.assign(JSON.parse(params.homeDecoSettings ? params.homeDecoSettings : params.catalogSettings), new HomedecoratorSettings());
|
|
31213
|
+
this._externalSourceOptions = homeDecoSettings;
|
|
31214
|
+
this._externalSourceOptions.externalSourceId = this._externalSourceId;
|
|
31215
|
+
await this._homedecoratorConnectorAdapterService.initConnector(homeDecoSettings ? homeDecoSettings : this._settingsService.settings, undefined, false, this.externalSourceId ? this.externalSourceId : undefined);
|
|
31216
|
+
}
|
|
31217
|
+
}
|
|
31218
|
+
this.goodId = await this._homedecoratorConnectorService.getGoodIdFromArticleNr(this.sku);
|
|
31219
|
+
this.article = await this._homedecoratorConnectorService.getArticle(this.sku, this._settingsService.settings.branch);
|
|
31220
|
+
this.showConfigurationLoad = true;
|
|
31221
|
+
}
|
|
31222
|
+
}
|
|
31223
|
+
reset() {
|
|
31224
|
+
this.article = undefined;
|
|
31225
|
+
this.goodId = undefined;
|
|
31226
|
+
this.sku = undefined;
|
|
31227
|
+
this.instanceId = undefined;
|
|
31228
|
+
this.externalSourceId = undefined;
|
|
31229
|
+
this._showConfigurationLoad = false;
|
|
31230
|
+
this._homedecoratorEventService.configurationFromPresetLoaded.next(true);
|
|
31231
|
+
}
|
|
31232
|
+
_updateMode(value) {
|
|
31233
|
+
if (value === ViewMode.RoomPlan3D) {
|
|
31234
|
+
this.loadArticleDataForPreset();
|
|
31235
|
+
}
|
|
31236
|
+
}
|
|
31237
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigurationPresetLoadService, deps: [{ token: HomedecoratorConnectorService }, { token: HomedecoratorSettingsService }, { token: HomedecoratorConnectorAdapterService }, { token: MessageBusService }, { token: HomedecoratorAppEventService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31238
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigurationPresetLoadService }); }
|
|
31239
|
+
}
|
|
31240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigurationPresetLoadService, decorators: [{
|
|
31241
|
+
type: Injectable
|
|
31242
|
+
}], ctorParameters: () => [{ type: HomedecoratorConnectorService }, { type: HomedecoratorSettingsService }, { type: HomedecoratorConnectorAdapterService }, { type: MessageBusService }, { type: HomedecoratorAppEventService }] });
|
|
31243
|
+
|
|
31545
31244
|
const APPLICATION_SERVICES_PROVIDERS = [
|
|
31546
31245
|
HomedecoratorService,
|
|
31547
31246
|
HomedecoratorAppService,
|
|
@@ -31605,9 +31304,8 @@ const APPLICATION_SERVICES_PROVIDERS = [
|
|
|
31605
31304
|
DynamicCameraService,
|
|
31606
31305
|
ThreedInPhotoInitializerService,
|
|
31607
31306
|
ThreedInPhotoBuildService,
|
|
31608
|
-
RenderService,
|
|
31609
31307
|
ExportService,
|
|
31610
|
-
|
|
31308
|
+
RenderService,
|
|
31611
31309
|
AppInitializerService,
|
|
31612
31310
|
JsonUtilsService,
|
|
31613
31311
|
RalService,
|
|
@@ -31626,7 +31324,8 @@ const APPLICATION_SERVICES_PROVIDERS = [
|
|
|
31626
31324
|
FloorplanCoordinatesService,
|
|
31627
31325
|
FloorplanRenderService,
|
|
31628
31326
|
CornerService,
|
|
31629
|
-
FloorplanModeService
|
|
31327
|
+
FloorplanModeService,
|
|
31328
|
+
ConfigurationPresetLoadService
|
|
31630
31329
|
];
|
|
31631
31330
|
|
|
31632
31331
|
class ProgressBarComponent {
|
|
@@ -33852,108 +33551,142 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
33852
33551
|
class BlenderRenderSettings {
|
|
33853
33552
|
}
|
|
33854
33553
|
|
|
33855
|
-
|
|
33856
|
-
|
|
33857
|
-
|
|
33858
|
-
if (
|
|
33859
|
-
|
|
33860
|
-
this._progressService.total = 100;
|
|
33554
|
+
// A pipe for appending strings to other strings in view templates.
|
|
33555
|
+
class AppendPipe {
|
|
33556
|
+
transform(value, append) {
|
|
33557
|
+
if (!value) {
|
|
33558
|
+
return '';
|
|
33861
33559
|
}
|
|
33862
|
-
|
|
33863
|
-
|
|
33864
|
-
this._progressService.total = 0;
|
|
33560
|
+
if (!append) {
|
|
33561
|
+
return value;
|
|
33865
33562
|
}
|
|
33563
|
+
return value + append;
|
|
33866
33564
|
}
|
|
33867
|
-
|
|
33868
|
-
|
|
33869
|
-
|
|
33870
|
-
|
|
33871
|
-
|
|
33872
|
-
|
|
33873
|
-
|
|
33565
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppendPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
33566
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: AppendPipe, isStandalone: false, name: "append" }); }
|
|
33567
|
+
}
|
|
33568
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppendPipe, decorators: [{
|
|
33569
|
+
type: Pipe,
|
|
33570
|
+
args: [{
|
|
33571
|
+
name: 'append',
|
|
33572
|
+
standalone: false
|
|
33573
|
+
}]
|
|
33574
|
+
}] });
|
|
33575
|
+
|
|
33576
|
+
class RenderProgressComponent {
|
|
33577
|
+
constructor(_messageService) {
|
|
33874
33578
|
this._messageService = _messageService;
|
|
33875
|
-
this.
|
|
33579
|
+
this.title = 'UPLOADING_ROOM';
|
|
33876
33580
|
this.progress = 0;
|
|
33581
|
+
this.rendering = false;
|
|
33877
33582
|
this._subs = [];
|
|
33878
|
-
this.
|
|
33879
|
-
|
|
33583
|
+
this._subs.push(this._messageService.subscribe(MessageType.RenderUploadFinished, (ready) => {
|
|
33584
|
+
if (ready) {
|
|
33585
|
+
this.title = 'RENDERING_ROOM';
|
|
33586
|
+
this.rendering = true;
|
|
33587
|
+
}
|
|
33588
|
+
}), this._messageService.subscribe(MessageType.RenderUploadProgress, (progress) => this.updateProgress(progress)));
|
|
33880
33589
|
}
|
|
33881
33590
|
ngOnDestroy() {
|
|
33882
33591
|
this._subs.forEach(sub => sub.unsubscribe());
|
|
33883
33592
|
}
|
|
33884
33593
|
updateProgress(progress) {
|
|
33885
|
-
this.progress = progress;
|
|
33886
|
-
this._progressService.progress = progress;
|
|
33594
|
+
this.progress = Math.max(0, Math.min(100, progress));
|
|
33887
33595
|
}
|
|
33888
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderProgressComponent, deps: [{ token: MessageBusService }
|
|
33889
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: RenderProgressComponent, isStandalone: false, selector: "rp-render-progress",
|
|
33890
|
-
@if (show) {
|
|
33596
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderProgressComponent, deps: [{ token: MessageBusService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33597
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: RenderProgressComponent, isStandalone: false, selector: "rp-render-progress", ngImport: i0, template: `
|
|
33891
33598
|
<div class="render-progress-model">
|
|
33892
33599
|
<div class="model">
|
|
33893
33600
|
<div class="model-header-container">
|
|
33894
|
-
<h3 class="model-header" [textContent]="title"></h3>
|
|
33895
|
-
|
|
33896
|
-
|
|
33897
|
-
|
|
33601
|
+
<h3 class="model-header" [textContent]="title | localize"></h3>
|
|
33602
|
+
<!--
|
|
33603
|
+
<div class="close" (click)="show = false">
|
|
33604
|
+
<mat-icon class="homedecorator-material-icons">cancel</mat-icon>
|
|
33605
|
+
</div>
|
|
33606
|
+
-->
|
|
33898
33607
|
</div>
|
|
33899
33608
|
<div class="model-content-container">
|
|
33900
|
-
|
|
33609
|
+
@if (!rendering) {
|
|
33610
|
+
<div class="progress-bar" role="progressbar" [attr.aria-valuenow]="progress" aria-valuemin="0" aria-valuemax="100">
|
|
33611
|
+
<div class="progress-bar-fill" [style.width.%]="progress"></div>
|
|
33612
|
+
<span class="progress-bar-text" [textContent]="progress.toString() | append:'%'"></span>
|
|
33613
|
+
</div>
|
|
33614
|
+
} @else {
|
|
33615
|
+
<span class="loading-dots" aria-hidden="true">
|
|
33616
|
+
<span></span>
|
|
33617
|
+
<span></span>
|
|
33618
|
+
<span></span>
|
|
33619
|
+
</span>
|
|
33620
|
+
}
|
|
33901
33621
|
</div>
|
|
33902
33622
|
</div>
|
|
33903
33623
|
</div>
|
|
33904
|
-
}
|
|
33905
|
-
`, isInline: true, styles: [".render-progress-model{position:fixed;inset:0;z-index:100;background-color:#0003}.render-progress-model .model{width:400px;position:relative;top:20%;left:50%;margin-left:-200px;background:#fff;border-radius:10px;box-sizing:border-box;box-shadow:1px 0 20px #0000001f}.render-progress-model .model .model-header-container{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-progress-model .model .model-header-container .close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-progress-model .model .model-header-container .close:hover mat-icon{fill:#46494c;color:#46494c}.render-progress-model .model .model-content-container{padding:20px}.render-progress-model .model .model-content-container .progress-text{text-align:center;margin-top:10px;display:block}.render-progress-model .model .model-content-container .progress-container{width:100%;height:25px;background-color:#e0e0e0;border-radius:12px;overflow:hidden}.render-progress-model .model .model-content-container .progress-fill{height:100%;background-color:#da9803;transition:width .3s ease-in-out}\n"], dependencies: [{ kind: "component", type: i3$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
33624
|
+
`, isInline: true, styles: [".render-progress-model{position:fixed;inset:0;z-index:100;background-color:#0003}.render-progress-model .model{width:400px;position:relative;top:20%;left:50%;margin-left:-200px;background:#fff;border-radius:10px;box-sizing:border-box;box-shadow:1px 0 20px #0000001f}.render-progress-model .model .model-header-container{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-progress-model .model .model-header-container .close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-progress-model .model .model-header-container .close:hover mat-icon{fill:#46494c;color:#46494c}.render-progress-model .model .model-content-container{display:flex;justify-content:center;padding:20px}.render-progress-model .model .model-content-container .progress-container{width:100%;height:25px;background-color:#e0e0e0;border-radius:12px;overflow:hidden}.render-progress-model .model .model-content-container .progress-bar{position:relative;width:100%;height:18px;overflow:hidden;border-radius:999px;background-color:#e5e7eb}.render-progress-model .model .model-content-container .progress-bar-text{position:absolute;inset:0;color:#171721;display:flex;align-items:center;justify-content:center}.render-progress-model .model .model-content-container .progress-bar-fill{height:100%;width:0;background:linear-gradient(90deg,#da9803,#fff);transition:width .3s ease}.render-progress-model .model .model-content-container .loading-dots{display:inline-flex;gap:2px;margin-left:4px}.render-progress-model .model .model-content-container .loading-dots span{width:4px;height:4px;border-radius:50%;background-color:#171721;opacity:.25;animation:loading-dot 1.2s infinite ease-in-out}.render-progress-model .model .model-content-container .loading-dots span:nth-child(2){animation-delay:.2s}.render-progress-model .model .model-content-container .loading-dots span:nth-child(3){animation-delay:.4s}@keyframes loading-dot{0%,80%,to{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}\n"], dependencies: [{ kind: "pipe", type: LocalizePipe, name: "localize" }, { kind: "pipe", type: AppendPipe, name: "append" }] }); }
|
|
33906
33625
|
}
|
|
33907
33626
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderProgressComponent, decorators: [{
|
|
33908
33627
|
type: Component,
|
|
33909
33628
|
args: [{ selector: 'rp-render-progress', template: `
|
|
33910
|
-
@if (show) {
|
|
33911
33629
|
<div class="render-progress-model">
|
|
33912
33630
|
<div class="model">
|
|
33913
33631
|
<div class="model-header-container">
|
|
33914
|
-
<h3 class="model-header" [textContent]="title"></h3>
|
|
33915
|
-
|
|
33916
|
-
|
|
33917
|
-
|
|
33632
|
+
<h3 class="model-header" [textContent]="title | localize"></h3>
|
|
33633
|
+
<!--
|
|
33634
|
+
<div class="close" (click)="show = false">
|
|
33635
|
+
<mat-icon class="homedecorator-material-icons">cancel</mat-icon>
|
|
33636
|
+
</div>
|
|
33637
|
+
-->
|
|
33918
33638
|
</div>
|
|
33919
33639
|
<div class="model-content-container">
|
|
33920
|
-
|
|
33640
|
+
@if (!rendering) {
|
|
33641
|
+
<div class="progress-bar" role="progressbar" [attr.aria-valuenow]="progress" aria-valuemin="0" aria-valuemax="100">
|
|
33642
|
+
<div class="progress-bar-fill" [style.width.%]="progress"></div>
|
|
33643
|
+
<span class="progress-bar-text" [textContent]="progress.toString() | append:'%'"></span>
|
|
33644
|
+
</div>
|
|
33645
|
+
} @else {
|
|
33646
|
+
<span class="loading-dots" aria-hidden="true">
|
|
33647
|
+
<span></span>
|
|
33648
|
+
<span></span>
|
|
33649
|
+
<span></span>
|
|
33650
|
+
</span>
|
|
33651
|
+
}
|
|
33921
33652
|
</div>
|
|
33922
33653
|
</div>
|
|
33923
33654
|
</div>
|
|
33924
|
-
}
|
|
33925
|
-
|
|
33926
|
-
}], ctorParameters: () => [{ type: MessageBusService }, { type: ProgressService }], propDecorators: { show: [{
|
|
33927
|
-
type: Input
|
|
33928
|
-
}], title: [{
|
|
33929
|
-
type: Input
|
|
33930
|
-
}] } });
|
|
33655
|
+
`, standalone: false, styles: [".render-progress-model{position:fixed;inset:0;z-index:100;background-color:#0003}.render-progress-model .model{width:400px;position:relative;top:20%;left:50%;margin-left:-200px;background:#fff;border-radius:10px;box-sizing:border-box;box-shadow:1px 0 20px #0000001f}.render-progress-model .model .model-header-container{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-progress-model .model .model-header-container .close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-progress-model .model .model-header-container .close:hover mat-icon{fill:#46494c;color:#46494c}.render-progress-model .model .model-content-container{display:flex;justify-content:center;padding:20px}.render-progress-model .model .model-content-container .progress-container{width:100%;height:25px;background-color:#e0e0e0;border-radius:12px;overflow:hidden}.render-progress-model .model .model-content-container .progress-bar{position:relative;width:100%;height:18px;overflow:hidden;border-radius:999px;background-color:#e5e7eb}.render-progress-model .model .model-content-container .progress-bar-text{position:absolute;inset:0;color:#171721;display:flex;align-items:center;justify-content:center}.render-progress-model .model .model-content-container .progress-bar-fill{height:100%;width:0;background:linear-gradient(90deg,#da9803,#fff);transition:width .3s ease}.render-progress-model .model .model-content-container .loading-dots{display:inline-flex;gap:2px;margin-left:4px}.render-progress-model .model .model-content-container .loading-dots span{width:4px;height:4px;border-radius:50%;background-color:#171721;opacity:.25;animation:loading-dot 1.2s infinite ease-in-out}.render-progress-model .model .model-content-container .loading-dots span:nth-child(2){animation-delay:.2s}.render-progress-model .model .model-content-container .loading-dots span:nth-child(3){animation-delay:.4s}@keyframes loading-dot{0%,80%,to{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}\n"] }]
|
|
33656
|
+
}], ctorParameters: () => [{ type: MessageBusService }] });
|
|
33931
33657
|
|
|
33932
33658
|
class RenderControlsComponent {
|
|
33933
33659
|
get disablePictureButton() {
|
|
33934
|
-
return this.
|
|
33660
|
+
return this.renderService.currentQueueRenderItem.renderStatus === this.renderStatus.IsRunning;
|
|
33935
33661
|
}
|
|
33936
|
-
constructor(
|
|
33937
|
-
this.renderService = renderService;
|
|
33662
|
+
constructor(messageService, viewModeService, settingsService, iconService, renderService, _dialog, _sceneService, _cameraService, _configurationService, _settingsService, _utilsService, _roomService, _wallMeasurementsService, _connectionHealthService, _dictionaryService, _dialogService) {
|
|
33938
33663
|
this.messageService = messageService;
|
|
33939
33664
|
this.viewModeService = viewModeService;
|
|
33940
33665
|
this.settingsService = settingsService;
|
|
33941
33666
|
this.iconService = iconService;
|
|
33667
|
+
this.renderService = renderService;
|
|
33942
33668
|
this._dialog = _dialog;
|
|
33943
33669
|
this._sceneService = _sceneService;
|
|
33944
33670
|
this._cameraService = _cameraService;
|
|
33945
33671
|
this._configurationService = _configurationService;
|
|
33946
33672
|
this._settingsService = _settingsService;
|
|
33947
|
-
this._newRenderService = _newRenderService;
|
|
33948
33673
|
this._utilsService = _utilsService;
|
|
33949
33674
|
this._roomService = _roomService;
|
|
33950
33675
|
this._wallMeasurementsService = _wallMeasurementsService;
|
|
33951
33676
|
this._connectionHealthService = _connectionHealthService;
|
|
33952
33677
|
this._dictionaryService = _dictionaryService;
|
|
33678
|
+
this._dialogService = _dialogService;
|
|
33953
33679
|
this.viewModes = ViewMode;
|
|
33954
33680
|
this.renderStatus = RenderStatus;
|
|
33955
33681
|
this.icons = IconEnum;
|
|
33956
33682
|
this.renderModes = RenderModes;
|
|
33683
|
+
this.imageSizes = [
|
|
33684
|
+
{ id: 1, name: ' 720p (HD)', width: 1280, height: 720 },
|
|
33685
|
+
{ id: 2, name: '1080P (HD)', width: 1920, height: 1080 },
|
|
33686
|
+
{ id: 3, name: '1440p (2K)', width: 2560, height: 1440 },
|
|
33687
|
+
{ id: 4, name: '2160p (4K)', width: 4096, height: 2160 }
|
|
33688
|
+
];
|
|
33689
|
+
this.selectedImageSize = this.imageSizes[1];
|
|
33957
33690
|
this.hdriIntensity = 1;
|
|
33958
33691
|
this.hdriRotation = 0;
|
|
33959
33692
|
this.lightingExposure = 1;
|
|
@@ -33966,14 +33699,22 @@ class RenderControlsComponent {
|
|
|
33966
33699
|
this.showCullingErrorDialog = false;
|
|
33967
33700
|
this.startUploading = false;
|
|
33968
33701
|
this._subs = [];
|
|
33969
|
-
this._subs.push(this.messageService.subscribe(MessageType.BlenderRenderPreviewReady, (file) => this.showPreview(file)), this.messageService.subscribe(MessageType.
|
|
33702
|
+
this._subs.push(this.messageService.subscribe(MessageType.BlenderRenderPreviewReady, (file) => this.showPreview(file)), this.messageService.subscribe(MessageType.RenderFinished, (ready) => this.hideUploadDialog(ready)), this.messageService.subscribe(MessageType.RenderError, () => this.hideUploadDialog(true)), this._cameraService.cameraMovementChanged.subscribe(() => {
|
|
33970
33703
|
this._validateRenderPosition();
|
|
33971
33704
|
// Make sure when the camera moves, we recheck the position and if we still need to show the render warning.
|
|
33705
|
+
}), this.renderService.renderImageError.subscribe((error) => {
|
|
33706
|
+
if (error) {
|
|
33707
|
+
this.hideUploadDialog(true);
|
|
33708
|
+
this._dialogService.showDialog({ data: { title: 'Error', messages: [{ message: error }], type: 'error' } });
|
|
33709
|
+
}
|
|
33972
33710
|
}));
|
|
33973
33711
|
}
|
|
33974
33712
|
ngOnInit() {
|
|
33975
33713
|
this.getRenderScenesFromSettings();
|
|
33976
33714
|
}
|
|
33715
|
+
ngOnDestroy() {
|
|
33716
|
+
this._subs.forEach((sub) => sub.unsubscribe());
|
|
33717
|
+
}
|
|
33977
33718
|
showRenderForm(event) {
|
|
33978
33719
|
this.inPictureMode = !this.inPictureMode;
|
|
33979
33720
|
this._validateRenderPosition();
|
|
@@ -33987,16 +33728,14 @@ class RenderControlsComponent {
|
|
|
33987
33728
|
this.startUploading = false;
|
|
33988
33729
|
}
|
|
33989
33730
|
}
|
|
33990
|
-
createBlenderRender() {
|
|
33731
|
+
createBlenderRender(preview = false) {
|
|
33991
33732
|
if (!this.showCullingErrorDialog) {
|
|
33992
33733
|
if (this.viewModeService.isTopViewActive()) {
|
|
33993
33734
|
this._wallMeasurementsService.prepMeasurementsForRender();
|
|
33994
33735
|
}
|
|
33995
|
-
this.messageService.emit(MessageType.ShowLoadingIndicator, { title: this._dictionaryService.get('PREPARE_TO_RENDER') });
|
|
33996
33736
|
this.startUploading = true;
|
|
33997
33737
|
// only render when the showCullingErrorDialog is false
|
|
33998
33738
|
// this.messageService.emit(MessageType.ShowLoadingIndicator, {title: 'Uploading...'});
|
|
33999
|
-
const renderSize = this.renderService.getImageSizeOnId(this.renderService.selectedImageSize);
|
|
34000
33739
|
const renderSceneAssetId = this.selectedRenderScene;
|
|
34001
33740
|
if (this.lightingExposure < 1) {
|
|
34002
33741
|
this.lightingExposure = 1;
|
|
@@ -34004,15 +33743,15 @@ class RenderControlsComponent {
|
|
|
34004
33743
|
this._validateRenderPosition(); // Check the camera position
|
|
34005
33744
|
const allowCulling = this._allowCulling(this.hasError);
|
|
34006
33745
|
const renderInput = new BlenderRenderSettings();
|
|
34007
|
-
renderInput.height =
|
|
34008
|
-
renderInput.width =
|
|
33746
|
+
renderInput.height = preview ? 150 : this.selectedImageSize.height;
|
|
33747
|
+
renderInput.width = preview ? 275 : this.selectedImageSize.width;
|
|
34009
33748
|
renderInput.sceneAsset = renderSceneAssetId;
|
|
34010
33749
|
renderInput.hdriIntensity = this.hdriIntensity;
|
|
34011
33750
|
renderInput.hdriRotation = this.hdriRotation;
|
|
34012
33751
|
renderInput.lightingExposure = this.lightingExposure;
|
|
34013
33752
|
renderInput.allowCulling = allowCulling;
|
|
34014
33753
|
// this._utilsService.prepRoomForRender(false, renderInput);
|
|
34015
|
-
this.
|
|
33754
|
+
this.renderService.renderRoom(renderInput, preview);
|
|
34016
33755
|
if (this.viewModeService.isTopViewActive()) {
|
|
34017
33756
|
this._wallMeasurementsService.restoreMeasurementsAfterRender();
|
|
34018
33757
|
}
|
|
@@ -34040,35 +33779,6 @@ class RenderControlsComponent {
|
|
|
34040
33779
|
this._cameraService.camera.position.set(movingPosition.x, movingPosition.y, movingPosition.z);
|
|
34041
33780
|
this._cameraService.cameraMovementChanged.next();
|
|
34042
33781
|
}
|
|
34043
|
-
createPreviewRender() {
|
|
34044
|
-
if (!this.showCullingErrorDialog) {
|
|
34045
|
-
if (this.viewModeService.isTopViewActive()) {
|
|
34046
|
-
this._wallMeasurementsService.prepMeasurementsForRender();
|
|
34047
|
-
}
|
|
34048
|
-
const renderSceneAssetId = this.selectedRenderScene;
|
|
34049
|
-
// this.messageService.emit(MessageType.ShowLoadingIndicator, {title: 'Uploading...'});
|
|
34050
|
-
// this.messageService.emit(MessageType.ShowLoadingIndicator, {title: this._dictionaryService.get('PREPARE_TO_RENDER')});
|
|
34051
|
-
this.startUploading = true;
|
|
34052
|
-
if (this.lightingExposure < 1) {
|
|
34053
|
-
this.lightingExposure = 1;
|
|
34054
|
-
}
|
|
34055
|
-
this._validateRenderPosition(); // Check the camera position
|
|
34056
|
-
const allowCulling = this._allowCulling(this.hasError);
|
|
34057
|
-
const renderInput = new BlenderRenderSettings();
|
|
34058
|
-
renderInput.height = 150;
|
|
34059
|
-
renderInput.width = 275;
|
|
34060
|
-
renderInput.sceneAsset = renderSceneAssetId;
|
|
34061
|
-
renderInput.hdriIntensity = this.hdriIntensity;
|
|
34062
|
-
renderInput.hdriRotation = this.hdriRotation;
|
|
34063
|
-
renderInput.lightingExposure = this.lightingExposure;
|
|
34064
|
-
renderInput.allowCulling = allowCulling;
|
|
34065
|
-
// this._utilsService.prepRoomForRender(false, renderInput, true);
|
|
34066
|
-
this._newRenderService.renderRoom(renderInput, true);
|
|
34067
|
-
if (this.viewModeService.isTopViewActive()) {
|
|
34068
|
-
this._wallMeasurementsService.restoreMeasurementsAfterRender();
|
|
34069
|
-
}
|
|
34070
|
-
}
|
|
34071
|
-
}
|
|
34072
33782
|
showPreview(image) {
|
|
34073
33783
|
this.blenderPreviewRender = image;
|
|
34074
33784
|
}
|
|
@@ -34153,465 +33863,413 @@ class RenderControlsComponent {
|
|
|
34153
33863
|
// }
|
|
34154
33864
|
// return allowCulling;
|
|
34155
33865
|
}
|
|
34156
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderControlsComponent, deps: [{ token:
|
|
33866
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderControlsComponent, deps: [{ token: MessageBusService }, { token: ViewModeService }, { token: HomedecoratorSettingsService }, { token: HomedecoratorIconCacheService }, { token: RenderService }, { token: i1$2.MatDialog }, { token: SceneService }, { token: CameraService }, { token: ConfigurationService }, { token: HomedecoratorSettingsService }, { token: UtilsService }, { token: RoomService }, { token: WallMeasurementsService }, { token: ConnectionHeathService }, { token: HomedecoratorDictionaryService }, { token: DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34157
33867
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: RenderControlsComponent, isStandalone: false, selector: "rp-render-controls", viewQueries: [{ propertyName: "renderButton", first: true, predicate: ["renderButton"], descendants: true }], ngImport: i0, template: `
|
|
34158
|
-
|
|
34159
|
-
|
|
34160
|
-
|
|
34161
|
-
|
|
34162
|
-
|
|
34163
|
-
|
|
34164
|
-
|
|
34165
|
-
|
|
34166
|
-
|
|
34167
|
-
|
|
34168
|
-
|
|
34169
|
-
|
|
34170
|
-
|
|
34171
|
-
|
|
34172
|
-
|
|
34173
|
-
|
|
34174
|
-
|
|
34175
|
-
|
|
34176
|
-
|
|
34177
|
-
|
|
34178
|
-
|
|
34179
|
-
|
|
34180
|
-
|
|
34181
|
-
|
|
34182
|
-
|
|
34183
|
-
|
|
34184
|
-
|
|
34185
|
-
|
|
34186
|
-
|
|
34187
|
-
|
|
34188
|
-
<button
|
|
34189
|
-
class="close-popup-container"
|
|
34190
|
-
(click)="resetBlenderRenderScene()">
|
|
34191
|
-
<co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
|
|
34192
|
-
</button>
|
|
34193
|
-
</div>
|
|
34194
|
-
<div class="render-popup-preview">
|
|
34195
|
-
@if (blenderPreviewRender) {
|
|
34196
|
-
<img [src]="blenderPreviewRender" alt="">
|
|
34197
|
-
}
|
|
34198
|
-
@if (!blenderPreviewRender) {
|
|
34199
|
-
<div class="render-popup-preview-placeholder">
|
|
34200
|
-
<span>{{ 'PREVIEW' | localize }}</span>
|
|
34201
|
-
</div>
|
|
34202
|
-
}
|
|
34203
|
-
<button
|
|
34204
|
-
class="render-popup-refresh-preview"
|
|
34205
|
-
(click)="createPreviewRender()"
|
|
34206
|
-
>
|
|
34207
|
-
<co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
|
|
34208
|
-
</button>
|
|
34209
|
-
</div>
|
|
34210
|
-
@if (renderService.blendFilesRender) {
|
|
34211
|
-
<div class="render-popup-dropdown">
|
|
34212
|
-
<div class="toggleable" (click)="toggleRenderSettings()">
|
|
34213
|
-
<p>
|
|
34214
|
-
@if (!showRenderSettings) {
|
|
34215
|
-
<span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
|
|
34216
|
-
}
|
|
34217
|
-
@if (showRenderSettings) {
|
|
34218
|
-
<span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
|
|
34219
|
-
}
|
|
34220
|
-
</p>
|
|
34221
|
-
<co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
|
|
34222
|
-
[iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
|
|
34223
|
-
</div>
|
|
34224
|
-
@if (showRenderSettings) {
|
|
34225
|
-
<div class="advanced-render-settings">
|
|
34226
|
-
<div class="setting-part-container">
|
|
34227
|
-
@if (renderService.serverData.renderMode === renderModes.RenderRoom) {
|
|
34228
|
-
<mat-form-field
|
|
34229
|
-
class="face-select-form"
|
|
34230
|
-
>
|
|
34231
|
-
<mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
|
|
34232
|
-
<mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
|
|
34233
|
-
@for (scene of sceneList; track scene) {
|
|
34234
|
-
<mat-option
|
|
34235
|
-
[value]="scene">{{ scene.name }}
|
|
34236
|
-
</mat-option>
|
|
34237
|
-
}
|
|
34238
|
-
</mat-select>
|
|
34239
|
-
</mat-form-field>
|
|
33868
|
+
<div class="render-container">
|
|
33869
|
+
@if (startUploading) {
|
|
33870
|
+
<rp-render-progress></rp-render-progress>
|
|
33871
|
+
}
|
|
33872
|
+
<!-- the Yellow render indicators -->
|
|
33873
|
+
@if (inPictureMode) {
|
|
33874
|
+
<div class="render-indicators">
|
|
33875
|
+
<div class="render-indicator-top-left"></div>
|
|
33876
|
+
<div class="render-indicator-top-right"></div>
|
|
33877
|
+
<div class="render-indicator-bottom-left"></div>
|
|
33878
|
+
<div class="render-indicator-bottom-right"></div>
|
|
33879
|
+
</div>
|
|
33880
|
+
<div class="render-popup-container">
|
|
33881
|
+
<div class="render-popup-header">
|
|
33882
|
+
<h3>
|
|
33883
|
+
<span>{{ 'PICTURE_MODE' | localize }}</span>
|
|
33884
|
+
@if (hasError) {
|
|
33885
|
+
<co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
|
|
33886
|
+
[matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
|
|
33887
|
+
}
|
|
33888
|
+
</h3>
|
|
33889
|
+
<button
|
|
33890
|
+
class="close-popup-container"
|
|
33891
|
+
(click)="resetBlenderRenderScene()">
|
|
33892
|
+
<co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
|
|
33893
|
+
</button>
|
|
33894
|
+
</div>
|
|
33895
|
+
<div class="render-popup-preview">
|
|
33896
|
+
@if (blenderPreviewRender) {
|
|
33897
|
+
<img [src]="blenderPreviewRender" alt="">
|
|
34240
33898
|
}
|
|
34241
|
-
|
|
34242
|
-
|
|
34243
|
-
|
|
34244
|
-
<mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
|
|
34245
|
-
<input
|
|
34246
|
-
[type]="'number'"
|
|
34247
|
-
matInput
|
|
34248
|
-
[(ngModel)]="hdriIntensity"
|
|
34249
|
-
(ngModelChange)="hdriIntensity = +$event">
|
|
34250
|
-
</mat-form-field>
|
|
34251
|
-
<div class="setting-part-buttons">
|
|
34252
|
-
<button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
|
|
34253
|
-
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
34254
|
-
</button>
|
|
34255
|
-
<button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
|
|
34256
|
-
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
34257
|
-
</button>
|
|
34258
|
-
</div>
|
|
34259
|
-
<div class="setting-part-slider">
|
|
34260
|
-
<mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
|
|
34261
|
-
</div>
|
|
34262
|
-
</div>
|
|
34263
|
-
<div class="setting-part-container">
|
|
34264
|
-
<mat-form-field class="third-width">
|
|
34265
|
-
<mat-label [textContent]="'ROTATION' | localize"></mat-label>
|
|
34266
|
-
<input
|
|
34267
|
-
[type]="'number'"
|
|
34268
|
-
matInput
|
|
34269
|
-
[(ngModel)]="hdriRotation"
|
|
34270
|
-
(ngModelChange)="hdriRotation = +$event">
|
|
34271
|
-
</mat-form-field>
|
|
34272
|
-
<div class="setting-part-buttons">
|
|
34273
|
-
<button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
|
|
34274
|
-
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
34275
|
-
</button>
|
|
34276
|
-
<button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
|
|
34277
|
-
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
34278
|
-
</button>
|
|
34279
|
-
</div>
|
|
34280
|
-
<div class="setting-part-slider">
|
|
34281
|
-
<mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
|
|
33899
|
+
@if (!blenderPreviewRender) {
|
|
33900
|
+
<div class="render-popup-preview-placeholder">
|
|
33901
|
+
<span>{{ 'PREVIEW' | localize }}</span>
|
|
34282
33902
|
</div>
|
|
34283
|
-
</div>
|
|
34284
|
-
<div class="setting-part-container">
|
|
34285
|
-
<mat-form-field class="third-width">
|
|
34286
|
-
<mat-label [textContent]="'LIGHTS' | localize"></mat-label>
|
|
34287
|
-
<input
|
|
34288
|
-
[type]="'number'"
|
|
34289
|
-
matInput
|
|
34290
|
-
[(ngModel)]="lightingExposure"
|
|
34291
|
-
(ngModelChange)="lightingExposure = +$event">
|
|
34292
|
-
</mat-form-field>
|
|
34293
|
-
<div class="setting-part-buttons">
|
|
34294
|
-
<button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
|
|
34295
|
-
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
34296
|
-
</button>
|
|
34297
|
-
<button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
|
|
34298
|
-
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
34299
|
-
</button>
|
|
34300
|
-
</div>
|
|
34301
|
-
<div class="setting-part-slider">
|
|
34302
|
-
<mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
|
|
34303
|
-
</div>
|
|
34304
|
-
</div>
|
|
34305
|
-
</div>
|
|
34306
33903
|
}
|
|
34307
|
-
|
|
33904
|
+
<button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
|
|
33905
|
+
<co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
|
|
33906
|
+
</button>
|
|
33907
|
+
</div>
|
|
33908
|
+
@if (renderService.blendFilesRender) {
|
|
33909
|
+
<div class="render-popup-dropdown">
|
|
33910
|
+
<div class="toggleable" (click)="toggleRenderSettings()">
|
|
33911
|
+
<p>
|
|
33912
|
+
@if (!showRenderSettings) {
|
|
33913
|
+
<span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
|
|
33914
|
+
}
|
|
33915
|
+
@if (showRenderSettings) {
|
|
33916
|
+
<span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
|
|
33917
|
+
}
|
|
33918
|
+
</p>
|
|
33919
|
+
<co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
|
|
33920
|
+
[iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
|
|
33921
|
+
</div>
|
|
33922
|
+
@if (showRenderSettings) {
|
|
33923
|
+
<div class="advanced-render-settings">
|
|
33924
|
+
<div class="setting-part-container">
|
|
33925
|
+
<mat-form-field
|
|
33926
|
+
class="face-select-form"
|
|
33927
|
+
>
|
|
33928
|
+
<mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
|
|
33929
|
+
<mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
|
|
33930
|
+
@for (scene of sceneList; track scene) {
|
|
33931
|
+
<mat-option
|
|
33932
|
+
[value]="scene">{{ scene.name }}
|
|
33933
|
+
</mat-option>
|
|
33934
|
+
}
|
|
33935
|
+
</mat-select>
|
|
33936
|
+
</mat-form-field>
|
|
33937
|
+
</div>
|
|
33938
|
+
<div class="setting-part-container">
|
|
33939
|
+
<mat-form-field class="third-width">
|
|
33940
|
+
<mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
|
|
33941
|
+
<input
|
|
33942
|
+
[type]="'number'"
|
|
33943
|
+
matInput
|
|
33944
|
+
[(ngModel)]="hdriIntensity"
|
|
33945
|
+
(ngModelChange)="hdriIntensity = +$event">
|
|
33946
|
+
</mat-form-field>
|
|
33947
|
+
<div class="setting-part-buttons">
|
|
33948
|
+
<button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
|
|
33949
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
33950
|
+
</button>
|
|
33951
|
+
<button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
|
|
33952
|
+
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
33953
|
+
</button>
|
|
33954
|
+
</div>
|
|
33955
|
+
<div class="setting-part-slider">
|
|
33956
|
+
<mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
|
|
33957
|
+
</div>
|
|
33958
|
+
</div>
|
|
33959
|
+
<div class="setting-part-container">
|
|
33960
|
+
<mat-form-field class="third-width">
|
|
33961
|
+
<mat-label [textContent]="'ROTATION' | localize"></mat-label>
|
|
33962
|
+
<input
|
|
33963
|
+
[type]="'number'"
|
|
33964
|
+
matInput
|
|
33965
|
+
[(ngModel)]="hdriRotation"
|
|
33966
|
+
(ngModelChange)="hdriRotation = +$event">
|
|
33967
|
+
</mat-form-field>
|
|
33968
|
+
<div class="setting-part-buttons">
|
|
33969
|
+
<button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
|
|
33970
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
33971
|
+
</button>
|
|
33972
|
+
<button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
|
|
33973
|
+
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
33974
|
+
</button>
|
|
33975
|
+
</div>
|
|
33976
|
+
<div class="setting-part-slider">
|
|
33977
|
+
<mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
|
|
33978
|
+
</div>
|
|
33979
|
+
</div>
|
|
33980
|
+
<div class="setting-part-container">
|
|
33981
|
+
<mat-form-field class="third-width">
|
|
33982
|
+
<mat-label [textContent]="'LIGHTS' | localize"></mat-label>
|
|
33983
|
+
<input
|
|
33984
|
+
[type]="'number'"
|
|
33985
|
+
matInput
|
|
33986
|
+
[(ngModel)]="lightingExposure"
|
|
33987
|
+
(ngModelChange)="lightingExposure = +$event">
|
|
33988
|
+
</mat-form-field>
|
|
33989
|
+
<div class="setting-part-buttons">
|
|
33990
|
+
<button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
|
|
33991
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
33992
|
+
</button>
|
|
33993
|
+
<button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
|
|
33994
|
+
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
33995
|
+
</button>
|
|
33996
|
+
</div>
|
|
33997
|
+
<div class="setting-part-slider">
|
|
33998
|
+
<mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
|
|
33999
|
+
</div>
|
|
34000
|
+
</div>
|
|
34001
|
+
</div>
|
|
34002
|
+
}
|
|
34003
|
+
</div>
|
|
34308
34004
|
}
|
|
34309
|
-
|
|
34310
|
-
<div class="render-popup-dropdown">
|
|
34005
|
+
<div class="render-popup-dropdown">
|
|
34311
34006
|
<mat-form-field class="face-select-form">
|
|
34312
|
-
|
|
34313
|
-
|
|
34314
|
-
|
|
34315
|
-
|
|
34316
|
-
|
|
34317
|
-
|
|
34318
|
-
|
|
34319
|
-
|
|
34007
|
+
<mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
|
|
34008
|
+
<mat-select [(value)]="selectedImageSize">
|
|
34009
|
+
@for (size of imageSizes; track size) {
|
|
34010
|
+
<mat-option [value]="size">{{ size.name }} {{ size.width }}
|
|
34011
|
+
x{{ size.height }}
|
|
34012
|
+
</mat-option>
|
|
34013
|
+
}
|
|
34014
|
+
</mat-select>
|
|
34320
34015
|
</mat-form-field>
|
|
34321
|
-
|
|
34322
|
-
}
|
|
34016
|
+
</div>
|
|
34323
34017
|
<div class="render-popup-button-container">
|
|
34324
|
-
|
|
34325
|
-
|
|
34326
|
-
|
|
34327
|
-
|
|
34328
|
-
|
|
34329
|
-
|
|
34330
|
-
|
|
34331
|
-
|
|
34332
|
-
|
|
34333
|
-
|
|
34334
|
-
|
|
34335
|
-
|
|
34336
|
-
|
|
34018
|
+
<button class="render-popup-button photo-button"
|
|
34019
|
+
(click)="createBlenderRender()"
|
|
34020
|
+
title="{{'MAKE_A_PICTURE' | localize}}"
|
|
34021
|
+
[disabled]="disablePictureButton">
|
|
34022
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
|
|
34023
|
+
{{ 'MAKE_A_PICTURE' | localize }}
|
|
34024
|
+
</button>
|
|
34025
|
+
<button
|
|
34026
|
+
class="render-popup-button cancel-button"
|
|
34027
|
+
(click)="resetBlenderRenderScene()">
|
|
34028
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
|
|
34029
|
+
{{ 'CLOSE_PHOTO_MODE' | localize }}
|
|
34030
|
+
</button>
|
|
34337
34031
|
</div>
|
|
34338
|
-
|
|
34339
|
-
|
|
34340
|
-
|
|
34341
|
-
|
|
34032
|
+
</div>
|
|
34033
|
+
}
|
|
34034
|
+
@if (showCullingErrorDialog) {
|
|
34035
|
+
<div class="render-warning">
|
|
34342
34036
|
<div class="render-warming-header">
|
|
34343
|
-
|
|
34344
|
-
|
|
34345
|
-
|
|
34346
|
-
|
|
34037
|
+
<h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
|
|
34038
|
+
<div class="render-warning-close" (click)="showCullingErrorDialog = false">
|
|
34039
|
+
<mat-icon class="homedecorator-material-icons">cancel</mat-icon>
|
|
34040
|
+
</div>
|
|
34347
34041
|
</div>
|
|
34348
34042
|
<div class="render-warning-body">
|
|
34349
|
-
|
|
34043
|
+
<p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
|
|
34350
34044
|
</div>
|
|
34351
34045
|
<div class="render-warning-footer">
|
|
34352
|
-
|
|
34353
|
-
|
|
34354
|
-
|
|
34355
|
-
|
|
34356
|
-
|
|
34357
|
-
|
|
34046
|
+
<button
|
|
34047
|
+
class="render-popup-button cancel-button"
|
|
34048
|
+
(click)="showCullingErrorDialog = false">
|
|
34049
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
|
|
34050
|
+
{{ 'CLOSE' | localize }}
|
|
34051
|
+
</button>
|
|
34358
34052
|
</div>
|
|
34359
|
-
|
|
34360
|
-
}
|
|
34361
|
-
<rp-render-progress
|
|
34362
|
-
[title]="'PREPARE_TO_RENDER' | localize"
|
|
34363
|
-
[show]="startUploading"
|
|
34364
|
-
>
|
|
34365
|
-
</rp-render-progress>
|
|
34366
|
-
<button
|
|
34367
|
-
#renderButton
|
|
34368
|
-
mat-raised-button
|
|
34369
|
-
matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
|
|
34370
|
-
[id]="'standalone_render_picture'"
|
|
34371
|
-
[class.active]="(
|
|
34372
|
-
(renderService.serverData.renderMode === renderService.renderModes.RenderRoom && viewModeService.viewMode === viewModes.WalkThrough) ||
|
|
34373
|
-
(renderService.serverData.renderMode === renderService.renderModes.RenderIone))"
|
|
34374
|
-
(click)="showRenderForm($event)"
|
|
34375
|
-
>
|
|
34376
|
-
<mat-icon class="icon homedecorator-material-icons"
|
|
34377
|
-
aria-hidden="true">{{ (renderService.currentQueueRenderItem.renderStatus === renderStatus.IsRunning ? 'open_in_browser' : 'photo_camera') }}
|
|
34378
|
-
</mat-icon>
|
|
34379
|
-
</button>
|
|
34380
|
-
</div>
|
|
34053
|
+
</div>
|
|
34381
34054
|
}
|
|
34382
|
-
|
|
34383
|
-
`, isInline: true, styles: [".render-container{position:relative}.render-container .render-popup-container{background:#ffffffb3;padding:10px 25px 25px;border-radius:5px;box-shadow:0 1px 5px #0000001f}.render-container .render-popup-container .render-popup-header{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-header h3{display:flex;justify-content:space-between}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon{width:20px;height:20px;margin-left:20px}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg,.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg polygon{fill:#dc143c}.render-container .render-popup-container .render-popup-header .close-popup-container{cursor:pointer;border:none;background:none;float:none;height:auto;width:auto}.render-container .render-popup-container .render-popup-button-container{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-button-container .render-popup-button{float:none;width:100%;max-width:130px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-button-container .photo-button{color:#fff;background-color:#dda73f}.render-container .render-popup-container .render-popup-button-container .cancel-button{color:#fff;background-color:#5b6875}.render-container .render-popup-container .render-popup-preview{background-color:#fff;min-height:150px;min-width:275px;margin:5px 0;position:relative;width:275px;height:150px}.render-container .render-popup-container .render-popup-preview .render-popup-preview-placeholder{background-color:#fff;display:flex;justify-content:space-around;align-items:center;vertical-align:middle;min-height:150px;border:1px solid #ddd;color:#ddd;font-size:14px}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview{position:absolute;bottom:0;right:0;cursor:pointer;border-radius:0;border:none;height:30px;width:30px;background-color:#dda73f;color:#fff;margin:0}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-dropdown{margin:5px 0;width:100%}.render-container .render-popup-container .render-popup-dropdown .toggleable{cursor:pointer;display:flex;justify-content:right;align-content:center}.render-container .render-popup-container .render-popup-dropdown .toggleable p{padding:0;margin:0;font-size:12px;line-height:30px}.render-container .render-popup-container .render-popup-dropdown .toggleable .icon-rotate{transform:rotate(180deg)}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field{width:100%;font-size:14px}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-flex{background-color:#fff;color:#000;padding:3px 6px;border:1px solid #ddd}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-underline{display:none}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper{padding-bottom:0}.render-container .render-popup-container .render-popup-dropdown .setting-part-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .third-width{width:32%}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button{float:none;box-sizing:border-box;padding:2px;background:none;cursor:pointer;border:none;width:25px;height:25px;margin:0 5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon{display:block;width:25px;height:25px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon ::ng-deep svg{fill:#5b6875}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-slider .mat-slider-horizontal{min-width:110px;height:28px}.render-container .render-progress{float:left;min-width:50px;border-radius:25px;line-height:50px;text-align:center;padding:0 60px 0 20px;background:#fff;color:#74b77f;font-weight:700;margin:0 -50px 0 0}.render-container .render-input-container{float:right}.render-container .render-input-container input{width:100px;height:24px;margin:5px 0;padding:0 10px;font-size:14px}.render-container button{pointer-events:all;width:50px;height:50px;float:right;border-radius:100%;position:relative;z-index:2;margin-bottom:10px}.render-container button.active{background:#74b77f;color:#fff}.render-container button>*{pointer-events:none}.render-indicators div{position:fixed;width:100px;height:100px}.render-indicators .render-indicator-top-left{left:5vw;top:10vh;border-left:10px solid #dda73f;border-top:10px solid #dda73f;border-top-left-radius:20px}.render-indicators .render-indicator-top-right{right:5vw;top:10vh;border-right:10px solid #dda73f;border-top:10px solid #dda73f;border-top-right-radius:20px}.render-indicators .render-indicator-bottom-left{left:5vw;bottom:5vh;border-left:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-left-radius:20px}.render-indicators .render-indicator-bottom-right{right:5vw;bottom:5vh;border-right:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-right-radius:20px}.render-warning{width:500px;position:fixed;top:20%;left:calc(50% - 250px);border-radius:15px;box-sizing:border-box;background-color:#fff;box-shadow:1px 0 20px #0000001f}.render-warning .render-warming-header{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-warning .render-warming-header h2{padding:0;margin:0}.render-warning .render-warming-header .render-warning-close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-warning .render-warming-header .render-warning-close:hover mat-icon{fill:#46494c;color:#46494c}.render-warning .render-warning-body{padding:10px 20px}.render-warning .render-warning-footer{display:flex;justify-content:center;padding:0 20px 10px}.render-warning .render-warning-footer .render-popup-button{float:none;width:110px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly;color:#fff;background-color:#5b6875}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon svg path{fill:#fff}\n"], dependencies: [{ kind: "directive", type: i2$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i2$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "component", type: i3$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: i3$3.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "component", type: RenderProgressComponent, selector: "rp-render-progress", inputs: ["show", "title"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
|
|
34055
|
+
<button
|
|
34056
|
+
#renderButton
|
|
34057
|
+
mat-raised-button
|
|
34058
|
+
matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
|
|
34059
|
+
[id]="'standalone_render_picture'"
|
|
34060
|
+
[class.active]="viewModeService.viewMode === viewModes.WalkThrough"
|
|
34061
|
+
(click)="showRenderForm($event)">
|
|
34062
|
+
<mat-icon class="icon homedecorator-material-icons"
|
|
34063
|
+
aria-hidden="true">{{ 'photo_camera' }}
|
|
34064
|
+
</mat-icon>
|
|
34065
|
+
</button>
|
|
34066
|
+
</div>
|
|
34067
|
+
`, isInline: true, styles: [".render-container{position:relative}.render-container .render-popup-container{background:#ffffffb3;padding:10px 25px 25px;border-radius:5px;box-shadow:0 1px 5px #0000001f}.render-container .render-popup-container .render-popup-header{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-header h3{display:flex;justify-content:space-between}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon{width:20px;height:20px;margin-left:20px}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg,.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg polygon{fill:#dc143c}.render-container .render-popup-container .render-popup-header .close-popup-container{cursor:pointer;border:none;background:none;float:none;height:auto;width:auto}.render-container .render-popup-container .render-popup-button-container{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-button-container .render-popup-button{float:none;width:100%;max-width:130px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-button-container .photo-button{color:#fff;background-color:#dda73f}.render-container .render-popup-container .render-popup-button-container .cancel-button{color:#fff;background-color:#5b6875}.render-container .render-popup-container .render-popup-preview{background-color:#fff;min-height:150px;min-width:275px;margin:5px 0;position:relative;width:275px;height:150px}.render-container .render-popup-container .render-popup-preview .render-popup-preview-placeholder{background-color:#fff;display:flex;justify-content:space-around;align-items:center;vertical-align:middle;min-height:150px;border:1px solid #ddd;color:#ddd;font-size:14px}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview{position:absolute;bottom:0;right:0;cursor:pointer;border-radius:0;border:none;height:30px;width:30px;background-color:#dda73f;color:#fff;margin:0}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-dropdown{margin:5px 0;width:100%}.render-container .render-popup-container .render-popup-dropdown .toggleable{cursor:pointer;display:flex;justify-content:right;align-content:center}.render-container .render-popup-container .render-popup-dropdown .toggleable p{padding:0;margin:0;font-size:12px;line-height:30px}.render-container .render-popup-container .render-popup-dropdown .toggleable .icon-rotate{transform:rotate(180deg)}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field{width:100%;font-size:14px}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-flex{background-color:#fff;color:#000;padding:3px 6px;border:1px solid #ddd}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-underline{display:none}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper{padding-bottom:0}.render-container .render-popup-container .render-popup-dropdown .setting-part-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .third-width{width:32%}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button{float:none;box-sizing:border-box;padding:2px;background:none;cursor:pointer;border:none;width:25px;height:25px;margin:0 5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon{display:block;width:25px;height:25px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon ::ng-deep svg{fill:#5b6875}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-slider .mat-slider-horizontal{min-width:110px;height:28px}.render-container .render-progress{float:left;min-width:50px;border-radius:25px;line-height:50px;text-align:center;padding:0 60px 0 20px;background:#fff;color:#74b77f;font-weight:700;margin:0 -50px 0 0}.render-container .render-input-container{float:right}.render-container .render-input-container input{width:100px;height:24px;margin:5px 0;padding:0 10px;font-size:14px}.render-container button{pointer-events:all;width:50px;height:50px;float:right;border-radius:100%;position:relative;z-index:2;margin-bottom:10px}.render-container button.active{background:#74b77f;color:#fff}.render-container button>*{pointer-events:none}.render-indicators div{position:fixed;width:100px;height:100px}.render-indicators .render-indicator-top-left{left:5vw;top:10vh;border-left:10px solid #dda73f;border-top:10px solid #dda73f;border-top-left-radius:20px}.render-indicators .render-indicator-top-right{right:5vw;top:10vh;border-right:10px solid #dda73f;border-top:10px solid #dda73f;border-top-right-radius:20px}.render-indicators .render-indicator-bottom-left{left:5vw;bottom:5vh;border-left:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-left-radius:20px}.render-indicators .render-indicator-bottom-right{right:5vw;bottom:5vh;border-right:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-right-radius:20px}.render-warning{width:500px;position:fixed;top:20%;left:calc(50% - 250px);border-radius:15px;box-sizing:border-box;background-color:#fff;box-shadow:1px 0 20px #0000001f}.render-warning .render-warming-header{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-warning .render-warming-header h2{padding:0;margin:0}.render-warning .render-warming-header .render-warning-close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-warning .render-warming-header .render-warning-close:hover mat-icon{fill:#46494c;color:#46494c}.render-warning .render-warning-body{padding:10px 20px}.render-warning .render-warning-footer{display:flex;justify-content:center;padding:0 20px 10px}.render-warning .render-warning-footer .render-popup-button{float:none;width:110px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly;color:#fff;background-color:#5b6875}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon svg path{fill:#fff}\n"], dependencies: [{ kind: "directive", type: i2$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i2$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "component", type: i3$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: i3$3.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "component", type: RenderProgressComponent, selector: "rp-render-progress" }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
|
|
34384
34068
|
}
|
|
34385
34069
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderControlsComponent, decorators: [{
|
|
34386
34070
|
type: Component,
|
|
34387
34071
|
args: [{ selector: 'rp-render-controls', template: `
|
|
34388
|
-
|
|
34389
|
-
|
|
34390
|
-
|
|
34391
|
-
|
|
34392
|
-
|
|
34393
|
-
|
|
34394
|
-
|
|
34395
|
-
|
|
34396
|
-
|
|
34397
|
-
|
|
34398
|
-
|
|
34399
|
-
|
|
34400
|
-
|
|
34401
|
-
|
|
34402
|
-
|
|
34403
|
-
|
|
34404
|
-
|
|
34405
|
-
|
|
34406
|
-
|
|
34407
|
-
|
|
34408
|
-
|
|
34409
|
-
|
|
34410
|
-
|
|
34411
|
-
|
|
34412
|
-
|
|
34413
|
-
|
|
34414
|
-
|
|
34415
|
-
|
|
34416
|
-
|
|
34417
|
-
|
|
34418
|
-
<button
|
|
34419
|
-
class="close-popup-container"
|
|
34420
|
-
(click)="resetBlenderRenderScene()">
|
|
34421
|
-
<co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
|
|
34422
|
-
</button>
|
|
34423
|
-
</div>
|
|
34424
|
-
<div class="render-popup-preview">
|
|
34425
|
-
@if (blenderPreviewRender) {
|
|
34426
|
-
<img [src]="blenderPreviewRender" alt="">
|
|
34427
|
-
}
|
|
34428
|
-
@if (!blenderPreviewRender) {
|
|
34429
|
-
<div class="render-popup-preview-placeholder">
|
|
34430
|
-
<span>{{ 'PREVIEW' | localize }}</span>
|
|
34431
|
-
</div>
|
|
34432
|
-
}
|
|
34433
|
-
<button
|
|
34434
|
-
class="render-popup-refresh-preview"
|
|
34435
|
-
(click)="createPreviewRender()"
|
|
34436
|
-
>
|
|
34437
|
-
<co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
|
|
34438
|
-
</button>
|
|
34439
|
-
</div>
|
|
34440
|
-
@if (renderService.blendFilesRender) {
|
|
34441
|
-
<div class="render-popup-dropdown">
|
|
34442
|
-
<div class="toggleable" (click)="toggleRenderSettings()">
|
|
34443
|
-
<p>
|
|
34444
|
-
@if (!showRenderSettings) {
|
|
34445
|
-
<span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
|
|
34446
|
-
}
|
|
34447
|
-
@if (showRenderSettings) {
|
|
34448
|
-
<span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
|
|
34449
|
-
}
|
|
34450
|
-
</p>
|
|
34451
|
-
<co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
|
|
34452
|
-
[iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
|
|
34453
|
-
</div>
|
|
34454
|
-
@if (showRenderSettings) {
|
|
34455
|
-
<div class="advanced-render-settings">
|
|
34456
|
-
<div class="setting-part-container">
|
|
34457
|
-
@if (renderService.serverData.renderMode === renderModes.RenderRoom) {
|
|
34458
|
-
<mat-form-field
|
|
34459
|
-
class="face-select-form"
|
|
34460
|
-
>
|
|
34461
|
-
<mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
|
|
34462
|
-
<mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
|
|
34463
|
-
@for (scene of sceneList; track scene) {
|
|
34464
|
-
<mat-option
|
|
34465
|
-
[value]="scene">{{ scene.name }}
|
|
34466
|
-
</mat-option>
|
|
34467
|
-
}
|
|
34468
|
-
</mat-select>
|
|
34469
|
-
</mat-form-field>
|
|
34072
|
+
<div class="render-container">
|
|
34073
|
+
@if (startUploading) {
|
|
34074
|
+
<rp-render-progress></rp-render-progress>
|
|
34075
|
+
}
|
|
34076
|
+
<!-- the Yellow render indicators -->
|
|
34077
|
+
@if (inPictureMode) {
|
|
34078
|
+
<div class="render-indicators">
|
|
34079
|
+
<div class="render-indicator-top-left"></div>
|
|
34080
|
+
<div class="render-indicator-top-right"></div>
|
|
34081
|
+
<div class="render-indicator-bottom-left"></div>
|
|
34082
|
+
<div class="render-indicator-bottom-right"></div>
|
|
34083
|
+
</div>
|
|
34084
|
+
<div class="render-popup-container">
|
|
34085
|
+
<div class="render-popup-header">
|
|
34086
|
+
<h3>
|
|
34087
|
+
<span>{{ 'PICTURE_MODE' | localize }}</span>
|
|
34088
|
+
@if (hasError) {
|
|
34089
|
+
<co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
|
|
34090
|
+
[matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
|
|
34091
|
+
}
|
|
34092
|
+
</h3>
|
|
34093
|
+
<button
|
|
34094
|
+
class="close-popup-container"
|
|
34095
|
+
(click)="resetBlenderRenderScene()">
|
|
34096
|
+
<co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
|
|
34097
|
+
</button>
|
|
34098
|
+
</div>
|
|
34099
|
+
<div class="render-popup-preview">
|
|
34100
|
+
@if (blenderPreviewRender) {
|
|
34101
|
+
<img [src]="blenderPreviewRender" alt="">
|
|
34470
34102
|
}
|
|
34471
|
-
|
|
34472
|
-
|
|
34473
|
-
|
|
34474
|
-
<mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
|
|
34475
|
-
<input
|
|
34476
|
-
[type]="'number'"
|
|
34477
|
-
matInput
|
|
34478
|
-
[(ngModel)]="hdriIntensity"
|
|
34479
|
-
(ngModelChange)="hdriIntensity = +$event">
|
|
34480
|
-
</mat-form-field>
|
|
34481
|
-
<div class="setting-part-buttons">
|
|
34482
|
-
<button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
|
|
34483
|
-
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
34484
|
-
</button>
|
|
34485
|
-
<button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
|
|
34486
|
-
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
34487
|
-
</button>
|
|
34488
|
-
</div>
|
|
34489
|
-
<div class="setting-part-slider">
|
|
34490
|
-
<mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
|
|
34491
|
-
</div>
|
|
34492
|
-
</div>
|
|
34493
|
-
<div class="setting-part-container">
|
|
34494
|
-
<mat-form-field class="third-width">
|
|
34495
|
-
<mat-label [textContent]="'ROTATION' | localize"></mat-label>
|
|
34496
|
-
<input
|
|
34497
|
-
[type]="'number'"
|
|
34498
|
-
matInput
|
|
34499
|
-
[(ngModel)]="hdriRotation"
|
|
34500
|
-
(ngModelChange)="hdriRotation = +$event">
|
|
34501
|
-
</mat-form-field>
|
|
34502
|
-
<div class="setting-part-buttons">
|
|
34503
|
-
<button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
|
|
34504
|
-
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
34505
|
-
</button>
|
|
34506
|
-
<button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
|
|
34507
|
-
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
34508
|
-
</button>
|
|
34509
|
-
</div>
|
|
34510
|
-
<div class="setting-part-slider">
|
|
34511
|
-
<mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
|
|
34512
|
-
</div>
|
|
34513
|
-
</div>
|
|
34514
|
-
<div class="setting-part-container">
|
|
34515
|
-
<mat-form-field class="third-width">
|
|
34516
|
-
<mat-label [textContent]="'LIGHTS' | localize"></mat-label>
|
|
34517
|
-
<input
|
|
34518
|
-
[type]="'number'"
|
|
34519
|
-
matInput
|
|
34520
|
-
[(ngModel)]="lightingExposure"
|
|
34521
|
-
(ngModelChange)="lightingExposure = +$event">
|
|
34522
|
-
</mat-form-field>
|
|
34523
|
-
<div class="setting-part-buttons">
|
|
34524
|
-
<button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
|
|
34525
|
-
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
34526
|
-
</button>
|
|
34527
|
-
<button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
|
|
34528
|
-
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
34529
|
-
</button>
|
|
34530
|
-
</div>
|
|
34531
|
-
<div class="setting-part-slider">
|
|
34532
|
-
<mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
|
|
34533
|
-
</div>
|
|
34103
|
+
@if (!blenderPreviewRender) {
|
|
34104
|
+
<div class="render-popup-preview-placeholder">
|
|
34105
|
+
<span>{{ 'PREVIEW' | localize }}</span>
|
|
34534
34106
|
</div>
|
|
34535
|
-
</div>
|
|
34536
34107
|
}
|
|
34537
|
-
|
|
34108
|
+
<button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
|
|
34109
|
+
<co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
|
|
34110
|
+
</button>
|
|
34111
|
+
</div>
|
|
34112
|
+
@if (renderService.blendFilesRender) {
|
|
34113
|
+
<div class="render-popup-dropdown">
|
|
34114
|
+
<div class="toggleable" (click)="toggleRenderSettings()">
|
|
34115
|
+
<p>
|
|
34116
|
+
@if (!showRenderSettings) {
|
|
34117
|
+
<span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
|
|
34118
|
+
}
|
|
34119
|
+
@if (showRenderSettings) {
|
|
34120
|
+
<span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
|
|
34121
|
+
}
|
|
34122
|
+
</p>
|
|
34123
|
+
<co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
|
|
34124
|
+
[iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
|
|
34125
|
+
</div>
|
|
34126
|
+
@if (showRenderSettings) {
|
|
34127
|
+
<div class="advanced-render-settings">
|
|
34128
|
+
<div class="setting-part-container">
|
|
34129
|
+
<mat-form-field
|
|
34130
|
+
class="face-select-form"
|
|
34131
|
+
>
|
|
34132
|
+
<mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
|
|
34133
|
+
<mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
|
|
34134
|
+
@for (scene of sceneList; track scene) {
|
|
34135
|
+
<mat-option
|
|
34136
|
+
[value]="scene">{{ scene.name }}
|
|
34137
|
+
</mat-option>
|
|
34138
|
+
}
|
|
34139
|
+
</mat-select>
|
|
34140
|
+
</mat-form-field>
|
|
34141
|
+
</div>
|
|
34142
|
+
<div class="setting-part-container">
|
|
34143
|
+
<mat-form-field class="third-width">
|
|
34144
|
+
<mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
|
|
34145
|
+
<input
|
|
34146
|
+
[type]="'number'"
|
|
34147
|
+
matInput
|
|
34148
|
+
[(ngModel)]="hdriIntensity"
|
|
34149
|
+
(ngModelChange)="hdriIntensity = +$event">
|
|
34150
|
+
</mat-form-field>
|
|
34151
|
+
<div class="setting-part-buttons">
|
|
34152
|
+
<button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
|
|
34153
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
34154
|
+
</button>
|
|
34155
|
+
<button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
|
|
34156
|
+
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
34157
|
+
</button>
|
|
34158
|
+
</div>
|
|
34159
|
+
<div class="setting-part-slider">
|
|
34160
|
+
<mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
|
|
34161
|
+
</div>
|
|
34162
|
+
</div>
|
|
34163
|
+
<div class="setting-part-container">
|
|
34164
|
+
<mat-form-field class="third-width">
|
|
34165
|
+
<mat-label [textContent]="'ROTATION' | localize"></mat-label>
|
|
34166
|
+
<input
|
|
34167
|
+
[type]="'number'"
|
|
34168
|
+
matInput
|
|
34169
|
+
[(ngModel)]="hdriRotation"
|
|
34170
|
+
(ngModelChange)="hdriRotation = +$event">
|
|
34171
|
+
</mat-form-field>
|
|
34172
|
+
<div class="setting-part-buttons">
|
|
34173
|
+
<button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
|
|
34174
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
34175
|
+
</button>
|
|
34176
|
+
<button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
|
|
34177
|
+
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
34178
|
+
</button>
|
|
34179
|
+
</div>
|
|
34180
|
+
<div class="setting-part-slider">
|
|
34181
|
+
<mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
|
|
34182
|
+
</div>
|
|
34183
|
+
</div>
|
|
34184
|
+
<div class="setting-part-container">
|
|
34185
|
+
<mat-form-field class="third-width">
|
|
34186
|
+
<mat-label [textContent]="'LIGHTS' | localize"></mat-label>
|
|
34187
|
+
<input
|
|
34188
|
+
[type]="'number'"
|
|
34189
|
+
matInput
|
|
34190
|
+
[(ngModel)]="lightingExposure"
|
|
34191
|
+
(ngModelChange)="lightingExposure = +$event">
|
|
34192
|
+
</mat-form-field>
|
|
34193
|
+
<div class="setting-part-buttons">
|
|
34194
|
+
<button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
|
|
34195
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
|
|
34196
|
+
</button>
|
|
34197
|
+
<button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
|
|
34198
|
+
<co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
|
|
34199
|
+
</button>
|
|
34200
|
+
</div>
|
|
34201
|
+
<div class="setting-part-slider">
|
|
34202
|
+
<mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
|
|
34203
|
+
</div>
|
|
34204
|
+
</div>
|
|
34205
|
+
</div>
|
|
34206
|
+
}
|
|
34207
|
+
</div>
|
|
34538
34208
|
}
|
|
34539
|
-
|
|
34540
|
-
<div class="render-popup-dropdown">
|
|
34209
|
+
<div class="render-popup-dropdown">
|
|
34541
34210
|
<mat-form-field class="face-select-form">
|
|
34542
|
-
|
|
34543
|
-
|
|
34544
|
-
|
|
34545
|
-
|
|
34546
|
-
|
|
34547
|
-
|
|
34548
|
-
|
|
34549
|
-
|
|
34211
|
+
<mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
|
|
34212
|
+
<mat-select [(value)]="selectedImageSize">
|
|
34213
|
+
@for (size of imageSizes; track size) {
|
|
34214
|
+
<mat-option [value]="size">{{ size.name }} {{ size.width }}
|
|
34215
|
+
x{{ size.height }}
|
|
34216
|
+
</mat-option>
|
|
34217
|
+
}
|
|
34218
|
+
</mat-select>
|
|
34550
34219
|
</mat-form-field>
|
|
34551
|
-
|
|
34552
|
-
}
|
|
34220
|
+
</div>
|
|
34553
34221
|
<div class="render-popup-button-container">
|
|
34554
|
-
|
|
34555
|
-
|
|
34556
|
-
|
|
34557
|
-
|
|
34558
|
-
|
|
34559
|
-
|
|
34560
|
-
|
|
34561
|
-
|
|
34562
|
-
|
|
34563
|
-
|
|
34564
|
-
|
|
34565
|
-
|
|
34566
|
-
|
|
34222
|
+
<button class="render-popup-button photo-button"
|
|
34223
|
+
(click)="createBlenderRender()"
|
|
34224
|
+
title="{{'MAKE_A_PICTURE' | localize}}"
|
|
34225
|
+
[disabled]="disablePictureButton">
|
|
34226
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
|
|
34227
|
+
{{ 'MAKE_A_PICTURE' | localize }}
|
|
34228
|
+
</button>
|
|
34229
|
+
<button
|
|
34230
|
+
class="render-popup-button cancel-button"
|
|
34231
|
+
(click)="resetBlenderRenderScene()">
|
|
34232
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
|
|
34233
|
+
{{ 'CLOSE_PHOTO_MODE' | localize }}
|
|
34234
|
+
</button>
|
|
34567
34235
|
</div>
|
|
34568
|
-
|
|
34569
|
-
|
|
34570
|
-
|
|
34571
|
-
|
|
34236
|
+
</div>
|
|
34237
|
+
}
|
|
34238
|
+
@if (showCullingErrorDialog) {
|
|
34239
|
+
<div class="render-warning">
|
|
34572
34240
|
<div class="render-warming-header">
|
|
34573
|
-
|
|
34574
|
-
|
|
34575
|
-
|
|
34576
|
-
|
|
34241
|
+
<h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
|
|
34242
|
+
<div class="render-warning-close" (click)="showCullingErrorDialog = false">
|
|
34243
|
+
<mat-icon class="homedecorator-material-icons">cancel</mat-icon>
|
|
34244
|
+
</div>
|
|
34577
34245
|
</div>
|
|
34578
34246
|
<div class="render-warning-body">
|
|
34579
|
-
|
|
34247
|
+
<p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
|
|
34580
34248
|
</div>
|
|
34581
34249
|
<div class="render-warning-footer">
|
|
34582
|
-
|
|
34583
|
-
|
|
34584
|
-
|
|
34585
|
-
|
|
34586
|
-
|
|
34587
|
-
|
|
34250
|
+
<button
|
|
34251
|
+
class="render-popup-button cancel-button"
|
|
34252
|
+
(click)="showCullingErrorDialog = false">
|
|
34253
|
+
<co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
|
|
34254
|
+
{{ 'CLOSE' | localize }}
|
|
34255
|
+
</button>
|
|
34588
34256
|
</div>
|
|
34589
|
-
|
|
34590
|
-
}
|
|
34591
|
-
<rp-render-progress
|
|
34592
|
-
[title]="'PREPARE_TO_RENDER' | localize"
|
|
34593
|
-
[show]="startUploading"
|
|
34594
|
-
>
|
|
34595
|
-
</rp-render-progress>
|
|
34596
|
-
<button
|
|
34597
|
-
#renderButton
|
|
34598
|
-
mat-raised-button
|
|
34599
|
-
matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
|
|
34600
|
-
[id]="'standalone_render_picture'"
|
|
34601
|
-
[class.active]="(
|
|
34602
|
-
(renderService.serverData.renderMode === renderService.renderModes.RenderRoom && viewModeService.viewMode === viewModes.WalkThrough) ||
|
|
34603
|
-
(renderService.serverData.renderMode === renderService.renderModes.RenderIone))"
|
|
34604
|
-
(click)="showRenderForm($event)"
|
|
34605
|
-
>
|
|
34606
|
-
<mat-icon class="icon homedecorator-material-icons"
|
|
34607
|
-
aria-hidden="true">{{ (renderService.currentQueueRenderItem.renderStatus === renderStatus.IsRunning ? 'open_in_browser' : 'photo_camera') }}
|
|
34608
|
-
</mat-icon>
|
|
34609
|
-
</button>
|
|
34610
|
-
</div>
|
|
34257
|
+
</div>
|
|
34611
34258
|
}
|
|
34612
|
-
|
|
34613
|
-
|
|
34614
|
-
|
|
34259
|
+
<button
|
|
34260
|
+
#renderButton
|
|
34261
|
+
mat-raised-button
|
|
34262
|
+
matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
|
|
34263
|
+
[id]="'standalone_render_picture'"
|
|
34264
|
+
[class.active]="viewModeService.viewMode === viewModes.WalkThrough"
|
|
34265
|
+
(click)="showRenderForm($event)">
|
|
34266
|
+
<mat-icon class="icon homedecorator-material-icons"
|
|
34267
|
+
aria-hidden="true">{{ 'photo_camera' }}
|
|
34268
|
+
</mat-icon>
|
|
34269
|
+
</button>
|
|
34270
|
+
</div>
|
|
34271
|
+
`, standalone: false, styles: [".render-container{position:relative}.render-container .render-popup-container{background:#ffffffb3;padding:10px 25px 25px;border-radius:5px;box-shadow:0 1px 5px #0000001f}.render-container .render-popup-container .render-popup-header{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-header h3{display:flex;justify-content:space-between}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon{width:20px;height:20px;margin-left:20px}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg,.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg polygon{fill:#dc143c}.render-container .render-popup-container .render-popup-header .close-popup-container{cursor:pointer;border:none;background:none;float:none;height:auto;width:auto}.render-container .render-popup-container .render-popup-button-container{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-button-container .render-popup-button{float:none;width:100%;max-width:130px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-button-container .photo-button{color:#fff;background-color:#dda73f}.render-container .render-popup-container .render-popup-button-container .cancel-button{color:#fff;background-color:#5b6875}.render-container .render-popup-container .render-popup-preview{background-color:#fff;min-height:150px;min-width:275px;margin:5px 0;position:relative;width:275px;height:150px}.render-container .render-popup-container .render-popup-preview .render-popup-preview-placeholder{background-color:#fff;display:flex;justify-content:space-around;align-items:center;vertical-align:middle;min-height:150px;border:1px solid #ddd;color:#ddd;font-size:14px}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview{position:absolute;bottom:0;right:0;cursor:pointer;border-radius:0;border:none;height:30px;width:30px;background-color:#dda73f;color:#fff;margin:0}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-dropdown{margin:5px 0;width:100%}.render-container .render-popup-container .render-popup-dropdown .toggleable{cursor:pointer;display:flex;justify-content:right;align-content:center}.render-container .render-popup-container .render-popup-dropdown .toggleable p{padding:0;margin:0;font-size:12px;line-height:30px}.render-container .render-popup-container .render-popup-dropdown .toggleable .icon-rotate{transform:rotate(180deg)}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field{width:100%;font-size:14px}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-flex{background-color:#fff;color:#000;padding:3px 6px;border:1px solid #ddd}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-underline{display:none}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper{padding-bottom:0}.render-container .render-popup-container .render-popup-dropdown .setting-part-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .third-width{width:32%}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button{float:none;box-sizing:border-box;padding:2px;background:none;cursor:pointer;border:none;width:25px;height:25px;margin:0 5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon{display:block;width:25px;height:25px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon ::ng-deep svg{fill:#5b6875}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-slider .mat-slider-horizontal{min-width:110px;height:28px}.render-container .render-progress{float:left;min-width:50px;border-radius:25px;line-height:50px;text-align:center;padding:0 60px 0 20px;background:#fff;color:#74b77f;font-weight:700;margin:0 -50px 0 0}.render-container .render-input-container{float:right}.render-container .render-input-container input{width:100px;height:24px;margin:5px 0;padding:0 10px;font-size:14px}.render-container button{pointer-events:all;width:50px;height:50px;float:right;border-radius:100%;position:relative;z-index:2;margin-bottom:10px}.render-container button.active{background:#74b77f;color:#fff}.render-container button>*{pointer-events:none}.render-indicators div{position:fixed;width:100px;height:100px}.render-indicators .render-indicator-top-left{left:5vw;top:10vh;border-left:10px solid #dda73f;border-top:10px solid #dda73f;border-top-left-radius:20px}.render-indicators .render-indicator-top-right{right:5vw;top:10vh;border-right:10px solid #dda73f;border-top:10px solid #dda73f;border-top-right-radius:20px}.render-indicators .render-indicator-bottom-left{left:5vw;bottom:5vh;border-left:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-left-radius:20px}.render-indicators .render-indicator-bottom-right{right:5vw;bottom:5vh;border-right:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-right-radius:20px}.render-warning{width:500px;position:fixed;top:20%;left:calc(50% - 250px);border-radius:15px;box-sizing:border-box;background-color:#fff;box-shadow:1px 0 20px #0000001f}.render-warning .render-warming-header{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-warning .render-warming-header h2{padding:0;margin:0}.render-warning .render-warming-header .render-warning-close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-warning .render-warming-header .render-warning-close:hover mat-icon{fill:#46494c;color:#46494c}.render-warning .render-warning-body{padding:10px 20px}.render-warning .render-warning-footer{display:flex;justify-content:center;padding:0 20px 10px}.render-warning .render-warning-footer .render-popup-button{float:none;width:110px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly;color:#fff;background-color:#5b6875}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon svg path{fill:#fff}\n"] }]
|
|
34272
|
+
}], ctorParameters: () => [{ type: MessageBusService }, { type: ViewModeService }, { type: HomedecoratorSettingsService }, { type: HomedecoratorIconCacheService }, { type: RenderService }, { type: i1$2.MatDialog }, { type: SceneService }, { type: CameraService }, { type: ConfigurationService }, { type: HomedecoratorSettingsService }, { type: UtilsService }, { type: RoomService }, { type: WallMeasurementsService }, { type: ConnectionHeathService }, { type: HomedecoratorDictionaryService }, { type: DialogService }], propDecorators: { renderButton: [{
|
|
34615
34273
|
type: ViewChild,
|
|
34616
34274
|
args: ['renderButton']
|
|
34617
34275
|
}] } });
|
|
@@ -42827,6 +42485,88 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
42827
42485
|
type: Output
|
|
42828
42486
|
}] } });
|
|
42829
42487
|
|
|
42488
|
+
class ConfigurationPresetLoaderComponent {
|
|
42489
|
+
showClass() {
|
|
42490
|
+
return true;
|
|
42491
|
+
}
|
|
42492
|
+
constructor(configurationPresetService, iconService, _homedecoratorConnectorService, _messageService) {
|
|
42493
|
+
this.configurationPresetService = configurationPresetService;
|
|
42494
|
+
this.iconService = iconService;
|
|
42495
|
+
this._homedecoratorConnectorService = _homedecoratorConnectorService;
|
|
42496
|
+
this._messageService = _messageService;
|
|
42497
|
+
this.icon = IconEnum;
|
|
42498
|
+
}
|
|
42499
|
+
ngOnInit() {
|
|
42500
|
+
// TODO REMOVE MOCK
|
|
42501
|
+
// Own source, good ol' instanbull
|
|
42502
|
+
// this.configurationPresetService.sku = '1000610952';
|
|
42503
|
+
// this.configurationPresetService.instanceId = '67483';
|
|
42504
|
+
// IMG extern
|
|
42505
|
+
// this.configurationPresetService.sku = '70000107';
|
|
42506
|
+
// this.configurationPresetService.instanceId = '354490';
|
|
42507
|
+
// this.configurationPresetService.externalSourceId = 171;
|
|
42508
|
+
}
|
|
42509
|
+
handleCloseClick() {
|
|
42510
|
+
this.configurationPresetService.reset();
|
|
42511
|
+
}
|
|
42512
|
+
handleLoadPreset() {
|
|
42513
|
+
this.configurationPresetService.LoadPreset();
|
|
42514
|
+
}
|
|
42515
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigurationPresetLoaderComponent, deps: [{ token: ConfigurationPresetLoadService }, { token: HomedecoratorIconCacheService }, { token: HomedecoratorConnectorService }, { token: MessageBusService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42516
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ConfigurationPresetLoaderComponent, isStandalone: false, selector: "co-configurator-preset-loader", host: { properties: { "class.co-configurator-preset-loader": "this.showClass" } }, ngImport: i0, template: `
|
|
42517
|
+
|
|
42518
|
+
@if (configurationPresetService.showConfigurationLoad) {
|
|
42519
|
+
<div class="configurator-preset-loader-container">
|
|
42520
|
+
<div class="configurator-preset-icon">
|
|
42521
|
+
<co-icon [iconData]="iconService.getIcon(icon.Check)"></co-icon>
|
|
42522
|
+
</div>
|
|
42523
|
+
<div class="configurator-preset-info">
|
|
42524
|
+
<div class="preset-head" [textContent]="'LOAD_CONFIGURATION_PRESET' | localize"></div>
|
|
42525
|
+
<div class="preset-sku" [textContent]="configurationPresetService.article.description"></div>
|
|
42526
|
+
<div class="preset-text-link" [textContent]="'CLICK_LOAD_PRESET' | localize" (click)="handleLoadPreset()"></div>
|
|
42527
|
+
</div>
|
|
42528
|
+
|
|
42529
|
+
<div class="configurator-preset-close">
|
|
42530
|
+
<co-button
|
|
42531
|
+
[iconData]="iconService.getIcon(icon.Cross)"
|
|
42532
|
+
(onClick)="handleCloseClick()"
|
|
42533
|
+
></co-button>
|
|
42534
|
+
</div>
|
|
42535
|
+
</div>
|
|
42536
|
+
}
|
|
42537
|
+
|
|
42538
|
+
`, isInline: true, styles: [".co-configurator-preset-loader .configurator-preset-loader-container{position:fixed;background:#fff;right:50px;bottom:50px;width:100%;max-width:400px;min-height:40px;box-sizing:border-box;padding:15px 5px;display:flex;justify-content:space-between;align-items:center;border-radius:15px;box-shadow:1px 1px 4px #0003;pointer-events:all;z-index:102}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-icon{background:#4e9b7e;border-radius:50%;width:30px;height:30px}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-icon .co-icon svg polygon{fill:#fff}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-head{text-transform:uppercase;font-size:12px}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-sku{font-size:18px;font-weight:700;margin:5px 0 15px}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-text-link{font-size:14px;cursor:pointer;color:#4e9b7e;text-align:center}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-text-link:hover{text-decoration:underline}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-close .co-button{background:none}\n"], dependencies: [{ kind: "component", type: i5.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: i5.ButtonComponent, selector: "co-button", inputs: ["label", "iconData", "iconDataRight", "isToggleButton", "isToggled", "hidden", "disabled"], outputs: ["onClick", "clickedWhileDisabled", "isToggledChange"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
42539
|
+
}
|
|
42540
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigurationPresetLoaderComponent, decorators: [{
|
|
42541
|
+
type: Component,
|
|
42542
|
+
args: [{ selector: 'co-configurator-preset-loader', template: `
|
|
42543
|
+
|
|
42544
|
+
@if (configurationPresetService.showConfigurationLoad) {
|
|
42545
|
+
<div class="configurator-preset-loader-container">
|
|
42546
|
+
<div class="configurator-preset-icon">
|
|
42547
|
+
<co-icon [iconData]="iconService.getIcon(icon.Check)"></co-icon>
|
|
42548
|
+
</div>
|
|
42549
|
+
<div class="configurator-preset-info">
|
|
42550
|
+
<div class="preset-head" [textContent]="'LOAD_CONFIGURATION_PRESET' | localize"></div>
|
|
42551
|
+
<div class="preset-sku" [textContent]="configurationPresetService.article.description"></div>
|
|
42552
|
+
<div class="preset-text-link" [textContent]="'CLICK_LOAD_PRESET' | localize" (click)="handleLoadPreset()"></div>
|
|
42553
|
+
</div>
|
|
42554
|
+
|
|
42555
|
+
<div class="configurator-preset-close">
|
|
42556
|
+
<co-button
|
|
42557
|
+
[iconData]="iconService.getIcon(icon.Cross)"
|
|
42558
|
+
(onClick)="handleCloseClick()"
|
|
42559
|
+
></co-button>
|
|
42560
|
+
</div>
|
|
42561
|
+
</div>
|
|
42562
|
+
}
|
|
42563
|
+
|
|
42564
|
+
`, standalone: false, encapsulation: ViewEncapsulation.None, styles: [".co-configurator-preset-loader .configurator-preset-loader-container{position:fixed;background:#fff;right:50px;bottom:50px;width:100%;max-width:400px;min-height:40px;box-sizing:border-box;padding:15px 5px;display:flex;justify-content:space-between;align-items:center;border-radius:15px;box-shadow:1px 1px 4px #0003;pointer-events:all;z-index:102}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-icon{background:#4e9b7e;border-radius:50%;width:30px;height:30px}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-icon .co-icon svg polygon{fill:#fff}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-head{text-transform:uppercase;font-size:12px}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-sku{font-size:18px;font-weight:700;margin:5px 0 15px}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-text-link{font-size:14px;cursor:pointer;color:#4e9b7e;text-align:center}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-text-link:hover{text-decoration:underline}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-close .co-button{background:none}\n"] }]
|
|
42565
|
+
}], ctorParameters: () => [{ type: ConfigurationPresetLoadService }, { type: HomedecoratorIconCacheService }, { type: HomedecoratorConnectorService }, { type: MessageBusService }], propDecorators: { showClass: [{
|
|
42566
|
+
type: HostBinding,
|
|
42567
|
+
args: ['class.co-configurator-preset-loader']
|
|
42568
|
+
}] } });
|
|
42569
|
+
|
|
42830
42570
|
class RoomPlannerComponent {
|
|
42831
42571
|
constructor(iconService, viewModeService, modelsService, itemService, settingsService, _presetsService, _appService, _screenAnalysis, _cd, _utilsService, _messageService, _dialog, _configurationService, _bluePrintService, _sceneService, _hudService, _roomService, _cameraService, _itemService, _itemSerializationService, _lightsService, _arService, _googleTagManager, _permanentStoreService, _appEventService, _connectorService, _wallService, _connectorAdapterService, _loadFurnitureService, _floorService, _sanitizer, _dictionary, _modelCreationService) {
|
|
42832
42572
|
this.iconService = iconService;
|
|
@@ -43095,6 +42835,10 @@ class RoomPlannerComponent {
|
|
|
43095
42835
|
this.unselectAll();
|
|
43096
42836
|
this.showGroupMenu = false;
|
|
43097
42837
|
this.showGroupEditMenuButtons = false;
|
|
42838
|
+
if (this.userIsGrouping) {
|
|
42839
|
+
// When the user was grouping, let everything know that we stopped with that aswell
|
|
42840
|
+
this._messageService.emit(MessageType.CancelGroupObject);
|
|
42841
|
+
}
|
|
43098
42842
|
}
|
|
43099
42843
|
updateSelectedObjectHud() {
|
|
43100
42844
|
this._hudService.updateSelectedItemHud();
|
|
@@ -43957,6 +43701,9 @@ class RoomPlannerComponent {
|
|
|
43957
43701
|
(onZoomReset)="zoomReset()"
|
|
43958
43702
|
(onZoomOut)="zoomOut()"
|
|
43959
43703
|
></rp-zoom-controls>
|
|
43704
|
+
|
|
43705
|
+
|
|
43706
|
+
<co-configurator-preset-loader></co-configurator-preset-loader>
|
|
43960
43707
|
|
|
43961
43708
|
<ng-template #toolbarIconSettings>
|
|
43962
43709
|
<span class="toolbar__divider"></span>
|
|
@@ -44179,7 +43926,7 @@ class RoomPlannerComponent {
|
|
|
44179
43926
|
}
|
|
44180
43927
|
}
|
|
44181
43928
|
|
|
44182
|
-
`, isInline: true, styles: [".with-scrollable-section{overflow:hidden;height:100%}.with-scrollable-section section{overflow-y:auto}.RoomPlanner{width:inherit;height:inherit;pointer-events:none}.RoomPlanner>*{pointer-events:all}.sidebar-toggles .mat-mdc-raised-button{width:110px;text-align:left}.logo-menu{position:absolute;top:20px;left:20px;z-index:2}.logo-menu-2nd{position:absolute;top:140px;left:84px}.logo-menu-4th{position:absolute;top:180px;left:84px}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.solid-background>canvas{fill:#fff;background:#fff}.toolbar__divider{border-bottom:2px solid rgba(199,195,195,.5411764706);width:70%;margin:5px 0}.toolbar__divider.context-menu{border-color:#c7c3c38a;width:100%}.show-inner-wall-measurement-button ::ng-deep .co-icon{transform:rotate(180deg)}.on-top{z-index:3}.rp-item-context-menu-wrap{color:#fff;background:#17253391;border-radius:5px;box-sizing:border-box;padding:10px;position:relative}.rp-item-context-menu-wrap .rp-item-context-menu-item{cursor:pointer;flex-direction:row;display:flex;padding:5px;border-radius:5px}.rp-item-context-menu-wrap .rp-item-context-menu-item span,.rp-item-context-menu-wrap .rp-item-context-menu-item label{display:flex;flex-direction:column;line-height:20px;font-size:12px;font-weight:lighter;vertical-align:middle}.rp-item-context-menu-wrap .rp-item-context-menu-item .label{width:150px}.rp-item-context-menu-wrap .rp-item-context-menu-item .icon{width:20px;margin-right:10px}.rp-item-context-menu-wrap .rp-item-context-menu-item .icon svg,.rp-item-context-menu-wrap .rp-item-context-menu-item .icon co-icon,.rp-item-context-menu-wrap .rp-item-context-menu-item .icon .mat-icon{height:15px;width:15px;font-size:18px}.rp-item-context-menu-wrap .rp-item-context-menu-item:hover{background:#dcdcdc80}.rp-item-context-menu-wrap .rp-item-context-menu-item-highlight{color:#da9803}.rp-item-context-menu-wrap .rp-item-context-menu-item-highlight svg{fill:#da9803}.rp-item-context-menu-wrap .conversion-button-selected .icon-selected{color:#009a6d}.rp-item-context-menu-wrap .rp-item-context-menu-header{border-bottom:2px solid rgba(199,195,195,.5411764706);margin-bottom:10px;padding-left:5px;padding-right:25px;max-width:160px;overflow:hidden}.rp-item-context-menu-wrap .rp-item-context-menu-header p{color:#da9803;font-size:13px;margin:0;padding:5px 0 10px}.rp-item-context-menu-wrap .rp-item-context-menu-close{position:absolute;right:7px;top:5px;z-index:2;cursor:pointer;width:15px;height:15px}.rp-item-context-menu-wrap .rp-item-context-menu-close .close-icon co-icon{height:15px;width:15px;font-size:18px}.rp-right-context-menu-wrap{color:#fff;background:#17253391;border-radius:5px 0 0 5px;box-sizing:border-box;padding:5px;position:relative}.rp-right-context-menu-wrap .rp-right-context-menu-item{cursor:pointer;flex-direction:row;display:flex;padding:10px;justify-content:center;border-bottom:2px solid rgba(199,195,195,.5411764706)}.rp-right-context-menu-wrap .rp-right-context-menu-item:last-child{border-bottom:none}.rp-right-context-menu-wrap .rp-right-context-menu-item span,.rp-right-context-menu-wrap .rp-right-context-menu-item label{display:flex;flex-direction:column;font-weight:lighter;vertical-align:middle}.rp-right-context-menu-wrap .rp-right-context-menu-item .icon{width:auto;margin-right:0}.rp-right-context-menu-wrap .rp-right-context-menu-item .icon svg,.rp-right-context-menu-wrap .rp-right-context-menu-item .icon co-icon,.rp-right-context-menu-wrap .rp-right-context-menu-item .icon .mat-icon{height:20px;width:20px;font-size:20px}.rp-right-context-menu-wrap .rp-right-context-menu-item:hover{background:#dcdcdc80}.rp-right-context-menu-wrap .rp-right-context-menu-item-highlight{color:#da9803}.rp-right-context-menu-wrap .rp-right-context-menu-item-highlight svg{fill:#da9803}.rp-right-context-menu-wrap .conversion-button-selected .icon-selected{color:#009a6d}::ng-deep .mat-mdc-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:#da9803}::ng-deep .mat-mdc-slide-toggle.mat-checked .mat-slide-toggle-bar .mat-slide-toggle-thumb-container .mat-slide-toggle-thumb{background-color:#fff}::ng-deep .mat-mdc-slide-toggle.mat-checked .mat-slide-toggle-bar:hover .mat-ripple-element{background-color:#da9803}::ng-deep .mat-mdc-slide-toggle .mat-slide-toggle-bar{width:40px;height:20px;border-radius:15px}::ng-deep .mat-mdc-slide-toggle .mat-slide-toggle-bar .mat-slide-toggle-thumb-container{width:17px;height:17px;top:2px;left:5px}::ng-deep .mat-mdc-slide-toggle .mat-slide-toggle-bar .mat-slide-toggle-thumb-container .mat-slide-toggle-thumb{height:16px;width:16px}::ng-deep mat-slider{height:24px}::ng-deep mat-slider .mat-slider-wrapper .mat-slider-track-wrapper{overflow:visible}::ng-deep mat-slider .mat-slider-wrapper .mat-slider-track-fill{background-color:#da9803}::ng-deep mat-slider .mat-slider-wrapper .mat-slider-thumb-container .mat-slider-thumb,::ng-deep mat-slider .mat-slider-wrapper .mat-slider-thumb-container .mat-slider-thumb-label{background-color:#da9803}::ng-deep mat-list .mat-mdc-list-item{border-bottom:1px solid #9bb0d0}.mrp-save-grouping{pointer-events:all;position:absolute;bottom:10%;left:50%}\n"], dependencies: [{ kind: "component", type: CategoryLibraryComponent, selector: "rp-category-library", inputs: ["categories"], outputs: ["categoryClick"] }, { kind: "directive", type: i2$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ContextMenuComponent, selector: "rp-context-menu", inputs: ["openMouseEvent"] }, { kind: "component", type: ItemContextMenuComponent, selector: "rp-item-context-menu", inputs: ["item"], outputs: ["deletePressed"] }, { kind: "component", type: RightContextMenuComponent, selector: "rp-right-context-menu", inputs: ["item"], outputs: ["deletePressed"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ToolbarIconComponent, selector: "rp-toolbar-icon", inputs: ["matIcon", "svgIcon", "tooltip", "disabled", "showLabel"], outputs: ["onClick"] }, { kind: "component", type: ZoomControlsComponent, selector: "rp-zoom-controls", inputs: ["visible"], outputs: ["onZoomIn", "onZoomReset", "onZoomOut"] }, { kind: "directive", type: i14.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i14.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i7$1.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i5.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: ButtonElevationComponent, selector: "button-elevation", inputs: ["item"] }, { kind: "component", type: ObjectLibraryComponent, selector: "rp-object-library", inputs: ["objects"], outputs: ["setDragged", "releaseDragged", "onObjectClick"] }, { kind: "component", type: FloorplannerComponent, selector: "floor-planner", outputs: ["selectedWallChange"] }, { kind: "component", type: SelectedFloorComponent, selector: "rp-selected-floor", inputs: ["floor", "texturePlane", "color"], outputs: ["setTexture", "setColor"] }, { kind: "component", type: SelectedObjectComponent, selector: "rp-selected-object", inputs: ["object"], outputs: ["onSelectedObjectChange"] }, { kind: "component", type: SelectedThreedObjectComponent, selector: "rp-selected-threed-object", inputs: ["object", "showCopy", "showDelete", "showLock"], outputs: ["onSelectedObjectChange"] }, { kind: "component", type: SelectedWallComponent, selector: "rp-selected-wall", inputs: ["wall", "texturePlane", "color", "minWallHeight", "maxWallHeight", "maxWallThickness", "maxWallLength", "minWallLength"], outputs: ["remove", "setLength", "setHeight", "setThickness", "selectCorner", "setTexture", "setColor"] }, { kind: "component", type: SettingsComponent, selector: "rp-settings", inputs: ["minWallHeight", "placeCameraDisabled"], outputs: ["onWallsHeightUpdate"] }, { kind: "component", type: CustomShapeCreatorComponent, selector: "rp-custom-shape-creator", inputs: ["shape"] }, { kind: "component", type: CustomCylinderCreatorComponent, selector: "custom-cylinder-creator", inputs: ["shape"] }, { kind: "component", type: SelectedObjectScaleComponent, selector: "rp-selected-object-scale", inputs: ["object"], outputs: ["objectChange"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
|
|
43929
|
+
`, isInline: true, styles: [".with-scrollable-section{overflow:hidden;height:100%}.with-scrollable-section section{overflow-y:auto}.RoomPlanner{width:inherit;height:inherit;pointer-events:none}.RoomPlanner>*{pointer-events:all}.sidebar-toggles .mat-mdc-raised-button{width:110px;text-align:left}.logo-menu{position:absolute;top:20px;left:20px;z-index:2}.logo-menu-2nd{position:absolute;top:140px;left:84px}.logo-menu-4th{position:absolute;top:180px;left:84px}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.solid-background>canvas{fill:#fff;background:#fff}.toolbar__divider{border-bottom:2px solid rgba(199,195,195,.5411764706);width:70%;margin:5px 0}.toolbar__divider.context-menu{border-color:#c7c3c38a;width:100%}.show-inner-wall-measurement-button ::ng-deep .co-icon{transform:rotate(180deg)}.on-top{z-index:3}.rp-item-context-menu-wrap{color:#fff;background:#17253391;border-radius:5px;box-sizing:border-box;padding:10px;position:relative}.rp-item-context-menu-wrap .rp-item-context-menu-item{cursor:pointer;flex-direction:row;display:flex;padding:5px;border-radius:5px}.rp-item-context-menu-wrap .rp-item-context-menu-item span,.rp-item-context-menu-wrap .rp-item-context-menu-item label{display:flex;flex-direction:column;line-height:20px;font-size:12px;font-weight:lighter;vertical-align:middle}.rp-item-context-menu-wrap .rp-item-context-menu-item .label{width:150px}.rp-item-context-menu-wrap .rp-item-context-menu-item .icon{width:20px;margin-right:10px}.rp-item-context-menu-wrap .rp-item-context-menu-item .icon svg,.rp-item-context-menu-wrap .rp-item-context-menu-item .icon co-icon,.rp-item-context-menu-wrap .rp-item-context-menu-item .icon .mat-icon{height:15px;width:15px;font-size:18px}.rp-item-context-menu-wrap .rp-item-context-menu-item:hover{background:#dcdcdc80}.rp-item-context-menu-wrap .rp-item-context-menu-item-highlight{color:#da9803}.rp-item-context-menu-wrap .rp-item-context-menu-item-highlight svg{fill:#da9803}.rp-item-context-menu-wrap .conversion-button-selected .icon-selected{color:#009a6d}.rp-item-context-menu-wrap .rp-item-context-menu-header{border-bottom:2px solid rgba(199,195,195,.5411764706);margin-bottom:10px;padding-left:5px;padding-right:25px;max-width:160px;overflow:hidden}.rp-item-context-menu-wrap .rp-item-context-menu-header p{color:#da9803;font-size:13px;margin:0;padding:5px 0 10px}.rp-item-context-menu-wrap .rp-item-context-menu-close{position:absolute;right:7px;top:5px;z-index:2;cursor:pointer;width:15px;height:15px}.rp-item-context-menu-wrap .rp-item-context-menu-close .close-icon co-icon{height:15px;width:15px;font-size:18px}.rp-right-context-menu-wrap{color:#fff;background:#17253391;border-radius:5px 0 0 5px;box-sizing:border-box;padding:5px;position:relative}.rp-right-context-menu-wrap .rp-right-context-menu-item{cursor:pointer;flex-direction:row;display:flex;padding:10px;justify-content:center;border-bottom:2px solid rgba(199,195,195,.5411764706)}.rp-right-context-menu-wrap .rp-right-context-menu-item:last-child{border-bottom:none}.rp-right-context-menu-wrap .rp-right-context-menu-item span,.rp-right-context-menu-wrap .rp-right-context-menu-item label{display:flex;flex-direction:column;font-weight:lighter;vertical-align:middle}.rp-right-context-menu-wrap .rp-right-context-menu-item .icon{width:auto;margin-right:0}.rp-right-context-menu-wrap .rp-right-context-menu-item .icon svg,.rp-right-context-menu-wrap .rp-right-context-menu-item .icon co-icon,.rp-right-context-menu-wrap .rp-right-context-menu-item .icon .mat-icon{height:20px;width:20px;font-size:20px}.rp-right-context-menu-wrap .rp-right-context-menu-item:hover{background:#dcdcdc80}.rp-right-context-menu-wrap .rp-right-context-menu-item-highlight{color:#da9803}.rp-right-context-menu-wrap .rp-right-context-menu-item-highlight svg{fill:#da9803}.rp-right-context-menu-wrap .conversion-button-selected .icon-selected{color:#009a6d}::ng-deep .mat-mdc-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:#da9803}::ng-deep .mat-mdc-slide-toggle.mat-checked .mat-slide-toggle-bar .mat-slide-toggle-thumb-container .mat-slide-toggle-thumb{background-color:#fff}::ng-deep .mat-mdc-slide-toggle.mat-checked .mat-slide-toggle-bar:hover .mat-ripple-element{background-color:#da9803}::ng-deep .mat-mdc-slide-toggle .mat-slide-toggle-bar{width:40px;height:20px;border-radius:15px}::ng-deep .mat-mdc-slide-toggle .mat-slide-toggle-bar .mat-slide-toggle-thumb-container{width:17px;height:17px;top:2px;left:5px}::ng-deep .mat-mdc-slide-toggle .mat-slide-toggle-bar .mat-slide-toggle-thumb-container .mat-slide-toggle-thumb{height:16px;width:16px}::ng-deep mat-slider{height:24px}::ng-deep mat-slider .mat-slider-wrapper .mat-slider-track-wrapper{overflow:visible}::ng-deep mat-slider .mat-slider-wrapper .mat-slider-track-fill{background-color:#da9803}::ng-deep mat-slider .mat-slider-wrapper .mat-slider-thumb-container .mat-slider-thumb,::ng-deep mat-slider .mat-slider-wrapper .mat-slider-thumb-container .mat-slider-thumb-label{background-color:#da9803}::ng-deep mat-list .mat-mdc-list-item{border-bottom:1px solid #9bb0d0}.mrp-save-grouping{pointer-events:all;position:absolute;bottom:10%;left:50%}\n"], dependencies: [{ kind: "component", type: CategoryLibraryComponent, selector: "rp-category-library", inputs: ["categories"], outputs: ["categoryClick"] }, { kind: "directive", type: i2$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ContextMenuComponent, selector: "rp-context-menu", inputs: ["openMouseEvent"] }, { kind: "component", type: ItemContextMenuComponent, selector: "rp-item-context-menu", inputs: ["item"], outputs: ["deletePressed"] }, { kind: "component", type: RightContextMenuComponent, selector: "rp-right-context-menu", inputs: ["item"], outputs: ["deletePressed"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ToolbarIconComponent, selector: "rp-toolbar-icon", inputs: ["matIcon", "svgIcon", "tooltip", "disabled", "showLabel"], outputs: ["onClick"] }, { kind: "component", type: ZoomControlsComponent, selector: "rp-zoom-controls", inputs: ["visible"], outputs: ["onZoomIn", "onZoomReset", "onZoomOut"] }, { kind: "directive", type: i14.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i14.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i7$1.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i5.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: ButtonElevationComponent, selector: "button-elevation", inputs: ["item"] }, { kind: "component", type: ObjectLibraryComponent, selector: "rp-object-library", inputs: ["objects"], outputs: ["setDragged", "releaseDragged", "onObjectClick"] }, { kind: "component", type: FloorplannerComponent, selector: "floor-planner", outputs: ["selectedWallChange"] }, { kind: "component", type: SelectedFloorComponent, selector: "rp-selected-floor", inputs: ["floor", "texturePlane", "color"], outputs: ["setTexture", "setColor"] }, { kind: "component", type: SelectedObjectComponent, selector: "rp-selected-object", inputs: ["object"], outputs: ["onSelectedObjectChange"] }, { kind: "component", type: SelectedThreedObjectComponent, selector: "rp-selected-threed-object", inputs: ["object", "showCopy", "showDelete", "showLock"], outputs: ["onSelectedObjectChange"] }, { kind: "component", type: SelectedWallComponent, selector: "rp-selected-wall", inputs: ["wall", "texturePlane", "color", "minWallHeight", "maxWallHeight", "maxWallThickness", "maxWallLength", "minWallLength"], outputs: ["remove", "setLength", "setHeight", "setThickness", "selectCorner", "setTexture", "setColor"] }, { kind: "component", type: SettingsComponent, selector: "rp-settings", inputs: ["minWallHeight", "placeCameraDisabled"], outputs: ["onWallsHeightUpdate"] }, { kind: "component", type: CustomShapeCreatorComponent, selector: "rp-custom-shape-creator", inputs: ["shape"] }, { kind: "component", type: CustomCylinderCreatorComponent, selector: "custom-cylinder-creator", inputs: ["shape"] }, { kind: "component", type: SelectedObjectScaleComponent, selector: "rp-selected-object-scale", inputs: ["object"], outputs: ["objectChange"] }, { kind: "component", type: ConfigurationPresetLoaderComponent, selector: "co-configurator-preset-loader" }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
|
|
44183
43930
|
}
|
|
44184
43931
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RoomPlannerComponent, decorators: [{
|
|
44185
43932
|
type: Component,
|
|
@@ -44455,6 +44202,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
44455
44202
|
(onZoomReset)="zoomReset()"
|
|
44456
44203
|
(onZoomOut)="zoomOut()"
|
|
44457
44204
|
></rp-zoom-controls>
|
|
44205
|
+
|
|
44206
|
+
|
|
44207
|
+
<co-configurator-preset-loader></co-configurator-preset-loader>
|
|
44458
44208
|
|
|
44459
44209
|
<ng-template #toolbarIconSettings>
|
|
44460
44210
|
<span class="toolbar__divider"></span>
|
|
@@ -45989,7 +45739,7 @@ class ThreedselectorComponent {
|
|
|
45989
45739
|
this.showProgressBar = this._settingsService.settings.options.showProgressBar;
|
|
45990
45740
|
this.showProgressText = this._settingsService.settings.options.showProgressText;
|
|
45991
45741
|
}
|
|
45992
|
-
}), this._messageService.subscribe(MessageType.OpenConfigurator, (item) => this.configureFurniture(item)));
|
|
45742
|
+
}), this._messageService.subscribe(MessageType.OpenConfigurator, (item) => this.configureFurniture(item)), this._messageService.subscribe(MessageType.LoadConfigurationFromPreset, ({ sku, instanceId, settings }) => this.handleLoadIOneFurnitureIntoSceneByPreset(sku, instanceId, settings)));
|
|
45993
45743
|
this._addModelDialogToolbar();
|
|
45994
45744
|
if (this._iOne.article && this._iOne.article.showFullConfiguration) {
|
|
45995
45745
|
this.showFullConfiguration = this._iOne.article.showFullConfiguration;
|
|
@@ -46120,7 +45870,7 @@ class ThreedselectorComponent {
|
|
|
46120
45870
|
}
|
|
46121
45871
|
// NEW CONFIGURATOR
|
|
46122
45872
|
async handleBuildResult(result) {
|
|
46123
|
-
if (!result || this.firstBuild) {
|
|
45873
|
+
if (!result || this.firstBuild || !this._sceneService.scene) {
|
|
46124
45874
|
return;
|
|
46125
45875
|
}
|
|
46126
45876
|
const customFloorGroupResult = new CustomFloorGroupResult();
|
|
@@ -46283,7 +46033,6 @@ class ThreedselectorComponent {
|
|
|
46283
46033
|
const settingsInterface = settings['settings'];
|
|
46284
46034
|
configuratorSettingsClone.externalSourceId = configuratorExternalSourceId;
|
|
46285
46035
|
configuratorSettingsClone.username = settingsInterface.username;
|
|
46286
|
-
configuratorSettingsClone.password = settingsInterface.password;
|
|
46287
46036
|
configuratorSettingsClone.url = settingsInterface.url;
|
|
46288
46037
|
configuratorSettingsClone.version = settingsInterface.version;
|
|
46289
46038
|
configuratorSettingsClone.schema = settingsInterface.schema;
|
|
@@ -46295,7 +46044,7 @@ class ThreedselectorComponent {
|
|
|
46295
46044
|
}
|
|
46296
46045
|
}
|
|
46297
46046
|
this._configuringService.scene = this._sceneService.scene;
|
|
46298
|
-
this._initConfigurator(configuratorSettingsClone, sku);
|
|
46047
|
+
this._initConfigurator(configuratorSettingsClone, sku, !!configuratorExternalSourceId);
|
|
46299
46048
|
// await this._configuringService.init(configuratorSettingsClone);
|
|
46300
46049
|
// const furnitureData: ConfigurationResultObject = new ConfigurationResultObject();
|
|
46301
46050
|
// furnitureData.sku = sku;
|
|
@@ -46308,6 +46057,7 @@ class ThreedselectorComponent {
|
|
|
46308
46057
|
}
|
|
46309
46058
|
async configureFurniture(object) {
|
|
46310
46059
|
if (object instanceof Item) {
|
|
46060
|
+
this._resetConfigurator();
|
|
46311
46061
|
const configuratorExternalSourceId = object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId ?
|
|
46312
46062
|
object.metadata.externalSettings.externalSourceId : undefined;
|
|
46313
46063
|
const configuratorSettingsClone = await this._setSourceSettings(configuratorExternalSourceId);
|
|
@@ -46316,7 +46066,7 @@ class ThreedselectorComponent {
|
|
|
46316
46066
|
}
|
|
46317
46067
|
// make sure that if the object contains metadata, we set from project true
|
|
46318
46068
|
// await this._configuringService.init(configuratorSettingsClone);
|
|
46319
|
-
this._initConfigurator(configuratorSettingsClone, object.metadata.itemIdentifier, object.metadata.itemId);
|
|
46069
|
+
this._initConfigurator(configuratorSettingsClone, object.metadata.itemIdentifier, !!configuratorExternalSourceId, object.metadata.itemId);
|
|
46320
46070
|
// const furnitureData: ConfigurationResultObject = new ConfigurationResultObject();
|
|
46321
46071
|
// furnitureData.sku = object.metadata.itemIdentifier;
|
|
46322
46072
|
// furnitureData.instanceId = object.metadata.itemId;
|
|
@@ -46326,11 +46076,63 @@ class ThreedselectorComponent {
|
|
|
46326
46076
|
this.loadConfigurator = true;
|
|
46327
46077
|
}
|
|
46328
46078
|
}
|
|
46329
|
-
|
|
46330
|
-
|
|
46079
|
+
async handleLoadIOneFurnitureIntoSceneByPreset(sku, instanceId, settings) {
|
|
46080
|
+
const toast = new Toast();
|
|
46081
|
+
toast.message = 'MODEL_LOADING';
|
|
46082
|
+
this._toastService.showToast(toast);
|
|
46083
|
+
const article = await this._loadFurnitureService.currentActiveService.loadArticle(sku);
|
|
46084
|
+
let position = this._bluePrintService.getCenter();
|
|
46085
|
+
const draggedData = {
|
|
46086
|
+
name: sku,
|
|
46087
|
+
constructFn: async (pos) => this.configureFurnitureFromPreset(sku, instanceId, settings),
|
|
46088
|
+
type: itemTypeFromPlacement(article.placement),
|
|
46089
|
+
iOne: true
|
|
46090
|
+
};
|
|
46091
|
+
this._messageBus.emit(MessageType.SetDrag, draggedData);
|
|
46092
|
+
this._messageBus.emit(MessageType.StartDrag, position);
|
|
46093
|
+
}
|
|
46094
|
+
async configureFurnitureFromPreset(sku, instanceId, settings) {
|
|
46095
|
+
this._resetConfigurator();
|
|
46096
|
+
this.firstBuild = true;
|
|
46097
|
+
const configuratorSettings = this._settingsService.settings.projectSettings ?
|
|
46098
|
+
this._settingsService.settings.projectSettings : this._settingsService.settings;
|
|
46099
|
+
const configuratorSettingsClone = Object.assign({}, configuratorSettings);
|
|
46100
|
+
const configuratorExternalSourceId = settings && settings.externalSourceId ? settings.externalSourceId : undefined;
|
|
46101
|
+
if (configuratorExternalSourceId) {
|
|
46102
|
+
configuratorSettingsClone.externalSourceId = configuratorExternalSourceId;
|
|
46103
|
+
configuratorSettingsClone.username = settings.username;
|
|
46104
|
+
configuratorSettingsClone.password = settings.password;
|
|
46105
|
+
configuratorSettingsClone.url = settings.url;
|
|
46106
|
+
configuratorSettingsClone.version = settings.version;
|
|
46107
|
+
configuratorSettingsClone.schema = settings.schema;
|
|
46108
|
+
configuratorSettingsClone.mainUrl = settings.url;
|
|
46109
|
+
configuratorSettingsClone.mainSchema = settings.schema;
|
|
46110
|
+
configuratorSettingsClone.mainVersion = settings.version;
|
|
46111
|
+
// Set here to just save it, when it comes back from the configurator, we need to add it to the metadata.
|
|
46112
|
+
this._externalSourceData = settings;
|
|
46113
|
+
}
|
|
46114
|
+
this._configuringService.scene = this._sceneService.scene;
|
|
46115
|
+
this._initConfigurator(configuratorSettingsClone, sku, !!configuratorExternalSourceId, instanceId);
|
|
46116
|
+
this._startPosition = this._bluePrintService.getCenter();
|
|
46117
|
+
this.loadConfigurator = true;
|
|
46118
|
+
this._changeDetector.detectChanges();
|
|
46119
|
+
return this._waitForBuildToFinish();
|
|
46120
|
+
}
|
|
46121
|
+
_initConfigurator(settings, sku, external, instanceId) {
|
|
46122
|
+
this.configuratorSettings = this._prepareSettings(settings, external);
|
|
46331
46123
|
this.configuratorSku = sku;
|
|
46332
46124
|
this.configuratorInstanceId = instanceId;
|
|
46333
46125
|
}
|
|
46126
|
+
_prepareSettings(settings, external = false) {
|
|
46127
|
+
if (external) {
|
|
46128
|
+
// no pre-defined stuff for external sources
|
|
46129
|
+
settings.password = undefined;
|
|
46130
|
+
settings.dataSessionId = undefined;
|
|
46131
|
+
settings.sessionId = undefined;
|
|
46132
|
+
settings.getAccessTokenFunction = undefined;
|
|
46133
|
+
}
|
|
46134
|
+
return settings;
|
|
46135
|
+
}
|
|
46334
46136
|
_resetConfigurator() {
|
|
46335
46137
|
this.configuratorSettings = undefined;
|
|
46336
46138
|
this.configuratorSku = undefined;
|
|
@@ -48796,7 +48598,7 @@ class ToolbarComponent {
|
|
|
48796
48598
|
this.leftSidebar.close();
|
|
48797
48599
|
}
|
|
48798
48600
|
}
|
|
48799
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ToolbarComponent, deps: [{ token: AppStateService }, { token: PresetsService }, { token: MessageBusService }, { token: HomedecoratorSettingsService }, { token: LocalStorageService }, { token: HomedecoratorIconCacheService }, { token: ScreenSizeAnalysisService }, { token: i1$2.MatDialog }, { token: ToastService }, { token: HomedecoratorAppService }, { token: PermanentStoreService }, { token: UtilsService }, { token: ItemService }, { token: FloorService }, { token: AnimationService }, { token: DevelopmentService }, { token:
|
|
48601
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ToolbarComponent, deps: [{ token: AppStateService }, { token: PresetsService }, { token: MessageBusService }, { token: HomedecoratorSettingsService }, { token: LocalStorageService }, { token: HomedecoratorIconCacheService }, { token: ScreenSizeAnalysisService }, { token: i1$2.MatDialog }, { token: ToastService }, { token: HomedecoratorAppService }, { token: PermanentStoreService }, { token: UtilsService }, { token: ItemService }, { token: FloorService }, { token: AnimationService }, { token: DevelopmentService }, { token: RenderService }, { token: ThirdPartyModelService }, { token: LightPresetsService }, { token: HomedecoratorConnectorAdapterService }, { token: ConnectionHeathService }, { token: HomedecoratorAppEventService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
48800
48602
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ToolbarComponent, isStandalone: false, selector: "rp-toolbar", inputs: { shareButton: "shareButton" }, outputs: { externalSave: "externalSave", externalOpen: "externalOpen" }, host: { listeners: { "document:keydown": "handleKeyDown($event)" } }, viewQueries: [{ propertyName: "leftSidebar", first: true, predicate: ["leftSidebar"], descendants: true, static: true }], ngImport: i0, template: `
|
|
48801
48603
|
<!--
|
|
48802
48604
|
<div class="layer layer--toolbar">
|
|
@@ -49334,7 +49136,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
49334
49136
|
])
|
|
49335
49137
|
] /*,
|
|
49336
49138
|
changeDetection: ChangeDetectionStrategy.OnPush*/, standalone: false, styles: [":host{display:flex;flex-direction:column;position:absolute;top:0;z-index:100;height:100%;width:100%;pointer-events:none}:host h2{font-weight:600}:host h3{font-weight:600}:host .mat-toolbar.mat-primary{box-shadow:none;padding:0;background:transparent;height:40px;justify-content:space-between}:host .mat-toolbar .mat-icon{height:20px;width:20px;font-size:20px;line-height:20px}:host .hd-toolbar-spacer{display:flex;flex-basis:100%}:host .toast-wrapper{height:auto;position:absolute;top:0;left:50%;-webkit-user-select:none;user-select:none;pointer-events:none;background:#74b77f;padding:30px;border-radius:0 0 10px 10px;min-width:150px;max-width:90%;color:#fff;text-align:center;transform:translate(-50%,-100%)}:host .toast-wrapper.warning{background:#f17300}:host .toast-wrapper.error{background:#cc2936}:host ::ng-deep .drawer__header{display:flex;align-items:center;min-height:40px;margin-bottom:16px}:host ::ng-deep .drawer__header h2{margin:0 auto 0 0;font-weight:600}:host ::ng-deep .mat-headline-6{font-weight:600}:host ::ng-deep .mat-subtitle-1{font-weight:600}:host ::ng-deep mat-tab-header,:host ::ng-deep .FileDrop{margin-bottom:16px}:host ::ng-deep .tab--skin ::ng-deep .mat-tab-label{height:52px;min-width:auto}:host ::ng-deep .drawer p{white-space:pre-wrap}:host ::ng-deep .mat-divider{margin:16px 0 24px}:host ::ng-deep .mat-drawer-backdrop{display:none}.storage-error{min-width:30px;height:30px;display:flex;align-items:center;align-self:center;border-radius:50%;justify-content:center;background:#fff;color:#c00;font-size:25px;font-weight:700}.layer--toolbar{display:flex;flex-direction:column}.toolbar{display:flex;z-index:101;flex-wrap:nowrap}.toolbar .menu-icon{min-width:50px;display:flex;justify-content:center;margin-left:-16px}.toolbar .left-toolbar,.toolbar .right-toolbar{display:flex;align-items:center;background:#da9803;border-radius:0 0 10px;padding:0 20px 0 10px;box-shadow:0 3px 6px #00000029,0 3px 6px #0000003b;height:100%;gap:12px}.toolbar .right-toolbar{border-radius:0 0 0 10px;padding:0 5px 0 10px}.toolbar .right-toolbar.modified{padding:0 5px 0 0}.toolbar .share-button{height:100%;padding:0 15px;border-radius:0 0 0 10px;border:none;color:#fff;background-color:#2c67ff;cursor:pointer}.toolbar .toolbar-icon-list{display:flex;align-items:center;justify-content:center}.toolbar .toolbar-icon-sub{display:flex;align-items:center;justify-content:center;padding:0 10px;gap:5px;border-right:1px solid rgba(255,255,255,.3803921569)}.toolbar .toolbar-icon-sub:last-child{border-right:none}.toolbar .toolbar-icon-sub:first-child{border-left:1px solid rgba(255,255,255,.3803921569);margin-left:10px}.toolbar .toolbar-icon{height:30px;width:30px;display:flex;align-items:center;justify-content:center;cursor:pointer}.toolbar .toolbar-icon co-icon ::ng-deep{width:20px;height:20px}.toolbar .toolbar-icon co-icon ::ng-deep svg,.toolbar .toolbar-icon co-icon ::ng-deep path{fill:#fff}.toolbar .toolbar-icon co-icon.loading-green ::ng-deep svg,.toolbar .toolbar-icon co-icon.loading-green ::ng-deep path{fill:#74b77f}.toolbar .toolbar-icon co-icon.loading-orange ::ng-deep svg,.toolbar .toolbar-icon co-icon.loading-orange ::ng-deep path{fill:#f17300}.toolbar .toolbar-icon co-icon.loading-yellow ::ng-deep svg,.toolbar .toolbar-icon co-icon.loading-yellow ::ng-deep path{fill:#cc2936}.toolbar .toolbar-icon co-icon.loading-red ::ng-deep svg,.toolbar .toolbar-icon co-icon.loading-red ::ng-deep path{fill:#cc2936}.toolbar .toolbar-icon.search co-icon{height:30px;width:30px}.toolbar .toolbar-icon.disabled{cursor:default}.toolbar .toolbar-icon.disabled co-icon ::ng-deep svg{fill:#00000042}.toolbar-logo{height:20px}.secondary-logo{margin-left:20px}.toolbar__nav{display:flex;flex-direction:row;padding-top:0}.toolbar__nav .mat-mdc-list-item{color:#fff;height:40px}.toolbar-row{flex:auto;display:flex;flex-direction:column;padding:0;pointer-events:none;position:relative;align-items:baseline;height:100%}::ng-deep mat-toolbar-row .toolbar--secondary{width:50px;padding:15px 0;flex-direction:column;background:#17253391;height:100%;gap:5px}::ng-deep mat-toolbar-row .toolbar--secondary button ::ng-deep{width:30px;height:30px;line-height:30px;color:#fff;display:flex;justify-content:center}::ng-deep mat-toolbar-row .toolbar--secondary .add-to-cart-button button ::ng-deep{color:#da9803}.toolbar--secondary .drawer{flex:auto;pointer-events:none;background:transparent}.wip-card{margin-left:5px;padding:0 10px;color:#fff;background-color:#7a828a}.wip-card .mat-mdc-card-content{font-size:12px}.drawer-container{position:static;box-shadow:0 1px 3px #0000001f,0 1px 2px #0000003d}.drawer{width:420px;padding:16px;display:flex;flex-direction:column;left:50px}::ng-deep rp-category-library .mat-mdc-list-item ::ng-deep{border-color:#747c84}::ng-deep rp-category-library .mdc-list-item__primary-text{color:#000}::ng-deep rp-category-library .mdc-list-item:hover .mdc-list-item__primary-text{color:#000}.toolbar,.toolbar--secondary>*,.drawer-container>*,.drawer>*{pointer-events:all}.drawer__button{min-width:initial;padding:0;border:none;position:absolute;top:0;right:0;border-radius:50%}.blinker{animation:blinker 1s linear infinite}.badge-tooltip{position:relative}.badge-tooltip .mat-badge{position:absolute;margin:0;display:flex;align-items:center;justify-content:center;right:-2px;bottom:13px}.badge-tooltip .mat-badge .mat-badge-content{background-color:transparent;color:#b71c1c;border:1px solid #b71c1c;animation:bounce 2s ease-out;animation-iteration-count:infinite;right:initial;left:initial;position:relative;height:12px;width:12px;line-height:12px;font-size:10px;bottom:initial}::ng-deep .tooltip-red{background:#b71c1c}@keyframes bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(1.1,.9) translateY(0)}30%{transform:scale(.9,1.1) translateY(-20px)}50%{transform:scale(1.05,.95) translateY(0)}57%{transform:scale(1) translateY(-7px)}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes blinker{50%{opacity:0}}::ng-deep .mat-mdc-menu-panel{width:256px!important}::ng-deep .mat-mdc-menu-panel .mat-mdc-menu-content{display:flex;flex-direction:column;padding-left:10px;padding-right:10px}::ng-deep mat-drawer-content.mat-drawer-content{display:flex;height:100%;flex-direction:column}\n"] }]
|
|
49337
|
-
}], ctorParameters: () => [{ type: AppStateService }, { type: PresetsService }, { type: MessageBusService }, { type: HomedecoratorSettingsService }, { type: LocalStorageService }, { type: HomedecoratorIconCacheService }, { type: ScreenSizeAnalysisService }, { type: i1$2.MatDialog }, { type: ToastService }, { type: HomedecoratorAppService }, { type: PermanentStoreService }, { type: UtilsService }, { type: ItemService }, { type: FloorService }, { type: AnimationService }, { type: DevelopmentService }, { type:
|
|
49139
|
+
}], ctorParameters: () => [{ type: AppStateService }, { type: PresetsService }, { type: MessageBusService }, { type: HomedecoratorSettingsService }, { type: LocalStorageService }, { type: HomedecoratorIconCacheService }, { type: ScreenSizeAnalysisService }, { type: i1$2.MatDialog }, { type: ToastService }, { type: HomedecoratorAppService }, { type: PermanentStoreService }, { type: UtilsService }, { type: ItemService }, { type: FloorService }, { type: AnimationService }, { type: DevelopmentService }, { type: RenderService }, { type: ThirdPartyModelService }, { type: LightPresetsService }, { type: HomedecoratorConnectorAdapterService }, { type: ConnectionHeathService }, { type: HomedecoratorAppEventService }], propDecorators: { shareButton: [{
|
|
49338
49140
|
type: Input
|
|
49339
49141
|
}], externalSave: [{
|
|
49340
49142
|
type: Output
|
|
@@ -49408,28 +49210,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
49408
49210
|
type: Output
|
|
49409
49211
|
}] } });
|
|
49410
49212
|
|
|
49411
|
-
// A pipe for appending strings to other strings in view templates.
|
|
49412
|
-
class AppendPipe {
|
|
49413
|
-
transform(value, append) {
|
|
49414
|
-
if (!value) {
|
|
49415
|
-
return '';
|
|
49416
|
-
}
|
|
49417
|
-
if (!append) {
|
|
49418
|
-
return value;
|
|
49419
|
-
}
|
|
49420
|
-
return value + append;
|
|
49421
|
-
}
|
|
49422
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppendPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
49423
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: AppendPipe, isStandalone: false, name: "append" }); }
|
|
49424
|
-
}
|
|
49425
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppendPipe, decorators: [{
|
|
49426
|
-
type: Pipe,
|
|
49427
|
-
args: [{
|
|
49428
|
-
name: 'append',
|
|
49429
|
-
standalone: false
|
|
49430
|
-
}]
|
|
49431
|
-
}] });
|
|
49432
|
-
|
|
49433
49213
|
class ProductCatalogComponent {
|
|
49434
49214
|
get shown() {
|
|
49435
49215
|
return this._showCatalog;
|
|
@@ -49844,7 +49624,7 @@ class HomedecoratorComponent {
|
|
|
49844
49624
|
return this._settings;
|
|
49845
49625
|
}
|
|
49846
49626
|
constructor(appService, // don't remove this, needs to be created on a high level
|
|
49847
|
-
controllerService, appState, presetsService, screenAnalysis, _iconRegistry, _domSanitizer, _messageService, _homedecoratorService, _parentEventService, _ownEventService, _integrationService, _sceneService, _webWorkerService) {
|
|
49627
|
+
controllerService, appState, presetsService, screenAnalysis, _iconRegistry, _domSanitizer, _messageService, _homedecoratorService, _parentEventService, _ownEventService, _integrationService, _sceneService, _webWorkerService, _configurationPresetLoadService) {
|
|
49848
49628
|
this.appService = appService;
|
|
49849
49629
|
this.controllerService = controllerService;
|
|
49850
49630
|
this.appState = appState;
|
|
@@ -49859,6 +49639,7 @@ class HomedecoratorComponent {
|
|
|
49859
49639
|
this._integrationService = _integrationService;
|
|
49860
49640
|
this._sceneService = _sceneService;
|
|
49861
49641
|
this._webWorkerService = _webWorkerService;
|
|
49642
|
+
this._configurationPresetLoadService = _configurationPresetLoadService;
|
|
49862
49643
|
this.generalFilterOrders = [
|
|
49863
49644
|
{ name: 'CATEGORY', order: 1 },
|
|
49864
49645
|
{ name: 'TURNOVER_GROUP', order: 2 },
|
|
@@ -49975,6 +49756,14 @@ class HomedecoratorComponent {
|
|
|
49975
49756
|
else {
|
|
49976
49757
|
this._startWithEmptyRoom(true);
|
|
49977
49758
|
}
|
|
49759
|
+
if (this.loadWithConfigurationPreset && this.loadWithConfigurationPreset.instanceId && this.loadWithConfigurationPreset.sku) {
|
|
49760
|
+
if (this.loadWithConfigurationPreset.externalSourceId) {
|
|
49761
|
+
this._configurationPresetLoadService.externalSourceId = this.loadWithConfigurationPreset.externalSourceId;
|
|
49762
|
+
}
|
|
49763
|
+
// We need to load a preset AFTER we get in 3d space.
|
|
49764
|
+
this._configurationPresetLoadService.instanceId = this.loadWithConfigurationPreset.instanceId;
|
|
49765
|
+
this._configurationPresetLoadService.sku = this.loadWithConfigurationPreset.sku;
|
|
49766
|
+
}
|
|
49978
49767
|
}
|
|
49979
49768
|
}));
|
|
49980
49769
|
}
|
|
@@ -50067,8 +49856,8 @@ class HomedecoratorComponent {
|
|
|
50067
49856
|
_initConnection() {
|
|
50068
49857
|
this._homedecoratorService.init(this._settings);
|
|
50069
49858
|
}
|
|
50070
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorComponent, deps: [{ token: HomedecoratorAppService }, { token: HomedecoratorConnectorService }, { token: AppStateService }, { token: PresetsService }, { token: ScreenSizeAnalysisService }, { token: i3$2.MatIconRegistry }, { token: i1$1.DomSanitizer }, { token: MessageBusService }, { token: HomedecoratorService }, { token: HomedecoratorAppEventService, optional: true, skipSelf: true }, { token: HomedecoratorAppEventService, optional: true, self: true }, { token: IntegrationService }, { token: SceneService }, { token: WebWorkerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50071
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: HomedecoratorComponent, isStandalone: false, selector: "co-homedecorator", inputs: { generalFilterOrders: "generalFilterOrders", purchaseFilterOrders: "purchaseFilterOrders", logisticsFilterOrders: "logisticsFilterOrders", initCommunication: "initCommunication", projectToLoad: "projectToLoad", shareButton: "shareButton", settings: "settings" }, host: { listeners: { "document:keyup": "keyup($event)" }, properties: { "class.co-homedecorator": "this.showClass" } }, providers: [
|
|
49859
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorComponent, deps: [{ token: HomedecoratorAppService }, { token: HomedecoratorConnectorService }, { token: AppStateService }, { token: PresetsService }, { token: ScreenSizeAnalysisService }, { token: i3$2.MatIconRegistry }, { token: i1$1.DomSanitizer }, { token: MessageBusService }, { token: HomedecoratorService }, { token: HomedecoratorAppEventService, optional: true, skipSelf: true }, { token: HomedecoratorAppEventService, optional: true, self: true }, { token: IntegrationService }, { token: SceneService }, { token: WebWorkerService }, { token: ConfigurationPresetLoadService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
49860
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: HomedecoratorComponent, isStandalone: false, selector: "co-homedecorator", inputs: { generalFilterOrders: "generalFilterOrders", purchaseFilterOrders: "purchaseFilterOrders", logisticsFilterOrders: "logisticsFilterOrders", initCommunication: "initCommunication", projectToLoad: "projectToLoad", shareButton: "shareButton", loadWithConfigurationPreset: "loadWithConfigurationPreset", settings: "settings" }, host: { listeners: { "document:keyup": "keyup($event)" }, properties: { "class.co-homedecorator": "this.showClass" } }, providers: [
|
|
50072
49861
|
APPLICATION_SERVICES_PROVIDERS
|
|
50073
49862
|
], ngImport: i0, template: `
|
|
50074
49863
|
@if (loaded) {
|
|
@@ -50091,7 +49880,6 @@ class HomedecoratorComponent {
|
|
|
50091
49880
|
[purchaseFilterOrders]="purchaseFilterOrders"
|
|
50092
49881
|
[logisticsFilterOrders]="logisticsFilterOrders"
|
|
50093
49882
|
></rp-product-catalog>
|
|
50094
|
-
<co-lite-selector></co-lite-selector>
|
|
50095
49883
|
<rp-help></rp-help>
|
|
50096
49884
|
</rp-loading-overlay>
|
|
50097
49885
|
</div>
|
|
@@ -50110,7 +49898,7 @@ class HomedecoratorComponent {
|
|
|
50110
49898
|
</div>
|
|
50111
49899
|
}
|
|
50112
49900
|
}
|
|
50113
|
-
`, isInline: true, dependencies: [{ kind: "component", type: ProgressBarComponent, selector: "progress-bar" }, { kind: "component", type: LoadingOverlayComponent, selector: "rp-loading-overlay" }, { kind: "component", type: HdLoaderComponent, selector: "rp-loader", inputs: ["show"] }, { kind: "component", type: Core3dComponent, selector: "rp-core3d" }, { kind: "component", type: RoomPlannerComponent, selector: "rp-room-planner", inputs: ["isLoading"], outputs: ["done", "showPlugin", "focusControls"] }, { kind: "component", type: FurnitureManagerComponent, selector: "rp-furniture-manager" }, { kind: "component", type: PresetsComponent, selector: "rp-presets", inputs: ["openNewRoomDialog"] }, { kind: "component", type: ThreedselectorComponent, selector: "rp-threedselector", inputs: ["selections"], outputs: ["customizeButtonClicked"] }, { kind: "component", type: ToolbarComponent, selector: "rp-toolbar", inputs: ["shareButton"], outputs: ["externalSave", "externalOpen"] }, { kind: "component", type: ProductCatalogComponent, selector: "rp-product-catalog", inputs: ["generalFilterOrders", "purchaseFilterOrders", "logisticsFilterOrders"] }, { kind: "component", type: HelpComponent, selector: "rp-help" }
|
|
49901
|
+
`, isInline: true, dependencies: [{ kind: "component", type: ProgressBarComponent, selector: "progress-bar" }, { kind: "component", type: LoadingOverlayComponent, selector: "rp-loading-overlay" }, { kind: "component", type: HdLoaderComponent, selector: "rp-loader", inputs: ["show"] }, { kind: "component", type: Core3dComponent, selector: "rp-core3d" }, { kind: "component", type: RoomPlannerComponent, selector: "rp-room-planner", inputs: ["isLoading"], outputs: ["done", "showPlugin", "focusControls"] }, { kind: "component", type: FurnitureManagerComponent, selector: "rp-furniture-manager" }, { kind: "component", type: PresetsComponent, selector: "rp-presets", inputs: ["openNewRoomDialog"] }, { kind: "component", type: ThreedselectorComponent, selector: "rp-threedselector", inputs: ["selections"], outputs: ["customizeButtonClicked"] }, { kind: "component", type: ToolbarComponent, selector: "rp-toolbar", inputs: ["shareButton"], outputs: ["externalSave", "externalOpen"] }, { kind: "component", type: ProductCatalogComponent, selector: "rp-product-catalog", inputs: ["generalFilterOrders", "purchaseFilterOrders", "logisticsFilterOrders"] }, { kind: "component", type: HelpComponent, selector: "rp-help" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
50114
49902
|
}
|
|
50115
49903
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorComponent, decorators: [{
|
|
50116
49904
|
type: Component,
|
|
@@ -50137,7 +49925,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
50137
49925
|
[purchaseFilterOrders]="purchaseFilterOrders"
|
|
50138
49926
|
[logisticsFilterOrders]="logisticsFilterOrders"
|
|
50139
49927
|
></rp-product-catalog>
|
|
50140
|
-
<co-lite-selector></co-lite-selector>
|
|
50141
49928
|
<rp-help></rp-help>
|
|
50142
49929
|
</rp-loading-overlay>
|
|
50143
49930
|
</div>
|
|
@@ -50171,7 +49958,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
50171
49958
|
type: Optional
|
|
50172
49959
|
}, {
|
|
50173
49960
|
type: Self
|
|
50174
|
-
}] }, { type: IntegrationService }, { type: SceneService }, { type: WebWorkerService }], propDecorators: { generalFilterOrders: [{
|
|
49961
|
+
}] }, { type: IntegrationService }, { type: SceneService }, { type: WebWorkerService }, { type: ConfigurationPresetLoadService }], propDecorators: { generalFilterOrders: [{
|
|
50175
49962
|
type: Input
|
|
50176
49963
|
}], purchaseFilterOrders: [{
|
|
50177
49964
|
type: Input
|
|
@@ -50183,6 +49970,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
50183
49970
|
type: Input
|
|
50184
49971
|
}], shareButton: [{
|
|
50185
49972
|
type: Input
|
|
49973
|
+
}], loadWithConfigurationPreset: [{
|
|
49974
|
+
type: Input
|
|
50186
49975
|
}], settings: [{
|
|
50187
49976
|
type: Input
|
|
50188
49977
|
}], showClass: [{
|
|
@@ -51507,7 +51296,8 @@ class RoomPlannerModule {
|
|
|
51507
51296
|
CustomShapeCreatorComponent,
|
|
51508
51297
|
WallLengthInputComponent,
|
|
51509
51298
|
CustomCylinderCreatorComponent,
|
|
51510
|
-
SelectedObjectScaleComponent
|
|
51299
|
+
SelectedObjectScaleComponent,
|
|
51300
|
+
ConfigurationPresetLoaderComponent], imports: [CoreModule,
|
|
51511
51301
|
CategoryLibraryModule,
|
|
51512
51302
|
CommonModule,
|
|
51513
51303
|
ContextMenuModule,
|
|
@@ -51647,7 +51437,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
51647
51437
|
CustomShapeCreatorComponent,
|
|
51648
51438
|
WallLengthInputComponent,
|
|
51649
51439
|
CustomCylinderCreatorComponent,
|
|
51650
|
-
SelectedObjectScaleComponent
|
|
51440
|
+
SelectedObjectScaleComponent,
|
|
51441
|
+
ConfigurationPresetLoaderComponent
|
|
51651
51442
|
],
|
|
51652
51443
|
providers: [
|
|
51653
51444
|
CollisionManagerService,
|