Table of contents

Platform

[IC-1.3] Build of 345 finishes with strange error. We need to describe the error

Sumo Competition Robot from LEGO Mindstorms EV3 now looks cooler, luns faster, jumps higher, loads better...

Lego-Mindstorms-Sumo-Robot-Ev3-Fllcasts
Sumo Competition Robot from LEGO Mindstorms EV3


[IC-1.3] Material 855 can not be build

Bag 4 from FIRST LEGO League 2019-2020 City Shaper Challenge is rebuild and now takes less time to load.


[IC-1.3] Materials 789 can not be build

This robot how has cables - Iknathir - LEGO Mindstorms EV3 aircraft carrier robot

LEGO-Mindstorms-Ev3-Iknathir-Aircraft-Carrier-Robot.png


[IC-1.3] 405 is failing to build

Francesco Robot is rebuild and loaded much faster https://www.fllcasts.com/materials/405-francesco-simple-lego-ev3-car-with-differential-rear-wheel-drive

Francesco Robot LEGO Mindstors


[IC-1.3] When updated to pytest 5.4 the tests started to fail randomly.

In the requirements I fixed the version of pytest to 5.3.5. I am subscribed to https://github.com/pytest-dev/pytest/issues/6987. Once it is resolved I will update the version of pytest we are using.


[IC-1.3] Material 723 is failing

Material 723 is rebuild. Now the material is loading faster and takes less memory.
Susan and Mark - a LEGO Mindstorms EV3 T-Rex chasing a car


[IC-1.3] Material 721 is failing

Material 721 is rebuild. Now the material is loading faster and takes less memory.
Susan and Mark - a LEGO Mindstorms EV3 T-Rex chasing a car


[IC-1.3] Material 785 can not be builded

Result:
Material 785 is rebuild. Now the material is loading faster and takes less memory.
Susan and Mark - a LEGO Mindstorms EV3 T-Rex chasing a car


[IC-1.3] 773 can not be builded

Material 773 is rebuild. Now the material is loading faster and takes less memory.
Robotics Supreme - LEGO Mindstorms EV3 yacht robot


[IC-1.3] 548 can not be build

Material 548 is rebuild. Now the material is loading faster and takes less memory.
Satellite Orbits. Mission 12 from FIRST LEGO League 2018 Into Orbit Challenge


[IC-1.3] 728 can not be build

Material 728 is rebuild. Now the material is loading faster and takes less memory.
Hrutur - a LEGO Mindstorms EV3 Ram robot


[IC-1.3] 750 can not be builded

Material 750 is rebuild. Now the material is loading faster and takes less memory.
Barco - LEGO Mindstorms EV3 sailboat robot


[IC-1.3] Material 758 can not be build

Material 758 is rebuild. Now the material is loading faster and takes less memory.
Uylam - LEGO Mindstorms EV3 Steamship simulator robot


[IC-1.3] Material 635 failed with sets.json

Material 635 is rebuild. Now the material is loading faster and takes less memory.
Roberto Bot With Four Bars Lifting Mechanism


[IC-1.3] Material 952 fails

Material 952 is rebuild. Now the material is loading faster and takes less memory.
Omusbot - LEGO Mindstorms EV3 sumo robot


[IS-6.0.1] Article about Promise.finally(). Also cleaning up some Core code.

https://kmitov.com/posts/finally-do-some-work-in-promise-finally-everyday-code/

[IS-6.0.1] Add a method that checks if an object implements an interface function.

It is available in 6.0.0.pre.102

The method is called IS.ErrorsUtil.AssertObjectsImplementInterface

```

/**
*

Checks if the objects in the array have all the properties of the interface specified.
* This is not done with 'instanceof', but we check the properties and if every property
* of the interface is available in every object in the array.

*
*

We need this as we use interface for defining properties that could be GCC compiled and in GCC
* way you could implement an interface, but you will not be an instance of this interface.

*
* @export
*/
static AssertObjectsImplementInterface(array, interf) {
....
});
}
```


[IS-6.0.1] Make a better example for options traverser and what traversing means and why wtravera and why not getDescendats() and how the internalTraverser logic for return true works and why arrow function without brackets does and work and if it should work. It should be a fix

Adding a real life example with documentation for the filterNodeFunction.

Documentation is available at:

The example and documentation are https://sf.robopartans.com/jenkins/view/IS/job/is-release_pack%20Build%20and%20Release/ws/docs/IS.TraverserOptionProps.html#filterNodeFunction

