The Lazy Extensions (UltraLazyExtension) and lazy startup behavior have been around for a few releases, but in 13.5 some improvements and fixes have been made. Refer to the Lazy Extension Reference for more information on this system and migrating your extensions.
PanelFrameInsertAnimationG2 was written using the animation spawning to try and emulate the 'states' that the old animations had, but the implementation here was buggy and hacky, so it was redone from scratch and just implemented it's own state functionality so that there is more parity with the old animation, but also has all the support that G2 animations bring. Some other small bugs or odd behaviors were noted with the PanelFrame snapper and so some small changes were made as needed.
Some classes and methods associated with REDPicker3D have been updated to include a new default, optional parameter checkForPickSurface=false
to allow developer greater control over whether pick surfaces are detected during picking operations.
Note that the previous implementation implies a value of checkForPickSurface=true, while the new optional parameter defaults to checkForPickSurface=false to be consistent with other existing methods. Simply add or change the parameter to true to retain previous behavior.
New argument to differentiate between generic upload failures and failure due to storage being full.
//CollNotificationManager (collNotificationManager.cm) Old: extend public void showUploadFailNotification() New: extend public void showUploadFailNotification(bool storageFail=false)
The following changes have been made that affect the CM language, or how it compiles:
In 13.5, enum types automatically implement a toS function, unless the -toS property is specified on the declaration. The toS method on generated box classes will refer to the unboxed toS, so the toS output on enum box classes and their unboxed equivalents will now match (by default).
Thus, if you want to implement your own toS for an enum, all you need to do is add -toS to the enum declaration and write your own toS function.
public enum foo : field access { foo; bar; baz; }; /** * This is a trivial toS function so it can be removed in 13.5 */ public str toS(foo f) { switch (f) { case foo: return "foo"; case bar: return "bar"; case baz: return "baz"; } } public enum bar : field access, -toS { foo; bar; baz; }; /** * This is a non-trivial toS function; add the -toS property to the enum declaration */ public str toS(bar f) { switch (f) { case foo: return "bar: foo"; case bar: return "bar: bar"; case baz: return "bar: baz"; } }
The setCount function on sequences (such as int[]) is now considered "unsafe" and should not be used where alternative solutions are available.
Replaced deprecated controller assignedCollection field.
// Controller (alternativeCatalogsController.cm) Old: public int->AltCatsColl assignedCollection : deprecated; public str->AltCatsColl new_assignedCollection; New: public str->AltCatsColl assignedCollection;
deprecated alternativeCatalogsOption constructor, since its use could result in buggy behavior.
// Option (alternativeCatalogsOption.cm) Old: public constructor(str catalogCode, int portfolioId, str label) : deprecated { }
Removed deprecated alternativeCatalogsLimb constructor, since its use could result in buggy behavior.
// Library Limb (alternativeCatalogsLimb.cm) Old: public constructor(LibraryLimb parent, symbol pkg, str key, AltCatsController controller) : deprecated { }
The elevationG2 package has been moved from cm.abstract.materialHandling.tools.elevationG2 to cm.abstract.tools.elevationG2. As such, the Mh prefix has been dropped and classes, functions, and constants previously using this prefix have been renamed. In general, "mh" has been dropped from class names with a "G2" added at the end. The new prefix used in the package is "elev". For functions, globals, and constants, only "mh" was dropped with "elev" as the new prefix. If you were previously using classes or functions from cm.abstract.materialHandling.tools.elevationG2 and are getting a lot of undefined errors in your extension, please rename them to follow the new naming convention.
Examples (Not the full list):
// Classes Old: public class MhElevEnv New: public class ElevEnvG2 Old: public class MhElevAutoSnapperEnv New: public class ElevAutoSnapperEnvG2 Old: public class MhElevArrow New: public class ElevArrowG2 Old: public class MhElevArrowSnap New: public class ElevArrowSnapG2 Old: public class MhElevContentEditor New: public class ElevContentEditorG2 Old: public class MhElevContentSnapper New: public class ElevContentSnapperG2 Old: public class MhElevContentSnapperEnv New: public class ElevContentSnapperEnvG2 Old: public class MhElevDialog New: public class ElevDialogG2 Old: public class MhElevConnectType New: public class ElevConnectTypeG2 Old: public class MhElevTextSnapper New: public class ElevTextSnapperG2 Old: public class MhElevSpace New: public class ElevSpaceG2 Old: public class MhGElevArrow New: public class GElevArrowG2 Old: public class MhElevView2D New: public class ElevView2DG2 Old: public class MhElevArrowInsertAnimationG2 New: public class ElevArrowInsertAnimationG2 Old: public class MhElevAutoDimEnv New: public class ElevAutoDimEnvG2 Old: public class MhElevAutoTextEnv New: public class ElevAutoTextEnvG2 // Constants Old: public const str mhElevTextTypeKey New: public const str elevTextTypeKey Old: public const str mhElevDimTypeKey New: public const str elevDimTypeKey // Globals Old: public ConnectRule mhElevConnectRule; New: public ConnectRule elevConnectRule; // Functions Old: public Graph mhElevGraphFrom3D(Primitive3D scene, bool filterBelow0, bool mergeMeshes=false, RangeF sliceZ=null, LineType lt=null, Color fillColor=null, function(ATriMeshF[] meshes) cleanupFk=null) New: public Graph elevGraphFrom3D(Primitive3D scene, bool filterBelow0, bool mergeMeshes=false, RangeF sliceZ=null, LineType lt=null, Color fillColor=null, function(ATriMeshF[] meshes) cleanupFk=null)
// MhUndoOp Old: public constructor(Space space, SnapperRef xparent, Snapper xchild) New: public constructor(Space space, Snapper xparent, Snapper xchild) // MhConfigRef Old: public str customName; New: public bool isCustom; // MhCollisionAlternative Old: extend public void appendCollisionPrimitives(CollisionResolver resolver, Snapper z) New: extend public void appendCollisionPrimitives(CollisionResolver resolver, Snapper z, Snapper{} visited=null)
// MhCatalogAccess Old: extend public void putData(PropObj owner, Object data, str dataKey) New: extend public void putData(MhSnapper owner, Object data, str dataKey) Old: extend public Object get(PropObj owner, str valueKey, str dataKey) New: extend public Object get(MhSnapper owner, str valueKey, str dataKey) Old: extend public void put(PropObj owner, str valueKey, Object option, str dataKey) New: extend public void put(MhSnapper owner, str valueKey, Object option, str dataKey) Old: extend public double getDimension(PropObj owner, str dimensionKey, str dataKey) New: extend public double getDimension(MhSnapper owner, str dimensionKey, str dataKey) Old: extend public void putDimension(PropObj owner, str dimensionKey, double value, str dataKey) New: extend public void putDimension(MhSnapper owner, str dimensionKey, double value, str dataKey) Old: extend public box getBox(PropObj owner, point p0=point0, str strW="w", str strD="d", str strH="h", str dataKey="default") New: extend public box dataBound(MhSnapper owner, str dataKey, point p0=point0, str strW="w", str strD="d", str strH="h") Old: extend public SubSet getDomain(PropObj owner, str valueKey, str dataKey) New: extend public SubSet getDomain(MhSnapper owner, str valueKey, str dataKey) Old: extend public str styleNr(PropObj owner, str dataKey) New: extend public str styleNr(MhSnapper owner, str dataKey) Old: extend public str description(PropObj owner, str key, str dataKey) New: extend public str description(MhSnapper owner, str key, str dataKey) Old: extend public void ensureSettings(PropObj owner) New: extend public void ensureSettings(MhSnapper owner) Old: extend public PartsEnv parts(MhSnapper owner) New: extend public void appendParts(MhSnapper owner, str dataKey, PartsEnv env) Removed: extend public SymNode buildSym(PropObj owner, str dataKey="default", Object env=null) Removed: extend public Transform symTransform(PropObj owner, str dataKey="default", Object env=null) Removed: extend public void afterBuildSym(PropObj owner, str dataKey="default") Removed: extend public void invalidateSym(PropObj owner, str dataKey="default")
Old: public class BraceInfo New: public class MhBraceInfo // MhStorageConfigurationItem Old: extend public bool requiresPreviewRebuild(str key, Object value, Object previous) New: extend public bool requiresPreviewRebuild(str key, Object value, Object previous, Object propOwner) // unitLoadFunctions.cm Old: public UnitLoad findEqualUnitLoad(UnitLoad unitLoad) New: public UnitLoad findEqualUnitLoad(UnitLoad unitLoad, World w=null) // MhRowEntryLayout Old: public MhEngineConstructionEntry[] rowEntryPattern; New: public MhEngineEntry[] rowEntryPattern; Old: public MhEngineConstructionEntry startEntry; New: public MhEngineEntry startEntry; Old: public MhEngineConstructionEntry endEntry; New: public MhEngineEntry endEntry; Old: public constructor(MhEngineConstructionEntry[] rowEntryPattern, MhEngineConstructionEntry centerEntry=null, MhEngineConstructionEntry aisleEntry=null, MhEngineConstructionEntry startEntry=null, MhEngineConstructionEntry endEntry=null) New: public constructor(MhEngineEntry[] rowEntryPattern, MhEngineConstructionEntry centerEntry=null, MhEngineConstructionEntry aisleEntry=null, MhEngineEntry startEntry=null, MhEngineEntry endEntry=null) // MhRowEntryLayoutPopulator Old: extend public MhEngineConstructionEntry[] rowEntryPattern() New: extend public MhEngineEntry[] rowEntryPattern() Old: extend public MhEngineConstructionEntry startEntry() New: extend public MhEngineEntry startEntry() Old: extend public MhEngineConstructionEntry endEntry() New: extend public MhEngineEntry endEntry()
Double deep offset behavior has been removed. The bay shape will now account for the offset via the bottomStorage collision primitive.
Removed: public class MhDoubleDeepBackOffsetBehavior Removed: public mhLazyGlobal MhBehavior mhDoubleDeepBackOffsetBehavior
Double deep classification behavior has been removed. This behavior was previously needed because it was possible to disconnect one or more rows in a group and the behavior was used to keep track of the classification. It is no longer possible to do this disconnect so this behavior is no longer needed. The back classification is added during insert.
Removed: public class MhDoubleDeepBackClassificationBehavior Removed: public mhLazyGlobal MhBehavior mhDoubleDeepBackClassificationBehavior
Linking has been pushed to the end of an engine run for the sake of performance. However, certain behaviors such as frameValidCheck
relies on linking to be correct. This behavior was previously run during after export but now that is too early. Because of this, MhAfterEngineExportBehavior
has been split into two different behaviors: MhAfterEngineInitialExportBehavior
and MhAfterEngineFinalizeRunBehavior
.
If you were previously extendng from MhAfterEngineExportBehavior, by default, you should now use MhAfterEngineInitialExportBehavior
. MhAfterEngineFinalizeRunBehavior
should be used if linking is required for your behavior or if MhAfterEngineInitialExportBehavior
is too early.
Old: public class MhAfterEngineExportBehavior New: public class MhAfterEngineInitialExportBehavior New: public class MhAfterEngineFinalizeRunBehavior Old: public const symbol sAfterSystemExport New: public const symbol sAfterInitialExport New: public const symbol sAfterFinalizeRun Old: public class MhRowAfterEngineExportBehavior New: public class MhRowAfterEngineInitialExportBehavior // Methods previously used in MhAfterEngineExportBehavior. Please replace them with the relevant methods below. Old: extend public void afterExport(MhSystemCollection system) Old: extend public void afterExport(MhSnapper parent, MhSnapper owner) // MhAfterEngineInitialExportBehavior New: extend public void afterInitialExport(MhSystemCollection system) New: extend public void afterInitialExport(MhSnapper parent, MhSnapper owner) // MhAfterEngineFinalizeRunBehavior New: extend public void afterEngineFinalizeRun(MhSystemCollection system, Snapper{} exported) {} New: extend public void afterEngineFinalizeRun(MhSnapper parent, MhSnapper owner) // Old after export behaviors and their replacements. Old: public class MhRowAfterEngineExportBehavior New: public class MhRowAfterEngineInitialExportBehavior Old: public mhLazyGlobal MhBehavior mhRowAfterEngineExportBehavior New: public mhLazyGlobal MhBehavior mhRowAfterEngineInitialExportBehavior Old: public class MhRackingFrameAfterEngineExportBehavior New: public class MhRackingFrameAfterEngineFinalizeRunBehavior Old: public mhLazyGlobal MhBehavior mhRackingFrameAfterEngineExportBehavior New: public mhLazyGlobal MhBehavior mhRackingFrameAfterEngineFinalizeRunBehavior Old: public class MhAdjustChildAccessoriesAfterExportBehavior New: public class MhAdjustChildAccessoriesAfterInitialExportBehavior Old: public mhLazyGlobal MhBehavior mhAdjustChildAccessoriesAfterExportBehavior New: public mhLazyGlobal MhBehavior mhAdjustChildAccessoriesAfterInitialExportBehavior
The aisleOverhang
method is no longer needed. Overhangs are now calculated using engine entries.
Removed: extend public Double aisleOverhang(MhSnapper snapper, MhSnapperChangedEnv env)
Old: extend public double maxZ(MhEngineEntry levelParent, MhEngine engine, CollisionPrimitive levelPrim) New: extend public double maxZ(MhSnapper snapper)
The MhBayFrontArrow3DBehavior
used in the bay editor has been removed in favor of using vessels instead.
Removed: public class MhBayFrontArrow3DBehavior New: public class MhBayEditArrowVessel
A new appendCollisionPrimitives
method has been added to MhClearanceBehavior
and the old one has been deprecated. If you encounter issues with your unit loads missing clearances, then this is most likely the cause. Please update your code to use the new version.
// MhClearanceBehavior DEPRECATED: extend public void appendCollisionPrimitives(MhSnapperShape shape, Transform t, double elevation, CollisionPrimitive{} geos, LayerSet classification, Int clearanceSpecId=null, Object env=null) : deprecated {} Added: extend public void appendCollisionPrimitives(MhSnapperShape shape, Transform t, CollisionPrimitive{} geos, MhClearanceCollisionPrimEnv clearanceEnv, Object env=null)
The oldULBox
fields have been removed from certain functions. This was previously used to help calculate the overhang and positions for unit load population. However, the old unit load box didn't contain enough information. Engine entries are now being used to record the old unit load dimensions so these fields are not needed anymore.
// MhAisleUpdateWidthFunction Removed: public Box oldULBox; // MhAlignLoadsToAisleFunction Removed: public Box oldULBox;
MhSystemCollisionEntry
has been replaced with MhEngineSystemCollisionEntry
. MhBoxCollisionEntry
has been removed as it is no longer used.
Removed: public class MhSystemCollisionEntry Removed: public class MhBoxCollisionEntry Added: public class MhEngineSystemCollisionEntry // MhSystemEngineEnvironment Old: public MhSystemCollisionEntry{} collisionEntries; New: public MhEngineSystemCollisionEntry{} collisionEntries; Old: extend public MhSystemCollisionEntry operator<<(MhSystemCollisionEntry be) New: extend public MhEngineSystemCollisionEntry operator<<(MhEngineSystemCollisionEntry be)
Old: extend public MhEngineConstructionEntry createLevel(MhEngineEntry[] children, MhEngineSnapperEntry newEntry, double z) New: extend public MhEngineEntry createLevel(MhEngineSnapperEntry lastEntry, double z)
MhFixedStepPrimPopulator
has been removed because it was too unit load specific and we want to avoid having to use a specific populator in one case, and another specific populator in another case. You should instead use MhStepperPopulator
with MhPrimPopulatorStepper
as the stepper. This way, we have a generic populator that covers most cases. A useFixedStep
field and argument in the constructor has been added to handle the case of MhFixedStepPrimPopulator
. A limitingLayer has also been added to the constructors to give more control. The limiting layer is to have 1 prim on the start and 1 (optional) prim at the end of the populateBox
, so when you start the first step, you are actually resolving against the start prim, and last step against the end.
MhUnitLoadStepPrimPopulator
and MhUnitLoadFixedStepPrimPopulator2
have also been deprecated.
Removed: public class MhFixedStepPrimPopulator Deprecated: public class MhUnitLoadStepPrimPopulator extends MhPopulator : deprecated Deprecated: public class MhUnitLoadFixedStepPrimPopulator2 extends MhPopulator : deprecated // MhPrimPopulatorStepper /** * Use fixed step. * Use this if you always have the same step distance. * Currently used for constructional functions, when all entries are same size. * Don't use this if you want each step to check against additional prim. */ Added: public bool useFixedStep; /** * Fixed step point. * Only used if useFixedStep is true. */ Added: private Point _fixedStepPoint; Added: public constructor(CollisionPrimitive startPrim, CollisionPrimitive endPrim=null, CollisionPrimitive additionalPrim=null, bool useFixedStep=false) Added: public constructor(box toPopulateBox, Layer limitingLayer, vector v, CollisionPrimitive additionalPrim=null, bool useFixedStep=false)
The updateFlueGap
method has been removed from mhLevelShape
. Please use the updateFlueGap
method in MhLoadToLoadDistanceBehavior
instead.
Removed: extend public void updateFlueGap(MhClearanceSpec oldSpec, MhClearanceSpec newSpec)
// MhSiloShape Old: extend public void buildStructure(MhSnapper[] rows) New: extend public void buildStructure(MhSnapper[] rows, MhEngine engine=null) Old: extend public void calculateStructurePositions(MhSnapper[] rows) New: extend public void calculateStructurePositions(MhSnapper[] rows, MhEngine engine=null)
// MhRackingBayElevAutoSnapperEnvBehavior Old: extend public void appendAutoRightSideDims(MhSnapper bay, str key, point floorP0, double dim, UserTextStyle ts, UserDimensionStyle ds, MhElevAutoSnapperEnv[] res) New: extend public void appendAutoRightSideDims(MhSnapper bay, str key, ElevArrowG2 arrow, point floorP0, double dim, UserTextStyle ts, UserDimensionStyle ds, ElevAutoSnapperEnvG2[] res) Old: extend public void appendAutoElevYDims(str key, range[] rs, point start, double dim, UserTextStyle ts, UserDimensionStyle ds, MhElevAutoSnapperEnv[] res) New: extend public void appendAutoElevYDims(str key, MhElevArrow arrow, range[] rs, point start, double dim, UserTextStyle ts, UserDimensionStyle ds, MhElevAutoSnapperEnv[] res) // MhBracingBehavior Old: extend public double bracingH(MhSnapper owner) New: extend public double bracingH(MhSnapper owner, MhBraceInfo brace) Old: extend public double braceLength(MhSnapper owner, box b) New: extend public double braceLength(MhSnapper owner, box b, MhBraceInfo brace) Old: extend public line generateLine(MhSnapper owner, line2D l, box b) New: extend public line generateLine(MhSnapper owner, MhBraceInfo brace, line2D l, box b) Old: extend public line[] braceLines(CoreObject owner) New: extend public <MhBraceInfo[], line[]> braceLines(CoreObject owner) Old: extend public SymNode braceSym(line l, CoreObject owner) New: extend public SymNode braceSym(MhBraceInfo brace, line l, CoreObject owner) Old: extend public Primitive3D bar3D(MhSnapper owner, FetchEnv3D env, line ln) New: extend public Primitive3D bar3D(MhSnapper owner, FetchEnv3D env, MhBraceInfo br, line ln)
// MhStorageEditorConfiguration Old: extend public bool appendNewSnappers() New: extend public Snapper{} generateDefaultSnappers(MhStorageConfiguration config) // MhStorageEditorDialog Old: extend public void updateContainerViews() New: extend public void updateContainerViews(bool zoom=false)
Bay editor package has been moved to cm.abstract.materialHandling.storage.tools.editor.bay
. If you see complaints about MhBayEditConfiguration
or similar being undefined, make sure to include the new package in your package.cm.
highlightedPartTagCategory, highlightedPartTag and tagToBeUsedAtInsert are now all changed from globals to getter and setter functions that takes a World argument.
The reason for the change is to store the parttag on the world instead of globally to prevent memory leaks on new drawing.
old: public PartTagCategory highlightedPartTagCategory; /** * Highlighted tag category (selected in tagging dialog). */ new: public PartTagCategory highlightedPartTagCategory(World world) { return world.?getCached("highlightedPartTagCategory").?PartTagCategory; } new: public void setHighlightedPartTagCategory(World world, PartTagCategory tag) { world.?putCached("highlightedPartTagCategory", tag); } old: public PartTag highlightedPartTag; /** * Highlighted tag (selected in tagging dialog). */ new: public PartTag highlightedPartTag(World world) { return world.?getCached("highlightedPartTag").?PartTag; } new: public void setHighlightedPartTag(World world, PartTag tag) { world.?putCached("highlightedPartTag", tag); } old: public PartTag tagToBeUsedAtInsert; /** * Tag to be used at insert (selected in tagging dialog). */ new: public PartTag tagToBeUsedAtInsert(World world) { return world.?getCached("tagToBeUsedAtInsert").?PartTag; } new: public void setTagToBeUsedAtInsert(World world, PartTag tag) { world.?putCached("tagToBeUsedAtInsert", tag); }
Optimization of primitive move command to just change the 'pos' on the transform instead of creating a new transform.
Added: public Primitive3D unsafeFastMove(vectorF v); Added: public Primitive3D unsafeFastMove(vector v); Added: public Primitive3D unsafeFastMove(vector2D v);
The methods to handle this and core3D package now uses these method for move(..).
The following method in CorePropObj has been deprecated since 12.5 and is now removed:
Removed: extend public void orderFactoryProperties(CoreProperties properties) Use: extend public void postBuildOrderProperties(PropertyOrder order, CoreProperties properties)
Traditionally the attributes of PropInputSettings and PropDefs have always been sync-ed during the building of core properties G2. This has been changed in 13.5 so that the attributes you provide to your PropInputSettings will no longer be copied over to your propDef's attribute set, to better separate the responsibilities between the two concepts.
If you previously have #symDef defined as an attribute in your propDef's PropInputSetting, consider putting it directly in your propDef instead. With the props syntax you could also define it as below to achieve the same result:
/** * Props */ public props { "w" : sym=true; }
However, we still provide some public methods to access the different attributes - you may refer to the method headers for information:
// cm/props/advanced/preCorePropObj.cm public symbol{} allDefAttributes(PropObj this, PropDef def) public str->Object getPropsWithDefAttribute(PropObj this, symbol attr) public symbol{} getSettingAttributes(PropObj this, PropDef def, Object env=null)
Added PriceChangeEnv ( cm/core/calculation.cm ) affecting the following:
//Package: cm.core.calc Old: public bool refreshArticleViews(World world, bool validate, function():bool interrupt, bool force) New: public bool refreshArticleViews(World world, bool validate, PriceChangeEnv env) //Package: cm.core.itemTag Old: public bool updateWorldItemTags(World world, bool validate, function():bool interrupt, bool force) New: public bool updateWorldItemTags(World world, bool validate, PriceChangeEnv env) //Package: cm.core Old: public alias priceChangedFun = (function(World world, bool validate, function():bool interruptget, bool force):bool) New: public alias priceChangedFun = (function(World world, bool validate, PriceChangeEnv env):bool) Old: public bool rebuildNativePartList(World world, bool validate, function():bool interrupt, bool force) New: public bool rebuildNativePartList(World world, bool validate, PriceChangeEnv env)
cm.import.graphviz has been deprecated and removed - it has never compiled properly and is missing a DLL.
Cleanup of legend align classes to sync them up with core Align. Also made them public instead of private. Commit - 3cb10f15
The aisleSpacerPopulate
function calls have been moved to materialHandling/storage/racking/ package since MhSpacerPopulateFunction
is defined there. This also means we now have new intermediary classes. The aisleSpacerPopulate
calls have been moved from the parents to these new classes.
New: public class MhRackFlueGapRowEngineBehavior extends MhFlueGapRowEngineBehavior New: public class MhRackAisleRowEngineBehavior extends MhAisleRowEngineBehavior New; public class MhRackBayRowStretchEngineBehavior extends MhBayRowStretchEngineBehavior New: public class MhRackBayRowEngineBehavior extends MhBayRowEngineBehavior
MhRowChildSelectionBehavior
has been added to several spawners in the abstract level such as in MhRackFrameSpawner
and MhFrameSpawner
. If you have added your own selection behavior to your spawner and are getting the message below, then this is most likely the cause.
Trying to have 2 behaviors with the same key: selection
This error can cause your snappers to not be exported. To resolve this, you could either remove your own selection behavior if MhRowChildSelectionBehavior
handles your case for you, or you could exclude mhRowChildSelectionBehavior
from your spawner's customOtherBehaviors
and keep your own selection behavior or even extend from MhRowChildSelectionBehavior
.
The clearanceSpecId prop has been removed from MhClearanceCompartmentConfigurationItem
. You can get the clearance spec using the existing "clearanceSpec"
prop. Any code trying to get the clearanceSpecId
from the config should be updated to get the clearanceSpec
instead.
// Examples: Old: currentConfig.clearanceSpecId(); New: currentConfig.clearanceSpec(); Old: config.getValue("clearanceSpecId"); New: config.getValue("clearanceSpec");
The following classes and methods associated with REDPicker3D have been updated to include a new default, optional parameter checkForPickSurface=false
to allow developer greater control over whether pick surfaces are detected during picking operations.
Please note that the previous implementation implies a value of checkForPickSurface=true, while the new optional parameter defaults to checkForPickSurface=false to be consistent with other existing methods. Simply add or change the parameter to true to retain previous behavior.
REDPicker3D
removed: extend public REDPick pickShape(REDShape shape, Object z, lineF ln, angle coneAngle=0deg, pointF cameraLoc=pointF()) { added: extend public REDPick pickShape(REDShape shape, Object z, lineF ln, angle coneAngle=0deg, pointF cameraLoc=pointF(), bool checkForPickSurface=false) { removed: extend public PickIntersection3D[] pick(line ln, bool visible=true, bool findPickedType=false, Object[] objectsToPickFrom=null, bool allowRemoveClipped=true) { added: extend public PickIntersection3D[] pick(line ln, bool visible=true, bool findPickedType=false, Object[] objectsToPickFrom=null, bool allowRemoveClipped=true, bool checkForPickSurface=false) {
your propDef’s attribute set,
removed: extend public PickIntersection3D[] envPick(FindObjectsEnv env, line ln, bool visible=true, bool findPickedType=false, Object[] objectsToPickFrom=null, ClassSubSet subset=null) { added: extend public PickIntersection3D[] envPick(FindObjectsEnv env, line ln, bool visible=true, bool findPickedType=false, Object[] objectsToPickFrom=null, ClassSubSet subset=null, bool checkForPickSurface=false) {
removed: extend public PickIntersection3D[] envPick(FindObjectsEnv env, ClassSubSet subset=null) { added: extend public PickIntersection3D[] envPick(FindObjectsEnv env, ClassSubSet subset=null, bool checkForPickSurface=false) {
In 13.5, all newly saved .cmScheme files will have 2 additional suffixes appended to the filename by default:
Scheme Group name Extension name (a.k.a. systemName) The main reason behind this is to have a clearer identifier in the scheme filename to indicate which manufacturer and extension the scheme comes from.
Take Fika Scheme as example:
Output filename when saved:
added: extend public str groupAbbreviation() { added: extend public str systemNameAbbreviation() {
Updated hash methods for box, boxF, line, line2D, lineF, lineF2D, plane, planeF, pointI, rectl and sizel to avoid hash collisions.
old: export inline int hash(box& z, double precision=1e-6) { return (hash(z.p0, precision) ^ (4 << hash(z.p1, precision))); } new: export inline int hash(box& z, double precision=1e-6) { return (hash(z.p0, precision) ^ rotateRight(hash(z.p1, precision), 4)); }