Compile Time Changes

All removed/modified interfaces. See specific sections for more details on what migration changes need to be made.

Old: public class MhFrameUpdateBayHeightFunction extends MhSystemEngineFunction {
New: public class MhFrameHeightChangeUpdateBayFunction extends MhSystemEngineFunction {

Old: public bool isBack2(Object o) { return evalClassification(o, sBack); }
New: public bool isBack(Object o) { return evalClassification(o, sBack); }

Old: public bool isBack(Object o) { return evalClassification(o, sBackRow); }
New: public bool isBackRow(Object o) { return evalClassification(o, sBackRow); }

Old: public MhSnapper[] getAllRowsRecursive(MhSnapper snapper, bool top=false, bool reverse=true, Snapper{} visited=null) {
New: public MhSnapper[] getAllRowsRecursive(MhSnapper snapper, bool top=false, Snapper{} visited=null) {

Old: public double mhCalculatedBayHeightForConstruction(MhSystemConfigurationItem this, MhSnapper bay, int numLevels, bool loadOnFloor=true, bool loadWithinLimit=true) {
New: public double mhCalculatedBayHeightForConstruction(MhSystemConfigurationItem this, MhSnapper bay, int numLevels, bool loadOnFloor=true, bool loadWithinLimit=true, bool forceConstruct=false) {

Old: public class MhDbgSpaceViewer extends DialogWindow {
New: public class MhDebugSpaceViewerDialog extends DialogWindow {

Old: public class MhBayCollisionAlternative extends MhDoubleStepRangeCollisionAlternative { 
New: public class MhRowChildCollisionAlternative extends MhSubSetCollisionAlternative {

Old: public class MhDoubleStepRangeCollisionAlternative extends MhCollisionAlternative {
New: public class MhSubSetCollisionAlternative extends MhCollisionAlternative {

Old: public CollisionPrimitive localCollisionPrimitive(MhSnapper this) : inline, deprecated {
Old: public CollisionPrimitive localCollisionPrimitive(MhSnapper this, MhCollisionFetchEnv env) : inline {
New: public CollisionPrimitive localCollisionPrimitive(MhSnapper this, MhCollisionFetchEnv env=null) : inline {

Removed: public bool isArm(Snapper snapper) { return evalClassification(snapper, sArm); } 
Removed: public void mhStorageRegisterFunctions(CxFunction[] functions, symbol pkg=null) {
Removed: public void mhStoragePutNextPkgLookup(symbol pkg, symbol next) {

Removed: public class MhBayAndPalletsGfxBehavior extends MhBayGfxBehavior {
Removed: public class MhCollisionEntrySnapperFilter extends MhCollisionSnapperFilter : deprecated {
Removed: public class MhBayStretchSymFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhBayStretch3DFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhDoubleDeepLevelLinkFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhLevelLinkFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhRowSystemSymFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhRowSystem2DFunction extends MhRowSystemSymFunction : deprecated {
Removed: public class MhRowSystem3DFunction extends MhRowSystemSymFunction : deprecated {
Removed: public class MhUnitLoadFixedStepPrimPopulator2 extends MhPopulator : deprecated {
Removed: public class MhUnitLoadStepPrimPopulator extends MhPopulator : deprecated {
Removed: public class MhStorageEngineStretchVessel extends MhStretchVessel : deprecated {
Removed: public class MhStorageEditorDifferentExtensionDialog extends ModalDialog : deprecated {
Removed: public class MhEngineOverrideFunctionInfo {

public class MhSnapper extends Snapper {
- Removed: extend public box localBound(symbol[] symbols) : deprecated {
- Removed: extend public CollisionPrimitive collisionPrimitive(Transform t, bool includeChildren, Object env=null) : deprecated {
- Removed: extend public void putEngineEntryDim(str key, double v) : deprecated {
- Old: extend public MhSnapper getSnapperReplacementForPickupApply() : deprecated {
- Old: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate) : deprecated {
- New: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate=null) {

public class MhSnapperShape extends CorePropObj {
- Old: extend public MhSnapper getSnapperReplacementForPickupApply() : deprecated {
- Old: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate) {
- New: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate=null) {

public class MhBehavior extends CoreObject {
- Removed: extend public bool allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative) : deprecated {

public class MhSystemConfiguration extends CoreObject {
- Removed: extend public void showPackageInfoMismatchDialog() { }
// See Old engine removal section
- Removed: extend public symbol functionPath() {

public class MhApplyColorFrameVessel extends MhSpreadColorFrameVessel {
- Removed: extend public bool useStrictClassification() : deprecated {

public class MhAssortment extends CorePropObj {
- Removed: extend public MhEngine engine() : deprecated {
- Removed: public symbol functionPath
- Removed: public bool useEngineFuncG2 : stream=null
- Removed: extend public bool useEngineFuncG2() {

public class MhEngineManager extends CoreObject {
- Removed: public MhEngine->MhEngineRun engineRuns : deprecated;
- Removed: extend public bool useEngineFuncG2() {
- Removed: extend public void ensureConfiguration(MhEngine engine, str->Object args) {
}

public class MhEngine extends CxEngine {
- Removed: public void mhRegisterEngineFunction(MhEngine engine, CxFunction func, symbol pkg=null) {
- Removed: public void mhPutEngineNextPkgLookup(MhEngine engine, symbol pkg, symbol next) {
- Removed: final public symbol functionPath() {
- Removed: final public void setFunctionPath(symbol functionPath) {

public class MhEngineBehavior extends MhBehavior : inherit constructors {
- Removed: extend public void putEngineEntryDim(MhSnapper snapper, str key, double v) : deprecated {
- Removed: extend public symbol functionPath(MhSnapper snapper) {
- Removed: extend public bool useEngineFuncG2(MhSnapper snapper) {
- Removed: extend public void putEngineRunFunctions(MhSnapper snapper, symbol event="", Object env=null) {
- Old: extend public void fetchEngineFunctionsRunG2(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
- New: extend public void fetchEngineFunctionsRun(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
- Old: extend public MhPreprocessArgsEnv preprocessFuncArgsG2(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
- New: extend public MhPreprocessArgsEnv preprocessFuncArgs(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
- Old: extend public str->Object engineFunctionArgsG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
- New: extend public str->Object engineFunctionArgs(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
- Old: extend public bool acceptFunctionRunG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) {
- New: extend public bool acceptFunctionRun(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) {

public class MhEngineFunctionLibrary extends CxFunctionLibrary {
- Removed: public MhEngineOverrideFunctionInfo overrideInfo
- Removed: public symbol->symbol nextFunctionLookupPkgs
- Removed: extend public void register(CxFunction fun, symbol pkg) {
- Removed: extend public void putNextPkgLookup(symbol path, symbol next) {
- Removed: extend public void optimizeFunctionsOrder(MhSystemConfiguration config) {
- Old: final public CxFunction getFunction(str key, symbol path, bool finalize) : deprecated {
- Old: final public CxFunction getFunction(str key, symbol path) {
- New: final public CxFunction getFunction(str key) {

public class MhEngineSnapperEntry extends MhEngineBoxEntry : inherit constructors {
- Removed: extend public MhEngineSnapperEntry zeroTransformSnapperEntry() : deprecated {

public class MhSnapperApplyAnimation extends MhSnapperSpreadToolAnimation {
- Removed: extend public MhSnapper snapperReplacement(MhSnapper pickedUp) : deprecated {

public class MhBayBracingBehavior extends MhBehavior {
- Removed: extend public bool topBracing(int bayIndex) : deprecated { return true; }
- Removed: extend public bool backBracing(int bayIndex) : deprecated { return true; }
- Old: extend public Graph cross2D(rect r) {
- New: extend public Graph cross2D(rect r, double z) {

public class MhRowAnimationEngineGfxBehavior extends MhGenericEngineGfxBehavior {
- Removed: extend public GMaterial3D entryMaterial3D(MhEngineEntry entry) : deprecated {
- Removed: extend public color entryColor(MhEngineEntry entry) : deprecated {

public class MhLevelArrangeFunction extends MhSystemEngineFunction {
- Removed: public Bool maintainLowestLevel : deprecated;
- Removed: extend public double standOnZ(MhEngineEntry entry) : deprecated {
- Removed: extend public MhPopulator populator(MhEngineEntry edit) : deprecated {
- Removed: extend public bool shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit, bool isLowestLevel) {
- New: extend public bool shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit) {

public class MhAisleUpdateWidthFunction extends MhSystemEngineFunction {
- Removed: extend public box localBoundIncludingChildren(MhEngineEntry entry, Transform t, MhEngine engine) {
- Removed: extend public box localBoundIncludingChildren(MhEngineEntry entry, Transform t, MhEngine engine, LayerSet ls) {
- New: extend public box localBoundIncludingChildren(MhEngineEntry entry, Transform t, MhEngine engine, LayerSet ls=null) {

public class MhRowSystemCollisionAdjustToFlue extends MhRowSystemCollisionSolution {
- Removed: extend public void alignYToColumns(MhEngineEntryBlock[] blocks, double columnY, bool up, int &lastIndex) : deprecated {
- Removed: extend public int findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, double columnY, bool up, int lastIndex=0) : deprecated {

public class MhLevelShape extends MhBoxSnapperShape {
- Removed: extend public void unstreamStoredSpec(ObjectFormatter formatter) : deprecated {

public class MhBayEditConfiguration extends MhStorageEditorConfiguration {
- Removed: extend public void overrideFramesMaterial() : deprecated {
- Removed: extend public void overrideFrameMaterial(Snapper snapper) : deprecated {

public class MhBayLevelEditorItem extends MhBayEditorItem {
- Removed: extend public MhClearanceBehavior bayEditorLevelClearanceBehavior(double newLevelClearance) : deprecated {
- Removed: extend public int clearanceSpecId(World w=null) : deprecated {

public class MhBayEditorLevelClearanceBehavior extends MhClearanceBehavior : unstreamable {
- Removed: public constructor(double levelClearanceZ) : deprecated {

public class MhSnapperSpreadVessel extends Vessel {
- Old: extend public bool showIntervalProps(Object currentSpread=this."spreadPattern")
- New: extend public bool showIntervalProps()

public class MhRunEngineEnv {
- Old: public constructor(bool cleanup=true, bool blockImport=false, bool blockExport=false, bool blockFinalize=true, bool removeFailedEntry=false, bool showProgressBar=false) {
- New: public constructor(Space space=null, bool cleanup=true, bool blockImport=false, bool blockExport=false, bool blockFinalize=true, bool removeFailedEntry=false, MhSnapper initiator=null, bool showProgressBar=false) {
}

public class MhRowLegendInfoBehavior extends MhBehavior : abstract {
- Removed: extend public MhGridColumnEnv[] columns(MhSnapper row) : abstract, deprecated { }
- Removed: extend public str->MhRowLegendInfo[] getRowInfos(MhSnapper row) : abstract, deprecated { }

public class MhRowLocationLegendBehavior extends MhRowLegendInfoBehavior {
- Removed: extend public str{} getUniqueUnitLoadsKeys(MhSnapper[] rows) : deprecated {

public class MhBayRowEngineBehavior extends MhEngineBehavior
- Removed: extend public void putAisleUpdateFunctions(MhEngine engine, MhSnapper snapper, bool top) {
- Removed: extend public void putAisleUpdateFunctions(MhEngine engine, MhSnapper snapper) {
- Removed: extend public void putAisleUpdateFunctions(MhEngine engine, MhSnapper snapper, MhSnapper aisleRow, MhSnapper topRow, MhSnapper downRow) {
- Old: extend public MhSnapper[] propagatingRows(MhSnapper snapper, MhSnapperChangedEnv env) 
- New: extend public MhSnapper{} propagatingRows(MhSnapper snapper, MhSnapperChangedEnv env)
- Old: extend public void collectPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper[] res)
- New: extend public void collectPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper{} res)
- Old: extend public void collectSelectionPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper[] res)
- New: extend public void collectSelectionPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper{} res)
- Old: extend public void appendForcedPropagations(MhSnapperChangedEnv env, str key, MhSnapper[] res)
- New: extend public void appendForcedPropagations(MhSnapperChangedEnv env, str key, MhSnapper{} res)
- Old: extend public void appendSnapperPropagations(MhSnapper s, MhSnapperChangedEnv env, str key, MhSnapper[] res)
- New: extend public void appendSnapperPropagations(MhSnapper s, MhSnapperChangedEnv env, str key, MhSnapper{} res)
- Old: extend public void appendPropagationRowChildren(MhSnapper row, MhSnapperChangedEnv env, str key, MhSnapper[] res)
- New: extend public void appendPropagationRowChildren(MhSnapper row, MhSnapperChangedEnv env, str key, MhSnapper{} res)
- Old: extend public void finalizePropagatingSnappers(MhSnapperChangedEnv env, str key, MhSnapper[] res)
- New: extend public void finalizePropagatingSnappers(MhSnapperChangedEnv env, str key, MhSnapper{} res)

public class MhRowSnapperSpawner extends MhStorageSpawner {
// This is replaced with normal `customEngineBehaviors` call. 
- Removed: extend public MhBehavior[] engineBehavior() {

public class MhInsertHeightBehavior extends MhBehavior {
- Removed: extend public SubSet heightDomain(MhSnapper toSnapper=null) {
- New: extend public SubSet heightDomain(Snapper owner, MhSnapper toSnapper=null) {

public class MhStorageConfiguration extends MhSystemConfiguration {
- Old: extend public MhConfiguratorPreviewSpace previewSpace()
- New: extend public MhConfiguratorPreviewSpace previewSpace(bool initIfNull=true)

public class MhInsertHeightBehavior extends MhBehavior {
- Removed: extend public double resolveZPos(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
- New: extend public double resolveZPos(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
- Removed: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
- New: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
- Removed: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) {
- New: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, double elev, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) {

public class MhLevelInsertHeightBehavior extends MhBehavior {
- Removed: extend public bool updateHeightDomains(MhSnapper owner, MhSnapper toSnapper, Object env=null) {
- Removed: extend public SubSet restrictedHeightDomain(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env) {
- Removed: extend public <SubSet, SubSet> freeSpacesDomains(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env=null) {
- Removed: extend public bool isConflicting(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitiveSet ownerPrims) {
- Removed: extend public void checkInsertHeightLocked(point& p, SubSet heightDomain) {
- Removed: extend public void checkFreeSpaceAboveLocked(point& p, SubSet aboveDomain, MhSnapper firstAbove, MhSnapper owner, MhSnapper toSnapper) {
- Removed: extend public void checkFreeSpaceBelowLocked(point& p, SubSet belowDomain, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper) {
- Removed: extend public <Double, Double> calculateFreeSpaceAboveAndBelow(MhSnapper owner, MhSnapper toSnapper, double insertH, Snapper specificAboveSnapper=null, Snapper specificBelowSnapper=null) {
- Removed: extend public box boundForCalculation(MhSnapper snapper, bool toSpace=false) {
- Removed: extend public symbol[] geoSymbolsForCalculation() {
- New: extend public void toggleLockProperties(bool lock, str except=null) {
- New: extend public double updateFreeSpacesProperties(MhSnapper owner, MhSnapper toSnapper, Object env) {
- New: extend public double updateElevationProperty(MhSnapper owner, MhSnapper toSnapper, Object env) {
- New: extend public LayerSet collisionLayerToCollide() {
- New: extend public LayerSet collisionLayerToIgnore() {

public class MhConfigManager : unstreamable {
- Removed: extend public void fixInconsistenciesIfNecessary() {
- Use: extend public void updateConfigsAfterRestoredByUndo(MhSnapper current, MhSnapper original) {

Classification evaluation functions renamed

Old: public bool isBack2(Object o) { return evalClassification(o, sBack); }
New: public bool isBack(Object o) { return evalClassification(o, sBack); }

Old: public bool isBack(Object o) { return evalClassification(o, sBackRow); }
New: public bool isBackRow(Object o) { return evalClassification(o, sBackRow); }

Important to note is that the isBack() function interface still exists but the logic has been updated as shown above, so it will not throw a compilation error. Ensure that you are calling the appropriate function.

getAllRowsRecursive changes

Removed the bool reverse=true argument from this function.

Old: public MhSnapper[] getAllRowsRecursive(MhSnapper snapper, bool top=false, bool reverse=true, Snapper{} visited=null) {
New: public MhSnapper[] getAllRowsRecursive(MhSnapper snapper, bool top=false, Snapper{} visited=null) {

mhCalculatedBayHeightForConstruction changes

Added a new argument bool forceConstruct=false argument to this function. Set it to true if you want to use construction collision primitives in this function.

Old: public double mhCalculatedBayHeightForConstruction(MhSystemConfigurationItem this, MhSnapper bay, int numLevels, bool loadOnFloor=true, bool loadWithinLimit=true) {
New: public double mhCalculatedBayHeightForConstruction(MhSystemConfigurationItem this, MhSnapper bay, int numLevels, bool loadOnFloor=true, bool loadWithinLimit=true, bool forceConstruct=false) {

MhDbgSpaceViewer changes

The class MhDbgSpaceViewer has been renamed to MhDebugSpaceViewerDialog . Additionally it has been moved from cm.abstract.materialHandling.storage.tools.editor to cm.abstract.materialHandling.debug.

MhSnapper changes

Replace all overrides and calls to localBound(symbol[] symbols) with shapeBound(symbol[] symbols=null).

Removed: extend public box localBound(symbol[] symbols) : deprecated {
Use: extend public box shapeBound(symbol[] symbols=null) {

Replace all overrides and calls to collisionPrimitive(Transform t, bool includeChildren, Object env=null) with collisionPrimitive(MhCollisionFetchEnv env).

Removed: extend public CollisionPrimitive collisionPrimitive(Transform t, bool includeChildren, Object env=null) : deprecated {
Use: extend public CollisionPrimitive collisionPrimitive(MhCollisionFetchEnv env) {

The deprecated method putEngineEntryDim(str key, double v) has been removed. We have previously replaced calls to this method with updateEngineEntry() instead.

Removed: extend public void putEngineEntryDim(str key, double v) : deprecated {

Replace all overrides and calls to getSnapperReplacementForPickupApply() and getSnapperReplacementForPickupApply(CoreObject candidate) with getSnapperReplacementForPickupApply(CoreObject candidate=null).

Removed: extend public MhSnapper getSnapperReplacementForPickupApply() : deprecated {
Removed: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate) : deprecated {
New: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate=null) {

New argument for invalidate engine.

Old: extend public void invalidateEngine()
New: extend public void invalidateEngine(Object env=null)

MhSnapperShape changes

Replace all overrides and calls to getSnapperReplacementForPickupApply() and getSnapperReplacementForPickupApply(CoreObject candidate) with getSnapperReplacementForPickupApply(CoreObject candidate=null).

Removed: extend public MhSnapper getSnapperReplacementForPickupApply() : deprecated {
Removed: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate) {
New: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate=null) {

MhBehavior changes

Replace all overrides and calls to allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative) with allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative, Animation anim).

Removed: extend public bool allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative) : deprecated {
Use: extend public bool allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative, Animation anim) {

MhRunEngineEnv changes

MhRunEngineEnv has two new arguments, initiator and space.

The initiator argument is used to keep track of what started the engine run to determine if an actual change is needed (eg: level height increasing the bay height should not populate new levels and which should only happen if the bay is the initiator).

The space argument is used to control what engine runs are executed. If space=null, triggering mhRunEngines() will run all collected engine runs, this is the current behavior. We have now added the ability to only run specific engine runs by passing in a space to MhRunEngineEnv. See More control over which engine runs are executed using space for more info.

Old: public constructor(bool cleanup=true, bool blockImport=false, bool blockExport=false, bool blockFinalize=true, bool removeFailedEntry=false, bool showProgressBar=false) {

New: public constructor(Space space=null, bool cleanup=true, bool blockImport=false, bool blockExport=false, bool blockFinalize=true, bool removeFailedEntry=false, MhSnapper initiator=null, bool showProgressBar=false) {

MhSystemConfiguration changes

Replace all overrides and calls to showPackageInfoMismatchDialog() with showPackageInfoMismatchDialog(symbol packageInfo).

Removed: extend public void showPackageInfoMismatchDialog() { }
Use: public void showPackageInfoMismatchDialog(symbol packageInfo) {}

MhApplyColorFrameVessel changes

Replace all overrides and calls to useStrictClassification() with useStrictClassification(MhSnapper c).

Removed: extend public bool useStrictClassification() : deprecated {
Use: extend public bool useStrictClassification(MhSnapper c) {

MhEngineSnapperEntry changes

The deprecated method zeroTransformSnapperEntry() has been removed as it is no longer needed for its original purpose which was to remove a roll angle from its transform. We now handle it differently by unrolling the entry's CollisionPrimitive. If you need to unroll CollisionPrimitive objects,, call the function mhUnrollCollisionPrim(CollisionPrimitive prim).

Removed: extend public MhEngineSnapperEntry zeroTransformSnapperEntry() : deprecated {

MhSnapperApplyAnimation changes

Replace all overrides and calls to snapperReplacement(MhSnapper pickedUp) with snapperReplacement(MhSnapper pickedUp, CoreObject candidate).

Removed: extend public MhSnapper snapperReplacement(MhSnapper pickedUp) : deprecated {
Use: extend public MhSnapper snapperReplacement(MhSnapper pickedUp, CoreObject candidate) {

MhBayBracingBehavior changes

Replace all overrides and calls to topBracing(int bayIndex) with topBracing(MhSnapper bay, int bayIndex).

Removed: extend public bool topBracing(int bayIndex) : deprecated { return true; }
Use: extend public bool topBracing(MhSnapper bay, int bayIndex) { return true; }

Replace all overrides and calls to backBracing(int bayIndex) with backBracing(MhSnapper bay, int bayIndex).

Removed: extend public bool backBracing(int bayIndex) : deprecated { return true; }
Use: extend public bool backBracing(MhSnapper bay, int bayIndex) { return true; }

Replace all overrides and calls to cross2D(rect r) with cross2D(rect r, double z).

Old: extend public Graph cross2D(rect r) {
New: extend public Graph cross2D(rect r, double z) {

MhRowAnimationEngineGfxBehavior changes

Replace all overrides and calls to entryMaterial3D(MhEngineEntry entry) with entryMaterial3D(MhEngineEntry entry, MhEngine engine).

Removed: extend public GMaterial3D entryMaterial3D(MhEngineEntry entry) : deprecated {
Use: extend public GMaterial3D entryMaterial3D(MhEngineEntry entry, MhEngine engine) {

Replace all overrides and calls to entryColor(MhEngineEntry entry) with entryColor(MhEngineEntry entry, MhEngine engine).

Removed: extend public color entryColor(MhEngineEntry entry) : deprecated {
Use: extend public color entryColor(MhEngineEntry entry, MhEngine engine) {

MhLevelArrangeFunction changes

The field beamOffsetZ (and its PropDef) has been removed as it is not in use. If you have overridden this class and need this field, please add it back in as well as the PropDef.

The value for beamOffsetZ is no longer being passed in as a function argument in MhBayEngineBehavior for the "levelArrange" function. You will also need to override this behavior to pass in the argument if beamOffsetZ is still needed by your function.

Old:
    /**
     * Gather function args.
     */
    public str->Object engineFunctionArgsG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="",
                                            MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
        ...
          case "levelArrange" : {
              ...
              return props { snapper=snapper,
                    holeZDomain=preprocessArgs.get(cMhHoleZDomainPK),
                    additionalPrim=preprocessArgs.get(cMhAdditionalPrimPK),
                    squeezeLevels=squeezeLevels,
                    maintainBayHeight=maintainBayHeight,
                    beamOffsetZ=beamOffsetZ(snapper) };
          ...


New:
    /**
     * Gather function args.
     */
    public str->Object engineFunctionArgsG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="",
                                            MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
        ...
          case "levelArrange" : {
              ...
              return props { snapper=snapper,
                    holeZDomain=preprocessArgs.get(cMhHoleZDomainPK),
                    additionalPrim=preprocessArgs.get(cMhAdditionalPrimPK),
                    squeezeLevels=squeezeLevels,
                    maintainBayHeight=maintainBayHeight};
          ...

Replace all overrides and calls to shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit, bool isLowestLevel) with shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit).

Removed: extend public bool shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit, bool isLowestLevel) {
New: extend public bool shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit) {

MhRowSystemCollisionAdjustToFlue changes

Replace all overrides and calls to alignYToColumns(MhEngineEntryBlock[] blocks, double columnY, bool up, int &lastIndex) with alignYToColumns(MhEngineEntryBlock[] blocks, MhColumnCollisionEnv columnEnv, bool up, int &lastIndex).

Removed: extend public void alignYToColumns(MhEngineEntryBlock[] blocks, double columnY, bool up, int &lastIndex) : deprecated {
Use: extend public void alignYToColumns(MhEngineEntryBlock[] blocks, MhColumnCollisionEnv columnEnv, bool up, int &lastIndex) {

Replace all overrides and calls to findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, double columnY, bool up, int lastIndex=0) with findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, MhColumnCollisionEnv columnEnv, bool up, int lastIndex=0).

Removed: extend public int findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, double columnY, bool up, int lastIndex=0) : deprecated {
Use: extend public int findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, MhColumnCollisionEnv columnEnv, bool up, int lastIndex=0) {

MhLevelShape changes

Replace all overrides and calls to unstreamStoredSpec(ObjectFormatter formatter) with mhUnstreamStoredSpec(MhSnapperShape shape, ObjectFormatter formatter).

Removed: extend public void unstreamStoredSpec(ObjectFormatter formatter) : deprecated {
Use: public void mhUnstreamStoredSpec(MhSnapperShape shape, ObjectFormatter formatter) {

MhBayLevelEditorItem changes

Replace all overrides and calls to bayEditorLevelClearanceBehavior(double newLevelClearance) with bayEditorLevelClearanceBehavior(double newLevelClearance, Box bottomPrim=null).

Removed: extend public MhClearanceBehavior bayEditorLevelClearanceBehavior(double newLevelClearance) : deprecated {
Use: extend public MhClearanceBehavior bayEditorLevelClearanceBehavior(double newLevelClearance, Box bottomPrim=null) {

MhBayEditorLevelClearanceBehavior changes

Replace all overrides and calls to constructor(double levelClearanceZ) with constructor(double levelClearanceZ, Box bottomPrim=null).

Removed: public constructor(double levelClearanceZ) : deprecated {
Use: public constructor(double levelClearanceZ, Box bottomPrim=null) {

MhRowLegendInfoBehavior changes

Replace all overrides and calls to columns(MhSnapper row) with columns(MhSnapper row, bool showDescription=false).

Removed: extend public MhGridColumnEnv[] columns(MhSnapper row) : abstract, deprecated { }
Use: extend public MhGridColumnEnv[] columns(MhSnapper row, bool showDescription=false) : abstract { }

Replace all overrides and calls to getRowInfos(MhSnapper row) with getRowInfos(MhSnapper row, bool showDescription=false).

Removed: extend public str->MhRowLegendInfo[] getRowInfos(MhSnapper row) : abstract, deprecated { }
Use: extend public str->MhRowLegendInfo[] getRowInfos(MhSnapper row, bool showDescription=false) : abstract { }

MhRowLocationLegendBehavior changes

Replace all overrides and calls to getUniqueUnitLoadsKeys(MhSnapper[] rows) with getUniqueUnitLoadsKeys(MhSnapper[] rows, bool showDescription=false).

Removed: extend public str{} getUniqueUnitLoadsKeys(MhSnapper[] rows) : deprecated {
Use: extend public str{} getUniqueUnitLoadsKeys(MhSnapper[] rows, bool showDescription=false) {

Moved classes from cm.abstract.materialHandling.engine

The following classes have been moved from cm.abstract.materialHandling.engine to cm.abstract.materialHandling:

public class MhConfigurationItemGroup { ... }
public class MhSystemConfigurationManager { ... }
public class MhConfigurationPullPropsVisitor extends PushPropsVisitor { ... }
public class MhConfigurationPushPropsVisitor extends PushPropsVisitor { ... }
public class MhPushPropsEnv extends PushPropsEnv { ... }
public class MhFlexibleTypeCheck extends FlexibleTypeCheck { ... }
public class MhSystemConfiguration extends CoreObject { ... }
public class MhSystemConfigurationContainer { ... }
public class MhSystemConfigurationItem extends CoreObject : abstract { ... }

MhBayRowEngineBehavior changes

Change collecting of propagate rows from seq to set for performance.

Old: extend public MhSnapper[] propagatingRows(MhSnapper snapper, MhSnapperChangedEnv env) 
New: extend public MhSnapper{} propagatingRows(MhSnapper snapper, MhSnapperChangedEnv env)
Old: extend public void collectPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper[] res)
New: extend public void collectPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper{} res)
Old: extend public void collectSelectionPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper[] res)
New: extend public void collectSelectionPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper{} res)
Old: extend public void appendForcedPropagations(MhSnapperChangedEnv env, str key, MhSnapper[] res)
New: extend public void appendForcedPropagations(MhSnapperChangedEnv env, str key, MhSnapper{} res)
Old: extend public void appendSnapperPropagations(MhSnapper s, MhSnapperChangedEnv env, str key, MhSnapper[] res)
New: extend public void appendSnapperPropagations(MhSnapper s, MhSnapperChangedEnv env, str key, MhSnapper{} res)
Old: extend public void appendPropagationRowChildren(MhSnapper row, MhSnapperChangedEnv env, str key, MhSnapper[] res)
New: extend public void appendPropagationRowChildren(MhSnapper row, MhSnapperChangedEnv env, str key, MhSnapper{} res)
Old: extend public void finalizePropagatingSnappers(MhSnapperChangedEnv env, str key, MhSnapper[] res)
New: extend public void finalizePropagatingSnappers(MhSnapperChangedEnv env, str key, MhSnapper{} res)

MhStorageConfiguration changes

When accessing the configuration preview space, give the option whether to initialize the space or not. Also spaces are now removed from world when closing the configurator.

Old: extend public MhConfiguratorPreviewSpace previewSpace()
New: extend public MhConfiguratorPreviewSpace previewSpace(bool initIfNull=true)

Bay collision alternative

Bay collision alternative class, MhBayCollisionAlternative has been renamed to make it more generic as it contains logic that is not specific only for bay.

Old: public class MhBayCollisionAlternative extends MhDoubleStepRangeCollisionAlternative { 
New: public class MhRowChildCollisionAlternative extends MhSubSetCollisionAlternative {

Collision alternative

Old: public class MhDoubleStepRangeCollisionAlternative extends MhCollisionAlternative {
New: public class MhSubSetCollisionAlternative extends MhCollisionAlternative {

MhInsertHeightBehavior changes

Replace all overrides and calls to resolveZPos(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) with resolveZPos(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) so that it will take elevation into account.

Removed: extend public double resolveZPos(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
New: extend public double resolveZPos(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {

Replace all overrides and calls to resolveZPosSolution(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) with resolveZPosSolution(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) so that it will take elevation into account.

Removed: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
New: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {

Replace all overrides and calls to resolveZPosSolution(MhSnapper owner, double z, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) with resolveZPosSolution(MhSnapper owner, double z, double elev, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) so that it will take elevation into account.

Removed: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) {
New: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, double elev, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) {

MhLevelInsertHeightBehavior changes

Some logic in this class, MhLevelInsertHeightBehavior, has been changed/rewritten and simplified in order to support beams with no hole pitch domain e.g DistanceRange, DoubleRange.

Removed: extend public bool updateHeightDomains(MhSnapper owner, MhSnapper toSnapper, Object env=null) {
Removed: extend public SubSet restrictedHeightDomain(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env) {
Removed: extend public <SubSet, SubSet> freeSpacesDomains(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env=null) {
Removed: extend public bool isConflicting(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitiveSet ownerPrims) {
Removed: extend public void checkInsertHeightLocked(point& p, SubSet heightDomain) {
Removed: extend public void checkFreeSpaceAboveLocked(point& p, SubSet aboveDomain, MhSnapper firstAbove, MhSnapper owner, MhSnapper toSnapper) {
Removed: extend public void checkFreeSpaceBelowLocked(point& p, SubSet belowDomain, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper) {
Removed: extend public <Double, Double> calculateFreeSpaceAboveAndBelow(MhSnapper owner, MhSnapper toSnapper, double insertH, Snapper specificAboveSnapper=null, Snapper specificBelowSnapper=null) {
Removed: extend public box boundForCalculation(MhSnapper snapper, bool toSpace=false) {
Removed: extend public symbol[] geoSymbolsForCalculation() {

New: extend public void toggleLockProperties(bool lock, str except=null) {
New: extend public double updateFreeSpacesProperties(MhSnapper owner, MhSnapper toSnapper, Object env) {
New: extend public double updateElevationProperty(MhSnapper owner, MhSnapper toSnapper, Object env) {
New: extend public LayerSet collisionLayerToCollide() {
New: extend public LayerSet collisionLayerToIgnore() {

MhSnapperSpreadVessel changes

Removed argument from show interval props since we can get the spreadPattern directly.

Old: extend public bool showIntervalProps(Object currentSpread=this."spreadPattern")
New: extend public bool showIntervalProps()

MhDoubleRowClassificationBehavior moved package

MhDoubleRowClassificationBehavior has been moved from cm.abstract.materialHandling.storage.racking.behavior to cm.abstract.materialHandling.storage.behavior so it is accessible to non-racking products.

Old engine removal

Old engine (G1) is now deprecated and removed.

MhEngine changes

Remove mhRegisterEngineFunction(MhEngine engine, CxFunction func, symbol pkg=null) and mhPutEngineNextPkgLookup(MhEngine engine, symbol pkg, symbol next) as they are meant for old engine.

Removed: public void mhRegisterEngineFunction(MhEngine engine, CxFunction func, symbol pkg=null) {
Removed: public void mhPutEngineNextPkgLookup(MhEngine engine, symbol pkg, symbol next) {

Remove functionPath() and setFunctionPath(symbol functionPath) as they are meant for old engine.

Removed: final public symbol functionPath() {
Removed: final public void setFunctionPath(symbol functionPath) {

MhEngineBehavior changes

Remove functionPath(MhSnapper snapper) method as it is no longer needed to override an engine function.

Removed: extend public symbol functionPath(MhSnapper snapper) { 

Remove useEngineFuncG2(MhSnapper snapper) method as it is no longer an option to use old engine.

Removed: extend public bool useEngineFuncG2(MhSnapper snapper) {

Remove putEngineRunFunctions(MhSnapper snapper, symbol event="", Object env=null) method as it is meant for old engine.

Removed: extend public void putEngineRunFunctions(MhSnapper snapper, symbol event="", Object env=null) {

As old engine has been removed, fetchEngineFunctionsRunG2, preprocessFuncArgsG2, engineFunctionArgsG2, and acceptFunctionRunG2 have been renamed accordingly. All overriding methods and calls have been replaced.

Old: extend public void fetchEngineFunctionsRunG2(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
Old: extend public MhPreprocessArgsEnv preprocessFuncArgsG2(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
Old: extend public str->Object engineFunctionArgsG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
Old: extend public bool acceptFunctionRunG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) {
New: extend public void fetchEngineFunctionsRun(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
New: extend public MhPreprocessArgsEnv preprocessFuncArgs(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
New: extend public str->Object engineFunctionArgs(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
New: extend public bool acceptFunctionRun(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) {

MhEngineFunctionLibrary changes

The fields overrideInfo and extFunctionLookupPkgs have been removed as it is no longer needed for the new engine. All calls to these fields have also been removed.

Removed: public MhEngineOverrideFunctionInfo overrideInfo
Removed: public symbol->symbol nextFunctionLookupPkgs

Remove register(CxFunction fun, symbol pkg), putNextPkgLookup(symbol path, symbol next), and optimizeFunctionsOrder(MhSystemConfiguration config) as it is no longer needed for the new engine.

Removed: extend public void register(CxFunction fun, symbol pkg) {
Removed: extend public void putNextPkgLookup(symbol path, symbol next) {
Removed: extend public void optimizeFunctionsOrder(MhSystemConfiguration config) {

Replace all overrides and calls to getFunction(str key, symbol path) with getFunction(str key).

Removed: final public CxFunction getFunction(str key, symbol path) {
New: final public CxFunction getFunction(str key) {

Remove deprecated methods getFunction(str key, symbol path, bool finalize).

Removed: final public CxFunction getFunction(str key, symbol path, bool finalize) : deprecated {

MhEngineOverrideFunctionInfo changes

This class has been removed as it is no longer needed for the new engine.

Removed: public class MhEngineOverrideFunctionInfo {

MhSystemConfiguration changes

Remove functionPath() as it is no longer needed for the new engine.

Removed: extend public symbol functionPath() {

MhAssortment changes

Replace all overrides and calls to engine() with engine(Space space).

Removed: extend public MhEngine engine() : deprecated {
Use: extend public MhEngine engine(Space space) {

Remove functionPath and useEngineFuncG2 fields as it is no longer needed and no longer an option to use old engine.

Removed: public symbol functionPath
Removed: public bool useEngineFuncG2 : stream=null

Remove useEngineFuncG2() as it is no longer an option to use old engine.

Removed: extend public bool useEngineFuncG2() {

MhEngineManager changes

Replace all references to engineRuns with engineRunList.

Removed: public MhEngine->MhEngineRun engineRuns : deprecated;
Use: public MhEngine->MhEngineRun[] engineRunList;

Remove useEngineFuncG2() as it is no longer an option to use old engine.

Removed: extend public bool useEngineFuncG2() {

Remove ensureConfiguration(MhEngine engine, str->Object args) as it is meant for old engine.

Removed: extend public void ensureConfiguration(MhEngine engine, str->Object args) {

MhStorageEngine changes

Remove mhStorageRegisterFunctions(CxFunction[] functions, symbol pkg=null) and mhStoragePutNextPkgLookup(symbol pkg, symbol next) as they are no longer needed.

Removed: public void mhStorageRegisterFunctions(CxFunction[] functions, symbol pkg=null) {
Removed: public void mhStoragePutNextPkgLookup(symbol pkg, symbol next) {

MhConfigManager changes

The functionality of fixInconsistenciesIfNecessary() has been moved to a new function updateConfigsAfterRestoredByUndo(MhSnapper current, MhSnapper original). The inconsistency is caused by the undo, so it makes more sense to be fixed right after the snapper is restored by undo.

- Removed: extend public void fixInconsistenciesIfNecessary() {
- Use: extend public void updateConfigsAfterRestoredByUndo(MhSnapper current, MhSnapper original) {

Runtime/Behavior Changes

MhFrameUpdateBayHeightFunction changes

As mentioned under Compile Time Changes, MhFrameUpdateBayHeightFunction has been renamed to MhFrameHeightChangeUpdateBayFunction. This was changed to more accurately reflect the logic of the class. Additionally, the function key associated with this function has already been changed:

Old: res << MhFrameUpdateBayHeightFunction("frameUpdateBayHeight");
New: res << MhFrameHeightChangeUpdateBayFunction("frameHeightChangeUpdateBay");

All calls of "frameUpdateBayHeight" have been updated to "frameHeightChangeUpdateBay" in the abstract, you will need to do the same as well in your extension.

MhBayEditorMeasurementsBehavior changes

The measurements() method has had some of its code moved out into seperate methods getBayHeightMeasurements() and getLevelHeightMeasurements().

    /**
     * Get bay height measurements.
     */
    extend public void getBayHeightMeasurements(<line, double, point>[] lines,
                                                MhSnapper owner, box b,
                                                double offset) {
        double lbh = owner.shapeBoundWithChildren(symbols=[sLevel, sUnitLoad]).h;
        double frameH = lbh;
        forChildren(snapper in owner.rootParent) if (snapper as MhSnapper) {
        
        // Frame Height
        lines << <line(b.p0, (b.p0.point2D, frameH)), offset, (0, 1, 0)>;
    }


    /**
     * Get level height measurements.
     */
    extend public void getLevelHeightMeasurements(<line, double, point>[] lines,
                                                  MhSnapper owner, box b,
                                                  double offset) {
        double last = 0;
        double lastZ = 0;
        for (MhSnapper l in owner.getSortedChildren(), index=i) {
            if (l.isLevel) {
                // Level height (between levels).
                double curr = l.toSpaceTransform.pos.z;
                lines << <line((b.p1.x, b.p0.y, last), (b.p1.x, b.p0.y, curr)), offset, (0, -1, 0)>;
                last = curr;

                // Level height - frame height.
                box lb = l.shapeBound([sLevel, sLevelFrame]);
                double z = curr - lb.h;
                lines << <line((b.p1.x, b.p1.y, lastZ), (b.p1.x, b.p1.y, z)), offset, point0>;
                lastZ = l.localBoundWithChildren.p1.z + curr;
            }
        }
    }

MhSpecificConfigurationBehavior changes

Removed specific configuration behaviors as default behaviors for the bay, frame, and level spawners.

Affected spawners:

  • MhBaySpawner
  • MhFrameSpawner
  • MhLevelSpawner
  • MhRackFrameSpawner
  • MhRackLevelSpawner

MhStorageConfiguration changes

The field preview has been moved down from MhRackingConfiguration in the cm.abstract.materialHandling.storage.racking package into MhStorageConfiguration in the cm.abstract.materialHandling.storage package.

public class MhStorageConfiguration extends MhSystemConfiguration {

    /**
     * Preview
     */
    public MhStorageConfigurationPreview preview : copy=null, stream=null;
}

You do not need to add any load code as this field is not streamed.

This class also now generates and returns a preview by default. If you do not wish to see a preview in your pre configurator, you will have to override the configurationPreview() method.

Old:
    extend public MhStorageConfigurationPreview configurationPreview() { return null; }


New:
    extend public MhStorageConfigurationPreview configurationPreview() {
        if (!preview) preview = MhStorageConfigurationPreview();
        return preview;
    }

MhEngineManager changes

New method updateSystemsAfterExport added to engine manager that runs after export instead of after the initial export. alignAllSnapped of the rows is now done in updateSystemsAfterExport instead of updateSystemsAfterInitialExport.

New: extend public void updateSystemsAfterExport(MhSystemEngineEnvironment env, MhSystemCollection[] systems,
                                                 Snapper{} snappers, MhEngine engine)

More control over which engine runs are executed using space

Currently when calling mhRunEngines(), all collected engine runs will be ran. We have introduced the ability to only run specific engine runs by passing in a space to MhRunEngineEnv. If space has been passed into the engine run env, when running engines, we will not execute any engine runs that do not match the engine related to the given space.

public class MhEngineManager extends CoreObject {

    /**
     * Run all engines.
     */
    extend public void runEngines(MhRunEngineEnv runEnv=null) {
        ...
        Space space = runEnv.space;
        for (e, list in engineRunList) {
            ...
            if (space and e != mhEngine(space, createIfNone=false)) continue;
            ...
        }
        ...
    }
}

Here are the changes we made to now use space when running engines:

  • Pre configurator previews now only run engine runs related to the preview space when populating preview snappers.
public class MhStorageConfigurationPreview extends PropObj {

    /**
     * Populate the preview snappers.
     */
    extend public void populatePreviewSnappers(MhStorageConfiguration config,
                                               MhStorageConfigurationItem item=null) {
        ...
        mhRunEngines(MhRunEngineEnv(space=previewSpace, blockFinalize=false, blockExport=true));
        ...
    }


    /**
     * Spawn preview snappers.
     */
    extend public void spawnPreviewSnappers(MhStorageConfiguration config) {
        ...
        mhRunEngines(MhRunEngineEnv(space=previewSpace, blockExport=false));
    }
  • MhSnapper validate event for sRunEngines will now only run engine runs for the snapper's space.
public class MhSnapper extends Snapper {
    /**
     * Validate 'k' (change to set).
     */
    public void validate(symbol k, Object env=null) {
        ...
        switch (k) {
          case sRunEngines: {
              ...
              mhRunEngines(MhRunEngineEnv(space=space, blockFinalize=true, initiator=initiator));
              ...
          }
        ...
    }
  • The mhRunEngines() call at every #endUndoStep event viewed by MhEngineManagerEventViewer has been changed to first collect all spaces related to the undo step and then call mhRunEngines() for each collected space.
public class MhEngineManagerEventViewer extends EventViewer {

Old:
    /**
     * Event being fired.
     */
    public bool event(symbol event, Object z, str->Object args) {
        if (event == #endUndoStep) {
            if (?UndoStep step = z) {
                ...
                mhRunEngines(MhRunEngineEnv(blockFinalize=false, blockExport=true));
            }
        }
        ...
    }


New:
    /**
     * Event being fired.
     */
    public bool event(symbol event, Object z, str->Object args) {
        if (event == #endUndoStep) {
            if (?UndoStep step = z) {
                Space{} spaces(4);
                for (MhSnapper s in step.referred) {
                    if (!s.isAlive) continue;
                    spaces << s.space;
                    ...
                    }
                }

                for (s in spaces) mhRunEngines(MhRunEngineEnv(space=s, blockFinalize=false, blockExport=true));
            }
        }
        ...
    }
}

Miscellaneous

Constant property keys

There has been an effort to replace existing str literals in the abstract used for property keys with constants. This makes the property keys easier to maintain and inspect. If you are using any of these literals in your extensions, you may replace them with the corresponding constants.

/**
 * Prop keys.
 */
public const str cMhLoadOnFloorPK = "loadOnFloor";
public const str cMhNoOfLevelsPK = "noOfLevels";
public const str cMhBayWidthPK = "bayWidth";
public const str cMhBayDepthPK = "bayDepth";
public const str cMhBayHeightPK = "bayHeight";
public const str cMhAisleOverhangPK = "aisleOverhang";
public const str cMhRearOverhangPK = "rearOverhang";
public const str cMhAddFloorLevelPK = "addFloorLevel";
public const str cMhFrameWidthPK = "frameWidth";
public const str cMhFrameDepthPK = "frameDepth";
public const str cMhFrameHeightPK = "frameHeight";
public const str cMhUprightDepthPK = "uprightDepth";
public const str cMhFootWidthPK = "footWidth";
public const str cMhFootDepthPK = "footDepth";
public const str cMhFootHeightPK = "footHeight";
public const str cMhEditedPK = "edited";
public const str cMhBottomStorageLevelPK = "bottomStorageLevel";
public const str cMhHolePitchPK = "holePitch";
public const str cMhHoleStartZPK = "holeStartZ";
public const str cMhLevelEntryPK = "levelEntry";
public const str cMhLoadEntriesPK = "loadEntries";
public const str cMhHoleZDomainPK = "holeZDomain";
public const str cMhNumBaysPK = "numBays";
public const str cMhBeamHeightPK = "beamHeight";
public const str cMhLevelClearanceZPK = "levelClearanceZ";
public const str cMhLevelElevationPK = "levelElevation";
public const str cMhLevelPK = "level";
public const str cMhUprightPK = "upright";
public const str cMhClearanceSpecPK = "clearanceSpec";
public const str cMhClearanceSpecIdPK = "clearanceSpecId";
public const str cMhRowLayoutClassPK = "rowLayoutClass";
public const str cMhRowAnglePK = "a";
public const str cMhRowAlignPK = "rowAlign";
public const str cMhPredefinedBayPK = "predefinedBay";
public const str cMhBayCountPK = "bayCount";
public const str cMhFrameCountPK = "frameCount";
public const str cMhAisleWidthPK = "aisleWidth";
public const str cMhCrossAisleDistPK = "crossAisleDist";
public const str cMhDownAisleDistPK = "downAisleDist";
public const str cMhAisleCountPK = "aisleCount";
public const str cMhOffsetFrontPK = "offsetFront";
public const str cMhOffsetBackPK = "offsetBack";
public const str cMhOffsetLeftPK = "offsetLeft";
public const str cMhOffsetRightPK = "offsetRight";
public const str cMhClosestRowPK = "closestRow";
public const str cMhTryConnectToOtherRowPK = "tryConnectToOtherRow";
public const str cMhPopulateOffsetPK = "populateOffset";
public const str cMhCollisionSolutionPK = "collisionSolution";
public const str cMhAdditionalPrimPK = "additionalPrim";
public const str cMhReversePK = "reverse";
public const str cMhBlockSpreadPK = "blockSpread";
public const str cMhBlockPopulateMorePK = "blockPopulateMore";
public const str cMhReOptimizePK = "reOptimize";
public const str cMhUnitLoadPK = "unitLoad";
public const str cMhClearancePK = "clearance";
public const str cMhStretchDirPK = "stretchDir";
public const str cMhUnitLoadKeyPK = "unitLoadKey";
public const str cMhNoOfUnitLoadsPK = "noOfUnitLoads";
public const str cMhNumAislesPK = "numAisles";
public const str cMhFootBoltCountPK = "footBoltCount";
public const str cMhBeamOffsetZPK = "beamOffsetZ";
public const str cMhLoadWithinLimitPK = "loadWithinLimit";
public const str cMhAutoULPopulatePK = "autoULPopulate";
public const str cMhRevertAutoULPopulatePK = "revertAutoULPopulate";
public const str cMhLevelLimitZPK = "levelLimitZ";
public const str cMhConfigKeyPK = "configKey";
public const str cMhLimitZPK = "limitZ";
public const str cMhFrameSnappersPK = "frameSnappers";
public const str cMhSnapperPK = "snapper";
public const str cMhHighestLevelZPK = "highestLevelZ";
public const str cMhSqueezeLevelsPK = "squeezeLevels";
public const str cMhArrangedByOtherBayPK = "arrangedByOtherBay";
public const str cMhMaintainBayHeightPK = "maintainBayHeight";
public const str cMhLevelOffsetZPK = "levelOffsetZ";
public const str cMhFlueDepthPK = "flueDepth";
public const str cMhFlueLoadToLoadPK = "flueLoadToLoad";
public const str cMhAisleLoadToLoadPK = "aisleLoadToLoad";
public const str cMhPopulateRowSpacersPK = "populateRowSpacers";
public const str cMhRowSpacerOffsetZPK = "rowSpacerOffsetZ";
public const str cMhFrameSpacerOffsetZPK = "frameSpacerOffsetZ";
public const str cMhRowSpacerThicknessPK = "rowSpacerThickness";
public const str cMhFrameSpacerThicknessPK = "frameSpacerThickness";
public const str cMhIsSiloPK = "isSilo";
public const str cMhBayEditorLevelPK = "bayEditorlevel";
public const str cMhUpPK = "up";
public const str cMhP0PK = "p0";