A new COMPartProxy
class has been added as CustomerOwnMaterial
s are being updated to include part information and show in Calculations.
This MaterialPartProxy
ties specifically to CustomerOwnMaterial
s.
Class Signature: public class COMPartProxy extends CachedMaterialPartProxy
CustomerOwnMaterial
s are being updated in 15.0 to allow users to store part information for them. To account for this, new fields and UI
features were added to the COMaterialDialog
for the user to enter this information. The MaterialPartProxy
stores the information entered in the dialog
for the CustomerOwnMaterial
.
More documentation about the utilization of this info for parts can be found in the migration notes for COMPart
in cm.abstract.material
and MaterialPartProxy
in cm.core.material
.
A new COMPart
class has been added as CustomerOwnMaterial
s are being updated to include part information and show in Calculations.
public class COMPart extends ProdPart
As CustomerOwnMaterial
s are being updated to also store part information, COMPartProxy
was introduced
to store this information (code, description, length unit, etc.) on the material.
Changes have been made to the circle menu to facilitate subclassing it.
The responsibility of caching a dwg graphs bound has been moved from class DwgBspSplitEnv
to class DwgBspEntry
, so we can utilize the caching in places other than when we're performing a bsp split.
To allow PartInfoTree
s to hold any type of PartColumn
, the return type of columns()
has changed from PartInfoColumn[]
to PartColumn[]
.
A new function buildColumns
was also added. It is used by the Calculations dialog to build the columns of a PartInfoTree
.
BlockSpace
adjustments for Part
s were not previously accounted for in the Calculations dialog.
To account for these adjustments, changes were made in Part
to allow or ignore adjustments made in BlockSpace
s.
Changes have been made to PartInfoTree
to allow them to hold BasicPartColumns
.
Fixed some general UI bugs with highlighting in the PropsSchemes
dialog, and allow specify custom colors for highlighting.
The following changes were made to support development efforts of the new UI.
We now support materials when exporting to dwg. Materials in CET will be converted to a format supported by dwg. Textures are extracted and stored in a folder next to the dwg. Currently, we do not support exporting user materials added to xrefs. In other words, if a dwg is imported to CET and a new material is added to it and then again exported to dwg the added material will not be exported.
The Tools toolbox is receiving a facelift in the new UI mode, as a result, a lot of old functionality has been cleaned up.
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) {
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.
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) {
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) {
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
.
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)
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) {
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 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) {
Replace all overrides and calls to showPackageInfoMismatchDialog()
with showPackageInfoMismatchDialog(symbol packageInfo)
.
Removed: extend public void showPackageInfoMismatchDialog() { } Use: public void showPackageInfoMismatchDialog(symbol packageInfo) {}
Replace all overrides and calls to useStrictClassification()
with useStrictClassification(MhSnapper c)
.
Removed: extend public bool useStrictClassification() : deprecated { Use: extend public bool useStrictClassification(MhSnapper c) {
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 {
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) {
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) {
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) {
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) {
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) {
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) {
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) {
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) {
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 { }
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) {
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 { ... }
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)
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 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 {
Old: public class MhDoubleStepRangeCollisionAlternative extends MhCollisionAlternative { New: public class MhSubSetCollisionAlternative extends MhCollisionAlternative {
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) {
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() {
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
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 (G1) is now deprecated and removed.
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) {
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) {
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 {
This class has been removed as it is no longer needed for the new engine.
Removed: public class MhEngineOverrideFunctionInfo {
Remove functionPath()
as it is no longer needed for the new engine.
Removed: extend public symbol functionPath() {
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() {
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) {
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) {
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) {
Removed: public bool isPlatform(Object o) : deprecated { return isMobilePlatform(..); } Removed: public bool isEndPanel(Object o) : deprecated { return isMobileEndPanel(..); } Removed: public class MhMobileUpdateBehavior extends MhBehavior : deprecated { Removed: public mhLazyGlobal MhBehavior mhMobileUpdateBehavior = MhMobileUpdateBehavior();
Removed: public class MhUprightProtectorEngineBehavior extends MhEngineBehavior { Removed: public class MhSpacerLinkFrameFunction extends MhSystemEngineFunction : deprecated { Removed: public class MhLevelLinkTest extends MhTest {
Removed: public bool isArm(Snapper snapper) { return evalClassification(snapper, sArm); }
The function isArm(Snapper snapper)
has been removed due to it being redundant with isArm(Object o)
. You should still be able to call isArm(Object o)
without any compilation errors.
Old: extend public color bayColor2D() New: extend public Color bayColor2D()
public class MhDeepstorageNoOfSingleFramesFunction extends MhSystemEngineFunction { - Removed: extend public MhEngineEntry[] sortedFramesByPriority(MhEngineEntry[] sortedFrames) : deprecated {
Replace all overrides and calls to sortedFramesByPriority(MhEngineEntry[] sortedFrames)
with sortedFramesByPriority(bool rotated, MhEngineEntry[] sortedFrames)
.
Removed: extend public MhEngineEntry[] sortedFramesByPriority(MhEngineEntry[] sortedFrames) : deprecated { Use: extend public MhEngineEntry[] sortedFramesByPriority(bool rotated, MhEngineEntry[] sortedFrames) {
public class MhShelvingCompartmentConfigurationItem extends MhStorageConfigurationItem { - Old: public double levelHeight; - New: public Double levelHeight;
ProdPart
has the following changes to its methods, these allow for applying option adjustments:
Added: public void generateOptAdjustmentSifRows(SpecOption opt, str[] lines) {} Added: final public PartOptionAdjustment newOptionAdjustment(SpecOption option, Space space) {} Added: final public void putOptionAdjustment(PartOptionAdjustment adjustment, Space space) {} Added: final public PartOptionAdjustment optionAdjustment(SpecOption option, Space space) {}
Two renamer classes AbstractUnitLoadCollabG1Renamer
from the collabG1
folder and AbstractUnitLoadCollabG3Renamer
from the collabG3
folder have been removed. The reason for their removal is because they both were registered to be
the package stream renamer of the #"cm.abstract.unitLoad"
package, but each package should only have
one renamer. By having two renamers registered for the same package, only one renamer is used and the other is not.
It is also random as to which renamer is chosen.
To resolve this issue, both the classes mentioned above have been combined into a new class UnitLoadStreamRenamer
. So, any
existing class that extends from those removed classes can extend from this new class without the loss of functionality.
The class UnitLoadStackableTote
has been renamed to UnitLoadCaseTote
.
The reason for the change is because UnitLoadStackableTote
is actually a Case Tote
, and there is another type of unit load
called Stackable Tote
from MhStackableTote
class, which made it really confusing.
Unit load cache has been remove and this is replaced with a unit load repository instead. Unit load will still be accessible through function unitLoad(UnitLoad m)
but used unit loads will be put into repository map and unused objects will be cleaned up by gc
later on as by default it'll be added into a weak
collection. With repository it's possible to manually control the lifetime of a unit load object and can be done by calling public void use(UnitLoad this) {
which will promote unit load objects to not be collected by the garbage collector.
The following functions have been remove and replaced.
Old: public class UnitLoadCache { New: public class UnitLoadRepository : unstreamable {
New: public UnitLoadRepository unitLoadRepository() { Removed: public UnitLoadCache unitLoadCache() { // Lifetime will be handle by gc or manually remove if necessary. Removed: public void mhPreLoadClearUnitLoadCacheHook(WorldFileHeader header) { Removed: public void mhClearUnitLoadCacheHook(World world) { Removed: public bool usingUnitLoad(UnitLoad ul) {
Unit load function registration is now split into two in order to have better control of default and temporary objects to populate unit load domain.
Old: public void registerUnitLoad(UnitLoad ul, World w=null) { // Register it to container to populate unit load domain. New: public void registerUnitLoadToContainer(UnitLoad ul, World w=null) { // Will register unit load to be use as default. New: public void registerUnitLoadToDefault(UnitLoad ul) { // Include world to be more specific when looking for unitload container. Old: public UnitLoad unitLoad(guid unitGuid) { New: public UnitLoad unitLoad(guid unitGuid, World w=null) { Old: public UnitLoad unitLoadFromName(str name) { New: public UnitLoad unitLoadFromName(str name, World w=null) { // Better variable name. Old: public UnitLoad unitLoad(str unitKey, World w=null) { New: public UnitLoad unitLoad(str gidHex, World w=null) {
The following changes were made to support efforts in the facelift project:
CET's menubar now support nested menus items, which has required some changes to the menu item functions in cm/application/keyBindingMenu.cm
:
Removed: public void imageItem(MenuBar menuBar, str k, str label, Image image, MenubarCB callback, char c='\0', bool sys=false, KeyCode keyCode=null, SubMenuInfo subMenu=null, bool excludeFromVisibilityProfile=false) {} Added: public void imageItem(MenuBar menuBar, str k, str label, Image image, MenubarCB callback, char c='\0', bool sys=false, KeyCode keyCode=null, SubMenuInfo subMenu=null, str nestedKey=null, Removed: ADDED bool excludeFromVisibilityProfile=false) {} Removed: public void labelItem(MenuBar menuBar, str k, str label, MenubarCB callback, char c='\0', bool sys=false, KeyCode keyCode=null, SubMenuInfo subMenu=null, bool excludeFromVisibilityProfile=false) {} Added: public void labelItem(MenuBar menuBar, str k, str label, MenubarCB callback, char c='\0', bool sys=false, KeyCode keyCode=null, SubMenuInfo subMenu=null, str nestedKey=null, Removed: ADDED bool excludeFromVisibilityProfile=false) {}
The following functions have been moved to cm.win
:
str kilometerS(double, bool, int, bool, lcid, unitMagnitude)
str meterS(double, bool, int, bool, lcid, unitMagnitude)
str decimeterS(double, bool, int, bool, lcid, unitMagnitude)
str centimeterS(double, bool int, bool, lcid, unitMagnitude)
str millimeterS(double, bool, int, bool, lcid, unitMagnitude)
str inchesS(double, bool, lcid, int, unitMagnitude)
str inchesAndFractionsS(double, bool, int, lcid, unitMagnitude, bool)
str inchesAndDecimalsS(double, bool, int, bool, lcid, unitMagnitude)
str feetS(double, bool, lcid, unitMagnitude)
str feetAndInchesS(double, lcid, unitMagnitude)
str feetAndDecimalsS(double, bool, int, bool, lcid, unitMagnitude)
str feetAndInchesAndFractionsS(double, bool, int, lcid, unitMagnitude, bool)
str feetAndInchesAndDecimalsS(double, bool, int, bool, lcid, unitMagnitude)
str tsuboUnitS()
str tsuboS(double, bool, int, bool, lcid)
double realInchesWithMagnitude(double, unitMagnitude)
str showUnitHelper(str, unitMagnitude)
void showUnitHelper(StrBuf, unitMagnitude)
int->str precisionsToLabel(distanceUnit)
str unitS(double, distanceUnit, bool, bool, bool, int, bool, lcid, unitMagnitude)
str roundToPrecisionUnitS(double, distanceUnit, bool, bool, int, bool, lcid, unitMagnitude)
str meterConvertToUnitS(double, bool, bool, lcid, unitMagnitude, distanceUnit, int)
str kgfPermm2S(int, bool, bool, lcid)
str kgfPercm2S(int, bool, bool, lcid)
str lbfPerInches2S(int, bool, bool, lcid)
str lbfPerFeet2S(int, bool, bool, lcid)
str toS(pressureUnit, unt, bool, bool, lcid)
str toS(weightType, distanceUnit, int, bool, bool, lcid)
str toMetricS(int, bool, bool, lcid)
str toImperialS(int, bool, bool, lcid)
Removed the following functions because ensureSettings
did not do anything.
Remove: public void addCetQLParamsFromSnapper(Snapper z, bool ensureSettings) { Remove: public void removeCetQLParamsFromSnapper(Snapper z, bool ensureSettings) {
Removed: extend public void hideCircleMenu(AnimationMouseInfo mi=null) {
Replaced global variable with global function. Now there is no variable to set. The function checks if there is any visible circle menu.
Old: public bool inCircleMenu = false; New: public bool inCircleMenu() {
Old: public constructor(Window parent, Window owner, Brush brush=null, Skin skin0=null, FrameStyle frameStyle=noFrame, frame3DState frameState=frameStateUp, SrcRef src=#:src) { New: public constructor(Window parent, Window owner, str key=defaultCircleMenuKey, Brush brush=null, Skin skin0=null, FrameStyle frameStyle=noFrame, frame3DState frameState=frameStateUp, bool transparent=true, SrcRef src=#:src) {
Now you can retrieve a circle menu by its key.
Old: public CircleMenu circleMenu(Window w, bool includeHidden=false) { New: public CircleMenu circleMenu(str key) {
Comment: If you need to close a specific circle menu you can use the class member function instead.
Old: public void hideCircleMenu(Window w, bool fromUndo=false) { New: public void hideAllCircleMenus(bool fromUndo=false) {
The new function is in the same file but is no longer a member of CoreDistanceField
.
Old: final public Double scanAndCalculate(str text) { New: public Double scanAndCalculate(str text, distanceUnit defaultUnit) {
The following changes were made to support efforts in the Facelift project
The global setting enableV2ViewModeBar
and the class ViewModeBarV2
has been removed, as ViewModeBarV2
has been merged with its parent class.
cm/core/coreUIEffect.cm
has been moved to cm/win/uiEffect.cm
, which has effected the following classes and functions:
public class AbstractEffect; public class AbstractUIEffect; public double logEffectLambdaFunction(double lambda, AbstractEffect effect) {} public double expEffectLambdaFunction(double lambda, AbstractEffect effect) {} public double tanhEffectLambdaFunction(double lambda, AbstractEffect effect) {} public double oneEffectLambdaFunction(double lambda, AbstractEffect effect) {} public double bouncingEffectLambdaFunction(double lambda, AbstractEffect effect) {}
ViewModeButton
's constructor has been been modified as follows:
Removed: public constructor(Window parent, ViewMode mode, bool normal, SrcRef src=#:src) {} Added: public constructor(Window parent, ViewMode mode, SrcRef src=#:src) {}
BlockSnapper
has had the following changes to its methods:
Removed: extend public void edit() {} Added: extend public void edit(Space[] parentSpaces=null) {}
The following functions have been removed:
Removed: public bool acceptModifyBlockInSeveralAlternativeSpaces(Block block) { Removed: public bool acceptModifyBlockInSeveralAlternativeSpaces(Snapper snapper) {
Instead, a combination of these new functions can be used:
Added: public bool isAnyBlockInMultipleAlternatives(Snapper{} snappers) { Added: public bool isBlockInMultipleAlternatives(Snapper snapper) { Added: public bool isBlockInMultipleAlternatives(Block block) { Added: public bool isBlockInMultipleAlternatives(guid blockGuid) { Added: public void showModifyBlockInMultipleAlternativesWarningDialog() { Added: public int showModifyBlockInMultipleAlternativesWarningPromptDialog() {
The parameter PartInfoTree tree=null
was added to the constructor in CalcDoubleInputCell
and CalcGridCellPopup
to populate the new infoTree
field.
// calcDoubleInputCell.cm Old: public constructor(BasicPartColumn column, Part part, PartCache cache, Space space) New: public constructor(BasicPartColumn column, Part part, PartCache cache, Space space, PartInfoTree tree=null) calcGridCellPopup.cm Old: public constructor(Window parent, BasicPartColumn column, Part part, Space space, rectI cellBound) New: public constructor(Window parent, BasicPartColumn column, Part part, Space space, rectI cellBound, PartInfoTree tree=null)
Caching bound is now the responsibility of class DwgBspEntry
. Methods and members related to caching was removed.
Removed: public Graph->Rect boundCache(); Removed: final public rect bound(Graph g) : inline {
The following changes were made to support development efforts of the new UI.
The Library
and CompanyLibrary
constructors have been modified as follows:
// Library Removed: public constructor(LibraryLimb tree, symbol pkg, bool rebuildOnUserLevelChange=false, function() viewModeHook=null) {} Added: public constructor(LibraryLimb tree, symbol pkg, bool rebuildOnUserLevelChange=false, bool facelift=false, // ADDED LibraryHeaderBuilder headerBuilder=null, // ADDED function() viewModeHook=null) {} // CompanyLibrary Removed: public constructor(LibraryLimb tree, symbol pkg, bool rebuildOnUserLevelChange=false, str companyKey=null, version version=version(0, 0, 0), function() viewModeHook=null) {} Added: public constructor(LibraryLimb tree, symbol pkg, bool rebuildOnUserLevelChange=false, bool facelift=false, // ADDED LibraryHeaderBuilder headerBuilder=null, // ADDED str companyKey=null, version version=version(0, 0, 0), function() viewModeHook=null) {}
The constructor for LibraryLimb
has been changed, and LibraryLimb
now
stores a UIHint
in a field, so UIHint fields in subclasses have been removed:
// LibraryLimb Removed: public constructor(symbol pkg, str key, Image image=null, bool frame=true, str label=null, str toolTipText=null, Image toolTipImage=null, SectionButton[] buttons=null, SrcRef src=null) {} Added: public constructor(symbol pkg, str key, Image image=null, bool frame=true, str label=null, str toolTipText=null, Image toolTipImage=null, SectionButton[] buttons=null, // ADDED UIHint hint=null, // ADDED SrcRef src=null) {} // AutoGroupLimb Removed: public UIHint hint; // ComponentLimb Removed: public UIHint hint; // SettingLimb Removed: public UIHint hint; // VoidCallbackLimb Removed: public UIHint hint;
The UIHint
class and its child classes have changed in the following ways:
// UIHInt Removed: public constructor(bool showLabel=false, bool prefer3D=false, sizeI preferSize=(-1, -1)) {} Added: public constructor(bool showLabel=false, bool prefer3D=false, sizeI preferSize=(-1, -1), int columns=0, // ADDED alignment align=middle, // ADDED pointI margins=(-1, -1) // ADDED ) {} Deprecated: public class UIMarginsHint extends UIHint {} // UIFrameHint Removed: public pointI margins; // UITextSideHint Removed: public constructor(alignment textSide, bool showLabel=false, bool prefer3D=false, sizeI preferSize=(24, 24)) {} Added: public constructor(alignment textSide, bool showLabel=false, bool prefer3D=false, sizeI preferSize=(24, 24), alignment align=middle // ADDED ) {} // UIImageHint Removed: public pointI margins; Removed: public constructor(bool showLabel=false, Image image=null, alignment textSide=alignment.down, FrameStyle frameStyle=null, pointI margins=(-1, -1), sizeI preferSize=(-1, -1)) {} Added: public constructor(bool showLabel=false, Image image=null, alignment textSide=alignment.down, FrameStyle frameStyle=null, pointI margins=(-1, -1), sizeI preferSize=(-1, -1), int columns=0, // ADDED alignment align=middle // ADDED ) {} // UIBrushHoverHint Removed: public pointI margins;
UIBuilder
has had the following changes to its fields:
Removed: public int mg;
UIGroupBuilder
has had the following changes to its methods:
Removed: extend public Window build(UIBuilder uiBuilder, LibraryLimb limb, Window window) {} Added: extend public Window build(UIBuilder uiBuilder, LibraryLimb limb, Window window, bool subsection=false /** ADDED **/) {}
UIGroupOrganizerEnv
has had the following changes:
Removed: public int mg; Added: public Margins margins; Removed: final public int mg() {} Added: final public Margins mg() {}
OldSchoolGroupOrganizer
has been completely removed.
The parameter bool ignoreBlockSpace
was added to the adjustment interfaces in partAdjustment.cm
to determine if a PartAdjustment
should be stored or found on BlockSpace
s.
When set to true
, the functions will ignore the space
parameter if it is a BlockSpace
and use the Part
's space instead. When false, the functions will not ignore the space
parameter if it is a BlockSpace
.
// partAdjustment.cm Old: public Object adjustedValueIfAny(Part part, str key, Space space) : deprecated New: public Object adjustedValueIfAny(Part part, str key, Space space, bool ignoreBlockSpace=true) Old: public void adjustProperty(Part part, str key, Object value, Space space=null, bool createIfNull=true) : deprecated New: public void adjustProperty(Part part, str key, Object value, Space space=null, bool createIfNull=true, bool ignoreBlockSpace=true) Old: public bool isAdjusted(Part part, Space space, str key) : deprecated New: public bool isAdjusted(Part part, Space space, str key, bool ignoreBlockSpace=true)
The parameter bool ignoreBlockSpace
was added to the adjustment interfaces in Part
to determine if a PartAdjustment
should be stored in BlockSpace
s.
When set to true
, an adjusted Part
will store it's adjustment on the main Space
. When false, the adjustment will be stored on the BlockSpace
that it was made on.
// part.cm Old: extend public SinglePartAdjustment newAdjustment(Space space) : deprecated New: extend public SinglePartAdjustment newAdjustment(Space space, bool ignoreBlockSpace=true) Old: extend public void putAdjustment(SinglePartAdjustment adjustment, Space space) : deprecated New: extend public void putAdjustment(SinglePartAdjustment adjustment, Space space, bool ignoreBlockSpace=true) Old: extend public SinglePartAdjustment adjustment(Space space) : deprecated New: extend public SinglePartAdjustment adjustment(Space space, bool ignoreBlockSpace=true)
The columns()
function now returns PartColumn[]
rather than PartInfoColumn[]
.
This allows a PartInfoTree
to contain any type of PartColumn
.
Old: extend public PartInfoColumn[] columns() { New: extend public PartColumn[] columns() {
PropsSchemeDialog
Old: extend public void refreshSearchResult() New: final public void refreshSearchResult() // use the new refreshSearchResultFor for specificity New: extend public void refreshSearchResultFor(str{} keys)
PropsSchemeOptionLabel
Old: extend public void highlight(str target, bool ignoreCase=true) New: extend public void highlight(str target, color hc, bool ignoreCase=true) Old: extend public void highlight(str{} keys) New: extend public void highlight(str{} keys, color hc)
PropsSchemeOptionsSubWindow
Old: extend public void highlight(str target, bool ignoreCase=true) { New: extend public void highlight(str target, color hc, bool ignoreCase=true) { Old: extend public void highlight(str{} keys) { New: extend public void highlight(str{} keys, color hc) {
PropsSchemeSectionedLabel
Old: extend public void highlight(str target, bool ignoreCase=true) { New: extend public void highlight(str target, color hc, bool ignoreCase=true) { Old: extend public void highlight(str{} keys) { New: extend public void highlight(str{} keys, color hc) {
Visibility of TBQuickBarButton
has been changed from public
to private
.
The ToolboxSectionedLabel
constructor is no longer the same constructor as for Display
, with the following parameters:
public constructor(Window parent, Brush brush=noBrush, FrameStyle frameStyle=noFrame, frame3DState frameState=frameStateFlat, str key=null, str label=null, str tooltip=null, bool initFacelift=false, // pass true to enable new Facelift style SrcRef src=#:src) {}
The LazyBasicSnapperButton
constructor has been changed to not perform any auto sizing unless passed a size of (-1, -1)
. All subclasses should modify their constructor's default size parameter to match the new default in order to retain auto sizing.
Removed: public void deleteUserStyle(str styleKey) { Added: public void deleteUserStyle(UserStyle style) {
Removed: public bool saveUserStyle(UserStyle style) { Removed: public bool saveUserStyle(UserStyle style, Url url) { Added: public bool saveUserStyle(UserStyle style, bool newStyle=false, Url url=null) {
Old: public sorted str->UserStyle styles; New: private sorted str->UserStyle styles : public readable; Added: public void remove(str key) {
The new put method uses the key of the style. Consider using this if the key matches the key of the style.
Added: final public void put(UserStyle p) {
Old: public class UserStyle { New: public class UserStyle : abstract {
Replaces getStyleUrlPath
in RegTypeCard
.
Added: extend public Url getDefaultStyleUrlPath() {
Replaced with method in UserStyle
:
Removed: extend public Url getStyleUrlPath(UserStyle s) {
Removed: extend public bool addNewStyle(UserStyle s) { Removed: extend public bool saveStyle(UserStyle s) { Added: extend public bool saveStyle(UserStyle s, bool newStyle=false) {
Removed: extend public bool addNewStyle(UserStyle s) { Added: extend public bool saveStyle(UserStyle style, bool newStyle=false) {
Old: public bool edit; New: private bool edit;
The following colour constants have been moved to cm.win
:
public const color black(0, 0, 0); public const color white(255, 255, 255); public const color lightGray(220, 220, 220); public const color gray(198, 198, 198); public const color darkGray(145, 145, 145); public const color lightRed(235, 175, 175); public const color red(212, 151, 151); public const color darkRed(210, 120, 120); public const color brightRed(230, 100, 100); public const color strongRed(255, 0, 0); public const color lightGreen(114, 191, 134); public const color green(128, 163, 135); public const color darkGreen(110, 135, 110); public const color brightGreen(90, 190, 90); public const color strongGreen(0, 255, 0); public const color lightBlue(155, 197, 230); public const color blue(135, 177, 248); public const color darkBlue(126, 126, 200); public const color brightBlue(110, 110, 240); public const color strongBlue(0, 0, 255); public const color lightYellow(230, 231, 186); public const color yellow(229, 231, 164); public const color darkYellow(208, 203, 115); public const color brightYellow(235, 230, 90); public const color strongYellow(255, 255, 0); public const color lightBrown(211, 200, 169); public const color brown(192, 176, 138); public const color darkBrown(172, 153, 110); public const color lightBeige(205, 205, 180); public const color beige(224, 211, 175); public const color darkBeige(229, 204, 133); public const color lightOrange(238, 200, 140); public const color orange(245, 194, 98); public const color darkOrange(220, 170, 70); public const color brightOrange(246, 168, 33); public const color lightPurple(213, 183, 229); public const color purple(198, 137, 229); public const color darkPurple(165, 114, 191); public const color brightPurple(190, 108, 200); public const color strongPurple(255, 0, 255);
Removed unused field from DwgMaterialProp
constructor.
Old: public constructor(Url texturePath, CByteArray pixelData) New: public constructor(Url texturePath)
The following functions have been moved to cm.win
:
str inchesS(box, bool, lcid, int)
str inchesS(line, bool, lcid, int)
str inchesS(point, bool, lcid, int)
A field in this class has been changed to be more generic to handle more variants of SubSet.
public class CollisionLimitedVectorOption extends CollisionVectorOption { - Old: public DoubleStepRange steps; - New: public SubSet domain;
str inchesS(point2D, bool, lcid, int)
has been moved to cm.win
.
str inchesS(range, bool, lcid, int)
has been moved to cm.win
.
Removed the following deprecated definitions from the SelectedFloorControl
class.
Removed: public CoreDistanceField elevation; Removed: public CoreDistanceField floorT; Removed: public CoreDistanceField ceilingH;
The following constructors in FloorViewItem
has been changed. The remaining constructor should be enough for all known use-cases.
Old: public class FloorViewItem extends TreeViewItem { New: public class FloorViewItem extends LevelTreeViewItemBase { Old: public constructor(FloorsControl floorsControl, SpaceVolume v, SrcRef src=#:src) { New: public constructor(FloorsControl floorsControl, SpaceVolume v) { Removed: public constructor(FloorsControl floorsControl, symbol id, Space space, SrcRef src=#:src) {
The following fields in the FloorViewItem
class was made private and moved into the base class LevelTreeViewItemBase
. The fields can still be accessed through getter functions.
Old: public Space space : copy=reference; New: private Space _space : copy=reference; Old: public symbol volumeId; New: private symbol _volumeId;
The following methods in FloorViewItem
have been modified and moved into the new base class LevelTreeViewItemBase. In most cases this shouldn't require any action.
Old: extend public bool isOutside() { New: final public bool isOutside() { Old: extend public void setSpace(Space space) { New: extend public void setSpace(Space newSpace) { Old: extend private bool anyLevelsCreated() { New: final public bool anyLevelsCreated() { Old: extend public bool isVisible() { New: final public bool isVisible() { Old: extend public bool isLocked() { New: final public bool isLocked() { Old: extend public bool isSolid() { New: final public bool isSolid() { Old: extend public void toggleVisibility() { New: final public void toggleVisibility() { Old: extend public void toggleLocked() { New: final public void toggleLocked() { Old: extend public void toggleSolid() { New: final public void toggleSolid() {
The following method in FloorViewItem
has been moved to a standalone function outside of the class.
Removed: extend public void cloneFloor(bool onlyVolumeSnappers) { Added: package void undoableCloneLevel(SpaceVolume volume, Space space, bool onlyVolumeSnappers=false) {
The following definitions in cm/std/tools/library.cm
have been removed, as they are no longer used. If you still require some of the functionality, consider making a local copy of it.
Removed: package bool showMirror = false; Removed: public class ShowMirrorVisibility extends LibraryLimbVisibility { Removed: public str arrowHeadIndexToLabel(Object o) { Removed: public str precisionIndexToLabel(Object o) { Removed: public Object setInitialPrecision(ObjectSubSet seq, int key) {
The following definitions in cm/std/tools/library.cm
have been changed to private, as they were not used outside of the file.
Old: package int->str pToLCache = null; New: private int->str pToLCache; Old: package distanceUnit lastUnit = distanceUnit.none; New: private distanceUnit lastUnit = distanceUnit.none;
The following changes were made to support development efforts for the New UI.
SlimDoubleScrollBar
has been deprecated. Set the slim parameter in DoubleScrollBar
to true
instead.
The following changes were made to cm/win/cardWindow.cm
:
Removed: public bool delayToolboxPaint; Removed: public taskStatus cardWindowDrawFrameCB(Task task, timespan slot, Object arg) {} Removed: public taskStatus cardWindowDrawFlapsCB(Task task, timespan slot, Object arg) {}
FrameWindow
resizing has been split into 2 separate methods.
The first method resizing0
determines the frame borders and resizing1
should perform actual re-layout logic.
Deprecated: extend public rectI resizing(rectI r, bool left, bool right, bool top, bool bottom) Added: extend public rectI resizing0(rectI r, bool left, bool right, bool top, bool bottom) Added: extend public void resizing1(sizeI s)
CardWindow
has had the following changes:
Removed: public bool rebuildingInProgress; Added: public int rebuildNesting; Added: final public bool rebuildingInProgress() {} Removed: extend public bool drawFrame(WindowPixelDevice c, bool enqueue=true) {} Added: extend public bool drawFrame(WindowPixelDevice c) {} Removed: extend public void drawFlaps(WindowPixelDevice c, bool dragging=false, bool enqueue=true) {} Added: extend public void drawFlaps(WindowPixelDevice c, bool dragging=false) {}
FormattedTextArea
has the following methods removed:
Removed: final public void setText(null n) {}
All predefined LegacyFrame
s in cm/win/legacyFrame.cm
have been removed due to performance issues:
Removed: public FrameStyle redButtonFrame -> Migrate to redPenFrame Removed: public FrameStyle greenButtonFrame -> Migrate to greenPenFrame Removed: public FrameStyle blueButtonFrame -> Migrate to bluePenFrame Removed: public FrameStyle grayFrame -> Migrate to stdLightFrame Removed: public FrameStyle mediumGrayFrame -> Migrate to stdGrayFrame Removed: public FrameStyle darkGrayFrame -> Migrate to darkGrayPenFrame Removed: public FrameStyle unknownFrame -> Migrate to null
The fields in SubMenuInfo
have been changed:
Removed: public bool visible;
The following change in cm/win/distanceLabel.cm
was made to support adding yardage as a unit of measure.
Added: public str yardsS(double meters, bool showUnit=true, int decimals=2, bool decimalZeroes=false, lcid locale=lcid(-1), unitMagnitude magnitude=unitMagnitude.dist) {}
The valueS()
function in DsiPDataOption
was updated to now return specialCode
if there is one.
// dsiPDataOption.cm Old: extend public str valueS() { if (_dataType.Character) return code; ... } New: extend public str valueS() { if (_dataType.Character) return specialCode ?? code; ... }
The generateSifOptionRows
function in DsPData
was updated to take a DsPart
as a parameter.
// dsPData.cm Old: final public void generateSifOptionRows(SifEnv env, Option o, DsiPDataOption pO, int level=0) : deprecated New: final public void generateSifOptionRows(SifEnv env, Option o, DsiPDataOption pO, DsPart part=null, int level=0)
The generateSifOptionRows
function in DsPData
was updated to export a CustomerOwnMaterial
code and description for
a DsiPDataOption
where appropriate.
The dsGenerateCOMPartsHook
was added as part of the rawPartListHooks
. It gathers CustomerOwnMaterial
s on DsPData
s and
generates child COMPart
s from these materials.
// hooks.cm /** * Append COMParts from Part. * (COMParts hook) */ package Part[] dsGenerateCOMPartsHook(Part[] parts, Space space) { for (part in parts) { Snapper snapper = part.owner; generateCOMParts(snapper, part); } return parts; }
Deprecated functions:
public void build() : deprecated
public void rebuild()
updates the dialogpublic void editTFCB() : deprecated
public void controlCb(Control c)
public void updateTF() : deprecated
public void update()
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.
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; } } }
Removed specific configuration behaviors as default behaviors for the bay, frame, and level spawners.
Affected spawners:
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; }
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)
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:
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)); ... } ... }
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)); } } ... } }
Tunnel graphics will no longer be shown during rendering. The line that removed the tunnel from the rendering is as below:
public class MhTunnelGfxBehavior extends MhGenericGfxBehavior { /** * Tunnel 3D. */ extend public Primitive3D tunnel3D(MhSnapper owner, FetchEnv3D env) { ... p.layer = not(#render); ... }
This change is made in tunnel3D()
from the MhTunnelGfxBehavior
class, located in behavior/mhTunnelGfxBehavior.cm
.
So any tunnel that uses this class and method will no longer be rendered, and this method will have to be overriden if you would still like the tunnel to be shown.
The method updateBayHeight()
has been updated to use logic similar to other storage extensions. It relies on the mhCalculatedBayHeightForConstruction()
function.
We do not expect shelving products to have floor levels and so have update MhShelvingBayEngineBehavior
to not generate floor levels by default.
public class MhShelvingBayEngineBehavior extends MhBayEngineBehavior { /** * Add floor level. */ public bool addFloorLevel(MhSnapper snapper) { return false; } /** * * Accepts function run. */ public bool acceptFunctionRun(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) { str funcName = func.name; if (funcName == "bayEnsureFloor") return false; return super(..); } }
See "New pre configurator classes" about the new `MhShelvingConfiguration class which mentioned overridden logic to support no floor levels.
MhShelvingClearanceConfigurationItem
now returns a MhShelvingClearanceSpec
object by default for defaultClearance()
.
public class MhShelvingClearanceConfigurationItem extends MhClearanceCompartmentConfigurationItem { /** * Default clearance. */ public MhClearanceSpec defaultClearance() { return MhShelvingClearanceSpec(); } }
Selective racking extension now extends from generic Extension class.
Old: private class AbstractSelectiveRackingExtension extends AbsRackingExtension New: private class AbstractSelectiveRackingExtension extends Extension
Previously, if a sequence was declared as 'weak', it would also clear out null
values when the sequence is resized. This would cause the observed contents of the seqeunce to change at what would appear to be an arbitrary time. With this release, these sequences will no longer clean up null
values on resize.
When streaming a collection with weak values, the object loses the weak value attribute when being streamed back in. This functionally meant that all unstreamed collections would not have the weak value attribute, regardless of their state before streaming. As of this release, the weak value attribute will be respected when un-streaming.
A function to collect any additional child parts has been added to the OrderExporter
. This is to catch COMPart
s that are appended during rawPartsListHooks
.
// orderExporter.cm extend public void collectAdditionalChildParts(Part[] parts)
DwgBspEntry is now responsible for caching graph.bound
.
To utilize the cache, access the bound by calling DwgBspEntry::bound()
rather than DwgBspEntry::graph.bound()
. The latter will always return a freshly calculated bound, while the former is cached.
Also, be mindful that you do not mutate a Graph
owned by a DwgBspEntry
in a way that affects it bound after its initialization, as this does not automatically clear the cache.
Fixed a bug in gText.cm
where evaluatedSize()
did not properly respect the scale
argument. It only updated the font with the scale, bus assumed the scale for the actual size was 0.001.
You can ignore this if you do not manually call evaluatedSize
. If not, note that evaluatedSize
is now scaled up by a factor of scale / 0.001
compared to previous versions of CET.
The following changes were made to support development efforts of the new UI.
A new automatic caching system has been added for extension libraries, so any custom caching should be removed in order to not conflict with it.
UIHint
s now apply to children of the LibraryLimb
as well. This allows
applying the same hint to all child limbs without explicitly passing it in to
each one. You can still override the hint by applying a different hint to the
limb.
semiHidden()
is no longer a condition in isVisibleInMaterialList()
as a way of including child parts during exports.
// part.cm Old: public bool isVisibleInMaterialList(Part part, bool expand, bool child) { bool view; if (!part.visibleInMaterialList()) view = false; else if (part.zeroQuantity(true)) view = false; else if (part.canceled()) view = false; else if (part.semiHidden()) view = false; else view = true; return view; } New: public bool isVisibleInMaterialList(Part part, bool expand, bool child) { bool view; if (!part.visibleInMaterialList()) { view = false; } else if (part.zeroQuantity(true)) { view = false; } else if (part.canceled()) { view = false; } else { view = true; } return view; }
A method for building the columns for a PartInfoTree
was added. When a PartInfoTree
is being built in the CalculationGridWindow
, this method is called to build it's columns.
Added: extend public void buildColumns(CalculationGridWindow grid, int row, Space space) {
The toolbox card width has been updated when running CET in new UI. This matches our new design system for component tab libraries.
For existing libraries that are not adopting to newUI (i.e. useFacelift=false
):
For the best experience in new UI, consider adopting your component library for the new UI. https://dev-docs.configura.com/design-system/tutorial-adopting-the-new-ui-style-for-extension-libraries
For more information on what is possible with libraries in new UI: https://dev-docs.configura.com/design-system/component-tab-libraries
Developers could previously add hooks for updating toolbox style treeviews when a style is updated by appending to updateToolBoxHook
.
In addition to this, they would need to append a SelectWorldHooks
to rebuild the treeview when the world changes (as different worlds have different saved styles).
Developers should no longer add a SelectWorldHooks
to update toolbox drop downs, if they are already updated in hooks in updateToolBoxHook
. All updateToolBoxHook
are now called automatically when a new world is selected.
Updating via SelectWorldHooks
should not cause functional issues, but may impact performance, as the update will happen twice.
Added new field to cache already exported materials.
Added: private str->DwgMaterialData cachedMaterials();
The following changes were made to support development efforts of new UI.
The origin of parent Window
s will now be respected when doing operations like extendRight
, extendBottom
, extendBottomRight
, and any other positioning functions, which may affect the layout of your dialogs.
The new UI comes with a different larger font, which may affect the layout of your windows. This typically shows up in the various forms:
Some common classes that are affected:
Hidden cards no longer get size updates from their parent parent CardWindow
. This is to improve resizing performance. Instead, CardWindow will call parentClientBoundChanged
before your card is shown.
To handle custom layout logic, you may can override Card's parentClientBoundChanged
:
/** * Parent client bound changed. */ public void parentClientBoundChanged() { sizeI prevSize = size(); super(); if (size() != prevSize) updateLayout(); }
Card are no longer constructed with a hardcoded size of (100, 100) to improve performance.
Upon constructing a MenuBar, you need to perform a finalize()
method call.
CoolMenuBar menu(parent); buildFileMenu(menu); buildEditMenu(menu); buildManufacturersMenu(menu); menuBar.finalize();
The finalize method call performs the following:
Call
finalizeSubMenu
to ensure sub menu margins consistent.Perform an
autoSize
to calculates appropriate width and height.Resize and reposition
xControls
as required duringparentClientBoundChanged
The following classes no longer paint frames in repaintFrame.
ShrinkBox
ShrinkWindow
SubGroupBox
Subclasses of the above classes should migrate their repaintFrame overrides to repaint. In most cases a rename of the method signature would suffice.
Removed: public bool repaintFrame(mdc hdc, rectI r) Replace: public bool repaint(mdc hdc, rectI r)
If you have code that used to call repaintFrame()
, you should replace it with refreshFrame()
Old: repaintFrame(); New: refreshFrame();
In future releases, we will try to remove repaintFrame in more places.
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";