Skip to content
This repository was archived by the owner on Oct 19, 2020. It is now read-only.

Commit 1e05d7f

Browse files
author
dominic
committed
moved default material substitution before mesh generation
because kitchen is a special snowflake
1 parent 5fa8536 commit 1e05d7f

14 files changed

+69
-34
lines changed

src/scene/structure/parametric-objects/closet.js

+10-8
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,18 @@
66
import generateNormals from '../../../utils/data3d/buffer/get-normals'
77
import generateUvs from '../../../utils/data3d/buffer/get-uvs'
88
import getMaterials3d from './common/get-materials'
9+
import applyDefaultMaterials from './common/apply-default-materials'
910

1011
export default function(attributes) {
11-
return Promise.all([
12-
generateMeshes3d(attributes),
13-
getMaterials3d(attributes.materials, getDefaultMaterials())
14-
]).then(results => ({
15-
meshes: results[0],
16-
materials: results[1]
17-
}))
18-
}
12+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
13+
return Promise.all([
14+
generateMeshes3d(attributes),
15+
getMaterials3d(attributes.materials, getDefaultMaterials())
16+
]).then(results => ({
17+
meshes: results[0],
18+
materials: results[1]
19+
}))
20+
}
1921

2022
export function getDefaultMaterials(){
2123
return {

src/scene/structure/parametric-objects/column.js

+10-8
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@ import generateUvs from '../../../utils/data3d/buffer/get-uvs'
55
import generatePolygonBuffer from '../../../utils/data3d/buffer/get-polygon'
66
import generateExtrusionBuffer from '../../../utils/data3d/buffer/get-extrusion'
77
import getMaterials3d from './common/get-materials'
8+
import applyDefaultMaterials from './common/apply-default-materials'
89

910
export default function(attributes) {
10-
return Promise.all([
11-
generateMeshes3d(attributes),
12-
getMaterials3d(attributes.materials, getDefaultMaterials())
13-
]).then(results => ({
14-
meshes: results[0],
15-
materials: results[1]
16-
}))
17-
}
11+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
12+
return Promise.all([
13+
generateMeshes3d(attributes),
14+
getMaterials3d(attributes.materials, getDefaultMaterials())
15+
]).then(results => ({
16+
meshes: results[0],
17+
materials: results[1]
18+
}))
19+
}
1820

1921
export function getDefaultMaterials(){
2022
return {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
'use strict';
2+
3+
import cloneDeep from 'lodash/cloneDeep'
4+
5+
// apply default material names to object in case material key is unset
6+
export default function(materials, defaults){
7+
8+
if (!defaults) {
9+
console.error('No default materials set')
10+
defaults={}
11+
}
12+
13+
if (!materials) return Promise.resolve(cloneDeep(defaults))
14+
15+
Object.keys(defaults).forEach(function(d){
16+
if (!materials[d]) materials[d]=defaults[d]
17+
})
18+
19+
return materials
20+
}

src/scene/structure/parametric-objects/common/get-material.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
'use strict';
2+
13
import cloneDeep from 'lodash/cloneDeep'
24
import materialLibrary from './material-lib.js'
35

4-
export default function getMaterial(material) {
6+
export default function (material) {
57
var STORAGE_URL = 'https://storage.3d.io/'
68
var mat = materialLibrary[material]
79

@@ -18,4 +20,4 @@ export default function getMaterial(material) {
1820
}
1921
})
2022
return attr
21-
}
23+
}

src/scene/structure/parametric-objects/common/get-materials.js

+4-9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
1+
'use strict';
2+
13
import cloneDeep from 'lodash/cloneDeep'
24
import materialLibrary from './material-lib.js'
35

4-
export default function getMaterials3d (materials, defaults) {
5-
if (!defaults) {
6-
console.error('No default materials set')
7-
defaults={}
8-
}
9-
if (!materials) return Promise.resolve(cloneDeep(defaults))
10-
Object.keys(defaults).forEach(function(d){
11-
if (!materials[d]) materials[d]=defaults[d]
12-
})
6+
// resolve standard materials if necessary
7+
export default function (materials, defaults) {
138
Object.keys(materials).map(meshName => {
149
if (typeof(materials[meshName])==="string") {
1510
materials[meshName]=getMaterial(materials[meshName])

src/scene/structure/parametric-objects/common/material-lib.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
'use strict';
2+
13
export default {
24
"basic-floor": {
35
"meta": {

src/scene/structure/parametric-objects/door.js

+2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import generateNormals from '../../../utils/data3d/buffer/get-normals'
44
import generateUvs from '../../../utils/data3d/buffer/get-uvs'
55
import getMaterials3d from './common/get-materials'
6+
import applyDefaultMaterials from './common/apply-default-materials'
67

78
export default function(attributes) {
9+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
810
return Promise.all([
911
generateMeshes3d(attributes),
1012
getMaterials3d(attributes.materials, getDefaultMaterials())

src/scene/structure/parametric-objects/floor.js

+2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import generateExtrusionBuffer from '../../../utils/data3d/buffer/get-extrusion'
55
import generateNormals from '../../../utils/data3d/buffer/get-normals'
66
import generateUvs from '../../../utils/data3d/buffer/get-uvs'
77
import getMaterials3d from './common/get-materials'
8+
import applyDefaultMaterials from './common/apply-default-materials'
89

910
export default function(attributes) {
11+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
1012
return Promise.all([
1113
generateMeshes3d(attributes),
1214
getMaterials3d(attributes.materials, getDefaultMaterials())

src/scene/structure/parametric-objects/kitchen.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ import generateExtrusionBuffer from '../../../utils/data3d/buffer/get-extrusion'
55
import generateNormals from '../../../utils/data3d/buffer/get-normals'
66
import generateUvs from '../../../utils/data3d/buffer/get-uvs'
77
import getMaterials3d from './common/get-materials'
8+
import applyDefaultMaterials from './common/apply-default-materials'
89

910
import loadData3d from '../../../utils/data3d/load'
1011

1112
export default function(attributes) {
13+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
1214
return Promise.all([
1315
generateMeshes3d(attributes),
14-
getMaterials3d(attributes.materials, getDefaultMaterials())
16+
getMaterials3d(attributes.materials)
1517
]).then(results => ({
1618
meshes: results[0],
1719
materials: results[1]
@@ -35,11 +37,9 @@ export function getDefaultMaterials(){
3537
}
3638
}
3739

38-
function generateMeshes3d (a) {
39-
console.log('generateMeshes3d', a)
40+
export function generateMeshes3d (a) {
4041

4142
// external meshes
42-
4343
var externalMeshes = {
4444
singleSink: 'https://storage.3d.io/535e624259ee6b0200000484/170429-0355-60hukz/bf4e4a56-ed95-4b58-a214-4b1a0a84ae0e.gz.data3d.buffer',
4545
doubleSink: 'https://storage.3d.io/535e624259ee6b0200000484/170429-2156-7ufbnv/df481313-8fb4-48da-bc28-0369b08a2c6a.gz.data3d.buffer',

src/scene/structure/parametric-objects/polyfloor.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import generateExtrusionBuffer from '../../../utils/data3d/buffer/get-extrusion'
66
import generateNormals from '../../../utils/data3d/buffer/get-normals'
77
import cloneDeep from 'lodash/cloneDeep'
88
import getMaterials3d from './common/get-materials'
9-
9+
import applyDefaultMaterials from './common/apply-default-materials'
1010

1111
export default function(attributes) {
12+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
1213
return Promise.all([
1314
generateMeshes3d(attributes),
1415
getMaterials3d(attributes.materials, getDefaultMaterials())

src/scene/structure/parametric-objects/railing.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import generateExtrusionBuffer from '../../../utils/data3d/buffer/get-extrusion'
55
import generateNormals from '../../../utils/data3d/buffer/get-normals'
66
import generateUvs from '../../../utils/data3d/buffer/get-uvs'
77
import getMaterials3d from './common/get-materials'
8-
98
import sortBy from 'lodash/sortBy'
109
import loadData3d from '../../../utils/data3d/load'
10+
import applyDefaultMaterials from './common/apply-default-materials'
1111

1212

1313
export default function(attributes) {
14+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
1415
return Promise.all([
1516
generateMeshes3d(attributes),
1617
getMaterials3d(attributes.materials, getDefaultMaterials())

src/scene/structure/parametric-objects/stairs.js

+2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import generateNormals from '../../../utils/data3d/buffer/get-normals'
55
import generateUvs from '../../../utils/data3d/buffer/get-uvs'
66
import cloneDeep from 'lodash/cloneDeep'
77
import getMaterials3d from './common/get-materials'
8+
import applyDefaultMaterials from './common/apply-default-materials'
89

910
export default function(attributes) {
11+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
1012
return Promise.all([
1113
generateMeshes3d(attributes),
1214
getMaterials3d(attributes.materials, getDefaultMaterials())

src/scene/structure/parametric-objects/wall.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import generateExtrusionBuffer from '../../../utils/data3d/buffer/get-extrusion'
55
import generateNormals from '../../../utils/data3d/buffer/get-normals'
66
import generateUvs from '../../../utils/data3d/buffer/get-uvs'
77
import getMaterials3d from './common/get-materials'
8+
import applyDefaultMaterials from './common/apply-default-materials'
89

910
import sortBy from 'lodash/sortBy'
1011
import loadData3d from '../../../utils/data3d/load'
1112

1213
export default function(attributes) {
14+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
1315
return Promise.all([
1416
generateMeshes3d(attributes),
1517
getMaterials3d(attributes.materials, getDefaultMaterials())
@@ -30,7 +32,7 @@ export function getDefaultMaterials(){
3032
}
3133
}
3234

33-
function generateMeshes3d(a) {
35+
export function generateMeshes3d(a) {
3436
// get children
3537
var children = a.children
3638
children = sortBy(children, function (model) {

src/scene/structure/parametric-objects/window.js

+2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import generatePolygonBuffer from '../../../utils/data3d/buffer/get-polygon'
44
import generateNormals from '../../../utils/data3d/buffer/get-normals'
55
import getMaterials3d from './common/get-materials'
6+
import applyDefaultMaterials from './common/apply-default-materials'
67

78
export default function(attributes, parentAttributes) {
9+
attributes.materials = applyDefaultMaterials(attributes.materials, getDefaultMaterials());
810
return Promise.all([
911
generateMeshes3d(attributes, parentAttributes),
1012
getMaterials3d(attributes.materials, getDefaultMaterials())

0 commit comments

Comments
 (0)