Autobackups can now be saved to a specific folder and that folder can be changed in CET Control Panel's Data Management tab. If not specified, it defaults to CET Documents/autobackup
.
Autosaves are now saved into cmWritable/autosave
. In develop mode, cmWritable is in the write folder of your CET Workspace. In build, that is in AppData/Local/CET Data
.
Resources such as textures, excel worksheets, DWGs, Cm3Ds and CmSyms are now extracted and saved separately from the autosave drawing file. If the same resource has been saved by an earlier autosave, they will NOT be resaved. Resources can be found in cmWritable/externalFormatterResources
, with the extension .cmextrs
.
The motivation for this is that drawings with a large number of resources will not need to spend too much time autosaving them, since autosaves are done periodically and are the most common form of saving.
The image comparator has been moved from cm.test.imageDiffTool
to cm.win
.
Structurally this makes more sense since the actual C++ code to diff is in winApi.cm
and it uses
MemoryImages which is also in cm.win
.
This should make the image comparison tool more accessible for other extensions and not just for test extensions.
In the PDF canvas, if the lineWidthStyle
of a LineType
is not unit
, the code sets the minimum width to be 1.
Furthermore, the width
of a LineType
is an integer, which further prevents width values that are less than 1 and greater than 0 (eg 0.001).
This makes the lines too thick for material handling since the systems can be enormous and users might want to zoom-in on a frame or beam that is small relative to the system.
The changes are adopted from GDICanvas
's getPen
method, which calculates the scaling and pixel width-to-millimeter conversion factors. Then, these values are used to calculate the actual width of the GDI pen.
For PDF, the same calculations are used to obtain a floating-point width from the integer width field.
Filename checking has now been expanded to account for reserved Windows names (eg. COM[0-9]) and invalid end characters (period and space).
See the following for more info: https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file
The previous implementation of spreadsheet in spreadsheet.cm
was initally designed to work with products and features (DsBaseExternalRefTypes
) as these were the only things initially shown in spreadsheet. Later this spreadsheet class became the base class for materials and other stuff as well, but the naming of the fields and methods together with the logic were left as it is, new subclasses of the spreadsheet would still use the original implications to the data it holds as "Products".
To make the spreadsheet compatible with more data types, a refactoring was done on the spreadsheet. Instead of supporting the DsBaseExternalRefType
, it has now been refactored to support DsBaseCodeType
, which is the parent class of DsBaseExternalRefType
. DsBaseCodeType
is also the parent class of other data types, such as DsRuleType
(constraints data). This refactoring has allowed the reuse of the spreadsheet in "Constraints" tab within creator to hold and show constraints data, while also maintaining the funtionalities that were previously implemented with the spreadsheet class itself.
As part of Abstract Material Handling in CET 14.5, we are introducing some new Abstract Shelving components and some engine adaptations to help develop shelving extensions.
Updated the palette tool to work with new schemes. PaletteApplyEnv is now abstract and has group scheme and prop scheme specific subclasses.
A tool has been added under Edit > Elevate (3D only) for changing the elevation of a selection. The elevation can be changed via a property or graphically in the 3D view.
It is now possible to lock the positions of all objects in the photolab view. This option can be toggled in the photolab UI and is intended to make it easier to position the camera before rendering.
The render progress UI has been redesigned to better reflect the ongoing progress during rendering. A "preparing" state has been added to the progress along with the previous "rendering", "done" and "failed" states. The preparing state now reflects the progress of the render job data being packaged and sent to the render server. Additionally, some UI changes have been made to give the UI a new look. The dialog itself has been changed from a dialog window to an application window, allowing it to be stretched and resized.
Added a flag to enable autosaves and autobackups to obtain a 2D screenshot of the drawing.
Default export location logic has been reworked to make more sense to users, and to remove old confusing logic.
Various UI Elements have been removed from the cm/core/ui/removeBackupDialog.cm, since they are no longer relevant now that autosaves and autobackups have been moved to pre-determined folders.
Specifically, the "recursive" checkbox and the "directory" selection field have been removed. Autosaves and autobackups are now saved in a flat file structure by default, so there is no need to remove them by checking all folders recursively from a given parent folder.
Instead of streaming the entire full-resolution texture when saving, we now have the option to simply stream the original texture URL together with a lower resolution version of the texture, resulting in a significantly smaller cmdrw file. If the texture is still present on load, it will be used. If not, the streamed lower res version will be used.
The UI for photolab's advanced mode render quality settings have been redesigned. In this effort, many of the fields and functionality previously kept in the LabRenderQualityBox has now been moved into a new class - AdvancedRenderSettingsBox.
Tooltips have been added to most of the photolab post-processing options. Additionally, the help dialog has been updated to reflect some new post-processing options.
Excel import for flooring catalogs was moved to a new Flooring tab in 'Catalogue Creator'.
The custom.flooring.import
extension has changed parent from custom.flooring
=> custom.dataCatalog
The cm_sqlite.dll
dynamic link library has been updated to a more recent version.
SQLite Version is now 3.42.0
(2023-05-16), previous version was 3.8.9
(2015-04-08).
With the new version of SQLite we also enabled the SQLite FTS5 extension. For more info see: sqlite.org/fts5.html
If you have a subclass of FormatterResource, be sure to implement the following method. It should give a unique string for your resource. Failure to provide a unique key will make newer, different resources overwrite older, existing resources.
New: extend public str uniqueKey() : abstract
Old: public bool isValidPath(str path) public bool isValidPath(StrBuf buf) New: public bool isValidPath(str path) : deprecated public bool isValidPath(StrBuf buf) : deprecated
Constructor argument and class field name for DsiVariantsFeatureProxySubSet
were renamed from featurePath
to featureCode
// DsiVariantsFeatureProxySubSet (cm/abstract/dataSymInterface/dsiVariants.cm) Old: public constructor(str featurePath, str[] seq=null) New: public constructor(str featureCode, str[] seq=null) Old: public str featurePath New: public str featureCode
Removed some interfaces related to variants/constraints during optimization, visit dsiVariants.cm for updated implementation. Main reasons for changes are:
FeatureA.codes in {"Option1", "Option2"}
, now you would specify conditions on each of the options: FeatureA.Option1.checked = true or FeatureB.Option2.checked = true
.str->SFeature
feature path to Feature map to contain the feature paths is no longer applicable.constrainedSelPathEnv
.DsiConstraintEnv
argument to reuse a preprocessed state for performance reasons.// DsiVariantsCache (cm/abstract/dataSymInterface/dsiVariants.cm) Removed: public str->SFeature features Removed: public str->Object selectedValues Removed: public VConstraint[] constraints // DsiVariantsFeatureProxy (cm/abstract/dataSymInterface/dsiVariants.cm) Removed: public str{} codes Added: public bool checked // cm/abstract/dataSymInterface/DsiPData.cm Old: extend public bool constrainedOption(str featurePath, str option, double value) New: extend public bool constrainedOption(str featurePath, str option, double value, DsiConstraintEnv constraintEnv=null) Old: extend public str[] constrainedOptions(str featurePath) New: extend public str[] constrainedOptions(str featurePath, DsiConstraintEnv constraintEnv=null) Old: extend public Option findFirstUnconstrainedOption(str featurePath) New: extend public Option findFirstUnconstrainedOption(str featurePath, DsiConstraintEnv constraintEnv=null) Old: extend public Double findFirstUnconstrainedNumericOptionV(str featurePath) New: extend public Double findFirstUnconstrainedNumericOptionV(str featurePath, DsiConstraintEnv constraintEnv=null) Removed: extend public bool constrainedOptionalValue(str featurePath, str option, bool check) Removed: extend public bool constrainedOptionalCheck(str featurePath, str{} newSelected=null) Added: extend public bool constrainedOptionalValue(str featurePath, bool checked, DsiConstraintEnv constraintEnv=null) // cm/abstract/dataSymInterface/dsiVariants.cm Old: public str[] dsiVariantsConstraintIds(str s) New: public str[] dsiVariantsConstraintFeaturePaths(str s) Removed: public str->SFeature dsiVariantsFeatures(DsiPData data) Removed: public str->SFeature dsiVariantsFeatures(DsiPData data, str featurePath) Removed: public str->Object dsiVariantsSelectedValues(DsiPData data) Removed: public VConstraint[] dsiVariantsConstraints(DsiPData data, str featurePath, str->SFeature features) Removed: public VariantsSpan dsiVariantsSpan(DsiPData data, str->SFeature features, VConstraint[] constraints) Removed: public Object[] dsiVariantsSpanValues(DsiPData data, str featurePath, str option, double value, str->SFeature features, str->Object selectedValues, VariantsSpan variantsSpan) Removed: public Object[] dsiVariantsSpanValues(DsiPData data, str->SFeature features, str->Object selectedValues, VariantsSpan variantsSpan) Removed: public Object[] dsiVariantsReplaceSpanValue(Object[] spanValues, str featurePath, str option, double value, VariantsSpan variantsSpan)
Debug flags for catalog constraints have been removed. Constraints now should be enabled via Catalog Creator for each catalog ("Enable constraints (BETA)").
// cm/abstract/dataSymInterface/header.cm Removed: public bool dsiEnableConstraints Removed: public bool dsiEnableVariants Removed: public void enableDsiConstraints(bool v) Removed: public bool getDsiConstraintsEnabled() Removed: public void enableDsiVariantsTables(bool v) Removed: public bool getDsiVariantsTablesEnabled()
Some public interfaces from DsPData
are moved to DsiPData
// DsPData (cm/abstract/dataSymbol/dsPData.cm) Old : public str{} unresolvedConstrainedFP: copy=null, stream=null; Moved to: DsiPData (cm/abstract/dataSymInterface\dsiPData.cm) Old: extend public bool applyConstraintRules() New: public bool applyConstraintRules() Method declaration moved to DsiPData (cm/abstract/dataSymInterface\dsiPData.cm) Old: extend public bool isUnresolvedConstrainedFeaturePath(str featurePath) Moved to DsiPData (cm/abstract/dataSymInterface\dsiPData.cm)
Some public interfaces were changed to package/private.
// custom/dataCatalog/builder/variantsTables/dcVariantsTableCard.cm Old: extend public void recordUndoOp(DcUndoOp op) New: final package void recordUndoOp(DcUndoOp op) // custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsGridWindow.cm Old: extend public bool acceptAll(DcGridWindowColumn column, DsRuleType rule) New: final private bool acceptAll(DcGridWindowColumn column, DsRuleType rule) Old: extend public bool acceptAny(DcGridWindowColumn column, DsRuleType rule) New: final private bool acceptAny(DcGridWindowColumn column, DsRuleType rule) // custom/dataCatalog/builder/dataImport/excel/dcExcelImportDialog.cm Old: extend public void setSelectionView(DcExcelSelectionView view) New: extend public void setSelectionView(DcExcelSelectionView view) Old: extend public bool handleEvent(str key|, str msg=null, Object value=null) New: final package bool handleEvent(str key|, str msg=null, Object value=null) Old: extend public bool importBtnEvent(str msg=null, Object value=null) New: final package bool importBtnEvent(str msg=null, Object value=null) Old: extend public bool cancelBtnEvent(str msg=null, Object value=null) New: final package bool cancelBtnEvent(str msg=null, Object value=null) // custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsShrink.cm Old: extend public void setOutput(str error) New: extend package void setOutputError(str error)
DcExcelImportEnvG1
now uses a list of tuples for storing the imported tables.
// custom/dataCatalog/builder/dataImport/excel/dcExcelImportEnv.cm Old: public DsTableType[] tables New: public <str, str, DsTableType>[] tables
DcDBBuilderSpreadsheet
append column method now accepts repaint argument.
// DcDBBuilderSpreadsheet (custom/dataCatalog/builder/ui/spreadsheet/spreadsheet.cm) Old: extend public void appendColumn(DcSpreadsheetColumn col) New: extend public void appendColumn(DcSpreadsheetColumn col, bool repaint=true)
All classes that extends from the below classes requires refactoring as well.
Change class field and method name and method arguments for : DcDBBuilderSpreadsheet
//DcDBBuilderSpreadsheet (custom/dataCatalog/builder/ui/spreadsheet/spreadsheet.cm) Old: public <str, bool>[] allProducts(); New: public <str, bool>[] allData(); Old: extend public str[] productKeys(bool visibleOnly=false) New: extend public str[] dataKeys(bool visibleOnly=false) Old: extend public DsBaseExternalRefType rowData(int row) : abstract New: extend public DsBaseCodeType rowData(int row) : abstract Old: extend public DsBaseExternalRefType getProduct(str pCode) : abstract New: extend public DsBaseCodeType getData(str dataCode) : abstract Old: extend public void productCodeChange(str from, str to) New: extend public void dataCodeChange(str from, str to) Old: extend public void productCodeChanged(str from, str to) New: extend public void dataCodeChanged(str from, str to) Old: extend public void productCodeChanged(str from, str to, PointI pos=null) New: extend public void dataCodeChanged(str from, str to, PointI pos=null) Old: extend public void pasteProductCodeChanged(str from, str to) New: extend public void pasteDataCodeChanged(str from, str to) Old: extend public void createProduct(str code, str cloneFrom=null, bool update=true) New: extend public void createData(str code, str cloneFrom=null, bool update=true) Old: extend public void removeProduct(str code) New: extend public void removeData(str code) Old: extend public DcUndoOp changeProductCodeUndoOp(str oldCode, str newCode) New: extend public DcUndoOp changeDataCodeUndoOp(str oldCode, str newCode) Old: extend public void changeProductCode(str oldCode, str newCode) New: extend public void changeDataCode(str oldCode, str newCode) Old: extend public DcDBBuilderUpdateEnv productCodeChangeEnv(str oldCode, str newCode) New: extend public DcDBBuilderUpdateEnv dataCodeChangeEnv(str oldCode, str newCode) Old: extend public void showProduct(str code, bool allowRemoveFilters=true) New: extend public void showData(str code, bool allowRemoveFilters=true) Old: extend public DsBaseExternalRefType createNewProduct(str code, str cloneFrom) : abstract New: extend public DsBaseCodeType createNewData(str code, str cloneFrom) : abstract Old: extend public void putInCatalog(DsBaseExternalRefType prod, bool update=true) : abstract New: extend public void putInCatalog(DsBaseCodeType data, bool update=true) : abstract Old: extend public void removeFromCatalog(DsBaseExternalRefType prod, bool update=true) : abstract New: extend public void removeFromCatalog(DsBaseCodeType data, bool update=true) : abstract Old: extend public Int indexInCatalog(DsBaseExternalRefType prod) : abstract New: extend public Int indexInCatalog(DsBaseCodeType data) : abstract Old: extend public void resetProductVisibility() New: extend public void resetDataVisibility() Old: extend public str tmpProductCode(str productCode) New: extend public str tmpDataCode(str dataCode) Old: extend public str productCode(str productCode) New: extend public str dataCode(str dataCode) Old: extend public <DsBaseExternalRefType, int> dropDownOwnerLoc(int x, int y) New: extend public <DsBaseCodeType, int> dropDownOwnerLoc(int x, int y) Old: extend public void recordMoveDuplicatedProductRowOperation(str code, int fromR, int toR) New: extend public void recordMoveDuplicatedDataRowOperation(str code, int fromR, int toR) Old: extend public void moveDuplicatedProductRowPostcondition(int fromR, int toR) New: extend public void moveDuplicatedDataRowPostcondition(int fromR, int toR)
Change method and argument names for : DcAnonymousFilesGridWindow
//DcAnonymousFilesGridWindow (custom/dataCatalog/builder/utility/dcAnonymousFilesGridWindow.cm) Old: public DsBaseExternalRefType getProduct(str pCode) New: public DsBaseExternalRefType getData(str pCode) Old: public DsBaseExternalRefType createNewProduct(str code, str cloneFrom) New: public DsBaseExternalRefType createNewData(str code, str cloneFrom) Old: public void putInCatalog(DsBaseExternalRefType prod, bool update=true) New: public void putInCatalog(DsBaseCodeType prod, bool update=true) Old: public void removeFromCatalog(DsBaseExternalRefType prod, bool update=true) New: public void removeFromCatalog(DsBaseCodeType prod, bool update=true) Old: public Int indexInCatalog(DsBaseExternalRefType prod) New: public Int indexInCatalog(DsBaseCodeType prod)
Change method name and arguments for : DcDBBuilderProductSS
//DcDBBuilderProductSS (custom/dataCatalog/builder/productType/dcDBBuilderProductSS.cm) Old: public DsProductType getProduct(str pCode) New: public DsProductType getData(str pCode) Old: public DsBaseExternalRefType createNewProduct(str code, str cloneFrom) New: public DsBaseExternalRefType createNewData(str code, str cloneFrom) Old: public void removeProduct(str code) New: public void removeData(str code) Old: public void putInCatalog(DsBaseExternalRefType prod, bool update=true) New: public void putInCatalog(DsBaseCodeType prod, bool update=true) Old: public void removeFromCatalog(DsBaseExternalRefType prod, bool update=true) New: public void removeFromCatalog(DsBaseCodeType prod, bool update=true) Old: public Int indexInCatalog(DsBaseExternalRefType prod) New: public Int indexInCatalog(DsBaseCodeType prod) Old: public void changeProductCode(str from, str to) New: public void changeDataCode(str from, str to) Old: public void recordMoveDuplicatedProductRowOperation(str code, int fromR, int toR) New: public void recordMoveDuplicatedDataRowOperation(str code, int fromR, int toR)
Change method name and arguments for : DcDBBuilderTOCSpreadsheet
//DcDBBuilderTOCSpreadsheet (custom/dataCatalog/builder/productCatalog/dcTOCSpreadsheet.cm) Old: public DsBaseExternalRefType getProduct(str code) New: public DsBaseExternalRefType getData(str code) Old: public DsBaseExternalRefType createNewProduct(str code, str cloneFrom) New: public DsBaseExternalRefType createNewData(str code, str cloneFrom) Old: public void putInCatalog(DsBaseExternalRefType prod, bool update=true) New: public void putInCatalog(DsBaseCodeType prod, bool update=true) Old: public void removeFromCatalog(DsBaseExternalRefType prod, bool update=true) New: public void removeFromCatalog(DsBaseCodeType prod, bool update=true) Old: public Int indexInCatalog(DsBaseExternalRefType prod) New: public Int indexInCatalog(DsBaseCodeType prod)
Change method names and arguments for : DcLayoutsGridWindow
//DcLayoutsGridWindow (custom/dataCatalog/builder/layouts/layoutCard.cm) Old: public DsBaseExternalRefType getProduct(str pCode) New: public DsBaseExternalRefType getData(str pCode) Old: public DsBaseExternalRefType createNewProduct(str code, str cloneFrom) New: public DsBaseExternalRefType createNewData(str code, str cloneFrom) Old: public void putInCatalog(DsBaseExternalRefType prod, bool update=true) New: public void putInCatalog(DsBaseCodeType prod, bool update=true) Old: public void removeFromCatalog(DsBaseExternalRefType prod, bool update=true) New: public void removeFromCatalog(DsBaseCodeType prod, bool update=true) Old: public Int indexInCatalog(DsBaseExternalRefType prod) New: public Int indexInCatalog(DsBaseCodeType prod)
Change method names and arguments for : DcDBBuilderMaterialsSS
//DcDBBuilderMaterialsSS (custom/dataCatalog/builder/materials/dcDBBuilderMaterialsGridWindow.cm) Old: public DsBaseExternalRefType getProduct(str mCode) New: public DsBaseExternalRefType getData(str mCode) Old: public DsBaseExternalRefType createNewProduct(str code, str cloneFrom) New: public DsBaseExternalRefType createNewData(str code, str cloneFrom) Old: public void putInCatalog(DsBaseExternalRefType prod, bool update=true) New: public void putInCatalog(DsBaseCodeType prod, bool update=true) Old: public void removeFromCatalog(DsBaseExternalRefType prod, bool update=true) New: public void removeFromCatalog(DsBaseCodeType prod, bool update=true) Old: public Int indexInCatalog(DsBaseExternalRefType prod) New: public Int indexInCatalog(DsBaseCodeType prod) Old: public void changeProductCode(str from, str to) New: public void changeDataCode(str from, str to) Old: public void recordMoveDuplicatedProductRowOperation(str code, int fromR, int toR) New: public void recordMoveDuplicatedDataRowOperation(str code, int fromR, int toR)
Change method names and arguments for : DcFeaturesGridWindow
//DcFeaturesGridWindow (custom/dataCatalog/builder/features/dcFeaturesGridWindow.cm) Old: public DsProductType getProduct(str fKey) New: public DsProductType getData(str fKey) Old: public DsBaseExternalRefType createNewProduct(str code, str cloneFrom) New: public DsBaseExternalRefType createNewData(str code, str cloneFrom) Old: public void createProduct(str fKey, str cloneFrom=null, bool update=true) New: public void createData(str fKey, str cloneFrom=null, bool update=true) Old: public void putInCatalog(DsBaseExternalRefType prod, bool update=true) New: public void putInCatalog(DsBaseCodeType prod, bool update=true) Old: public void removeFromCatalog(DsBaseExternalRefType prod, bool update=true) New: public void removeFromCatalog(DsBaseCodeType prod, bool update=true) Old: public Int indexInCatalog(DsBaseExternalRefType prod) New: public Int indexInCatalog(DsBaseCodeType prod) Old: public void changeProductCode(str from, str to) New: public void changeDataCode(str from, str to) Old: public void moveDuplicatedProductRowPostcondition(int fromR, int toR) New: public void moveDuplicatedDataRowPostcondition(int fromR, int toR)
Change method names and arguments for : DcOptionsGridWindow
//DcOptionsGridWindow (custom/dataCatalog/builder/features/dcOptionsGridWindow.cm) Old: public DsProductType getProduct(str optKey) New: public DsProductType getData(str optKey) Old: public void productCodeChange(str from, str to) New: public void dataCodeChange(str from, str to) Old: public void productCodeChanged(str from, str to) New: public void dataCodeChanged(str from, str to) Old: public DcDBBuilderUpdateEnv productCodeChangeEnv(str oldCode, str newCode) New: public DcDBBuilderUpdateEnv dataCodeChangeEnv(str oldCode, str newCode) Old: public DsBaseExternalRefType createNewProduct(str code, str cloneFrom) New: public DsBaseExternalRefType createNewData(str code, str cloneFrom) Old: public void putInCatalog(DsBaseExternalRefType prod, bool update=true) New: public void putInCatalog(DsBaseCodeType prod, bool update=true) Old: public void pasteProductCodeChanged(str from, str to) New: public void pasteDataCodeChanged(str from, str to) Old: public void createProduct(str code, str cloneFrom=null, bool update=true) New: public void createData(str code, str cloneFrom=null, bool update=true) Old: public void removeProduct(str code) New: public void removeData(str code) Old: public void removeFromCatalog(DsBaseExternalRefType prod, bool update=true) New: public void removeFromCatalog(DsBaseCodeType prod, bool update=true) Old: public DcUndoOp changeProductCodeUndoOp(str oldCode, str newCode) New: public DcUndoOp changeDataCodeUndoOp(str oldCode, str newCode) Old: public void changeProductCode(str oldCode, str newCode) New: public void changeDataCode(str oldCode, str newCode) Old: public void moveDuplicatedProductRowPostcondition(int fromR, int toR) New: public void moveDuplicatedDataRowPostcondition(int fromR, int toR)
Change method names and arguments for : DcDBBuilderConstraintsSpreadsheet
. Some methods were also removed in favour of using the parent spreadsheet's interfaces to perform the same behaviours.
Removed: extend public DsRuleType[] data() Removed: extend public DsRuleType[] data=(DsRuleType[] data) Old: public DsBaseExternalRefType createNewProduct(str code, str cloneFrom) New: public DsRuleType createNewData(str code, str cloneFrom) Old: public void putInCatalog(DsBaseExternalRefType prod, bool update=true) New: public void putInCatalog(DsBaseCodeType rule, bool update=true) Old: public void removeFromCatalog(DsBaseExternalRefType prod, bool update=true) New: public void removeFromCatalog(DsBaseCodeType rule, bool update=true) Old: public Int indexInCatalog(DsBaseExternalRefType prod) New: public Int indexInCatalog(DsBaseCodeType rule) Old: public DsBaseExternalRefType getProduct(str pCode) New: public DsRuleType getData(str dataCode) Removed: public void productCodeChanged(str from, str to, PointI pos=null) Removed: public bool resolveDuplicateCode(str& newCode, str oldCode) Removed: extend public void completeSortList() Removed: public void sortColumn(int i, bool reverseSort=false) Removed: extend public int remSortList(str code) Removed: extend public void build() Removed: public void rebuild() Removed: extend public void updateColumns() Removed: extend public void buildColumns() Removed: public void appendFillerRows() Removed: public void appendBlankRowOfCells() Removed: public void recordFilterUndoOp(int col, DcGridWindowFilter[] oldFilters, DcGridWindowFilter[] newFilters, bool[] oldFilterList, bool[] newFilterList, bool endRecord=true) Removed: public void filter(bool repaint=true) Removed: extend public DsRuleType[] filter(DsRuleType[] rules) Removed: public int dataCount() Removed: public int filteredDataCount() Removed: public void createRowFromData(int row) Removed: public DcGridWindowColumn getColumn(int columnIndex) Removed: extend public void deleteCell(int col, int row) Removed: public void release(pointI p) Removed: public void showColumnDropDown(int col, pointI p=(0, 0)) Removed: public bool removeFiltersBtnClicked(pointI p)
Change constructor arguments, class field data types and names for : DcDBBuilderSpreadsheetCell
//DcDBBuilderSpreadsheetCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public DsBaseExternalRefType product; New: public DsBaseCodeType data; Old: public constructor(DsBaseExternalRefType product) New: public constructor(DsBaseCodeType data) Old: public constructor(DsBaseExternalRefType product, bool spaceHighlight) New: public constructor(DsBaseCodeType data, bool spaceHighlight) Removed: public constructor(DsBaseCodeType codeType=null) Old: extend public bool setCellData(DcDBBuilderSpreadsheet gridWindow, DcGridCell cell, str data) New: extend public bool setCellData(DcDBBuilderSpreadsheet gridWindow, DcGridCell cell, str newData)
Change constructor arguments and method argument names for : PrdCodeCell
//PrdCodeCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public constructor(DsBaseExternalRefType p) New: public constructor(DsBaseCodeType p) Old: public constructor(DsBaseExternalRefType p, bool spaceHighlight=false) New: public constructor(DsBaseCodeType p, bool spaceHighlight=false) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method argument names for : PrdDescCell
//PrdDescCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public constructor(DsBaseExternalRefType p, str l) New: public constructor(DsBaseCodeType p, str l) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : DcProductRootParentCell
//DcProductRootParentCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : PrdVendorCell
//PrdVendorCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method argument names for : PrdPriceCell
//PrdPriceCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public constructor(DsBaseExternalRefType p, str id) New: public constructor(DsBaseCodeType p, str id) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments for : PrdExtRefCell
//PrdExtRefCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public constructor(DsBaseExternalRefType p, UsageType ut) New: public constructor(DsBaseCodeType p, UsageType ut)
Change method argument names for : PrdFeatureCell
//PrdFeatureCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : DcPrdVariantsTablesCell
//DcPrdVariantsTablesCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : DcPrdConstraintTablesCell
//DcPrdConstraintTablesCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : DcPrdConstraintCell
//DcPrdConstraintCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : DcDefaultOptionRefCell
//DcDefaultOptionRefCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : DcMirrorProductRefCell
//DcMirrorProductRefCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData) Old: extend public bool clearOldMirrorProductRefs(DcMirrorProductRefCell cell, str data, DcDBBuilderSpreadsheet ss) New: extend public bool clearOldMirrorProductRefs(DcMirrorProductRefCell cell, str string, DcDBBuilderSpreadsheet ss) Old: extend public bool updateReciprocalMirrorProductRefs(DcMirrorProductRefCell cell, str data, DcDBBuilderSpreadsheet ss) New: extend public bool updateReciprocalMirrorProductRefs(DcMirrorProductRefCell cell, str s, DcDBBuilderSpreadsheet ss)
Change constructor arguments and method argument names for : DcMirrorAngleOfSymmetryCell
//DcMirrorAngleOfSymmetryCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public constructor(DsBaseExternalRefType p) New: public constructor(DsBaseCodeType p) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments for : MaterialPreviewCell
//MaterialPreviewCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public constructor(DsBaseExternalRefType p) New: public constructor(DsBaseCodeType p)
Change method argument names for : DcExpandCollapseCell
//DcExpandCollapseCell (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData)
Change method argument names for : DcAddBooleanCell
//DcAddBooleanCell (custom/dataCatalog/builder/utility/dcUtilityCells.cm) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : PrdPriceCell
//PrdPriceCell (custom/dataCatalog/builder/productType/dcProductCells.cm) Old: public constructor(DsBaseExternalRefType prod, str priceListRef, str optionPriceCode) New: public constructor(DsBaseCodeType prod, str priceListRef, str optionPriceCode) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method arguments for : PrdPkgCountCell
, PrdOmitCell
, PrdOmitPNCell
, PrdDisableStyleNrLookupCell
, PrdIndTagCell
, PrdIndTagCategoryCell
, PrdLeadtimeProgramRefCell
, PrdCategoryCell
, PrdModelsCell
, PrdMtrlAppCell
, PrdConnectorsCell
, PrdPropertyVisibilityCell
, PrdTagPlacementCell
(custom/dataCatalog/builder/productType/dcProductCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : PrdMeasurementCell
//PrdMeasurementCell (custom/dataCatalog/builder/productType/dcProductCells.cm) Old: public constructor(DsBaseExternalRefType prod, dsMeasurementType mType, str unit, str system) New: public constructor(DsBaseCodeType prod, dsMeasurementType mType, str unit, str system) Old: public constructor(DsBaseExternalRefType prod, str mTypeS, str unit, str system) New: public constructor(DsBaseCodeType prod, str mTypeS, str unit, str system) Old: public bool validateData(str data) New: public bool validateData(str newData) Old: extend public str cleanData(str data) New: extend public str cleanData(str dataStr) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method arguments for : DcPrdAddProductCell
//DcPrdAddProductCell (custom/dataCatalog/builder/productType/dcProductCells.cm) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData) Old: extend public DsiAddProductRefType[] getAddProducts(str data) New: extend public DsiAddProductRefType[] getAddProducts(str addData)
Change constructor arguments and method arguments for : PrdPreviewUrlCell
//PrdPreviewUrlCell (custom/dataCatalog/builder/productType/dcProductCells.cm) Old: public constructor(DsBaseExternalRefType p) New: public constructor(DsBaseCodeType p) Old: public bool validateData(str data) New: public bool validateData(str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : PrdSIFClassCell
//PrdSIFClassCell (custom/dataCatalog/builder/productType/dcProductCells.cm) Old: public constructor(DsBaseExternalRefType p, str tag) New: public constructor(DsBaseCodeType p, str tag) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : DcProductCatalogCell
//DcProductCatalogCell (custom/dataCatalog/builder/productCatalog/dcProductCatalogCells.cm) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public void drawText(PixelDevice dc, GridWindow gw, rectI r, rectI clip, int x, int y, str data) New: public void drawText(PixelDevice dc, GridWindow gw, rectI r, rectI clip, int x, int y, str txt)
Change method argument names for : DcProductLevelCodeCell
, DcProductLevelUILevelCell
, DcMultiplierCell
, DcCurrencyRoundingCell
(custom/dataCatalog/builder/productCatalog/dcProductCatalogCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : DcProductCatalogUnitCell
//DcProductCatalogUnitCell (custom/dataCatalog/builder/productCatalog/dcProductCatalogCells.cm) Old: public constructor(DsBaseExternalRefType product, SubSet subset=null, double stepLength=1, bool useStepButton=true) New: public constructor(DsBaseCodeType product, SubSet subset=null, double stepLength=1, bool useStepButton=true)
Change method argument names for : DcProductLevelDescCell
//DcProductLevelDescCell (custom/dataCatalog/builder/productCatalog/dcProductCatalogCells.cm) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : DcLayoutGrpKeyCell
, DcLayoutTagsCell
(custom/dataCatalog/builder/layouts/layoutCard.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : MaterialPreviewUrlCell
//MaterialPreviewUrlCell (custom/dataCatalog/builder/materials/dcMaterialColumns.cm) Old: public constructor(DsBaseExternalRefType p) New: public constructor(DsBaseCodeType p) Old: public bool validateData(str data) New: public bool validateData(str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : MaterialExtRefCell
//MaterialExtRefCell (custom/dataCatalog/builder/materials/dcMaterialColumns.cm) Old: public constructor(DsBaseExternalRefType p, UsageType ut, bool showRes) New: public constructor(DsBaseCodeType p, UsageType ut, bool showRes) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method argument names for : DcShowOptionsCell
//DcShowOptionsCell (custom/dataCatalog/builder/features/dcFeaturesGridWindow.cm) Old: public bool draw(PixelDevice dc, GridWindow gw, rectI r, int x, int y, str data) New: public bool draw(PixelDevice dc, GridWindow gw, rectI r, int x, int y, str txt)
Change method argument names for : FeatDescCell
, FeatGroupCodeCell
, FeatFunctionalCell
, FeatSkuCell
, FeatOmitOnOrderCell
, FeatNumericCell
, FeatLayersCell
, FeatVendorCell
, FeatDecimalCell
, FeatPropertyVisibilityCell
, FeatSyncOptionDirCell
(custom/dataCatalog/builder/features/dcFeatureCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : FeatBooleanCell
//FeatBooleanCell (custom/dataCatalog/builder/features/dcFeatureCells.cm) Old: public constructor(DsBaseExternalRefType p, function(DcFeaturesGridWindow, FeatBooleanCell, int, int) callback=null) New: public constructor(DsBaseCodeType p, function(DcFeaturesGridWindow, FeatBooleanCell, int, int) callback=null) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method arguments for : FeatDefaultOptionCell
, FeatSyncGroupIdCell
, FeatInvOptsVisibilityCell
//FeatDefaultOptionCell (custom/dataCatalog/builder/features/dcFeatureCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData) Old: public bool draw(PixelDevice dc, GridWindow gw, rectI r, int x, int y, str data) New: public bool draw(PixelDevice dc, GridWindow gw, rectI r, int x, int y, str txt)
Change constructor and method arguments for : FeatDelimiterCell
//FeatDelimiterCell (custom/dataCatalog/builder/features/dcFeatureCells.cm) Removed: public constructor(DsBaseExternalRefType p) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method arguments for : FeatMultiSelectionCell
, FeatOptionalSelectionCell
(custom/dataCatalog/builder/features/dcFeatureCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData)
Change method arguments for : OptCodeCell
, OptOptionalNoCodeCell
, OptDescCell
, OptPriceCell
, OptSkuCell
, OptUndefinedCell
, OptFeatureCell
, OptionRangeEnumCell
, OptNumericSkuCell
(custom/dataCatalog/builder/features/dcOptionCells.cm) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : OptPriceCodeCell
//OptPriceCodeCell (custom/dataCatalog/builder/features/dcOptionCells.cm) Old: public constructor(DsBaseExternalRefType prod, str priceListRef) New: public constructor(DsBaseCodeType prod, str priceListRef) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change method arguments for : OptLeadtimeCell
, DcOptAddProductCell
(custom/dataCatalog/builder/features/dcOptionCells.cm) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData)
Change method arguments for : OptionextRefKeyCell
(custom/dataCatalog/builder/features/dcOptionCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : OptionRangeCell
//OptionRangeCell (custom/dataCatalog/builder/features/dcOptionCells.cm) Old: public constructor(DsBaseExternalRefType product) New: public constructor(DsBaseCodeType p) Old: public bool setCellData(DcDBBuilderSpreadsheet gridWindow, DcGridCell cell, str data) New: public bool setCellData(DcDBBuilderSpreadsheet gridWindow, DcGridCell cell, str newData) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData) Old: extend public bool addRange(Option product, DcOptionRangeCellEnv env, int x, int y, Double data) New: extend public bool addRange(Option opt, DcOptionRangeCellEnv env, int x, int y, Double newData)
Change constructor arguments and method arguments for : OptionMtrlAppCell
//OptionMtrlAppCell (custom/dataCatalog/builder/features/dcOptionCells.cm) Old: public constructor(DsBaseExternalRefType p, SFeature parentFeature) New: public constructor(DsBaseCodeType p, SFeature parentFeature) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : OptDelimiterCell
//OptDelimiterCell (custom/dataCatalog/builder/features/dcOptionCells.cm) Old: public constructor(DsBaseExternalRefType p) New: public constructor(DsBaseCodeType p) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change constructor arguments and method arguments for : OptMirrorRefCell
//OptMirrorRefCell (custom/dataCatalog/builder/features/dcOptionCells.cm) Old: public constructor(DsBaseExternalRefType p) New: public constructor(DsBaseCodeType p) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData) Old: extend public bool clearOldMirrorOptionRefs(OptMirrorRefCell cell, str data, DcDBBuilderSpreadsheet ss) New: extend public bool clearOldMirrorOptionRefs(OptMirrorRefCell cell, str string, DcDBBuilderSpreadsheet ss) Old: extend public bool updateReciprocalMirrorOptionRefs(OptMirrorRefCell cell, str data, DcDBBuilderSpreadsheet ss) New: extend public bool updateReciprocalMirrorOptionRefs(OptMirrorRefCell cell, str string, DcDBBuilderSpreadsheet ss)
Moved column classes into a new file custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsColumns.cm
and set their scopes to package.
(custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsCells.cm) Removed: public class DcConstraintSSColumn extends DcSpreadsheetColumn Removed: public class DcSpreadsheetConstraintColumnLabel extends DcSpreadsheetColumnLabel Removed: public class DcConstraintExpSSColumn extends DcConstraintSSColumn Removed: public class DcConstraintCodeSSColumn extends DcConstraintSSColumn Removed: public class DcConstraintVendorSSColumn extends DcConstraintSSColumn Removed: public class DcConstraintExpTypeSSColumn extends DcConstraintSSColumn
Changed scope of classes to package
(custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsCells.cm) Old: public class DcConstraintSSGridCell extends DcDBBuilderSpreadsheetCell New: package class DcConstraintSSGridCell extends DcDBBuilderSpreadsheetCell Old: public class DcConstraintExpSSGridCell extends DcConstraintSSGridCell New: package class DcConstraintExpSSGridCell extends DcConstraintSSGridCell Old: public class DcConstraintCodeSSGridCell extends DcConstraintSSGridCell New: package class DcConstraintCodeSSGridCell extends DcConstraintSSGridCell Old: public class DcConstraintVendorSSGridCell extends DcConstraintSSGridCell New: package class DcConstraintVendorSSGridCell extends DcConstraintSSGridCell Old: public class DcConstraintExpTypeSSGridCell extends DcConstraintSSGridCell New: package class DcConstraintExpTypeSSGridCell extends DcConstraintSSGridCell
Change methods for : DcConstraintSSGridCell
//DcConstraintSSGridCell (custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsCells.cm) Removed: extend public DsRuleType rule=(DsRuleType r) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData) Removed: extend public bool synchronizeRule(int row) Removed: public bool close(GridWindow gw, bool canceled) Removed: extend public void recordNewRule(DsRuleType rule, int col=0)
Change methods for : DcConstraintExpSSGridCell
//DcConstraintExpSSGridCell (custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change methods for : DcEditConstraintCell
//DcEditConstraintCell (custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsCells.cm) Old: public bool draw(PixelDevice dc, GridWindow gw, rectI r, int x, int y, str data) New: public bool draw(PixelDevice dc, GridWindow gw, rectI r, int x, int y, str newData)
Change constructor and methods for : DcConstraintCodeSSGridCell
//DcConstraintCodeSSGridCell (custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsCells.cm) Removed: extend public str makeValidCode(str code) Removed: extend public void recordCodeChange(DsRuleType rule, str oldCode)
Change methods for : DcConstraintVendorSSGridCell
//DcConstraintVendorSSGridCell (custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData)
Change methods for : DcConstraintExpTypeSSGridCell
//DcConstraintExpTypeSSGridCell (custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsCells.cm) Old: public bool setData(int x, int y, str data) New: public bool setData(int x, int y, str newData) Old: public bool undoableSetData(DcGridWindow gw, int x, int y, str data) New: public bool undoableSetData(DcGridWindow gw, int x, int y, str newData)
Change method arguments and argument names for : DcSpreadsheetColumn
//DcSpreadsheetColumn (custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetColumns.cm) Old: extend public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: extend public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p) Old: extend public void sort(<str, bool>[] allProducts, DcSSSortArgs args) New: extend public void sort(<str, bool>[] allData, DcSSSortArgs args)
Change method arguments for : DcPrdVendorColumn
, DcPrdDescColumn
, DcPrdDescColumn
, DcPrdPriceColumn
, DcPrdFeatureColumn
, DcPrdVariantsTablesColumn
, DcPrdConstraintTablesColumn
, DcPrdConstraintColumn
, DcDefaultOptionRefColumn
, DcProductRootParentColumn
, DcMaterialCodeColumn
, DcMaterialPreviewColumn
, DcMaterialDescriptionColumn
, DcMirrorProductRefColumn
, DcMirrorAngleOfSymmetryColumn
,
(custom/dataCatalog/builder/ui/spreadsheet/dcSpreadsheetColumns.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change method arguments for : DcAddColumn
//DcAddColumn (custom/dataCatalog/builder/utility/dcUtilityColumns.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change method argument type for : DcAnonymousFile
//DcAnonymousFile (custom/dataCatalog/builder/utility/dcUtilityColumns.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change method arguments for : DcPrdPkgCountColumn
, DcPrdOmitColumn
, DcPrdOmitPNColumn
, DcPrdDisableStyleNrLookupColumn
, DcPrdIndTagColumn
, DcPrdIndTagCategoryColumn
, DcPrdLeadtimeProgColumn
, DcPrdCategoryColumn
, DcPrdPriceCodeColumn
, DcPrdMeasurementColumn
, DcPrdModelsColumn
, DcPrdAddProductsColumn
, DcPrdPreviewUrlColumn
, DcPrdSIFClassColumn
, DcPrdMtrlAppColumn
, DcPrdConnectorsColumn
, DcPrdPropertyVisibilityColumn
, DcPrdTagPlacementColumn
(custom/dataCatalog/builder/productType/dcProductColumns.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change method arguments for : DcPrdLvlCodeColumn
, DcMultiplierColumn
, DcUILevelColumn
, DcCurrencyRoundingColumn
, DcProductLevelDescColumn
(custom/dataCatalog/builder/productCatalog/dcProductCatalogColumns.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change method arguments for : DcLayoutCodeColumn
, DcLayoutKeyColumn
, DcLayoutGrpKeyColumn
, DcLayoutPrdCodeColumn
, DcLayoutTagsColumn
(custom/dataCatalog/builder/layouts/layoutCard.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change method arguments for : DcMaterialExtRefColumn
, DcMaterialPreviewUrlColumn
(custom/dataCatalog/builder/materials/dcMaterialColumns.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change method arguments for : DcShowOptionsColumn
//DcShowOptionsColumn (custom/dataCatalog/builder/features/dcFeaturesGridWindow.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change method arguments for : DcFeatCodeColumn
, DcFeatDefaultOptionColumn
, DcFeatSimilarColumn
, DcFeatGroupCodeColumn
, DcFeatFunctionalColumn
, DcFeatSkuColumn
, DcFeatMultiSelectionColumn
, DcFeatOptionalSelectionColumn
, DcFeatOmitOnOrderColumn
, DcFeatNumericColumn
, DcFeatLayersColumn
, DcFeatDescColumn
, DcFeatVendorColumn
, DcFeatDecimalColumn
, DcFeatDelimiterColumn
, DcFeatInvOptsVisibilityColumn
, DcFeatPropertyVisibilityColumn
, DcFeatSyncGroupIdColumn
, DcFeatSyncOptionDirColumn
(custom/dataCatalog/builder/features/dcFeatureColumns.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change method arguments for : DcOptCodeColumn
, DcOptOptionalNoCodeColumn
, DcOptLeadtimeColumn
, DcOptPriceColumn
, DcOptPriceCodeColumn
, DcOptSkuColumn
, DcOptUndefinedColumn
, DcOptDescColumn
, DcOptFeatureColumn
, DcOptDelimiterColumn
, DcOptNumericSkuColumn
, DcOptExtRefKeyColumn
, DcOptMtrlAppColumn
, DcOptModelsColumn
, DcOptAddProductsColumn
, DcOptRangeMinColumn
, DcOptRangeMaxColumn
, DcOptRangeStepColumn
, DcOptDiscreteNumsColumn
, DcOptRangeExpandColumn
, DcOptMirrorRefColumn
(custom/dataCatalog/builder/features/dcOptionColumns.cm) Old: public DcDBBuilderSpreadsheetCell makeCell(DsBaseExternalRefType p) New: public DcDBBuilderSpreadsheetCell makeCell(DsBaseCodeType p)
Change class field type, constructor arguments type for : DcSpreadsheetAddUndoOp
//DcSpreadsheetAddUndoOp (custom/dataCatalog/builder/undo/dcCodeChangeUndoOps.cm) Old: public DsBaseExternalRefType product; New: public DsBaseCodeType product; Old: public constructor(DialogWindow dialog, DsBaseExternalRefType product, DcDBBuilderSpreadsheet ss, int index, int sortValue) New: public constructor(DialogWindow dialog, DsBaseCodeType product, DcDBBuilderSpreadsheet ss, int index, int sortValue)
Change methods for : DcDBBuilderConstraintsCard
//DcDBBuilderConstraintsCard (custom/dataCatalog/builder/constraints/dcDBBuilderConstraintsCard.cm) Old: extend public void startEdit(DsRuleType selectedConstraint, bool ignoreUndo=false) New: extend public void startEdit(str constraintCode, bool ignoreUndo=false) Removed: extend public void recordNewRule(DsRuleType rule)
Remove undo operation classes
(custom/dataCatalog/builder/constraints/dcDBuilderConstraintsUndoOps.cm) Removed: public class DcCodeChangeConstraintUndoOp extends DcConstraintUndoOp Removed: public class DcTypeChangeConstraintUndoOp extends DcConstraintUndoOp Removed: public class DcExpChangeConstraintUndoOp extends DcConstraintUndoOp Removed: public class DcConstraintFilterUndoOp extends DcFilterUndoOp Removed: public class DcConstraintSortUndoOp extends DcConstraintUndoOp
Added new helper functions for getting values from accessories like the AccEnv that made it, the Location key, and whether it's an auto accessory. See bottom of accessoryEnv.cm
Deprecated the following classes. SelectAccessoryVessel, AccessoryLocationSelectionVessel
AccessoryGenerationBehavior no longer has a owner field. This was changed to be more memory efficient by allowing the behavior to act as a singleton. All methods that referenced this field were changed to take in the owner parameter instead. New methods were added to get the owner from an accessory as well.
AccessoryGenerationBehavior now extends PropObj instead of CoreObject.
generateAutoAccessories() now will remove unneeded accessories before it gathers neighbor accessories to prevent the system from removing accessories from the owner.
removeAutoAccessories() has been moved to AccessoryEnv class.
AccessoryLocation now extends SnapAlternative instead of CoreObject. By extending SnapAlternative we can better support child snappers and a more traditional snapper insert process. This also gives some basis for generating locations from existing connectors.
Replace AccessoryLocation references with SnapAlternative.
AccessoryLocation now has an owner field to get reference to the Object that made the location.
Renamed the following fields '''cm Old : public str{} acceptedTypes; New : public str{} filter;
Old : public int priority; New : public int sortPriority; '''
AccessoryEnv now extends PropObj instead of CoreObject.
Added an abstract method for getting an accessory's owner. '''cm public CoreObject getAccOwner(CoreObject acc). '''
Added an abstract method for updating an accessory. '''cm public bool updateAccessory(CoreObject owner, AccGenBehavior behavior, CoreObject acc, SnapAlternative loc) '''
Moved the removeAllAccessories() to the AccessoryGenerationBehavior.
Removed the accessoryKey() method. This logic should be handled in an implementation of updateAccessory().
isManagedAccessory() now also checks whether the accessory's owner matches the current owner we are working with.
handleLocation() now only calls checkForConflicts() if the accessory is successfully updated (returns true from updateAccessory()).
Renamed prop keys '''cm Old public const str cAccEnvKey = "accEnv"; public const str cAccLocKey = "accLoc"; public const str cAccAutoKey = "accAuto"; public const str cAccTypeKey = "accType";
New public const str cAccEnvPK = "accEnv"; public const str cAccLocPK = "accLoc"; public const str cAccAutoPK = "accAuto"; public const str cAccInsertPK = "accInsert"; public const str cAccTypePK = "accType"; '''
Added priority() and defaultPriority() methods called by AccessoryGenerationBehavior to provide an easier way for AccEnvs to dictate their priorities.
This is no longer abstract and now extends AccToolVessel. Much of it's behavior has been moved to be handled by the AccToolAnimation and AccToolVessel.
This now extends AccToolVessel. Much of it's behavior has been moved to be handled by the AccToolAnimation and AccToolVessel.
cm.abstract.dataSymInterface.communication
# dsCatCatalog.cm Removed: public void setting(str key, Object value) : deprecated;
Field requestId
removed from dsiDownloadInfo
in 14.5.
# dsiDownloadInfo.cm Removed: public int requestId; Old: public constructor(int cid, int64 fileSize, int requestId|, str src, str tar, str tmp=null, str grp=null, bool trace=false) New: public constructor(int cid, int64 fileSize|, str src, str tar, str tmp=null, str grp=null, bool trace=false) Old: public constructor(int cid, int64 fileSize, int requestId, str src, str tar, str tmp=null, str grp=null, bool trace=false|, bool onDemand=true, str sha=null, str cmSyncCycleKey=null, str portfolioName=null) New: public constructor(int cid, int64 fileSize, str src, str tar, str tmp=null, str grp=null, bool trace=false|, bool onDemand=true, str sha=null, str cmSyncCycleKey=null, str portfolioName=null)
DsPDataGCPropDef2 was initially designed for Catalogue Scheme to push options to DsPData, primarily for features with group code. However, the limitation for DsPDataGCPropDef2 is also quite significant. While this approach worked as expected with group code, it did not work well with other feature types. For example, optional, multiple-select, numeric features. In addition to this, the existence of DsPDataGCPropDef2 often brings confusion to developers who were debugging DsPData, as the class naming is very similar to another DsPropDef - DsPDataGCPropDef, another PropDef type in DsPData.
For these reasons, DsPDataGCPropDef2 will be removed in 14.5:
// cm.abstract.dataSymbol.propDefs.dsPropDef.cm Removed: public class DsPDataGCPropDef2 extends PropDef { // cm.abstract.dataSymbol.dsPData.cm DsPData class: Removed: extend public DsPDataGCPropDef2 gcPropDef2(str k) {
We made the following modifications to the cm.abstract.dataSymbol.dsPData.cm
file:
We updated the _comMtrlsCache
field as follows:
Old: private str->Material _comMtrlsCache : copy=shallow; New: private str->Material _comMtrlsCache : copy=shallow, stream=null;
We added a new field, _appliedComMtrls
to keep record of the COMs that are actually applied:
New: private str-><str, Material> _appliedComMtrls : copy=shallow;
The following industry material classes now extend from classes in cm.abstract.material
:
// industryMaterial.cm Old: public class IndustryMaterial extends CachedMaterial; New: public class IndustryMaterial extends AbsMaterial; // industryMaterialCardTreeViewItem.cm Old: public class IndustryMaterialCardTreeViewItem extends TreeViewItem : unstreamable; New: public class IndustryMaterialCardTreeViewItem extends AbsMaterialCardTreeViewItem : unstreamable;
The following industry COM classes / functions have been replaced by their counterparts from cm.abstract.material
:
// cm.abstract.industry -> cm.abstract.material // comProxyMaterial.cm Old: public class IndCOMProxyMaterial extends Material; New: public class COMProxyMaterial extends Material; // customerOwnMaterials.cm Old: public class IndCustomerOwnMaterials; New: public class CustomerOwnMaterials; Old: public IndCustomerOwnMaterials indCustomerOwnMaterials(World world=null); New: public CustomerOwnMaterials customerOwnMaterials(World world=null);
The following industry COM classes now extend from classes in cm.abstract.material
:
// customerOwnMaterials.cm Old: public class IndCustomerOwnMaterial extends IndustryMaterial; New: public class IndCustomerOwnMaterial extends CustomerOwnMaterial; // comMaterialCard.cm Old: public class IndCOMaterialCard extends IndMaterialCardWindow; New: public class IndCOMaterialCard extends COMaterialCard;
The following industry legend classes / functions have been replaced by their counterparts from cm.abstract
:
// cm.abstract.industry -> cm.abstract // industryLegendItem.cm Old: public class IndustryLegendItem; New: public class LegendItem; // industryLegendItem.cm Old: public class SimpleIndustryLegendItem extends IndustryLegendItem; New: public class SimpleLegendItem extends LegendItem; // industryLegend.cm Old: public class IndustryLegend; New: public class Legend; Old: public class IndustryLegendPropInterface : abstract; New: public class LegendPropInterface : abstract; Old: public void updateIndustryLegendSnapper(IndustryLegendSnapper s, Space space, str headerKey, str[] types); New: public void updateLegendSnapper(LegendSnapper s, Space space, str headerKey, str[] types); // basicIndustryLegendSnapper.cm Old: public class BasicIndustryLegendSnapper extends GraphSnapper; New: public class BasicLegendSnapper extends GraphSnapper
The following legend classes now extend from classes in cm.abstract
:
// industryLegend.cm Old: public class IndustryLegendSnapper extends BasicIndustryLegendSnapper; New: public class IndustryLegendSnapper extends LegendSnapper; // linealFilingInchesLegend.cm Old: public class LinealFilingInchesLegend extends BasicIndustryLegendSnapper; New: public class LinealFilingInchesLegend extends BasicLegendSnapper;
The following industry material legend classes / functions have been replaced by their counterparts from cm.abstract.material
:
// cm.abstract.industry -> cm.abstract.material // indMaterialLegend.cm Old: public class IndMaterialLegendItem; New: public class MaterialLegendItem; Old: public class IndMaterialLegendItemCreator : abstract; New: public class MaterialLegendItemCreator : abstract; Old: public class IndMaterialLegend extends IndustryLegend; New: public class MaterialLegend extends Legend; Old: public IndMaterialLegend industryMaterialLegend(World world); New: public MaterialLegend absMaterialLegend(World world); Old: public void updateIndustryMaterialLegend(Material->IndMaterialLegendItemCreator mc, World world=null); New: public void updateAbsMaterialLegend(Material->MaterialLegendItemCreator mc, World world=null); // indMaterialLegendSnapper.cm Old: public class LegendPart extends Part; New: public class LegacyLegendPart extends Part; Old: public void updateIndustryIndMaterialLegend(World world); New: public void updateAbsMaterialLegend(Material->MaterialLegendItemCreator mc, World world=null); // industryPart.cm Old: public void setTempLegendIndMaterialsToNull(); New: public void clearTempLegendMaterials(); Old: package Material->IndMaterialLegendItemCreator getTempLegendIndMaterials(); New: public Material->MaterialLegendItemCreator getTempLegendMaterials();
The following industry material legend classes now extend from classes in cm.abstract
:
// indMaterialLegendSnapper.cm Old: public class IndMaterialLegendSnapper extends BasicIndustryLegendSnapper; New: public class IndMaterialLegendSnapper extends MaterialLegendSnapper;
The following Excel-related classes in cm.abstact.interop.excelObj.cm are now removed in 14.5. Please use cm.core.msOffice.excel to access Excel-related APIs.
// cm.abstract.interop.excelObj.cm Removed: public class ExcelObj extends NetObj : deprecated Removed: public class ExcelWorkbook extends NetObj : deprecated Removed: public class ExcelSheet extends NetObj : deprecated Removed: public class ExcelRange extends NetObj : deprecated
With this change, dependency to cm.abstact.interop can now be removed from extension.xml, if it was only added to access Excel APIs. As for cm.core.msOffice.excel, it is shipped under cet.designer, hence if the extension.xml already has dependency to cet.designer, it is not required to add dependency to cm.core.msOffice.excel.
Removed: findNearbyOwners(Snapper{} ownerCandidates, Snapper->Snapper{} existing)
Consider using e.g. nearbySnappersWithAutoAdopt(K2Snapper this, LayerExpr tag)
instead, to get owners near a certain snappers.
If you want all nearby owner candidates, use K2AlternativeValidateFun.findOwnerCandidates(Snapper snapper, Snapper->Snapper{} existing)
instead.
Various terms used in properties, variable names, and methods were renamed to be more descriptive. Few public interfaces were affected:
Old: bendAngle property New: arcTangentAngle property Old: bendDistance property New: arcHeight property Old: bendRadius property New: arcRadius property
The following xp classes have been made abstract since they are not intended to be instantiated.
Old: public class XpBool New: public class XpBool : abstract Old: public class XpMaterialAccess New: public class XpMaterialAccess : abstract Old: public class XpMeasure New: public class XpMeasure : abstract Old: public class XpMoldingHeight New: public class XpMoldingHeight : abstract Old: public class XpNode New: public class XpNode : abstract Old: public class XpNodePositioning New: public class XpNodePositioning : abstract Old: public class XpNodeSizing New: public class XpNodeSizing : abstract Old: public class XpRsStr New: public class XpRsStr : abstract Old: public class XpSnapAnimationBehavior extends XpAnimationBehavior New: public class XpSnapAnimationBehavior extends XpAnimationBehavior : abstract Old: public class XpStr New: public class XpStr : abstract
The following classes have been made abstract:
Old: public class K2CabinetGfxBehavior extends K2Behavior New: public class K2CabinetGfxBehavior extends K2Behavior : abstract
The following classes have been deprecated:
Old: public class XpStraightCornerShape2 extends XpShape New: public class XpStraightCornerShape2 extends XpShape : deprecated Old: public class XpStraightCornerShapeDef2 extends XpShapeDef New: public class XpStraightCornerShapeDef2 extends XpShapeDef : deprecated Old: public class XpStraightCornerGfxBehavior2 extends XpCabinetGfxBehavior New: public class XpStraightCornerGfxBehavior2 extends XpCabinetGfxBehavior : deprecated
Instead, the following classes should be used. The new shape have separate measure properties for covers and fillers. It's recommended to create a new straight corner cabinet snapper in K2Creator using the new classes. That way saved drawings will not change upon being loaded.
New: public class K2StraightCornerGfxBehavior3 extends K2CabinetGfxBehavior New: public class XpStraightCornerShape3 extends XpShape New: public class XpStraightCornerShapeDef3 extends XpShapeDef
Old: public void applyXpLayout(XpLayout layout, XpShape parentShape, SymNode root) New: public void applyXpLayout(XpLayout layout, XpShape parentShape, SymNode root, XpShapeTree shapeTree=null)
Use toShapeTree()
to get the shapeTree
for the snapper you're applying the layout to.
Old: public str lastStructureKey New: public str lastPreviewCacheKey
The package-visible k2StructureKey
was removed, and a previewCacheKey
was added to K2Snapper
.
This field also had its name changed to reflect this.
Old: XpNodeRes[] eval(XpShape parentShape, XpLayoutNode node, str->XpShape[] existing) New: XpNodeRes[] eval(XpShape parentShape, XpLayoutNode node, str->XpShape[] existing, XpShapeTree shapeTree=null) Old: XpNodeRes[] allPossible(XpShape parentShape, XpShape shape) New: allPossible(XpShape parentShape, XpShape shape, XpShapeTree shapeTree=null) Old: public XpNodeRes eval(XpShape parentShape, XpNodeRes res) New: public XpNodeRes eval(XpShape parentShape, XpNodeRes res, XpShapeTree shapeTree=null)
Use toShapeTree()
to get the shapeTree
for the snapper you're evalutating the layout on.
null
is an acceptable value if no such snapper exists.
Old: public XpNodeRes[] eval(XpShape parentShape, XpLayoutNode node, str->XpShape[] existing) New: public XpNodeRes[] eval(XpShape parentShape, XpLayoutNode node, str->XpShape[] existing, XpShapeTree shapeTree=null)
See section on class XpLayout
for context.
Old: str partNo New: XpStr returnValueWhenTrue
XpListItem previously had a field typed as str
named partNo
. It is now typed as XpStr
and called returnValueWhenTrue
for more a descriptive name, and to support non-fixed strings.
If you were using the partNo
field, please used the returnValueWhenTrue
instead, with an XpFixedString
containing the value previously in partNo
.
Old: public str[] dataForValueHash() Old: public str valueHash() New: public str previewCacheKey(double distancePrecision, angle anglePrecision) Removed: public XpShape copyWithMeasuresOnly()
previewCacheKey(distancePrecision=0, anglePrecision=0deg)
is a good replacement for valueHash()
.
Both provide a representation of the shapes value.
The former is different though, containing more data which defines the shapes structure.
copyWithMeasuresOnly
was no longer needed, and was therefore removed.
Old: public constructor(K2SnapperSpawner parentSpawner, K2InsertNodeRef childNodeRef) New: public constructor(K2SnapperSpawner parentSpawner, K2Snapper parent, K2InsertNodeRef childNodeRef)
Removed: public void k2PropagatePropChanged(Snapper snapper, str key, Object value, Object env)
Old: public class XpFaceAnimation extends ToolAnimationG2 New: public class XpFaceAnimation extends ToolAnimationG2 : abstract Old: extend public XpFace[] getAlternativeFaces() New: extend public XpFace[] alternativeFaces() : abstract Removed: public XpFace[] alternativeFaces; Removed: extend public void updateAlternativeFaces(Snapper snapper) Removed: extend public XpFace[] findAlternativeFaces(Snapper{} snappers=null) Removed: extend public LayerSet faceAlternativeFilter() Removed: public void candidateChanged(Snapper old)
Old: public class K2WorktopJointAnimation extends XpFaceAnimation New: public class K2WorktopJointAnimation extends XpFaceAnimation : abstract Old: final public XpFace[] getWorktopFaces() New: final public XpFace[] worktopFaces() Old: final public XpFace[] getJointFaces() New: final public XpFace[] jointFaces() Removed: public XpFace[] worktopFaces; Removed: extend public XpFace[] jointAlternatives(XpFace[] worktopFaces)
Removed: extend public Snapper{} findNearbyOwners(Snapper{} ownerCandidates, Snapper->Snapper{} existing)
Old: public class K2AutoLightAppendExisitingFun extends K2EngineAppendExistingFun New: public class K2AutoLightAppendExistingFun extends K2EngineAppendExistingFun
Old: extend public bool shouldHideExisting(Snapper exisiting) New: extend public bool shouldHideExisting(Snapper existing)
Removed: public bool excludeEdges; Old: public constructor(bool excludeEdges=false) New: public constructor()
Removed: public str->int visibleSpawnerStartIndex; Removed: public str->int visibleSpawnerMaxIndex; Removed: private void updateSpawnersPage(Control c, bool nextPage=true) Removed: private void showNextSpawnersCB(Control c) Removed: private void showPreviousSpawnersCB(Control c) Old: extend public LibraryLimb addSearchLimb(LibraryLimb parent) New: extend public void addSearchLimb(LibraryLimb parent)
Removed: public class K2PageLimb extends LibraryLimb
Removed: public constructor(K2SnapperSpawner spawner, XpNodeRes res, K2LayoutBehavior layout, K2SnapperSpawner parentSpawner=null)
Removed: extend public void putHandle(K2Snapper handle, K2LayoutHandleInsertAlternative alt) Removed: extend public Snapper{} getTargetsWithoutAlternatives(AnimationMouseInfo mi, K2Snapper handle) Removed: extend public void putHandleToTargets(Snapper{} targets, K2Snapper handle) Removed: package bool anyIntersect(symbol{} set1, symbol{} set2)
Removed: extend public K2Cabinet nearestCabinet(K2Panel{} visited=null)
Removed: extend public str groupKey() Removed: extend public void edgePropertyChanged(K2WorktopEdge edge, str key, Object value, Object oldValue) Removed: extend public str->K2WorktopEdge{} edgeGroups()
Removed: final public rect bound()
Old: public class K2WorktopBuiltInPosAppendExisitingFun extends K2EngineAppendExistingFun New: public class K2WorktopBuiltInPosAppendExistingFun extends K2EngineAppendExistingFun
Removed: extend public K2WorktopEdgeStyleBehavior style() Removed: extend public GMaterial3D material() Removed: extend public str groupKey()
Removed: public class K2WorktopEdgeStyleBehavior extends K2Behavior
Removed: final private void updateVesselsVisibility(Space space)
The following fields, methods and functions have changed:
// materialLegend.cm MaterialLegend Old: public Material[] used; New: final public Material{} usedMaterials(); // legacyMaterialLegends.cm Old: public void legacyPreFetchPartsHook(Space space); New: public void clearLegacyTempLegendsHook(Space space);
public class MhSnapperInsertToolVessel extends Vessel { - Removed: public Snapper- Old: >str cachedGraphicsKeys() : deprecated; public class MhSnapperSpawner extends SnapperSpawner { - Old: extend public CollisionPrimitive engineConstructionCollision(MhSnapperShape shape) { New: extend public CollisionPrimitive engineConstructionCollision(MhSnapperShape shape, MhEngineConstructionEntry entry) { public class MhFrameGfxBehavior extends MhGenericGfxBehavior { - Old: extend public double uprighTh(MhSnapper snapper) { New: extend public double uprightTh(MhSnapper snapper) { - Old: public class MhBraceInfoDouble extends MhBraceInfo { New: public class MhSideElementBracingInfo extends MhBraceInfo { - Old: public class MhFrameEditBracingInsertAnimation extends MhSnapperInsertToolAnimation { New: public class MhFrameEditElementsInsertAnimation extends MhSnapperInsertToolAnimation { New: public class MhFrameEditBracingInsertAnimation extends MhFrameEditElementsInsertAnimation { public class MhFrameEditorShape extends MhSnapperShape { - Old: extend public Snapper{} children(line[] lines) { New: extend public Snapper{} children(MhBracingBehavior behavior, MhBraceInfo[] infos, line[] lines) { cm/abstract/materialHandling/mhSnapperInsertToolVessel.cm - Removed: [Global Variable] public const double arrowMargin = 5cm; New: [MhArrowBehavior method] extend public double arrowMargin(MhSnapper snapper, Animation a) Note: Replace all `arrowMargin` references to use the new margin values from an `MhArrowBehavior`. public class MhConfigManager : unstreamable { - Old: extend public void setNewName(MhConfigRef config) { - New: extend public bool setNewName(MhConfigRef config) {
Some of the key methods relating to collection of CollisionPrimitives
in the abstract has been reworked, utilizing a MhCollisionFetchEnv
to pass arguments to simplify the methods, and allow for better control of CollisionPrimitive
generation through a new reason
argument that accepts a symbol
.
For clearance related collisions, MhClearanceCollisionPrimEnv
has also been reworked and merged into MhCollisionFetchEnv
, MhClearanceCollisionFetchEnv
and MhStorageClearanceCollisionFetchEnv
for similar reasons.
Most of the compile errors could be resolved by using the new methods, wrapping arguments like Transform t
into a MhCollisionFetchEnv
, or using a null
value.
New: public class MhCollisionFetchEnv - Old: public class MhClearanceCollisionPrimEnv New: public class MhClearanceCollisionFetchEnv extends MhCollisionFetchEnv - Old: public class MhStorageClearanceCollisionPrimEnv extends MhClearanceCollisionPrimEnv New: public class MhStorageClearanceCollisionFetchEnv extends MhClearanceCollisionFetchEnv cm/abstract/materialHandling/functions.cm - Deprecated: public CollisionPrimitive localCollisionPrimitive(MhSnapper this) New: public CollisionPrimitive localCollisionPrimitive(MhSnapper this, MhCollisionFetchEnv env) MhSnapper - Deprecated: extend public CollisionPrimitive collisionPrimitive(Transform t, bool includeChildren, Object env=null) New: extend public CollisionPrimitive collisionPrimitive(MhCollisionFetchEnv env) MhSnapperGeometry - Old: extend public CollisionPrimitive collisionPrimitive(Transform t) - New: extend public CollisionPrimitive collisionPrimitive(MhCollisionFetchEnv env) MhSnapperShape - Old: extend public CollisionPrimitive collisionPrimitive(Transform t=null) New: extend public CollisionPrimitive collisionPrimitive(MhCollisionFetchEnv env) - Old: extend public void appendBehaviorCollisionPrimitives(CollisionPrimitiveSet res, Transform t=null, MhSnapper parent=null) New: extend public void appendBehaviorCollisionPrimitives(MhCollisionFetchEnv env, CollisionPrimitiveSet res, MhSnapper parent=null) MhSnapperSpawner - Old: extend public CollisionPrimitive engineConstructionCollision(MhSnapperShape shape) New: extend public CollisionPrimitive engineConstructionCollision(MhSnapperShape shape, MhEngineConstructionEntry entry) MhSnapperInfo - Deprecated: extend public CollisionPrimitive collisionPrimitive(Transform t, MhSnapper p) New: extend public CollisionPrimitive collisionPrimitive(MhCollisionFetchEnv env, MhSnapper p) MhClearanceSpec - Removed: extend public CollisionPrimitive[] collisionPrimitives(MhSnapperShape shape, Transform t, double elevation) - Removed: extend public CollisionPrimitive[] collisionPrimitives(MhSnapperShape shape, Transform t, double elevation, LayerSet classification) New: extend public CollisionPrimitive[] collisionPrimitives(MhSnapperShape shape, MhCollisionFetchEnv env) - Old: extend public CollisionPrimitive[] levelClearanceCollisionPrimitives(MhSnapperShape shape, Transform t, double elevation, LayerSet classification) New: extend public CollisionPrimitive[] levelClearanceCollision(MhSnapperShape shape, MhCollisionFetchEnv env) MhClearanceBehavior - Old: extend public void appendCollisionPrimitives(MhSnapperShape shape, Transform t, CollisionPrimitive{} geos, MhClearanceCollisionPrimEnv clearanceEnv, Object env=null) New: extend public void appendCollisionPrimitives(MhSnapperShape shape, MhCollisionFetchEnv env, CollisionPrimitive{} res) MhClearanceSpecBehavior - Old: extend public void appendClearanceSpecCollisionPrimitives(MhSnapperShape shape, Transform t, MhClearanceCollisionPrimEnv clearanceEnv, MhClearanceSpec clearanceSpec,Object env=null) { New: extend public void appendSpecCollision(MhSnapperShape shape, CollisionPrimitive{} res, MhClearanceSpec spec, MhCollisionFetchEnv env) - Old: extend public MhClearanceSpec clearanceSpec(MhClearanceCollisionPrimEnv clEnv, MhSnapperShape shape, Object env=null) { New: extend public MhClearanceSpec clearanceSpec(MhCollisionFetchEnv env, MhSnapperShape shape) {
Removed: extend public void updateDomains(Snapper owner, Snapper toSnapper, Object env=null) : deprecated { Old: extend public bool updateHeightDomains(Snapper owner, Snapper toSnapper, Object env=null) { New: extend public bool updateHeightDomains(MhSnapper owner, MhSnapper toSnapper, Object env=null) { Old: extend public SubSet restrictedHeightDomain(Snapper owner, Snapper toSnapper, Object env) { New: extend public SubSet restrictedHeightDomain(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env) { Old: extend public bool isConflicting(Snapper owner, double z, MhCollisionAlternative alt, CollisionPrimitiveSet ownerPrims) { New: extend public bool isConflicting(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitiveSet ownerPrims) { Old: extend public void updateHeightProperties(Snapper owner, Snapper toSnapper, Object env=null) { New: extend public void updateHeightProperties(MhSnapper owner, MhSnapper toSnapper, Object env=null) { Old: extend public <Double, Double> calculateFreeSpaceAboveAndBelow(Snapper owner, Snapper toSnapper, double insertH, Snapper specificAboveSnapper=null, Snapper specificBelowSnapper=null) { New: extend public <Double, Double> calculateFreeSpaceAboveAndBelow(MhSnapper owner, MhSnapper toSnapper, double insertH, Snapper specificAboveSnapper=null, Snapper specificBelowSnapper=null) { Old: extend public <Snapper, Snapper> getFirstAboveAndBelowSnappers(Snapper owner, Snapper toSnapper, double insertH) { New: extend public <MhSnapper, MhSnapper> getFirstAboveAndBelowSnappers(MhSnapper owner, MhSnapper toSnapper, double insertH) { Old: extend public void showHeightProperties() { New: extend public void showHeightProperties(MhSnapper owner, MhSnapper toSnapper) {
Removed: public bool isShelfBackPanel(Object o) { return evalClassification(o, sBackPanel); }
Removed: extend public SubSet spreadPatternDomain(MhSnapper snapper, MhSnapper parent, str event) : deprecated {
Old: extend public point nextPopulatorPos(MhEngineEntry edit, point startPos, double bedWidth) { New: extend public point nextPopulatorPos(MhEngineEntry edit, point startPos, double bedWidth, MhSystemEngineEnvironment env) {
Removed: public double bracketD;
Removed: public double beamOffset; Removed: public double bracketD;
Removed: public Graph->MhPolylineColor[] map;
Removed: extend public void relinkNeighbors(MhSnapper oldSnapper, MhSnapper newSnapper) : deprecated {
Renamed field selection
to pickedUpSelection
to avoid confusion with MhSnapperSpreadToolAnimation.selection()
.
Old: public SnapperSelection selection; New: public SnapperSelection pickedUpSelection; Old: public constructor(MhSnapper snapper, SnapperSelection selection, SnapperFilter f, bool includeChildren, bool showPickup=true) { New: public constructor(MhSnapper snapper, SnapperSelection pickedUpSelection, SnapperFilter f, bool includeChildren, bool showPickup=true) {
Removed: public Snapper leftSnapper; Removed: public Snapper rightSnapper; Removed: extend public void setLeftAndRightSnapper(MhSnapper row, Snapper{} ss) : deprecated {
Undeprecated a method in MhBraceInfo
.
Old: extend public line2D braceLine(double frame_depth, double brace_offset) : deprecated { New: extend public line2D braceLine(double frame_depth, double brace_offset) {
Removed deprecated fields in MhFrameEditContentSnapper
and MhFrameEditorShape
.
MhFrameEditContentSnapper Removed: public MhSnapper baySnapper : copy=null, deprecated; MhFrameEditorShape Removed: public MhSnapper frameSnapper : copy=null, deprecated;
Removed some constants in cm/abstract/materialHandling/storage/behavior/mhBackstopSnappingBehavior.cm
.
Removed: public const double cBackstopDepthMargin = 10cm; Removed: public const double cBackstopHeightMargin = 20cm;
Replace any calls to mhDrawingFrameEditConfigurations(Space space)
with mhDrawingFrameEditConfigurations(Space space, symbol configPkg)
.
Removed: public MhFrameEditConfiguration[] mhDrawingFrameEditConfigurations(Space space) : deprecated {
Removed a deprecated function in cm/abstract/materialHandling/storage/racking/mhFlankProtectorFixedPointCollisionAlternative.cm
.
Removed: public MhSnapper[] getMultiSpanFrames(MhSnapper frame) : deprecated {
Old: extend public Primitive3D bracket3D(MhSnapper owner, double w, double startD, double endD, double startH, double h, double th) { New: extend public Primitive3D bracket3D(MhSnapper owner, double w, double startD, double endD, double h, double th) {
A new parameter is added to the sortedFramesByPriority
method, making the previous method without that parameter deprecated.
Old: extend public MhEngineEntry[] sortedFramesByPriority(MhEngineEntry[] sortedFrames) : deprecated { New: extend public MhEngineEntry[] sortedFramesByPriority(bool rotated, MhEngineEntry[] sortedFrames) {
The new parameter rotated
is required for the sorting of frames, because when the frames are rotated in the drawing, the order
of sortation should be reversed. When this is not accounted for, the removal of frames will not be consistent since it is not reversed.
There will not be any compile time error despite the changes, since the deprecated method will simply call the new method with rotated=false
,
which was assumed previously.
Old: extend public MhEngineEntry[] sortedFramesByPriority(MhEngineEntry[] sortedFrames) : deprecated { return sortedFramesByPriority(false, sortedFrames); }
isShelfBackPanel()
has been removed from Abstract Shelving. Use isBackPanel()
instead.
Updated AO specific classes relating to Accessory system changes. Removed the updateSupport() method from Worksurface in favor of the new updateAccessory() method on AccessoryEnv.
Removed the includeNeighbors parameter from getAllSupports(). This method should only give supports that this surface owns or manages. Neighbor supports are gathered in a seperate call by the AccessoryGenBehavior via those surfaces getAllSupports() calls.
The following classes have been deprecated. AOWksfSelectSupportVessel, AOWksfSuppPosSelectVessel, AOWksfSelectSupportForRemovalVessel
We have moved all of the SIF code and rs over to cm.abstract.sif
which is shipped by cm.abstract
extension.
The following classes / functions have a new name:
Old: public class AOSifExport extends TextExporter; New: public class ASifExport extends TextExporter; Old: public str aoSifExportEOL(); New: public str aSifExportEOL(); public Image aoIcon(str image); public Image absSifIcon(str image);
The following SIF clases have been moved to cm.abstract.sif
with a different class hierarchy:
Old: public class CustomSIFExport extends AOSifExport : inherit constructors; New: public class CustomSIFExport extends ASifExport : inherit constructors; Old: public class GenSifExport extends AOSifExport; New: public class GenSifExport extends ASifExport;
The following SIF clases / functions have been moved to cm.abstract.sif
:
// functions.cm public <str, str>[] getDefaultSIF(); public void initDefaultSIFSettings(); public void initDefaultSIFSettings(); public str removeUnits(Object value, str original); public <str, str>[] getColumnToIDs(); public bool checkForValidCodes(<str, str>[] columnToID); public bool checkAndAppendSIF(ArticleGridWindow gw, DropDownMenu temp, PartColumn column); // customSifExport.cm public TextExporter customSifExport(); // exportEditSubWindow.cm public class ExportEditSubWindow extends SubWindow; // sifContants.cm public const str sifUserSettingKey; public const str sifLocalSettings; public const str partNumberLabel; public const str optionCodeLabel; public const str optionUpchargeLabel; public const str articleCodeLabel; public const str optionKeyLabel; public const str descriptionColumnLabel; public const str optionDescriptionLabel; public const str optionDescription2Label; public const str optionListPriceLabel; // sifControlRow.cm public class SIFControlRow extends ControlRow; // sifSettingsDialog.cm public str[] dexImportFilter(); public str->str colKeyToSIFCode(); public SIFSettingsDialog getSIFSettingsDialog(); public void makeSIFSettingsDialog(Window win); public class SIFSettingsDialog extends DialogWindow; // singleCodeDialog.cm public SingleCodeDialog getSingleCodeDialog(); public void makeSingleCodeDialog(Window parent, str column, pointI origin=(-1, -1), str label="Dialog"); public class SingleCodeDialog extends DialogWindow;
PaletteApplyEnv '''cm Old: public constructor(Palette pal, schemeFilterType filter) New: public constructor(Palette pal, schemeFilterType filter, Space space=null) '''
Old: extend public PaletteApplyEnv applyEnv(schemeFilterType filter) New: extend public PaletteApplyEnv applyEnv(schemeFilterType filter, Palette pal=null)
The following methods have been removed from ElevTreeViewItemG2
:
Removed: extend public str formattedLabel(PixelDevice pixelDevice, rectI r)
The following methods have been removed from ElevTreeViewItem
:
Removed: extend public str formattedLabel(PixelDevice pixelDevice, rectI r)
The following methods have been moved to functions:
// world.cm methods moved to functions Old: extend public void disconnectNonUfosFromUfos(Snapper{} input); New: public void disconnectNonUfosFromUfos(Snapper{} input); Old: extend public Snapper{} replaceUfosWithProxySnappers(Snapper{} input, Object->UFOProxySnapper ufoReconnectMap=null); New: public (Snapper{}) replaceUfosWithProxySnappers(Snapper{} input, UfoData ufoData=null, Object->UFOProxySnapper ufoReconnectMap=null);
The following function / arguments have been changed:
// coreGlobals.cm Old: public (function(World world): bool) {} containsUfoDataHooks() : keep; New: public (function(str->Object):bool) {} containsAuxUfoDataHooks() : keep; Old: public function(World world) {} clearUfoDataHooks() : keep; New: public function(str->Object) {} clearAuxUfoDataHooks() : keep; // worldUfo.cm Old: public void putContainsUfoDataHooks(function(World world):bool hook); New: public void putContainsAuxUfoDataHooks(function(str->Object):bool hook); Old: public void removeContainsUfoDataHooks(function(World world):bool hook); New: public void removeContainsAuxUfoDataHooks(function(str->Object):bool hook); Old: public void putClearUfoDataHooks(function(World world) hook); New: public void putClearAuxUfoDataHooks(function(str->Object) hook); Old: public void removeClearUfoDataHooks(function(World world) hook); New: public void removeClearAuxUfoDataHooks(function(str->Object) hook);
// partDividersInSpace.cm Old: public PartDivider[] getPartDividers(Space space, bool sort=true); New: public PartDivider[] defaultPartDividers(bool category=false); // parts.cm Old: public PartGroup fetchPartsTree(Space space=mainSpace(), //bool merge=true, //bool finalize=true, bool merge=false, bool finalize=false, bool filter=true, function():bool interrupt=null, bool progress=false, ExportFilterSettings exportFilter=null, PartSeqSorter sorter=null, PartFetchEnv mergeEnv=null); New: public PartGroup fetchPartsTree(PartDivider[] dividers, Space space=mainSpace(), //bool merge=true, //bool finalize=true, bool merge=false, bool finalize=false, bool filter=true, function():bool interrupt=null, bool progress=false, ExportFilterSettings exportFilter=null, PartSeqSorter sorter=null, PartFetchEnv mergeEnv=null);
Here is an example code snippet that used getPartDividers(..)
and fetchPartsTree(..)
:
Old: // In extension init / main World world = session.mainWorld; if (world) { Space space = world.mainSpace; if (space) { PartDivider[] seq = space.getPartDividers(sort=true); if (seq) for (p in seq) { if (p as CategoryPartDivider) p.enable(true); } //if (seq) for (p in seq) { if (p as CategoryPartDivi er) p.on = true; } } } // In chapter creation / print PartGroup partTree = fetchPartsTree(space=space); New: PartGroup partTree = fetchPartsTree(defaultPartDividers(category=true), space=space);
// partTagsInSpace.cm Old: public void repairTagsInSpace(Space space); // partTagsInWorld.cm New: public void repairTagsInWorld(World world);
cm.core.ui
// exportFilterDialogV2.cm Old: public void showFilterSettingsDialogV2(ExportFilterBar exportBar, bool useAutoTags=false, str label=null, bool showViewModes=false); New: public void showFilterSettingsDialogV2(ExportFilterBar exportBar, str label=null, bool showViewModes=false); Old: ExportFilterDialogV2(Window parent, bool useAutoTags=false, str label=null, bool showViewModes=false); New: ExportFilterDialogV2(Window parent, str label=null, bool showViewModes=false); Old: ExportFilterSubWindowV2(Window parent, bool useAutoTags=false, str label=null, bool showViewModes=false, function(ExportFilterSubWindowV2 exportSub) callback=null); New: ExportFilterSubWindowV2(Window parent, str label=null, bool showViewModes=false); Old: public OrderExportDialog orderExportDialog(Window parent, World world, bool initVisible=true, Part[] selectedParts=null, CalculationView view=null) : deprecated; New: public OrderExportDialog orderExportDialog(Window parent, World world, bool initVisible=true, bool show=true, Part[] selectedParts=null, CalculationView view=null);
The following fields, methods, classes and functions have been removed:
// articleViewTool.cm Removed: public class ExpandArticleViewTool extends ArticleViewTool : deprecated; Removed: public class DetailsArticleViewTool extends ArticleViewTool; Removed: public class FilterArticleViewTool extends ArticleViewTool; Removed: public class GroupingArticleViewTool extends ArticleViewTool : deprecated; Removed: public class OrderExportArticleViewTool extends ArticleViewTool : deprecated; Removed: public class AutoCreateArticleViewTool extends ArticleViewTool; Removed: public class MergePolicyArticleViewTool extends ArticleViewTool; Removed: public class PrintArticleViewTool extends ArticleViewTool; Removed: public class PrintPreviewArticleViewTool extends ArticleViewTool; // filterArticleViewDialog.cm Removed: public class FilterArticleViewDialog extends ModalDialog; Removed: public class HideFilteredArticleViewTool extends ArticleViewTool; Removed: public class RemoveExplicitArticleViewTool extends ArticleViewTool; Removed: public void giveSettingsToSpace(ArticleView this, Space space=null); Removed: public ExportFilterSettings getFilter(ArticleView this) : deprecated; // partMergeDialog.cm Removed: public void showPartMergeDialog(Window parent, Space space) : deprecated; Removed: public class ColumnPartFetchEnv2 extends ExtendedPartMergeEnv : deprecated;
// partDividerDialog.cm Removed: public void showPartDividerDialog(Window parent, Space space=null) : deprecated; Removed: public void updatePartDividerDialog() : deprecated; Removed: public void closePartDividerDialog() : deprecated; Removed: public class PartDividerDialog extends DialogWindow : deprecated; // partDividersInSpace.cm Removed: public void putPartDivider(Space space, PartDivider divider); Removed: public PartDivider[] autoUpdatePartDividers(Space space, PartDivider[] dividers, bool turnOnNew=false); Removed: public void putPartDividers(Space space, PartDivider[] dividers); Removed: public void removeTagCategoryPartDivider(Space space, PartTagCategory category); Removed: public PartDivider[] repairPartDividers(Space space, PartDivider[] dividers);
// exportFilterBar.cm Removed: public class AutoTagsPartExportFilterBar extends ExportFilterBar : deprecated; ExportFilterBar Removed: public bool horizontal; Removed: public CheckBox filter; Removed: final public void minimalSizeTweak(int h, int w=-1); // Use `masterEnabled()` instead of `filter.isChecked()` instead: Old: if (filter as ExportFilterBar) if (!filter.filter.?isChecked()) return; New: if (filter as ExportFilterBar) if (!filter.masterEnabled()) return;
// exportFilterDialog.cm Removed: public void showFilterSettingsDialog(ExportFilterBar exportBar, bool useAutoTags=false, str label=null); Removed: public class ExportFilterDialog extends DialogWindow; Removed: public class ExportFilterSubWindow extends SubWindow; // exportFilterDialogV2.cm ExportFilterSubWindowV2 Removed: public CheckBox all : deprecated; Removed: public CheckBox unCategorized : deprecated; Removed: public PDItem treeViewItem : copy=null, stream=null, ignore modify notice, deprecated; Removed: public PartDivider[] partDividers : deprecated; Removed: final public sorted str->symbol alpabeticallySortedAvailableCategories() : deprecated; Removed: final public void rebuildItems() : deprecated; Removed: final public void updateTags(TreeViewItem item, bool include) : deprecated; Removed: extend public void enableDegreeOfTriGroup(TreeViewItem item) : deprecated; Removed: final public void turnOnFilters(bool v=true) : deprecated; Removed: final public void turnOnExplicitMode(bool v=true) : deprecated; // orderExportDialog.cm OrderExportDialog Removed: public ExportFilterBar exportFilter;
# elevateAnimation.cm New: public void elevateAnimation() {..} New: public class ElevateAnimation extends AlignAnimationG2 {..} New: public class ElevateAnimationStart extends ElevateAnimation {..} New: public class ElevateAnimationEnd extends ElevateAnimation {..} New: public class ElevateAnimationVessel extends CoreAlignHelperVessel {..} New: package class ElevateAnimationSnapperFilter extends SnapperFilter {..}
The class NetObj2DArray in cm.core.msOffice.excel is now moved to cm.import.interop.netObj.cm.
// cm.core.msOffice.excel.excelObj.cm Removed: public class NetObj2DArray extends NetObj : deprecated { // cm.import.interop.netObj.cm Added: public class NetObj2DArray extends NetObj {
Before 14.5, ExcelObj.openWorkbook
method is slightly different between cm.core.msOffice.ExcelObj and cm.abstract.interop.ExcelObj.
In cm.core.msOffice.excel, ExcelObj.openWorkbook
opens Excel Workbook as Read-only by default. To open Excel Workbook as writable, the only way was to use ExcelObj.openWritableWorkbook
method.
Meanwhile, ExcelObj.openWorkbook
in cm.abstract.interop opens Excel Workbook as writable by default, and there were no options to open a workbook as Read-only.
Since cm.abstract.interop is more commonly used, some changes were made to Excel APIs in cm.core.msOffice.excel to standardise the behavior moving forward.
The following method in ExcelObj class has now been removed in 14.5.
// cm.core.msOffice.excel.ExcelObj Removed: extend public ExcelWorkbook openWritableWorkbook(Url filePath) {
In addition, new readonly
flag has now been added to ExcelObj.openWorkbook
in 14.5 to support opening workbook in Read-only/Writable state.
By default, workbook is opened as writable, to retain the same behavior as in cm.abstract.interop.
// cm.core.msOffice.excel.ExcelObj Modified: extend public ExcelWorkbook openWorkbook(Url filePath, bool readonly=false) {
Migration is required if:
ExcelObj.openWritableWorkbook
was used to open workbook as writable before 14.5.Added: public SelectButton lockViewButton; Added: private SpaceSelection cachedSelection;
New filtered view allows selection to filter which objects can be selected and not.
Added: public class FilteredLabView2D extends REDView2D {}
Added: public bool selectionFilterActive;
The following function in cm.core.propsScheme
has been deprecated:
Deprecated: public str psShortenLabel(Font font, str oriLabel, int allowedW) // use this function instead New: cm.win.shortenText(str text, Font font, int width)
The following fields have been added to the RedRenderJob class in order to calculate render job transfer progress:
Added: public bool jobTransferred; Added: public int64 jobTransferProgress; Added: public int64 jobTransferSize;
In order to allow resizing of the render progress dialog, it now extends AppWindow instead of DialogWindow.
Old: public class REDRenderJobDialog extends DialogWindow {...} New: public class REDRenderJobDialog extends AppWindow {...}
Thus, the constructor has also been changed.
Old: public constructor(Window parent) { super(parent, brush=labBoxBg, label=$RenderJobDialogCaption, size=(100, 100), initVisible=false); build(); autoPosition(); } New: public constructor(Window parent) { super(brush=labBoxBg, label=$RenderJobDialogCaption, size=(100, 100), initVisible=false, appWinAsDialogParent=parent, noMinimize=true, noMaximize=true); build(); minSize = size; maxSize = (size.w * 2, (size.h.double * 1.5).int); }
Finally, two fields have been added to constrain the window size.
Added: public sizeI mazSize; Added: public sizeI minSize;
Due to changes in UI a new constructor has been added to RedRenderJobItem.
Added: public constructor(str key, str label, color textColor, REDRenderJob job, sizeI barSize, SrcRef src=#:src) { super(key, label, textColor, src=src); this.job = job; total = 1; colorKey = "green"; this.barSize = barSize; updateProgress(job.progress()); }
REDRenderFrame do now support asking for more than depthMap. It's now possible to ask for other renderlayers now.
// redRenderFrame.cm, Class: REDRenderFrame Old: public bool generateDepthMap; New: private renderLayerType{} generateLayers(); New: extend public bool generateDepthMap(); New: extend public bool generateDiffuseMap(); New: extend public bool generateNormalMap();
OutputTile now uses LayerImagesData to store render result rather than ImageWithDepthData.
//tile.cm, Class: OutputTile Old: public ImageWithDepthData image; New: public LayerImagesData image;
RenderImageCache now uses LayerImagesData to store render result rather than ImageWithDepthData.
// renderImageCache.cm, Class: RenderImageCache Old: final public ImageWithDepthData get(Url url) New: final public LayerImagesData get(Url url) Old: final public void put(Url url, ImageWithDepthData image) New: final public void put(Url url, LayerImagesData image) // renderImageCache.cm, Class: RenderImageCacheEntry Old: public ImageWithDepthData image; New: public LayerImagesData image;
Denoise functionality in postprocessing steps now support additinal layers for improved denoising.
// redFilterPipeline3D.cm, Class: REDFilterPipeline3D Old: final public void setSourceAndDepth(REDImage2D newSource, REDImage2D newDepth) New: setSourceAndDepth(REDImage2D newSource=null, REDImage2D newDepth=null, REDImage2D newDiffuseMap=null, REDImage2D newNormalMap=null) // redPostProcessor.cm, Class: REDPostProcessor Old: extend public void updateParams(REDImage2D src, REDImage2D depth, REDFilterPipeline3D filterPipeline, bool forceSourceChange=false) New: extend public void updateParams(REDImage2D src, REDImage2D depth, REDImage2D diffuse, REDImage2D normal, REDFilterPipeline3D filterPipeline, bool forceSourceChange=false) Old: extend public void updateParams(REDImage2D src, REDImage2D depth, LuminanceEnv env, bool forceSourceChange=false) New: extend public void updateParams(REDImage2D src, REDImage2D depth, REDImage2D diffuse, REDImage2D normal, LuminanceEnv env, bool forceSourceChange=false) { Old: final private REDImage2D initialize(REDImage2D source, REDImage2D depthMap) New: final private REDImage2D initialize(REDImage2D source, REDImage2D depthMap, REDImage2D diffuseMap, REDImage2D normalMap) Old: final private void updateSource(REDImage2D newSource, REDImage2D newDepth) New: final private void updateSource(REDImage2D newSource, REDImage2D newDepth, REDImage2D newDiffuse, REDImage2D newNormal)
Old: final public REDViewCaptureEnv beforeCapture() New: final public REDViewCaptureEnv beforeCapture(bool capturingBackupThumbnail=false)
The following functions have been changed:
// cm/core/settings/coreSettings.cm Removed: public void putLastBrowseDir(Url); Removed: public void putLastCADBrowseDir(Url); // cm/core/settings/coreSettingsAdvancedPage.cm Removed: public Url pdfSaveLocation(bool trace=true); Removed: public Url cadSaveLocation(bool trace=true); Added: public Url pdfSaveLocation(bool xtrace=true); Added: public Url exportSaveLocation(bool xtrace=true);
The following globals have been removed:
Removed: public bool useDefaultSaveLocation; Removed: public bool useDefaultCADSaveLocation;
The following methods on CoreSettingsAdvancedPage has been changed:
Removed: extend public Window makeSaveField(SubWindow); Removed: extend public initSaveField(); Removed: extend public makePDFField(SubWindow, Display); Removed: extend public void initPDFField(); Removed: extend public void makeCADField(SubWindow, Display); Removed: extend public void initCADField(); Removed: extend public void saveDefaultPathValue(SaveDefaultUrlField, bool, bool); Removed: extend public void updateCoreSettings(SaveDefaultUrlField w, bool reset); Added: extend public void updateCoreSettings(SaveDefaultUrlField w);
Removed: public class WorldPasswordDialog extends ChangePasswordDialog {}
Removed: public UrlField dirField; Removed: public CheckBox removeRecursive; Removed: public Url url;
Removed: public Int wantedRealtimeResolution = null; Added: private Int _wantedRealtimeResolution = null;
Added: private bool allowDownsample = true; Added: private int downsampleSize = 512;
Added: private bool allowDownsample = true; Added: private int downsampleSize = 512;
Added: private bool allowDownsampleOnSave = true;
Fields message
and data
removed from commData
in 14.5.
# commData.cm Removed: public str message : deprecated; Removed: public str data : deprecated;
# deprecated.cm Removed: public void download_file(DownloadInfo info, f(OutBoundMessage, str) cb=null) : deprecated; Removed: public void download_file(str src, str tar, str grp=null, f(OutBoundMessage, str) cb=null) : deprecated; Removed: public void download_files(DownloadInfo[] infos, int limit=32, f(OutBoundMessage, str) cb=null) : deprecated;
The following method has been removed in FloorViewItem
:
Removed: extend public str fitText(Font font, str text, int maxWidth)
The following fields have been removed from LabRenderQualityBox and instead added to new class AdvancedRenderSettingsBox.
Removed: private UnitField[] fields; Removed: private UnitField->Object lastRecordedValues(); Removed: private SliderAndNumber masterQualitySlider; Removed: private Button resetQualitySliderBtn; Added: private DropDownTreeView masterQualityDropDown; Added: package AdvancedRenderSettingsBox;
Additionally, the high-quality warning button was changed into a display.
Old: private Button infoB; New: private Display infoD;
The following methods were removed due to the refactoring.
Removed: final private void qualitySliderChanged() {} Removed: public void controlChanged(Control c) {} Removed: public void controlRecievedEnterKey(Control c) {} Removed: public void controlLostFocus() {} Removed: final private void buildCustomRealiticRenderControls() {}
As mentioned, much of this functionallity was moved to AdvancedRenderSettingsBox.
Added: public class AdvancedRenderSettingsBox extends LabBox {}
In photolab simple mode, the quality slider was removed and replaced by a dropdown menu.
Removed: private SliderAndNumber masterQualitySlider; Added: private DropDownTreeView masterQualityDropDown;
Old: final public CheckBox makeToggle(str key, str label, Object value) {} New: final public CheckBox makeToggle(str key, str label, Object value, str toolTip) {}
New pos argument for WallOpeningSnap to allow having different positions for WallOpeningSnap other than the predefined values in the pos() method.
// cm.std.wall.wallOpeningConnector.cm Modified: public constructor(Snapper snapper, wallOpeningSnapType snapType, Point pos=null)
New parameters have been added to the constructor of BrushHoverDropDownMenuButton
:
public constructor(Window parent, Brush stdBrush, Brush hoverBrush, Brush mouseDownBrush, // inherited key arguments Font font=controlFont, FrameStyle frameStyle=noFrame, frame3DState frameState=frameStateUp, pointI pos=(0, 0), sizeI size=sizeI(-1, -1), pointI margins=(6, 4), alignment align=middle, str key=null, str label="", color labelColor=color(0, 0, 0), color pressedLabelColor=color(colorType.none), alignment textSide=undefinedAlignment, Image image=null, Image disabledImage=null, color color=nocolor, function(Control button) callback=null, // extended Image secondImage=null, int secondImageMargin=6, bool marginFromText=true, // new imageAlign secondImageAlign=imageAlign.right, // new SrcRef src=#:src) {}
marginFromText
allows changing the calculated margin to be calculated from the text sides, instead of the sides of the button edges.
secondImageAlign
lets you choose between placing the second image on the right or bottom of the button.
DiskImage can now store diffuseMap and normalMap aswell.
// diskImage.cm, Class: DiskImage Old: public constructor(Url targetUrl, sizeI size, imageFormat format, fix byte[] pixels, int pixelsCount, fix byte[] depth=null, int depthCount=0, float avgLum=0, float logAvgLum=0, float minLum=0, float maxLum=0, int sampleCnt=0) : unsafe New: public constructor(Url targetUrl, sizeI size, imageFormat format, fix byte[] pixels, int pixelsCount, fix byte[] depth=null, int depthCount=0, fix byte[] diffuse=null, int diffuseCount=0, fix byte[] normal=null, int normalCount=0, float avgLum=0, float logAvgLum=0, float minLum=0, float maxLum=0, int sampleCnt=0) : unsafe Old: final public bool saveToFile(Url targetUrl, fix byte[] pixels, int pixelsByteCount, fix byte[] depth=null, int depthCount=0) : unsafe New: final public bool saveToFile(Url targetUrl, fix byte[] pixels, int pixelsByteCount, fix byte[] depth=null, int depthCount=0, fix byte[] diffuse=null, int diffuseCount=0, fix byte[] normal=null, int normalCount=0) : unsafe
The following methods have been removed from OptionRangeCell
:
Removed: extend public str truncateDisplay(str value, int cellWidth)
FlgCatalogSetup
class changes
// custom.flooring.flgCatalogSetup.cm Added: extend public DataCatalog dataCatalog() { return _dataCatalog; } There should be no need to request download minimum files. Deprecated: extend public void downloadMinimumFiles() : deprecated {} New cell arg to register cell to receive update after product download. Old: extend public void requestDownload(guid lid, bool full=false) { New: extend public void requestDownload(guid lid, FlgCatalogProductCell cell=null, bool full=false) { Is flooring catalog update task running. Added: package bool flgCatalogUpdateTaskRunning() {
The catalogues treeview has been removed from FlgControlPanelPage
// custom/flooring/flgControlPanelPage.cm Should never have been public and is no longer used. Removed: extend public void createAndAppendTreeView(str key, str text, str desc, bool checked) { Removed: public void update() {
New - Download request data carrier - SQLite database download.
// custom/flooring/flgDownloadDataCarriers.cm Added: public class FlgDatabaseDownloadDataCarrier extends FlgCatalogDownloadDataCarrier {
Most lifecycle ID functions extended with str->Object auxData argument.
// custom/flooring/flgLifecycleId.cm Old: public void flgAppendLifecycleIdMfgPrdKeyFun(guid k, function(FlgProduct):str fn) { New: public void flgAppendLifecycleIdMfgPrdKeyFun(guid k, function(str, str->Object):str fn) { Old: public str flgDefaultLifecycleIdMfgPrdKey(FlgProduct prd) { New: public str flgDefaultLifecycleIdMfgPrdKey(str code, str->Object aux) { Old: public guid flgLifecycleId(FlgProduct prd, guid mfgKey, function(FlgProduct):str mfgPrdKeyFn=function flgDefaultLifecycleIdMfgPrdKey) { New: public guid flgLifecycleId(flgProductType prdType, TemplateShape tempShape, str code, str->Object aux, guid mfgKey, function(str, str->Object):str mfgPrdKeyFn=function flgDefaultLifecycleIdMfgPrdKey) { Added: public guid flgLifecycleId(FlgProduct prd, guid mfgKey, function(str, str->Object):str mfgPrdKeyFn=function flgDefaultLifecycleIdMfgPrdKey) { Old: public str flgLifecycleIdS(FlgProduct prd, guid mfgKey, function(FlgProduct):str mfgPrdKeyFn=function flgDefaultLifecycleIdMfgPrdKey) { New: public str flgLifecycleIdS(flgProductType prdType, TemplateShape tempShape, str code, str->Object aux, guid mfgKey, function(str, str->Object):str mfgPrdKeyFn=function flgDefaultLifecycleIdMfgPrdKey) { Added: public str flgLifecycleIdS(flgProductType prdType, TemplateShape tempShape, str code, str->Object aux, guid mfgKey, function(str, str->Object):str mfgPrdKeyFn=function flgDefaultLifecycleIdMfgPrdKey) { Old: public str flgLifecycleIdS(FlgProduct prd, guid mfgKey, guid fnKey) { New: public str flgLifecycleIdS(FlgProduct prd, guid mfgKey, guid fnKey) {
// custom/flooring/flgPalette.cm Moved: public void flgBuildToolboxCardWindow(Window w) { Moved to custom/flooring/flgToolboxCardWindow.cm Old: public str flgPaletteCardLabel() { New: private str flgPaletteCardLabel() { Old: public void flgUpdatePaletteCardLabel(Card card) { New: package void flgUpdatePaletteCardLabel(Card card) {
All Window creation functions moved from custom.flooring.import.functions.cm
// custom.flooring.functions.cm Added: public Window flgAppendUrlField( Added: public Window flgAppendButton( Added: public Window flgAppendCheckBox( Added: public Window flgAppendTextField( Added: public Window flgAppendRadioButtonSeq( Added: public Window flgAppendLabel( Added: public Window flgAppendDropDown(
The custom.flooring.import
extension has changed parent from custom.flooring
=> custom.dataCatalog
Deprecated 'FlgExcelImport0' and 'FlgExcelImporter1' flooring catalog excel importers.
// custom.flooring.import.flgExcelImport0.cm Deprecated: public class FlgExcelImport0 extends FlgImporter { // custom.flooring.import.flgExcelImporter1.cm Deprecated: public class FlgExcelImporter1 extends FlgImporter {
New set used to guard against duplicate lifecycle IDs during product generation.
// custom.flooring.import.flgProductGenerator4.cm Added: extend public str{} generatedLids() Added: extend public void appendLid(guid v)
Corrected spelling
Old: extend public void appendAuxillaryDataList(FlgProduct p, XmlTag t) { New: extend public void appendAuxiliaryDataList(FlgProduct p, XmlTag t) {
// custom.flooring.import.flgXmlWriter.cm New: public class FlgTableOfContents : unstreamable { // custom.flooring.import.functions.cm Removed: public Window flgAppendUrlField( Removed: public Window flgAppendCheckBox( Removed: public Window flgAppendTextField( Removed: public Window flgAppendRadioButtonSeq( Removed: public Window flgAppendLabel( Removed: public Window flgAppendDropDown( All Window creation functions moved to `custom.flooring.functions.cm` New: public void flgWriteReport(Url url, str[] reports)
With the FTS5 extension it's now possible to create an FTS5 virtual table that will provide full-text search functionality to the database. No changes are needed unless you want to use this new functionality. For more info see: sqlite.org/fts5.html
There will also be a text file for each autosave in the cmWritable/autosave folder
. This file lists the resources used by the corresponding autosave.
Inside cmWritable/externalFormatterResources
, resources are grouped by drawing name so that resources can be shared by all the autosaves for that drawing, eliminating redundant resaving of the same resources.
Now that new calculations are performed when obtaining the width of a LineType
, developers might have to tune the width values used in their non-unit width style LineType
s (eg. variable
and real
).
In cm/io/util/urlCheck.cm, use checkWindowsFilename
instead of the deprecated isValidPath
Interfaces related to Vx expression validation takes additional vendor
argument.
// DsiExprValidationEnv (dsiExprValidationEnv.cm) Old: public constructor(VxRuntime rt, dsiConstraintExpressionType exprType, str expr, DataCatalog cat) New: public constructor(VxRuntime rt, dsiConstraintExpressionType exprType, str expr, DataCatalog cat, str vendor) //dsiVariants.cm Old: public bool dsiValidateConstraintExpr(DataCatalog cat, dsiConstraintExpressionType exprType, str expr, StrBuf error=null) New: public bool dsiValidateConstraintExpr(DataCatalog cat, dsiConstraintExpressionType exprType, str expr, str vendor, StrBuf error=null)
Constraints-related Cards (Tabs) in Catalog Creator are placed between Geometry and Validation Cards. Take note of the sort keys used.
Geometry // 700 (no change) Constraints // 720 (added) ConstraintTables // 725 (added) VariantsTables // 727 (added) Validation // 745 (no change)
Interfaces related to Vx expression validation takes additional vendor
argument.
// DcDBBuilderConstraintsCard (dcDBBuilderConstraintsCard.cm) Old: extend public bool validExpression(dsiConstraintExpressionType constraintExpType, str exp, StrBuf error) New: extend public bool validExpression(dsiConstraintExpressionType constraintExpType, str exp, str vendor, StrBuf error)
Previously deprecated Catalog Creator Constraints Tab classes and interfaces are now removed. New classes and interfaces are found in the package.
// dcDBuilderConstraintsCard.cm Removed: public dcBuildEditConstraintsCard(DcDBBuilderCardWindow cw, int index=700) Removed: public DcDBBuilderEditConstraintsCard dcDBBuilderEditConstraintsCard(Window this=null) Removed: public class DcDBBuilderEditConstraintsCard // dcDBuilderConstraintsCells.cm Removed: public class DcConstraintColumn Removed: public class DcConstraintGridCell Removed: public class DcConstraintExpColumn Removed: public class DcConstraintExpGridCell Removed: public class DcConstraintCodeColumn Removed: public class DcConstraintCodeGridCell Removed: public class DcConstraintExpTypeColumn Removed: public class DcConstraintExpTypeGridCell // dcDBuilderConstraintsGridWindow.cm Removed: public DcDBBuilderConstraintsSS dcConstraintsGridWindow Removed: public class DcDBBuilderConstraintsSS // dcDBuilderConstraintsShrink.cm Removed: public class DcFramelessExpressionShrink
Removed previously deprecated field for Variants Table UI class for Catalog Creator
// DcVariantsTableGridSubWindow (dcVariantsTableGridSubWindow.cm) Removed: public DsButton importBtn
ItemTags generated from DsPart will now use the data's dataId (if set) for the ItemTag key. If this isn't set, it will fallback to the previous behavior of using the styleNr and then the articleCode.
The cached parts field on DsPData is now copy=null to avoid undo crashes.
Previews for cabinet inserts are now cached on a fuzzy basis: A cabinet with similar shape to one already cached will reuse the preview.
Two cabinets count as similar if their shapes have the same previewCacheKey()
.
Note that the user can always clear their cache through the "Clear cached images" button in the Essential Kitchen EU library.
Due to a bug, alternatives would spread through any snappers it existed on before the update (regardless of their auto adoption flags), if it had at least one snapper next to it that was auto adopting. It now respects snappers auto adoption state as it should.
This will also cause alternatives to not spread to snappers unless they've been invalidated. Verify that your alternatives (custom implemented moldings/worktops/soffits for example) updates as they should when invalidated through e.g. a #connect
event.
If your code relied on this bug to force snappers to update, you might need to make sure that more of your snappers than before are invalidated. Call <snapper>.invalidateBehaviorsIfRequired(...)
with #connect
or #propagatedConnect
as the argument to invalidate them. See cm/abstract/k2/molding/k2AutoMoldingBehavior.cm
for an example of this.
K2WtBuiltInPlacementBehavior used to automatically add K2AutoWorktopBuiltInPosBehavior to snappers spawned by its spawner. This no longer happens automatically.
In K2Creator, please add a basic K2AutoWorktopBuiltInPosBehavior behavior to each spawner that uses K2WtBuiltInPlacementBehavior. This is needed for its graphics to update properly as alignment is changed.
K2CategoryBehavior is now added to all snappers by default from K2SnapperSpawner.gatherBehaviors(). If it has been manually added in K2Creator it needs to be removed from the catalog.
For appliances we now support selecting inserts from multiple assortments. To utilize this feature the properties for the insert need to be on the root insert snapper and the insert needs to manage the connection to the catalog for those properties. To make the front responsible for its properties it needs a behavior that has
Removed updateSymByRebuild from K2CabinetGfxBehavior::userPropertyChanged
. Should no longer be needed since updateSym gets called after every shape prop change.
XpLengthPartQuantity
has been renamed to XpCutRunningMeterPartQuantity
and XpRunningMeterPartQuantity
has been added.
XpRunningMeterPartQuantity
gives a quantity equal to the length of the measure.
XpCutRunningMeterPartQuantity
gives a quantity equal to the number of articles of a given length that are needed.
We have identified several scenarios where material legends using MaterialLegendController were displaying excess materials. The solution is to register a pre-fetch part hook to clear temporary legend materials.
Old:
public FOMatLegendController foMatLegendController("FODataMaterialLegend"); /** * Append a SymbolMaterial to the DsMaterialLegend for the specified world. */ public void foDataAppendLegendMaterial(Material m, Snapper owner) { once { appendPostFinalizeHook(function foDataPostFinalizeLegendHook); } foMatLegendController.appendLegendMaterial(m, owner, foDataMLCreator); }
New:
public FOMatLegendController foMatLegendController("FODataMaterialLegend") : keep; /** * Append a SymbolMaterial to the DsMaterialLegend for the specified world. */ public void foDataAppendLegendMaterial(Material m, Snapper owner) { once { appendPreFetchPartsHook(function foDataPreFetchPartsLegendHook); // new line appendPostFinalizeHook(function foDataPostFinalizeLegendHook); } foMatLegendController.appendLegendMaterial(m, owner, foDataMLCreator); } /** * Pre fetch part hook for clearing temp legend materials. */ private void foDataPreFetchPartsLegendHook(Space space) { MaterialLegendController controller = foMatLegendController; if (controller) controller.clearTempLegendMaterials(); }
For a more generic code you can refer to cm/abstract/material/hooks.cm
OfficeMaterialLeg
with MaterialLegendControllerMaterialLegendController cannot be constructed using "OfficeMaterialLeg"
as its auxillary key. If you are affected, you can migrate your old legends by extending MaterialLegendController and override previouslyUsingLegacyMLKey()
to return true
.
Old:
public MaterialLegendController foMatLegendController("OfficeMaterialLeg") : keep;
New:
public FOMatLegendController foMatLegendController("FOMaterialLegend") : keep; /** * FO MaterialLegendController. */ public class FOMatLegendController extends MaterialLegendController { /** * Previously using OfficeMaterialLeg? */ public bool previouslyUsingLegacyMLKey() { return true; } }
public class MhStorageSpawnerSelector extends MhSystemSpawnerSelector public SnapperSpawner spawner(LayerSet classification, Object env=null) { Bugfix: Fixed spawner selection to prioritize exact match, over an equally-attractive-but-partial match. There were cases where an exact-match come later due to us iterating in alphabetical order (through allSorted) and we would return only a partial match. MhStorageEditorDialog - Issues with having leftover `Windows` leaking UI controls in `MhStorageEditorDialog` and `MhStorageConfigurator` has been fixed. You may need to double check your UI behaviors if you do any update or removal of UI controls dynamically. - `buildPropertiesSubWindow()` for building `MhStorageEditorItem` now use `item.class.toS` instead of `item.label` as key for the `Card`. MhSnapperShape - Note: There are two versions of the localBound method which can be easily confused: localBound() and localBound(symbol[]) - localBound() now checks for owner before executing the localBoundWithChildren() case, and will return localBound(null) which returns the geometry's bound in other cases. This fixes the inconsistent bound returned during contexts in which the shape have not obtained an owner yet.
The freeSpaceAbove
property is no longer visible when there is no level above the currently selected snapper.
Old: /** * Show height prop. */ extend public void showHeightProperties() { for (k, _ in getPropsWithAttribute(#height)) if (corePropertyHidden(k)) showCoreProperty(k); } New: /** * Show height prop. */ extend public void showHeightProperties(MhSnapper owner, MhSnapper toSnapper) { for (k, _ in getPropsWithAttribute(#height)) if (corePropertyHidden(k) and propIsVisible(k, owner, toSnapper)) showCoreProperty(k); } /** * Property is visible? */ extend public bool propIsVisible(str key, MhSnapper owner, MhSnapper toSnapper) { if (key == "freeSpaceAbove") { <MhSnapper firstAbove, MhSnapper firstBelow> = getFirstAboveAndBelowSnappers(owner, toSnapper, owner.pos.z); if (!firstAbove) return false; } return true; }
These methods have been introduced to allow more control over the bounds used to calculate freeSpaceAbove
and freeSpaceBelow
. Override geoSymbolsForCalculation()
to control what geometries should be included in the bound.
/** * Free spaces domains. * v0 = freeSpaceAbove domain. * v1 = freeSpaceBelow domain. */ extend public <SubSet, SubSet> freeSpacesDomains(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env=null) { return <coreProperty("freeSpaceAbove").?domain, coreProperty("freeSpaceBelow").?domain>; } /** * Get snapper bound used for calculation. */ extend public box boundForCalculation(MhSnapper snapper, bool toSpace=false) { Box res = cachedBounds.get(snapper); if (!res) { res = shapeBoundWithChildren(snapper, geoSymbolsForCalculation()); cachedBounds.put(snapper, res); } if (toSpace) return res.v.transformed(snapper.toSpaceTransform); return res.v; } /** * Symbols used to retrieve geometries for snapper bound used for calculation. */ extend public symbol[] geoSymbolsForCalculation() { return [sLevel, sUnitLoad, sTunnel]; }
calculateFreeSpaceAboveAndBelow()
has been updated to use boundForCalculation()
.
Old: /** * Calculate free space above and below. */ extend public <Double, Double> calculateFreeSpaceAboveAndBelow(Snapper owner, Snapper toSnapper, double insertH, Snapper specificAboveSnapper=null, Snapper specificBelowSnapper=null) { box b = owner.localBound(); box b0 = toSnapper.localBound; Double above = b0.h - insertH; Double below = insertH b.p0.z; <Snapper firstAbove, Snapper firstBelow> = getFirstAboveAndBelowSnappers(owner, toSnapper, insertH); if (firstAbove) { above = firstAbove.pos.z - insertH - b.h; } if (firstBelow) { below = insertH - firstBelow.pos.z - firstBelow.localBound.h; } if (specificAboveSnapper and specificAboveSnapper != firstAbove) above = null; if (specificBelowSnapper and specificBelowSnapper != firstBelow) below = null; return <above, below>; } New: /** * Calculate free space above and below. */ extend public <Double, Double> calculateFreeSpaceAboveAndBelow(MhSnapper owner, MhSnapper toSnapper, double insertH, Snapper specificAboveSnapper=null, Snapper specificBelowSnapper=null) { box ownerB = boundForCalculation(owner); box b0 = toSnapper.localBound; Double above = b0.h - insertH; Double below = insertH ownerB.p0.z; <MhSnapper firstAbove, MhSnapper firstBelow> = getFirstAboveAndBelowSnappers(owner, toSnapper, insertH); if (firstAbove) { above = boundForCalculation(firstAbove, toSpace=true).p0.z - insertH - ownerB.p1.z; } if (firstBelow) { below = insertH ownerB.p0.z - boundForCalculation(firstBelow, toSpace=true).p1.z; } if (specificAboveSnapper and specificAboveSnapper != firstAbove) above = null; if (specificBelowSnapper and specificBelowSnapper != firstBelow) below = null; return <above, below>; }
The updateHeightProperties()
method has been broken up into multiple methods to make it easier to override. These methods have also had behavioral changes.
insertHeight
property is unlocked if the locked height is no longer valid (e.g. switching candidates to a different bay with a different height domain).Old: if (heightProp.?locked and heightProp == currentProp) { p.z = heightProp.value.safeDouble; aboveProp.?unlock(); belowProp.?unlock(); } New: /** * Check insert height locked. */ extend public void checkInsertHeightLocked(point& p, SubSet heightDomain) { CoreProperty heightProp = coreProperty("insertHeight"); if (heightProp.?locked) { // Height is locked, maintain current height. if (heightProp.value !in heightDomain) { heightProp.unlock(); } else { p.z = heightProp.value.safeDouble; coreProperty("freeSpaceAbove").?unlock(); coreProperty("freeSpaceBelow").?unlock(); } } }
freeSpaceAbove
property is unlocked if the locked value is no longer valid or if there is no longer a snapper above the selected snapper. The z-position calculation has also been modified to utilize the boundForCalculation()
method.Old: if (aboveProp.?locked and aboveProp == currentProp) { p.z = (firstAbove ? firstAbove.pos.z - b.h : maxH) - aboveProp.value.safeDouble; heightProp.?unlock(); belowProp.?unlock(); } New: /** * Check free space above locked. */ extend public void checkFreeSpaceAboveLocked(point& p, SubSet aboveDomain, MhSnapper firstAbove, MhSnapper owner, MhSnapper toSnapper) { CoreProperty aboveProp = coreProperty("freeSpaceAbove"); if (aboveProp.?locked) { if (aboveProp.value !in aboveDomain or !firstAbove) { aboveProp.unlock(); } else { p.z = (firstAbove ? firstAbove.pos.z boundForCalculation(firstAbove).p0.z - boundForCalculation(owner).p1.z : toSnapper.localBound.h) - aboveProp.value.safeDouble; coreProperty("insertHeight").?unlock(); coreProperty("freeSpaceBelow").?unlock(); } } }
freeSpaceBelow
property is unlocked if the locked value is no longer valid. The z-position calculation has also been modified to utilize the boundForCalculation()
method.Old: if (belowProp.?locked and belowProp == currentProp) { p.z = firstBelow.MhSnapper.?localBound().p1.z (firstBelow? firstBelow.pos.z : 0) belowProp.value.safeDouble - b.p0.z; heightProp.?unlock(); aboveProp.?unlock(); } New: /** * Check free space below locked. */ extend public void checkFreeSpaceBelowLocked(point& p, SubSet belowDomain, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper) { CoreProperty belowProp = coreProperty("freeSpaceBelow"); if (belowProp.?locked) { if (belowProp.value !in belowDomain) { belowProp.unlock(); } else { p.z = (firstBelow ? boundForCalculation(firstBelow, toSpace=true).p1.z : 0) belowProp.value.safeDouble - boundForCalculation(owner).p0.z; coreProperty("insertHeight").?unlock(); coreProperty("freeSpaceAbove").?unlock(); } } }
freeSpaceAbove
and freeSpaceBelow
properties will now be refreshed if their values change but insertHeight
did not.Old: double oldInsertHeight = insertHeight; if (owner.pos != p) owner.setPos(p); insertHeight = p.z; <Double above, Double below> = calculateFreeSpaceAboveAndBelow(owner, toSnapper, insertHeight); freeSpaceAbove = above.?v; freeSpaceBelow = below.?v; if (oldInsertHeight != insertHeight) { heightProp.?refreshProperty(); aboveProp.?refreshProperty(); belowProp.?refreshProperty(); // Calling diff rebuild instead causes the prop UI to constantly flicker. if (domainsUpdated) { for (prop in [heightProp, aboveProp, belowProp]) { for (CoreDistanceField ctrl in prop.controls) { ctrl.validSubSet = prop.domain; break; } } } } New: /** * Update height and space values. */ extend public void updateHeightAndSpaceValues(point p, MhSnapper owner, MhSnapper toSnapper, bool domainsUpdated) { double oldInsertHeight = insertHeight; if (owner.pos != p) owner.setPos(p); insertHeight = p.z; <Double above, Double below> = calculateFreeSpaceAboveAndBelow(owner, toSnapper, insertHeight); double oldFreeSpaceAbove = freeSpaceAbove; double oldFreeSpaceBelow = freeSpaceBelow; freeSpaceAbove = above.?v; freeSpaceBelow = below.?v; CoreProperty heightProp = coreProperty("insertHeight"); CoreProperty aboveProp = coreProperty("freeSpaceAbove"); CoreProperty belowProp = coreProperty("freeSpaceBelow"); if (oldFreeSpaceAbove != freeSpaceAbove) aboveProp.?refreshProperty(); if (oldFreeSpaceBelow != freeSpaceBelow) belowProp.?refreshProperty(); if (oldInsertHeight != insertHeight) heightProp.?refreshProperty(); // Calling diff rebuild instead causes the prop UI to constantly flicker. if (domainsUpdated) { for (prop in [heightProp, aboveProp, belowProp]) { for (CoreDistanceField ctrl in prop.controls) { ctrl.validSubSet = prop.domain; break; } } } }
MhBracingPattern
now inherits from MhStorageSingleton
and should be treated as singletons.
The following functions have been added to retrieve the generic bracing patterns available in the abstract.
/** * Bracing pattern singletons. */ public MhDBracePattern mhDBracePattern() { static MhDBracePattern pattern; if (!pattern) ?pattern = mhStorageSingleton(MhDBracePattern()); return pattern; } public MhKBracePattern mhKBracePattern() { static MhKBracePattern pattern; if (!pattern) ?pattern = mhStorageSingleton(MhKBracePattern()); return pattern; } public MhXBracePattern mhXBracePattern() { static MhXBracePattern pattern; if (!pattern) ?pattern = mhStorageSingleton(MhXBracePattern()); return pattern; } public MhZBracePattern mhZBracePattern() { static MhZBracePattern pattern; if (!pattern) ?pattern = mhStorageSingleton(MhZBracePattern()); return pattern; }
applySnappers()
previously only returned the main snapper of the editor space selection. It has been changed to now return all level snappers and unit load snappers in the selection.
Old: /** * Apply snappers. */ public MhSnapper{} applySnappers(Space space) { if (SpaceSelection selection = space.selection) { ?MhSnapper main = selection.main; if (main.isLevel) return {MhSnapper: main}; } return super(..); } New: /** * Apply snappers. */ public MhSnapper{} applySnappers(Space space) { if (SpaceSelection selection = space.selection) { MhSnapper{} res(); for (MhSnapper snapper in selection.snappers) { if (snapper.isLevel or snapper.isUnitLoad) { res << snapper; } } return res; } return super(..); }
Previously only 1 aisle would be generated for the pre configurator preview snappers. It is now possible to override this to generate different number of aisles based on the selected row layout. We now also generate 2 aisles for when the selected row layout is of class MhRowSingleEndLayout
.
Old: /** * Setup row animation info for preview population. */ extend public MhRowAnimationInfo rowAnimationInfo(MhStorageConfiguration config, MhSnapper row) { ... info.crossAisleDist = config.calcWidthFromAisles(info, 1); return info; } New: /** * Setup row animation info for preview population. */ extend public MhRowAnimationInfo rowAnimationInfo(MhStorageConfiguration config, MhSnapper row) { ... info.crossAisleDist = config.calcWidthFromAisles(info, rowNumAisles(info.rowLayout)); return info; } /** * Row number of aisles for preview population. */ extend public int rowNumAisles(MhRowLayout layout) { if (layout in MhRowSingleEndLayout) return 2; return 1; }
There are now new MhStorageConfigurationPreview
classes to handle number of aisles for the MhRowSingleEndDoubleDeepLayout
or MhCantileverSingleEndRowLayout
layouts.
New: /** * Racking configuration preview. */ public class MhRackingConfigurationPreview extends MhStorageConfigurationPreview { /** * Row number of aisles for preview population. */ public int rowNumAisles(MhRowLayout layout) { if (layout in MhRowSingleEndDoubleDeepLayout) return 2; return super(..); } } /** * Cantilever configuration preview. */ public class MhCantileverConfigurationPreview extends MhRackingConfigurationPreview { /** * Row number of aisles for preview population. */ public int rowNumAisles(MhRowLayout layout) { if (layout in MhCantileverSingleEndRowLayout) return 2; return super(..); } } Use: public class MhRackingConfiguration extends MhStorageRowConfiguration { /** * Preview behavior. */ public MhStorageConfigurationPreview configurationPreview() { if (!preview) preview = MhRackingConfigurationPreview(); return preview; } }
uprightDepth
is now meant to be included in frameDepth
by default, so we no longer manually add that value when retrieving the total frame depth.
Old: public class MhCantileverSinglePopulator extends MhCantileverRowPopulator { public double cantileverFrameDepth() { double uprightD = uprightDepth; double frameD = frameDepth; return frameD uprightD; } } New: public class MhCantileverSinglePopulator extends MhCantileverRowPopulator { public double cantileverFrameDepth() { return frameDepth; } } Old: public class MhCantileverDoublePopulator extends MhCantileverRowPopulator { public double cantileverFrameDepth() { double uprightD = uprightDepth; double frameD = frameDepth; return frameD * 2 uprightD; } } New: public class MhCantileverDoublePopulator extends MhCantileverRowPopulator { public double cantileverFrameDepth() { return frameDepth*2 - uprightDepth; } } Old: public class MhCantileverRowPopulator extends MhStorageRowPopulator : abstract { extend public double cantileverBayDepth() { return frameDepth; } } New: public class MhCantileverRowPopulator extends MhStorageRowPopulator : abstract { extend public double cantileverBayDepth() { return frameDepth - uprightDepth; } }
The center bay has a new symbol added to it's classification sBayCenter
.
Old: public MhEngineEntry createRackingRowEntry() { ... LayerSet centerBayLayer = layerSet(sBay, sFlueGap); } New: public MhEngineEntry createRackingRowEntry() { ... LayerSet centerBayLayer = layerSet(sBay, sFlueGap, sBayCenter); }
Further changes have been made to construct and populate arm snappers on frame snappers.
public class MhCantileverLevelConstructionalPopulateFunction extends MhLevelConstructionalPopulateFunction { /** * Populator */ public MhPopulator populator(box populateBox) { MhPopulator res = super(..); if (res as MhStepperPopulator) { point p = populateBox.p0; p.x += populateBox.w/2; res.startPos = p; res.currentPos = p; } return res; } /** * Execute. */ public Object exec() { ?MhStorageConfiguration config = configuration(); if (!config) return false; if (isFrame(parent)) { double uprightD = config.frameUprightDepth().safeDouble(); if (isDouble(parent)) { // Populate arms front and back. MhEngineConstructionEntry[] children; str key = parent.cacheKey(); ?children = mhSystemEngineCache.get(key).?obj.copy(); if (children.empty) { box b = parent.localBound; b.d = (b.d - uprightD)/2; box b1 = b.moved((b.p0.x, b.p1.y uprightD, b.p0.z)); MhEngineConstructionEntry[] front = populateLevels(0, b); MhEngineConstructionEntry[] back = populateLevels(0, b1, 0deg); children = front back; mhSystemEngineCache.put(key, children.copy()); } for (c in children) parent << c; return true; } // Single frame. box b = parent.localBound(); b.d = b.d - uprightD; addLevels(0, b); return true; } return super(..); } /** * EntryLayout. * Why call it a bayEntry when it can be any entry? */ public MhBayEntryLayout entryLayout() { if (MhSystemSpawnerSelector ss = getSpawnerSelector) { ?MhSnapperSpawner frame = getSpawnerSelector.?spawner(layerSet(sFrame)); return frame.?entryLayout(ss).?MhBayEntryLayout; } return null; } /** * Default entry. */ public MhEngineConstructionEntry defaultLevelEntry(box b, LayerSet classification) { if (isFrame(parent)) return super(..); return null; }
public class MhCantileverFrameEngineBehavior extends MhFrameEngineBehavior { /** * Put engine function to run. */ public void putEngineRunFunctions(MhSnapper snapper, symbol event="", Object env=null) { if (!snapper) return; MhEngine engine = engine(snapper); switch(event) { case sShapeChange, sShapeAndSymChange : { if (env as MhSnapperChangedEnv) { bool stealing = false; if (snapper != env.owner) { if (MhSnapper stealSource = getStealSource(env, snapper)) { stealing = true; mhPutEngineRunFunction(engine, "rowChildStealConfig", snapper=snapper, source=stealSource); } } Object holeZDomain = snapper.domain("holeZDomain"); CollisionPrimitive additionalPrim = additionalPrim(snapper); if (env.translatedKey in ["uprightH", "h"] and !stealing) { if (levelPopulate(snapper)) { // level height changed mhPutEngineRunFunction(engine, "levelPopulate", snapper=snapper, holeZDomain=holeZDomain, loadWithinLimit=loadWithinLimit(snapper), revertAutoULPopulate=revertAutoULPopulate(snapper), additionalPrim=additionalPrim, configKey=snapper.configName); } } if (env.translatedKey in ["d", "h"] and !stealing) { // Run level arrange, since cantilever levels are children to frames. mhPutEngineRunFunction(engine, "levelArrange", snapper=snapper, holeZDomain=holeZDomain, additionalPrim=additionalPrim); } } } case sSnapperInserted: { Object holeZDomain = snapper.domain("holeZDomain"); CollisionPrimitive additionalPrim = additionalPrim(snapper); // Run level arrange, since cantilever levels are children to frames. mhPutEngineRunFunction(engine, "levelArrange", snapper=snapper, holeZDomain=holeZDomain, additionalPrim=additionalPrim); } default : { } }; super(..); } /** * Collect engine function to run. */ public void fetchEngineFunctionsRunG2(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) { super(..); switch (event) { case sShapeChange, sShapeAndSymChange : { functions << MhEngineFunctionRun("rowChildStealConfig"); functions << MhEngineFunctionRun("levelPopulate"); functions << MhEngineFunctionRun("levelArrange"); } case sSnapperInserted: { functions << MhEngineFunctionRun("levelArrange"); } default :; }; } /** * Gather function args. */ public str->Object engineFunctionArgsG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", MhPreprocessArgsEnv preprocessArgs=null, Object env=null) { switch (func.name) { case "levelPopulate" : { return props { snapper=snapper, holeZDomain=snapper.domain("holeZDomain"), loadWithinLimit=loadWithinLimit(snapper), revertAutoULPopulate=revertAutoULPopulate(snapper), additionalPrim=additionalPrim(snapper), configKey=snapper.configName }; } case "levelArrange" : { return props { snapper=snapper, holeZDomain=snapper.domain("holeZDomain"), additionalPrim=additionalPrim(snapper) }; } default :; }; return super(..); } /** * Accepts function run. */ public bool acceptFunctionRunG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) { switch (func.name) { case "levelPopulate" : { if (env as MhSnapperChangedEnv) { if (snapper != env.owner) { if (MhSnapper stealSource = getStealSource(env, snapper)) { return false; } } return env.translatedKey in ["uprightH", "h"] and levelPopulate(snapper); } return false; } case "levelArrange" : { if (event in [sShapeChange, sShapeAndSymChange]) { if (env as MhSnapperChangedEnv) { if (snapper != env.owner) { if (MhSnapper stealSource = getStealSource(env, snapper)) { return false; } } return env.translatedKey in ["d", "h"]; } return false; } else if (event == sSnapperInserted) { return true; } } default :; }; return super(..); } /** * Invalidate and return true if required. */ public bool invalidateIfRequired(Object owner, symbol k, MhSnapperChangedEnv env=null) { if (k == sAfterInitialExport) return true; return super(..); }
OfficeSnapperManagerRedView3D now will call getDialog().updateCoreProperties() when the selection is changed in the view.
Made fixes/improvements to the dialog and OfficeSnapperManager in regards to its support for G2 quick properties.
Updated how last values are handled for PanelSkinInsertAnimation.
Fix a graphical issue with the PanelSkinArrowVessel where it wasn't properly rotated
beginSideStretch(Connector c) now calls pickedUp() after stretchDisconnectInGroup().
If you have used SIF rs in your extension and they are now missing, you have the following options:
putNextRsPkg("custom.yourExtension.sif", "cm.abstract.sif")
cm.abstract.sif
package.Old: $sifFilesFilter; New: getRs("sifFilesFilter", "cm.abstract.sif");
cm.abstract.office
will no longer always startup for users that do not require it, as part of core package dependency cleanup and performance optimization. Previously, starting cm.abstract.dataSymbol
will always result in the startup of cm.abstract.office
.
This may result in some PartColumns
from cm.abstract.part
not being registered automatically at all times as before, manifesting in the form of a crash for extensions that do not directly depend on cm.abstract.office
.
Suggested fix is to explicitly declare and register the part columns you need in your custom extensions by calling registerPartColumn()
. You may get warnings if the column have already been registered by other extensions, but it should able to be ignored safely.
AOComponent now has it's propdefs set as cached=true.
Fixed a bug where you couldn't set an AOComponent's parent to null via the propdef.
Fixed a bug where spanned stack frames could cause panels to go below the floor due to snapping lower then expected.
In an effort to lessen drawing file size, CustomerOwnMaterials
are no longer stored in World.auxiliaryData
and have been moved
to World.cachedData
.
Note: This means unused COMs are no longer saved with the drawing.
For direct access to a COM, we advise usage of cm.abstract.material.customerOwnMaterials(World world)
Example:
if (CustomerOwnMaterial com = customerOwnMaterials(mainWorld()).?find(myKey)) { // do something with your COM }
Updated the base constructor to call initialize.
Old: public constructor() { /** Default */ } New: public constructor() { super(null); initialize(); }
Added a bool to allow for code to check whether the animation is in the doSuperStretch() method.
Added a call to droped() when it inserts snappers from super stretch
setDefaultViewModes()
now acts on mainWorld()
instead of activeWorld()
, so it is no longer dependent on the last view that was made active.
Old: /** * Set default view modes. */ public void setDefaultViewModes() { if (World world = activeWorld()) { if ((ViewMode[]) viewModes = defaultViewModes()) { world.setViewModes(viewModes); } } } New: /** * Set default view modes. */ public void setDefaultViewModes() { if (World world = mainWorld(selectWorldIfNull=false)) { if ((ViewMode[]) viewModes = defaultViewModes()) { world.setViewModes(viewModes); } } }
Added new fields to calculateWorldPrice
for BOM analytics purpose.
Old: public double calculateWorldPrice(Space space, bool ignoreGlobalAdjustments=false, bool abortable=false, Int partCount=null) { New: public double calculateWorldPrice(Space space, bool ignoreGlobalAdjustments=false, bool abortable=false, Int partCount=null, Timespan timelimit=null, Datetime deadline=null, bool flushSomePrices=false) {
An issue was fixed in the DoubleRange and DoubleSubRange classes which could potientially cause an infinite loop.
old: public Object next(Object o) { (...) if (res > maxV) return maxV; (...) } New: public Object next(Object o) { (...) if (res > maxV) return null; (...) } Old: public Object previous(Object o) { (...) if (res < minV) return minV; (...) } New: public Object previous(Object o) { (...) if (res < minV) return null; (...) }
Added: public class ToolTipGProp extends GProp {}
Before 14.5 the collection of lights in a block space was stored incorretly in the FetchLightEnv3D. It tryed to store etch individual light per snapper in the entries map. This hade the side effect that etch light over write the privies light so only on light would be stored per snapper. This has now been change to store a Light3D[] instead for etch snapper. This means that any code that uses the FetchLightEnv3D entries field need to change to use a Light3D[] insted of Light3D.
Old: public constructor(PhotoLabDialog dialog, Space space, Window parent, View3D peekAtView3D) { view2D = REDView2D(space, "lab2DView", parent); (...) New: public constructor(PhotoLabDialog dialog, Space space, Window parent, View3D peekAtView3D) { view2D = FilteredLabView2D(space, "lab2DView", parent); (...)
Method processProtocol() has been updated to accurately calculate job transfer progress. If buffer size is used to calculate progress and the number of bytes packed is less than buffer size, progress will not be calculated correctly. Instead we compare the number of bytes packed.
Old: extend package rpcStatus processProtocol() { (...) if (zcall.exec() == 0) { if (job) job.packageProgress(packageToSend.first, packageToSend.last, factory.bufferSize, factory.totalSize); (...) } New: extend package rpcStatus processProtocol() { (...) if (zcall.exec() == 0) { if (job) job.packageProgress(packageToSend.first, packageToSend.last, factory.bytesPacked.int, factory.totalSize); (...) }
Calling cm.core.ui.showWorldPropertiesDialog(World, Window)
will no longer show the World Properties dialog as that functionality has been moved to the Info Page.
Similarly, setting the showWorldPropertiesAtStart
boolean in CoreSettings will no longer work to show the dialog.
Changed the subclass of PaperDraw3DPolyReferencePointInsertAnimation
from Draw3DReferencePointInsertAnimation
to Draw3DPolyReferencePointInsertAnimation
. This changes the insert animation the "Grouped help points" button in the "Drawing (paper)" library in paperspace from inserting a line to inserting a polyline.
// cm.std.draw3D.draw3DReferencePoint.cm Modified: public class PaperDraw3DPolyReferencePointInsertAnimation extends Draw3DPolyReferencePointInsertAnimation
Some of the props added now support tooltips.
Old: public GProp[] initProps() { GProp[] seq(); DoubleRange span(-1, 1); seq << GProp("toneMapping", $toneMappingLabel, Bool(true)); seq << GProp("toneMapBackground", $toneMapBackgroundLabel, Bool(true)); seq << GProp("opendenoise", $openDenoiseLabel, Bool(true)); (...) New: public GProp[] initProps() { GProp[] seq(); DoubleRange span(-1, 1); seq << TooltipGProp("toneMapping", $toneMappingLabel, Bool(true), $toneMappingTip); seq << TooltipGProp("toneMapBackground", $toneMapBackgroundLabel, Bool(true), null, $toneMapBackgroundTip); seq << TooltipGProp("opendenoise", $openDenoiseLabel, Bool(true), $openDenoiseTip); (...)
The methods Window.exit
and Window.mouseLeftChild
can now get null passed into the to
argument.
extend public void exit(pointI p, Window to) { ... } extend public void mouseLeftChild(Window child, Window to) { ... }
This happens when the mouse cursor moves from a CET window and outside of CET. It means that code in these methods needs to be null safe in regards to the to
window.
DsRuleType
catalog entity is now fixed to be vendor specific (as per the OFDA schema, similar to Features and Products). Following the convention, DsRuleType
is associated a particular by having the vendor code stored in the class: a new vendor
field as added.
// DsRuleType (cm/abstract/dataSymInterface/catalog/ruleType.cm) Added: `private str _vendor Added: extend public str vendor() Added: extend public str vendor=(str vend)
Some common abstract material handling debug tools have been moved and consolidated into cm.abstract.materialHandling.debug
package, and some automated test methods have been renamed for clarity:
cm/abstract/materialHandling/debug/library.cm public void appendMhDebugContainerLimbs(LibraryLimb root, symbol pkg=#:package : caller eval) cm/abstract/materialHandling/storage/racking/test/initTest.cm - Old: public void initTestSuite() { New: public void mhInitTestSuite() { - Old: public void runnerTestSuite() { New: public void mhRunnerTestSuite() { - Old: public void compileAll() { New: public void mhCompileAll() {