mirror of
https://github.com/Doodle3D/Doodle3D-Core.git
synced 2024-11-16 19:17:56 +01:00
75 lines
1.9 KiB
JavaScript
75 lines
1.9 KiB
JavaScript
import { Color, Matrix4 } from 'three';
|
|
import { Vector, Matrix } from '@doodle3d/cal';
|
|
import semver from 'semver';
|
|
import { recursivePromiseApply } from '../utils/async.js';
|
|
import { base64ToImage, base64ToVectorArray } from '../utils/binaryUtils.js';
|
|
import { LEGACY_HEIGHT_STEP } from '../constants/d3Constants.js';
|
|
|
|
export default async function JSONToSketchData({ data, appVersion }) {
|
|
let sketchData = JSON.parse(data, (key, value) => {
|
|
if (semver.lt(appVersion, '0.1.2')) {
|
|
if (key === 'imageData') {
|
|
return base64ToImage(value);
|
|
}
|
|
}
|
|
|
|
if (value.metadata && value.metadata.type) {
|
|
switch (value.metadata.type) {
|
|
case 'Vector':
|
|
return new Vector().fromJSON(value);
|
|
|
|
case 'Matrix':
|
|
return new Matrix().fromJSON(value);
|
|
|
|
case 'VectorArray':
|
|
return base64ToVectorArray(value);
|
|
|
|
case 'Image':
|
|
return base64ToImage(value);
|
|
|
|
case 'Matrix4':
|
|
return new Matrix4().copy(value);
|
|
|
|
case 'Color':
|
|
return new Color(value.data).getHex();
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
// legacy, convert { r: Float, g: Float, b: Float } to hex
|
|
if (typeof value.r === 'number' && typeof value.g === 'number' && typeof value.b === 'number') {
|
|
return new Color(value.r, value.g, value.b).getHex();
|
|
}
|
|
|
|
return value;
|
|
});
|
|
sketchData = await recursivePromiseApply(sketchData);
|
|
|
|
if (semver.lt(appVersion, '0.4.0')) {
|
|
sketchData = {
|
|
spaces: [{
|
|
matrix: new Matrix4(),
|
|
objects: sketchData
|
|
}]
|
|
};
|
|
}
|
|
|
|
if (semver.lt(appVersion, '0.10.0')) {
|
|
for (const space of sketchData.spaces) {
|
|
for (const object of space.objects) {
|
|
const { sculpt, height } = object;
|
|
|
|
object.sculpt = sculpt.map((scale, i) => ({
|
|
pos: Math.min(1, (i * LEGACY_HEIGHT_STEP) / height),
|
|
scale
|
|
}));
|
|
}
|
|
}
|
|
}
|
|
|
|
return sketchData;
|
|
}
|