@@ -470,7 +470,118 @@ public void hint(int which) {
470470 // SHAPES
471471
472472
473- //public void beginShape(int kind)
473+ //////////////////////////////////////////////////////////////
474+
475+ // SHAPE CREATION
476+
477+
478+ // @Override
479+ // public PShape createShape(PShape source) {
480+ // return PShapeOpenGL.createShape2D(this, source);
481+ // }
482+
483+
484+ @ Override
485+ public PShape createShape () {
486+ return createShape (PShape .GEOMETRY );
487+ }
488+
489+
490+ @ Override
491+ public PShape createShape (int type ) {
492+ return createShapeImpl (this , type );
493+ }
494+
495+
496+ @ Override
497+ public PShape createShape (int kind , float ... p ) {
498+ return createShapeImpl (this , kind , p );
499+ }
500+
501+
502+ static protected PShape createShapeImpl (PGraphicsJava2D pg , int type ) {
503+ PShape shape = null ;
504+ if (type == PConstants .GROUP ) {
505+ shape = new PShape (pg , PConstants .GROUP );
506+ } else if (type == PShape .PATH ) {
507+ shape = new PShape (pg , PShape .PATH );
508+ } else if (type == PShape .GEOMETRY ) {
509+ shape = new PShape (pg , PShape .GEOMETRY );
510+ }
511+ shape .is3D (false );
512+ return shape ;
513+ }
514+
515+
516+ static protected PShape createShapeImpl (PGraphicsJava2D pg ,
517+ int kind , float ... p ) {
518+ PShape shape = null ;
519+ int len = p .length ;
520+
521+ if (kind == POINT ) {
522+ if (len != 2 ) {
523+ showWarning ("Wrong number of parameters" );
524+ return null ;
525+ }
526+ shape = new PShape (pg , PShape .PRIMITIVE );
527+ shape .setKind (POINT );
528+ } else if (kind == LINE ) {
529+ if (len != 4 ) {
530+ showWarning ("Wrong number of parameters" );
531+ return null ;
532+ }
533+ shape = new PShape (pg , PShape .PRIMITIVE );
534+ shape .setKind (LINE );
535+ } else if (kind == TRIANGLE ) {
536+ if (len != 6 ) {
537+ showWarning ("Wrong number of parameters" );
538+ return null ;
539+ }
540+ shape = new PShape (pg , PShape .PRIMITIVE );
541+ shape .setKind (TRIANGLE );
542+ } else if (kind == QUAD ) {
543+ if (len != 8 ) {
544+ showWarning ("Wrong number of parameters" );
545+ return null ;
546+ }
547+ shape = new PShape (pg , PShape .PRIMITIVE );
548+ shape .setKind (QUAD );
549+ } else if (kind == RECT ) {
550+ if (len != 4 && len != 5 && len != 8 && len != 9 ) {
551+ showWarning ("Wrong number of parameters" );
552+ return null ;
553+ }
554+ shape = new PShape (pg , PShape .PRIMITIVE );
555+ shape .setKind (RECT );
556+ } else if (kind == ELLIPSE ) {
557+ if (len != 4 && len != 5 ) {
558+ showWarning ("Wrong number of parameters" );
559+ return null ;
560+ }
561+ shape = new PShape (pg , PShape .PRIMITIVE );
562+ shape .setKind (ELLIPSE );
563+ } else if (kind == ARC ) {
564+ if (len != 6 && len != 7 ) {
565+ showWarning ("Wrong number of parameters" );
566+ return null ;
567+ }
568+ shape = new PShape (pg , PShape .PRIMITIVE );
569+ shape .setKind (ARC );
570+ } else if (kind == BOX ) {
571+ showWarning ("Primitive not supported in 2D" );
572+ } else if (kind == SPHERE ) {
573+ showWarning ("Primitive not supported in 2D" );
574+ } else {
575+ showWarning ("Unrecognized primitive type" );
576+ }
577+
578+ if (shape != null ) {
579+ shape .setParams (p );
580+ }
581+
582+ shape .is3D (false );
583+ return shape ;
584+ }
474585
475586
476587 @ Override
0 commit comments