Budeme potřebovat postupně krokovat připravenou složitější konstrukci a nespokojíme se buď s tím, jak je zvýrazněný poslední objekt (budeme chtít výraznější vyznačení). Nebo nejsme spokojeni s tím, že je zvýrazněný jenom jeden (naposledy sestrojený) objekt a budeme chtít, aby souvislosti posledních kroků zůstávaly viditelné, zvýrazněné. Připravené ukázky se tedy budou lišit tím, zda dříve sestrojené objekty postupně ztrácejí výraznost, nebo zda zdůrazňujeme jen dosud poslední sestrojený objekt. [br][br]Pokud navíc krokujeme konstrukci pomocí bodů zastavení (a to se děje velmi často, protože v konstrukci bývá hodně "samozřejmých" konstrukčních čar, jejichž sestrojení přeskakujeme, aby nebylo krokování příliš dlouhé), bude potřeba zvláštní pozornosti. [br][br]Ke zvýraznění jsme použili číslo [color=#0000ff][i]krok[/i][/color] definované jako [color=#0000ff]ConstructionStep() [/color], tedy jako pořadové číslo prvku, který se právě sestrojil.[br]Aktivace bodů zastavení hodnotu objektu [color=#0000ff][i]krok[/i][/color] nijak neovlivní, vždy se jedná o číslo objektu v konstrukci, nikoli o číslo snímku-zastávky v nastaveném krokování.[br][br]Objekt [color=#0000ff][i]krok[/i][/color] využijeme pro skriptování: nebudeme psát skripty pro jednotlivé objekty ani definovat funkci sloužící jako Listener, ale ošetříme událost [color=#0000ff]OnUpdate[/color] objektu [color=#0000ff][i]krok[/i][/color].[br]Celý javascript je velmi krátký:[br][br]Na kartě [color=#0000ff]OnUpdate[/color] objektu [color=#0000ff][i]krok[/i][/color] naprogramujeme:[br][br]var pocet = ggbApplet.getObjectNumber(); [color=#3c78d8]// počet objektů v konstrukci[/color][br]var j = 1;[br]for (i = 1; i < pocet; i++) { [color=#3c78d8] // všem objektům v konstrukci[/color] [color=#3c78d8]určíme tloušťku čáry[/color][br] j = Math.max(1, 8 + i - ggbApplet.getValue("krok")); [color=#3c78d8]// nedávno sestrojeným větší, starším 1[/color][br] ggbApplet.setLineThickness(ggbApplet.getObjectName(i), j); [color=#3c78d8] // nastavíme ji[/color][br]};[br](viz první ukázka níže)[br]To, že měníme atributy objektů, které ještě nejsou sestrojené, v tomto případě nevadí. V této ukázce navíc neřešíme, jestli je objekt opravdu čára, a neměníme vlastnosti bodů. Jak zjistit typ objektu jsme[br]ukázali v předchozích kapitolách.[br][br][color=#ff0000]Pozor na to, že [/color][color=#0000ff]ggbApplet.getObjectNumber() [color=#ff0000]udává skutečný počet objektů v konstrukci[/color][/color][color=#ff0000], zatímco [/color][color=#0000ff]ConstructionStep()[/color] [color=#ff0000]počítá počet příkazů. Jakmile tedy sestrojíme například čtverec, začnou se tato dvě čísla lišit.[/color][br][br]V konstrukcích, kde sestrojíme každý bod či čáru samostatně, návod můžeme použít tak, jak je.[br][br]Jinak můžeme zkusit dotázat se na konstrukční krok daného prvku [color=#0000ff]ConstructionStep(object)[/color] a testovat ten. Tady už je ale třeba dát pozor jednak na dotaz na objekty, které zatím (v dané fázi krokování) nejsou sestrojeny – u nich se nemůžeme ptát na jejich konstrukční krok –, jednak na cyklické odkazy, které tak mohou snadno vzniknout.[br][br]Následující postup předpokládá, že v appletu máme volnou[br]číselnou proměnnou kr pro zjištění kroku konstrukce[br]aktuálně zpracovávaného prvku. Objekt krok je ve[br]shodě s výše uvedenými postupy definován jako aktuální krok konstrukce ConstructionStep().[br][br]Podobně jako výše můžeme pracovat rovnou s polem názvů[br]objektů a provedeme iteraci přes všechny prvky pole forEach():[br][br]var prvky = ggbApplet.getAllObjectNames();[br]prvky.forEach(nastavSilu);[br][br]function nastavSilu(prvek) {[br] if (ggbApplet.isDefined(prvek)) {[br] ggbApplet.evalCommand("SetValue(kr,ConstructionStep(" + prvek + "))"); [color=#0000ff]// aktuální krok[/color][br] var p = ggbApplet.getValue("kr");[br] var k = ggbApplet.getValue("krok");[br] j = Math.max(1, 8 + p - k);[br] ggbApplet.setLineThickness(prvek, j);[br] }[br]}[br](viz druhá ukázka níže)[br]Ukázky se na pohled neliší (jsou zde pro stažení) protože v konstrukci nejsou objekty typu mnohoúhelník, které způsobí to, že se rozejte pořadí příkazu s číslem objektu v konstrukci.
Pokud budeme trasovat opravdu každý konstrukční krok, můžeme být striktnější a používat jen dvě tloušťky čar.[br]A nebo tři, čtyři, když dopíšeme nastavení pro předposlední, předpředposlední,... krok. [br]Ilustrujeme jen zmíněný přístup "všechno nebo nic".[br][br]var pocet = ggbApplet.getObjectNumber();[br]var j = 1;[br]for (i = 0; i < pocet; i++) {[br] j = (i + 1 == ggbApplet.getValue("krok")) ? 8 : 1;[br] ggbApplet.setLineThickness(ggbApplet.getObjectName(i), j);[br]};[br][br]V níže vloženém appletu, kde jsou použité body zastavení, nedělá to, co bychom si přáli.
Analogie téhož:[br][br]var pocet = ggbApplet.getObjectNumber();[br]var kr = ggbApplet.getValue("krok");[br]for (i = 0; i < pocet; i++) {[br] if ((kr-1 - i) < 4) {[br] ggbApplet.setColor(ggbApplet.getObjectName(i), 255, 0, 0);[br] } else {[br] ggbApplet.setColor(ggbApplet.getObjectName(i), 0, 0, 0);[br] }[br]}