MyGroup5.java

Inductor drawn symmetrically.

Command window output:

C:\ece538\circuit3>java MyGroup5

inductor at (0,0)

BoundsInLocal: xcen 0.00000 ycen 0.00000 width 7.20833 height 4.20833
BoundsInParent: xcen 0.00000 ycen 0.00000 width 0.720833 height 0.420833

inductor at (1,1)

BoundsInLocal: xcen 0.00000 ycen 0.00000 width 7.20833 height 4.20833
BoundsInParent: xcen 1.00000 ycen -1.00000 width 0.720833 height 0.420833


MyGroup5.java

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Group;
import javafx.scene.*;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.collections.*;
import javafx.geometry.Bounds;
import java.lang.Math;

public class MyGroup5 extends Application {
    public void start(Stage stage) {
        Group grp = new Group();
        Scene scene = new Scene(grp, 400, 400);

	grp.setTranslateX(scene.getWidth()/2);
	grp.setTranslateY(scene.getHeight()/2);
	double res = 96;
	grp.setScaleX(res);
	grp.setScaleY(res);

	//grp.setRotate(10.0);

	Grid.draw(grp);


	drawImpedance(grp);

	System.out.println("\ninductor at (0,0)");
	drawInductor(grp,0.0,0.0);

	System.out.println("\ninductor at (1,1)");
	drawInductor(grp,1.0,1.0);

	

        stage.setTitle("MyGroup5 Test");
        stage.setScene(scene);
        stage.show();
    }

   void drawImpedance(Group parent)
   {
	Group grp = new Group();
	double resc = 0.1;
	grp.setScaleX(resc);
	grp.setScaleY(resc);

	double res = parent.getScaleX();
	Path mypath = new Path();
	ObservableList<PathElement> p = mypath.getElements();
	p.add(new MoveTo(-2.5,0));
	p.add(new LineTo(-2.0,0));
	p.add(new MoveTo(2.0,0));
	p.add(new LineTo(2.5,0));
	mypath.setStrokeWidth(20/res);
	//mypath.setStroke(Color.GREEN);
 	mypath.setStrokeLineCap(StrokeLineCap.ROUND);

	ObservableList<Node> ol = grp.getChildren();
	ol.add(mypath);

	Rectangle r = new Rectangle(-2.0,-1.25,4.0,2.5);
	r.setFill(null);
	r.setStroke(Color.GREEN);
	r.setStrokeWidth(20/res);
	ol.add(r);


	parent.getChildren().add(grp);
	
	double xpos = -1.0, ypos = 0.0;
	grp.setTranslateX(xpos);
	grp.setTranslateY(-ypos);

   }

   void show_bounds(Group grp) {
	double xcen, ycen;
	Bounds b1 = grp.getBoundsInLocal();
	//System.out.println("BoundsInLocal: " + b1);
	xcen = 0.5*(b1.getMinX()+b1.getMaxX());
	ycen = 0.5*(b1.getMinY()+b1.getMaxY());
	System.out.format("\nBoundsInLocal: xcen %g ycen %g width %g height %g\n",
	xcen, ycen, b1.getWidth(), b1.getHeight());
	Bounds b2 = grp.getBoundsInParent();
	xcen = 0.5*(b2.getMinX()+b2.getMaxX());
	ycen = 0.5*(b2.getMinY()+b2.getMaxY());
	//System.out.println("BoundsInParent: " + b2);
	System.out.format("BoundsInParent: xcen %g ycen %g width %g height %g\n",
	xcen, ycen, b2.getWidth(), b2.getHeight());
   }


   void drawInductor(Group parent,double xpos, double ypos)
   {
	double[] xpts = {-2.75,-2.75,-1.25,-1.25,-1.25,-1.75,-1.75};
	double[] ypts = { 0.0,-2.0,-2.0, 0.0, 2.0, 2.0, 0.0};

	Group grp = new Group();
	double resc = 0.1;
	grp.setScaleX(resc);
	grp.setScaleY(resc);


	double res = parent.getScaleX();
	
	


	Path mypath = new Path();
	ObservableList<PathElement> p = mypath.getElements();
	p.add(new MoveTo(-3,0));
	p.add(new LineTo(-2.75,0));
	p.add(new CubicCurveTo(xpts[1],ypts[1],xpts[2],ypts[2],xpts[3],ypts[3]));
	p.add(new CubicCurveTo(xpts[4],ypts[4],xpts[5],ypts[5],xpts[6],ypts[6]));
	
	for (int n=0; n<4; n++) {
		for (int j=0; j<7; j++) xpts[j] += 1.0;
		p.add(new CubicCurveTo(xpts[1],ypts[1],xpts[2],ypts[2],xpts[3],ypts[3]));
		if (n<3) p.add(new CubicCurveTo(xpts[4],ypts[4],xpts[5],ypts[5],xpts[6],ypts[6]));
	}
	p.add(new LineTo(3,0));
	
	


	mypath.setFill(null);
	mypath.setStrokeWidth(20/res);
	mypath.setStroke(Color.GREEN);
 	mypath.setStrokeLineCap(StrokeLineCap.ROUND);

	ObservableList<Node> ol = grp.getChildren();
	ol.add(mypath);




	parent.getChildren().add(grp);

	grp.setTranslateX(xpos);
	grp.setTranslateY(-ypos);

	show_bounds(grp);
   }
}


Maintained by John Loomis, updated Thu Feb 08 16:18:30 2018