```
Real life example for getting parts in a BABYLON.Node tree

This is a real life example of using TraverserOptionsProps#filterNodeFunction to get all the nodes
in a BABYLON.Node with a certain metadata
while not entering into the nodes with metadata noteType 'step' or 'part'.
Collecting the parts is done in a single traverse of the three.

Tree is:
Step (nodeType: step)
Part 1 (nodeType: part)
Part 1.1 (nodeType: part)
Part 1.2 (nodeType: part)
Part 2 (nodeType: part)
Module 1 (nodeType: module)
Part 3 (nodeType: part)
Part 4 (nodeType: part)
Armature 1 (nodeType: armature)
Armature 1.1 (nodeType: armature)
Armature 1.2 (nodeType: armature)
Step 2 (nodeType: step)
Part 5 (nodeType: part)
Module 2 (nodeType: module)
Step 3 (nodeType: step)
Part 6 (nodeType: part)

We want to get an array of [Part1, Part2, Part3 and Part4, Armature 1]. This means all the Parts that
are in the top Step and all the deep descendants parts, but without any parts that are in descendants steps.

// Define the options
//
const options = {
filterNodeFunction: function( @type {BABYLON.Node} object) {
const nodeType = object.metadata.gltf.extrast.ai3d.nodeType;

// visit only childrne that are of type "module" or are the root babylon node
const children = ["module"].includes(nodeType) || object == topStepBabylonNode ? object.getChildren() : [];
// return [(boolean), (array of children)]
// (boolean) is only for Part and Armature since these are the only nodes we would like to visit
// (array of children) is only for modules. We don't want to enter into Parts and into Steps.
return [["part", "armature"].includes(nodeType), children];

}
}
// Define the traverser. It is a PreOrder
const traverser = new IS.PreOrderTraverser(options);

// Traver the nodes and put every node that we visit in the topPartsSetps
const topStepParts = [];
traverser.traverse(topStepBabylonNode, node => {
topStepParts.push(node);
});

// topStepParts now contains and this
// [Part1, Part2, Part3 and Part4, Armature 1]
```


[IS-6.0.1] Improve documentation for registering a new extension

https://sf.robopartans.com/jenkins/view/IS/job/is-release_pack%20Build%20and%20Release/ws/docs/tutorial-tutorial-17-setup-rails-project-to-hold-extension.html

https://sf.robopartans.com/jenkins/view/IS/job/is-release_pack%20Build%20and%20Release/ws/docs/tutorial-tutorial-46-testing-extensions-with-jasmine.html


[IS-6.0.1] Tutorials for teaspoon

https://sf.robopartans.com/jenkins/view/IS/job/is-release_pack%20Build%20and%20Release/ws/docs/tutorial-tutorial-46-testing-extensions-with-jasmine.html

[IS-6.0.1] In Microsoft Edge you can't change the steps with the left and the right arrow.

IS with Babylon and Three JS has been tested on Miscroft Edge on Windows and Mac os X with these versions:

Windows Machine

Microsoft Edge 44.17763.831.0
Microsoft EdgeHTML 18.17763
©2018 Microsoft

Mac os X Catalina Machine

Version 80.0.361.111 (Official build) (64-bit)
This browser is made possible by the Chromium open source project and other open source software.
Microsoft Edge
© 2020 Microsoft Corporation. All rights reserved.

Everything that was tested - works:
- Changing steps with left and right arrows
- Full Screen Button
- Full Screen with 'f' key
- Changing steps with left and right arrows while in full screen
- Changing steps with left and right arrows after the focus was moved away from IS canvas.
- Rotating
- Panning
- Zooming


[IS-6.0.1] Bad documentation for TraverserOptionProp

Improved in is-core 6.0.0.pre.106.

Now has a good example


* const options = new IS.TraverserOptionProps()
* options.filterNodeFunction = function( @type {BABYLON.Node} object) {
* const nodeType = object.metadata.gltf.extrast.ai3d.nodeType;
*
* // visit only childrne that are of type "module" or are the root babylon node
* const children = ["module"].includes(nodeType) || object == topStepBabylonNode ? object.getChildren() : [];
*
* // return [(boolean), (array of children)]
* // (boolean) is only for Part and Armature since these are the only nodes we would like to visit
* // (array of children) is only for modules. We don't want to enter into Parts and into Steps.
* return [["part", "armature"].includes(nodeType), children];
* }


[IS-6.0.1] Exception logged on loading threejsscene models as there is no source for the selection

The tree viewer now does not depend on source. If no source extension is specified then we cannot select and no checkboxes are shown.
You can see that here:
www.fllcasts.com/materials/240


[IS-6.0.1] When on last step of the instruction the autoplay button should be disabled. You are not allowed to click it at this step

https://www.fllcasts.com/materials/518-torvi-ball-shooting-lego-machine
When you go to the last step of an instruction no matter if you do it while using autoplay, go to step or the arrows the autoplay button is disabled and cannot be activated.


[IS-6.0.1] Error appear when select and deselect step.

Bug is no longer present.


[IS-6.0.1] Previous button should be disabled on first step.

When you go to an instruction and you do not have any previous steps that you can step on the button for previous step is disabled.

IS Previous-Button-Disabled