|
@@ -1,7 +1,11 @@
|
|
|
import {EXPCAD} from './index'
|
|
|
import {roateDataY} from './core/additional/dataHandle'
|
|
|
+import { CADElement } from './core/core/element'
|
|
|
+import Mapping from './core/label/mapping'
|
|
|
+import calcRoom from './calcRoom'
|
|
|
+import {isFaceContain, pointInside} from './core/geometry'
|
|
|
|
|
|
-const setStyle = async (cad: EXPCAD, lineWidth) => {
|
|
|
+const setStyle = (cad: EXPCAD, lineWidth) => {
|
|
|
const processing = cad.processing
|
|
|
const doors = processing.doors
|
|
|
const slideDoors = processing.slideDoors
|
|
@@ -22,72 +26,63 @@ const setStyle = async (cad: EXPCAD, lineWidth) => {
|
|
|
...cases,
|
|
|
...doors
|
|
|
]
|
|
|
-
|
|
|
- const pros = []
|
|
|
-
|
|
|
- pros.concat(tags.map(door => {
|
|
|
+
|
|
|
+ tags.forEach(door => {
|
|
|
let fontSize = lineWidth * 3
|
|
|
door.ele.fontSize = fontSize < 12 ? 12 : fontSize
|
|
|
- return new Promise(resolve => door.ele.nextTick(resolve))
|
|
|
- }));
|
|
|
+ });
|
|
|
|
|
|
|
|
|
- pros.concat(fcArchs.map(door => {
|
|
|
+ fcArchs.forEach(door => {
|
|
|
door.ele.width = lineWidth * 0.33
|
|
|
- return new Promise(resolve => door.ele.nextTick(resolve))
|
|
|
- }))
|
|
|
+ })
|
|
|
|
|
|
- pros.concat(slideDoors.map(door => {
|
|
|
+ slideDoors.forEach(door => {
|
|
|
door.ele.foorWidth = lineWidth*2 / (door.ele.attachment.border ? 1 : 2)
|
|
|
door.ele.bwithin = lineWidth / 2 / (door.ele.attachment.border ? 1 : 2)
|
|
|
- return new Promise(resolve => door.ele.nextTick(resolve))
|
|
|
- }))
|
|
|
-
|
|
|
- pros.concat(cases.map(door => {
|
|
|
- door.ele.width = lineWidth /2 * (door.ele.attachment.border ? 1 : 2)
|
|
|
- door.ele.stamWidth = lineWidth * 0.166 / (door.ele.attachment.border ? 1 : 2)
|
|
|
- return new Promise(resolve => door.ele.nextTick(resolve))
|
|
|
- }))
|
|
|
- pros.concat(pwidthArchs.map(door => {
|
|
|
+ })
|
|
|
+
|
|
|
+ cases.forEach(door => {
|
|
|
+ door.ele.width = (lineWidth * 4 /2) / (door.ele.attachment.border ? 1 : 1.5)
|
|
|
+ door.ele.stamWidth = (lineWidth * 0.1) / (door.ele.attachment.border ? 1 : 2)
|
|
|
+ door.ele.outLine.width = door.ele.width
|
|
|
+ door.ele.outLine.color = door.ele.fill
|
|
|
+ door.ele.innerline.width = door.ele.stamWidth
|
|
|
+ door.ele.innerline.color = door.ele.seam
|
|
|
+ door.ele.innerline.update()
|
|
|
+ })
|
|
|
+ pwidthArchs.forEach(door => {
|
|
|
door.ele.width = lineWidth
|
|
|
- return new Promise(resolve => door.ele.nextTick(resolve))
|
|
|
- }))
|
|
|
- pros.concat(bayCases.map(door => {
|
|
|
+ })
|
|
|
+ bayCases.forEach(door => {
|
|
|
door.ele.width = lineWidth * 0.33 / (door.ele.attachment.border ? 1 : 2)
|
|
|
- return new Promise(resolve => door.ele.nextTick(resolve))
|
|
|
- }))
|
|
|
- pros.concat(groundCases.map(door => {
|
|
|
+ })
|
|
|
+ groundCases.forEach(door => {
|
|
|
door.ele.width = lineWidth / 2 * (door.ele.attachment.border ? 1 : 2)
|
|
|
- return new Promise(resolve => door.ele.nextTick(resolve))
|
|
|
- }))
|
|
|
- pros.concat(doors.map(door => {
|
|
|
+ })
|
|
|
+ doors.forEach(door => {
|
|
|
door.ele.foorWidth = lineWidth * 2 / (door.ele.attachment.border ? 1 : 2)
|
|
|
door.ele.outWidth = lineWidth * 0.33 / (door.ele.attachment.border ? 1 : 2)
|
|
|
- return new Promise(resolve => door.ele.nextTick(resolve))
|
|
|
- }))
|
|
|
- pros.concat(points.map(door => {
|
|
|
+ })
|
|
|
+ points.forEach(door => {
|
|
|
door.ele.r1 = lineWidth + 1
|
|
|
door.ele.r = lineWidth + 1
|
|
|
- return new Promise(resolve => door.ele.nextTick(resolve))
|
|
|
- }))
|
|
|
- pros.concat(pchildPoints.map(door => {
|
|
|
+ })
|
|
|
+ pchildPoints.forEach(door => {
|
|
|
door.ele.linePoints[0].r1 = lineWidth + 1
|
|
|
door.ele.linePoints[0].r = lineWidth + 1
|
|
|
door.ele.linePoints[1].r1 = lineWidth + 1
|
|
|
door.ele.linePoints[1].r = lineWidth + 1
|
|
|
- }))
|
|
|
-
|
|
|
- pros.push(
|
|
|
- cad.setDireAttrs({
|
|
|
- fontSize: 2.6 * lineWidth,
|
|
|
- r: 16.6 * lineWidth,
|
|
|
- border: lineWidth,
|
|
|
- right: lineWidth * 6.3,
|
|
|
- top: lineWidth * 6.3,
|
|
|
- ArgDire: lineWidth * 5
|
|
|
- })
|
|
|
- )
|
|
|
- await Promise.all(pros)
|
|
|
+ })
|
|
|
+
|
|
|
+ cad.setDireAttrs({
|
|
|
+ fontSize: 2.6 * lineWidth,
|
|
|
+ r: 16.6 * lineWidth,
|
|
|
+ border: lineWidth,
|
|
|
+ right: lineWidth * 6.3,
|
|
|
+ top: lineWidth * 6.3,
|
|
|
+ ArgDire: lineWidth * 5
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
|
|
@@ -98,130 +93,175 @@ export default (cad: EXPCAD) => {
|
|
|
width = 1920 * 3 / 2,
|
|
|
height = 1080 * 3 / 2,
|
|
|
primaryColor = '#fff',
|
|
|
+ archColor = 'rgba(0,0,0,0)',
|
|
|
bgColor = 'rgba(0,0,0,0)',
|
|
|
- data = roateDataY((cad as any).getData(true, true)),
|
|
|
+ textColor = '#fff',
|
|
|
+ archBorder = primaryColor,
|
|
|
+ data = (cad as any).getData(true, true),
|
|
|
padding = 3 * 15 * 20 / 2,
|
|
|
showGauge = true,
|
|
|
lineWidth = 20 / 2,
|
|
|
+ spliceGauge = false,
|
|
|
showDire = false,
|
|
|
showTags = true,
|
|
|
- showDoorStart = true
|
|
|
+ showDoorStart = true,
|
|
|
+ showMapping = false,
|
|
|
+ format = 'image/png',
|
|
|
+ errreturn = false
|
|
|
} = {}) => {
|
|
|
+ data = roateDataY(data.floors.find(floor => floor.show))
|
|
|
const lwidth = cad.processing.lines[0] ? cad.processing.lines[0].ele.width : 3
|
|
|
cad.processing.render.layer.style.opacity = '0'
|
|
|
|
|
|
- cad.processing.lines.forEach(({ele: line}) => {
|
|
|
- line.color = primaryColor
|
|
|
+ let mappings = []
|
|
|
+ let promiseAll = []
|
|
|
+
|
|
|
+ CADElement.examples.get(cad.processing.render).forEach(ele => {
|
|
|
+ promiseAll.push(new Promise(r => ele.nextTick(r)))
|
|
|
+ })
|
|
|
+
|
|
|
+ await Promise.all(promiseAll)
|
|
|
+
|
|
|
+
|
|
|
+ CADElement.examples.get(cad.processing.render).forEach(ele => {
|
|
|
+ ele.__state.direct = true
|
|
|
+ ele.changeSelect(false)
|
|
|
})
|
|
|
|
|
|
+
|
|
|
+ if (showMapping) {
|
|
|
+ let useTaggings = []
|
|
|
+ let rooms = calcRoom(data)
|
|
|
+ rooms = rooms
|
|
|
+ .map(points => points)
|
|
|
+ .sort((room1, room2) => isFaceContain(room1, room2) ? 1 : -1)
|
|
|
+
|
|
|
+ rooms.forEach((points, index) => {
|
|
|
+ let tagging = cad.processing.taggings.find(tag => pointInside(points, tag.ele) && !~useTaggings.indexOf(tag))
|
|
|
+ let mapping = new Mapping({
|
|
|
+ points,
|
|
|
+ label: tagging ? tagging.ele.title : '',
|
|
|
+ show: true,
|
|
|
+ renderer: cad.processing.render
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ mapping.zIndex = -index - 3
|
|
|
+ mapping.update()
|
|
|
+ cad.processing.render.push(mapping)
|
|
|
+
|
|
|
+ mappings.push(mapping)
|
|
|
+ useTaggings.push(tagging)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
let attrs: any = [
|
|
|
- {key: 'stroke', attr: ['doors', 'columns', 'bayCases', 'furnColumns', 'furnFlues'], oldVals: []},
|
|
|
- {key: 'fill', attr: ['cases', 'groundCases'], oldVals: []},
|
|
|
- {key: 'foorColor', attr: ['slideDoors'], oldVals: []},
|
|
|
- {key: 'color', attr: ['taggings'], oldVals: []},
|
|
|
- {key: 'icon', attr: ['doors'], oldVals: []}
|
|
|
+ {key: 'stroke', attr: ['doors', 'columns', 'bayCases', 'furnColumns', 'furnFlues', 'doubleDoors'], oldVals: [], newColor: archBorder},
|
|
|
+ {key: 'fill', attr: ['groundCases'], oldVals: [], newColor: archBorder},
|
|
|
+ {key: 'seam', attr: ['cases'], oldVals: [], newColor: primaryColor},
|
|
|
+ {key: 'bgColor', attr: ['cases'], oldVals: [], newColor: primaryColor},
|
|
|
+ {key: 'color', attr: ['lines'], oldVals: [], newColor: primaryColor},
|
|
|
+ {key: 'icon', attr: ['doors'], oldVals: [], newColor: primaryColor},
|
|
|
+ {key: 'fill', attr: ['cases', 'doors', 'columns', 'bayCases', 'furnColumns', 'furnFlues', 'slideDoors', 'doubleDoors'], oldVals: [], newColor: archColor},
|
|
|
+ {key: 'foorColor', attr: ['slideDoors'], oldVals: [], newColor: archBorder},
|
|
|
+ {key: 'clipColor', attr: ['slideDoors'], oldVals: [], newColor: archColor},
|
|
|
+ {key: 'color', attr: ['taggings'], oldVals: [], newColor: textColor}
|
|
|
+
|
|
|
]
|
|
|
-
|
|
|
- attrs.forEach(({key, attr: kattr, oldVals}) => {
|
|
|
+ attrs.forEach(({key, attr: kattr, oldVals, newColor}) => {
|
|
|
kattr.forEach((attr) => {
|
|
|
oldVals.push(cad.processing[attr].map(({ele}) => ele[key]))
|
|
|
cad.processing[attr].forEach(({ele}) => {
|
|
|
if (key === 'icon') {
|
|
|
- ele[key] = primaryColor !== '#fff' ? 'darkIcon' : 'defaultIcon'
|
|
|
+ ele[key] = newColor !== '#fff' ? 'darkIcon' : 'defaultIcon'
|
|
|
} else {
|
|
|
- ele[key] = primaryColor
|
|
|
+ ele[key] = newColor
|
|
|
}
|
|
|
+ // console.log('修改属性', ele)
|
|
|
})
|
|
|
})
|
|
|
})
|
|
|
|
|
|
+
|
|
|
|
|
|
- let direShow = cad.direction.show
|
|
|
- if (!cad.direction.show && showDire) {
|
|
|
+ let direction = cad.processing.direction
|
|
|
+ let direShow = direction.show
|
|
|
+ if (!direction.show && showDire) {
|
|
|
cad.showDire()
|
|
|
} else if (!showDire) {
|
|
|
cad.hideDire()
|
|
|
}
|
|
|
|
|
|
let tagShow = cad.processing.taggings[0] && cad.processing.taggings[0].ele.show
|
|
|
- if (showTags && !tagShow) {
|
|
|
- cad.processing.taggings.forEach(({ele: tag}) => tag.show = true);
|
|
|
- }
|
|
|
- cad.processing.attrs.forEach(key => {
|
|
|
- cad.processing[key].forEach(obj => {
|
|
|
- obj.ele.select && obj.ele.changeSelect(false)
|
|
|
- })
|
|
|
- })
|
|
|
-
|
|
|
+ cad.processing.taggings.forEach(({ele: tag}) => tag.show = showTags);
|
|
|
+
|
|
|
|
|
|
let pointFill = cad.processing.points[0].ele.fillColor
|
|
|
let lineFill = cad.processing.lines[0].ele.init.color
|
|
|
- await Promise.all(
|
|
|
- cad.processing.points.map(({ele}) => {
|
|
|
- ele.fillColor = 'rgba(0,0,0,0)'
|
|
|
- return new Promise(r => ele.nextTick(r))
|
|
|
- })
|
|
|
- )
|
|
|
+ cad.processing.points.forEach(({ele}) => {
|
|
|
+ ele.fillColor = 'rgba(0,0,0,0)'
|
|
|
+ })
|
|
|
|
|
|
- let clearPointArchs = [].concat(cad.processing.doors).concat(cad.processing.groundCases).concat(cad.processing.cases)
|
|
|
+ let clearPointArchs = [].concat(cad.processing.doors).concat(cad.processing.groundCases).concat(cad.processing.cases).concat(cad.processing.doubleDoors)
|
|
|
|
|
|
for(let i = 0; i < clearPointArchs.length; i++) {
|
|
|
let points = (clearPointArchs[i].ele.points || clearPointArchs[i].ele.linePoints)
|
|
|
if (points) {
|
|
|
- await Promise.all(
|
|
|
- points.map(point => {
|
|
|
- point.fillColor = 'rgba(0,0,0,0)'
|
|
|
- return new Promise(r => point.nextTick(r))
|
|
|
- })
|
|
|
- )
|
|
|
+ points.forEach(point => point.fillColor = 'rgba(0,0,0,0)')
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- await setStyle(cad, lineWidth)
|
|
|
- await cad.setGaugeModel(1)
|
|
|
+ cad.setGaugeModel(1)
|
|
|
|
|
|
- let oldDireIcon = cad.direction.icon
|
|
|
- await cad.setDireAttrs({ simple: true, icon: primaryColor !== '#fff' ? 'darkIcon' : 'defaultIcon' })
|
|
|
+ let oldDireIcon = direction.icon
|
|
|
+ cad.setDireAttrs({ simple: true, icon: primaryColor !== '#fff' ? 'darkIcon' : 'defaultIcon' })
|
|
|
|
|
|
|
|
|
let doorStarts = cad.processing.doors.map(door => door.ele.showStart)
|
|
|
|
|
|
- await Promise.all(
|
|
|
- cad.processing.doors.map(door => {
|
|
|
- door.ele.showStart = showDoorStart
|
|
|
- return new Promise(r => door.ele.nextTick(r))
|
|
|
- })
|
|
|
- )
|
|
|
+ cad.processing.doors.forEach(door => door.ele.showStart = showDoorStart)
|
|
|
|
|
|
let oldGaugeColor = cad.gauge && cad.gauge.stroke
|
|
|
+ let minPX = cad.gauge && cad.gauge.minPX
|
|
|
if (showGauge) {
|
|
|
- await cad.setGaugeAttrs({
|
|
|
- minPX: Math.max(width, height),
|
|
|
+ let args: any = {
|
|
|
width: lineWidth / 2,
|
|
|
- showBottom: false,
|
|
|
+ showTop: false,
|
|
|
showRight: false,
|
|
|
padding: lineWidth * 3.3,
|
|
|
stroke: primaryColor
|
|
|
- })
|
|
|
+ }
|
|
|
+ if (!spliceGauge) {
|
|
|
+ args.minPX = Math.max(width, height)
|
|
|
+ } else {
|
|
|
+ args.minPX = 12 * lineWidth
|
|
|
+ console.log('---', args.minPX)
|
|
|
+ }
|
|
|
+
|
|
|
+ cad.setGaugeAttrs(args)
|
|
|
}
|
|
|
|
|
|
|
|
|
+ setStyle(cad, lineWidth)
|
|
|
|
|
|
- cad.processing.attrs.forEach(key => {
|
|
|
- cad.processing[key].forEach(obj => {
|
|
|
- obj.ele.update()
|
|
|
- })
|
|
|
- })
|
|
|
-
|
|
|
- await new Promise(r => setTimeout(r, 100))
|
|
|
+ CADElement.examples.get(cad.processing.render).forEach(ele => ele.update())
|
|
|
|
|
|
- const ret = await screenshot.call(this, {width, height, bgColor, data, spadding: padding, showGauge, lineWidth})
|
|
|
+ let ret, err
|
|
|
+ try {
|
|
|
+ ret = await screenshot.call(this, {width, height, bgColor, data, spadding: padding, showGauge, lineWidth, format})
|
|
|
+ } catch(e) {
|
|
|
+ if (errreturn) {
|
|
|
+ return e
|
|
|
+ }
|
|
|
+ err = e
|
|
|
+ }
|
|
|
|
|
|
if (showGauge) {
|
|
|
- await cad.setGaugeAttrs({
|
|
|
+ cad.setGaugeAttrs({
|
|
|
minPX: 50,
|
|
|
width: 1,
|
|
|
- showBottom: true,
|
|
|
+ showTop: true,
|
|
|
showRight: true,
|
|
|
padding: 10,
|
|
|
stroke: oldGaugeColor
|
|
@@ -229,50 +269,31 @@ export default (cad: EXPCAD) => {
|
|
|
}
|
|
|
|
|
|
|
|
|
- attrs.forEach(({key, attr: kattr, oldVals}) => {
|
|
|
- kattr.forEach((attr, index) => {
|
|
|
- cad.processing[attr].forEach(({ele}, aindex) => {
|
|
|
- ele[key] = oldVals[index][aindex]
|
|
|
- })
|
|
|
- })
|
|
|
- })
|
|
|
|
|
|
|
|
|
- await cad.setDireAttrs({ simple: false, icon: oldDireIcon })
|
|
|
+ cad.setDireAttrs({ simple: false, icon: oldDireIcon })
|
|
|
|
|
|
for(let i = 0; i < clearPointArchs.length; i++) {
|
|
|
let points = (clearPointArchs[i].ele.points || clearPointArchs[i].ele.linePoints)
|
|
|
if (points) {
|
|
|
- await Promise.all(
|
|
|
- points.map(point => {
|
|
|
- point.fillColor = pointFill
|
|
|
- return new Promise(r => point.nextTick(r))
|
|
|
- })
|
|
|
- )
|
|
|
- }
|
|
|
+ points.map(point => point.fillColor = pointFill)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- await setStyle(cad, lwidth)
|
|
|
- await cad.setGaugeModel(0)
|
|
|
+ setStyle(cad, lwidth)
|
|
|
+ cad.setGaugeModel(0)
|
|
|
|
|
|
cad.processing.points.forEach(({ele}) => ele.fillColor = pointFill)
|
|
|
- await Promise.all(
|
|
|
- cad.processing.lines.map(({ele}) => {
|
|
|
- return new Promise(r => {
|
|
|
- ele.color = lineFill
|
|
|
- ele.nextTick(r)
|
|
|
- })
|
|
|
- })
|
|
|
- )
|
|
|
+ cad.processing.lines.forEach(({ele}) => ele.color = lineFill)
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+ cad.processing.render.remove(...mappings)
|
|
|
|
|
|
if (direShow) {
|
|
|
- await cad.showDire()
|
|
|
+ cad.showDire()
|
|
|
} else {
|
|
|
- await cad.hideDire()
|
|
|
+ cad.hideDire()
|
|
|
}
|
|
|
+
|
|
|
if (tagShow) {
|
|
|
cad.processing.taggings.forEach(({ele: tag}) => tag.show = true);
|
|
|
} else {
|
|
@@ -284,7 +305,22 @@ export default (cad: EXPCAD) => {
|
|
|
})
|
|
|
|
|
|
cad.processing.render.layer.style.opacity = '1'
|
|
|
-
|
|
|
+
|
|
|
+ attrs.forEach(({key, attr: kattr, oldVals}) => {
|
|
|
+ kattr.forEach((attr, index) => {
|
|
|
+ cad.processing[attr].forEach(({ele}, aindex) => {
|
|
|
+ ele[key] = oldVals[index][aindex]
|
|
|
+ })
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ CADElement.examples.get(cad.processing.render).forEach(ele => {
|
|
|
+ ele.__state.direct = false
|
|
|
+ ele.update()
|
|
|
+ })
|
|
|
+ if (err) {
|
|
|
+ throw err
|
|
|
+ }
|
|
|
return ret
|
|
|
}
|
|
|
}
|