Compile Time Changes

ElevationG2

The elevationG2 package has been moved from cm.abstract.materialHandling.tools.elevationG2 to cm.abstract.tools.elevationG2. As such, the Mh prefix has been dropped and classes, functions, and constants previously using this prefix have been renamed. In general, "mh" has been dropped from class names with a "G2" added at the end. The new prefix used in the package is "elev". For functions, globals, and constants, only "mh" was dropped with "elev" as the new prefix. If you were previously using classes or functions from cm.abstract.materialHandling.tools.elevationG2 and are getting a lot of undefined errors in your extension, please rename them to follow the new naming convention.

Examples (Not the full list):

    // Classes
    Old: public class MhElevEnv
    New: public class ElevEnvG2

    Old: public class MhElevAutoSnapperEnv
    New: public class ElevAutoSnapperEnvG2

    Old: public class MhElevArrow
    New: public class ElevArrowG2

    Old: public class MhElevArrowSnap
    New: public class ElevArrowSnapG2

    Old: public class MhElevContentEditor
    New: public class ElevContentEditorG2

    Old: public class MhElevContentSnapper
    New: public class ElevContentSnapperG2

    Old: public class MhElevContentSnapperEnv
    New: public class ElevContentSnapperEnvG2

    Old: public class MhElevDialog
    New: public class ElevDialogG2

    Old: public class MhElevConnectType
    New: public class ElevConnectTypeG2

    Old: public class MhElevTextSnapper
    New: public class ElevTextSnapperG2

    Old: public class MhElevSpace
    New: public class ElevSpaceG2

    Old: public class MhGElevArrow
    New: public class GElevArrowG2

    Old: public class MhElevView2D
    New: public class ElevView2DG2

    Old: public class MhElevArrowInsertAnimationG2
    New: public class ElevArrowInsertAnimationG2

    Old: public class MhElevAutoDimEnv
    New: public class ElevAutoDimEnvG2

    Old: public class MhElevAutoTextEnv
    New: public class ElevAutoTextEnvG2

    // Constants
    Old: public const str mhElevTextTypeKey
    New: public const str elevTextTypeKey

    Old: public const str mhElevDimTypeKey
    New: public const str elevDimTypeKey

    // Globals
    Old: public ConnectRule mhElevConnectRule;
    New: public ConnectRule elevConnectRule;

    // Functions
    Old: public Graph mhElevGraphFrom3D(Primitive3D scene, bool filterBelow0, bool mergeMeshes=false,
                                        RangeF sliceZ=null, LineType lt=null, Color fillColor=null,
                                        function(ATriMeshF[] meshes) cleanupFk=null)
    New: public Graph elevGraphFrom3D(Primitive3D scene, bool filterBelow0, bool mergeMeshes=false,
                                      RangeF sliceZ=null, LineType lt=null, Color fillColor=null,
                                      function(ATriMeshF[] meshes) cleanupFk=null)

cm.abstract.materialHandling

   // MhUndoOp
   Old: public constructor(Space space, SnapperRef xparent, Snapper xchild)
   New: public constructor(Space space, Snapper xparent, Snapper xchild)

   // MhConfigRef
   Old: public str customName;
   New: public bool isCustom;

   // MhCollisionAlternative
   Old: extend public void appendCollisionPrimitives(CollisionResolver resolver, Snapper z)
   New: extend public void appendCollisionPrimitives(CollisionResolver resolver, Snapper z, Snapper{} visited=null)

