axmol/tests/cpp-tests/Source/DrawNodeTest/DrawNodeTest.cpp

3564 lines
155 KiB
C++

/****************************************************************************
Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd..
Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md).
https://axmol.dev/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do size., subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#include "DrawNodeTest.h"
#include "renderer/Renderer.h"
#include "renderer/CustomCommand.h"
#if defined(_WIN32)
# pragma push_macro("TRANSPARENT")
# undef TRANSPARENT
#endif
USING_NS_AX;
using namespace std;
Vec2 vertices1[] = {
{45.750000f, 144.375000f}, {75.500000f, 136.875000f}, {75.500000f, 159.125000f}, {100.250000f, 161.375000f},
{65.500000f, 181.375000f}, {102.250000f, 179.125000f}, {95.000000f, 215.125000f}, {129.331467f, 189.926208f},
{131.371460f, 206.366196f}, {139.651474f, 192.446198f}, {161.851471f, 200.606201f}, {151.000000f, 220.375000f},
{110.500000f, 244.375000f}, {153.750000f, 238.125000f}, {142.500000f, 253.875000f}, {220.750000f, 259.375000f},
{250.500000f, 244.375000f}, {168.750000f, 241.875000f}, {182.250000f, 154.125000f}, {190.250000f, 227.375000f},
{196.500000f, 197.375000f}, {208.750000f, 210.625000f}, {220.750000f, 194.375000f}, {208.750000f, 176.375000f},
{253.250000f, 173.875000f}, {243.750000f, 154.125000f}, {213.750000f, 161.375000f}, {202.250000f, 139.875000f},
{236.000000f, 131.875000f}, {218.500000f, 120.875000f}, {206.500000f, 125.625000f}, {184.500000f, 110.375000f},
{157.000000f, 108.625000f}, {147.500000f, 96.625000f}, {153.750000f, 85.125000f}, {147.500000f, 75.375000f},
{126.500000f, 74.125000f}, {110.500000f, 86.625000f}, {127.750000f, 85.125000f}, {135.250000f, 91.125000f},
{135.250000f, 97.875000f}, {124.000000f, 93.875000f}, {115.500000f, 100.875000f}, {115.500000f, 111.875000f},
{135.250000f, 108.625000f}, {151.000000f, 124.125000f}, {90.500000f, 131.875000f}, {113.250000f, 120.875000f},
{88.000000f, 116.875000f}, {106.000000f, 103.875000f}, {88.000000f, 97.875000f}};
Vec2 vertices2[] = {
{290.250000f, 98.1250000f}, {235.000000f, 90.8750000f}, {270.500000f, 109.875000f}, {235.000000f, 119.125000f},
{275.250000f, 145.875000f}, {249.500000f, 145.875000f}, {249.500000f, 178.125000f}, {275.250000f, 187.375015f},
{294.750488f, 168.333344f}, {311.250000f, 181.125000f}, {257.000000f, 213.625015f}, {338.500000f, 193.125000f},
{300.000000f, 211.125015f}, {333.750000f, 211.125015f}, {368.250000f, 206.625000f}, {377.000000f, 178.125000f},
{421.750000f, 170.125000f}, {416.250000f, 115.375000f}, {391.250000f, 157.875000f}, {338.500000f, 131.625000f},
{362.750000f, 131.625000f}, {362.750000f, 106.875000f}, {306.500000f, 119.125000f}, {324.250000f, 85.1250000f},
{227.500000f, 61.8750000}};
Vec2 vertices21[] = {
{290.250000f, 98.1250000f}, {235.000000f, 90.8750000f}, {270.500000f, 109.875000f}, {235.000000f, 119.125000f},
{275.250000f, 145.875000f}, {249.500000f, 145.875000f}, {249.500000f, 178.125000f}, {275.250000f, 187.375015f},
{294.750488f, 168.333344f}, {311.250000f, 181.125000f}, {257.000000f, 213.625015f}, {338.500000f, 193.125000f},
{300.000000f, 211.125015f}, {333.750000f, 211.125015f}, {368.250000f, 206.625000f}, {377.000000f, 178.125000f},
{421.750000f, 170.125000f}, {416.250000f, 115.375000f}, {391.250000f, 157.875000f}, {338.500000f, 131.625000f},
{362.750000f, 131.625000f}, {362.750000f, 106.875000f}, {306.500000f, 119.125000f}, {324.250000f, 85.1250000f},
{227.500000f, 61.8750000}};
Vec2 vertices24[] = {
{45.750000f, 144.375000f}, {75.500000f, 136.875000f}, {75.500000f, 159.125000f}, {100.250000f, 161.375000f},
{65.500000f, 181.375000f}, {102.250000f, 179.125000f}, {95.000000f, 215.125000f}, {129.331467f, 189.926208f},
{131.371460f, 206.366196f}, {139.651474f, 192.446198f}, {161.851471f, 200.606201f}, {151.000000f, 220.375000f},
{110.500000f, 244.375000f}, {153.750000f, 238.125000f}, {142.500000f, 253.875000f}, {220.750000f, 259.375000f},
{250.500000f, 244.375000f}, {168.750000f, 241.875000f}, {182.250000f, 154.125000f}, {190.250000f, 227.375000f},
{196.500000f, 197.375000f}, {208.750000f, 210.625000f}, {220.750000f, 194.375000f}, {208.750000f, 176.375000f},
{253.250000f, 173.875000f}, {243.750000f, 154.125000f}, {213.750000f, 161.375000f}, {202.250000f, 139.875000f},
{236.000000f, 131.875000f}, {218.500000f, 120.875000f}, {206.500000f, 125.625000f}, {184.500000f, 110.375000f},
{157.000000f, 108.625000f}, {147.500000f, 96.625000f}, {153.750000f, 85.125000f}, {147.500000f, 75.375000f},
{126.500000f, 74.125000f}, {110.500000f, 86.625000f}, {127.750000f, 85.125000f}, {135.250000f, 91.125000f},
{135.250000f, 97.875000f}, {124.000000f, 93.875000f}, {115.500000f, 100.875000f}, {115.500000f, 111.875000f},
{135.250000f, 108.625000f}, {151.000000f, 124.125000f}, {90.500000f, 131.875000f}, {113.250000f, 120.875000f},
{88.000000f, 116.875000f}, {106.000000f, 103.875000f}, {88.000000f, 97.875000f},
};
// Original https : // www.purebasic.fr/english/viewtopic.php?t=82915
float verticesHead[] = {107.f, 9.f,
0.3333333433f, 0.3411764801f,
0.3686274588f, 255.f,
81.f, 599.f,
116.f, 571.f,
180.f, 562.f,
255.f, 559.f,
213.f, 586.f,
199.f, 599.f,
0.f, 7.f,
0.3333333433f, 0.3411764801f,
0.3686274588f, 255.f,
765.f, 584.f,
782.f, 590.f,
794.f, 599.f,
772.f, 599.f,
0.f, 13.f,
0.4156862795f, 0.4313725531f,
0.4549019635f, 255.f,
278.f, 573.f,
287.f, 599.f,
199.f, 599.f,
217.f, 582.f,
256.f, 557.f,
313.f, 532.f,
352.f, 508.f,
366.f, 512.f,
368.f, 545.f,
285.f, 598.f,
0.f, 8.f,
0.4156862795f, 0.4313725531f,
0.4549019635f, 255.f,
760.f, 591.f,
754.f, 579.f,
766.f, 584.f,
773.f, 599.f,
751.f, 599.f,
0.f, 12.f,
0.400000006f, 0.4117647111f,
0.4196078479f, 255.f,
701.f, 563.f,
615.f, 599.f,
652.f, 558.f,
705.f, 507.f,
716.f, 534.f,
753.f, 577.f,
760.f, 591.f,
752.f, 599.f,
613.f, 599.f,
0.f, 10.f,
0.400000006f, 0.4117647111f,
0.4196078479f, 255.f,
704.f, 506.f,
701.f, 493.f,
686.f, 488.f,
688.f, 503.f,
692.f, 514.f,
691.f, 528.f,
708.f, 518.f,
0.f, 8.f,
0.4784313738f, 0.3647058904f,
0.2156862766f, 255.f,
285.f, 599.f,
309.f, 579.f,
365.f, 546.f,
375.f, 578.f,
378.f, 599.f,
0.f, 16.f,
0.4784313738f, 0.3647058904f,
0.2156862766f, 255.f,
471.f, 599.f,
377.f, 599.f,
365.f, 546.f,
360.f, 511.f,
394.f, 515.f,
428.f, 507.f,
492.f, 471.f,
553.f, 417.f,
568.f, 397.f,
562.f, 422.f,
552.f, 462.f,
547.f, 487.f,
524.f, 529.f,
0.f, 19.f,
0.5921568871f, 0.4980392158f,
0.3647058904f, 255.f,
614.f, 599.f,
683.f, 531.f,
690.f, 512.f,
686.f, 493.f,
684.f, 429.f,
656.f, 245.f,
654.f, 242.f,
644.f, 273.f,
628.f, 288.f,
621.f, 288.f,
592.f, 308.f,
571.f, 378.f,
554.f, 454.f,
543.f, 494.f,
514.f, 542.f,
469.f, 599.f,
0.f, 12.f,
0.5921568871f, 0.4980392158f,
0.3647058904f, 255.f,
598.f, 259.f,
602.f, 233.f,
619.f, 236.f,
624.f, 250.f,
630.f, 257.f,
629.f, 269.f,
623.f, 291.f,
603.f, 312.f,
589.f, 311.f,
0.f, 15.f,
0.4784313738f, 0.3647058904f,
0.2156862766f, 255.f,
642.f, 211.f,
606.f, 197.f,
609.f, 236.f,
621.f, 236.f,
621.f, 246.f,
630.f, 256.f,
627.f, 279.f,
626.f, 286.f,
636.f, 282.f,
641.f, 274.f,
649.f, 250.f,
656.f, 221.f,
0.f, 24.f,
0.4784313738f, 0.3647058904f,
0.2156862766f, 255.f,
309.f, 333.f,
334.f, 269.f,
346.f, 207.f,
347.f, 169.f,
323.f, 42.f,
265.f, 39.f,
256.f, 156.f,
272.f, 212.f,
276.f, 302.f,
292.f, 372.f,
323.f, 469.f,
334.f, 500.f,
350.f, 509.f,
365.f, 511.f,
358.f, 472.f,
370.f, 451.f,
382.f, 438.f,
382.f, 433.f,
389.f, 392.f,
382.f, 309.f,
315.f, 291.f,
0.f, 35.f,
0.5921568871f, 0.4980392158f,
0.3647058904f, 255.f,
439.f, 399.f,
384.f, 393.f,
354.f, 396.f,
349.f, 395.f,
348.f, 405.f,
349.f, 421.f,
352.f, 428.f,
363.f, 434.f,
383.f, 435.f,
364.f, 458.f,
358.f, 473.f,
360.f, 499.f,
364.f, 512.f,
382.f, 516.f,
407.f, 514.f,
437.f, 506.f,
476.f, 482.f,
534.f, 437.f,
562.f, 408.f,
571.f, 382.f,
581.f, 346.f,
598.f, 0.f,
333.f, 0.f,
345.f, 190.f,
336.f, 249.f,
379.f, 333.f,
373.f, 347.f,
347.f, 353.f,
347.f, 371.f,
354.f, 377.f,
387.f, 384.f,
389.f, 396.f,
0.f, 7.f,
0.5921568871f, 0.4980392158f,
0.3647058904f, 255.f,
370.f, 309.f,
322.f, 296.f,
333.f, 268.f,
339.f, 238.f,
0.f, 10.f,
0.5921568871f, 0.4980392158f,
0.3647058904f, 255.f,
341.f, 289.f,
323.f, 293.f,
314.f, 317.f,
324.f, 328.f,
352.f, 326.f,
390.f, 332.f,
388.f, 288.f,
0.f, 12.f,
0.4784313738f, 0.3647058904f,
0.2156862766f, 255.f,
440.f, 145.f,
520.f, 146.f,
464.f, 167.f,
429.f, 220.f,
422.f, 222.f,
400.f, 206.f,
392.f, 188.f,
390.f, 173.f,
393.f, 160.f,
0.f, 15.f,
0.7960784435f, 0.7490196228f,
0.6705882549f, 255.f,
460.f, 194.f,
489.f, 189.f,
500.f, 199.f,
499.f, 211.f,
489.f, 217.f,
467.f, 223.f,
445.f, 224.f,
431.f, 217.f,
422.f, 209.f,
420.f, 200.f,
436.f, 181.f,
491.f, 189.f,
0.f, 12.f,
0.7960784435f, 0.7490196228f,
0.6705882549f, 255.f,
342.f, 199.f,
343.f, 211.f,
337.f, 218.f,
322.f, 222.f,
306.f, 221.f,
292.f, 212.f,
288.f, 197.f,
297.f, 186.f,
332.f, 189.f,
0.f, 13.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
461.f, 182.f,
445.f, 184.f,
442.f, 196.f,
446.f, 210.f,
454.f, 218.f,
462.f, 219.f,
472.f, 217.f,
480.f, 207.f,
480.f, 196.f,
477.f, 185.f,
0.f, 11.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
309.f, 186.f,
306.f, 192.f,
307.f, 204.f,
313.f, 213.f,
325.f, 216.f,
334.f, 210.f,
336.f, 197.f,
332.f, 189.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
433.f, 186.f,
422.f, 199.f,
416.f, 199.f,
432.f, 179.f,
475.f, 183.f,
470.f, 185.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
470.f, 183.f,
491.f, 187.f,
497.f, 194.f,
482.f, 188.f,
433.f, 184.f,
436.f, 181.f,
0.f, 10.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
331.f, 190.f,
340.f, 199.f,
342.f, 197.f,
333.f, 188.f,
296.f, 184.f,
292.f, 186.f,
296.f, 186.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
299.f, 187.f,
291.f, 198.f,
287.f, 198.f,
296.f, 185.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
312.f, 176.f,
297.f, 178.f,
297.f, 181.f,
312.f, 177.f,
326.f, 181.f,
326.f, 179.f,
0.f, 11.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
439.f, 172.f,
470.f, 174.f,
488.f, 180.f,
457.f, 176.f,
432.f, 176.f,
423.f, 180.f,
423.f, 178.f,
431.f, 173.f,
0.f, 10.f,
0.7843137383f, 0.7254902124f,
0.6078431606f, 255.f,
467.f, 186.f,
464.f, 189.f,
464.f, 194.f,
467.f, 199.f,
473.f, 198.f,
477.f, 193.f,
477.f, 188.f,
0.f, 10.f,
0.7843137383f, 0.7254902124f,
0.6078431606f, 255.f,
332.f, 191.f,
334.f, 194.f,
332.f, 198.f,
327.f, 198.f,
323.f, 196.f,
322.f, 192.f,
324.f, 188.f,
0.f, 8.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
398.f, 195.f,
399.f, 204.f,
401.f, 208.f,
400.f, 198.f,
400.f, 194.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
365.f, 434.f,
350.f, 427.f,
350.f, 427.f,
356.f, 433.f,
372.f, 437.f,
382.f, 434.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
389.f, 393.f,
418.f, 401.f,
420.f, 403.f,
390.f, 396.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
391.f, 397.f,
355.f, 397.f,
356.f, 396.f,
388.f, 393.f,
0.f, 8.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
354.f, 397.f,
344.f, 393.f,
343.f, 390.f,
355.f, 396.f,
358.f, 396.f,
0.f, 8.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
343.f, 392.f,
335.f, 393.f,
337.f, 391.f,
344.f, 389.f,
346.f, 392.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
354.f, 379.f,
345.f, 372.f,
346.f, 370.f,
355.f, 377.f,
361.f, 373.f,
361.f, 377.f,
0.f, 11.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
368.f, 336.f,
375.f, 337.f,
373.f, 340.f,
367.f, 337.f,
360.f, 340.f,
356.f, 346.f,
356.f, 342.f,
363.f, 336.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
338.f, 337.f,
348.f, 351.f,
345.f, 351.f,
336.f, 339.f,
324.f, 327.f,
329.f, 328.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
367.f, 325.f,
326.f, 327.f,
330.f, 330.f,
367.f, 327.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
367.f, 326.f,
378.f, 331.f,
378.f, 328.f,
367.f, 325.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
325.f, 327.f,
316.f, 317.f,
315.f, 319.f,
322.f, 328.f,
329.f, 332.f,
329.f, 329.f,
0.f, 10.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
336.f, 256.f,
329.f, 284.f,
315.f, 312.f,
316.f, 312.f,
331.f, 267.f,
343.f, 213.f,
345.f, 214.f,
0.f, 8.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
654.f, 243.f,
644.f, 272.f,
635.f, 283.f,
647.f, 261.f,
651.f, 238.f,
0.f, 8.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
634.f, 282.f,
617.f, 290.f,
608.f, 301.f,
625.f, 287.f,
634.f, 286.f,
0.f, 8.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
605.f, 310.f,
609.f, 302.f,
616.f, 294.f,
610.f, 295.f,
605.f, 307.f,
0.f, 10.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
556.f, 578.f,
569.f, 550.f,
569.f, 544.f,
556.f, 576.f,
539.f, 599.f,
543.f, 599.f,
559.f, 576.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
572.f, 548.f,
582.f, 507.f,
582.f, 496.f,
583.f, 496.f,
577.f, 537.f,
575.f, 552.f,
0.f, 10.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
588.f, 497.f,
589.f, 474.f,
590.f, 468.f,
592.f, 467.f,
589.f, 499.f,
582.f, 527.f,
581.f, 521.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
572.f, 376.f,
574.f, 376.f,
563.f, 411.f,
560.f, 411.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
562.f, 406.f,
540.f, 432.f,
552.f, 422.f,
564.f, 409.f,
0.f, 8.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
547.f, 425.f,
504.f, 463.f,
501.f, 463.f,
530.f, 443.f,
551.f, 424.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
503.f, 462.f,
467.f, 488.f,
468.f, 489.f,
502.f, 465.f,
0.f, 8.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
464.f, 489.f,
438.f, 504.f,
438.f, 506.f,
452.f, 501.f,
470.f, 490.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
441.f, 503.f,
406.f, 513.f,
406.f, 515.f,
431.f, 509.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
409.f, 513.f,
377.f, 513.f,
377.f, 516.f,
397.f, 516.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
378.f, 514.f,
357.f, 510.f,
358.f, 513.f,
383.f, 517.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
622.f, 282.f,
623.f, 289.f,
625.f, 288.f,
625.f, 281.f,
632.f, 269.f,
631.f, 264.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
631.f, 267.f,
630.f, 257.f,
627.f, 247.f,
629.f, 266.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
628.f, 251.f,
621.f, 239.f,
618.f, 239.f,
624.f, 250.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
620.f, 241.f,
621.f, 231.f,
619.f, 229.f,
617.f, 241.f,
0.f, 10.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
620.f, 231.f,
627.f, 226.f,
633.f, 218.f,
633.f, 215.f,
624.f, 226.f,
619.f, 229.f,
617.f, 237.f,
0.f, 8.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
636.f, 274.f,
638.f, 260.f,
635.f, 252.f,
638.f, 267.f,
635.f, 275.f,
0.f, 11.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
631.f, 251.f,
636.f, 257.f,
636.f, 259.f,
639.f, 257.f,
634.f, 250.f,
625.f, 249.f,
628.f, 253.f,
634.f, 253.f,
0.f, 11.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
598.f, 339.f,
595.f, 334.f,
594.f, 328.f,
597.f, 328.f,
601.f, 337.f,
611.f, 339.f,
611.f, 341.f,
602.f, 342.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
341.f, 198.f,
339.f, 187.f,
337.f, 187.f,
338.f, 197.f,
0.f, 9.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
360.f, 512.f,
364.f, 546.f,
378.f, 599.f,
379.f, 599.f,
374.f, 572.f,
366.f, 547.f,
0.f, 7.f,
0.4470588267f, 0.3764705956f,
0.2666666806f, 255.f,
373.f, 583.f,
370.f, 599.f,
378.f, 599.f,
374.f, 577.f,
0.f, 19.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
684.f, 453.f,
685.f, 478.f,
691.f, 473.f,
701.f, 460.f,
717.f, 414.f,
713.f, 382.f,
709.f, 374.f,
724.f, 312.f,
718.f, 299.f,
758.f, 118.f,
754.f, 83.f,
685.f, 48.f,
657.f, 247.f,
654.f, 281.f,
652.f, 289.f,
621.f, 328.f,
0.f, 10.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
710.f, 443.f,
708.f, 402.f,
718.f, 405.f,
713.f, 443.f,
708.f, 460.f,
706.f, 460.f,
710.f, 438.f,
0.f, 11.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
726.f, 378.f,
732.f, 402.f,
734.f, 419.f,
732.f, 420.f,
727.f, 392.f,
720.f, 381.f,
702.f, 371.f,
698.f, 344.f,
0.f, 14.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
722.f, 308.f,
730.f, 328.f,
728.f, 354.f,
725.f, 365.f,
726.f, 348.f,
722.f, 359.f,
721.f, 361.f,
717.f, 339.f,
716.f, 357.f,
712.f, 359.f,
706.f, 282.f,
0.f, 10.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
730.f, 292.f,
742.f, 281.f,
744.f, 275.f,
740.f, 278.f,
727.f, 287.f,
706.f, 292.f,
712.f, 301.f,
0.f, 11.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
719.f, 284.f,
729.f, 274.f,
748.f, 237.f,
758.f, 208.f,
761.f, 182.f,
761.f, 142.f,
757.f, 110.f,
691.f, 262.f,
0.f, 10.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
661.f, 433.f,
666.f, 445.f,
672.f, 456.f,
671.f, 453.f,
668.f, 433.f,
674.f, 424.f,
643.f, 349.f,
0.f, 10.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
646.f, 432.f,
662.f, 407.f,
655.f, 356.f,
649.f, 412.f,
642.f, 431.f,
634.f, 443.f,
636.f, 444.f,
0.f, 14.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
643.f, 413.f,
647.f, 404.f,
658.f, 389.f,
644.f, 314.f,
637.f, 328.f,
641.f, 402.f,
636.f, 422.f,
633.f, 427.f,
634.f, 428.f,
642.f, 417.f,
650.f, 401.f,
0.f, 8.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
642.f, 385.f,
634.f, 377.f,
619.f, 329.f,
627.f, 322.f,
652.f, 323.f,
0.f, 16.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
622.f, 373.f,
632.f, 383.f,
636.f, 385.f,
636.f, 382.f,
627.f, 374.f,
626.f, 367.f,
633.f, 364.f,
622.f, 326.f,
609.f, 340.f,
610.f, 348.f,
612.f, 359.f,
623.f, 376.f,
631.f, 382.f,
0.f, 21.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
682.f, 97.f,
660.f, 248.f,
652.f, 242.f,
648.f, 234.f,
647.f, 227.f,
641.f, 223.f,
633.f, 216.f,
624.f, 206.f,
580.f, 194.f,
579.f, 179.f,
565.f, 159.f,
558.f, 133.f,
560.f, 123.f,
539.f, 93.f,
529.f, 68.f,
521.f, 16.f,
529.f, 0.f,
698.f, 0.f,
0.f, 13.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
514.f, 48.f,
517.f, 92.f,
519.f, 106.f,
521.f, 106.f,
519.f, 81.f,
521.f, 59.f,
527.f, 39.f,
526.f, 7.f,
520.f, 16.f,
516.f, 32.f,
0.f, 8.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
449.f, 59.f,
464.f, 36.f,
471.f, 16.f,
472.f, 1.f,
466.f, 13.f,
0.f, 8.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
472.f, 0.f,
468.f, 21.f,
460.f, 31.f,
461.f, 6.f,
458.f, 0.f,
0.f, 20.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
458.f, 0.f,
451.f, 26.f,
441.f, 52.f,
428.f, 76.f,
414.f, 92.f,
399.f, 103.f,
387.f, 116.f,
389.f, 113.f,
411.f, 75.f,
418.f, 45.f,
399.f, 76.f,
319.f, 131.f,
315.f, 112.f,
309.f, 98.f,
316.f, 83.f,
323.f, 51.f,
246.f, 0.f,
0.f, 12.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
327.f, 149.f,
339.f, 172.f,
349.f, 189.f,
354.f, 194.f,
352.f, 188.f,
347.f, 167.f,
350.f, 123.f,
353.f, 114.f,
318.f, 128.f,
0.f, 8.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
396.f, 77.f,
377.f, 96.f,
348.f, 121.f,
321.f, 131.f,
318.f, 116.f,
0.f, 15.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
299.f, 59.f,
305.f, 88.f,
312.f, 105.f,
312.f, 84.f,
315.f, 62.f,
327.f, 44.f,
326.f, 23.f,
121.f, 0.f,
287.f, 56.f,
290.f, 78.f,
299.f, 101.f,
302.f, 107.f,
0.f, 14.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
207.f, 0.f,
286.f, 50.f,
270.f, 86.f,
257.f, 144.f,
256.f, 244.f,
237.f, 220.f,
227.f, 206.f,
211.f, 191.f,
197.f, 161.f,
128.f, 56.f,
142.f, 0.f,
0.f, 12.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
179.f, 168.f,
196.f, 198.f,
210.f, 221.f,
212.f, 219.f,
201.f, 200.f,
196.f, 174.f,
202.f, 148.f,
169.f, 96.f,
171.f, 141.f,
0.f, 16.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
152.f, 157.f,
158.f, 178.f,
168.f, 198.f,
172.f, 206.f,
172.f, 202.f,
165.f, 178.f,
164.f, 154.f,
173.f, 121.f,
129.f, 48.f,
126.f, 78.f,
130.f, 108.f,
133.f, 121.f,
144.f, 146.f,
0.f, 10.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
254.f, 155.f,
269.f, 202.f,
272.f, 221.f,
273.f, 258.f,
262.f, 243.f,
259.f, 248.f,
240.f, 222.f,
0.f, 14.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
112.f, 33.f,
121.f, 12.f,
124.f, 0.f,
145.f, 0.f,
134.f, 34.f,
127.f, 38.f,
118.f, 58.f,
112.f, 92.f,
108.f, 100.f,
107.f, 86.f,
106.f, 63.f,
0.f, 24.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
298.f, 146.f,
293.f, 134.f,
284.f, 132.f,
272.f, 136.f,
272.f, 138.f,
267.f, 140.f,
264.f, 149.f,
266.f, 158.f,
272.f, 157.f,
274.f, 159.f,
289.f, 154.f,
303.f, 157.f,
324.f, 171.f,
334.f, 176.f,
340.f, 181.f,
332.f, 171.f,
330.f, 162.f,
328.f, 153.f,
311.f, 146.f,
298.f, 136.f,
290.f, 133.f,
0.f, 22.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
485.f, 139.f,
487.f, 130.f,
509.f, 129.f,
532.f, 137.f,
544.f, 152.f,
549.f, 168.f,
543.f, 164.f,
543.f, 168.f,
522.f, 159.f,
496.f, 155.f,
470.f, 156.f,
435.f, 164.f,
407.f, 173.f,
391.f, 171.f,
384.f, 168.f,
379.f, 156.f,
413.f, 151.f,
414.f, 148.f,
489.f, 129.f,
0.f, 16.f,
0.1882352978f, 0.1686274558f,
0.0862745121f, 255.f,
607.f, 191.f,
606.f, 241.f,
606.f, 275.f,
596.f, 314.f,
592.f, 314.f,
581.f, 350.f,
574.f, 364.f,
574.f, 364.f,
580.f, 328.f,
577.f, 326.f,
577.f, 312.f,
583.f, 247.f,
579.f, 164.f,
0.f, 13.f,
0.1568627506f, 0.1686274558f,
0.2352941185f, 255.f,
756.f, 68.f,
754.f, 97.f,
749.f, 104.f,
734.f, 107.f,
715.f, 100.f,
701.f, 102.f,
696.f, 97.f,
682.f, 26.f,
661.f, 0.f,
736.f, 0.f,
0.f, 11.f,
0.1568627506f, 0.1686274558f,
0.2352941185f, 255.f,
689.f, 76.f,
687.f, 88.f,
683.f, 99.f,
676.f, 99.f,
674.f, 78.f,
669.f, 39.f,
659.f, 0.f,
705.f, 0.f,
0.f, 9.f,
0.1568627506f, 0.1686274558f,
0.2352941185f, 255.f,
652.f, 0.f,
651.f, 16.f,
646.f, 29.f,
642.f, 31.f,
638.f, 24.f,
631.f, 0.f,
0.f, 9.f,
0.1568627506f, 0.1686274558f,
0.2352941185f, 255.f,
628.f, 0.f,
628.f, 20.f,
625.f, 27.f,
619.f, 29.f,
616.f, 19.f,
616.f, 0.f,
0.f, 12.f,
0.1568627506f, 0.1686274558f,
0.2352941185f, 255.f,
415.f, 0.f,
403.f, 31.f,
392.f, 54.f,
376.f, 68.f,
364.f, 74.f,
362.f, 70.f,
365.f, 61.f,
390.f, 25.f,
400.f, 0.f,
0.f, 12.f,
0.1568627506f, 0.1686274558f,
0.2352941185f, 255.f,
352.f, 42.f,
341.f, 66.f,
339.f, 82.f,
344.f, 81.f,
350.f, 70.f,
364.f, 44.f,
381.f, 21.f,
380.f, 16.f,
368.f, 19.f,
0.f, 11.f,
0.1568627506f, 0.1686274558f,
0.2352941185f, 255.f,
344.f, 0.f,
365.f, 0.f,
353.f, 21.f,
341.f, 49.f,
332.f, 62.f,
329.f, 58.f,
329.f, 51.f,
344.f, 0.f,
0.f, 10.f,
0.1568627506f, 0.1686274558f,
0.2352941185f, 255.f,
333.f, 2.f,
329.f, 17.f,
323.f, 23.f,
318.f, 18.f,
319.f, 6.f,
320.f, 0.f,
331.f, 0.f,
0.f, 11.f,
0.1764705926f, 0.1960784346f,
0.2666666806f, 255.f,
760.f, 0.f,
761.f, 39.f,
757.f, 80.f,
750.f, 86.f,
709.f, 69.f,
692.f, 47.f,
692.f, 26.f,
696.f, 0.f,
0.f, 7.f,
0.160784319f, 0.1764705926f,
0.1882352978f, 255.f,
278.f, 599.f,
324.f, 554.f,
322.f, 557.f,
283.f, 599.f,
0.f, 9.f,
0.160784319f, 0.1764705926f,
0.1882352978f, 255.f,
758.f, 589.f,
753.f, 577.f,
755.f, 577.f,
762.f, 591.f,
756.f, 599.f,
754.f, 599.f,
0.f, 7.f,
0.160784319f, 0.1764705926f,
0.1882352978f, 255.f,
773.f, 599.f,
765.f, 583.f,
763.f, 583.f,
770.f, 599.f,
0.f, 10.f,
0.160784319f, 0.1764705926f,
0.1882352978f, 255.f,
694.f, 507.f,
694.f, 498.f,
691.f, 498.f,
694.f, 509.f,
690.f, 519.f,
693.f, 521.f,
696.f, 507.f,
0.f, 9.f,
0.160784319f, 0.1764705926f,
0.1882352978f, 255.f,
215.f, 583.f,
256.f, 556.f,
253.f, 556.f,
216.f, 579.f,
198.f, 599.f,
200.f, 599.f,
0.f, 0.f};
float verticesFB[] = {
{0.842}, {1.052}, {0.842}, {1.649}, {5.296}, {1.649}, {5.595}, {1.855}, {5.913}, {2.028}, {6.233},
{2.194}, {6.541}, {2.384}, {6.733}, {2.576}, {6.906}, {2.851}, {7.060}, {3.190}, {7.197}, {3.573},
{7.317}, {3.981}, {7.423}, {4.397}, {7.516}, {4.800}, {7.597}, {5.173}, {7.668}, {5.496}, {7.729},
{5.751}, {7.782}, {5.918}, {7.815}, {5.974}, {7.876}, {6.075}, {7.981}, {6.274}, {8.143}, {6.622},
{8.373}, {7.172}, {8.686}, {7.976}, {8.960}, {8.571}, {9.034}, {8.733}, {8.830}, {8.824}, {8.392},
{8.659}, {7.954}, {8.508}, {7.784}, {8.487}, {7.601}, {8.471}, {7.395}, {8.460}, {7.153}, {8.453},
{6.867}, {8.449}, {6.116}, {8.449}, {5.630}, {8.451}, {5.057}, {8.452}, {4.384}, {8.453}, {4.144},
{8.119}, {3.980}, {7.715}, {4.065}, {7.361}, {4.215}, {7.044}, {4.420}, {6.761}, {4.668}, {6.505},
{4.948}, {6.271}, {5.250}, {6.055}, {5.562}, {5.850}, {5.778}, {5.645}, {6.015}, {5.478}, {6.421},
{5.367}, {6.742}, {5.271}, {6.921}, {5.178}, {7.105}, {4.836}, {7.123}, {4.472}, {7.005}, {4.183},
{6.803}, {3.964}, {6.641}, {3.871}, {6.487}, {3.890}, {6.309}, {4.005}, {6.077}, {4.200}, {5.758},
{4.459}, {5.321}, {4.768}, {4.735}, {5.110}, {4.641}, {5.211}, {4.445}, {5.452}, {4.177}, {5.794},
{3.868}, {6.198}, {3.548}, {6.624}, {3.246}, {7.033}, {2.993}, {7.387}, {2.819}, {7.644}, {2.753},
{7.767}, {2.774}, {8.165}, {2.859}, {8.538}, {3.020}, {8.867}, {3.272}, {9.131}, {3.625}, {9.311},
{4.420}, {9.563}, {5.023}, {9.750}, {5.461}, {9.885}, {5.756}, {9.979}, {5.933}, {10.040}, {6.017},
{10.090}, {6.032}, {10.140}, {5.946}, {10.470}, {5.873}, {10.810}, {5.830}, {11.140}, {5.835}, {11.460},
{5.904}, {11.790}, {6.054}, {12.120}, {6.226}, {12.400}, {6.409}, {12.670}, {6.591}, {12.950}, {6.763},
{13.240}, {6.912}, {13.530}, {7.030}, {13.850}, {7.101}, {14.260}, {7.094}, {14.700}, {7.023}, {15.130},
{6.902}, {15.510}, {6.747}, {15.810}, {6.570}, {15.970}, {6.403}, {15.930}, {6.092}, {15.770}, {5.735},
{15.550}, {5.431}, {15.310}, {5.277}, {15.100}, {5.174}, {14.540}, {5.157}, {14.260}, {5.122}, {14.130},
{4.885}, {13.950}, {4.557}, {13.890}, {4.191}, {13.920}, {3.841}, {14.020}, {3.559}, {14.170}, {3.428},
{14.300}, {3.353}, {14.480}, {3.322}, {14.740}, {3.318}, {15.080}, {3.326}, {15.520}, {3.332}, {16.100},
{3.530}, {16.370}, {3.655}, {16.700}, {3.728}, {17.090}, {3.771}, {17.500}, {3.805}, {17.900}, {3.853},
{18.270}, {3.934}, {18.590}, {4.072}, {18.810}, {4.357}, {19.060}, {4.706}, {19.310}, {5.085}, {19.520},
{5.459}, {19.680}, {5.794}, {19.750}, {6.056}, {19.710}, {6.208}, {19.540}, {6.733}, {19.540}, {7.059},
{19.540}, {7.265}, {19.540}, {7.431}, {19.540}, {7.637}, {19.540}, {7.963}, {19.540}, {8.488}, {19.540},
{8.782}, {19.390}, {9.234}, {19.250}, {9.553}, {19.080}, {9.893}, {18.880}, {10.230}, {18.650}, {10.560},
{18.420}, {10.840}, {18.190}, {11.070}, {17.990}, {11.230}, {17.820}, {11.700}, {17.160}, {11.970}, {16.690},
{12.110}, {16.370}, {12.150}, {16.170}, {12.150}, {16.050}, {12.170}, {15.980}, {12.350}, {15.740}, {12.570},
{15.550}, {12.820}, {15.420}, {13.100}, {15.330}, {13.400}, {15.280}, {13.730}, {15.270}, {14.070}, {15.280},
{14.430}, {15.330}, {14.800}, {15.390}, {15.180}, {15.470}, {15.560}, {15.560}, {15.950}, {15.650}, {16.330},
{15.750}, {16.710}, {15.840}, {17.080}, {15.920}, {17.450}, {15.990}, {17.790}, {16.030}, {18.040}, {16.040},
{18.310}, {16.040}, {18.630}, {16.010}, {18.980}, {15.960}, {19.390}, {15.890}, {19.860}, {15.800}, {20.180},
{15.740}, {20.450}, {15.700}, {20.700}, {15.690}, {20.940}, {15.720}, {21.190}, {15.800}, {21.470}, {15.930},
{21.810}, {16.130}, {22.210}, {16.410}, {22.700}, {16.770}, {23.010}, {16.960}, {23.330}, {17.080}, {23.660},
{17.150}, {23.990}, {17.170}, {24.330}, {17.130}, {24.660}, {17.040}, {24.980}, {16.910}, {25.280}, {16.730},
{25.560}, {16.510}, {25.800}, {16.300}, {25.950}, {16.120}, {26.040}, {15.890}, {26.120}, {15.490}, {26.210},
{14.830}, {26.270}, {14.420}, {26.320}, {14.030}, {26.370}, {13.660}, {26.390}, {13.300}, {26.380}, {12.940},
{26.330}, {12.580}, {26.290}, {12.470}, {26.200}, {12.280}, {26.080}, {12.030}, {25.930}, {11.740}, {25.750},
{11.400}, {25.550}, {11.030}, {25.340}, {10.650}, {25.120}, {10.270}, {24.900}, {9.897}, {24.680}, {9.544},
{24.480}, {9.224}, {24.300}, {8.949}, {24.140}, {8.731}, {23.850}, {8.298}, {23.660}, {7.941}, {23.530},
{7.660}, {23.420}, {7.457}, {23.290}, {7.331}, {23.290}, {6.946}, {23.300}, {6.569}, {23.310}, {6.198},
{23.340}, {5.830}, {23.380}, {5.501}, {23.300}, {5.389}, {23.050}, {5.526}, {22.840}, {5.731}, {22.680},
{5.993}, {22.560}, {6.302}, {22.480}, {6.647}, {22.430}, {7.017}, {22.410}, {7.401}, {22.410}, {7.788},
{22.440}, {8.166}, {22.480}, {8.526}, {22.540}, {8.856}, {22.600}, {9.146}, {22.700}, {9.459}, {22.830},
{9.787}, {22.990}, {10.120}, {23.160}, {10.460}, {23.330}, {10.790}, {23.480}, {11.110}, {23.620}, {11.400},
{23.730}, {11.660}, {23.800}, {11.890}, {23.850}, {12.260}, {23.880}, {12.640}, {23.860}, {13.020}, {23.810},
{13.390}, {23.720}, {13.730}, {23.590}, {14.050}, {23.410}, {14.320}, {23.190}, {14.540}, {22.920}, {14.690},
{22.620}, {14.790}, {22.300}, {14.850}, {21.970}, {14.880}, {21.640}, {14.880}, {21.310}, {14.880}, {20.980},
{14.870}, {21.110}, {14.550}, {21.250}, {14.230}, {21.390}, {13.900}, {21.520}, {13.580}, {21.640}, {13.250},
{21.740}, {12.920}, {21.810}, {12.590}, {21.850}, {12.260}, {21.850}, {11.920}, {21.810}, {11.580}, {21.710},
{11.240}, {21.550}, {10.880}, {21.320}, {10.540}, {21.040}, {10.220}, {20.740}, {9.924}, {20.430}, {9.648},
{20.130}, {9.397}, {19.860}, {9.172}, {19.650}, {8.976}, {19.500}, {8.811}, {19.440}, {8.678}, {19.450},
{8.382}, {19.640}, {7.984}, {19.840}, {7.710}, {20.060}, {7.419}, {20.270}, {7.119}, {20.440}, {6.816},
{20.520}, {6.520}, {20.480}, {6.237}, {20.350}, {5.983}, {20.160}, {5.736}, {19.930}, {5.491}, {19.670},
{5.243}, {19.400}, {4.989}, {19.110}, {4.724}, {18.830}, {4.442}, {18.560}, {4.139}, {18.410}, {3.906},
{18.220}, {3.581}, {18.010}, {3.235}, {17.790}, {2.940}, {17.590}, {2.767}, {17.040}, {2.553}, {16.920},
{2.444}, {16.820}, {2.143}, {16.630}, {1.806}, {16.420}, {1.766}, {16.020}, {1.824}, {15.580}, {1.951},
{15.220}, {2.118}, {15.260}, {2.258}, {15.450}, {2.568}, {15.710}, {2.802}, {16.020}, {2.986}, {16.360},
{3.150}, {16.680}, {3.320}, {16.970}, {3.524}, {17.060}, {3.622}, {17.240}, {3.838}, {17.490}, {4.138},
{17.780}, {4.490}, {18.080}, {4.859}, {18.370}, {5.213}, {18.610}, {5.518}, {18.770}, {5.741}, {18.840},
{5.849}, {18.890}, {6.150}, {18.880}, {6.406}, {18.780}, {6.694}, {18.570}, {7.094}, {18.260}, {7.045},
{18.290}, {6.817}, {18.130}, {6.445}, {17.970}, {6.185}, {17.750}, {5.942}, {17.500}, {5.701}, {17.220},
{5.447}, {16.940}, {5.167}, {16.670}, {4.846}, {16.510}, {4.623}, {16.340}, {4.356}, {16.170}, {4.058},
{15.980}, {3.741}, {15.780}, {3.416}, {15.560}, {3.096}, {15.330}, {2.794}, {15.080}, {2.520}, {14.800},
{2.287}, {14.510}, {2.107}, {14.300}, {1.982}, {14.240}, {1.649}, {27.220}, {1.649}, {27.220}, {1.052},
{0.842}, {1.052}, {0.842}, {1.649}, {7.541}, {1.649}, {7.700}, {1.941}, {7.767}, {2.217}, {7.837},
{2.566}, {7.918}, {2.911}, {8.010}, {3.251}, {8.111}, {3.587}, {8.222}, {3.919}, {8.342}, {4.246},
{8.472}, {4.570}, {8.610}, {4.890}, {8.756}, {5.205}, {8.910}, {5.518}, {9.071}, {5.826}, {9.240},
{6.131}, {9.415}, {6.432}, {9.597}, {6.730}, {9.785}, {7.025}, {9.979}, {7.317}, {10.180}, {7.605},
{10.380}, {7.891}, {10.590}, {8.173}, {10.800}, {8.453}, {11.990}, {8.453}, {12.400}, {8.456}, {12.720},
{8.465}, {12.970}, {8.481}, {13.180}, {8.508}, {13.370}, {8.548}, {13.570}, {8.602}, {13.800}, {8.674},
{14.090}, {8.765}, {14.460}, {8.878}, {14.780}, {8.817}, {15.180}, {8.588}, {15.470}, {8.326}, {15.600},
{8.139}, {15.850}, {7.769}, {16.140}, {7.335}, {16.380}, {6.959}, {16.490}, {6.761}, {16.530}, {6.380},
{16.470}, {6.004}, {16.340}, {5.647}, {16.170}, {5.322}, {16.050}, {5.134}, {15.880}, {4.893}, {15.670},
{4.617}, {15.430}, {4.323}, {15.200}, {4.030}, {14.970}, {3.755}, {14.760}, {3.515}, {14.690}, {3.464},
{14.540}, {3.373}, {14.330}, {3.236}, {14.050}, {3.047}, {13.730}, {2.800}, {13.360}, {2.489}, {12.950},
{2.107}, {12.520}, {1.649}, {0.842}, {1.649}, {27.220}, {1.649}, {27.220}, {1.052}};
DrawNodeTests::DrawNodeTests()
{
ADD_TEST_CASE(DrawNodeMethodsTest);
ADD_TEST_CASE(DrawNodeSpLinesTest);
ADD_TEST_CASE(DrawNodeAxmolTest2);
#if defined(AX_PLATFORM_PC)
ADD_TEST_CASE(CandyMixEeffect);
#endif
ADD_TEST_CASE(DrawNodePictureTest);
ADD_TEST_CASE(DrawNodeMorphTest_Polygon);
ADD_TEST_CASE(DrawNodeMorphTest_SolidPolygon);
ADD_TEST_CASE(DrawNodePieTest);
ADD_TEST_CASE(DrawNodeDrawInWrongOrder_Issue1888);
ADD_TEST_CASE(DrawNodeThicknessTest);
ADD_TEST_CASE(DrawNodeThicknessStressTest);
ADD_TEST_CASE(DrawNodeIssueTester);
}
DrawNodeBaseTest::DrawNodeBaseTest()
{
auto director = Director::getInstance();
director->setClearColor(Color4F(0, 0, 0, 0));
origin = director->getVisibleOrigin();
size = director->getVisibleSize();
center = Vec2(origin.x + size.width / 2, origin.y + size.height / 2);
screen = Director::getInstance()->getVisibleSize();
sixth = Vec2(screen.width / 6, screen.height / 6);
sixth.y;
defY = (int)(center.y + sixth.y);
defY2 = (int)(center.y - sixth.y);
dev = sixth.y;
pts = PointArray::create(n);
pts2 = PointArray::create(n);
pts->retain();
pts2->retain();
for (int i = 0; i < n; ++i)
{
pts->insertControlPoint(Vec2(0, 0), i);
pts2->insertControlPoint(Vec2(0, 0), i);
}
generateDataPoints();
if (!drawNode)
{
drawNode = DrawNode::create();
addChild(drawNode);
}
menuItemDrawOrder->setFontSize(10);
menuItemTransform->setFontSize(10);
menuItemDrawOrder = MenuItemFont::create("drawOrder: false", AX_CALLBACK_1(DrawNodeBaseTest::setDrawOrder, this));
menuItemTransform = MenuItemFont::create("transform: true", AX_CALLBACK_1(DrawNodeBaseTest::setTransform, this));
auto menu = Menu::create(menuItemDrawOrder, menuItemTransform, nullptr);
menu->alignItemsVerticallyWithPadding(4);
menu->setPosition(Vec2(size.x - 50, size.y / 2 - 20));
addChild(menu, 1000);
}
void DrawNodeBaseTest::generateDataPoints()
{
for (int i = 0; i < n; ++i)
{
float yy1 = RandomHelper::random_real<float>(defY - dev, defY + dev);
float yy2 = RandomHelper::random_real<float>(defY2 - dev, defY2 + dev);
pts->replaceControlPoint(Vec2(margin + i * (screen.width - 3 * margin) / n, yy1), i);
pts2->replaceControlPoint(Vec2(margin + i * (screen.width - 3 * margin) / n, yy2), i);
}
}
void DrawNodeBaseTest::setTransform(Object* sender)
{
bool ret = drawNode->properties.getTransform();
if (ret)
{
menuItemTransform->setString("transform: false");
drawNode->properties.setTransform(false);
}
else
{
menuItemTransform->setString("transform: true");
drawNode->properties.setTransform(true);
}
}
void DrawNodeBaseTest::setDrawOrder(Object* sender)
{
bool ret = drawNode->properties.getDrawOrder();
if (ret)
{
menuItemDrawOrder->setString("drawOrder: false");
drawNode->properties.setDrawOrder(false);
}
else
{
menuItemDrawOrder->setString("drawOrder: true");
drawNode->properties.setDrawOrder(true);
}
}
void DrawNodeBaseTest::listviewCallback(ax::Object* sender, ax::ui::ListView::EventType type)
{
// clear all text to white
auto listview = static_cast<ax::ui::ListView*>(sender);
for (auto&& item : listview->getItems())
{
static_cast<ax::ui::Text*>(item)->setColor(ax::Color3B::WHITE);
}
_currentSeletedItemIndex = (int)listview->getCurSelectedIndex();
listview->getItem(_currentSeletedItemIndex)->setColor(ax::Color3B::RED);
}
void DrawNodeBaseTest::onChangedRadioButtonSelect(ui::RadioButton* radioButton, ui::RadioButton::EventType type)
{
if (radioButton == nullptr)
return;
switch (type)
{
case ui::RadioButton::EventType::SELECTED:
{
selectedRadioButton = radioButton->getTag();
break;
}
case ui::RadioButton::EventType::UNSELECTED:
{
break;
}
default:
break;
}
}
void DrawNodeBaseTest::update(float dt)
{
drawNode->clear();
}
string DrawNodeBaseTest::title() const
{
return "";
}
void DrawNodeBaseTest::drawDirection(const Vec2* vec, const int size, Vec2 offset)
{
for (size_t i = 0; i < size; i++)
{
auto label = Label::createWithTTF(std::to_string(i).c_str(), "fonts/Marker Felt.ttf", 10);
addChild(label);
label->setPosition(vec[i] + offset);
}
}
void DrawNodeBaseTest::changeEndAngle(ax::Object* pSender, ax::ui::Slider::EventType type)
{
if (type == ax::ui::Slider::EventType::ON_PERCENTAGE_CHANGED)
{
slider[sliderType::AngleEnd] = dynamic_cast<ax::ui::Slider*>(pSender);
sliderValue[sliderType::AngleEnd] = slider[sliderType::AngleEnd]->getPercent() * 3.6;
sliderLabel[sliderType::AngleEnd]->setString("endAngle: (" +
Value(sliderValue[sliderType::AngleEnd]).asString() + ")");
}
}
void DrawNodeBaseTest::changeStartAngle(ax::Object* pSender, ax::ui::Slider::EventType type)
{
if (type == ax::ui::Slider::EventType::ON_PERCENTAGE_CHANGED)
{
slider[sliderType::AngleStart] = dynamic_cast<ax::ui::Slider*>(pSender);
sliderValue[sliderType::AngleStart] = slider[sliderType::AngleStart]->getPercent() * 3.6;
sliderLabel[sliderType::AngleStart]->setString("startAngle: (" +
Value(sliderValue[sliderType::AngleStart]).asString() + ")");
}
}
void DrawNodeBaseTest::changeRotation(ax::Object* pSender, ax::ui::Slider::EventType type)
{
if (type == ax::ui::Slider::EventType::ON_PERCENTAGE_CHANGED)
{
slider[sliderType::Rotation] = dynamic_cast<ax::ui::Slider*>(pSender);
sliderValue[sliderType::Rotation] = slider[sliderType::Rotation]->getPercent() * 3.6;
sliderLabel[sliderType::Rotation]->setString("Rotation: (" +
Value(sliderValue[sliderType::Rotation]).asString() + ")");
}
}
void DrawNodeBaseTest::changeThickness(ax::Object* pSender, ax::ui::Slider::EventType type)
{
if (type == ax::ui::Slider::EventType::ON_PERCENTAGE_CHANGED)
{
slider[sliderType::Thickness] = dynamic_cast<ax::ui::Slider*>(pSender);
sliderValue[sliderType::Thickness] = slider[sliderType::Thickness]->getPercent() * 0.1;
sliderLabel[sliderType::Thickness]->setString("Thickness: (" +
Value(sliderValue[sliderType::Thickness]).asString() + ")");
}
}
void DrawNodeBaseTest::initSliders()
{
_currentSeletedItemIndex = 0;
std::string text[sliderType::sliderTypeLast] = {"AngleStart", "AngleEnd", "Rotation", "Thickness"};
auto ttfConfig = TTFConfig("fonts/arial.ttf", 5);
for (int i = 0; i < (sliderType::sliderTypeLast); i++)
{
slider[i] = ax::ui::Slider::create();
slider[i]->setAnchorPoint(Vec2::ANCHOR_MIDDLE_LEFT);
slider[i]->loadBarTexture("cocosui/sliderTrack.png");
slider[i]->loadSlidBallTextures("ccs-res/cocosui/sliderballnormal.png", "ccs-res/cocosui/sliderballpressed.png",
"");
slider[i]->loadProgressBarTexture("cocosui/sliderProgress.png");
slider[i]->setPosition(Vec2(size.width - slider[i]->getContentSize().x / 2 - 10, size.height / 6 + i * 16));
slider[i]->setPercent(sliderValue[i]);
slider[i]->setEnabled(false);
slider[i]->setScale(0.5f);
addChild(slider[i], 20);
sliderLabel[i] = Label::createWithTTF(ttfConfig, text[i] + ": (" + Value(sliderValue[i]).asString() + ")");
sliderLabel[i]->setAnchorPoint(Vec2::ANCHOR_MIDDLE_LEFT);
sliderLabel[i]->setPosition(slider[i]->getPosition() + Vec2(0, 8));
addChild(sliderLabel[i], 20);
}
slider[sliderType::AngleStart]->addEventListener(AX_CALLBACK_2(DrawNodeBaseTest::changeStartAngle, this));
slider[sliderType::AngleEnd]->addEventListener(AX_CALLBACK_2(DrawNodeBaseTest::changeEndAngle, this));
slider[sliderType::Rotation]->addEventListener(AX_CALLBACK_2(DrawNodeBaseTest::changeRotation, this));
slider[sliderType::Thickness]->addEventListener(AX_CALLBACK_2(DrawNodeBaseTest::changeThickness, this));
}
DrawNodeMorphTest_SolidPolygon::DrawNodeMorphTest_SolidPolygon()
{
const float coef = 2.0f * (float)M_PI / segments;
float scaleX = 1.0f;
float scaleY = 1.0f;
const float angle = 360 / segments;
for (size_t n = 0; n < 10; n++)
{
drawNodeArray[n] = DrawNode::create();
addChild(drawNodeArray[n]);
drawNodeArray[n]->setPosition(
Vec2(AXRANDOM_MINUS1_1() * size.width / 4, AXRANDOM_MINUS1_1() * size.height / 4) + Vec2(100, 100));
color[n] = Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f);
rad[n] = 90 + AXRANDOM_0_1() * 10;
state[n] = (AXRANDOM_0_1() > 0.5f) ? false : true;
verticesObj1[n] = new Vec2[segments]; // circle
verticesObj2[n] = new Vec2[segments]; // square
verticesObjMorph[n] = new Vec2[segments];
for (unsigned int i = 0; i < segments; i++) //
{
float rads = i * coef + angle;
int radius = 150 + AXRANDOM_MINUS1_1() * 50;
if (n > 2)
{
verticesObj1[n][i].x = radius * cosf(rads) * scaleX + center.x + AXRANDOM_0_1() * 30;
verticesObj1[n][i].y = radius * sinf(rads) * scaleY + center.y + AXRANDOM_0_1() * 30;
}
else
{
verticesObj1[n][i].x = radius * cosf(rads) * scaleX + center.x;
verticesObj1[n][i].y = radius * sinf(rads) * scaleY + center.y;
}
verticesObjMorph[n][i] = verticesObj1[n][i];
}
// A verticesObj2 is a bunch of vertices along straight lines
int i = 0;
float delta = segments / 4;
// Left side of verticesObj2
for (float y = 50; y > -50; y -= delta)
{
verticesObj2[n][i++] = center + Vec2(-50, y);
}
// top
for (float x = -50; x < 50; x += delta)
{
verticesObj2[n][i++] = center + Vec2(x, -50);
}
// Right side
for (float y = -50; y < 50; y += delta)
{
verticesObj2[n][i++] = center + Vec2(50, y);
}
// Bottom
for (float x = 50; x > -50; x -= delta)
{
verticesObj2[n][i++] = center + Vec2(x, 50);
}
}
initSliders();
slider[sliderType::Thickness]->setEnabled(true);
scheduleUpdate();
}
void DrawNodeMorphTest_SolidPolygon::update(float dt)
{
for (int n = 0; n < 10; n++)
{
drawNodeArray[n]->clear();
Vec2 v1, v2;
float totalDistance = 0;
for (int i = 0; i < segments; i++)
{
if (state[n])
{
v1 = verticesObj1[n][i];
v2 = verticesObj2[n][i];
}
else
{
v2 = verticesObj1[n][i];
v1 = verticesObj2[n][i];
}
v2 = verticesObjMorph[n][i];
verticesObjMorph[n][i] = v2.lerp(v1, 0.05f);
totalDistance += v1.distance(v2);
}
// If all the vertices are close, switch shape
if (totalDistance < 300.0)
{
state[n] = !state[n];
}
drawNodeArray[n]->properties.setScale(Vec2(0.5f, 0.5f));
drawNodeArray[n]->drawSolidPolygon(verticesObjMorph[n], segments, color[n], sliderValue[sliderType::Thickness],
Color4B::YELLOW);
}
}
void DrawNodeMorphTest_SolidPolygon::onEnter()
{
for (int i = 0; i < sliderType::sliderTypeLast; i++)
{
sliderValue[i] = 1;
slider[i]->setPercent(sliderValue[i]);
}
sliderValue[sliderType::Thickness] = 10;
slider[sliderType::Thickness]->setPercent(sliderValue[sliderType::Thickness]);
DrawNodeBaseTest::onEnter();
}
string DrawNodeMorphTest_SolidPolygon::title() const
{
return "Morphing";
}
string DrawNodeMorphTest_SolidPolygon::subtitle() const
{
return "Solid Polygons";
}
DrawNodeMorphTest_Polygon::DrawNodeMorphTest_Polygon()
{
const float coef = 2.0f * (float)M_PI / segments;
float scaleX = 1.0f;
float scaleY = 1.0f;
const float angle = 360 / segments;
for (size_t n = 0; n < 10; n++)
{
drawNodeArray[n] = DrawNode::create();
addChild(drawNodeArray[n]);
drawNodeArray[n]->setPosition(
Vec2(AXRANDOM_MINUS1_1() * size.width / 4, AXRANDOM_MINUS1_1() * size.height / 4) + Vec2(100, 100));
color[n] = Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f);
rad[n] = 90 + AXRANDOM_0_1() * 10;
state[n] = (AXRANDOM_0_1() > 0.5f) ? false : true;
verticesObj1[n] = new Vec2[segments]; // circle
verticesObj2[n] = new Vec2[segments]; // square
verticesObjMorph[n] = new Vec2[segments];
for (unsigned int i = 0; i < segments; i++) //
{
float rads = i * coef + angle;
int radius = 150 + AXRANDOM_MINUS1_1() * 50;
if (n > 2)
{
verticesObj1[n][i].x = radius * cosf(rads) * scaleX + center.x + AXRANDOM_0_1() * 30;
verticesObj1[n][i].y = radius * sinf(rads) * scaleY + center.y + AXRANDOM_0_1() * 30;
}
else
{
verticesObj1[n][i].x = radius * cosf(rads) * scaleX + center.x;
verticesObj1[n][i].y = radius * sinf(rads) * scaleY + center.y;
}
verticesObjMorph[n][i] = verticesObj1[n][i];
}
// A verticesObj2 is a bunch of vertices along straight lines
int i = 0;
float delta = segments / 4;
// Left side of verticesObj2
for (float y = 50; y > -50; y -= delta)
{
verticesObj2[n][i++] = center + Vec2(-50, y);
}
// top
for (float x = -50; x < 50; x += delta)
{
verticesObj2[n][i++] = center + Vec2(x, -50);
}
// Right side
for (float y = -50; y < 50; y += delta)
{
verticesObj2[n][i++] = center + Vec2(50, y);
}
// Bottom
for (float x = 50; x > -50; x -= delta)
{
verticesObj2[n][i++] = center + Vec2(x, 50);
}
}
initSliders();
slider[sliderType::Thickness]->setEnabled(true);
scheduleUpdate();
}
void DrawNodeMorphTest_Polygon::update(float dt)
{
for (int n = 0; n < 10; n++)
{
drawNodeArray[n]->clear();
Vec2 v1, v2;
float totalDistance = 0;
for (int i = 0; i < segments; i++)
{
if (state[n])
{
v1 = verticesObj1[n][i];
v2 = verticesObj2[n][i];
}
else
{
v2 = verticesObj1[n][i];
v1 = verticesObj2[n][i];
}
v2 = verticesObjMorph[n][i];
verticesObjMorph[n][i] = v2.lerp(v1, 0.05f);
totalDistance += v1.distance(v2);
}
// If all the vertices are close, switch shape
if (totalDistance < 300.0)
{
state[n] = !state[n];
}
drawNodeArray[n]->properties.setScale(Vec2(0.5f, 0.5f));
drawNodeArray[n]->drawPolygon(verticesObjMorph[n], segments, sliderValue[sliderType::Thickness], color[n]);
}
}
void DrawNodeMorphTest_Polygon::onEnter()
{
for (int i = 0; i < sliderType::sliderTypeLast; i++)
{
sliderValue[i] = 1;
slider[i]->setPercent(sliderValue[i]);
}
sliderValue[sliderType::Thickness] = 10;
slider[sliderType::Thickness]->setPercent(sliderValue[sliderType::Thickness]);
DrawNodeBaseTest::onEnter();
}
string DrawNodeMorphTest_Polygon::title() const
{
return "Morphing";
}
string DrawNodeMorphTest_Polygon::subtitle() const
{
return "Polygons";
}
DrawNodePictureTest::DrawNodePictureTest()
{
drawNode->runAction(RepeatForever::create(Sequence::create(FadeIn::create(1.2f), FadeOut::create(1.2f), NULL)));
scheduleUpdate();
}
void DrawNodePictureTest::update(float dt)
{
DrawNodeBaseTest::update(dt);
static float rot = 0.1f;
static int count = 0;
static bool wait = false;
drawNode->clear();
if (!wait)
{
rot += 0.05;
if (rot >= 6)
{
rot = count = 0;
wait = true;
}
}
else if (count++ > 30)
wait = false;
float sph_xx[2326];
float sph_yy[2326];
int n = 0;
for (int i = 0; i < 2326;) // read data
{
sph_xx[n] = verticesHead[i++];
sph_yy[n] = verticesHead[i++];
n++;
}
float sph_cmb = sph_yy[0];
int sph_la = 0;
do
{
Color4F color = Color4F(sph_xx[sph_la + 1], sph_yy[sph_la + 1], sph_xx[sph_la + 2], sph_yy[sph_la + 2] * 255);
// color = Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1);
Vec2* vertices = new Vec2[(int)(sph_cmb - 3)];
for (int n = 3; n < sph_cmb; n++)
{
vertices[n - 3] = Vec2(sph_xx[sph_la + n], sph_yy[sph_la + n]);
}
drawNode->setPosition(Vec2(420, 280));
drawNode->setScale(0.4);
drawNode->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
drawNode->setRotation(180);
drawNode->properties.setCenter(vertices[0]);
drawNode->properties.setRotation(rot);
drawNode->drawPolygon(vertices, sph_cmb - 3, color, /*rot*/ 0.f,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1), true);
sph_la += sph_cmb;
sph_cmb = sph_yy[sph_la];
} while (sph_yy[sph_la] != 0);
}
string DrawNodePictureTest::title() const
{
return "Example: Picture";
}
string DrawNodePictureTest::subtitle() const
{
return "Actions Test";
}
DrawNodeThicknessTest::DrawNodeThicknessTest()
{
initSliders();
slider[sliderType::Thickness]->setEnabled(true);
scheduleUpdate();
}
void DrawNodeThicknessTest::update(float dt)
{
DrawNodeBaseTest::update(dt);
drawNode->clear();
drawNode->drawCircle(VisibleRect::center(), 60, AX_DEGREES_TO_RADIANS(77), 30, false, Color4F::GREEN,
sliderValue[sliderType::Thickness]);
drawNode->drawLine(Vec2(0.0f, size.height), Vec2(size.width, size.height - 20), Color4F::YELLOW,
sliderValue[sliderType::Thickness]);
drawNode->drawLine(Vec2(0.0f, 0.0f), Vec2(size.width, size.height - 20), Color4F::YELLOW,
sliderValue[sliderType::Thickness]);
// drawNode a rectangles
drawNode->drawRect(Vec2(123, 123), Vec2(227, 227), Color4F(1, 1, 0, 1), sliderValue[sliderType::Thickness]);
drawNode->drawRect(Vec2(115, 130), Vec2(130, 115), Vec2(115, 100), Vec2(100, 115), Color4F::MAGENTA,
sliderValue[sliderType::Thickness]);
drawNode->drawLine(Vec2(200.0f, size.height - 20), Vec2(size.width - 100, size.height - 20), Color4F::YELLOW,
sliderValue[sliderType::Thickness]);
drawNode->drawLine(Vec2(300.0f, 100.0f), Vec2(size.width - 200, size.height - 120), Color4F::GREEN,
sliderValue[sliderType::Thickness]);
Vec2 vertices24[] = {
{45.750000f, 144.375000f}, {75.500000f, 136.875000f}, {75.500000f, 159.125000f}, {100.250000f, 161.375000f},
{65.500000f, 181.375000f}, {102.250000f, 179.125000f}, {95.000000f, 215.125000f}, {129.331467f, 189.926208f},
{131.371460f, 206.366196f}, {139.651474f, 192.446198f}, {161.851471f, 200.606201f}, {151.000000f, 220.375000f},
{110.500000f, 244.375000f}, {153.750000f, 238.125000f}, {142.500000f, 253.875000f}, {220.750000f, 259.375000f},
{250.500000f, 244.375000f}, {168.750000f, 241.875000f}, {182.250000f, 154.125000f}, {190.250000f, 227.375000f},
{196.500000f, 197.375000f}, {208.750000f, 210.625000f}, {220.750000f, 194.375000f}, {208.750000f, 176.375000f},
{253.250000f, 173.875000f}, {243.750000f, 154.125000f}, {213.750000f, 161.375000f}, {202.250000f, 139.875000f},
{236.000000f, 131.875000f}, {218.500000f, 120.875000f}, {206.500000f, 125.625000f}, {184.500000f, 110.375000f},
{157.000000f, 108.625000f}, {147.500000f, 96.625000f}, {153.750000f, 85.125000f}, {147.500000f, 75.375000f},
{126.500000f, 74.125000f}, {110.500000f, 86.625000f}, {127.750000f, 85.125000f}, {135.250000f, 91.125000f},
{135.250000f, 97.875000f}, {124.000000f, 93.875000f}, {115.500000f, 100.875000f}, {115.500000f, 111.875000f},
{135.250000f, 108.625000f}, {151.000000f, 124.125000f}, {90.500000f, 131.875000f}, {113.250000f, 120.875000f},
{88.000000f, 116.875000f}, {106.000000f, 103.875000f}, {88.000000f, 97.875000f},
};
drawNode->drawPolygon(vertices24, sizeof(vertices24) / sizeof(vertices24[0]), Color4B::TRANSPARENT,
sliderValue[sliderType::Thickness] / 2, Color4F::RED);
// open random color poly
Vec2 vertices[] = {Vec2(0.0f, 0.0f), Vec2(50.0f, 50.0f), Vec2(100.0f, 50.0f), Vec2(100.0f, 100.0f),
Vec2(50.0f, 100.0f)};
drawNode->drawPoly(vertices, 5, false, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
// closed random color poly
Vec2 vertices2[] = {Vec2(30.0f, 130.0f), Vec2(30.0f, 230.0f), Vec2(50.0f, 200.0f)};
drawNode->drawPoly(vertices2, 3, true, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
// drawNode some beziers
drawNode->drawQuadBezier(Vec2(size.width - 150, size.height - 150), Vec2(size.width - 70, size.height - 10),
Vec2(size.width - 10, size.height - 10), 10, Color4F::BLUE,
sliderValue[sliderType::Thickness]);
drawNode->drawQuadBezier(Vec2(0.0f + 100, size.height - 100), Vec2(size.width / 2, size.height / 2),
Vec2(size.width - 100, size.height - 100), 50, Color4F::RED,
sliderValue[sliderType::Thickness]);
drawNode->drawCubicBezier(VisibleRect::center(), Vec2(VisibleRect::center().x + 30, VisibleRect::center().y + 50),
Vec2(VisibleRect::center().x + 60, VisibleRect::center().y - 50), VisibleRect::right(),
100, Color4F::WHITE, sliderValue[sliderType::Thickness]);
drawNode->drawCubicBezier(Vec2(size.width - 250, 40.0f), Vec2(size.width - 70, 100.0f),
Vec2(size.width - 30, 250.0f), Vec2(size.width - 10, size.height - 50), 10, Color4F::GRAY,
sliderValue[sliderType::Thickness]);
auto array = ax::PointArray::create(20);
array->addControlPoint(Vec2(0.0f, 0.0f));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width - 80, 80.0f));
array->addControlPoint(Vec2(size.width - 80, size.height - 80));
array->addControlPoint(Vec2(80.0f, size.height - 80));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width / 2, size.height / 2));
drawNode->drawCardinalSpline(array, 0.5f, 50, Color4F::MAGENTA, sliderValue[sliderType::Thickness]);
auto array2 = ax::PointArray::create(20);
array2->addControlPoint(Vec2(size.width / 2, 30.0f));
array2->addControlPoint(Vec2(size.width - 80, 30.0f));
array2->addControlPoint(Vec2(size.width - 80, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, 30.0f));
drawNode->drawCatmullRom(array2, 50, Color4F::ORANGE, sliderValue[sliderType::Thickness]);
auto s = Director::getInstance()->getWinSize();
drawNode->drawPoint(Vec2(s.width / 2 - 120, s.height / 2 - 120), 10,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
drawNode->drawPoint(Vec2(s.width / 2 + 120, s.height / 2 + 120), 10,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
// drawNode 4 small points
Vec2 position[] = {Vec2(60, 60), Vec2(70, 70), Vec2(60, 70), Vec2(70, 60)};
drawNode->drawPoints(position, 4, 5, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
// drawNode a line
drawNode->drawLine(Vec2(0, 0), Vec2(s.width, s.height), Color4F(1.0, 0.0, 0.0, 0.5));
// drawNode a rectangle
drawNode->drawRect(Vec2(23, 23), Vec2(7, 7), Color4F(1, 1, 0, 1));
drawNode->drawRect(Vec2(15, 30), Vec2(30, 15), Vec2(15, 0), Vec2(0, 15),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
// drawNode a circle
drawNode->drawCircle(VisibleRect::center() + Vec2(140, 0), 100, AX_DEGREES_TO_RADIANS(90), 50, true, 1.0f, 2.0f,
Color4F(1.0f, 0.0f, 0.0f, 0.5f));
drawNode->drawCircle(VisibleRect::center() - Vec2(140, 0), 50, AX_DEGREES_TO_RADIANS(90), 30, false,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
// drawNode some beziers
drawNode->drawQuadBezier(Vec2(s.width - 150, s.height - 150), Vec2(s.width - 70, s.height - 10),
Vec2(s.width - 10, s.height - 10), 10,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
drawNode->drawQuadBezier(Vec2(0.0f, s.height), Vec2(s.width / 2, s.height / 2), Vec2(s.width, s.height), 50,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
drawNode->drawCubicBezier(VisibleRect::center(), Vec2(VisibleRect::center().x + 30, VisibleRect::center().y + 50),
Vec2(VisibleRect::center().x + 60, VisibleRect::center().y - 50), VisibleRect::right(),
100, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
drawNode->drawCubicBezier(Vec2(s.width - 250, 40.0f), Vec2(s.width - 70, 100.0f), Vec2(s.width - 30, 250.0f),
Vec2(s.width - 10, s.height - 50), 10,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
auto array3 = PointArray::create(20);
array3->addControlPoint(Vec2(0.0f, 0.0f));
array3->addControlPoint(Vec2(80.0f, 80.0f));
array3->addControlPoint(Vec2(s.width - 80, 80.0f));
array3->addControlPoint(Vec2(s.width - 80, s.height - 80));
array3->addControlPoint(Vec2(80.0f, s.height - 80));
array3->addControlPoint(Vec2(80.0f, 80.0f));
array3->addControlPoint(Vec2(s.width / 2, s.height / 2));
drawNode->drawCardinalSpline(array3, 0.5f, 50, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
auto array4 = PointArray::create(20);
array4->addControlPoint(Vec2(s.width / 2, 30.0f));
array4->addControlPoint(Vec2(s.width - 80, 30.0f));
array4->addControlPoint(Vec2(s.width - 80, s.height - 80));
array4->addControlPoint(Vec2(s.width / 2, s.height - 80));
array4->addControlPoint(Vec2(s.width / 2, 30.0f));
drawNode->drawCatmullRom(array4, 50, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
// open random color poly
Vec2 verticesA[] = {Vec2(0.0f, 0.0f), Vec2(50.0f, 50.0f), Vec2(100.0f, 50.0f), Vec2(100.0f, 100.0f),
Vec2(50.0f, 100.0f)};
drawNode->drawPoly(verticesA, 5, false, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
// closed random color poly
Vec2 verticesB[] = {Vec2(30.0f, 130.0f), Vec2(30.0f, 230.0f), Vec2(50.0f, 200.0f)};
drawNode->drawPoly(verticesB, 3, true, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
// drawNode 10 circles
for (int i = 0; i < 10; i++)
{
drawNode->drawDot(Vec2(s.width / 2, s.height / 2), 10.f * (10 - i),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
// drawNode polygons
Vec2 points[] = {Vec2(s.height / 4, 0.0f), Vec2(s.width, s.height / 5), Vec2(s.width / 3 * 2, s.height)};
drawNode->drawPolygon(points, sizeof(points) / sizeof(points[0]), Color4F(1.0f, 0.0f, 0.0f, 0.5f), 4,
Color4F(0.0f, 0.0f, 1.0f, 0.5f));
// star poly (triggers buggs)
{
const float o = 80;
const float w = 20;
const float h = 50;
Vec2 star[] = {
Vec2(o + w, o - h), Vec2(o + w * 2, o), // lower spike
Vec2(o + w * 2 + h, o + w), Vec2(o + w * 2, o + w * 2), // right spike
// {o +w, o+w*2+h}, {o,o+w*2}, // top spike
// {o -h, o+w}, {o,o}, // left spike
};
drawNode->drawPolygon(star, sizeof(star) / sizeof(star[0]), Color4F(1.0f, 0.0f, 0.0f, 0.5f), 1,
Color4F(0.0f, 0.0f, 1.0f, 1.0f));
}
// star poly (doesn't trigger bug... order is important un tesselation is supported.
{
const float o = 180;
const float w = 20;
const float h = 50;
Vec2 star[] = {
Vec2(o, o),
Vec2(o + w, o - h),
Vec2(o + w * 2, o), // lower spike
Vec2(o + w * 2 + h, o + w),
Vec2(o + w * 2, o + w * 2), // right spike
Vec2(o + w, o + w * 2 + h),
Vec2(o, o + w * 2), // top spike
Vec2(o - h, o + w), // left spike
};
drawNode->drawPolygon(star, sizeof(star) / sizeof(star[0]), Color4F(1.0f, 0.0f, 0.0f, 0.5f), 1,
Color4F(0.0f, 0.0f, 1.0f, 1.0f));
}
// drawNode a solid polygon
Vec2 vertices3[] = {Vec2(60.0f, 160.0f), Vec2(70.0f, 190.0f), Vec2(100.0f, 190.0f), Vec2(90.0f, 160.0f)};
drawNode->drawSolidPoly(vertices3, 4, Color4F(1.0f, 1.0f, 0.0f, 1.0f));
// drawNode a solid rectangle
drawNode->drawSolidRect(Vec2(10.0f, 10.0f), Vec2(20.0f, 20.0f), Color4F(1.0f, 1.0f, 0.0f, 1.0f));
// drawNode a solid circle
drawNode->drawSolidCircle(VisibleRect::center() + Vec2(140.0f, 0.0f), 40, AX_DEGREES_TO_RADIANS(90), 50, 2.0f, 2.0f,
Color4F(0.0f, 1.0f, 0.0f, 1.0f));
// drawNode segment
drawNode->drawSegment(Vec2(20.0f, s.height), Vec2(20.0f, s.height / 2), 10, Color4F(0.0f, 1.0f, 0.0f, 1.0f));
drawNode->drawSegment(Vec2(10.0f, s.height / 2), Vec2(s.width / 2, s.height / 2), 40,
Color4F(1.0f, 0.0f, 1.0f, 0.5f));
// drawNode triangle
drawNode->drawTriangle(Vec2(10.0f, 10.0f), Vec2(70.0f, 30.0f), Vec2(100.0f, 140.0f),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
for (int i = 0; i < 100; i++)
{
drawNode->drawPoint(Vec2(i * 7.0f, 5.0f), (float)i / 5 + 1,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
drawNode->setLineWidth(4);
drawNode->drawLine(Vec2(0.0f, s.height), Vec2(s.width, s.height - 20), Color4F::YELLOW);
drawNode->drawLine(Vec2(0.0f, 0.0f), Vec2(s.width, s.height - 20), Color4F::YELLOW);
drawNode->runAction(RepeatForever::create(Sequence::create(FadeIn::create(1.2f), FadeOut::create(1.2f), NULL)));
}
void DrawNodeThicknessTest::onEnter()
{
for (int i = 0; i < sliderType::sliderTypeLast; i++)
{
sliderValue[i] = 1;
slider[i]->setPercent(sliderValue[i]);
}
// sliderValue[sliderType::Counter] = 100;
// slider[sliderType::Counter]->setPercent(sliderValue[sliderType::Counter]);
sliderValue[sliderType::Thickness] = 10;
slider[sliderType::Thickness]->setPercent(sliderValue[sliderType::Thickness]);
DrawNodeBaseTest::onEnter();
}
string DrawNodeThicknessTest::title() const
{
return "Thickness Test";
}
string DrawNodeThicknessTest::subtitle() const
{
return "";
}
DrawNodeThicknessStressTest::DrawNodeThicknessStressTest()
{
initSliders();
slider[sliderType::Thickness]->setEnabled(true);
scheduleUpdate();
}
void DrawNodeThicknessStressTest::update(float dt)
{
static float negativThickness = -99999999.9999;
DrawNodeBaseTest::update(dt);
drawNode->clear();
drawNode->drawCircle(VisibleRect::center(), 60, AX_DEGREES_TO_RADIANS(77), 30, false, Color4F::GREEN,
negativThickness);
drawNode->drawLine(Vec2(0.0f, size.height), Vec2(size.width, size.height - 20), Color4F::YELLOW, negativThickness);
// drawNode a rectangles
drawNode->drawRect(Vec2(123, 123), Vec2(227, 227), Color4F(1, 1, 0, 1), negativThickness);
Vec2 vertices24[] = {
{45.750000f, 144.375000f}, {75.500000f, 136.875000f}, {75.500000f, 159.125000f}, {100.250000f, 161.375000f},
{65.500000f, 181.375000f}, {102.250000f, 179.125000f}, {95.000000f, 215.125000f}, {129.331467f, 189.926208f},
{131.371460f, 206.366196f}, {139.651474f, 192.446198f}, {161.851471f, 200.606201f}, {151.000000f, 220.375000f},
{110.500000f, 244.375000f}, {153.750000f, 238.125000f}, {142.500000f, 253.875000f}, {220.750000f, 259.375000f},
{250.500000f, 244.375000f}, {168.750000f, 241.875000f}, {182.250000f, 154.125000f}, {190.250000f, 227.375000f},
{196.500000f, 197.375000f}, {208.750000f, 210.625000f}, {220.750000f, 194.375000f}, {208.750000f, 176.375000f},
{253.250000f, 173.875000f}, {243.750000f, 154.125000f}, {213.750000f, 161.375000f}, {202.250000f, 139.875000f},
{236.000000f, 131.875000f}, {218.500000f, 120.875000f}, {206.500000f, 125.625000f}, {184.500000f, 110.375000f},
{157.000000f, 108.625000f}, {147.500000f, 96.625000f}, {153.750000f, 85.125000f}, {147.500000f, 75.375000f},
{126.500000f, 74.125000f}, {110.500000f, 86.625000f}, {127.750000f, 85.125000f}, {135.250000f, 91.125000f},
{135.250000f, 97.875000f}, {124.000000f, 93.875000f}, {115.500000f, 100.875000f}, {115.500000f, 111.875000f},
{135.250000f, 108.625000f}, {151.000000f, 124.125000f}, {90.500000f, 131.875000f}, {113.250000f, 120.875000f},
{88.000000f, 116.875000f}, {106.000000f, 103.875000f}, {88.000000f, 97.875000f},
};
drawNode->drawPolygon(vertices24, sizeof(vertices24) / sizeof(vertices24[0]), Color4B::TRANSPARENT,
negativThickness, Color4F::RED);
// open random color poly
Vec2 vertices[] = {Vec2(0.0f, 0.0f), Vec2(50.0f, 50.0f), Vec2(100.0f, 50.0f), Vec2(100.0f, 100.0f),
Vec2(50.0f, 100.0f)};
drawNode->drawPoly(vertices, 5, false, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
negativThickness);
// closed random color poly
Vec2 vertices2[] = {Vec2(30.0f, 130.0f), Vec2(30.0f, 230.0f), Vec2(50.0f, 200.0f)};
drawNode->drawPoly(vertices2, 3, true, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
negativThickness);
// drawNode some beziers
drawNode->drawQuadBezier(Vec2(size.width - 150, size.height - 150), Vec2(size.width - 70, size.height - 10),
Vec2(size.width - 10, size.height - 10), 10, Color4F::BLUE, negativThickness);
drawNode->drawCubicBezier(VisibleRect::center(), Vec2(VisibleRect::center().x + 30, VisibleRect::center().y + 50),
Vec2(VisibleRect::center().x + 60, VisibleRect::center().y - 50), VisibleRect::right(),
100, Color4F::WHITE, negativThickness);
auto array = ax::PointArray::create(20);
array->addControlPoint(Vec2(0.0f, 0.0f));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width - 80, 80.0f));
array->addControlPoint(Vec2(size.width - 80, size.height - 80));
array->addControlPoint(Vec2(80.0f, size.height - 80));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width / 2, size.height / 2));
drawNode->drawCardinalSpline(array, 0.5f, 50, Color4F::MAGENTA, negativThickness);
auto array2 = ax::PointArray::create(20);
array2->addControlPoint(Vec2(size.width / 2, 30.0f));
array2->addControlPoint(Vec2(size.width - 80, 30.0f));
array2->addControlPoint(Vec2(size.width - 80, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, 30.0f));
drawNode->drawCatmullRom(array2, 50, Color4F::ORANGE, negativThickness);
auto s = Director::getInstance()->getWinSize();
drawNode->drawPoint(Vec2(s.width / 2 - 120, s.height / 2 - 120), negativThickness,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
// drawNode 4 small points
Vec2 position[] = {Vec2(60, 60), Vec2(70, 70), Vec2(60, 70), Vec2(70, 60)};
drawNode->drawPoints(position, 4, 5, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1), DrawNode::Rect);
Vec2 position1[] = {Vec2(100, 100), Vec2(170, 170), Vec2(260, 170), Vec2(170, 260)};
drawNode->drawPoints(position1, 4, 25, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1), DrawNode::Rect);
// drawNode a rectangle
drawNode->drawRect(Vec2(23, 23), Vec2(7, 7), Color4F(1, 1, 0, 1), negativThickness);
// drawNode 10 circles
for (int i = 0; i < 10; i++)
{
drawNode->drawDot(Vec2(s.width / 2, s.height / 2), negativThickness,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
// star poly (doesn't trigger bug... order is important un tesselation is supported.
{
const float o = 180;
const float w = 20;
const float h = 50;
Vec2 star[] = {
Vec2(o, o),
Vec2(o + w, o - h),
Vec2(o + w * 2, o), // lower spike
Vec2(o + w * 2 + h, o + w),
Vec2(o + w * 2, o + w * 2), // right spike
Vec2(o + w, o + w * 2 + h),
Vec2(o, o + w * 2), // top spike
Vec2(o - h, o + w), // left spike
};
drawNode->drawPolygon(star, sizeof(star) / sizeof(star[0]), Color4F(1.0f, 0.0f, 0.0f, 0.5f), 1,
Color4F(0.0f, 0.0f, 1.0f, 1.0f));
}
// drawNode a solid polygon
Vec2 vertices3[] = {Vec2(60.0f, 160.0f), Vec2(70.0f, 190.0f), Vec2(100.0f, 190.0f), Vec2(90.0f, 160.0f)};
drawNode->drawSolidPoly(vertices3, 4, Color4F(1.0f, 1.0f, 0.0f, 1.0f));
// drawNode a solid rectangle
drawNode->drawSolidRect(Vec2(10.0f, 10.0f), Vec2(20.0f, 20.0f), Color4F(1.0f, 1.0f, 0.0f, 1.0f));
// drawNode a solid circle
drawNode->drawSolidCircle(VisibleRect::center() + Vec2(140.0f, 0.0f), 40, AX_DEGREES_TO_RADIANS(90), 50, 2.0f, 2.0f,
Color4F(0.0f, 1.0f, 0.0f, 1.0f));
// drawNode segment
drawNode->drawSegment(Vec2(20.0f, s.height), Vec2(20.0f, s.height / 2), 10, Color4F(0.0f, 1.0f, 0.0f, 1.0f));
// drawNode triangle
drawNode->drawTriangle(Vec2(10.0f, 10.0f), Vec2(70.0f, 30.0f), Vec2(100.0f, 140.0f),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
}
void DrawNodeThicknessStressTest::onEnter()
{
for (int i = 0; i < sliderType::sliderTypeLast; i++)
{
sliderValue[i] = 1;
slider[i]->setPercent(sliderValue[i]);
}
sliderValue[sliderType::Thickness] = 5;
slider[sliderType::Thickness]->setPercent(sliderValue[sliderType::Thickness]);
DrawNodeBaseTest::onEnter();
}
string DrawNodeThicknessStressTest::title() const
{
return "Thickness Stress Test";
}
string DrawNodeThicknessStressTest::subtitle() const
{
return "";
}
DrawNodePieTest::DrawNodePieTest()
{
initSliders();
slider[sliderType::AngleStart]->setEnabled(true);
slider[sliderType::AngleEnd]->setEnabled(true);
slider[sliderType::Rotation]->setEnabled(true);
slider[sliderType::Thickness]->setEnabled(true);
scheduleUpdate();
}
void DrawNodePieTest::update(float dt)
{
DrawNodeBaseTest::update(dt);
drawNode->clear();
// Filled
drawNode->drawPie(VisibleRect::center() - Vec2(190.0f, -35.0f), 40, sliderValue[sliderType::Rotation],
sliderValue[sliderType::AngleStart], sliderValue[sliderType::AngleEnd], 1.0f, 1.0f, Color4F::RED,
Color4F::BLUE, drawNode->DrawMode::Fill, sliderValue[sliderType::Thickness]);
// Outlined
drawNode->drawPie(VisibleRect::center() - Vec2(95.0f, -35.0f), 40, sliderValue[sliderType::Rotation],
sliderValue[sliderType::AngleStart], sliderValue[sliderType::AngleEnd], 1.0f, 1.0f,
Color4F::TRANSPARENT, Color4F::BLUE, drawNode->DrawMode::Outline,
sliderValue[sliderType::Thickness]);
// Line
drawNode->drawPie(VisibleRect::center() + Vec2(0.0f, 35.0f), 40, sliderValue[sliderType::Rotation],
sliderValue[sliderType::AngleStart], sliderValue[sliderType::AngleEnd], 1.0f, 1.0f,
Color4F::TRANSPARENT, Color4F::BLUE, drawNode->DrawMode::Line,
sliderValue[sliderType::Thickness]);
// Semi
drawNode->drawPie(VisibleRect::center() + Vec2(95.0f, 35.0f), 40, sliderValue[sliderType::Rotation],
sliderValue[sliderType::AngleStart], sliderValue[sliderType::AngleEnd], 1.0f, 1.0f,
Color4F::TRANSPARENT, Color4F::BLUE, drawNode->DrawMode::Semi,
sliderValue[sliderType::Thickness]);
// Semi (Filled)
drawNode->drawPie(VisibleRect::center() + Vec2(190.0f, 35.0f), 40, sliderValue[sliderType::Rotation],
sliderValue[sliderType::AngleStart], sliderValue[sliderType::AngleEnd], 1.0f, 1.0f, Color4F::RED,
Color4F::BLUE, drawNode->DrawMode::Semi, sliderValue[sliderType::Thickness]);
}
void DrawNodePieTest::onEnter()
{
for (int i = 0; i < sliderType::sliderTypeLast; i++)
{
sliderValue[i] = 1;
slider[i]->setPercent(sliderValue[i]);
}
sliderValue[sliderType::AngleStart] = 10;
slider[sliderType::AngleStart]->setPercent(sliderValue[sliderType::AngleStart]);
sliderValue[sliderType::AngleEnd] = 100;
slider[sliderType::AngleEnd]->setPercent(sliderValue[sliderType::AngleEnd]);
sliderValue[sliderType::Rotation] = 10;
slider[sliderType::Rotation]->setPercent(sliderValue[sliderType::Rotation]);
sliderValue[sliderType::Thickness] = 10;
slider[sliderType::Thickness]->setPercent(sliderValue[sliderType::Thickness]);
DrawNodeBaseTest::onEnter();
}
string DrawNodePieTest::title() const
{
return "drawPie";
}
string DrawNodePieTest::subtitle() const
{
return "Filled, Outlined, Line, Semi, Semi (Filled)";
}
DrawNodeMethodsTest::DrawNodeMethodsTest()
{
static const float BUTTON_WIDTH = 30;
static float startPosX = 0;
auto listview = createListView();
listview->setPosition(Vec2(0.0f, 40.0f));
addChild(listview);
drawNode->setScale(0.5);
drawNode->setPosition(center);
initSliders();
slider[sliderType::Thickness]->setEnabled(true);
slider[sliderType::Rotation]->setEnabled(true);
labelRound = Label::createWithTTF("DrawNode::Round", "fonts/arial.ttf", 12);
addChild(labelRound, 1);
labelRound->setVisible(false);
labelSquare = Label::createWithTTF("DrawNode::Square", "fonts/arial.ttf", 12);
addChild(labelSquare, 1);
labelSquare->setVisible(false);
labelButt = Label::createWithTTF("DrawNode::Butt", "fonts/arial.ttf", 12);
addChild(labelButt, 1);
labelButt->setVisible(false);
scheduleUpdate();
}
ax::ui::ListView* DrawNodeMethodsTest::createListView()
{
auto listview = ax::ui::ListView::create();
Vec2 contentSize = {0, 0};
for (size_t i = 0; i < (drawMethodes::LAST); i++)
{
auto ui = ax::ui::Text::create();
ui->setString(drawMethods[i].c_str());
contentSize.x = MAX(ui->getContentSize().x, contentSize.x);
contentSize.y = MAX(ui->getContentSize().y, contentSize.y);
ui->setTouchEnabled(true);
listview->pushBackCustomItem(ui);
}
listview->setContentSize(contentSize * (drawMethodes::LAST));
listview->setCurSelectedIndex(0);
listview->setTouchEnabled(true);
listview->addEventListener(
(ui::ListView::ccListViewCallback)AX_CALLBACK_2(DrawNodeBaseTest::listviewCallback, this));
listview->setTag(100);
listview->getItem(_currentSeletedItemIndex)->setColor(Color3B::RED);
return listview;
}
void DrawNodeMethodsTest::update(float dt)
{
drawAll();
}
void DrawNodeMethodsTest::onEnter()
{
for (int i = 0; i < sliderType::sliderTypeLast; i++)
{
sliderValue[i] = 1;
slider[i]->setPercent(sliderValue[i]);
}
sliderValue[sliderType::Thickness] = 10;
slider[sliderType::Thickness]->setPercent(sliderValue[sliderType::Thickness]);
sliderValue[sliderType::Rotation] = 0;
slider[sliderType::Rotation]->setPercent(sliderValue[sliderType::Rotation]);
DrawNodeBaseTest::onEnter();
}
std::string DrawNodeMethodsTest::title() const
{
return "DrawNode Methods Test";
}
string DrawNodeMethodsTest::subtitle() const
{
return "";
}
void DrawNodeMethodsTest::drawAll()
{
static float rotation = 0.1f;
rotation += 0.1;
if (rotation > 62.8f)
{
rotation = 0.0f;
}
drawNode->clear();
drawNode->properties.setDefaultValues();
labelRound->setVisible(false);
labelSquare->setVisible(false);
labelButt->setVisible(false);
switch (_currentSeletedItemIndex)
{
case drawMethodes::Line:
{
for (int i = 0; i < 100; i++)
{
drawNode->drawLine(Vec2(-size.x / 2, -size.y / 2 + i * 4), Vec2(size.x - 50, -size.y / 2 + i * 4),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
drawNode->drawLine(Vec2(-size.x + 50, -size.y + AXRANDOM_0_1() * 2 * size.y),
Vec2(size.x - 50, -size.y + AXRANDOM_0_1() * 2 * size.y),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
}
break;
}
case drawMethodes::Rect:
{
Vec2 rec;
for (int i = 0; i < 100; i++)
{
rec = Vec2(i * 3, i * 3);
drawNode->drawRect(center / 2 - rec, center / 2 + rec,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
drawNode->drawRect(Vec2(AXRANDOM_MINUS1_1() * 300, AXRANDOM_MINUS1_1() * 300),
Vec2(AXRANDOM_MINUS1_1() * 400, AXRANDOM_MINUS1_1() * 400),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
}
break;
}
case drawMethodes::Circle:
{
for (int i = 0; i < 100; i++)
{
drawNode->drawCircle(VisibleRect::center(), 3 * i, AX_DEGREES_TO_RADIANS(90), i, false, 1.0f, 1.0f,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
Vec2 pos = Vec2(-100, -100) + Vec2(AXRANDOM_MINUS1_1() * VisibleRect::rightTop().x,
AXRANDOM_MINUS1_1() * VisibleRect::rightTop().y);
drawNode->drawCircle(VisibleRect::center() + pos, AXRANDOM_0_1() * 200,
AX_DEGREES_TO_RADIANS(AXRANDOM_MINUS1_1() * 90), 30, true,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
}
break;
}
case drawMethodes::QuadBezier:
{
drawNode->drawQuadBezier(Vec2(size.width - 150, size.height - 150), Vec2(size.width - 70, size.height - 10),
Vec2(size.width - 10, size.height - 10), 10, Color4F::BLUE,
sliderValue[sliderType::Thickness]);
drawNode->drawQuadBezier(Vec2(0.0f + 100, size.height - 100), Vec2(size.width / 2, size.height / 2),
Vec2(size.width - 100, size.height - 100), 50, Color4F::RED,
sliderValue[sliderType::Thickness]);
for (int i = 0; i < 360;)
{
Vec2 p1 = pts->getControlPointAtIndex(i);
Vec2 p2 = pts->getControlPointAtIndex(i++);
Vec2 p3 = pts->getControlPointAtIndex(i);
drawNode->properties.setPosition(Vec2(-100, -100));
drawNode->drawQuadBezier(p1, p2, p3, 30, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
}
for (int i = 0; i < 360;)
{
Vec2 p1 = pts2->getControlPointAtIndex(i);
Vec2 p2 = pts2->getControlPointAtIndex(i++);
Vec2 p3 = pts2->getControlPointAtIndex(i);
drawNode->properties.setPosition(Vec2(-100, -100));
drawNode->drawQuadBezier(p1, p2, p3, 30, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness]);
}
break;
}
case drawMethodes::CubicBezier:
{
drawNode->drawCubicBezier(VisibleRect::center(),
Vec2(VisibleRect::center().x + 30, VisibleRect::center().y + 50),
Vec2(VisibleRect::center().x + 60, VisibleRect::center().y - 50),
VisibleRect::right(), 20, Color4F::WHITE, sliderValue[sliderType::Thickness]);
drawNode->drawCubicBezier(Vec2(size.width - 250, 40.0f), Vec2(size.width - 70, 100.0f),
Vec2(size.width - 30, 250.0f), Vec2(size.width - 10, size.height - 50), 20,
Color4F::GRAY, sliderValue[sliderType::Thickness]);
for (int i = 0; i < 360;)
{
Vec2 p1 = pts->getControlPointAtIndex(i);
Vec2 p2 = pts->getControlPointAtIndex(i++);
Vec2 p3 = pts->getControlPointAtIndex(i++);
Vec2 p4 = pts->getControlPointAtIndex(i);
drawNode->properties.setPosition(Vec2(-100, -100));
drawNode->drawCubicBezier(p1, p2, p3, p4, 120, Color4F::ORANGE, sliderValue[sliderType::Thickness]);
}
for (int i = 0; i < 360;)
{
Vec2 p1 = pts2->getControlPointAtIndex(i);
Vec2 p2 = pts2->getControlPointAtIndex(i++);
Vec2 p3 = pts2->getControlPointAtIndex(i++);
Vec2 p4 = pts2->getControlPointAtIndex(i);
drawNode->properties.setPosition(Vec2(-100, -100));
drawNode->drawCubicBezier(p1, p2, p3, p4, 120, Color4F::ORANGE, sliderValue[sliderType::Thickness]);
}
break;
}
case drawMethodes::CardinalSpline:
{
auto array = ax::PointArray::create(7);
array->addControlPoint(Vec2(0.0f, 0.0f));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width - 80, 80.0f));
array->addControlPoint(Vec2(size.width - 80, size.height - 80));
array->addControlPoint(Vec2(80.0f, size.height - 80));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width / 2, size.height / 2));
drawNode->drawCardinalSpline(array, 0.5f, 120, Color4F::MAGENTA, sliderValue[sliderType::Thickness]);
auto array2 = ax::PointArray::create(5);
array2->addControlPoint(Vec2(size.width / 2, 80.0f));
array2->addControlPoint(Vec2(size.width - 80, 80.0f));
array2->addControlPoint(Vec2(size.width - 80, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, 80.0f));
drawNode->drawCardinalSpline(array2, 5.0f, 120, Color4F::ORANGE, sliderValue[sliderType::Thickness]);
drawNode->drawCardinalSpline(pts, 0.1f, 360, Color4F::RED, 5.0f);
drawNode->drawCardinalSpline(pts2, 0.1f, 360, Color4F::GREEN, 2.0f);
break;
}
case drawMethodes::CatmullRom:
{
auto array2 = ax::PointArray::create(5);
array2->addControlPoint(Vec2(size.width / 2, 80.0f));
array2->addControlPoint(Vec2(size.width - 80, 80.0f));
array2->addControlPoint(Vec2(size.width - 80, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, 80.0f));
drawNode->drawCatmullRom(array2, 20, Color4F::ORANGE, sliderValue[sliderType::Thickness]);
auto array = ax::PointArray::create(7);
array->addControlPoint(Vec2(0.0f, 0.0f));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width - 80, 80.0f));
array->addControlPoint(Vec2(size.width - 80, size.height - 80));
array->addControlPoint(Vec2(80.0f, size.height - 80));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width / 2, size.height / 2));
drawNode->drawCatmullRom(array, 20, Color4F::MAGENTA, sliderValue[sliderType::Thickness]);
drawNode->drawCatmullRom(pts, 360, Color4F::RED, 5.0f);
drawNode->drawCatmullRom(pts2, 360, Color4F::GREEN, 2.0f);
break;
}
case drawMethodes::Poly:
{
Vec2 vertices[5] = {{0.0f, 0.0f}, {50.0f, 50.0f}, {100.0f, 50.0f}, {100.0f, 100.0f}, {50.0f, 100.0f}};
drawNode->properties.setPosition(Vec2(-200, -300));
drawNode->drawPoly(vertices, 5, false, Color4B::BLUE, sliderValue[sliderType::Thickness]);
Vec2 vertices2[3] = {{30.0f, 130.0f}, {30.0f, 230.0f}, {50.0f, 200.0f}};
drawNode->drawPoly(vertices2, 3, true, Color4B::GREEN, sliderValue[sliderType::Thickness]);
drawNode->properties.setDefaultValues();
drawNode->drawPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), true, Color4B::RED,
sliderValue[sliderType::Thickness]);
drawNode->properties.setPosition(Vec2(0, -300));
drawNode->properties.setRotation(sliderValue[sliderType::Rotation]);
drawNode->drawPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), true, Color4F::GREEN,
sliderValue[sliderType::Thickness]);
drawNode->properties.setPosition(Vec2(-100, -300));
drawNode->properties.setRotation(sliderValue[sliderType::Rotation]);
drawNode->properties.setCenter(vertices1[0]);
drawNode->drawPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), true, Color4F::MAGENTA,
sliderValue[sliderType::Thickness]);
drawNode->properties.setPosition(Vec2(200, 0));
drawNode->drawPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), true, Color4F::RED,
sliderValue[sliderType::Thickness]);
drawNode->properties.setPosition(Vec2(0.0f, -300.0f));
drawNode->properties.setRotation(rotation / 10.0f);
drawNode->properties.setScale(Vec2(2.0f, 2.0f));
drawNode->properties.setCenter(vertices1[4]);
drawNode->drawPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), true, Color4F::BLUE,
sliderValue[sliderType::Thickness]);
drawNode->properties.setRotation(rotation);
drawNode->drawPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), true, Color4F::YELLOW,
sliderValue[sliderType::Thickness]);
drawNode->properties.setRotation(-rotation / 5);
drawNode->drawPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), true, Color4F::WHITE,
sliderValue[sliderType::Thickness]);
drawNode->properties.setDefaultValues();
drawNode->drawPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), true, Color4F::GREEN,
sliderValue[sliderType::Thickness]);
break;
}
case drawMethodes::Polygon:
{
drawNode->properties.setPosition(Vec2(0, -300));
drawNode->properties.setRotation(sliderValue[sliderType::Rotation]);
drawNode->drawPolygon(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::GREEN,
sliderValue[sliderType::Thickness], Color4F::YELLOW);
drawNode->properties.setPosition(Vec2(-100, -300));
drawNode->properties.setRotation(sliderValue[sliderType::Rotation]);
drawNode->properties.setCenter(vertices1[0]);
drawNode->drawPolygon(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::MAGENTA,
sliderValue[sliderType::Thickness], Color4F::GRAY);
drawNode->properties.setPosition(Vec2(200, 0));
drawNode->drawPolygon(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::RED,
sliderValue[sliderType::Thickness], Color4F::YELLOW);
drawNode->properties.setPosition(Vec2(0.0f, -300.0f));
drawNode->properties.setRotation(rotation / 10.0f);
drawNode->properties.setScale(Vec2(2.0f, 2.0f));
drawNode->properties.setCenter(vertices1[4]);
drawNode->drawPolygon(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::BLUE,
sliderValue[sliderType::Thickness], Color4F::WHITE);
drawNode->properties.setRotation(rotation);
drawNode->drawPolygon(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::YELLOW,
sliderValue[sliderType::Thickness], Color4F::GREEN);
;
drawNode->properties.setRotation(-rotation / 5);
drawNode->drawPolygon(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::WHITE,
sliderValue[sliderType::Thickness], Color4F::YELLOW);
drawNode->properties.setDefaultValues();
drawNode->drawPolygon(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::GREEN,
sliderValue[sliderType::Thickness], Color4F::BLUE);
break;
}
case drawMethodes::Dot:
{
for (int i = 0; i < 100; i++)
{
drawNode->drawDot(Vec2(AXRANDOM_MINUS1_1() * 400 + 200, AXRANDOM_MINUS1_1() * 400),
20 + sliderValue[sliderType::Thickness],
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
break;
}
case drawMethodes::Point:
{
for (int i = 0; i < 100; i++)
{
drawNode->drawPoint(Vec2(AXRANDOM_MINUS1_1() * 400 + 200, AXRANDOM_MINUS1_1() * 400),
30 + sliderValue[sliderType::Thickness],
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
break;
}
case drawMethodes::Points:
{
for (int i = 0; i < 100; i++)
{
Vec2 pos = Vec2(-100, -100) + Vec2(AXRANDOM_MINUS1_1() * VisibleRect::rightTop().x,
AXRANDOM_MINUS1_1() * VisibleRect::rightTop().y);
Vec2 position[] = {{60 + AXRANDOM_MINUS1_1() * VisibleRect::rightTop().x,
60 + AXRANDOM_MINUS1_1() * VisibleRect::rightTop().y / 2},
{70 + AXRANDOM_MINUS1_1() * VisibleRect::rightTop().x,
70 + AXRANDOM_MINUS1_1() * VisibleRect::rightTop().y / 2},
{60 + AXRANDOM_MINUS1_1() * VisibleRect::rightTop().x,
60 + AXRANDOM_MINUS1_1() * VisibleRect::rightTop().y / 2},
{70 + AXRANDOM_MINUS1_1() * VisibleRect::rightTop().x,
70 + AXRANDOM_MINUS1_1() * VisibleRect::rightTop().y / 2}};
drawNode->drawPoints(position, 4, 10 + 2 * sliderValue[sliderType::Thickness],
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
}
break;
}
case drawMethodes::Triangle:
{
drawNode->properties.setScale(Vec2(3, 3));
for (int i = 0; i < 10; i++)
{
drawNode->drawTriangle(Vec2(AXRANDOM_0_1() * 50 + 100, AXRANDOM_0_1() * 50 + 100),
Vec2(AXRANDOM_MINUS1_1() * 50, AXRANDOM_MINUS1_1() * 50),
Vec2(AXRANDOM_0_1() * 50 + 100, AXRANDOM_0_1() * 50 + 100),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
break;
}
case drawMethodes::Segment:
{
labelRound->setVisible(true);
labelSquare->setVisible(true);
labelButt->setVisible(true);
int yy1 = 150;
int yy = 0;
drawNode->drawSegment(Vec2(-150.0f, yy - yy1), Vec2(200, yy - yy1), 20 + 5 * sliderValue[sliderType::Thickness],
Color4F::GREEN, DrawNode::Round, DrawNode::Round);
labelRound->setPosition(Vec2(250.0f, 85));
yy += 170;
drawNode->drawSegment(Vec2(-150.0f, yy - yy1), Vec2(200, yy - yy1), 20 + 5 * sliderValue[sliderType::Thickness],
Color4F::BLUE, DrawNode::Square, DrawNode::Square);
labelSquare->setPosition(Vec2(250.0f, 170));
yy += 170;
drawNode->drawSegment(Vec2(-150.0f, yy - yy1), Vec2(200, yy - yy1), 20 + 5 * sliderValue[sliderType::Thickness],
Color4F::RED, DrawNode::Butt, DrawNode::Butt);
labelButt->setPosition(Vec2(250.0f, 255));
break;
}
case drawMethodes::SolidCircle:
{
for (int i = 100; i > 1; i--)
{
drawNode->drawSolidCircle(
VisibleRect::center(), 3 * i, AX_DEGREES_TO_RADIANS(90), AXRANDOM_0_1() * 20.f + 20.f, 1.0f, 1.0f,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f), sliderValue[sliderType::Thickness],
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
Vec2 pos = Vec2(-100, -100) + Vec2(AXRANDOM_MINUS1_1() * VisibleRect::rightTop().x,
AXRANDOM_MINUS1_1() * VisibleRect::rightTop().y);
drawNode->drawSolidCircle(
VisibleRect::center() + pos, AXRANDOM_0_1() * 200, AX_DEGREES_TO_RADIANS(AXRANDOM_MINUS1_1() * 90), 10,
1.0f, 1.0f, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
sliderValue[sliderType::Thickness], Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
break;
}
case drawMethodes::SolidPoly:
{
Vec2 ppp = Vec2(AXRANDOM_MINUS1_1() * size.x / 2, AXRANDOM_MINUS1_1() * size.y / 2);
drawNode->properties.setPosition(Vec2(ppp));
drawNode->properties.setPosition(Vec2(0.0f, -300.0f));
drawNode->properties.setRotation(rotation / 10.0f);
drawNode->properties.setScale(Vec2(2.0f, 2.0f));
drawNode->properties.setCenter(vertices1[4]);
drawNode->drawSolidPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::BLUE);
drawNode->properties.setRotation(rotation);
drawNode->drawSolidPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::YELLOW);
drawNode->properties.setRotation(-rotation / 5);
drawNode->drawSolidPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::WHITE);
drawNode->properties.setDefaultValues();
drawNode->drawSolidPoly(vertices1, sizeof(vertices1) / sizeof(vertices1[0]), Color4F::GREEN);
break;
}
case drawMethodes::SolidRect:
{
for (int i = 0; i < 100; i++)
{
Vec2 pos = Vec2(-100, -100) + Vec2(AXRANDOM_MINUS1_1() * VisibleRect::rightTop().x,
AXRANDOM_MINUS1_1() * VisibleRect::rightTop().y);
drawNode->drawSolidRect(
pos, pos + Vec2(20.0f * sliderValue[sliderType::Thickness], 20.0f * sliderValue[sliderType::Thickness]),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f), sliderValue[sliderType::Thickness]);
}
break;
}
case drawMethodes::Star:
{
Vec2 gear1 = {270.f, 320.f};
Vec2 gear2 = {160.f, 320.f};
Vec2 gear3 = {200.f, 200.f};
Vec2 gear4 = {size.width - 200, size.height - 200};
drawNode->properties.setRotation(rotation + 45);
drawNode->properties.setCenter(gear1);
drawNode->drawStar(Vec2(gear1), 30, 60, 8, Color4F::BLUE, 4.0);
drawNode->properties.setRotation(-rotation);
drawNode->properties.setCenter(gear2);
drawNode->drawStar(gear2, 30, 60, 8, Color4F::GREEN, 4.0);
drawNode->properties.setDefaultValues();
drawNode->drawLine(gear2, gear1, Color4F::RED, sliderValue[sliderType::Thickness]); // line
drawNode->properties.setCenter(gear4);
drawNode->properties.setRotation(rotation + 45);
drawNode->drawStar(gear3, 30, 60, 18, Color4F::RED, 1.0);
drawNode->drawLine(gear3, gear4, Color4F::YELLOW, sliderValue[sliderType::Thickness]); // line
// drawNode->properties.setDefaultValues();
drawNode->properties.setRotation(rotation - 45);
drawNode->properties.setCenter(gear4);
drawNode->drawStar(gear4, 40, 60, 60, Color4F::GREEN, 1.0);
drawNode->properties.setRotation(rotation);
drawNode->properties.setCenter(Vec2(-110, 250));
drawNode->drawStar(Vec2(-110, 250), 30, 70, 5, Color4F::GREEN, 1.0);
drawNode->properties.setCenter(Vec2(-150, 100));
drawNode->drawStar(Vec2(-150, 100), 80, 100, 40, Color4F::GREEN, 1.0);
drawNode->properties.setCenter(Vec2(-150, -100));
drawNode->drawStar(Vec2(-150, -100), 5, 70, 3, Color4F::GREEN, 1.0);
drawNode->properties.setRotation(0);
for (int i = 0; i < 10; i++)
{
Vec2 ppp = Vec2(AXRANDOM_MINUS1_1() * size.x / 2, AXRANDOM_MINUS1_1() * size.y / 2);
drawNode->properties.setPosition(Vec2(ppp));
drawNode->drawStar(
Vec2::ZERO, 40, 60, AXRANDOM_0_1() * 60 + 3,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), sliderValue[sliderType::Thickness]));
}
break;
}
case drawMethodes::SolidStar:
{
Vec2 gear1 = {270.f, 320.f};
Vec2 gear2 = {160.f, 320.f};
Vec2 gear3 = {200.f, 200.f};
Vec2 gear4 = {size.width - 200, size.height - 200};
drawNode->properties.setRotation(rotation + 45);
drawNode->properties.setCenter(gear1);
drawNode->drawSolidStar(Vec2(gear1), 30, 60, 8, Color4F::BLUE, Color4F::YELLOW, 4.0);
drawNode->properties.setRotation(-rotation);
drawNode->properties.setCenter(gear2);
drawNode->drawSolidStar(gear2, 30, 60, 8, Color4F::GREEN, Color4F::YELLOW, 4.0);
drawNode->properties.setDefaultValues();
drawNode->drawLine(gear2, gear1, Color4F::RED, sliderValue[sliderType::Thickness]); // line
drawNode->properties.setCenter(gear4);
drawNode->properties.setRotation(rotation + 45);
drawNode->drawSolidStar(gear3, 30, 60, 18, Color4F::RED, Color4F::YELLOW, 1.0);
drawNode->drawLine(gear3, gear4, Color4F::YELLOW, sliderValue[sliderType::Thickness]); // line
drawNode->properties.setDefaultValues();
drawNode->properties.setRotation(rotation - 45);
drawNode->properties.setCenter(gear4);
drawNode->drawSolidStar(gear4, 40, 60, 60, Color4F::GREEN, Color4F::YELLOW, 1.0);
drawNode->properties.setRotation(rotation);
drawNode->properties.setCenter(Vec2(-110, 250));
drawNode->drawSolidStar(Vec2(-110, 250), 30, 70, 5, Color4F::GREEN, Color4F::YELLOW, 1.0);
drawNode->properties.setCenter(Vec2(-150, 100));
drawNode->drawSolidStar(Vec2(-150, 100), 80, 100, 40, Color4F::GREEN, Color4F::YELLOW, 1.0);
drawNode->properties.setCenter(Vec2(-150, -100));
drawNode->drawSolidStar(Vec2(-150, -100), 5, 70, 3, Color4F::GREEN, Color4F::YELLOW, 1.0);
drawNode->properties.setRotation(0);
for (int i = 0; i < 10; i++)
{
Vec2 ppp = Vec2(AXRANDOM_MINUS1_1() * size.x / 2, AXRANDOM_MINUS1_1() * size.y / 2);
drawNode->properties.setPosition(Vec2(ppp));
drawNode->drawSolidStar(Vec2::ZERO, 40, 60, AXRANDOM_0_1() * 60 + 3,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
break;
}
default:
break;
}
}
DrawNodeDrawInWrongOrder_Issue1888::DrawNodeDrawInWrongOrder_Issue1888()
{
drawNode->properties.setDrawOrder(true);
scheduleUpdate();
}
std::string DrawNodeDrawInWrongOrder_Issue1888::title() const
{
return "Issue #1888: Drawing order";
}
std::string DrawNodeDrawInWrongOrder_Issue1888::subtitle() const
{
return "Red behind all. Green behind the blue/grey.\nRandom Points behind the squares. Blue is top.";
}
void DrawNodeDrawInWrongOrder_Issue1888::update(float dt)
{
DrawNodeBaseTest::update(dt);
drawNode->clear();
drawNode->drawLine(Vec2(20, 140), Vec2(450, 110), Color4B::RED, 20.0f);
for (int i = 0; i < 200; i++)
{
Vec2 position1[] = {
{60 + AXRANDOM_0_1() * VisibleRect::rightTop().x, 60 + AXRANDOM_0_1() * VisibleRect::rightTop().y},
{70 + AXRANDOM_0_1() * VisibleRect::rightTop().x, 70 + AXRANDOM_0_1() * VisibleRect::rightTop().y},
{60 + AXRANDOM_0_1() * VisibleRect::rightTop().x, 60 + AXRANDOM_0_1() * VisibleRect::rightTop().y},
{70 + AXRANDOM_0_1() * VisibleRect::rightTop().x, 70 + AXRANDOM_0_1() * VisibleRect::rightTop().y}};
drawNode->drawPoints(position1, 4, 10, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
}
drawNode->drawSolidRect(Vec2(150, 80), Vec2(400, 220), Color4B::YELLOW);
for (int i = 0; i < 50; i++)
{
drawNode->drawPoint(Vec2(i * 7.0f, 120.0f), (float)i / 5 + 1,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
drawNode->drawLine(Vec2(20, 100), Vec2(450, 220), Color4B::GREEN, 8.0f);
drawNode->drawLine(Vec2(200, 100), Vec2(450, 250), Color4B::BLUE, 6.0f);
}
DrawNodeAxmolTest2::DrawNodeAxmolTest2()
{
selectedRadioButton = 0;
_radioButtonGroup = ui::RadioButtonGroup::create();
addChild(_radioButtonGroup, 50);
static const float BUTTON_WIDTH = 30;
static float startPosX = 0;
// Create the radio buttons
static const int NUMBER_OF_BUTTONS = 2;
startPosX = size.width / 2.0f - ((NUMBER_OF_BUTTONS - 1) / 2.0f) * BUTTON_WIDTH;
for (int i = 0; i < NUMBER_OF_BUTTONS; ++i)
{
ui::RadioButton* radioButton =
ui::RadioButton::create("cocosui/radio_button_off.png", "cocosui/radio_button_on.png");
float posX = startPosX + BUTTON_WIDTH * i;
radioButton->setPosition(Vec2(posX, size.height - 80));
radioButton->setScale(1.2f);
radioButton->setTag(i);
_radioButtonGroup->addRadioButton(radioButton);
addChild(radioButton, 50);
radioButton->addEventListener(AX_CALLBACK_2(DrawNodeAxmolTest2::onChangedRadioButtonSelect, this));
}
drawNode = DrawNode::create();
addChild(drawNode, 10);
scheduleUpdate();
}
void DrawNodeAxmolTest2::onChangedRadioButtonSelect(ui::RadioButton* radioButton, ui::RadioButton::EventType type)
{
if (radioButton == nullptr)
{
return;
}
switch (type)
{
case ui::RadioButton::EventType::SELECTED:
{
selectedRadioButton = radioButton->getTag();
break;
}
case ui::RadioButton::EventType::UNSELECTED:
{
break;
}
default:
break;
}
}
void DrawNodeAxmolTest2::update(float dt)
{
DrawNodeBaseTest::update(dt);
if (!drawNode || !drawNode)
{
return;
}
drawNode->clear();
switch (selectedRadioButton)
{
case 0:
setSubtitleLabel("Axmol v2 drawOrder ON (T)");
drawAllv2(drawNode, true);
break;
case 1:
setSubtitleLabel("Axmol v2 drawOrder OFF (T,P,L)");
drawAllv2(drawNode, false);
break;
default:
break;
}
}
void DrawNodeAxmolTest2::drawAllv2(DrawNode* drawNode, bool drawOrder)
{
drawNode->properties.setDrawOrder(drawOrder);
drawNode->drawPoint(Vec2(size.width / 2 - 120, size.height / 2 - 120), 10,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
drawNode->drawPoint(Vec2(size.width / 2 + 120, size.height / 2 + 120), 10,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
// drawNode 4 small points
Vec2 position[] = {Vec2(60, 60), Vec2(70, 70), Vec2(60, 70), Vec2(70, 60)};
drawNode->drawPoints(position, 4, 5, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
// drawNode a line
drawNode->drawLine(Vec2(0, 0), Vec2(size.width, size.height), Color4F(1.0, 0.0, 0.0, 0.5));
// drawNode a rectangle
drawNode->drawRect(Vec2(23, 23), Vec2(7, 7), Color4F::RED);
drawNode->drawRect(Vec2(15, 30), Vec2(30, 15), Vec2(15, 0), Vec2(0, 15),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1));
// drawNode a circle
drawNode->drawCircle(VisibleRect::center() + Vec2(140, 0), 100, AX_DEGREES_TO_RADIANS(90), 30, true, 1.0f, 2.0f,
Color4F(1.0f, 0.0f, 0.0f, 0.5f));
drawNode->drawCircle(VisibleRect::center() - Vec2(140, 0), 50, AX_DEGREES_TO_RADIANS(90), 30, false,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
// drawNode some beziers
drawNode->drawQuadBezier(Vec2(size.width - 150, size.height - 150), Vec2(size.width - 70, size.height - 10),
Vec2(size.width - 10, size.height - 10), 10,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
drawNode->drawQuadBezier(Vec2(0.0f, size.height), Vec2(size.width / 2, size.height / 2),
Vec2(size.width, size.height), 50,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
drawNode->drawCubicBezier(VisibleRect::center(), Vec2(VisibleRect::center().x + 30, VisibleRect::center().y + 50),
Vec2(VisibleRect::center().x + 60, VisibleRect::center().y - 50), VisibleRect::right(),
100, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
drawNode->drawCubicBezier(Vec2(size.width - 250, 40.0f), Vec2(size.width - 70, 100.0f),
Vec2(size.width - 30, 250.0f), Vec2(size.width - 10, size.height - 50), 10,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
auto array = PointArray::create(20);
array->addControlPoint(Vec2(0.0f, 0.0f));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width - 80, 80.0f));
array->addControlPoint(Vec2(size.width - 80, size.height - 80));
array->addControlPoint(Vec2(80.0f, size.height - 80));
array->addControlPoint(Vec2(80.0f, 80.0f));
array->addControlPoint(Vec2(size.width / 2, size.height / 2));
drawNode->drawCardinalSpline(array, 0.5f, 50, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
auto array2 = PointArray::create(20);
array2->addControlPoint(Vec2(size.width / 2, 30.0f));
array2->addControlPoint(Vec2(size.width - 80, 30.0f));
array2->addControlPoint(Vec2(size.width - 80, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, size.height - 80));
array2->addControlPoint(Vec2(size.width / 2, 30.0f));
drawNode->drawCatmullRom(array2, 50, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
// open random color poly
Vec2 vertices[] = {Vec2(0.0f, 0.0f), Vec2(50.0f, 50.0f), Vec2(100.0f, 50.0f), Vec2(100.0f, 100.0f),
Vec2(50.0f, 100.0f)};
drawNode->drawPoly(vertices, 5, false, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
// closed random color poly
Vec2 vertices2[] = {Vec2(30.0f, 130.0f), Vec2(30.0f, 230.0f), Vec2(50.0f, 200.0f)};
drawNode->drawPoly(vertices2, 3, true, Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
// drawNode 10 circles
for (int i = 0; i < 10; i++)
{
drawNode->drawDot(Vec2(size.width / 2, size.height / 2), 10.f * (10 - i),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
// drawNode polygons
Vec2 points[] = {Vec2(size.height / 4, 0.0f), Vec2(size.width, size.height / 5),
Vec2(size.width / 3 * 2, size.height)};
drawNode->drawPolygon(points, sizeof(points) / sizeof(points[0]), Color4F(1.0f, 0.0f, 0.0f, 0.5f), 4,
Color4F(0.0f, 0.0f, 1.0f, 0.5f));
// star poly (triggers buggs)
{
const float o = 80;
const float w = 20;
const float h = 50;
Vec2 star[] = {
Vec2(o + w, o - h), Vec2(o + w * 2, o), // lower spike
Vec2(o + w * 2 + h, o + w), Vec2(o + w * 2, o + w * 2), // right spike
//{o +w, o+w*2+h}, {o,o+w*2}, // top spike
//{o -h, o+w}, {o,o}, // left spike
};
drawNode->drawPolygon(star, sizeof(star) / sizeof(star[0]), Color4F(1.0f, 0.0f, 0.0f, 0.5f), 1,
Color4F(0.0f, 0.0f, 1.0f, 1.0f));
}
// star poly (doesn't trigger bug... order is important un tesselation is supported.
{
const float o = 180;
const float w = 20;
const float h = 50;
Vec2 star[] = {
Vec2(o, o),
Vec2(o + w, o - h),
Vec2(o + w * 2, o), // lower spike
Vec2(o + w * 2 + h, o + w),
Vec2(o + w * 2, o + w * 2), // right spike
Vec2(o + w, o + w * 2 + h),
Vec2(o, o + w * 2), // top spike
Vec2(o - h, o + w), // left spike
Vec2(o, o), // left spike
};
drawNode->drawPolygon(star, sizeof(star) / sizeof(star[0]), Color4F(1.0f, 0.0f, 0.0f, 0.5f), 1,
Color4F(0.0f, 0.0f, 1.0f, 1.0f));
}
// drawNode a solid polygon
Vec2 vertices3[] = {Vec2(60.0f, 160.0f), Vec2(70.0f, 190.0f), Vec2(100.0f, 190.0f), Vec2(90.0f, 160.0f)};
drawNode->drawSolidPoly(vertices3, 4, Color4F(1.0f, 1.0f, 0.0f, 1.0f));
// drawNode a solid rectangle
drawNode->drawSolidRect(Vec2(10.0f, 10.0f), Vec2(20.0f, 20.0f), Color4F(1.0f, 1.0f, 0.0f, 1.0f));
// drawNode a solid circle
drawNode->drawSolidCircle(VisibleRect::center() + Vec2(140.0f, 0.0f), 40, AX_DEGREES_TO_RADIANS(90), 50, 2.0f, 2.0f,
Color4F(0.0f, 1.0f, 0.0f, 1.0f));
// drawNode segment
drawNode->drawSegment(Vec2(20.0f, size.height), Vec2(20.0f, size.height / 2), 10, Color4F(0.0f, 1.0f, 0.0f, 1.0f));
drawNode->drawSegment(Vec2(10.0f, size.height / 2), Vec2(size.width / 2, size.height / 2), 40,
Color4F(1.0f, 0.0f, 1.0f, 0.5f));
// drawNode triangle
drawNode->drawTriangle(Vec2(10.0f, 10.0f), Vec2(70.0f, 30.0f), Vec2(100.0f, 140.0f),
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 0.5f));
for (int i = 0; i < 100; i++)
{
drawNode->drawPoint(Vec2(i * 7.0f, 5.0f), (float)i / 5 + 1,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f));
}
drawNode->setLineWidth(4);
drawNode->drawLine(Vec2(0.0f, size.height), Vec2(size.width, size.height - 20), Color4F::YELLOW);
drawNode->drawLine(Vec2(0.0f, 0.0f), Vec2(size.width, size.height - 20), Color4F::YELLOW);
}
string DrawNodeAxmolTest2::title() const
{
return "DrawNode Order test";
}
string DrawNodeAxmolTest2::subtitle() const
{
return "";
}
DrawNodeIssueTester::DrawNodeIssueTester()
{
static Vec2 vertices[] = {Vec2(0.0f, 0.0f), Vec2(50.0f, 50.0f), Vec2(100.0f, 50.0f), Vec2(100.0f, 100.0f),
Vec2(50.0f, 100.0f)};
int verticesCount = 5;
drawNode->properties.setPosition(Vec2(5, 150));
drawNode->setLineWidth(1);
drawNode->drawPoly(vertices, verticesCount, false, Color4F::GREEN);
auto draw = DrawNode::create();
addChild(draw, 10);
draw->setPosition(70, 150);
draw->drawPoly(vertices, verticesCount, false, Color4F::BLUE);
drawNode->properties.setPosition(Vec2(140, 150));
drawNode->setLineWidth(1);
drawNode->drawPoly(vertices, verticesCount, false, Color4F::RED);
drawNode->properties.setPosition(Vec2(200, 150));
drawNode->setLineWidth(1);
drawNode->drawPoly(vertices, verticesCount, false, Color4F::RED, 3);
drawNode->drawPoly(vertices, verticesCount, false, Color4F::WHITE);
drawNode->properties.setPosition(Vec2(270, 150));
drawNode->setLineWidth(1);
drawNode->drawPoly(vertices, verticesCount, false, Color4F(0.0f, 0.5f, 0.5f, 0.5f), 10);
drawNode->drawPoly(vertices, verticesCount, false, Color4F::BLACK);
float thick = 0.0f;
float y = -90.0f;
drawNode->properties.setPosition(Vec2(270, 100));
for (int i = 0; i < 32; i++)
{
thick += 0.5f;
y += thick + 1;
drawNode->drawLine(Vec2(140, y), Vec2(180, y), Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f),
thick);
}
drawNode->drawPie(Vec2(-220, 150), 20, 0, 100, 300, 1, 1, Color4B::TRANSPARENT, Color4B::BLUE,
DrawNode::DrawMode::Line, 10);
drawNode->properties.setPosition(Vec2(50, -100));
for (int i = 2; i < 30; i++)
{
drawNode->drawCircle(center, 5 * i, AX_DEGREES_TO_RADIANS(90), i, false, 1.0f, 1.0f,
Color4F(AXRANDOM_0_1(), AXRANDOM_0_1(), AXRANDOM_0_1(), 1.0f), 0.5f);
}
Vec2* fbHorse = new Vec2[856 / 2];
int n = 0;
Vec2 pos = {100, 210};
float scale = 3.0f;
drawNode->properties.setPosition(Vec2(-90, -160));
for (size_t i = 0; i < sizeof(verticesFB) / sizeof(verticesFB[0]); i += 4)
{
drawNode->drawLine(Vec2(verticesFB[i] * scale, verticesFB[i + 1] * scale) + pos,
Vec2(verticesFB[i + 2] * scale, verticesFB[i + 3] * scale) + pos, Color4F::RED, 0.5f);
}
scheduleUpdate();
}
void DrawNodeIssueTester::onEnter()
{
DrawNodeBaseTest::onEnter();
}
void DrawNodeIssueTester::update(float dt)
{
// DrawNodeBaseTest::update(dt);
}
string DrawNodeIssueTester::title() const
{
return "For issue tests (future)";
}
string DrawNodeIssueTester::subtitle() const
{
return "setLineWidth()";
}
DrawNodeSpLinesTest::DrawNodeSpLinesTest()
{
auto listener = EventListenerTouchAllAtOnce::create();
listener->onTouchesEnded = AX_CALLBACK_2(DrawNodeSpLinesTest::onTouchesEnded, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
drawNodeCP = DrawNode::create();
addChild(drawNodeCP, 50);
drawNode = DrawNode::create();
addChild(drawNode, 30);
screen = Director::getInstance()->getVisibleSize();
origin = Director::getInstance()->getVisibleOrigin();
center = Vec2(screen.width / 2, screen.height / 2);
sixth = Vec2(screen.width / 6, screen.height / 6);
sixth.y;
defY = (int)(center.y + sixth.y);
defY2 = (int)(center.y - sixth.y);
dev = sixth.y;
pts = PointArray::create(n);
pts2 = PointArray::create(n);
pts->retain();
pts2->retain();
for (int i = 0; i < n; ++i)
{
pts->insertControlPoint(Vec2(0, 0), i);
pts2->insertControlPoint(Vec2(0, 0), i);
}
DrawNodeBaseTest::generateDataPoints();
addNewControlPoint(VisibleRect::center());
scheduleUpdate();
}
void DrawNodeSpLinesTest::addNewControlPoint(Vec2 p)
{
points.emplace_back(Vec2(p.x, p.y));
}
void DrawNodeSpLinesTest::onTouchesEnded(const std::vector<Touch*>& touches, Event* event)
{
for (auto& touch : touches)
{
auto location = touch->getLocation();
addNewControlPoint(location);
}
}
std::string DrawNodeSpLinesTest::title() const
{
return "Testing SpLines";
}
std::string DrawNodeSpLinesTest::subtitle() const
{
return "Tap screen to add more (control) points";
}
void DrawNodeSpLinesTest::update(float dt)
{
if (points.size() == 0)
return;
array = PointArray::create(points.size());
drawNodeCP->clear();
drawNode->clear();
drawNode->clear();
int boxSize = 3;
for (auto&& p : points)
{
drawNodeCP->drawRect(Vec2(p.x - boxSize, p.y - boxSize), Vec2(p.x + boxSize, p.y + boxSize), Color4F::BLUE);
array->addControlPoint(Vec2(p.x, p.y));
}
drawNode->drawCardinalSpline(array, 0.2f, points.size() * 8, Color4F::GREEN, 20.0f);
drawNode->drawCardinalSpline(array, 0.2f, points.size() * 8, Color4F::BLUE);
drawNode->drawCardinalSpline(array, 0.2f, points.size() * 16, Color4F(1.0f, 1.0f, 0.5f, 1.0f), 10.0f);
// drawNode->drawCatmullRom(array, points.size() * 8, Color4F::YELLOW,5);
// if (points.size()>3)
//{
// int step = points.size()/4;
// drawNode->drawCubicBezier(points.at(0), points.at(step),points.at(step*2),points.at(points.size()-1),
// points.size(), Color4F::BLUE);
//}
drawNode->drawCardinalSpline(pts, 0.5f, 360, Color4F::RED, 5.0f);
drawNode->drawCardinalSpline(pts2, 0.5f, 360, Color4F::GREEN, 2.0f);
int i1 = RandomHelper::random_int(0, n - 1);
int i2 = RandomHelper::random_int(0, n - 1);
drawNode->drawDot(pts->getControlPointAtIndex(i1), 7, Color4F(0, 1, 0, 0.3));
drawNode->drawDot(pts->getControlPointAtIndex(i1), 4, Color4F::GREEN);
drawNode->drawDot(pts2->getControlPointAtIndex(i2), 7, Color4F(0, 1, 0, 0.3));
drawNode->drawDot(pts2->getControlPointAtIndex(i2), 4, Color4F::GREEN);
}
#if defined(AX_PLATFORM_PC)
CandyMixEeffect::CandyMixEeffect()
{
static const float BUTTON_WIDTH = 30;
static float startPosX = 0;
scheduleUpdate();
}
std::string CandyMixEeffect::title() const
{
return "Performance: Candy Mix";
}
std::string CandyMixEeffect::subtitle() const
{
return "";
}
void CandyMixEeffect::renderLine(float x1, float x2, float y, ax::Color4F color, float angle)
{
static float WID = 400;
float xMid = (x1 + x2) * 0.5f;
float r = color.r;
float g = color.g;
float b = color.b;
float rng = 1.0f / (x2 - xMid);
x1 = MIN(MAX(0.0f, x1), WID - 1);
x2 = MIN(MAX(0.0f, x2), WID - 1);
float mm = 0.8f;
for (size_t x = x1; x < x2; x++)
{
float pos = (x - xMid) * rng;
float ang = (angle + asin(pos) + (cos((angle + pos * (float)M_PI) * 1.78f) * 0.3f)) + (float)M_PI * 0.5f;
float sf = 0.2f + 0.8f * MAX(mm - 0.8, MIN(mm, cos(ang)));
float sp = pow(MAX(0, cos(2 * ang)), 20);
float rr = MIN(mm, r * sf + sp);
float gg = MIN(mm, g * sf + sp);
float bb = MIN(mm, b * sf + sp);
drawNode->drawPoint(Vec2(y, x - 50), 2.0f, Color4F(rr, gg, bb, 1.0f));
}
}
void CandyMixEeffect::update(float dt)
{
DrawNodeBaseTest::update(dt);
drawNode->clear();
static float WID = 400;
static float HIG = 600;
static b2Timer timer;
float t = timer.GetMilliseconds() / 1000.0f;
float ta = sin(t * cos(t) * 0.02f) + t;
float tb = (1.0f + sin(t) * 1.0f) * 0.02f + 0.01f;
float xa = WID * 0.5f;
for (int y = 0; y < HIG; y++)
{
float ya = y * 0.01f;
float rad = 60 + sin(ta + ya) * 30;
float rot = t + sin(ya * 2) * 0.5f + cos(ta * 0.3f) * 0.3f;
float x1 = xa + sin(rot) * rad;
float x2 = xa + sin(rot + (float)M_PI * 0.5f) * rad;
float x3 = xa + sin(rot + (float)M_PI) * rad;
float x4 = xa + sin(rot + (float)M_PI * 1.5f) * rad;
if (x1 < x2)
renderLine(x1, x2, y, Color4F::RED, rot);
if (x2 < x3)
renderLine(x2, x3, y, Color4F::GREEN, rot + (float)M_PI * 0.5f);
if (x3 < x4)
renderLine(x3, x4, y, Color4F::BLUE, rot + (float)M_PI);
if (x4 < x1)
renderLine(x4, x1, y, Color4F::YELLOW, rot + (float)M_PI * 1.5f);
t += sin(ta + ya) * tb;
xa += sin(t + ta) * 0.1f;
}
}
#endif
#if defined(_WIN32)
# pragma pop_macro("TRANSPARENT")
#endif