Compile Time Changes

ASArcLocations

The codes in cm/core/asArcLocations.cm have been moved to cm/core/assocDims/asArcBoundLocations.cm.

The class asArcLocations has been renamed to ASArcBoundLocations.

Old: public class ASArcLocations extends ASLocations
New: public class ASArcBoundLocations extends ASLocations

The function aslArcLocations has also been renamed to aslArcBoundLocations.

Old: public ASLocations aslArcLocations()
New: public ASLocations aslArcBoundLocations()

In addition, the PropDef aslArc and aslWidth have also been replaced by Snapper::AssociativeArc() and Snapper::AssociativeArcWidth() respectively.

// Class: Snapper
Old: arc "aslArc"
New: extend public Arc associativeArc()

Old: double "aslWidth"
New: extend public Double associativeArcWidth()

ASLocation

The file 'asLocations.cm' as been moved from cm.core to cm.core.assocDims.

The following interface changes were made to ASLocation.

// Class: ASLocation
Old: extend public point pos(Snapper z) : abstract
New: extend public Point pos(Snapper z) : abstract // Can return null when there is no valid position

The following interface changes were made to ASLocations.

// Class: ASLocations
Old: extend public ASLocation closest(Snapper z, line l) : abstract
New: extend public ASLocation closest(Snapper z, point toPoint, ASClosestLocEnv env=null) : abstract // Return the closest ASLocation to a point instead of a line

Old: extend public ASLocation[] all(Snapper z, line l) : abstract
New: extend public ASLocation[] all(Snapper z) : abstract

The global variable aslBoundToken has also been renamed to asLocKeyToken.

Old: public const str aslBoundToken = "_";
New: public const str asLocKeyToken = "_";

Accessories

  • Moved priority code/functionaly from base AccessoryEnv and related classes to a subclass.
    • This was to support simpler situations where priority doesn't matter.
    • As a result, it should be easier to use this system in simple scenarios, but also easy to scale up to use priority if needed later.
  • Renamed AccessoryPositioningFactory to AccessoryGenerationBehavior
    • This was to better represent that this isn't a factory, but more like a behavior in design/functionality.
    • References to the old type will need to be updated.
    • The alias was changed to AccGenBehavior.
    • The prop key we use in AO and related animations was also changed.

Associative dimensions

Associative dimensions is a fairly new feature that is introduced to allow a dimension to be associated with a snapper. When a dimension is associated with a snapper, the dimension will be updated automatically to match the new position and dimension of the associated snapper, when the associated snapper is moved, stretched, etc. Please refer to Associative Dimensions for more info.