cm.abstract.materialHandling.data

   // MhCatalogAccess
   Old: extend public void putData(PropObj owner, Object data, str dataKey)
   New: extend public void putData(MhSnapper owner, Object data, str dataKey)

   Old: extend public Object get(PropObj owner, str valueKey, str dataKey)
   New: extend public Object get(MhSnapper owner, str valueKey, str dataKey)

   Old: extend public void put(PropObj owner, str valueKey, Object option, str dataKey)
   New: extend public void put(MhSnapper owner, str valueKey, Object option, str dataKey)

   Old: extend public double getDimension(PropObj owner, str dimensionKey, str dataKey)
   New: extend public double getDimension(MhSnapper owner, str dimensionKey, str dataKey)

   Old: extend public void putDimension(PropObj owner, str dimensionKey, double value, str dataKey)
   New: extend public void putDimension(MhSnapper owner, str dimensionKey, double value, str dataKey)

   Old: extend public box getBox(PropObj owner, point p0=point0, str strW="w", str strD="d", str strH="h", str dataKey="default")
   New: extend public box dataBound(MhSnapper owner, str dataKey, point p0=point0, str strW="w", str strD="d", str strH="h")

   Old: extend public SubSet getDomain(PropObj owner, str valueKey, str dataKey)
   New: extend public SubSet getDomain(MhSnapper owner, str valueKey, str dataKey)

   Old: extend public str styleNr(PropObj owner, str dataKey)
   New: extend public str styleNr(MhSnapper owner, str dataKey)

   Old: extend public str description(PropObj owner, str key, str dataKey)
   New: extend public str description(MhSnapper owner, str key, str dataKey)

   Old: extend public void ensureSettings(PropObj owner)
   New: extend public void ensureSettings(MhSnapper owner)

   Old: extend public PartsEnv parts(MhSnapper owner)
   New: extend public void appendParts(MhSnapper owner, str dataKey, PartsEnv env)

   Removed: extend public SymNode buildSym(PropObj owner, str dataKey="default", Object env=null)
   Removed: extend public Transform symTransform(PropObj owner, str dataKey="default", Object env=null)
   Removed: extend public void afterBuildSym(PropObj owner, str dataKey="default")
   Removed: extend public void invalidateSym(PropObj owner, str dataKey="default")

cm.abstract.materialHandling.storage

   Old: public class BraceInfo
   New: public class MhBraceInfo

   // MhStorageConfigurationItem
   Old: extend public bool requiresPreviewRebuild(str key, Object value, Object previous)
   New: extend public bool requiresPreviewRebuild(str key, Object value, Object previous, Object propOwner)

   // unitLoadFunctions.cm
   Old: public UnitLoad findEqualUnitLoad(UnitLoad unitLoad)
   New: public UnitLoad findEqualUnitLoad(UnitLoad unitLoad, World w=null)

   // MhRowEntryLayout
   Old: public MhEngineConstructionEntry[] rowEntryPattern;
   New: public MhEngineEntry[] rowEntryPattern;

   Old: public MhEngineConstructionEntry startEntry;
   New: public MhEngineEntry startEntry;

   Old: public MhEngineConstructionEntry endEntry;
   New: public MhEngineEntry endEntry;

   Old: public constructor(MhEngineConstructionEntry[] rowEntryPattern,
                           MhEngineConstructionEntry centerEntry=null,
                           MhEngineConstructionEntry aisleEntry=null,
                           MhEngineConstructionEntry startEntry=null,
                           MhEngineConstructionEntry endEntry=null)
   New: public constructor(MhEngineEntry[] rowEntryPattern,
                           MhEngineConstructionEntry centerEntry=null,
                           MhEngineConstructionEntry aisleEntry=null,
                           MhEngineEntry startEntry=null,
                           MhEngineEntry endEntry=null)

   // MhRowEntryLayoutPopulator
   Old: extend public MhEngineConstructionEntry[] rowEntryPattern()
   New: extend public MhEngineEntry[] rowEntryPattern()

   Old: extend public MhEngineConstructionEntry startEntry()
   New: extend public MhEngineEntry startEntry()

   Old: extend public MhEngineConstructionEntry endEntry()
   New: extend public MhEngineEntry endEntry()

cm.abstract.materialHandling.storage.behavior

Changes to double deep behaviors

Double deep offset behavior has been removed. The bay shape will now account for the offset via the bottomStorage collision primitive.

    Removed: public class MhDoubleDeepBackOffsetBehavior
    Removed: public mhLazyGlobal MhBehavior mhDoubleDeepBackOffsetBehavior

Double deep classification behavior has been removed. This behavior was previously needed because it was possible to disconnect one or more rows in a group and the behavior was used to keep track of the classification. It is no longer possible to do this disconnect so this behavior is no longer needed. The back classification is added during insert.

    Removed: public class MhDoubleDeepBackClassificationBehavior
    Removed: public mhLazyGlobal MhBehavior mhDoubleDeepBackClassificationBehavior

Changes to after export behaviors

