cm.abstract

BasicLegendSnapper

Cleanup of legend align classes to sync them up with core Align. Also made them public instead of private. Commit - 3cb10f15

cm.abstract.materialHandling

Aisle spacer changes

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

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

Row child selection behavior

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

   Trying to have 2 behaviors with the same key: selection

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

Removed "clearanceSpecId" prop from Config Item

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

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

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

cm.abstract.office

Panel Frames

  • Rewrite PanelFrameInsertAnimationG2 to not spawn other animations to emulate the state behavior of old animations.
  • Return true from XXXPanelStretchEnv only if width was actually changed.
  • PanelFrame now returns isTMountable() in allowAttach() when a PTransformSnapPoint from a PanelFrame is snapping to a ConnectLine on another PanelFrame.

Worksurface

  • Changed the material used for the AOWksfSelectSupportForRemovalVessel from redPlasticMaterial3D to intenseRedMaterial3D
  • Added a method for the undo step description in abstract/office/legacy/worksurfaceTool3DAnimation.cm

cm.core

cm.core

Pick Shape Changes

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,

REDCorePicker3D

    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) {

View3D

    removed: extend public PickIntersection3D[] envPick(FindObjectsEnv env, ClassSubSet subset=null) {
    added: extend public PickIntersection3D[] envPick(FindObjectsEnv env, ClassSubSet subset=null, bool checkForPickSurface=false) {

PropsScheme 13.5 changes

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:

  • Fika Scheme is under Group "FAM"
  • Fika Scheme's extension name is "Fika"
  • User created a new scheme labelled as "MyFikaScheme"

Output filename when saved:

  • MyFikaScheme.FAM.Fika.cmScheme Some extensions might have slightly lengthy group or extension names, and it might not look too good when they are appended as part of filename. For this reason, we have added new methods in PropsScheme class to allow customization on the group and extension naming for filename:

cm/core/propsScheme/propsScheme.cm

added: extend public str groupAbbreviation() {
added: extend public str systemNameAbbreviation() {

Updates to dll.geometry

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));
  }