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()
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 = "_";
AccessoryEnv
and related classes to a subclass.
AccessoryPositioningFactory
to AccessoryGenerationBehavior
AccGenBehavior
.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)
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()
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()
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)
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()
Compile time migration changes for core properties can be found in the Core properties migration guide.
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()
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
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
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)
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);
Please follow this link
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()
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)
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()
InactiveConnectLine
to replace FConnectLine
and WallSideConnectLine
in abstract.office and abstract walls respectively.closestSnapperInAnimation
function from various to functions.cm to reduce duplicated code.// 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)
// 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)
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
// 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/pData/functions.cm
Old: public range optionRange(Option o); New: public range optionToRange(Option o);
AbsMaterialDialog
(absMaterialDialog.cm) now passes the selected treeview items to limbs and schemes. (see propagateSelectedMaterial()
)
MaterialTreeViewItem
in selectionChangedCB()
.MaterialSchemeProperty
(absMaterialSchemeProperty.cm) has been expanded to take in the selected tree view items from the Material dialog.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()); } }
OfficeCoreSchemePropertyMaterialChoice removed (was empty class), use SchemePropertyMaterialChoice now.
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
FConnectLine
to InactiveConnectLine
and moved it down to cm.abstractisometricLayer
and isometricAddOnLayer
globals. (these were of the type OfficeDwgLayerInfo
)OfficeSurface
in panelFrame.cmPanelJunctionSnapper
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.
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.extrudeProfile()
now takes in SnapperPanelFrameInsertAnimationG2
has received a fix for a bug with the arrow keys and the movement aid.PickSkinAnimationG2
. They now assume the parent is a ToolAnimationG2
.build3D()
and build2D()
instead of get3D()
and get2D()
.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)
PathEdge::extrudeProfile()
method now takes in the snapper that the path belongs to as a parameter.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);
closestSnapperInAnimation
in favor of one in cm.abstract (cm.abstract.walls.closestSnapperInAnimation -> cm.abstract.closestSnapperInAnimation)WallSideConnectLine
in favor of InactiveConnectLine
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;
/** * 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()
/** * Return arc of this. */ extend public arc arc() /** * Param. */ extend public double param(Connector c, line ln, bool asSnap)
/** * 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; }
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();
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);
// 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);
Added new arguments to the following method.
public bool externalLoadDecompress(LoadWorldEnv env, Url path, Url head, Url tail, Url localPath);
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);
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)
/*************************************************************************** * 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); }
// 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
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)
// 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/behavioral changes for core properties can be found in the Core properties migration guide.
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.
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.
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:
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:
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.
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.
Worksurface
since they only worked with SupportedWorksurface
.WorksurfaceConnectArc
now returns true for active()
.ProdPart
now use the current currency symbol instead of always output the currency tag in sif(CU) to "USD".