Linking has been pushed to the end of an engine run for the sake of performance. However, certain behaviors such as frameValidCheck relies on linking to be correct. This behavior was previously run during after export but now that is too early. Because of this, MhAfterEngineExportBehavior has been split into two different behaviors: MhAfterEngineInitialExportBehavior and MhAfterEngineFinalizeRunBehavior.

If you were previously extendng from MhAfterEngineExportBehavior, by default, you should now use MhAfterEngineInitialExportBehavior. MhAfterEngineFinalizeRunBehavior should be used if linking is required for your behavior or if MhAfterEngineInitialExportBehavior is too early.

    Old: public class MhAfterEngineExportBehavior
    New: public class MhAfterEngineInitialExportBehavior
    New: public class MhAfterEngineFinalizeRunBehavior

    Old: public const symbol sAfterSystemExport
    New: public const symbol sAfterInitialExport
    New: public const symbol sAfterFinalizeRun

    Old: public class MhRowAfterEngineExportBehavior
    New: public class MhRowAfterEngineInitialExportBehavior

    // Methods previously used in MhAfterEngineExportBehavior. Please replace them with the relevant methods below.
    Old: extend public void afterExport(MhSystemCollection system)
    Old: extend public void afterExport(MhSnapper parent, MhSnapper owner)

    // MhAfterEngineInitialExportBehavior
    New: extend public void afterInitialExport(MhSystemCollection system)
    New: extend public void afterInitialExport(MhSnapper parent, MhSnapper owner)

    // MhAfterEngineFinalizeRunBehavior
    New: extend public void afterEngineFinalizeRun(MhSystemCollection system, Snapper{} exported) {}
    New: extend public void afterEngineFinalizeRun(MhSnapper parent, MhSnapper owner)

    // Old after export behaviors and their replacements.
    Old: public class MhRowAfterEngineExportBehavior
    New: public class MhRowAfterEngineInitialExportBehavior
    Old: public mhLazyGlobal MhBehavior mhRowAfterEngineExportBehavior
    New: public mhLazyGlobal MhBehavior mhRowAfterEngineInitialExportBehavior

    Old: public class MhRackingFrameAfterEngineExportBehavior
    New: public class MhRackingFrameAfterEngineFinalizeRunBehavior
    Old: public mhLazyGlobal MhBehavior mhRackingFrameAfterEngineExportBehavior
    New: public mhLazyGlobal MhBehavior mhRackingFrameAfterEngineFinalizeRunBehavior

    Old: public class MhAdjustChildAccessoriesAfterExportBehavior
    New: public class MhAdjustChildAccessoriesAfterInitialExportBehavior
    Old: public mhLazyGlobal MhBehavior mhAdjustChildAccessoriesAfterExportBehavior
    New: public mhLazyGlobal MhBehavior mhAdjustChildAccessoriesAfterInitialExportBehavior

MhLevelEngineBehavior

The aisleOverhang method is no longer needed. Overhangs are now calculated using engine entries.

    Removed: extend public Double aisleOverhang(MhSnapper snapper, MhSnapperChangedEnv env)

MhLevelPopulateBehavior

    Old: extend public double maxZ(MhEngineEntry levelParent, MhEngine engine, CollisionPrimitive levelPrim)
    New: extend public double maxZ(MhSnapper snapper)

MhBayFrontArrow3DBehavior replaced with vessel

The MhBayFrontArrow3DBehavior used in the bay editor has been removed in favor of using vessels instead.

    Removed: public class MhBayFrontArrow3DBehavior
    New: public class MhBayEditArrowVessel

MhClearanceBehavior

A new appendCollisionPrimitives method has been added to MhClearanceBehavior and the old one has been deprecated. If you encounter issues with your unit loads missing clearances, then this is most likely the cause. Please update your code to use the new version.

    // MhClearanceBehavior
    DEPRECATED: extend public void appendCollisionPrimitives(MhSnapperShape shape, Transform t,
                                                             double elevation, CollisionPrimitive{} geos,
                                                             LayerSet classification,
                                                             Int clearanceSpecId=null,
                                                             Object env=null) : deprecated {}
    Added: extend public void appendCollisionPrimitives(MhSnapperShape shape, Transform t,
                                                        CollisionPrimitive{} geos,
                                                        MhClearanceCollisionPrimEnv clearanceEnv,
                                                        Object env=null)

