The inductor is supposed to be centered at (0, 0) but it is not.
Command window output:
C:\ece538\circuit3>java MyGroup4t Inductor bounds BoundsInLocal: xcen 0.250000 ycen -0.375000 width 6.70833 height 3.45833 BoundsInParent: xcen 0.250000 ycen -0.375000 width 0.670833 height 0.345833 grid group bounds BoundsInLocal: xcen 0.00000 ycen 0.00000 width 9.01042 height 9.01042 BoundsInParent: xcen 200.000 ycen 200.000 width 865.000 height 865.000
Note that 96 * 9.01042 = 865;
MyGroup4t.javaimport 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 MyGroup4t 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);
drawGrid(grp);
Capacitor2 c1 = new Capacitor2();
c1.draw(grp);
c1.setPosition(0.0,1.0);
Capacitor2 c2 = new Capacitor2();
c2.clr = Color.BLUE;
c2.draw(grp);
c2.setAngle(30.0);
c2.setPosition(1.0,0.0);
drawResistor(grp);
drawInductor(grp);
// show group structure
/*
ObservableList<Node> ol = grp.getChildren();
for (Node n: ol) System.out.println(n);
int ng = 5;
try {
if (Class.forName("javafx.scene.Group").isInstance(ol.get(ng))) System.out.println("We are a group object");
}
catch (Exception e) {
System.out.println(e);
}
Group g = (Group) ol.get(ng);
ol = g.getChildren();
System.out.format("\nGroup %d:",ng);
for (Node n: ol) System.out.println(n);
*/
System.out.println("\ngrid group bounds");
show_bounds(grp);
stage.setTitle("MyGroup4 Test");
stage.setScene(scene);
stage.show();
}
public void drawGrid(Group grp) {
double res = grp.getScaleX();
ObservableList<Node> ol = grp.getChildren();
Color c = Color.rgb(220,200,255);
double u = 4.0;
Path p1 = new Path();
ObservableList<PathElement> p = p1.getElements();
for (int i=-4; i<=4; i++) {
double v = i;
p.add(new MoveTo(-u,v));
p.add(new LineTo(u,v));
p.add(new MoveTo(v,-u));
p.add(new LineTo(v,u));
}
p1.setStrokeWidth(1.0/res);
p1.setStroke(c);
ol.add(p1);
// locate origin
Path p2 = new Path();
p = p2.getElements();
u = 0.05;
p.add(new MoveTo(-u,u));
p.add(new LineTo(u,-u));
p.add(new MoveTo(-u,-u));
p.add(new LineTo(u,u));
p2.setStrokeWidth(1.0/res);
ol.add(p2);
}
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 drawResistor(Group parent)
{
double w = 2.5/7.0;
double y = 1.25;
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(-6*w,0));
p.add(new LineTo(-5*w,-y));
p.add(new LineTo(-3*w,y));
p.add(new LineTo(-w,-y));
p.add(new LineTo(w,y));
p.add(new LineTo(3*w,-y));
p.add(new LineTo(5*w,y));
p.add(new LineTo(6*w,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);
parent.getChildren().add(grp);
double xpos = -1.0, ypos = 0.0;
grp.setTranslateX(xpos);
grp.setTranslateY(-ypos);
}
void drawInductor(Group parent)
{
double[] xpts = {-2.5,-2.5,-1.0,-1.0,-1.0,-1.5,-1.5};
double[] ypts = { 0.0,-2.0,-2.0, 0.0, 1.0, 1.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(-2.5,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]));
}
mypath.setStrokeWidth(20/res);
mypath.setStroke(Color.GREEN);
mypath.setStrokeLineCap(StrokeLineCap.ROUND);
ObservableList<Node> ol = grp.getChildren();
ol.add(mypath);
System.out.println("\nInductor bounds");
show_bounds(grp);
parent.getChildren().add(grp);
double xpos = 0.0, ypos = 0.0;
grp.setTranslateX(xpos);
grp.setTranslateY(-ypos);
}
}
Maintained by John Loomis, updated Thu Feb 08 15:02:26 2018