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
.
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.
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.
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
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;
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)
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
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
ensureSettings()
call in scheme applyIn 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:
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.
Alternatively, you can do ownerRegisterExposure
on your snapper init and loaded1
, then your problem would go away immediately.
executePushProps()
in PropsSchemePushVisitorIn 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.
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:
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: