How does the entirePath function cope with variables in curvy
Hello,
I try to make cake pieces out of a circle with defined gaps between the cake pieces. The amount of pieces depend on what the user entered as number:
Below you see what I have. It makes cake oeices, but the connection between starting segment and ending segment is a straight line. Jongwares collection says:
entirePath:
A list of the coordinates of all of the path points on the path, including anchor points and left- and right-direction points. When creating a path using this property, supply either a list of anchor point coordinates ([[x1, y1], [x2, y2], ...]) or a list of anchor point, left-direction point, and right-direction point coordinates ([[[x1, y1], [x2, y2], [x3, y3]], [[x4, y4], [x5, y5], [x6, y6]], ...]). Note: Providing only anchor points results in a path on which all of the path points are connected with straight line segments; supplying the positions of left- and right-direction points specifies curved line segments. Can return: Array of Arrays of 2 Units.
I understand it like this:
if I want to have a straight line, you just give coordinates single points composing of x and y
e.g. for a triangle
var path = entirePath([ [x1, y1], [x2,y2], [x3,y3] ]);
if I want to have one curved line, you need to add the coordinates of the ends of the right and left handle to the points composing of x and y
e.g. for a triangle
var path = entirePath([ [x1, y1], [x2,y2], [ [x3_1,y3_1], [x3_2,y3_2], [x3_3,y3_3] ] ]);
Now I wrote in my example the variable myPath in line 62. And I get an error message marking line 63 "entirePath", no other information, I have no clue were the mistake is.
So if anybody has an idea were my mistake is, I would appreciate the help.
Best
Cleo
var myDocument = app.documents.add();
var myOutsideY1 = 70;
var myOutsideX1 = 210;
var myOutsideY2 = myOutsideY1+450;
var myOutsideX2 = myOutsideX1+450;
var myCircleOutside = myDocument.ovals.add({
geometricBounds: [myOutsideY1, myOutsideX1, myOutsideY2, myOutsideX2],
//fillColor: "Farbcode",
strokeWeight: 2,
//strokeColor: myBlack,
name: "outside"
});
var myInsideY1 = myOutsideY1+20;
var myInsideX1 = myOutsideX1+20;
var myInsideY2 = myInsideY1+410;
var myInsideX2 = myInsideX1+410;
var myCircleInside = myDocument.ovals.add({
geometricBounds: [myInsideY1, myInsideX1, myInsideY2, myInsideX2],
//fillColor: "Farbcode",
strokeWeight: 1,
//strokeColor: myBlack,
name: "inside"
});
// selecting the inner circle to split it in the right amount of FoFes
app.select( app.activeDocument.pageItems.item("inside"));
// asking for the amount of FoFes with the "prompt()" function
var myFoFe = prompt("Bitte geben Sie ein ganzzahlige Anzahl an Forschungsfeldern an: ");
// checking if something has to be entered and the number entered is higher than 1
if (myFoFe != null && myFoFe > 1){
// determining the different variables to calculate later the angles for the segments
var myGapSize = 4.5; // place between the FoFe segments
var myGapSpace = myGapSize*myFoFe; // how much space the gaps take in total
var myFoFeSize = (360-myGapSpace)/myFoFe; // 360° - all the degrees the gaps will take, calculating what is left for the FoFe segments
// alert(myFoFeSize, "myFoFeSize");
var myFoFeAngle = myFoFeSize*(Math.PI/180); // javascript is calculating in radians, that is why the angle has to be converted from degree to radians: radians = degrees * (Math.PI/180)
var myGapAngle = myGapSize*(Math.PI/180);
// determine the center and the radius of my selected circle
var myCircleCenter = [(app.selection[0].geometricBounds[3]+app.selection[0].geometricBounds[1])/2, (app.selection[0].geometricBounds[2]+app.selection[0].geometricBounds[0])/2];
var myCircleRadius = Math.max ((app.selection[0].geometricBounds[3]-app.selection[0].geometricBounds[1])/2, (app.selection[0].geometricBounds[2]-app.selection[0].geometricBounds[0])/2);
// alert(myCircleCenter, "myCircleCenter");
// alert(myCircleRadius, "myCircleRadius");
// generating the fragments
var myStartAngle = 0;
for (i=0; i<myFoFe; i++){ // the loop is going as often as FoFes were chosen
// alert(myFoFe, "tells how many times the for loop is running");
var myEndAngle = myStartAngle + myFoFeAngle;
// alert(myEndAngle, "myEndAngle");
// warning: math! (though this is SIMPLE compared to what I've bin doing today)
var mySegmentStart = [myCircleCenter[0] + myCircleRadius*Math.sin(myStartAngle), myCircleCenter[1] - myCircleRadius*Math.cos(myStartAngle)]; // coordinates for the end of the path which defines the start of the segment (this is just a point)
var mySegmentEnd = [myCircleCenter[0] + (myCircleRadius*Math.sin(myEndAngle)), myCircleCenter[1] - myCircleRadius*Math.cos(myEndAngle)];
// create surrounding border
var mySegmentBorder = app.activeDocument.graphicLines.add();
var myNinteeAngle = 90*(Math.PI/180);
var myPath = [myCircleCenter, [mySegmentStart, (myStartAngle+myNinteeAngle)], [mySegmentEnd, (myEndAngle - myNinteeAngle)]]; // noch dran hängen an "myPath"
mySegmentBorder.paths[0].entirePath = myPath;
mySegmentBorder.paths[0].pathType = PathType.CLOSED_PATH;
myStartAngle = myEndAngle + myGapAngle;
} // end of for-loop
// here naming all polygone (choose all items named "Polygon" and give them labels/names: poly1 - poly xy
} // end of if
else {alert("Die Zahl muss größer asein")};
| } // end of if |