diff --git a/src/app/flux/project/index.ts b/src/app/flux/project/index.ts index 8b95636cb1..c530e3a60b 100644 --- a/src/app/flux/project/index.ts +++ b/src/app/flux/project/index.ts @@ -5,7 +5,11 @@ import pkg from '../../../package.json'; import api from '../../api'; import { COORDINATE_MODE_BOTTOM_CENTER, + COORDINATE_MODE_BOTTOM_LEFT, + COORDINATE_MODE_BOTTOM_RIGHT, COORDINATE_MODE_CENTER, + COORDINATE_MODE_TOP_LEFT, + COORDINATE_MODE_TOP_RIGHT, DISPLAYED_TYPE_MODEL, HEAD_TYPE_ENV_NAME, LEFT_EXTRUDER, @@ -17,11 +21,12 @@ import { RIGHT_EXTRUDER, SOURCE_TYPE } from '../../constants'; -import { convertMaterialsToWorkpiece } from '../../constants/coordinate'; +import { CylinderWorkpieceReference, OriginType, RectangleWorkpieceReference, convertMaterialsToWorkpiece } from '../../constants/coordinate'; import { HEAD_CNC, HEAD_LASER, HEAD_PRINTING, SINGLE_EXTRUDER_TOOLHEAD_FOR_SM2 } from '../../constants/machines'; import { checkIsGCodeFile, checkIsSnapmakerProjectFile } from '../../lib/check-name'; import { logModuleVisit } from '../../lib/gaEvent'; import i18n from '../../lib/i18n'; +import log from '../../lib/log'; import { PROCESS_STAGE } from '../../lib/manager/ProgressManager'; import workerManager from '../../lib/manager/workerManager'; import { bubbleSortByAttribute } from '../../lib/numeric-utils'; @@ -172,7 +177,7 @@ export const actions = { const envObj = JSON.parse(content); if (!envObj.models.length) return; } catch (e) { - console.info(`Unable to parse environment JSON for ${headType}`); + log.info(`Unable to parse environment JSON for ${headType}`); } dispatch(actions.updateState(headType, { findLastEnvironment: true, content })); @@ -183,7 +188,7 @@ export const actions = { try { await api.env.removeEnv({ headType }); } catch (e) { - console.log(e); + log.error(e); } dispatch(actions.updateState(headType, { unSaved: false })); @@ -290,12 +295,51 @@ export const actions = { dispatch(editorActions.updateWorkpieceObject(envHeadType)); } + const isRotate = materials ? materials.isRotate : false; + // origin if (origin) { dispatch(editorActions.setOrigin(envHeadType, origin)); + } else { + // Old project does not have origin saved, we asssume that they use "Workpiece" origin type + let reference; + if (!isRotate) { + switch (coordinateMode.value) { + case COORDINATE_MODE_CENTER.value: + reference = RectangleWorkpieceReference.Center; + break; + case COORDINATE_MODE_BOTTOM_LEFT.value: + reference = RectangleWorkpieceReference.BottomLeft; + break; + case COORDINATE_MODE_BOTTOM_RIGHT.value: + reference = RectangleWorkpieceReference.BottomRight; + break; + case COORDINATE_MODE_TOP_LEFT.value: + reference = RectangleWorkpieceReference.TopLeft; + break; + case COORDINATE_MODE_TOP_RIGHT.value: + reference = RectangleWorkpieceReference.TopLeft; + break; + default: + reference = RectangleWorkpieceReference.Center; + break; + } + } else { + switch (coordinateMode.value) { + case COORDINATE_MODE_BOTTOM_CENTER.value: + default: + reference = CylinderWorkpieceReference.FrontCenter; + break; + } + } + + dispatch(editorActions.setOrigin(envHeadType, { + type: OriginType.Workpiece, + reference: reference, + referenceMetadata: {}, + })); } - const isRotate = materials ? materials.isRotate : false; const oversize = some(keys(coordinateSize), (key) => { return currentSize[key] < coordinateSize[key]; }); @@ -385,7 +429,7 @@ export const actions = { Promise.all(promiseArray).then(() => { dispatch(actions.afterOpened(envHeadType)); - }).catch(console.error); + }).catch(log.error); }, exportFile: (targetFile, renderGcodeFileName = null) => async (dispatch) => { @@ -542,7 +586,7 @@ export const actions = { try { envObj = JSON.parse(content); } catch (e) { - console.error(e); + log.error(e); return; } const machineInfo = envObj.machineInfo; diff --git a/src/app/models/ModelGroup2D.ts b/src/app/models/ModelGroup2D.ts index 8d89b514a9..04ce9a72bc 100644 --- a/src/app/models/ModelGroup2D.ts +++ b/src/app/models/ModelGroup2D.ts @@ -464,11 +464,6 @@ class ModelGroup2D extends EventEmitter { } public getSelectedModelsForHotZoneCheck() { - // TODO: Refactor this - // if (this.series !== 'A400') { - // return []; - // } - return this.getModels(); } diff --git a/src/app/ui/pages/cnc-main/CNCMainPage.tsx b/src/app/ui/pages/cnc-main/CNCMainPage.tsx index 5eb9fdc171..ef7021e7b8 100644 --- a/src/app/ui/pages/cnc-main/CNCMainPage.tsx +++ b/src/app/ui/pages/cnc-main/CNCMainPage.tsx @@ -12,6 +12,14 @@ import { actions as projectActions } from '../../../flux/project'; import i18n from '../../../lib/i18n'; import modal from '../../../lib/modal'; import { getUploadModeByFilename } from '../../../lib/units'; +import { + SnapmakerA150Machine, + SnapmakerA250Machine, + SnapmakerA350Machine, + SnapmakerArtisanMachine, + SnapmakerOriginalExtendedMachine, + SnapmakerOriginalMachine +} from '../../../machines'; import { machineStore } from '../../../store/local-storage'; import { Button } from '../../components/Buttons'; import Checkbox from '../../components/Checkbox'; @@ -24,8 +32,8 @@ import { logPageView, renderModal, renderPopup, useUnsavedTitle } from '../../ut import CNCVisualizer from '../../widgets/CNCVisualizer'; import Thumbnail from '../../widgets/CncLaserShared/Thumbnail'; import useRenderMainToolBar from '../CncLaserShared/MainToolBar'; -import useRenderRemoveModelsWarning from '../CncLaserShared/RemoveAllModelsWarning'; import RenderProjectRightView from '../CncLaserShared/ProjectRightView'; +import useRenderRemoveModelsWarning from '../CncLaserShared/RemoveAllModelsWarning'; import HomePage from '../HomePage'; import Workspace from '../Workspace'; import { @@ -244,32 +252,32 @@ const Cnc: React.FC = ({ location }) => { }; } else { switch (series) { - case 'Original Long Z-axis': - case 'Original': + case SnapmakerOriginalMachine.identifier: + case SnapmakerOriginalExtendedMachine.identifier: pathConfig = { path: './UserCase/cnc/original_standard/cnc_original_standard.snapcnc', name: 'cnc_original_standard.snapcnc' }; break; - case 'A150': + case SnapmakerA150Machine.identifier: pathConfig = { path: './UserCase/cnc/a150_standard/cnc_a150_standard.snapcnc', name: 'cnc_a150_standard.snapcnc' }; break; - case 'A250': + case SnapmakerA250Machine.identifier: pathConfig = { path: './UserCase/cnc/a250_standard/cnc_a250_standard.snapcnc', name: 'cnc_a250_standard.snapcnc' }; break; - case 'A350': + case SnapmakerA350Machine.identifier: pathConfig = { path: './UserCase/cnc/a350_standard/cnc_a350_standard.snapcnc', name: 'cnc_a350_standard.snapcnc' }; break; - case 'A400': + case SnapmakerArtisanMachine.identifier: pathConfig = { path: './UserCase/cnc/Luban Lock.snapcnc', name: 'Luban Lock.snapcnc', diff --git a/src/app/ui/widgets/Enclosure/Enclosure.tsx b/src/app/ui/widgets/Enclosure/Enclosure.tsx index 45b4b9ad69..ac83519438 100644 --- a/src/app/ui/widgets/Enclosure/Enclosure.tsx +++ b/src/app/ui/widgets/Enclosure/Enclosure.tsx @@ -86,7 +86,7 @@ const Enclosure: React.FC = () => { /> {/* Disable adjustment for door detection - {(isConnected && connectionType === 'wifi' && headType !== '3dp' && series !== 'A400') && ( + {(isConnected && connectionType === 'wifi' && headType !== '3dp') && ( { }); res.end(); } catch (e) { - log.error(`Failed to recover file: ${file.path}`); + log.error(`Failed to recover from project file: ${file.path}`); log.error(e); res.status(ERR_INTERNAL_SERVER_ERROR).send({ - msg: `Failed to recover file: ${e}` + msg: `Failed to recover from project file: ${e}`, }); } };