Quantcast
Channel: Adobe Community : All Content - FrameMaker Scripting
Viewing all articles
Browse latest Browse all 888

ESTK - draw a graphic

$
0
0

Dear all,

After the first step (drawing a single line) I now try to draw a polyline. But i have no success:

  • Obviously the defintion for the points is not correct
  • Same is for the defintion of the dash pattern.

I tried to interprete the the FDK reference and the Scripting Guide - but I fail to transfer these definitions to JS data types.

FDK reference

F_PointsT: describes a set of coordinate pairs. It is normally used to describe the vertices of a graphic object, such as a polyline or polygon.

typedef struct {   UIntT len;     /* Number of coordinate pairs */   F_PointT *val; /* Vector of coordinate pairs */
} F_PointsT;

 

Dash: Data type Metrics. Specifies a dash pattern that is repeated for the length of an object's border. The

pattern is stored in a MetricsT structure. The 0th element of the MetricsT.MetricsT_val array stores the length of the first dash; the 1st element

stores the following space; the 2nd element stores the next dash; and so on for an even number of elements.

Metrics: Under this heading some functions to handle metrics are given, but no explanation. I do not find a useful definition.

MetricsT structure: defined as

typedef struct {   UIntT len;    /* Number of metric values*/   MetricT *val; /* Array of metric values */
} F_MetricsT;

 

Scripting Guide

Points: An Array of Point objects with integer indexing and a length property.

Point: is described just as two integer values x and y.

Dash: Same text as in FDK

Metrics: An Array of objects with integer indexing and a length property. ➔ what kind of objects?

 

This is my script

#target framemaker
var oDoc = app.ActiveDoc, cm = 1857713;
Main(oDoc);

function Main(oDoc) {
var oFrame, oLine1, oPoly1;
  if (!oDoc.ObjectValid()) {    alert ("A document must be active.");    return;  }    oFrame = oDoc.FirstSelectedGraphicInDoc;  if (!oFrame.ObjectValid()) {    alert ("An anchored frame must be selected.");    return;  }  oPoly1  = DrawPoly(oDoc, oFrame);
}

function DrawPoly(oDoc, oFrame) {
var j, jLast, k, oPoly = oDoc.NewPolyline(oFrame), oPoints = [4, 1, 6, 2, 8, 1, 10, 2];
  jLast = oPoints.length-1;                       // last index  for (j = 0; j <= jLast; j++) {                  // convert into internal units    oPoints [j] = oPoints [j] * cm;  }  oPoly.PolyIsBezier = 0;                         // 0: unsmooth; 1: smooth ?  oPoly.BorderWidth = 0.05*cm;                    // Stroke-width  oPoly.LocX = oPoints[0];                        // otherwise has  oPoly.LocY = oPoints[1];                        // precedence over 1st point  oPoly.Points = oPoints;  oPoly.Width = oPoints[jLast-1] - oPoints[0];    // object dimensions  oPoly.Height= oPoints[jLast] - oPoints[1];      // default : 1/4"  oPoly.Fill  = 15;                               // Pattern: 0: filled, 7: white, 15: clear  oPoly.Color = 0;                                // black?   oPoly.Dash  = [cm, 0.5, 0.5, 0.2, 0.2];         // ?  return oPoly;
}

And this is the output

The red item is what I want to achieve and the black is what the script produces.

polyline1.png


Viewing all articles
Browse latest Browse all 888

Trending Articles