The old associative dimension implementation that uses the MeasureRefSnap class has been deprecated and replaced with the new associative dimension implementation that uses the ASSnapperRef` class.

The following interface changes have been made to the allowAssociativeDimensions global flag.

Old: public bool allowAssociativeDimensions
New: public bool allowAssociativeDimensions() { return coreSettings.safeGetBool(cAllowAssociativeDimensionsKey, default=true); }
New: private const str cAllowAssociativeDimensionsKey = "allowAssociativeDimensions"
New: public void setAllowAssociativeDimensions(bool allow) { coreSettings.put(cAllowAssociativeDimensionsKey, allow)

AssociativeFeatureSearchFeedbackVessel

The AssociativeFeatureSearchFeedbackVessel class has been moved from cm/abstract/draw/coreStraitDrawMeasureInsertAnimationVessels.cm to cm/core/assocDims/associativeFeatureSearchFeedbackVessel.cm.

The associative field has been removed and replaced with the _associativeCandidate field.

// Class: AssociativeFeatureSearchFeedbackVessel
Old: public bool associative;
New: private Snapper _associativeCandidate;

Some fixes and improvements were also introduced in the following methods to make AssociativeFeatureSearchFeedbackVessel works with the new associative dimension implementation. Please add the changes manually when necessary if you have sub-classes that override these methods.

// Class: AssociativeFeatureSearchFeedbackVessel
Modified: public bool update()
Modified: public GInstance get2D()

BaselineDimensionInsertAnimation

The following interface changes were introduced in BaselineDimensionInsertAnimation for the animation to work with the new associative dimension implementation.

// Class: BaselineDimensionInsertAnimation
Removed: public bool hasSnapped;
Removed: public bool assocLoc;
Removed: extend public void snappedTo(Snapper z)

Old: public Snapper to;
New: extend public Snapper toAssocSnapper()

Some fixes and improvements were also introduced in the following methods to make BaselineDimensionInsertAnimation works with the new associative dimension implementation. Please add the changes manually when necessary if you have sub-classes that override these methods.

// Class: BaselineDimensionInsertAnimation
Modified: public constructor()
Modified: extend public void appendProperties(AnimationProperties ap)
Modified: extend public FeatureSearch featureSearch(AnimationMouseInfo mi)
Modified: extend public void move(AnimationMouseInfo mi)
Modified: extend public void drawGraphs(LayerBuffer lb)
Modified: extend public PropObj end()

ChainDraw3DMeasure

An interface change has been made to the method ChainDraw3DMeasure::insertTick(..) to accept an ASSnapperRef that will be assigned to the inserted tick when inserting a tick.

// Class: ChainDraw3DMeasure
Old: extend public void insertTick(point p, Str txt=null, bool rebuild=true);
New: extend public void insertTick(point p, Str txt=null, ASSnapperRef ref=null, bool rebuild=true);

Some fixes and improvements were also introduced in the following methods to make ChainDraw3DMeasure work with the new associative dimension implementation. Please add the changes manually when necessary if you have sub-classes that override these methods.

// Class: ChainDraw3DMeasure
Modified: extend public void build2D(double offset)
Modified: extend public void mergeTick(int i)
Modified: extend public void absorb(ChainDraw3DMeasure chain)
Modified: extend public void changeAngle(angle a, point p, Double legLength=null)
Modified: extend public void putSubLength(int i, double v)
Modified: extend public void putTotLength(int i, double v)

In addition, the following interface change was made to ChainTick.

// Class: ChainTick
Old: public constructor auto()
New: public constructor(int index, double d, double val, double tot, double adaptedTot, double adaptedVal)

ChainDrawEditAnimation

Changes were made in the following methods to make ChainDrawEditAnimation and its sub-classes associative. Please add the changes to the relevant methods if you have sub-classes that override these methods.

// Class: ChainDrawEditAnimation
Modified: extend public point pos=(point v)
Modified: extend public void initVessels()
Modified: extend public void update(bool refreshMouseInfo=false)

// CLass: ChainDrawEditVessel
Modified: extend public PropInputSetting inputSetting(str key, PropDef def)
Modified: extend public void userPropertyChanged(str key, Object value, Object oldValue)
Modified: extend public void ownerEvent(str event=null, Object obj=null, OwnerEventVisitor v=null)

// Class: ChainDrawInsertVessel
Modified: extend public PropInputSetting inputSetting(str key, PropDef def)
Modified: extend public void orderProperties(str[] order)
Modified: extend public bool update()

Core properties

Compile time migration changes for core properties can be found in the Core properties migration guide.

CoreStraitDrawMeasureInsertAnimation

Some changes were made in the following methods in CoreStraitDrawMeasureInsertAnimation and its sub-classes, CoreDrawMeasureInsertAnimationStart, CoreDrawMeasureInsertAnimationSecond and CoreDrawMeasureInsertAnimationLast to make the insert animations associative. Please add the changes manually when necessary if you have sub-classes that override these methods.

// Class: CoreStraitDrawMeasureInsertAnimation
Modified: extend public PropInputSetting inputSetting(str key, PropDef def)
Modified: extend public bool visibleInFactory(str key, PropObj owner, symbol{} attributes=null)
Modified: extend public void orderProperties(str[] order)
Modified: extend public void userPropertyChanged(str key, Object value, Object oldValue)

// Class: CoreDrawMeasureInsertAnimationStart
Modified: extend public void appendPriorityToolAlternatives(SnapAlternative[] list)
Modified: extend public void selected()
Modified: extend public bool visibleInFactory(str key, PropObj owner, symbol{} attributes=null)

// Class: CoreDrawMeasureInsertAnimationSecond
Modified: extend public void initialize()
Modified: extend public void initVessels()
Modified: extend public bool visibleInFactory(str key, PropObj owner, symbol{} attributes=null)
Modified: extend public void appendPriorityToolAlternatives(SnapAlternative[] list)
Modified: extend public void selected()

In addition, the codes in the following methods in CoreStrait2DDrawMeasureInsertVessel have also been changed. Please add the changes to the relevant methods if you have sub-classes that override these methods.

// Class: CoreStrait2DDrawMeasureInsertVessel
Modified: extend public void setStartPos(point p, Orientation o)
Modified: extend public void setSecondPos(point p, Orientation o)
Modified: extend public void insert()

DrawMeasure

By default, all sub-classes that extend from StaticDraw3DMeasure (except WorktopMeasure and WardrobeStaticDrawMeasure), ChainDraw3DMeasure and DrawRadialMeasure are associative. Override the method DrawMeasure::allowAssociate() and return false in order to make a dimension non-associative.

// Class: DrawMeasure
extend public bool allowAssociate()

DrawRadialLeftDragAnimation

DrawRadialLeftDragAnimation has been deprecated and replaced by DrawRadialLeftDragAnimationG2. Everyone is encouraged to migrate to the new G2 animation.

Old: public class DrawRadialLeftDragAnimation extends DragAnimation : deprecated
New: public class DrawRadialLeftDragAnimationG2 extends DragAnimationG2

DrawRadialMeasureInsertAnimation

DrawRadialMeasureInsertAnimation has been deprecated and replaced by DrawRadialMeasureInsertAnimationG2. Everyone is encouraged to migrate to the G2 animation.

Old: public class DrawRadialMeasureInsertAnimation extends DrawInsertAnimation : deprecated
New: public class DrawRadialMeasureInsertAnimationG2 extends ToolAnimationG2

For DrawRadialMeasureInsertAnimationG2, changes were made in the following methods to make the insert animation associative. Please add the changes to the relevant methods if you have sub-classes that override these methods.

// Class: DrawRadialMeasureInsertAnimationG2
Modified: extend public void initVessels()
Modified: extend public PropInputSetting inputSetting(str key, PropDef def)
Modified: extend public void userPropertyChanged(str key, Object value, Object oldValue)
Modified: extend public void update(bool refreshMouseInfo=false)
Modified: extend public void appendPriorityToolAlternatives(SnapAlternative[] list)
Modified: extend public void featureSearchFeedbackVessel()
Modified: extend public void selected()

In addition, the DrawRadialMeasureInsertVessel is modified to not use cached graphics anymore. For this purpose, the codes in the following methods have been modified. Please make similar modifications if you have sub-classes that override these methods.

// Class: DrawRadialMeasureInsertVessel
Modified: public void initialize()
Modified: public void manipulateCache3D(Primitive3D prim, FetchEnv3D env)
Modified: public void manipulateCache2D(GInstance gs)
Modified: public GInstance get2D()
Modified: public Primitive3D get3D(FetchEnv3D env)

Gray-scaling images

cm/core/graph/gAdvImage.cm can now support grayscaled images using the XClipBlackAndWhiteCompanion.

Old: public void imageToRed(Image image, byte[] cachedPixelData, REDEnv2D env, 
                            Transform t, double w, double h)
New: public void imageToRed(Image image, byte[] cachedPixelData, REDEnv2D env,
                            Transform t, double w, double h, bool grayScale=false)

Same goes for gImage.

Old: public constructor(Image image, point2D pos=(0, 0), alignment align=upLeft,
                        double h=-1, double w=-1, LayerExpr layer=null)
New: public constructor(Image image, Image grayImage=null, point2D pos=(0, 0), alignment align=upLeft,
                        double h=-1, double w=-1, LayerExpr layer=null)

gImageHnd.cm:

Old: final public MagickWand getWand(str key, orientation rot=0 deg, double aspect=1, int maxSize=1024)
New: final public MagickWand getWand(str key, orientation rot=0 deg, double aspect=1, int maxSize=1024,
                                    bool grayScale=false)
Old: final private MagickWand newWand(ImageCache cache, str cacheItemKey, Url url, orientation rot,
                                     double aspect, int maxSize, bool resizeMe)
New: final private MagickWand newWand(ImageCache cache, str cacheItemKey, Url url, orientation rot,
                                     double aspect, int maxSize, bool resizeMe, bool grayScale=false)
Old: final private str getCacheItemKey(orientation rot, double aspect, int maxSize, bool needResize) 
New: final private str getCacheItemKey(orientation rot, double aspect, int maxSize, bool needResize, bool grayScale)

cm/import/imagemagick/readImageProps.cm:

Old: public constructor(sizeI size=(-1, -1), sizeI maxSize=(-1, -1),
                        bool invertRows=false, bool flipRedAndBlue=false,
                        bool invertRGB=false, bool dibPadding=false,
                        float opacity=1f, bool alpha=false, bool invertAlpha=false, bool premultiplyAlpha=false,
                        str filter="Lanczos") {
New: public constructor(sizeI size=(-1, -1), sizeI maxSize=(-1, -1),
                        bool invertRows=false, bool flipRedAndBlue=false,
                        bool invertRGB=false, bool dibPadding=false,
                        float opacity=1f, bool alpha=false, bool invertAlpha=false, bool premultiplyAlpha=false,
                        bool grayScale=false, str filter="Lanczos")

cm/import/imagemagick/wand.cm:

Old: private bool getWandPixels(_MagickWand wand,
                                byte[] pixels,
                                byte[] blob,
                                int& channels,
		                        int& width, int& height,
                                int maxWidth, int maxHeight, cstr resizeFilter,
                                bool invertRGB,
                                bool invertRows, bool flipRedAndBlue, bool dibPadding,
                                float opacity, bool alpha, bool invertAlpha, bool premultiplyAlpha);
New: private bool getWandPixels(_MagickWand wand,
                                byte[] pixels,
                                byte[] blob,
                                int& channels,
                                int& width, int& height,
                                int maxWidth, int maxHeight, cstr resizeFilter,
                                bool invertRGB,
                                bool invertRows, bool flipRedAndBlue, bool dibPadding,
                                float opacity, bool alpha, bool invertAlpha, bool premultiplyAlpha, bool grayScale);

Material Legends

  • LegendPart has been renamed to LegacyLegendPart.
  • All code relating to the old MaterialLegends has been moved to LegacyMaterialLegends.cm
    • Though not explicitly deprecated right now, changes to the legacy code may happen to adopt the new system with 12.5.

Mirror

Please follow this link

PropsScheme

Compile time migration changes for PropsScheme listed here.

New features in PropsScheme can be found here.

Snapper

In the old associative dimension implementation, the ASLocations of a snapper is obtained using x-api. In the new implementation, the ASLocations is obtained from the method Snapper::associativeLocations(), instead of x-api. Hence, please remove the x-api codes, and replace the codes with the new method.

// Class: Snapper
Old: public xapi { public ASLocations associativeLocations()
New: extend public ASLocations associativeLocations()

StaticDraw3DMeasure

The following fields for the old associative dimension implementation have been removed from the StaticDraw3DMeasure class.

// Class: StaticDraw3DMeasure
Removed: public MeasureRefSnap leftRConn;
Removed: public MeasureRefSnap rightRConn;

Instead, the following methods have been introduced to replace the removed fields.

// Class: StaticDraw3DMeasure
New: extend public ASSnapperRef leftRef()
New: extend public ASSnapperRef rightRef()

In addition, the following methods for the old associative dimension implementation have also been removed.

// Class: StaticDraw3DMeasure
Removed: extend public MeasureRefSnap createLConn()
Removed: extend public MeasureRefSnap createRConn()
Removed: extend public void updateLeftAssociativeLocation()
Removed: extend public void updateRightAssociativeLocation()

Besides, the key to obtain the FeatureSearchFeedbackVessel during the stretch animation of StaticDraw3DMeasure has been changed from "featureFeedback" to "featureSearch".

Some fixes and improvements were also introduced in the following methods to make StaticDraw3DMeasure works with the new associative dimension implementation. Please add the changes manually when necessary if you have sub-classes that override these methods.

// Class: StaticDraw3DMeasure
Modified: extend public void build2D()
Modified: extend public void drawGraphs(LayerBuffer lb, View inView, GeometricFinder finder=null)
Modified: extend public void beginStretch(Connector s)
Modified: extend public bool stretch(Connector s, point p, AnimationMouseInfo mi)
Modified: extend public void endStretch(Connector s)

StaticDrawMeasureInsertAnimation

Changes were made in the following methods in StaticDrawMeasureInsertAnimation in order to make the insert animation associative. Please add the changes manually when necessary if you have sub-classes that override these methods.

// Class: StaticDrawMeasureInsertAnimation
Modified: extend public void move(AnimationMouseInfo mi)
Modified: extend public void release(AnimationMouseInfo mi)
Modified: extend public void retire()
Modified: extend public void setState0()
Modified: extend public void setState1()
Modified: extend public void setState2()

cm.abstract

  • Added a class InactiveConnectLine to replace FConnectLine and WallSideConnectLine in abstract.office and abstract walls respectively.
  • Moved closestSnapperInAnimation function from various to functions.cm to reduce duplicated code.

cm.abstract.dataSymInterface

    // Class: cm.abstract.dataSymInterface.catalog.DsiAddProductRefType
    Removed: extend public DsMeasureParamType measureParam()
    Removed: extend public DsMeasureParamType measureParam=(DsMeasureParamType measParam)

    // Class: cm.abstract.dataSymInterface.DsiPData
    Removed: extend public DsMeasureParamType additionalProductMeasureParam()
    Removed: extend public DsMeasureParamType additionalProductMeasureParam=(DsMeasureParamType measParam)

    Old: extend public void applyMeasurementParams(Object owner)
    New: extend public void applyMeasurementParams(Object owner, DsiSelOModifyEnv env=null)

    // Class: cm.abstract.dataSymInterface.DsiExprValidationEnv
    Old: public SFeature[] featStack;
    New: public DsiBinaryStackItem[] relStack;

    Removed: public bool comparitorFound;
    Removed: extend private bool isValid(VxStr e|, VVars vars=VVars(), StrBuf error=null)

    // Class: cm.abstract.dataSymInterface.DsiPData
    Old: extend public bool validOption(SFeature feature, Option option, Double optionValue=null)
    New: extend public bool validOption(Option option)

    Removed: extend public bool disableConstraints()
    Removed: extend public bool disableConstraints(bool v)

    // Package: cm.abstract.dataSymInterface
    Old: public str->SFeature dsiVariantsFeatures(DsiPData data, SFeature feature)
    New: public str->SFeature dsiVariantsFeatures(DsiPData data, str featureCode)

    Old: public VConstraint[] dsiVariantsConstraints(DsiPData data, SFeature feature, Option option, str->SFeature features)
    New: public VConstraint[] dsiVariantsConstraints(DsiPData data, str featurePath, str->SFeature features)

    Old: public Object[] dsiVariantsSpanValues(DsiPData data, SFeature feature, Option option, str->SFeature features, str->Object selectedValues,
                                               VariantsSpan variantsSpan)
    New: public Object[] dsiVariantsSpanValues(DsiPData data, str featurePath, str option, double value, str->SFeature features, str->Object selectedValues,
                                               VariantsSpan variantsSpan)

    Old: public DsiVariantsCache dsiVariantsCache(DsiPData data, SFeature feature, Option option, str->DsiVariantsCache variantsCaches)
    New: public DsiVariantsCache dsiVariantsCache(DsiPData data, str featurePath, str->DsiVariantsCache variantsCaches)

    Removed: public str dsiVariantsOptionalSelFeatureCode(str featureKey, str optionCode)
    Removed: public <str, Type> dsiVariantFeatureAndType(DataCatalog cat, str key, StrBuf error=null)
    Removed: public str dsiCreateRuleCode(DataCatalog catalog, str code)

cm.abstract.dataSymbol

// Class: cm.abstract.dataSymbol.ui.TreeViewDragAnimationEnv
Old: public DsDragDropTreeView source;
New: public Control source;

// Class: cm.abstract.dataSymbol.DsPData
Old: public void applyMeasurementParams(Object owner)
New: public void applyMeasurementParams(Object owner, DsiSelOModifyEnv env=null)

// Class: cm.abstract.dataSymbol.DsMaterialDomain
Old: extend public bool validOption(SFeature feature, Option option)
New: extend public bool validOption(Option option)

// Class: cm.abstract.dataSymbol.DsFreeformPData
Old: validOption(SFeature feature, Option option, Double optionValue=null)
New: public bool validOption(Option option)
  • Updates for Data Symbol’s subclass of MaterialDialog and MaterialSchemeProperty with the abstract changes mentioned in Abstract Material.
  • DsPicklistSubWindow – Allow dialog subclasses to filter all picklist proxies.

cm.abstract.dataSymbol.dsPDataProxy.cm:

- Old: generatePmSifRows
- New: generateSifRows

cm.abstract.dataSymbol.dsPData.cm:

- Old: generatePmSifRows
- New: generateSifRows
- Old: public generatePmSifOptionRows
- New: package generateSifOptionRows, i.e. no longer accessible outside cm.abstract.dataSymbol

cm.abstract.draw

// Class: DrawChainMeasureInsertAnimation
Removed: public rect animateDrawBound(GdiView2D view2D)

// Class: DrawShapePushAnimation
Removed: public rect animateDrawBound(GdiView2D view2D)

// Class: DrawShapeSplitAnimation
Removed: public rect animateDrawBound(GdiView2D view2D)

cm.abstract.industry

cm/abstract/industry/pData/functions.cm

Old: public range optionRange(Option o);
New: public range optionToRange(Option o);

cm.abstract.labs

  • Updated extrudeProfile() on LabsPathEdge to take in the snapper that the path belongs to.

cm.abstract.material

  • AbsMaterialDialog (absMaterialDialog.cm) now passes the selected treeview items to limbs and schemes. (see propagateSelectedMaterial())
    • Added support for regular MaterialTreeViewItem in selectionChangedCB().
  • The update method on MaterialSchemeProperty (absMaterialSchemeProperty.cm) has been expanded to take in the selected tree view items from the Material dialog.
  • The update method on AbsMaterialLimb (absMaterialLimb.cm) has been expanded to take in the selected tree view items from the Material dialog. For AbsMaterialDialog and subclasses of it, stdMaterials.getSelection() is what should be passed in to update now. This was added to support DsMaterialLimb and working with DsPData.
    • Null safety has also been added on the callback for this limb.
OLD:
/**
 * Update.
 */
extend public void update(Material m, bool runCB=true)

NEW:
/**
 * Update.
 */
extend public void update(Material m, TreeViewSelection selection,
                          bool runCB=true)


cm/abstract/material/absMaterialDialog.cm
/**
 * Propagate selected material to caller
 */
extend public void propagateSelectedMaterial() {
    if (selected) {
        if (limb) limb.update(selected, stdMaterials.getSelection());
        if (scheme) scheme.update(selected, stdMaterials.getSelection());
    }
}

cm.abstract.office

Moved Classes

  • Many older Classes/Systems have been moved to a legacy package (cm.abstract.office.legacy)
    • If you are getting an error that a class is missing, it most likely was moved to this package.
  • This was done to indicate that new development should consider not using these classes/systems.
  • There are no plans to remove these classes and they will continue to compile/work in future releases.

Classes Moved to Legacy

  • ADummyChair
  • AOResetSupportsVessel
  • ColumnPosFilter
  • CornerWorksurface
  • DepthTransitionWorksurface
  • Dimension
  • DimensionHead
  • EndWorksurface
  • FreestandingSupportPosFilter
  • OfficeGroupScheme
  • OfficeSurface
  • OfficeDistanceAnimationProperty
  • PanelEndSupport
  • PanelHeigthStretchEnv
  • PanelHungSupportPosEnv
  • PanelHungPosFilter
  • PanelLine
  • PanelStretchEnv
  • Poltergeist
  • PostPosFilter
  • PostSupport
  • SharedPanelHungPosFilter
  • SpannerWorksurface
  • SpecialPanelJunction
  • SpecialPanelJunctionCreator
  • SpecialPanelJunctionSnapper
  • SpecialPanelJunctionSnapperCreatorFilter
  • StraightWorksurface
  • SupportedWorksurface
  • Surface120Shape
  • SurfaceAngleCornerShape
  • SurfaceAutoCorner
  • SurfaceCornerShape
  • SurfaceEvenCornerShape
  • SurfaceExtendedCornerShape
  • SurfaceHalfCircleCornerShape
  • SurfaceHalfCircleEndShape
  • SurfaceRadiusEndShape
  • SurfaceRectSwellShape
  • SurfaceShape
  • SurfaceStraightShape
  • SurfaceSweepTransitionShape
  • SurfaceTransitionShape
  • SurfaceWedgeTransitionShape
  • TransitionWorksurface
  • WorksurfaceSupport
  • WorksurfaceTool3DAnimation
  • WorksurfaceStretchAnimation
  • WsCLManipulator
  • WsCLNormalManipulator
  • WsfColumnPosition
  • WsfDummyStretchPosition
  • WsfFreestandingSupportPosition
  • WsfPanelHungPosition
  • WsfPostPosition
  • WsfSupport
  • WsfSupportPosition

Moved to cm.abstract.tools.elevations.isoView

  • IsometricViewRect
  • IsoViewFetchEnv3D
  • MemorySingleLinkConnector
  • IsometricSymbolSnap
  • IsometricImageHolder
  • IsometricRuleOnewaySnapPoint
  • isoLabelAlign

Moved to cm.abstract

  • MovableTextSnap

Moved to cm.abstract.material

  • OfficeMaterialDomainUIFactory (renamed to AbsMaterialDomainUIFactory)
    • Function for settings also had name updated.
      • officeMaterialPropertyFactoryFn -> absMatPropertyFactoryFn.
  • OfficeMaterialPropertyFactory (renamed to AbsMaterialPropertyFactory)
  • OfficeCoreSchemeBuilder (renamed to AbsMatCoreSchemeBuilder)
  • OfficeCoreSchemeMaterialProperty (renamed to AbsCoreSchemeMaterialProperty)

OfficeCoreSchemePropertyMaterialChoice removed (was empty class), use SchemePropertyMaterialChoice now.

Other Changes

  • Made function for getting icons in AO more consistent
    • Renamed from abstractOfficeIcon(str image) --> aoIcon(str image)
  • Moved closestSnapperInAnimation function to cm.abstract
  • Added ao prefix to spread icons
  • Changed global constants for casegoods categories to be more readable
    • cAOCase.. -> cAOCasegoods
  • Added ao prefix to AO hooks
OLD: 
public Image[] allSpreadIcons
public Image[] someSpreadIcons
public Image[] singleOrHSpreadIcons
public Image[] bothPickIcons

New: 
public Image[] aoAllSpreadIcons
public Image[] aoSomeSpreadIcons
public Image[] aoSingleOrHSpreadIcons
public Image[] aoBothPickIcons
  • Renamed FConnectLine to InactiveConnectLine and moved it down to cm.abstract
  • Removed isometricLayer and isometricAddOnLayer globals. (these were of the type OfficeDwgLayerInfo)
  • Removed references to OfficeSurface in panelFrame.cm
  • PanelJunctionSnapper now extends Model3DSnapper
  • WorksurfaceConnectArc now extends a new subclass of ConnectArc that has it’s rotation defined a bit better and supports stretching like a connect line does.
    • As part of this change, the parameters to be passed into the constructor are a bit different. This has been changed at the AO level and load code has been added to update the connect arc’s rotation.
    • If createWksfConnectArc() or updateWksfConnectArc() have been overwritten, you may need to update your code to include the changes to what the connect arc’s rotation is.
  • WorksurfaceEdge’s extrudeProfile() now takes in Snapper
  • PanelFrameInsertAnimationG2 has received a fix for a bug with the arrow keys and the movement aid.
  • Some G2 Panel Skin animation vessels have been updated to not assume the owning animation is a PickSkinAnimationG2. They now assume the parent is a ToolAnimationG2.

Data Office

  • Updated Data classes to use build3D() and build2D() instead of get3D() and get2D().
  • Added some missing methods to some of these classes relating to getting specific catalog or abstract graphics and whether to use catalog or abstract graphics.

cm.abstract.part

cm.abstract.part.prodPart.cm

Old: extend public str[] generatePmSifRows()
New: extend public str[] generateSifRows()

Old: extend public str[] generatePmSifRows(Space space)
New: extend public str[] generateSifRows(Space space)

cm.abstract.surface

  • PathEdge::extrudeProfile() method now takes in the snapper that the path belongs to as a parameter.

cm.abstract.tools.elevations

Added methods to ElevArrow to make it a bit easier to get started with.

cm/abstract/tools/elevations/elevArrow.cm

cm/abstract/tools/elevations/elevArrow.cm
// Class: ElevArrow
Added: extend public Primitive3D toArrow(Primitive3D prim);
Added: extend public point toArrow(point p);
Added: extend public point2D toArrow(point2D p);

cm.abstract.walls

  • Removed closestSnapperInAnimation in favor of one in cm.abstract (cm.abstract.walls.closestSnapperInAnimation -> cm.abstract.closestSnapperInAnimation)
  • Removed WallSideConnectLine in favor of InactiveConnectLine

cm.basic

Removed three redOverride flags that should no longer be needed.

Removed: public bool red2DOverride = false;
Removed: public bool redRealtimeOverride = false;
Removed: public bool redGeometryOverride = false;

cm.core

ConnectArc

  • New helper methods
/**
 * Line that spans the arc in snapper coordinates.
 */
extend public line spanLine()

/**
 * Return this connect arc in snapper coordinates.
 */
extend  public arc snapperArc()

/**
 * Return this connect arc in space coordinates.
 */
extend public arc spaceArc()
  • Made some methods no longer final
/**
 * Return arc of this.
 */
extend public arc arc()

/**
 * Param.
 */
extend public double param(Connector c, line ln, bool asSnap)
  • Added support for dbg graphcis for connect arcs on Snapper class.

Other Changes

  • Moved csvExporter to core from AO
  • Added a flag to propertyStretchAnimation to toggle between using a connectors actual position and it’s visual position for calculations.
  • Moved xmlDynamicTree.cm from abstact.office.

gFieldBox.cm

  • Added new parameter formatterBreakLines to the constructor of GFieldBox to make use of the breakLinesViaFormatter() that was added in 11.5 and allow field box graphs to break lines.
  • Default is false to prevent affecting older drawings.
  • Might cause compilation errors to any extended subclasses.
/**
 * Constructor.
 */
public constructor(str fieldName,
                   point2D pos=(0, 0), size2D size=(20, 100), bool clipEdges=false,
                   double nominalFontSize=1cm,
                   angle rot=0deg, alignment align=alignment.upLeft,
                   color textColor=color(0, 0, 0),
                   bool breakLines=false, bool formatterBreakLines=false,
                   bool increaseFontSizeToFitSize=false, bool decreaseFontSizeToFitSize=false,
                   bool insertLineSpacing=true, bool insertCharSpacing=true,
                   lineFormats lineFormat=lfLeft,
                   columnFormats columnFormat=cfTop,
                   bool stableLineBreaks=false,
                   double externalMargin=0,
                   LayerExpr layer=null,
                   bool alwaysReadable=true) {
    super(text="",
          pos=pos, size=size, clipEdges=clipEdges,
          nominalFontSize=nominalFontSize,
          rot=rot, align=align,
          textColor=textColor,
          breakLines=breakLines,
          formatterBreakLines=formatterBreakLines,
          increaseFontSizeToFitSize=increaseFontSizeToFitSize, decreaseFontSizeToFitSize=decreaseFontSizeToFitSize,
          insertLineSpacing=insertLineSpacing, insertCharSpacing=insertCharSpacing,
          columnFormat=columnFormat,
          lineFormat=lineFormat,
          stableLineBreaks=stableLineBreaks,
          externalMargin=externalMargin,
          layer=layer,
          useNewStyleFormatting=true,
          alwaysReadable=alwaysReadable);

     this.fieldName = fieldName;
}

snapper.cm

The holder field has been made private. Use the rawHolder method for direct access to the holder. The old accessor functions _holder() and _holder= has been deprecated.

// Class: Snapper
Old: public Holder _holder : copy=null, ignore modify notice;
New: private Holder __holder : copy=null, ignore modify notice;

Old: final public Holder _holder() : deprecated;
New: final public Holder rawHolder(bool ignoreParent=false);

Old: final public Holder _holder=(Holder h) : deprecated;
New: final public Holder holder=(Holder z)

The selection method has been made final. Use the methods singleSelection and/or groupSelection to customize selection.

// Class: Snapper
Old: extend public SnapperSelection selection(Line mouseLine);
New: final public SnapperSelection selection(Line mouseLine);

The method alignConnectors got an additional parameter.

Old: extend public void alignConnectors(Connector snap, Connector attach, Snapper{} visited,
                                        bool invalidate3D=false, bool removeFromBsp=false,
                                        bool tryRealign=false, bool forcePropagate=false);

New: extend public void alignConnectors(Connector snap, Connector attach, Snapper{} visited,
                                        bool invalidate3D=false, bool removeFromBsp=false,
                                        bool tryRealign=false, bool forcePropagate=false,
                                        Snapper originator=null);

As part of the development of child snappers the child snapper protocol of Snapper has been revived and changed.

// Class: Snapper
New: final public Snapper{} children(bool recursive=false);
Old: extend public Snapper{} children();

Old: extend public bool isChildSnapper();
New: final public bool isChildSnapper() : inline;

Removed: extend public bool isParentSnapper();
Removed: extend public Snapper{} recursiveChildren();
Removed: extend public bool includeChildrensBounds();
Removed: public bool includeChildrens2D();
Removed: extend public bool includeChildrens3D();

neighbors.cm

Old: public Snapper{} allConnected(Snapper this, bool includeSelf=false, bool ignoreRefConnectors=false);

New: public Snapper{} allConnected(Snapper this, bool includeSelf=false, bool ignoreRefConnectors=false,
                                   bool ignoreChildSnappers=true);

Old: public Snapper{} allConnected(Snapper{} snappers, bool includeSelf=false,
                                   bool ignoreChildSnappers=true);

New: public Snapper{} allConnected(Snapper{} snappers, bool includeSelf=false,
                                   bool ignoreChildSnappers=true);

Additional changes in cm.core

// Class: GraphSnapper
Removed: public void loaded1(ObjectFormatter formatter, LoadFailInfo failInfo);

// Class: Model3DSnapper
Removed: public void loaded1(ObjectFormatter formatter, LoadFailInfo failInfo);

// Class: ModelSnapper
Removed: public void loaded1(ObjectFormatter formatter, LoadFailInfo failInfo);

cm.core.stream.load.cm

Added new arguments to the following method.

public bool externalLoadDecompress(LoadWorldEnv env, Url path, Url head, Url tail, Url localPath);

cm.core.stream.save.cm

Added new arguments to the following methods.

public bool saveHeaderStyle3(World world, WorldFileHeader header, Url path, Url headUrl, Url tailUrl, Url tailCrcUrl,
                             MemoryImage thumbnailImage, int tailSize, bool progress, userSaveAction action,
                             bool searchKeywords, Url[] mirrors, StrBuf log, RangeI resourceRange,
                             WorldSaveStats stats, Url backupTarget=null);

private void callCetSave(Url headUrl, int headSize, Url headCrcUrl,
                         Url tailUrl, int tailSize, Url tailCrcUrl,
                         Url target, Url[] mirrors,
                         StrBuf logBuf, Url backupTarget=null,
                         userSaveAction action=userSaveAction.user, World world=null,
                         function(CETSaveEnv) saveCompletedCB=null);

public void cetSave(StrBuf cmd, Url headUrl, int headSize, Url headCrcUrl,
                    Url tailUrl, int tailSize, Url tailCrcUrl, Url target,
                    Url log=null, Url backupTarget=null, int compress=3);

Changed return type for the following methods.

private Url checkBeforeSave(World world, Url path, Url head, Url tail, Url tailCrc, userSaveAction action);

private Url copyOriginalBeforeSave(Url path, userSaveAction action);

cm.core.xclip

When dragging an ImageSnapper under an xclip with a companion, it is slow because the dirty2D flag is not propagated correctly (it should be dirty2D.pos). The changes below solve it.

xclipContent.cm:
    old: extend public void invalidate(Object obj)
    new: extend public void invalidate2D(Object obj, dirty2D flag2D)
    old: extend public void invalidate(Object[] objs)
    new: extend public void invalidate2D(Object->dirty2D objs)

xclipScene.cm:
    old: extend public void invalidate(Object z)
    new: extend public void invalidate2D(Object z, dirty2D flag2D)
    old: extend public void invalidate(Object[] objs)
    new: extend public void invalidate2D(Object->dirty2D objs)

xclipSpaceManager.cm:
    old: final public void invalidate(Object obj)
    new: final public void invalidate2D(Object obj, dirty2D flag2D)
    old: final public void invalidate(Object obj)
    new: final public void invalidate2D(Object obj, dirty2D flag2D)
    old: extend public void invalidateWormholeViewers(Object[] objs)
    new: extend public void invalidateWormholeViewers(Object->dirty2D objs)

cm.io

  • Moved helper functions from abstract.office for storing info in ObjectFormatter's temp data to methods on ObjectFormatter.
/***************************************************************************
 * OLD
 ***************************************************************************/

/**
 * Put temp data to object formatter.
 */
public void putTemp(Object this, ObjectFormatter formatter, str k, Object v) {
    Object temp = formatter.getTemp(this);
    str->Object tempMap = temp.:str->Object;

    if (!tempMap) {
        tempMap = new str->Object();
        formatter.putTemp(this, tempMap);
    }

    tempMap.put(k, v);
}


/**
 * Get temp data from object formatter.
 */
public Object getTemp(Object this, ObjectFormatter formatter, str k) {
    if (?str->Object tempMap = formatter.getTemp(this)) {
        return tempMap.get(k);
    }

    return null;
}


/***************************************************************************
 * NEW
 ***************************************************************************/

/**
 * Put temporary prop data.
 */
final public void putTempProp(Object owner, str k, Object data) {
    if (!tempData) tempData = new Object->Object;
    
    ?str->Object map = tempData.get(owner);
    if (!map) {
        map = new str->Object;
        tempData.put(owner, map);
    }
    
    map.put(k, data);
}


/**
 * Get temporary data.
 */
final public Object getTempProp(Object owner, str k) {
    if (?str->Object map = tempData.?get(owner)) return map.get(k);
    return null;
}


/**
 * Remove temporary prop datas.
 */
final public void removeTempProp(Object owner, str k) {
    if (?str->Object map = tempData.?get(owner)) map.remove(k);
}

cm.props.variant

// Class: cm.props.variant.expr.VxMemberAccess
Old: public class VxMemberAccess extends VxExpr
New: public class VxMemberAccess extends VxExpr : abstract

Removed: public VxExpr sem(VxEnv env)
Removed: public void emit(StrBuf buf, VxRuntime rt, bool expr)

// Package: cm.props.variant.test
Removed: public void test_variant_table()

// Package: cm.props.variant
Removed: public class VariantsLazySpan extends Variants

cm.std.wall

Constructors for WallOpeningWallLineChangeOp and WallComponentWallLineChangeOp have interface changes as follows:

    Old: public constructor(DrawSnapper owner, double d, bool atEnd, bool turn, bool changeWidth)
    New: public constructor(DrawSnapper owner, point oldWallPos, bool turn)
    Old: public constructor(DrawSnapper owner, double d, bool atEnd, bool turn)
    New: public constructor(DrawSnapper owner, double d0, double d1, bool turn)

PanelCurtain has been made to subclass DrawSnapper to allow WallLineChangeOp to manipulate it during stretching

    Old: public class PanelCurtain extends Model3DSnapper
    New: public class PanelCurtain extends DrawModel3DSnapper

SimpleDrain:

    Old: extend public bool isAddOnTo(DrawSnapper z)
    New: extend public bool isAddOnTo(DrawSnapper wall)

WallOpening:

    Old: extend public void setSize(Double w=null, Double d=null, Double h=null)
    New: extend public void setSize(Double w=null, Double d=null, Double h=null, bool transparent=false)

    Old: extend public void setDepthLockedWidth(double newD, bool reverse=false)
    New: extend public void setDepthLockedWidth(double newD, bool reverse=false, bool transparent=false)

cm.win

  • Moved dropDownSelectMenu.cm to cm.win from abstract.office.
  • Moved notifyingDisplay.cm to cm.win from abstract.office.

custom.dataCatalog

// Class: custom.dataCatalog.builder.features.DcOptionsGridWindow
Removed: extend public DoubleSubSet removeRange(DoubleSubSet dSS, int rangeNum)

 Old: extend public DoubleSubSet parseForRanges(int[] validRanges, (str[])[] paste)
New: extend public DsiCodeRangeType[] parseForCodeRanges(int[] validRanges, (str[])[] paste)

 // Class: custom.dataCatalog.builder.geometry.DcAdditionalProductRefSub
Removed: public Display pointDisp
Removed: public DsRadioButton spRadBtn
Removed: public DsRadioButton epRadBtn
Removed: public StateControlGroup pointGroup
Removed: final public bool hasMeasureParam()
Removed: extend public void updateMeasurePoint()
Removed: extend public void setMeasureParamPoint(str mPoint)
Removed: extend public void toggleMode()

 // Class: custom.dataCatalog.builder.geometry.DcConnectorRefSub
Removed: public Display pointDisp
Removed: public DsRadioButton spRadBtn
Removed: public DsRadioButton epRadBtn
Removed: public StateControlGroup pointGroup
Removed: extend public void buildMeasurePointControls(Window alignRef, FrameStyle frameStyle)
Removed: extend public void updateMeasurePoint()

 // Class: custom.dataCatalog.builder.geometry.DcMeasureParamSub
Removed: public StateControlGroup pointGroup
Removed: public DsRadioButton spRadBtn
Removed: public DsRadioButton epRadBtn
Removed: extend public void buildConnectorRefControls(ConnectorRefTreeViewItem parent, FrameStyle frameStyle)
Removed: extend public void updateMeasurePoint()

 // Class: custom.dataCatalog.builder.ui.catalogTreeView.DcAddProductTreeViewItem
Removed: public bool measureText
Removed: public color selectedTextColor(treeViewSelectionStyle style)

 // Class: custom.dataCatalog.builder.ui.catalogTreeView.ConnectorRefTreeViewItem
Removed: public bool measureText
Removed: public color selectedTextColor(treeViewSelectionStyle style)

 // Class: custom.dataCatalog.builder.undo.DcMeasureParamFieldModifyUndoOp
Removed: public DsMeasureParamType measureParam

Old: public constructor(DialogWindow dialog, DataCatalog catalog, str productCode,
                        DsMeasureParamType measureParam, str oldMeasurePoint,
                        str newMeasurePoint)
New: public constructor(DialogWindow dialog, DataCatalog catalog, str productCode,
                        DsMeasureParamType oldMeasureParam, DsMeasureParamType newMeasureParam, str oldMeasurePoint,
                        str newMeasurePoint)

// Class: custom.dataCatalog.builder.features.OptionRangeCell
Old: extend public bool addRange(Option product, DcOptionRangeCellEnv env,
                                 int x, int y, double[] datas)
New: extend public bool addRange(Option product, DcOptionRangeCellEnv env,
                                 int x, int y, Double data)

Old: extend public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, double[] d)
New: extend public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, Double d)

Old: extend public str rangeVal(SubSet s)
New: extend public str rangeVal(DsiCodeRangeType s)

// Class: custom.dataCatalog.builder.features.OptionRangeMaxCell
Old: public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, double[] d)
New: public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, Double d)

Old: public str rangeVal(SubSet s)
New: public str rangeVal(DsiCodeRangeType s)

// Class: custom.dataCatalog.builder.features.OptionRangeMinCell
Old: public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, double[] d)
New: public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, Double d)

Old: extend public str rangeVal(SubSet s)
New: extend public str rangeVal(DsiCodeRangeType s)

// Class: custom.dataCatalog.builder.features.OptionRangeStepCell
Old: public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, double[] d)
New: public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, Double d)

Old: extend public str rangeVal(SubSet s)
New: extend public str rangeVal(DsiCodeRangeType s)

// Class: custom.dataCatalog.builder.features.OptionRangeEnumCell
Old: public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, double[] d)
New: public DcOptionRangeCellEnv modifyChangedVal(DcOptionRangeCellEnv env, Double d)

Old: extend public str rangeVal(SubSet s)
New: extend public str rangeVal(DsiCodeRangeType s)

// Class: custom.dataCatalog.builder.features.DcOptionRangeCellEnv
Old: extend public bool submitRange(Option o)
New: extend public bool submitRange(Option o, int prevInd)

// Class: custom.dataCatalog.builder.geometry.DcDBBuilderGeometryCard
Old: extend public void update3D()
New: extend public void update3D(bool autoZoom=false)

Old: extend public void update2D()
New: extend public void update2D(bool autoZoom=false)

// Class: custom.dataCatalog.builder.productType.DcPrdAddProductCell
Old: extend public DsiAddProductRefType[] importAddProducts(XmlTag tag)
New: extend public DsiAddProductRefType[] getAddProducts(XmlTag tag)

// Class: custom.dataCatalog.builder.productType.DcProductMeasurementCellEditUndoOp
Old: public constructor(DialogWindow dialog, DcGridWindow gw, int x, int y,
                        str valueBefore, str valueAfter,
                        str unitBefore, str systemBefore,
                        str unitAfter, str systemAfter)
New: public constructor(DialogWindow dialog, DcGridWindow gw, int x, int y,
                        str valueBefore, str valueAfter,
                        str unitBefore, str systemBefore,
                        str unitAfter, str systemAfter,
                        DsMeasureParamType measureParam)

// Package: custom.dataCatalog.builder.constraints
Old: public class DcConstraintDragAnimation extends DcCatalogTreeViewDragAnimation
New: public class DcConstraintDragAnimation extends DcDragDropTreeViewDragAnimation

// Package: custom.dataCatalog
Old: public bool dcValidateProductConstraint(DataCatalog catalog, DsProductType product, str{} featureKeys,
                                             DsRuleType rule, StrBuf error=null) 
New: public bool dcValidateProductConstraint(DataCatalog catalog, DsProductType product,
                                             DsRuleType rule, StrBuf error=null)

// Class: custom.dataCatalog.builder.constraints.DcConstraintDragAnimation
Removed: extend public void appendConstraints(pointI p)

Runtime/Behavior Changes

Core properties

Runtime/behavioral changes for core properties can be found in the Core properties migration guide.

Removal of vcredits-extensions

The vcredist-extensions will no longer be maintained. Instead any required vcredist-dll:s can be shipped alongside the binaries that require them. However, the dll:s required by the currently published extensions in 11.5 will from 12.0 be shipped as a part of runtime.

Snapper invalidations

A change has been made to SnapperInvalidations to allow new invalidations to be issued during validation. This has the effect that the invalidationInfos map is cleared when the validate method is called in order for it to receive any new invalidations.

Updated Default Columns

A small change has been made to default columns.

The Part Number and Quantity columns are now considered mandatory columns and will no longer be voted out of being a default part column. They can still be removed in the calcuation view settings. There should be no effect to saved drawings/article views.

We have adjusted default columns voting for FIKA so CET with FIKA turned on will show:

  • Part Number
  • Options
  • Description
  • Complete
  • Ind. Tag
  • Manual sort
  • List
  • Ext List
  • Quantity

Updated Docotic PDF library to 7.5

In CET Designer 12.0, we have upgraded Docotic from 5.6 to 7.5. The following areas in CET Designer uses Docotic and may have minor differences when importing PDFs:

  • ImageSnapper (regular pdf import)
  • PDF diff test
  • PdfSnapper (vector import).

If your extension interfaces directly with the Docotic dll, we advise you to try testing out your code to see if everything still works. As Docotic has removed a few interfaces over the years you may get errors like this in the console:

Call returned error code 1: Method 'BitMiracle.Docotic.Pdf.PdfRgbColor.ToColor' not found.

To fix errors like this, you can read up the following materials from Docotic's website to find a replacement method.

cet.service deprecated

From CET 12.0 all public functions in package cet.service will be deprecated, and the service will no longer be used.

Also, instead of calling the service, the functions in cet.service will now attempt regular copy/move/delete-operations. If that fails the user will be prompted for elevation for the command in a dialog, that also shows which extension is asking for the elevated action.

Our team has searched through customization code to determine the impact of this change. The conclusion is that there are only a very few cases that the un-elevated copy/move/delete-operation fails and results in the user getting prompted for elevation. The respective development teams have been contacted by us about these changes.

It is advised that you remove all uses of cet.service and replace the service file operations with regular file operations.

When it comes to elevated sync/async commands for installing third party dependencies etc. it is recommended to evaluate in first hand if there are other options for distributing the required dependencies (for example shipping the third party dll:s alongside your own binaries).

If there is no other option, an elevated command for running the third party installer can still be requested from CET by using one of the following functions in the package cm.os:

syncCmdRequestElevated(str command)
asyncCmdRequestElevated(str command)

This will cause CET to show a dialog asking the user for access rights to perform the command. The dialog shows which command the request is for, and also shows which extension is asking to perform it. If the user clicks OK in the dialog, a regular Windows elevation prompt for the command is shown.

NOTE: Please be aware that it is not uncommon for users to have limited access rights on their machines, meaning that they will need to ask an administrator to give them rights every time such a command is to be performed. Therefore we recommend as described above in first hand to ship third party binaries alongside your own binaries instead of using an installer for them.

cm.abstract.office

  • Removed worksurface specific animation defaults on Worksurface since they only worked with SupportedWorksurface.
  • WorksurfaceConnectArc now returns true for active().

cm.abstract.part

ProdPart now use the current currency symbol instead of always output the currency tag in sif(CU) to "USD".