Poslední sestrojený prvek při krokování konstrukce

Autor:
sarka

Krokování konstrukce

Dvě přiložené ikázky se liší tím, zda dříve sestrojené objekty postupně ztrácejí výraznost nebo zda zdůrazňujeme jen dosud poslední sestrojený objekt. Druhý jmenovaný postup není vhodný, pokud při krokování využíváme bodů zastavení (a to se děljě 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é). V tom případě je výsledkem většího kroku třeba bod -- ten sice můžeme zvýraznit také (v naší ukázce to není), ale nemáme pak už zvýrazněné, jak jsme ho sestrojili. Ke zvýraznění jsme použili číslo krok definované jako ConstructionStep() , tedy jako pořadové číslo prvku, který se právě sestrojil. Aktivace bodů zastavení hodnotu objektu krok nijak neovlivní, vždy se jedná o číslo objektu v konstrukci, nikoli o číslo snímku-zastávky v nastaveném krokování. Objekt krok se nám také hodí pro skriptování: nebudeme psát skripty pro jednotlivé objekty ani definovat funkci sloužící jako Listener, ale ošetříme událost OnUpdate objektu krok. Celý javascript je velmi krátký: Na kartě OnUpdate objektu krok naprogramujeme: var pocet = ggbApplet.getObjectNumber(); // počet objektů v konstrukci var j = 1; for (i = 1; i < pocet; i++) { // všem objektům v konstrukci určíme tloušťku čáry j = Math.max(1, 8 + i - ggbApplet.getValue("krok")); // nedávno sestrojeným větší, starším 1 ggbApplet.setLineThickness(ggbApplet.getObjectName(i), j); // nastavíme ji }; V této ukázce neřešíme, jestli jde opravdu o čáru a neměníme vlastnosti bodů. Jak zjistit ryp objektu jsme ukázali v minulých kapitolách. Pozor na to, že ggbApplet.getObjectNumber() udává skutečný počet objektů v konstrukci, zatímco ConstructionStep() počítá počet příkazů. Jakmile tedy sestrojíme například trojúhelník, začnou se tato dvě čísla lišit. V konstrukcích, kde sestrojíme každý bod či čáru samostatně, návod můžeme použít tak, jak je. Jinak můžeme zkusit dotázat se na konstrukční krok daného prvku ConstructionStep(object) a testovat ten. Tady už je ale třeba dát pozor jednak na dotaz na objekty, které zatím nejsou sestrojeny, jednak na cyklické odkazy, které tak mohou snadno vzniknout. Hodnotu proměnné ck sestrojujeme jako volnou (SetValue). var pocet = ggbApplet.getObjectNumber(); var j = 1; var jmeno = ""; for (i = 0; i < pocet; i++) {      jmeno = ggbApplet.getObjectName(i); if (ggbApplet.exists(jmeno)) { // už je sestrojen? ggbApplet.evalCommand("SetValue(ck,ConstructionStep(" + jmeno + "))"); // ck je jeho krok j = (ggbApplet.getValue("ck") == ggbApplet.getValue("krok")) ? 8 : 1; // je to TEĎ? ggbApplet.setLineThickness(jmeno, j); } };

Přístup "všechno nebo nic"

POkud budeme trasovat opravdu každý konstrukční krok, můžeme být striktnější a používat jen dvě tloušťky čar. A nebo tři, čtyři, když dopíšeme nastavení pro předposlední, předpředposlední,... krok. Ilustrujeme jen zmíněný přístup "všechno nebo nic". var pocet = ggbApplet.getObjectNumber(); var j = 1; for (i = 0; i < pocet; i++) { j = (i + 1 == ggbApplet.getValue("krok")) ? 8 : 1; ggbApplet.setLineThickness(ggbApplet.getObjectName(i), j); }; V niže vloženém appletu, kde jsou použité body zastavení, nedělá to, co bychom si přáli.

Podobně s barvami

Analogie téhož: var pocet = ggbApplet.getObjectNumber(); var kr = ggbApplet.getValue("krok"); for (i = 0; i < pocet; i++) { if ((kr-1 - i) < 4) { ggbApplet.setColor(ggbApplet.getObjectName(i), 255, 0, 0); } else { ggbApplet.setColor(ggbApplet.getObjectName(i), 0, 0, 0); } }