Overview

Previously when changing any of the pageSetup settings in paperSpace (such as paper resolution, margins or paper dimensions) and creating a new drawing, the settings were reset to their default values. Changes have now been made to reflect the most recent change made to a paper. A new drawing will thus have the same settings as the last paper created.

Runtime/Behavior Changes

In order to keep the changes of the last paperspace, we need to access the most recent world. In multi-drawing mode, this is straightforward and can be done by accessing the previous world:

cm/std/print/paperspace/paperSpaces.cm

old:
public PaperSpace[] allPaperSpaces(World world, bool createIfNone=true) {
    PaperSpace[] spaces();
    if (!world or !world.spaces) return spaces;

    if (world.isCollWorldG3) createIfNone=false;
    for (space in world.spaces) if (space as PaperSpace) spaces << space;

    if (createIfNone and spaces.count() == 0) {
	spaces << PaperSpace(world, $paperDefaultName, group=null);
	if (DocumentCreator z = currentDocumentCreatorIfAny()) z.visibilityChanged();
    }

    spaces.sort(function paperSpaceDifference, null);

    return spaces;
}


new:
public PaperSpace[] allPaperSpaces(World world, bool createIfNone=true) {
    PaperSpace[] spaces();
    if (!world or !world.spaces) return spaces;

    if (world.isCollWorldG3) createIfNone=false;
    for (space in world.spaces) if (space as PaperSpace) spaces << space;

    if (createIfNone and spaces.count() == 0) {
	PaperSpace newPaperSpace(world, $paperDefaultName, group=null);

	World prevWorld = session.prevWorld();

	if (prevWorld and (PaperSpace prevPaper = prevWorld.getLastPaperSpace())) {
	    newPaperSpace.pageSetup.?assimilate(prevPaper.pageSetup);
	}

	spaces << newPaperSpace;
	if (DocumentCreator z = currentDocumentCreatorIfAny()) z.visibilityChanged();
    }

    spaces.sort(function paperSpaceDifference, null);

    return spaces;
}

In single drawing mode some changes were required in order to be able to access the previous world, which would have otherwise been destroyed before the new paperspace had been created: cm/core/multiWorldManager.cm >>>>>>> b892a94b2ab38fe1f04775d1f9eee139bfae2fd8

old:
    extend public World create(str id=null) {
	// old-tech from before LARGEADDRESSAWARE and 64-bits
	//if (virtualSize() > 1.5GB) { pln(eLtRed, "large virtualSize, ", virtualSize.byteFormat, ", run full gc..."); gc(); pln("done", ePop); }

	if (dbg_undoRestoreInProgress) {
	    ptrace("force reset undo state for interaction");
	    dbg_undoRestoreInProgress = false;
	}

	bool anyWorld = session.anySelectableWorld;
	if (singleDrawingMode and anyWorld) close();

	World world = lowLevelCreateWorld(id=id);
	initialize(world);
	return world;
    }

new:
    extend public World create(str id=null) {
	// old-tech from before LARGEADDRESSAWARE and 64-bits
	//if (virtualSize() > 1.5GB) { pln(eLtRed, "large virtualSize, ", virtualSize.byteFormat, ", run full gc..."); gc(); pln("done", ePop); }

	if (dbg_undoRestoreInProgress) {
	    ptrace("force reset undo state for interaction");
	    dbg_undoRestoreInProgress = false;
	}

	World worldToClose;
	bool anyWorld = session.anySelectableWorld;

	if (singleDrawingMode and anyWorld) {
	    worldToClose = session.mainWorld;
	    worldToClose.?setViewMode(normalViewMode, alert=false);

	    for (v in session.views) {
		v.unlock();
		v.removeClipping();
	    }
	}

	World world = lowLevelCreateWorld(id=id);
	initialize(world);

	if (worldToClose) close(worldToClose);

	return world;
    }

ItemTagInfo

Before 14.0, item tag info map was streamed with world.auxillary under the key "LITINFO". The map has been moved to world.cachedData which is not streamed with the drawing. The itemTags have a reference to their info hence the infos are already streamed with the drawing. The cache is rebuilt on load. Reason for this change is to avoid infos getting stuck in the drawing causing dependencies to extensions.

Block and Category Change

The #1 issue from users at CETX last year was the ability to filter individual items in blocks (for example hiding all objects without the #panel category).

To accomplish this a new category was added cCoreBlockCat that is currently set to #block. This category resides on BlockSnappers. All view modes needs to add the cCoreBlockCat to its categories. Most uses are covered by a change to categoryViewMode(..) and other standard ViewModes were modified to always add the cCoreBlockCat, to ensure as few changes to be done as possible on the manufacturer side. However, do keep these changes in mind as you are migrating and testing for 14.0.

While the category 'cCoreBlockCat` is still available, a last-minute change to 14.0 disabled the category to no longer serve a purpose. This may be revisited.

=======