Definining a literal Range in reverse order as part of the for syntax will now cause the loop to be skipped entirely. Rewrite the Range literal to correct order. The regular expression for.*\(.*[.][.].*reverse can be used to quickly find all places in your code where you are using the reverse keyword with a literal Range.
The constructors of DsiConstraintSelPath have been changed.
Old: public constructor auto(path, feature, option); public constructor auto(path, feature, option, checkedV); public constructor auto(path, feature, option, numV);
New: public constructor(str path, SFeature feature, Option option, DsiPDataOption dataOption, DsiPDataOption parentDataOption)
The following interfaces will be removed as part of the Component Tab and Component Tab Creator EOL effort:
class ProductCatalog
Removed: extend public void appendToolbox(str url)
The following interfaces will be removed as part of the Component Tab and Component Tab Creator EOL effort:
Functions: Removed: public bool dsCloneToolboxes(DataCatalog catalog, ProductCatalog productCatalog, DsToolboxCreatorToolboxCards toolboxCards) Removed: public str dsToolboxFileStr(DataCatalog catalog, DsToolboxCreatorToolboxCards cards, DsToolboxCreatorToolboxCard card)
Note: cm.abstract.dataSymbol.ui.toolboxCreator package is completely removed. If your extension has dependency to this package, please remove it.
// Constants Removed: public const str dsToolboxCreatorFileType = ".cmtbxc"; // Functions Removed: public Image DsToolboxCreatorLoadToolboxImage(Url file) Removed: public DsToolboxCreatorExtensionToolboxCard dsToolboxCreatorCreateExtensionToolboxCard(Window parent, symbol pkg, DsToolboxCreatorToolboxCard card, str sortKey, str groupId, str libraryFunctionName=null, Image image=null, str label=null) Removed: public str tbCatCardStatsEntityKey(DsCatalogToolboxData cData) Removed: public void dsToolboxCreatorToolboxCardSetSectionLabelAnimationEnv(Window window, DsDragAnimationEnv env) Removed: public void dsToolboxCreatorToolboxCardSetSectionAnimationEnv(Window window, DsDragAnimationEnv env) Removed: public void dsToolboxCreatorToolboxCardSetThumbnailViewAnimationEnv(Window window, DsDragAnimationEnv env) Removed: public void dsToolboxCreatorToolboxCardSetToolboxSectionWindowAnimationEnv(Window window, DsDragAnimationEnv env) Removed: public void dsToolboxCreatorToolboxCardSetHeaderAnimationEnv(Window window, DsDragAnimationEnv env) Removed: public void dsToolboxCreatorToolboxCardSetImageSectionAnimationEnv(Window window, DsDragAnimationEnv env) Removed: public void dsToolboxCreatorToolboxCardSetSchemeButtonAnimationEnv(Window window, DsDragAnimationEnv env) Removed: public Library dsToolboxCreatorLibraryFromCard(Card card, symbol pkg) Removed: public void faceliftPreprocess(Library library) Removed: public str->str dsDefaultSchemeDescriptionMap(str{} languages) // Classes Removed: public class DsToolboxCreatorCardPropertyWindow extends SubWindow Removed: public class DsToolboxCreatorCardWindow extends CardWindow Removed: public class DsToolboxCreatorControlWindow extends SubWindow Removed: public class DsToolboxCreatorDataCatalogHeader extends DsDataCatalogHeader Removed: public class DsToolboxCreatorDataCatalogSectionedLabel extends DsDataCatalogSectionedLabel Removed: public class DsToolboxCreatorDataCatalogSectionedScrollableSubWindow extends DsDataCatalogSectionedScrollableSubWindow Removed: public class DsToolboxCreatorDesignWindow extends SubWindow Removed: public class DsToolboxCreatorDialog extends DialogWindow Removed: public class DsToolboxCreatorDeletionSubWindow extends SubWindow Removed: public class DsToolboxCreatorDragAnimation extends DsDragAnimation Removed: public class DsToolboxCreatorDropDownTreeView extends DropDownTreeView Removed: public class DsToolboxCreatorDynamicCard extends DsDynamicCard Removed: public class DsToolboxCreatorExtensionToolboxCard extends ExtensionToolboxCard Removed: public class DsToolboxCreatorFillerInsertDragAnimation extends DsToolboxCreatorThumbnailViewMoveDragAnimation Removed: public class DsToolboxCreatorFillerMoveDragAnimation extends DsToolboxCreatorThumbnailViewMoveDragAnimation Removed: public class DsToolboxCreatorFillerThumbnail extends DsThumbnail Removed: public class DsToolboxCreatorFocusLines Removed: public class DsToolboxCreatorFocusRect Removed: public class DsToolboxCreatorGroupInsertDragAnimation extends DsToolboxCreatorDragAnimation Removed: public class DsToolboxCreatorGroupMoveDragAnimation extends DsToolboxCreatorGroupInsertDragAnimation Removed: public class DsToolboxCreatorHeaderInsertDragAnimation extends DsToolboxCreatorGroupInsertDragAnimation Removed: public class DsToolboxCreatorHeaderLimb extends DsDynamicHeaderLimb Removed: public class DsToolboxCreatorHeaderMoveDragAnimation extends DsToolboxCreatorGroupMoveDragAnimation Removed: public class DsToolboxCreatorHeaderPropertyWindow extends SubWindow Removed: public class DsToolboxCreatorImageSectionInsertDragAnimation extends DsToolboxCreatorDragAnimation Removed: public class DsToolboxCreatorImageSectionMoveDragAnimation extends DsToolboxCreatorImageSectionInsertDragAnimation Removed: public class DsToolboxCreatorImageSectionPropertyWindow extends ShrinkWindow Removed: public class DsToolboxCreatorLibraryLimb extends DsDynamicLibraryLimb Removed: public class DsToolboxCreatorProductCatalogLimbBuilder extends DsProductCatalogLimbBuilder Removed: public class DsToolboxCreatorProductLevelPropertySubWindow extends ShrinkWindow Removed: public class DsToolboxCreatorProductViewInsertDragAnimation extends DsDragAnimation Removed: public class DsToolboxCreatorPropertyWindow extends SubWindow Removed: public class DsToolboxCreatorSchemeButton extends DsDataCatalogSchemeButton Removed: public class DsToolboxCreatorSchemeButtonInsertDragAnimation extends DsToolboxCreatorDragAnimation Removed: public class DsToolboxCreatorSchemeButtonMoveDragAnimation extends DsToolboxCreatorSchemeButtonInsertDragAnimation Removed: public class DsToolboxCreatorSchemeButtonPropertyWindow extends ShrinkWindow Removed: public class DsToolboxCreatorSectionLabelPropertyWindow extends SubWindow Removed: public class DsToolboxCreatorSideBarPropertiesPropertyWindow extends DsInWindowSideBarProperties Removed: public class DsToolboxCreatorThumbnailsLimb extends DsThumbnailsLimb Removed: public class DsToolboxCreatorThumbnailPropertyWindow extends SubWindow Removed: public class DsToolboxCreatorThumbnailViewMoveDragAnimation extends DsThumbnailViewMoveDragAnimation Removed: public class DsToolboxCreatorToolboxCard Removed: public class DsToolboxCreatorToolboxCards Removed: public class DsToolboxCreatorToolboxSectionedScrollableSubWindow extends ToolboxSectionedScrollableSubWindow Removed: public class DsToolboxCreatorToolboxThumbnail extends DsToolboxThumbnail Removed: public class DsToolboxCreatorToolboxThumbnailView extends DsToolboxThumbnailView Removed: public class DsToolboxCreatorTooltip Removed: public class DsToolboxCreatorTreeViewItem extends TreeViewItem Removed: public class DsToolboxCreatorHeaderTreeViewItem extends DsToolboxCreatorTreeViewItem Removed: public class DsToolboxCreatorGroupTreeViewItem extends DsToolboxCreatorTreeViewItem Removed: public class DsToolboxCreatorProductViewTreeViewItem extends DsToolboxCreatorTreeViewItem Removed: public class DsToolboxCreatorFillerTreeViewItem extends DsToolboxCreatorTreeViewItem Removed: public class DsToolboxCreatorImageSectionTreeViewItem extends DsToolboxCreatorTreeViewItem Removed: public class DsToolboxCreatorSchemeButtonTreeViewItem extends DsToolboxCreatorTreeViewItem Removed: public class DsToolboxCreatorUIBuilder extends DsNewUIBuilder Removed: public class DsToolboxCreatorUIGroupBuilder extends DsUIGroupBuilder
Changed the length setter function from final to extend.
Old: final public double length=(double v) { New: extend public double length=(double v) { Removed: extend public void lengthChanged() {
Renamed two methods to more clearly convey what they do.
Old: extend public void setP0(point p, Angle forcedAngle=null, bool updateD=true) { New: extend public void setSpaceP0(point p, Angle forcedAngle=null, bool updateD=true) { Old: extend public void setP1(point p, Angle forcedAngle=null) { New: extend public void setSpaceP1(point p, Angle forcedAngle=null) {
Removed the following functions:
Removed: final public void drawHelpFrameIfSelected(GInstance gs) { Removed: extend public void drawMarginHelpFrameIfSelected(GInstance gs, rect mr) { Removed: final public void drawHelpFrameIfSelectedOrZoomedOut(GInstance gs, GTextBox gText) {
Instead, use one of these:
Added: final public void drawHelpFrame(GInstance gs) { Added: final public void drawMarginHelpFrame(GInstance gs) {
Old: extend public void addSuperStretchVessel(point p) { New: extend public void addSuperStretchVessel(point p, angle a) {
Changed the constructor to optionally support custom labels for collections.
Old: public constructor(str collectionName, str dbPath, str namespace, str uom, symbol[] tags, int version, Material m) { New: public constructor(str collectionName, str dbPath, str namespace, str uom, symbol[] tags, int version, Material m, str collectionLabel=null) {
Steal was removed and made inaccessible, not meant to be used from the outside.
Old: extend public void steal(AbsExtrCollection f) { New: extend package void registryCopyContent(AbsExtrCollection f) {
Minor name changes:
Old: final public AbsExtrProfile get(str name) { New: final public AbsExtrProfile get(str id) {
Made member not intended to be changed from the outside private but public readable.
Old: public str id; New: private str id : public readable;
Added a optional construction argument to decide whether the profile shape should be closed or not.
Old: public constructor(str coll, str name, AbsExtrShapeDefItem[] shapeDef) { New: public constructor(str coll, str name, AbsExtrShapeDefItem[] shapeDef, bool closeProfile=true) {
AbsMaterial now includes thumbnailType method, subclasses will need to remove extend keyword if they had previously defined this method.
AbsMaterial public class AbsMaterial extends CachedMaterial { extend public gmThumbnailType thumbnailType() {..} } public class FOMaterial extends OfficeMaterial { Old: extend public gmThumbnailType thumbnailType() {..} New: public gmThumbnailType thumbnailType() {..} }
The abstract class MhSystemConfiguration, and the child classes MhStorageConfiguration and MhStorageEditorConfiguration have had similar methods declared in them.
MhStorageConfiguration.configUserPropertyChanged(str key, Object value, Object oldValue, Object propOwner, MhStorageConfigurationItem item) and MhStorageEditorConfiguration.userPropertyChange(MhStorageEditorItem item, CoreProperty property, Object oldValue) were both doing similar logic and so we have now created a new method in the parent class MhSystemConfiguration that calls this similar functionality. If you had previously overridden either of these two methods, you should now override configUserPropertyChanged(MhSystemConfigurationItem item, CoreProperty property, Object oldValue) instead.
public class MhSystemConfiguration extends CoreObject { Added: /** * Config user property changed. */ extend public void configUserPropertyChanged(MhSystemConfigurationItem item, CoreProperty property, Object oldValue) { if (property.owner != item) { item.?additionalPropChanged(property.key, property.value, oldValue, property.owner); } configUserPropertyChanged(property.key, property.value, oldValue, property.owner, item); } } public class MhStorageConfiguration extends MhSystemConfiguration { Removed: /** * configUserPropertyChanged - user changed property. Adjust configuration accordingly. */ extend public void configUserPropertyChanged(str key, Object value, Object oldValue, Object propOwner, MhStorageConfigurationItem item) { for (it in items) { it.configUserPropertyChanged(..); } } } public class MhStorageEditorConfiguration extends MhSystemConfiguration { Removed: /** * User property changed. */ extend public void userPropertyChange(MhStorageEditorItem item, CoreProperty property, Object oldValue) { if (property.owner != item) { item.additionalPropChanged(property.key, property.value, oldValue, property.owner); } if (space and !skipPushToPreview(..-)) { beforePushPropToPreview(..); pushPropToPreview(space, ..-); afterPushPropToPreview(..); } } }
The function Snapper getNextSingleAisle(MhSnapper snapper, bool top=true) has been removed and a function Snapper getNextAisle(MhSnapper snapper, bool top=true) has been added.
Removed: public Snapper getNextSingleAisle(MhSnapper snapper, bool top=true) { for (r in getAllRows(snapper, top=top, reverse=false)) { if (r == snapper) continue; if (r.isSingle and r.isAisle) return r; } return null; } Added: public Snapper getNextAisle(MhSnapper snapper, bool top=true) { for (r in getAllRows(snapper, top=top, reverse=false)) { if (r == snapper) continue; if ((r.isDouble and r.isAisle and !r.isFlueGap) or (r.isSingle and r.isAisle)) return r; } return null; }
Previously MhEngineEntry has a map field str->Object additionalShapeArgs that allows storing key-value data. This has now been changed to a private field str->Object _additionalShapeArgs and new public methods have been introduced with the same name. This is so that the source of this map can be overridden.
For example, MhEngineConstructionEntry overrides the additionalShapeArgs methods to put/retrieve data from the owned constructionInfo() object instead. The class MhEngineConstructionEntryInfo now has a new field str->Object _additionalShapeArgs and method str->Object additionalShapeArgs(). This allows the map of the info class to be set independently and for the data to later be assigned to a MhEngineConstructionEntry at a later time.
// cm/abstract/materialHandling/engine/mhEngineEntry.cm public class MhEngineEntry extends MhEngineEntryBase { Old: public str->Object additionalShapeArgs; New: private str->Object _additionalShapeArgs; New: extend public str->Object additionalShapeArgs() { } New: extend public str->Object additionalShapeArgs=(str->Object args) { } New: extend public Object getAdditionalShapeArg(str key) { } New: extend public void putAdditionalShapeArg(str key, Object val) { } } // cm/abstract/materialHandling/engine/mhEngineConstructionEntry.cm public class MhEngineConstructionEntryInfo { New: private str->Object _additionalShapeArgs; New: extend public str->Object additionalShapeArgs() { } } // cm/abstract/materialHandling/mhSnapperSpawner.cm public class MhSnapperSpawner extends SnapperSpawner { Old: extend public MhEngineConstructionEntry engineConstructionEntry() { } New: extend public MhEngineConstructionEntry engineConstructionEntry(MhEngineConstructionEntryInfo info=null) { } }
The additionalShapeArgs are primarily used to push property values to spawned snappers on constructions. They can also be used to hold distinct entry values to be used during engine functions.
These additionalShapeArgs are applied in three areas during construction, one during instantiation of an MhEngineConstructionEntry, one during spawning of a snapper, and one more time after export of entry.
1. Instantiation of `MhEngineConstructionEntry` public class MhSnapperSpawner extends SnapperSpawner { /** * Engine construction entry (used by entry layout only). */ extend public MhEngineConstructionEntry engineConstructionEntry(MhEngineConstructionEntryInfo info=null) { MhSnapperShape shape = createShape(); for (key, val in info.?additionalShapeArgs) shape.?changeShape(key, val); ... } } 2. Spawning of a snapper public class MhEngineConstructionEntry extends MhEngineSnapperEntry { /** * Spawn snapper. */ extend public MhSnapper spawnSnapper(MhEngine engine, MhSystemSpawnerSelector spawnerSelector=null) { ... if (MhSnapper s = spawnerSelector.?spawnSnapper(classification, shapeArgs=shapeArgs+additionalShapeArgs, env=this)) { return s; } ... } } 3. After export of entry. public class MhSnapperShape extends CorePropObj { /** * Entry exported. */ extend public void entryExported(MhSnapper snapper, MhEngineEntry entry) { ... // Apply additional shape args on exported as they are not included in entry cache key so export function might have spawned snapper without using correct shape args from mhSystemEngineCache. if (entry as MhEngineConstructionEntry) { for (key, val in entry.additionalShapeArgs()) { changeShape(key, val); } } } }
Several changes have been made for handling level clearances in the abstract. First of all, the class MhClearanceSpecLevelClearanceBehavior and the field levelClearanceZ field in MhClearanceSpec have been removed.
How this would be used is the MhClearanceSpecLevelClearanceBehavior class would call spec.?collisionPrimitives(shape, env) which by default would call MhClearanceSpec.levelClearanceCollision(MhSnapperShape shape, MhCollisionFetchEnv env) that returns a CollisionPrimitive built based on spec.levelClearanceZ. This would result in a CollisionPrimitive always being built for the level.
Removed: public mhLazyGlobal MhBehavior mhClearanceSpecLevelClearanceBehavior = MhClearanceSpecLevelClearanceBehavior(); Removed: public class MhClearanceSpecLevelClearanceBehavior extends MhClearanceSpecBehavior public class MhClearanceSpec extends CorePropObj { Removed: public Double levelClearanceZ; Removed: Prop cMhLevelClearanceZPK : attributes={#allowPush, #allowPushNull}; }
Instead of always building a CollisionPrimitive for the level to represent the level clearance, we now only append this primitive during the construction of entries.
public class MhLevelShape extends MhBoxSnapperShape { Old: extend public void appendLevelClearancePrimitives(CollisionPrimitive{} prims, MhCollisionFetchEnv env) { if (?MhClearanceBehavior b = owner.?behavior("levelClearance")) { if (!env) env = MhCollisionFetchEnv(); Transform t = env.transform; double elevation; if (t) elevation = t.pos.z; else elevation = owner.toSpaceTransform().pos.z; MhClearanceCollisionFetchEnv clearanceEnv(env, elevation, owner.rootParent.MhSnapper.?classification); b.appendCollisionPrimitives(this, clearanceEnv, prims); } } New: extend public void appendLevelClearancePrimitives(CollisionPrimitive{} prims, MhCollisionFetchEnv env) { } } public class MhLevelSpawner extends MhStorageSpawner { New: /** * Return construction entry collision primitive. */ public CollisionPrimitive engineConstructionCollision(MhSnapperShape shape, MhEngineConstructionEntry entry) { CollisionPrimitive res = super(..); appendLevelClearancePrimitive(res, shape, entry); return res; } New: /** * Append level clearance primitive. * Simple implementation of level clearance when using MhCompartmentType with no unit loads. For custom logic, override either this or MhClearanceSpec.levelClearanceCollision(). */ extend public void appendLevelClearancePrimitive(CollisionPrimitive prim, MhSnapperShape shape, MhEngineConstructionEntry entry) { if (prim as CollisionPrimitiveSet) { if (?MhClearanceBehavior b = statelessBehavior("Clearance")) { MhCollisionFetchEnv env(reason=#construction, entry=entry); b.appendCollisionPrimitives(shape, env, prim.subPrims); } } } }
Due to the above change in behavior, the ownership of a level clearance value has been changed from the clearance spec to the engine entry, more specifically it is stored in the additionalShapeArgs() of MhEngineEntry.
public class MhClearanceSpec extends CorePropObj { Old: /** * Collision primitives based on `levelClearanceZ`. */ extend public CollisionPrimitive[] levelClearanceCollision(MhSnapperShape shape, MhCollisionFetchEnv env) { CollisionPrimitive[] res(4); if (levelClearanceZ and shape) { box b = shape.localBound(); b.h = levelClearanceZ.v; static Layer layer = Layer(layerSet(sClearance, sLevelClearanceZ), layerSet(sLevel, sLevelFrame)); res << mhGetBoxCollisionPrimitive(b, layer, env.transform); } return res.any ? res : null; } New: /** * Collision primitives for level clearance. */ extend public CollisionPrimitive[] levelClearanceCollision(MhSnapperShape shape, MhCollisionFetchEnv env) { CollisionPrimitive[] res(4); // Append level clearance collision from MhCompartmentType during construction. if (env.?reason == #construction) { MhEngineEntry entry = env.entry; if (?Double levelClearance = entry.?getAdditionalShapeArg("levelClearance")) { box b = shape.?localBound([sLevelFrame]); b.h += levelClearance.v; static Layer layer = Layer(layerSet(sClearance, sLevelClearanceZ), layerSet(sLevel, sLevelFrame)); res << mhGetBoxCollisionPrimitive(b, layer); } } return res.any ? res : null; } } public class MhCollisionFetchEnv { New: public MhEngineEntry entry; Old: public constructor(symbol reason=#none, Transform transform=null, bool includeChildren=false, Object arg=null) New: public constructor(symbol reason=#none, Transform transform=null, bool includeChildren=false, MhEngineEntry entry=null, Object arg=null) }
Changes have been made to support different level entries having different unit load clearances. MhUnitLoadSpawner can pass in different clearance specs for each level entry instead of always using the same clearance spec from the configuration.
public class MhEntryLayoutEnv { New: public MhEngineEntry entry; } public class MhUnitLoadSpawner extends MhStorageSpawner { Old: extend public void appendAdditionalConstructionCollision(MhEngineConstructionEntry entry, str unitLoadKey, LayerSet rootParentClassification, MhEntryLayoutEnv env) { ... for (MhClearanceSpecBehavior behavior in collection.behaviors) { MhStorageClearanceCollisionFetchEnv clearanceEnv(..., clearanceSpec=config.?clearanceSpec); behavior.appendCollisionPrimitives(loadShape, clearanceEnv, set.subPrims); } } New: extend public void appendAdditionalConstructionCollision(MhEngineConstructionEntry entry, str unitLoadKey, LayerSet rootParentClassification, MhEntryLayoutEnv env) { ... MhClearanceSpec spec; if (?MhEngineConstructionEntry parent = env.entry) { if (?MhClearanceSpec cSpec = parent.getAdditionalShapeArg(cMhClearanceSpecPK)) { spec = cSpec; } } if (!spec) spec = config.?clearanceSpec; for (MhClearanceSpecBehavior behavior in collection.behaviors) { MhStorageClearanceCollisionFetchEnv clearanceEnv(..., clearanceSpec=spec); behavior.appendCollisionPrimitives(loadShape, clearanceEnv, set.subPrims); } } }
We have added further control over the number of unit loads populated during construction.
MhUnitLoadConstructionalPopulateFunction class (unitLoadConstructionalPopulate) had the argument loadCount, which was passed to MhConstructionUnitLoadArrangement to populate unit loads perpendicular to the populate vector. It has been renamed to repeatCount. Additionally, a new argument ulCount has been added to represent the number of unit loads to populate in the direction of population. If left as null, the previous behavior will be used which is to populate as many loads as possible. Similarly the MhConstructionUnitLoadArrangement class now holds fields repeatCount and ulCount in place of the previous field count.
Effectively, previous specification of loadCount will now need to specify repeatCount instead. Make sure to search for loadCount in your extension as engine function execute arguments do not throw compile errors for incorrect arguments.
// cm/abstract/materialHandling/storage/engine/mhUnitLoadConstructionalPopulateFunction.cm public class MhUnitLoadConstructionalPopulateFunction extends MhSystemEngineFunction { Old: public Int loadCount; New: public Int repeatCount; //replaces loadCount New: public int ulCount; } // cm/abstract/materialHandling/storage/mhUnitLoadArrangement.cm public class MhConstructionUnitLoadArrangement extends MhUnitLoadArrangement { Old: public int count; New: public int repeatCount; //replaces count New: public int ulCount; Old: public constructor(MhPopulator populator, MhEngineEntry defaultLoadEntry, int count=1, vector direction=(0, 1, 0), bool spreadEvenly=true) { } New: public constructor(MhPopulator populator, MhEngineEntry defaultLoadEntry, int ulCount=0, int repeatCount=1, vector direction=(0, 1, 0), bool spreadEvenly=true) { } }
The repeatCount and ulCount fields for MhUnitLoadConstructionalPopulateFunction are typically passed in from MhLevelConstructionalPopulateFunction.levelChildConstruction(MhEngineConstructionEntry entry) where it passes the values from entry.constructionInfo. Additionally in MhEngineLevelConstructionEntryInfo, the field noOfUnitLoads was renamed to noOfUnitLoadsX and both noOfUnitLoadsX and noOfUnitLoadsY fields are now boxed Int types instead of primitive int.
// cm/abstract/materialHandling/storage/engine/mhLevelConstructionalPopulateFunction.cm public class MhLevelConstructionalPopulateFunction extends MhSystemEngineFunction { /** * levelChildContruction */ extend public void levelChildConstruction(MhEngineConstructionEntry entry) { ... ?MhEngineLevelConstructionEntryInfo info = entry.constructionInfo; Int ulXCount = info.?noOfUnitLoadsX; Int ulYCount = info.?noOfUnitLoadsY; if (!ulYCount) ulYCount = configuration.unitLoadCountY(); engine.exec("unitLoadConstruction", ..., ulCount=ulXCount, repeatCount=ulYCount, ...); ... } } public class MhEngineLevelConstructionEntryInfo extends MhEngineConstructionEntryInfo { Old: public int noOfUnitLoads; New: public Int noOfUnitLoadsX; Old: public int noOfUnitLoadsY; New: public Int noOfUnitLoadsY; }
Undo operation class MhStorageEditorConfigPropModifyUndoOp now stores the Guid to the config instead of the config object itself.
public class MhStorageEditorConfigPropModifyUndoOp extends MhStorageEditorUndoOp { Removed: public MhStorageEditorConfiguration config : copy=reference; New: public Guid configGid; New: public constructor(MhStorageEditorDialog dialog, Guid configGid, str propKey, Object propVal) { }
Removed classes MhStorageEditorDimensionToolbarModelItem and MhBayEditorElevArrowToolbarModelItem. Both functionalities are now implemented in MhStorageEditorConfiguration. Instead of separate toolbar items, they have been combined into one visibility toolbar item.
Removed: public class MhStorageEditorDimensionToolbarModelItem extends ToolbarModelItem { Removed: public class MhBayEditorElevArrowToolbarModelItem extends ToolbarModelItem { Removed: public const str cMhArrowVisibilityStateKey = "arrowVisibilityState"; public class MhStorageEditorConfiguration extends MhSystemConfiguration { New: /** * Allow dimension visibility toggle? */ extend public bool allowDimensionVisibilityToggle(View view) { return false; } New: /** * Allow arrow visibility toggle? */ extend public bool allowArrowVisibilityToggle(View view) { return false; } New: /** * Dimension visibility toggle changed. */ extend public void dimensionVisibilityToggleChanged(bool state, View view) { if (Space space = view.?space) { mhStorageEditorDimensionTogglePutCached(space, value=state); for (s in space.snappers) mhUpdateEditorDimensionVisibility(s); } } New: /** * Arrow visibility toggle changed. */ extend public void arrowVisibilityToggleChanged(bool state, View view) { if (Space space = view.?space) { mhStorageEditorArrowTogglePutCached(space, value=state); insertArrowVessel(space); } } New: /** * Update snappers visibility. */ extend public void updateSnappersVisibility() { for (s in space.snappers) mhUpdateEditorDimensionVisibility(s); insertArrowVessel(space); } }
The dimensions toggle is visible by default for bay editor. The arrow toggle is visible by default for frame editor, and bay editor's 3D view.

Removed field str volumeId and replaced with a private field private symbol volumeId. Replaced methods str volId=(str id) with symbol volId=(symbol id) and str volId() with symbol volId().
public class AbsMezzLevelRectInsertAnimation extends DrawShapeRectAnimation { Old: public str volumeId; New: private symbol volumeId; Old: extend public str volId=(str id) { New: extend public symbol volId=(symbol id) { Old: extend public str volId() { New: extend public symbol volId() { }
Removed function void mezzInsertRails(APolyline2D poly, AbsMezzDecking{} deckings, Space space). Call function void mezzInsertRailGroup(APolyline2D poly, APolyline2D[] holes, AbsMezzDecking{} deckings, Space space) instead.
Removed: public bool dbg_verboseProfilerDump = false; Removed: public void repairBlocks() {
Removed enum that is not used anywhere in the base repository.
Removed: public enum featureDetail : field access {
The visibility of dropDownImage field has been altered, you will need to use setDropDownImage to change the image.
Old: public Image dropDownImage : copy=reference; New: private Image dropDownImage : copy=reference, public readable; New: final public void setDropDownImage(Image i)
This class has been removed. You can replace it with FaceliftToggle
Old: public class InfoTipToggle extends CheckBox { New: public class FaceliftToggle extends CheckBox {
The following interfaces in SelectLasso2DAnimation have been changed:
Old: extend public bool isTarget(Snapper s, APolyline2D pline=null, bool quickElim=true) { New: extend public bool isTarget(Snapper s, APolyline2D pline) {
The following interfaces in SelectLasso2DAnimation have been removed:
Removed: final public void appendTargets(line2D l) { Removed: extend public bool contained(Snapper s, APolyline2D pline=null) { Removed: extend public bool ridiculous(rect sb, APolyline2D pline) { Removed: extend public bool plausible(rect sb, APolyline2D pline) { Removed: extend public GeometricFinder[] getFinders(APolyline2D pline) { Removed: extend public int snapperBoundInPolyline(Snapper s, APolyline2D pline) { Removed: extend public int graphInPolyline(GraphPrimitive gp, APolyline2D pline, line2D e, bool oneUncontained, bool seen) {
Deprecated functions have been removed.
Old: public void removeOldCetQLParamsFromSnapper(Snapper z) : deprecated { New: public void removeCetQLParamsFromSnapper(Snapper z) {
Removed: public class FunkySelectionVisualizer extends SelectionVisualizer {
Made showLibHelpText return the constructed window.
Old: public void showLibHelpText(Window parent, str text="No help available in BETA version.", str title=null, str key=null, int width=300, PointI pos=null, symbol pkg=null) { New: public DialogWindow showLibHelpText(Window parent, str text="No help available in BETA version.", str title=null, str key=null, int width=300, PointI pos=null, symbol pkg=null) { Removed: public DialogWindow showLibHelpText2(str pkg="cm.std.tools", Window parent=null, str text="No help available in BETA version.", str key=null, PointI p=null) {
Added a bool suppressZeroFraction argument to the constructor.
Old: public constructor(symbol pkg, str key, str name, alignment textAlignment, distanceUnit unit, int precision1, distanceUnit unit2, int precision2, bool suppressZeroFraction, double arrowHSize, Class arrowHType, Class arrowHType2, double gap, double extLineExt, bool onlyPaperView=false, bool stackDims=false, Bool showDistanceUnit=null) { New: public constructor(symbol pkg, str key, str name, alignment textAlignment, distanceUnit unit, int precision1, distanceUnit unit2, int precision2, bool suppressZeroFraction, double arrowHSize, Class arrowHType, Class arrowHType2, double gap, double extLineExt, bool suppressZeroFeet=false, bool onlyPaperView=false, bool stackDims=false, Bool showDistanceUnit=null) {
Combined all 5 constructors into 1. The default argument values are the same as before in all cases except for the constructor with the bool real argument. There shouldn't have been any reason to use that constructor since "real" width lines have never been supported. But if you want to ensure the same behavior as before, specify widthStyle=lineWidthStyle.variable for any instance that previously set the bool real argument to any value.
In the majority of cases though, all that needs to be done is to add the argument hint for the width (e.g. LineType(.., .., w=5)).
Old: public constructor() { Old: public constructor(color lineColor) { Old: public constructor(color lineColor, lineStyle style, int width=0) { Old: public constructor(color lineColor, double width, bool real=false) { Old: public constructor(color lineColor, lineStyle style, lineWidthStyle widthStyle, double w) { New: public constructor(color lineColor=black, lineStyle style=lineStyle.solid, lineWidthStyle widthStyle=lineWidthStyle.unit, int w=0) {
Also consider if you should be using the LineType constructor at all. As long as the LineType instance does not need to be modified, it is recommended to get it using the lineType(..)-function instead, which returns a cached copy for improved performance.
Change the width argument from a double to an integer, which is what the value has always been converted to internally. If you have previously passed it a fractional value and is unsure what to replace it with, you can just cast it to an integer (e.g. myVar.int) to maintain the same behaviour as before.
Old: public str lineCacheKey(color c, lineStyle style, lineWidthStyle widthStyle, double width) : inline { New: public str lineCacheKey(color c, lineStyle style, lineWidthStyle widthStyle, int width) : inline { Old: public LineType lineType(color c, lineStyle style=lineStyle.solid, lineWidthStyle widthStyle=lineWidthStyle.unit, double width=0) { New: public LineType lineType(color c, lineStyle style=lineStyle.solid, lineWidthStyle widthStyle=lineWidthStyle.unit, int width=0) {
The interfaces to getStateContaining and getInfoContaining have been changed to allow bypassing the pkgStateCache:
Old: final public ExtensionState getStateContaining(symbol pkg) New: final public ExtensionState getStateContaining(symbol pkg, bool skipCache=false) Old: final public ExtensionInfo getInfoContaining(symbol pkg) New: final public ExtensionInfo getInfoContaining(symbol pkg, bool skipCache=false)
The constructor now requires you to specify the start point and the end point of the line, in world coordinates.
Removed: public constructor(pointF ipWC, int lineIndex) { Added: public constructor(pointF ipWC, pointF p0WC, pointF p1WC, int lineIndex) {
Renamed the atan functions that take 2 arguments to be correctly called atan2.
Old: public angle atan(double y, double x) : nonfglue = ang_atan2; New: public angle atan2(double y, double x) : nonfglue = ang_atan2; Old: public double atand(double y, double x) : nonfglue = ang_atan2d; New: public double atan2Rad(double y, double x) : nonfglue = ang_atan2d; Old: public double atanquick(double y, double x) : nonfglue = ang_qatan2d; New: public double quickAtan2Rad(double y, double x) : nonfglue = ang_qatan2d;
Renamed the atan functions that take 2 arguments to be correctly called atan2.
Old: public angle atan(float y, float x) : nonfglue = angF_atan2; New: public angle atan2(float y, float x) : nonfglue = angF_atan2; Old: public float atand(float y, float x) : nonfglue = angF_atan2f; New: public float atan2Rad(float y, float x) : nonfglue = angF_atan2f; Old: public float atanquick(float y, float x) : nonfglue = angF_qatan2f; New: public float quickAtan2Rad(float y, float x) : nonfglue = angF_qatan2f;
Moved classes AEVEventReciever,AEVButton and AEVDialog from cm.statistics.reporter.test to cm.statistics.reporter. This also moves the methods public void startAnalyticsEventViewer() and public void stopAnalyticsEventViewer().
Removed the classic library. Update references to the facelifted library or remove them.
Removed: public Library stdArchitecturalLibrary() {
Removed the classic library. Update references to the facelifted library or remove them.
Removed: public Library stdWallLibrary() {
Removed the classic library. Update references to the facelifted library or remove them.
Removed: public Library stdPaperToolsLibrary() { Removed: public class ViewportSnapperLimbVisibility extends LibraryLimbVisibility { Removed: public class XCLipLimbVisibility extends LibraryLimbVisibility {
Removed the classic library. Update references to the facelifted library or remove them.
Removed: public Library stdWallLibrary() {
Replaced the thickness field with a width and depth component.
Old: public double thickness; New: public double width; New: public double depth; Removed: public const DistanceRange pillarThicknessDomain(1cm, 100m);
Removed: extend public void drawGraphsLocal(Snapper snapper, LayerBuffer lb) {
Added caller eval to the testPackage(..) package-argument, which causes the package argument to be set from the call location rather than the function definition location. This means that if the function is called for example from the package "cm.core.dwg.test", it will now run all tests in that same package even if you don't pass any arguments to the function.
Old: public void testPackage(symbol pkg=#:package, bool verbose=false, bool hideErrors=false) { New: public void testPackage(symbol pkg=#:package : caller eval, bool verbose=false, bool hideErrors=false) { Removed: public void testPackage(symbol pkg=#:package : caller eval) {
For example, if you previously called the function like so:
testPackage(#:package, verbose=true);
You can now call it like this and it will still behave the same:
testPackage(verbose=true);
Some classes in getWindowInstruction.cm has been moved to their own files: See getParentWindowInstruction.cm and getChildInstruction.cm.
Two deprecated constructors have been removed:
Removed: public constructor(str windowKey, str outputKey, SrcRef src=#:src) { Removed: public constructor(Class windowClass, str outputKey, SrcRef src=#:src) {
Instead, use one of these constructors:
public constructor(str windowKey, str outputKey, bool ensureFound=true, bool ensureUnique=true, bool ensureValid=true, bool ensureVisible=true, SrcRef src=#:src) { public constructor(Class windowClass, str outputKey, bool ensureFound=true, bool ensureUnique=true, bool ensureValid=true, bool ensureVisible=true, SrcRef src=#:src) {
Two deprecated constructors have been removed:
Removed: public constructor(str windowKey, str parentKey, str outputKey, SrcRef src=#:src) { Removed: public constructor(Class windowClass, str parentKey, str outputKey, SrcRef src=#:src) {
Instead, use one of these constructors:
public constructor(str windowKey, str parentKey|, str outputKey, bool ensureFound=true, bool ensureUnique=true, bool ensureValid=true, bool ensureVisible=true, SrcRef src=#:src) { public constructor(Class windowClass, str parentKey|, str outputKey, bool ensureFound=true, bool ensureUnique=true, bool ensureValid=true, bool ensureVisible=true, SrcRef src=#:src) {
Changes that have been done:
DibImage instead of MemoryImage. For more details, check the run-time/behavior changes section.bool newSvgRenderer now defaults to true for icon loading functions.Old: public Image icon(str name, symbol key=#default, bool debug=false) Old: public Image icon(str name, symbol key=#default, bool newSvgRenderer=false, bool debug=false) New: public Image icon(str name, symbol key=#default, bool newSvgRenderer=true, bool debug=false) Old: public Image icon(str name, bool enabled, symbol key=#default) New: public Image icon(str name, bool enabled, symbol key=#default, bool newSvgRenderer=true) Old: public Image disabledIcon(str name, symbol key=#default) New: public Image disabledIcon(str name, symbol key=#default, bool newSvgRenderer=true) Old: public Image dibIcon(str name, symbol key=#default, bool debug=false) Old: public Image dibIcon(str name, symbol key=#default, bool newSvgRenderer=false, bool debug=false) New: public Image dibIcon(str name, symbol key=#default, bool newSvgRenderer=true, bool debug=false) Old: public Image disabledDibIcon(str name, symbol key=#default) New: public Image disabledDibIcon(str name, symbol key=#default, bool newSvgRenderer=true)
The following fields and methods have been removed:
public str->DibImage dibIconLookup(); final public Image getDib(str name, bool debug=false) final public Image getDib(str name, bool newSvgRenderer=false, bool debug=false) final public Image getDisabledDib(str name, bool debug=false)
The following methods have been updated:
Old: final public Image get(str name, bool debug=false) Old: final public Image get(str name, bool newSvgRenderer=false, bool debug=false) New: final public Image get(str name, bool newSvgRenderer=true, bool debug=false)
The following methods have been updated to remove bool dib=false:
Old: final public Image get(str name, symbol key, bool dib=false, bool debug=false) Old: final public Image get(str name, symbol key, bool dib=false, bool newSvgRenderer=false, bool debug=false) New: final public Image get(str name, symbol key, bool newSvgRenderer=true, bool debug=false) Old: final public Image getDisabled(str name, symbol key, bool dib=false) New: final public Image getDisabled(str name, symbol key)
Old: public constructor(Url imageFile, sizeI size=(-1, -1), SrcRef src=#:src) Old: public constructor(Url imageFile, bool newSvgRenderer, sizeI size=(-1, -1) New: public constructor(Url imageFile, bool newSvgRenderer=true, sizeI size=(-1, -1) Old: public SvgImage vectorImage(Url url, bool use=false, SrcRef src=#:src) Old: public SvgImage vectorImage(Url url, bool newSvgRenderer, bool use=false, SrcRef src=#:src) New: public SvgImage vectorImage(Url url, bool newSvgRenderer=true, bool use=false, SrcRef src=#:src)
The function showForeignWindow no longer restores the window when setting its visibility.
Use restoreForeignWindow if you want the old behavior of restoring the window.
Old: public void showForeignWindow2(mwnd hwnd) = win_showForeignWindow; New: public void showForeignWindow(mwnd hwnd) = win_showForeignWindow; Old: public void showForeignWindow(mwnd hwnd) = win_restoreForeignWindow; New: public void restoreForeignWindow(mwnd hwnd) = win_restoreForeignWindow;
The following functions have been removed.
public bool faceliftDeveloper() : deprecated { return staffan or prismDeveloper; } public bool isAlphaLegacy(char c) { return spellChecker.isAlpha(c); }
AppWindow
Old: final public pointI dropDownShow(pointI p, bool autoSize=true) New: final public pointI dropDownShow(pointI p, bool autoSize=true, bool enforceMinWidth=true)
Window
Old: extend public pointI showDropDownMenu(pointI p, bool pInScreenCoords=false, bool autoSize=true) New: extend public pointI showDropDownMenu(pointI p, bool pInScreenCoords=false, bool autoSize=true, bool enforceMinWidth=true)
We have added a new argument bool establishSocketConnection=false into the constructor.
Old: public constructor(str key, str url, int port=-1, bool launch=false, str label="CET", bool showPageTitle=false, bool showNavigation=true, bool alwaysOnTop=false, bool hideUrl=false, pointI initPos=(-1, -1), sizeI initSize=(-1, -1), bool resizable=false, sizeI minSize=(-1, -1), sizeI maxSize=(-1, -1), bool devMode=false, webViewCB msgCallback=null) New: public constructor(str key, str url, int port=-1, bool launch=false, str label="CET", bool showPageTitle=false, bool showNavigation=true, bool alwaysOnTop=false, bool hideUrl=false, pointI initPos=(-1, -1), sizeI initSize=(-1, -1), bool resizable=false, sizeI minSize=(-1, -1), sizeI maxSize=(-1, -1), bool devMode=false, webViewCB msgCallback=null, bool establishSocketConnection=false)
The sizeI size argument has been changed to int width.
Old: public constructor(Window parent, str message, Image image, str key=null, sizeI size=(0, 0), int internalMargin=7, Brush brush=ultraLightGrayBrush, FrameStyle frameStyle=lightGrayPenFrame, color textColor=black, color linkColor=primary600, color linkHoverColor=primary600, int textSize=12, str fontFace=null, function(Control button, str key):bool linkCallback=null, SrcRef src=#:src) { New: public constructor(Window parent, str message, Image image, str key=null, int width=0, int internalMargin=7, Brush brush=ultraLightGrayBrush, FrameStyle frameStyle=lightGrayPenFrame, color textColor=black, color linkColor=primary600, color linkHoverColor=primary600, int textSize=12, str fontFace=null, function(Control button, str key):bool linkCallback=null, SrcRef src=#:src) {
This MessageWindow constructor now takes in argument int width.
Old: public constructor(Window parent, str message, messageType msgType=messageType.undefined, str key=null, int internalMargin=7, function(Control button, str key):bool linkCallback=null, SrcRef src=#:src) { New: public constructor(Window parent, str message, messageType msgType=messageType.undefined, str key=null, int width=0, int internalMargin=7, function(Control button, str key):bool linkCallback=null, SrcRef src=#:src) {
statsMainExtensionPackage now accepts argument bool allowGuess to try guessing the main extension package via the provided package.
Old: public symbol statsMainExtensionPackage(symbol pkg) New: public symbol statsMainExtensionPackage(symbol pkg, bool allowGuess=false)
getMainExtensionPackage now accepts argument bool skipCache to allow bypassing cached results
Old: public symbol getMainExtensionPackage(symbol pkg) New: public symbol getMainExtensionPackage(symbol pkg, bool skipCache=false)
The following classes have been removed as film strip view functionality has been removed.
Removed: public class FilmStripView extends ThumbNailView { Removed: public class PreviewWindow extends SubWindow {
The following fields and methods have been removed in ExploreDialog
Removed: public PreviewWindow previewWin; Removed: extend public PreviewWindow buildPreviewWin() { Removed: extend public void refreshPreviewWin() { Removed: extend public void setPreviewContent(Image image=null, str label=null) { Removed: extend public void updatePreviewButtons(bool disablePrev, bool disableNext) { Removed: extend public sizeI previewImageSize() { Removed: extend public bool filmStripMode() {
Removed the classic library. Update references to the facelifted library or remove them.
Removed: public Library genericElectricalLibrary() { Old: public Library faceliftElectricalLibrary() { New: private Library faceliftElectricalLibrary() {
Removed the classic library. Update references to the facelifted library or remove them.
Removed: public Library classicStdLightsLibrary() { Old: public Library faceliftStdLightsLibrary() { New: private Library faceliftStdLightsLibrary() {
Removed the classic library. Update references to the facelifted library or remove them.
Removed: public Library medicalLibrary() { Old: public Library faceliftMedicalLibrary() { New: private Library faceliftMedicalLibrary() {
Removed the classic library. Update references to the facelifted library or remove them.
Removed: public Library stdPlantsLibrary() { Old: public Library faceliftPlantsLibrary() { New: private Library faceliftPlantsLibrary() {
The following interfaces will be removed as part of the Component Tab and Component Tab Creator EOL effort:
// Functions Removed: public void dcShowToolboxCreatorVendorChangeWarning(DataCatalog catalog)
// Functions Removed: public DcToolboxCreatorDialog dcToolboxCreatorDialog() Removed: public DcToolboxCreatorDialog dcShowToolboxCreatorDialog() Removed: public DcToolboxCreatorDialog dcShowToolboxCreatorDialog(bool setFocus) Removed: public void dcCloseToolboxCreatorDialog() // Classes Removed: public class DcToolboxCreatorDialog extends DsToolboxCreatorDialog Removed: public class DcAnimationTreeViewAnimationEnv extends DsDragAnimationEnv Removed: public class DcDataCatalogLimbEnv extends DsDataCatalogLimbEnv Removed: public class DcToolboxCreatorToolboxCards extends DsToolboxCreatorToolboxCards
// Classes Removed: public class DcProductCatalogToolboxProductReferencesEnv extends DcProductCatalogReferencesValidationEnv { Removed: public class DcProductCatalogToolboxReferencesEnv extends DcValidationEnv Removed: public class DcProductCatalogToolboxProductOptionsEnv extends DcValidationEnv
class DcProductLevelEditSubWindow
Removed: extend public void updateActivation()
class DcTableOfContentsSubWindow
// Field public NoteWindow noteWindow; // Methods Removed: extend public void openToolboxCreator() Removed: extend public void buildNoteWindow() Removed: extend public void updateNote()
class DcTableOfContentToolboxSubWindow
Removed: public DsButton toolboxCreatorBtn; Removed: extend public void updateActivation()
class DcTableOfContentsTreeView
Removed: public bool keyCode(Window originator, KeyCode keyCode) Removed: public bool acceptTVI(TreeViewItem item)
// Classes: Removed: public class DcTbOptionsValidationUndoOp extends DcUndoOp Removed: public class DcProductCatalogAddToolboxesUndoOp extends DcUndoOp Removed: public class DcProductCatalogRemoveToolboxesUndoOp extends DcProductCatalogAddToolboxesUndoOp
// Classes Removed: public class DcPsLayoutReferencesValidationEnv extends DcValidationEnv
// Classes Removed: public class DcCompTabValidationResult extends DcValidationResult Functions: Removed: public void dcNavigateToToolboxCreator() Removed: public void dcNavigateToToolboxCreatorCard(str code)
Added 2 new parameters to updateProductDD to flag that first/last product is selected.
Old: extend public void updateProductDD(bool updateCard=true) New: extend public void updateProductDD(bool updateCard=true, bool selFirstProd=false, bool selLastProd=false)
Added 2 new parameters to updateSelProd to flag that first/last product is selected.
Old: extend public void updateSelProd(int start) New: extend public void updateSelProd(int start, bool selFirstProd=false, bool selLastProd=false)
Added 1 new parameter to 'dcBuildAddProductTreeViewItem' to keep track of the additional product's parent product.
Old: public DcAddProductTreeViewItem dcBuildAddProductTreeViewItem(DsiAddProductRefType prod, CatalogTreeViewEnv env) New: public DcAddProductTreeViewItem dcBuildAddProductTreeViewItem(DsiAddProductRefType prod, CatalogTreeViewEnv env, DsProductType parentProd)