cm.abstract.materialHandling.storage.engine

Removed oldULBox field

The oldULBox fields have been removed from certain functions. This was previously used to help calculate the overhang and positions for unit load population. However, the old unit load box didn't contain enough information. Engine entries are now being used to record the old unit load dimensions so these fields are not needed anymore.

    // MhAisleUpdateWidthFunction
    Removed: public Box oldULBox;

    // MhAlignLoadsToAisleFunction
    Removed: public Box oldULBox;

MhSystemCollisionEntry

MhSystemCollisionEntry has been replaced with MhEngineSystemCollisionEntry. MhBoxCollisionEntry has been removed as it is no longer used.

    Removed: public class MhSystemCollisionEntry
    Removed: public class MhBoxCollisionEntry
    Added: public class MhEngineSystemCollisionEntry

    // MhSystemEngineEnvironment
    Old: public MhSystemCollisionEntry{} collisionEntries;
    New: public MhEngineSystemCollisionEntry{} collisionEntries;

    Old: extend public MhSystemCollisionEntry operator<<(MhSystemCollisionEntry be)
    New: extend public MhEngineSystemCollisionEntry operator<<(MhEngineSystemCollisionEntry be)

MhLevelPopulateFunction

    Old: extend public MhEngineConstructionEntry createLevel(MhEngineEntry[] children, MhEngineSnapperEntry newEntry, double z)
    New: extend public MhEngineEntry createLevel(MhEngineSnapperEntry lastEntry, double z)

Step Populator Changes

MhFixedStepPrimPopulator has been removed because it was too unit load specific and we want to avoid having to use a specific populator in one case, and another specific populator in another case. You should instead use MhStepperPopulator with MhPrimPopulatorStepper as the stepper. This way, we have a generic populator that covers most cases. A useFixedStep field and argument in the constructor has been added to handle the case of MhFixedStepPrimPopulator. A limitingLayer has also been added to the constructors to give more control. The limiting layer is to have 1 prim on the start and 1 (optional) prim at the end of the populateBox, so when you start the first step, you are actually resolving against the start prim, and last step against the end.

MhUnitLoadStepPrimPopulator and MhUnitLoadFixedStepPrimPopulator2 have also been deprecated.

    Removed: public class MhFixedStepPrimPopulator
    Deprecated: public class MhUnitLoadStepPrimPopulator extends MhPopulator : deprecated
    Deprecated: public class MhUnitLoadFixedStepPrimPopulator2 extends MhPopulator : deprecated

    // MhPrimPopulatorStepper
    /**
     * Use fixed step.
     * Use this if you always have the same step distance.
     * Currently used for constructional functions, when all entries are same size.
     * Don't use this if you want each step to check against additional prim.
     */
    Added: public bool useFixedStep;

    /**
     * Fixed step point.
     * Only used if useFixedStep is true.
     */
    Added: private Point _fixedStepPoint;


    Added: public constructor(CollisionPrimitive startPrim, CollisionPrimitive endPrim=null,
                              CollisionPrimitive additionalPrim=null, bool useFixedStep=false)


    Added: public constructor(box toPopulateBox, Layer limitingLayer, vector v,
                              CollisionPrimitive additionalPrim=null, bool useFixedStep=false)

cm.abstract.materialHandling.storage.shape

The updateFlueGap method has been removed from mhLevelShape. Please use the updateFlueGap method in MhLoadToLoadDistanceBehavior instead.

Removed: extend public void updateFlueGap(MhClearanceSpec oldSpec, MhClearanceSpec newSpec)

Other changes

    // MhSiloShape
    Old: extend public void buildStructure(MhSnapper[] rows)
    New: extend public void buildStructure(MhSnapper[] rows, MhEngine engine=null)

    Old: extend public void calculateStructurePositions(MhSnapper[] rows)
    New: extend public void calculateStructurePositions(MhSnapper[] rows, MhEngine engine=null)

