Compile Time Changes

cm.abstract.dataSymInterface

// Class: cm.abstract.dataSymInterface.DsiSelOptionEnv 
Deprecated: public bool propagateStretch; 
Deprecated: public bool propagateStretchAbsValue;  

// Class: cm.abstract.dataSymInterface.catalog.DsMeasureParamType 
Deprecated: extend public str{} stretchMeasureParams() { 
Deprecated: extend public str{} stretchMeasureParams=(str{} stretchMeasureParams) {
Deprecated: extend public void appendStretchMeasureParam(str measureParam) {
Deprecated: extend public bool removeStretchMeasureParam(str measureParam) {

Json-functionality in DsiPData has been refactored into a separate class called DsiPDataJsonInterface, and is available by calling .jsonInterface() on the DsiPData-object.

Example:

Old: dsiPData.toJson();
New: dsiPData.jsonInterface.toJson();

cm.abstract.dataSymbol

// Class: cm.abstract.dataSymbol.DsSyncGroupContainer 
Old: extend public bool syncOptions(DsPData target,                                     
                                    str matchingSyncGroupId=null,                                     
                                   str{} matchingPropKeys=null,                                     
                                   str{} visited=null,                                     
                                   bool recursive=true,                                     
                                   Object env=null) { 
New: extend public bool syncOptions(DsPData target,                                     
                                   str matchingSyncGroupId=null,                                     
                                   str{} matchingPropKeys=null,                                     
                                   str{} visited=null,                                     
                                   str{} visitedSyncGroups=null,                                     
                                   bool recursive=true,                                     
                                   Object env=null) {

// Class: cm.abstract.dataSymbol.DsPData 
Deprecated: public str->(str->(< double, double>)) propagateStretchInfo: copy=null, stream=null; 
Deprecated: extend public void clearPropagateStretchInfo()  

// Package: cm.abstract.dataSymbol.propDefs 
Deprecated: private void propagateStretch(DsPData data, PreCorePropObj owner, SFeature feature, double value, double delta, DsiSelOModifyEnv env) {

Fixed a bug with DsMaterialLimb where the filter wouldn't work due to the limbs not being fully built.

cm.abstract.dataSymbol.ui

Removed: public class DsPreviewSnapperGLView3D

cm.abstract.industry

The following class and interface related to it have been removed

Removed: public class IndSoulGLView3D

cm.abstract.kitchen.whitegoodsgenerator

Legacy package that has been removed.

cm.abstract.material

Added support for MaterialTreeViewItem in appendItemIfPassedFilter() on AbsMaterialDialog.

cm.abstract.office

  • Pulled worksurface snapping animation properties out of G2 animations.
    • These are now added by the worksurface itself.
    • There are constants made for the str keys to access the values
      • See cm/abstract/office/header.cm
  • Removed PMSifExport class
    • This class was empty after the introduction of AOSifExport with 12.0
  • The function getPickSurface() (cm/abstract/office/functions.cm) now takes in an optional Space argument.
  • The global variables for Worksurface snapping properties have been renamed
    • gCurrentWorksurfaceConnectAutoMode -> gWksfConnectAutoMode
    • gCurrentWorksurfaceConnectSide -> gWksfConnectSide
    • gCurrentWorksurfaceConnectSpecificType -> gWksfConnectType
  • Added support of G2 Properties in the OfficeSnapperManagerDialog
    • This will automatically be used if the preview snapper for the dialog returns true for usingG2()
    • There is a new group box and sub window for them where the old in dialog quick properties would go.
  • Made the _w, _d, _h, and _overrideW fields public on PanelFrame -This was a small change to allow for people to actually override the setters/getters for those fields.
    • Would like to take a look at changing how we manage dimensions for PanelFrame in the future.
  • Removed most of the code from pickedUp() since it didn't seem to ever get hit.
    • For the same reasons, the code from `tryAttachJunctionFromAnimation()`` was removed.
  • PfSnapClickAnimation was moved to its own file cm/abstract/office/pfSnapclickAnimation.cm
  • We now return true from trySnapToDeskingSystem() on WorksurfaceSnapping ` This was to fix an issue where other snapping methods wouldn't get hit in some cases.
  • Added additional method to AOMultiPData to get str->Graph and str->Primitive3D maps for graphics from its DsPDatas.

The following class and interfaces related to it has been removed

Removed: public class OfficeSnapperManagerGLView3D

cm.abstract.revHistory

// Class: cm.abstract.revHistory.RevHData
Old: extend public Snapper[] affectedSnappers(World world)
New: extend public Snapper[] affectedSnappers()

Old: extend public void append(Snapper z, RevHItem item)
New: extend public void append(RevHItem item)

Old: extend public void appendNew(Snapper z)
New: extend public void appendNew()

Old: extend public void removeItem(int idx, Snapper snapper=null)
New: extend public void removeItem(int idx)

// Class: cm.abstract.revHistory.RevHItem
Old: extend public void setValue(RevHData data, str key, str v)
New: extend public void setValue(str key, str v)

cm.application

// Class: cm.application.PaperSelectionPanel
Old: final public void updateNewAndDeleteButtons(bool refresh=true)
New: final public void updateDeleteButtons(bool refresh=true)

Old: final public void updateNewLoadCopyButtons(bool refresh=true)
New: final public void updateNewLoadCopySaveButtons(bool refresh=true)

cm.core

// Class: cm.core.Snapper
Removed: private LayerSet systemVolumeLayer : public readable, copy=reference, ignore modify notice
Removed: private LayerSet userVolumeLayer : public readable, copy=reference, ignore modify notice
Removed: private symbol attachedSpaceVolume : public readable, ignore modify notice
Removed: private Guid _chunkId
Add: private CollInfo _collInfo : ignore modify notice;
// Class: cm.core.Animation
Removed: extend public bool allowIdleRepoValidation() : deprecated
// Class: cm.core.World
Add: extend public bool isCollWorldG3()

_chunkId has been moved to the CollInfo object.

// Class: cm.core.Entity
Removed: public symbol sectionIdG2 : ignore modify notice;
Removed: public symbol sectionParentIdG2;

Add: extend public symbol sectionIdG2()
Add: extend public symbol sectionIdG2=(symbol id)

Add: extend public symbol sectionParentIdG2()
Add: extend public symbol sectionParentIdG2=(symbol id)

These removed fields have been moved to methods and should be implemented in concrete subclasses. Snapper already implements these methods.

// Class: cm.core.Space
Removed: private symbol _sectionIdG2

// Class: cm.core.AlternativeDialog
Old: final private bool inCollWorldG2()
New: final private bool inCollWorld()

// Class: cm.core.EventViewer
Removed: extend public bool contains(Object z)
Removed: extend public Object info(symbol key, Object z=null, Object env=null)
Removed: extend public CoreObject{} snappers()

New class for in dialog core properties in - cm/core/inDialogCoreProperties.cm - cm/core/inDialogCorePropertiesWindow.cm

The core properties classes has been renamed. The class AbstractPropertiesFactory has been renamed to CoreProperties and the class AbstractPropertyFactory has been renamed to CoreProperty. Due to these name changes all method/function parameters in core classes has also been renamed to be consistent with the new naming.

CoreProperties parameters are now named 'properties'. CoreProperty parameters are now named 'property'.

The AbstractPropertiesFactory classes has been renamed and the class hierarchy has been restructured.

The following class name changes has been made to what used to be AbstractPropertiesFactory classes.

Old: public class AbstractPropertiesFactory
New: public class CoreProperties

Old: public class PropertiesFactory
New: public class CoreAnimationProperties

Old: public class QuickPropertiesFactory
New: public class CoreQuickProperties

Old: public class SpaceVesselPropertiesFactory
New: public class SpaceVesselProperties

Old: public class PropsSchemePropertiesFactory
New: public class PropsSchemeProperties

The old class hierarchy

 AbstractPropertiesFactory  --  cm.core
 |---PropertiesFactory
 |   |---DsCoreInWindowPropertiesFactory
 |   |   |---PropertiesWindowFactory
 |   |---DsCoreMemBtnPropertiesFactory
 |   |---PropsSchemePropertiesFactory
 |   |---QuickPropertiesFactory
 |   |   |---SpaceVesselPropertiesFactory
 |   |---UnitLoadPropertiesFactory

Has been turned into the new class hierarchy

CoreProperties  --  cm.core
|---CoreAnimationProperties
|---CoreQuickProperties
|   |---SpaceVesselProperties
|---DsCoreInWindowPropertiesFactory
|   |---PropertiesWindowFactory
|---DsCoreMemBtnPropertiesFactory
|---PropsSchemeProperties
|---UnitLoadPropertiesFactory

Interface changes

// Class: CoreProperties

Old: public PropObj owner : stream=null, copy=null;
New: public CorePropObj owner : stream=null, copy=null;

Old: public str factoryKey;
New: public str propertiesKey;

Old: public AbstractPropertyFactory[] propertyFactories;
New: public CoreProperty[] orderedProperties;

Old: public constructor(Window parent, PropObj owner, str->Object args=null);
New: public constructor(Window parent, CorePropObj owner, str->Object args=null);

Old: public void buildProperties(PropObj owner, bool finalize=true, symbol{} attributes=null,
                                 str{} excludeProps=null, str->Object args=null);
New: public void buildProperties(PreCorePropObj z, bool finalize=true, symbol{} attributes=null,
                                 BuildPropertiesEnv env=null, str->Object args=null);

Old: public void addFactoryToVesselInvalidate(AbstractPropertyFactory property);
New: public void addPropertyToVesselInvalidate(CoreProperty property);

Old: public void updateAuxillaryFactoryData(AbstractPropertyFactory property);
New: public void updateAuxillaryPropertyData(CoreProperty property);

The AbstractPropertyFactory classes has been renamed.

Old: public class AbstractPropertyFactory
New: public class CoreProperty

Old: public class CheckBoxPropertyFactory
New: public class CheckBoxCoreProperty

Old: public class ButtonPropertyFactory
New: public class ButtonCoreProperty

Old: public class DisplayPropertyFactory
New: public class DisplayCoreProperty

Old: public class ButtonsPropertyFactory
New: public class ButtonsCoreProperty

Old: public class ListPropertyFactory
New: public class ListCoreProperty

Old: public class InputPropertyFactory
New: public class InputCoreProperty

Old: public class SliderPropertyFactory
New: public class SliderCoreProperty

Old: public class ColorButtonPropertyFactory
New: public class ColorButtonCoreProperty

Old: public class ComboPropertyFactory
New: public class ComboCoreProperty

Old: public class SimpleMultiLineInputFactory
New: public class SimpleMultiLineInputProperty

Interface changes

// Class: CoreProperty
Old: public PropertiesFactory propertiesFactory;
New: public CoreProperties properties;

Old: public PropObj owner : copy=null, stream=null;
New: public PreCorePropObj owner : copy=null, stream=null;

Old: public constructor(PropertiesFactory factory, PropObj owner, str key, Object label=null,
                        Object domain=null, Object value=null, Object defaultValue=null,
                        class Object classType=null,
                        bool lockable=false,
                        symbol{} vesselTags=null,
                        str->Object args=null, Object env=null);

New: public constructor(CoreProperties properties, PreCorePropObj owner, str key, Object label=null,
                        Object domain=null, Object value=null, Object defaultValue=null,
                        class Object classType=null,
                        bool lockable=false,
                        symbol{} vesselTags=null,
                        str->Object args=null, Object env=null);

Old: public constructor(PropertiesFactory factory, PropObj owner, Object env);
New: public constructor(CoreProperties properties, PreCorePropObj owner, Object env);

Removed: public Object env();
Use: public PropInputSetting inputSetting();

Removed: public Object value=(Object v);
Use: public Object setValue(Object v, Object env=null);

The AbstractPropertiesUI classes has been renamed.

Old: public class AbstractPropertiesUI
New: public class CorePropertiesWindow

Old: public class QuickPropertiesUI
New: public class CoreQuickPropertiesWindow

Old: public class AbstractPropertiesUIDragEnv
New: public class CorePropertiesWindowDragEnv

Old: public class QuickPropertiesUIDragEnv
New: public class CoreQuickPropertiesWindowDragEnv

The following changes has been made to PropInputSetting.

// Class: PropertyInputSetting
Old: public function(PropertiesFactory factory, PropObj owner, Object env):AbstractPropertyFactory createProp;
New: public function(CoreProperties properties, PreCorePropObj owner, Object env):CoreProperty createProp;

This class PropInputSettingOrderNode has been removed. Since version 12.0 it only carried the group index. Set the index directly on the PropInputSetting instead.

The following changes has been made to the core properties protocol in PreCorePropObj.

// Class: PreCorePropObj
Deprecated: public bool visibleInFactory(str key, PropObj owner, symbol{} attributes=null);
Use: public bool visibleInProperties(str key, PropObj owner, symbol{} attributes=null);

The following interface changes has been made to CorePropObj.

// Class: CorePropObj
Deprecated: public void orderFactoryProperties(PropertyOrder order, CoreProperties properties);
Use: public void postBuildOrderProperties(PropertyOrder order, CoreProperties properties);

Old: extend public void additionalCorePropertyObjects(PreCorePropObj[] objs)
New: extend public void additionalCorePropertyObjects(PreCorePropObj[] objs, symbol{} attributes)

The following classes and interfaces related to them have been removed

Removed: public class GLView3D
Removed: public class GLPreview3D
Removed: public class ComboView3D
Removed: public class SnapperRepository3D
Removed: public class SnapperRepositoryCache3D

renderingHiddenLines have been removed, the affected interfaces have been adjusted to not use it.

Removed: public bool renderingHiddenLine

cm.core.block

// Functions
Add: public bool hasBlock(Snapper{} snappers)
// Class: cm.core.block.Block
Add: extend public bool shouldRemoveBlockSpace()
Add: extend public bool allowExistWithoutOwners()
Add: extend public symbol sectionIdG3()
Add: extend public bool isCollBlockG3()
Add: extend public bool isCollSharedG3()
Add: extend public bool isCollCommittedSharedG3()
Add: extend public void updateCollBlockAfterAppendG3(Snapper appended)
Add: extend public void updateCollBlockAfterRemoveG3(Snapper removed)
// Class: cm.core.block.BlockStreamData
Add: public symbol sectionIdG3;
Add: public collBlockSharedStateG3 collSharedStateG3 = collBlockSharedStateG3.notShared;
Add: extend public bool isCollSharedG3()
// Class: cm.core.block.BlockSpace
Add: public collBlockSharedStateG3 collSharedStateG3 = collBlockSharedStateG3.notShared;
Add: extend public void propagateSectionIdG3()
Add: extend public bool isCollSharedG3()
Add: extend public bool isCollCommittedSharedG3()
Add: extend public void collShareG3(symbol sharedId, collBlockSharedStateG3 sharedState, bool propagate=true)
Add: extend public void collUnshareG3(symbol normalId, bool propagate=true)
// Class: cm.core.block.BlockTreeViewItem
Add: extend public bool allowExplodeBlock()

cm.core.calc

// Functions:
Add: public void validateCurrentArticleView(Space space)
Add: public void updateCalculationArea()
Add: public void updateCalculationDialogCaption()
// Class: cm.core.calc.CalculationView
Add: extend public void notifyModified()
// Class: cm.core.calc.PartColumnTool
Add: extend public bool modifiesView()

cm.core.category

// Functions:
Add: public CustomCategoryRecord registerCustomCategory(World world, CustomCategoryRecord category, symbol parent)
Add: public void saveCustomCategories(World world)

cm.core.lightworks

The package cm.core.lightworks has been removed.

cm.core.partTag

// Functions:
New: public PartTag getPartTag(World world, str uid)
New: public void removePartTag(World world, str uid)
New: public PartTagCategory getPartTagCategory(World world, str uid)
New: public void removePartTagCategory(World world, str uid)
New: public void removePartTagCategoryFromWorld(World world, PartTagCategory tc, bool undoable=true)
New: public void removePartTagFromWorld(World world, PartTag tag, bool undoable=true)
New: public void updatePartTagCategoriesOnLoad(World world)
// Class: cm.core.partTag.PartTagDialog
Old: final public void updateView(bool keepSelection=false, bool refresh=false)
New: final public void updateView(bool keepSelection=false)

Old: extend public bool isPartTagReadOnly()
New: extend public bool collPartTagsReadOnlyG2(World world)
// Class: cm.core.partTag.PartTagUndo
Removed: public Space space : copy=reference;
Add: public World world : copy=reference;

Old: public constructor(PartTag tag, PartTagCategory cat, Space space, bool isRemoveOp=false)
New: public constructor(PartTag tag, PartTagCategory cat, World world, bool isRemoveOp=false)

cm.core.propsScheme

// Class: cm.core.propsScheme.PropsSchemeContainer 

Removed: extend public void initializeContainer() : deprecated {
Removed: extend public str getCurrent(str key) : deprecated {
Removed: extend public void loadDrawingSchemes(str systemKey) : deprecated 

//Removed methods are replaced with new methods below

Old: extend public void initializeContainer2(World w=null) 
New: extend public void initializeContainer(World w=null)  

Old: extend public str getCurrent2(str key, World w=null) 
New: extend public str getCurrent(str key, World w=null)  

Old: extend public void loadDrawingSchemes2(str systemKey, World w=null) 
New: extend public void loadDrawingSchemes(str systemKey, World w=null)  

// Class: cm.core.propsScheme.PropsSchemeManager 

Removed: final public bool assignToContainer(PropsScheme scheme, bool replace=false) : deprecated 

//Replaced with new method below

Old: final public bool assignToContainer2(PropsScheme scheme, bool replace=false, PropsSchemeContainer container=null) 
New: final public bool assignToContainer(PropsScheme scheme, bool replace=false, PropsSchemeContainer container=null)  

Removed: public void registerSchemesParent(str[] systemKeys, str parentSystemKey) : deprecated  

// Package: cm.core.propsScheme 
Removed: public class OpenSchemePropertyPropDef extends PropDef : deprecated { }
//Now using PropsSchemeQPPropDef instead (in cm.core.propsScheme)

// Class: cm.core.propsScheme.SchemePainterDialog 
Removed: public bool applyAll=true;
Removed: extend public Snapper{} beforeUserApply(Snapper{} snappers, Space space, World world) {
Removed: extend public Snapper{} afterUserApply(Snapper{} snappers, Space space, World world) {
Removed: private void applyAllCB(Control c) {

// Class: cm.core.propsScheme.SpecificPropsScheme 
Removed: public bool removeEmptyNodes(PropsSchemeUIFactory factory, PropsSchemeData data) {
New: public bool hideEmptyNodes(PropsSchemeUIFactory factory) {

// Class: cm.core.propsScheme.layout.PsLayout 
Removed: extend public PsLayoutAbstractPropertyEntry[] getEntriesFromSection(str k) {
New: extend public PsLayoutAbstractPropertyEntry[] getEntriesFromSection(str sectionKey, str tabKey) {

Removed: extend public PsLayoutSection getSection(str k) {
New: extend public PsLayoutSection getSection(str sectionKey, str tabKey) {

Removed: extend public void addToSection(str sectionKey, PsLayoutAbstractPropertyEntry entry) {
New: extend public void addToSection(str tabKey, str sectionKey, PsLayoutAbstractPropertyEntry entry) {

// Class: cm.core.propsScheme.layout.PsLayoutPropertyEntryUIFactory 
Old: extend public void controlChanged(Control c, str key, Object value) 
New: extend public void controlChanged(Control c, str key, Object value, Object env=null)  

// Package: cm.core.propsScheme.layout.editor 
Removed: public class PsLayoutEditCustomKeyDialog extends SlimCaptionDialog : abstract {
Removed: package class PsLayoutItemTVIEditKeyDialog extends PsLayoutEditCustomKeyDialog {
Removed: package class PsLayoutPropertyEditKeyDialog extends PsLayoutEditCustomKeyDialog {
Removed: package class PsLayoutSectionEditKeyDialog extends PsLayoutEditCustomKeyDialog {
Removed: private void keyEditedCallback(Control c) {
Removed: private void keyApplyCB(Control c) {
Removed: public void closeOpenEditKeyDialog() {
Removed: public void showLayoutItemTVIEditKeyDialog(Window window) {
Removed: public void showLayoutPropertyEditKeyDialog(Window window) {
Removed: public void showLayoutSectionEditKeyDialog(Window window)

//Moved edit key to the PsLayoutEditLabelDialog instead. If you need to control how that is built, please override the following in PsLayoutEditLabelDialog

New: extend public void buildKeyEdit() {

cm.core.red3D

// File: cm.core.red3D.redViewCamera3D.cm
Old: public float magicFovDiv2Calculation(angle fov, int w, int h)
New: public float magicFovDiv2Calculation(angle fov, float w, float h)

cm.core.red3D.debug

The following class and interfaces related to it has been removed

Removed: public class REDAndLWComboView3D

cm.core.selection

// Class: cm.core.selection.SpaceSelection
Add: extend public void loadedAsFavorite()
// Class: cm.core.selection.SpaceSelectionBound
Add: extend public bool readOnly()

cm.core.spaceVolume

// File: cm.core.spaceVolume.spaceVolumes.cm
Old: public SpaceVolume attachedSpaceVolume(Snapper z)
New: public SpaceVolume attachedSpaceVolumeObject(Snapper z)

cm.core.viewport

// Class: cm.core.viewport.ViewportSnapper
Add: extend public ViewContentFilterEnv visibilitySettingsViewContentFilterEnv()
Add: extend public LayerSet layerSet()
// Class: cm.core.viewport.ViewportSnapper3D
Add: extend public symbol{} localCollDepIdsG3()
Add: extend public bool addLocalCollDepG3(symbol depId)
Add: extend public bool removeLocalCollDepG3(symbol depId)
Add: extend public void clearLocalCollDepsG3()
Add: extend public void localCollDepsChangedG3()
Add: extend public void removeCollFileDepsG3()
Add: extend public void restoreCollFileDepsG3(Space space=null)
Add: extend public void updateLocalCollDepsG3()

cm.core.visibility.categorize

// Class: cm.visibility.categorize.CategorizeDialogCard
Old: extend public bool isCategoryReadOnly()
New: extend public bool isCategoryReadOnly(CustomCategoryRecord cat)

isCategoryReadOnly now returns the read only status for a given category. To get the read only status for all categories, use isCategoriesReadOnly instead.

cm.core.xclip

// Class: cm.core.xclip.XClipVisibility
Add: extend public LayerSet collLayerSetG3()
// Class: cm.core.xclip.XClipWormholeSnapper
Add: extend public symbol{} sourceSectionIdsG3()
Add: extend public symbol{} localCollDepIdsG3()
Add: extend public bool addLocalCollDepG3(symbol depId)
Add: extend public bool removeLocalCollDepG3(symbol depId)
Add: extend public void clearLocalCollDepsG3()
Add: extend public void localCollDepsChangedG3()
Add: extend public void updateLocalCollDepsG3()
Add: extend public void removeCollFileDepsG3()
Add: extend public void restoreCollFileDepsG3(Space space=null)

cm.core3D

The following classes and interfaces referencing them have been removed.

Removed: public class CachedLOD3D
Removed: public class LODPainter3D
Removed: public class LWRepository3D
Removed: public class PrimitiveLOD3D

cm.std.architectural

// Class: cm.std.architectural.FloorViewItem
Old: extend public bool updateLockAndSolid(ViewItemButton button)
New: extend public bool updateLock(ViewItemButton lockButton)

cm.std.photo

// Class: cm.core.Photo
Removed: extend public RenderSettings giSettings()
Removed: extend public RenderSettings giSettings=(RenderSettings settings)

The methods above was empty since 10.5. If you want to control the GI quality you need to do this through Photo.renderSettingsG2. For instance:

RenderSettingsG2 settings = photo.renderSettingsG2;
settings.masterQuality = renderQuality.medium;

Keep in mind that the code above affects overall quality of the rendering. If you need to tweak the GI settings explicitly you can do the following:

photo.renderSettingsG2."RAY_GI_CACHE_HEMI_SAMPLING_RATE" = 22;
photo.renderSettingsG2."RAY_GI_ESTIMATOR_SAMPLING_RATE" = 200;
photo.renderSettingsG2."RAY_GI_CACHE_PRECISE" = false;
photo.renderSettingsG2."RAY_GI_CACHE_PASSES_COUNT" = 1;
photo.renderSettingsG2."RAY_GI_CACHE_INTERP_SAMPLES_COUNT" = 20;

cm.test.tscript

// Class: cm.test.tscript.TScript
Old: final public void insert(Snapper snapper, point2D pos=(0, 0), angle yaw=0 deg)
New: final public void insert(Snapper snapper, point2D pos=(0, 0), angle yaw=0 deg, bool flush=true)

cm.win

// Class: cm.win.DateRangeSelector
Old: extend public void setStartDate(Date d)
New: extend public void setStartDate(Date d, bool invokeCB=true)

Old: extend public void setEndDate(Date d)
New: extend public void setEndDate(Date d, bool invokeCB=true)
// Class: cm.win.Window
New: extend public bool allowKeyBindingAction(str actionKey)

custom.dataCatalog

// Class: custom.dataCatalog.builder.geometry.DcMeasureParamSub 
Deprecated: public Display stretchMeasureParamsLabel;
Deprecated: public TreeView stretchMeasureParamsTreeView;
Deprecated: extend public void buildAdditionalProductConstrols(DcAddProductTreeViewItem parent, FrameStyle frameStyle)

// Package: custom.dataCatalog.builder.undo 
Deprecated: public class DcAddStretchMeasureParamUndo extends DcUndoOp { 
Deprecated: public class DcRemoveStretchMeasureParamUndo extends DcUndoOp {

// Class: custom.dataCatalog.builder.scheme.DcDBBuilderEditSchemeCard 
Removed: private str _updateKey; 
Removed: private bool _forceRebuild;

// Class: custom.dataCatalog.builder.DcMenuSubWindow 
Old: extend public void closeDataFile(bool clearUndo=true, bool openNew=false) {
New: extend public void closeDataFile(bool clearUndo=true, bool openNew=false, bool update=true) {

Old: final private void postCloseDataFile(bool clearUndo, bool openNew) 
New: final private void postCloseDataFile(bool clearUndo, bool openNew, bool update) {  

// Class: custom.dataCatalog.builder.dcCurrentCatalogs.cm 
Old: extend public void removeCurrentDataCatalogs() {
New: extend public void removeCurrentDataCatalogs(bool update) {

Runtime/Behavior Changes

Article view hooks

The enum used for Article view hooks (cm.core.calc) have a new enum value modified, which is used to notify modifications to the article view

/**
 * View change type.
 */
public enum articleViewChange : field access {
    nothing;
    name;
    modified; //New in 12.5
    new;
    remove;
    select;
}

articleViewChange.remove notification now correctly populates the view argument with the deleted ArticleView instance, instead of passing in null.

Calculation modifications sets World.modified

Both article view changes and part adjustments changes will now set the modified flag of the World. The modified flag is indicative of whether the drawing was changed since last saved and dictates conditions such as whether to prompt the user to save the file when closing.

ItemTags visibility

The area tag was added specifically to allow users to hide/show part tag rectangles/custom shapes.

// Tagging rects and shape cat
public const symbol cCoreTagsCat = #tags;

However, developers have added their itemTags to that category causing them to be visible in the TAGS view mode and therefore be filtered together with the area tags. We recommend developers to remove their itemTags from the #tags category so that they are not visible in the TAGS view mode.

PBR Materials

When introducing PBR materials we added a 'spec' field for GMaterial3D. This can either be a 'ClassicMatSpec' (the old material definition) or a 'PBRMatSpec'. In order to simplify for developers not knowing what material they are dealing with we created these helper functions for dealing with opacity/transparency and color:

core3D.gMaterial3DHelpers.cm

/**
 * Creates a copy of the material with the specified opacity.
 */
public GMaterial3D createTransparentMaterial(GMaterial3D gm, float opacityValue)

/**
 * Set the opacity on the material.
 */
public void setOpacity(GMaterial3D gm, float opacityValue)

/**
 * Creates a copy of the material with the specified color.
 */
public GMaterial3D createColorMaterial(GMaterial3D gm, colorF c)

/**
 * Set the color on the material.
 */
public void setColor(GMaterial3D gm, colorF c)

Also note that we have updated the core materials as outlined here: https://www.configura.com/wiki/index.php/Migration_from_12.0_to_12.5#Core_materials_converted_to_PBR

When introducing PBR materials we added a 'spec' field for GMaterial3D. This can either be a 'ClassicMatSpec' (the old material definition) or a 'PBRMatSpec'. In order to simplify for developers not knowing what material they are dealing with we created these helper functions for dealing with opacity/transparency and color:

core3D.gMaterial3DHelpers.cm

/**
 * Creates a copy of the material with the specified opacity.
 */
public GMaterial3D createTransparentMaterial(GMaterial3D gm, float opacityValue)

/**
 * Set the opacity on the material.
 */
public void setOpacity(GMaterial3D gm, float opacityValue)

/**
 * Creates a copy of the material with the specified color.
 */
public GMaterial3D createColorMaterial(GMaterial3D gm, colorF c)

/**
 * Set the color on the material.
 */
public void setColor(GMaterial3D gm, colorF c)

Also note that we have updated the core materials as outlined here: https://www.configura.com/wiki/index.php/Migration_from_12.0_to_12.5#Core_materials_converted_to_PBR

12.5 is coming out with the support of Revlink 2022 Here is the link to install the latest Revlink Add-On: https://downloads.configura.com/cet/RevLinkInstaller6.21.31.0.exe

After the release, the link will replace the current installer link within this article: https://support.configura.com/hc/en-us/articles/1500008625141-Revlink-Extension

Space volume snappers

In the old implementation, the system goes through all the snappers in the space in order to find the space volume snappers that belong to a particular space volume, which is not optimal. Hence, a new _spaceVolumeSnappers field is introduced in SpaceVolume to cache the space volume snappers that belong to a space volume. A space volume snapper is added to _spaceVolumeSnappers through SpaceVolumeEventViewer::updateAfterAddSnapper(..) whenever it is inserted into a space, and is removed from _spaceVolumeSnappers through SpaceVolumeEventViewer::updateAfterRemoveSnapper(..) whenever it is removed from a space. In addition, when the space volume id of a space volume snapper is changed, it is removed from _spaceVolumeSnappers of the old space volume, and added to _spaceVolumeSnappers of the new space volume, through spaceVolumeSnapperIdChanged(..).

// Class: cm.core.spaceVolume.SpaceVolume
New: private Snapper{} _spaceVolumeSnappers : copy=shallow, stream=null;

cm.abstract.dataSymbol

Please note that starting version 12.5.9 of Data Symbol (cm.abstract.dataSymbol), we have removed a hardcoded check for the "" Option code, which used to prevent "" from showing up in option domains and properties trees. If you require the check and wish to hide "***", you may add back a similar check through overriding the following methods:

// Class: cm.abstract.dataSymbol.DsPData
public bool validOption(Option)

// Class: cm.abstract.dataSymbol.DsPDataProxy
public bool validOption(DsPDataProxyEnv, Option)

cm.core.category

The following class has changed: modify notice class property has been set. See this help center article on Modify Notice behavior.

// Class: cm.core.category.CustomCategoryRecord
Old: public class CustomCategoryRecord extends CategoryRecord
New: public class CustomCategoryRecord extends CategoryRecord : modify notice

cm.core.partTag

The following classes below have changed: modify notice class property has been set. See this help center article on Modify Notice behavior.

// Class: cm.core.partTag.PartTagCategory
Old: public class PartTagCategory
New: public class PartTagCategory : modify notice

// Class: cm.core.partTag.PartTag
Old: public class PartTag
New: public class PartTag : modify notice

cm.core.propsScheme

Removal of ensureSettings() call in scheme apply

In 12.0, before scheme apply, to make sure that the props are ready on the target object, we needed to do ensureSettings as prop exposure is typically done there. But it could be very heavy when applying to a lot of snappers, as we don’t need to build the settings, all we need is to make sure the props are exposed.

To counter this, we introduced a validation system for the propDefs, that when called with a certain flag, will call ownerReExposePropDefs to make sure the propDefs are updated.

// In cm/props/propObj.cm: 
/**  
 * Invalidate defs.  
 * Runs validation when propDefs() is called.  
 *   
 * You can for example call this with #reExpose to reexpose registered propDefs  
 * instead of doing it in ensure settings. (implemented in corePropObj)  
 */ 
 final public void invalidatePropDefs(symbol k, Object env=null) {
     ?symbol->Object invalidateDefEnv = propData.?get(cInvalidateDefEnvKey);
     init? invalidateDefEnv();
     invalidateDefEnv.put(k, env);
     if (cInvalidateDefEnvKey !in propData) fastPut(cInvalidateDefEnvKey, invalidateDefEnv);
}  

The issue comes when the propDefs were never exposed/registered before, then there would be nothing to reexpose. In our fix we will need to call ensureSettings the first time if nothing has ever been exposed or registered before.

In the future we plan to have a better fix for this to mitigate the risk of possible calling ensure settings unnecessarily too much.

Some common Q&As regarding the issue:

InitFromPropsScheme doesn’t work anymore, new snappers inserted from toolbox does not get the properties in my selected scheme. What should I do?

We have verified this as a core issue and are working on a fix. If you would like to test it out, try the following:

1.In the constructor of your snapper/object, at the end of it, call ensure settings
2.Insert snapper and see if the problem is resolved. If it is, just wait patiently while the fix is getting tested and merged, otherwise please contact dev support.

I don’t want to wait, there must be something else I can do?

Alternatively, you can do ownerRegisterExposure on your snapper init and loaded1, then your problem would go away immediately.

Change for executePushProps() in PropsSchemePushVisitor

In 12.5, we have refactored the executePushProps() in PropsSchemePushVisitor and PsLayoutPushPropsVisitor to better handling scheme apply for exposed sub objects of a receiver. The change will no longer require exposed sub objects to call pushProps() in its owner.

However, this change could potentially break scheme apply for unexposed sub objects that relied on pushProps(). This is because executePushProps() now calls pushProp() instead of pushProps().

To adapt to this change, we would like to propose using push behaviors for sub objects, here is a step by step guide to setup push behaviors: https://support.configura.com/hc/en-us/articles/14830845427351-Using-PropsSchemes

Using push behaviors would also mean you no longer need to extend pushProps() method just to call pushProps() for sub objects. However, if you encountered any problems on setting up push behaviors, please contact dev support.

Potential issue when init custom scheme on CET start up and the workaround

If you have a custom scheme that is built based on a published scheme design file (*.cmpsl), there is a chance where your scheme might not get init/registered properly if the following scenario matches:

  • Catalogue Browser extension is turned on, and
  • Catalogue of the published scheme design is turned on (before embed) in Catalogue Details, and
  • The published scheme design is activated

If all 3 scenarios mentioned above matches your setup, it is very likely that your custom scheme might get overriden by the Catalogue Scheme registered from Catalogue Browser during CET startup. Here are a few steps to resolve this:

  • If the scheme design is not meant to be used in Catalogue Browser, deactivate the scheme design through creator and republish it again.
  • In your custom scheme class, when calling dsLoadLayout(), always make sure to pass in activeOnly=false, so we can always get the scheme design regardless of its active status.
  • If you are not using Catalogue Browser at all, turning it off should directly avoid this issue.