cm.abstract.materialHandling.storage.racking.behavior

   // MhRackingBayElevAutoSnapperEnvBehavior
   Old: extend public void appendAutoRightSideDims(MhSnapper bay, str key, point floorP0,
                           double dim, UserTextStyle ts, UserDimensionStyle ds,
                           MhElevAutoSnapperEnv[] res)
   New: extend public void appendAutoRightSideDims(MhSnapper bay, str key, ElevArrowG2 arrow, point floorP0,
                           double dim, UserTextStyle ts,
                           UserDimensionStyle ds, ElevAutoSnapperEnvG2[] res)

   Old: extend public void appendAutoElevYDims(str key, range[] rs, point start, double dim,
                           UserTextStyle ts, UserDimensionStyle ds, MhElevAutoSnapperEnv[] res)
   New: extend public void appendAutoElevYDims(str key, MhElevArrow arrow, range[] rs, point start, double dim,
                           UserTextStyle ts, UserDimensionStyle ds, MhElevAutoSnapperEnv[] res)

   // MhBracingBehavior
   Old: extend public double bracingH(MhSnapper owner)
   New: extend public double bracingH(MhSnapper owner, MhBraceInfo brace)

   Old: extend public double braceLength(MhSnapper owner, box b)
   New: extend public double braceLength(MhSnapper owner, box b, MhBraceInfo brace)

   Old: extend public line generateLine(MhSnapper owner, line2D l, box b)
   New: extend public line generateLine(MhSnapper owner, MhBraceInfo brace, line2D l, box b)

   Old: extend public line[] braceLines(CoreObject owner)
   New: extend public <MhBraceInfo[], line[]> braceLines(CoreObject owner)

   Old: extend public SymNode braceSym(line l, CoreObject owner)
   New: extend public SymNode braceSym(MhBraceInfo brace, line l, CoreObject owner)

   Old: extend public Primitive3D bar3D(MhSnapper owner, FetchEnv3D env, line ln)
   New: extend public Primitive3D bar3D(MhSnapper owner, FetchEnv3D env, MhBraceInfo br, line ln)

cm.abstract.materialHandling.storage.tools.editor

   // MhStorageEditorConfiguration
   Old: extend public bool appendNewSnappers()
   New: extend public Snapper{} generateDefaultSnappers(MhStorageConfiguration config)

   // MhStorageEditorDialog
   Old: extend public void updateContainerViews()
   New: extend public void updateContainerViews(bool zoom=false)

cm.abstract.materialHandling.storage.tools.editor.bay

Bay editor package has been moved to cm.abstract.materialHandling.storage.tools.editor.bay. If you see complaints about MhBayEditConfiguration or similar being undefined, make sure to include the new package in your package.cm.

Runtime/Behavior Changes

Aisle spacer changes

The aisleSpacerPopulate function calls have been moved to materialHandling/storage/racking/ package since MhSpacerPopulateFunction is defined there. This also means we now have new intermediary classes. The aisleSpacerPopulate calls have been moved from the parents to these new classes.

    New: public class MhRackFlueGapRowEngineBehavior extends MhFlueGapRowEngineBehavior
    New: public class MhRackAisleRowEngineBehavior extends MhAisleRowEngineBehavior
    New; public class MhRackBayRowStretchEngineBehavior extends MhBayRowStretchEngineBehavior
    New: public class MhRackBayRowEngineBehavior extends MhBayRowEngineBehavior

Row child selection behavior

MhRowChildSelectionBehavior has been added to several spawners in the abstract level such as in MhRackFrameSpawner and MhFrameSpawner. If you have added your own selection behavior to your spawner and are getting the message below, then this is most likely the cause.

   Trying to have 2 behaviors with the same key: selection

This error can cause your snappers to not be exported. To resolve this, you could either remove your own selection behavior if MhRowChildSelectionBehavior handles your case for you, or you could exclude mhRowChildSelectionBehavior from your spawner's customOtherBehaviors and keep your own selection behavior or even extend from MhRowChildSelectionBehavior.

Removed "clearanceSpecId" prop from Config Item

The clearanceSpecId prop has been removed from MhClearanceCompartmentConfigurationItem. You can get the clearance spec using the existing "clearanceSpec" prop. Any code trying to get the clearanceSpecId from the config should be updated to get the clearanceSpec instead.

   // Examples:
   Old: currentConfig.clearanceSpecId();
   New: currentConfig.clearanceSpec();

   Old: config.getValue("clearanceSpecId");
   New: config.getValue("clearanceSpec");