Knowledge Base - Export an Ink annotation and recreate it from path

If you want to export an Ink annotation and then re-create it from path, you can use the following as a guide:

private ArrayList<Point> exportInk(Page.Annotation annotation) {
if (annotation != null && annotation.GetType() == 15) {
Path inkPath = annotation.GetInkPath();
float pt1[] = new float[2];
float pt2[] = new float[2];
int index = 0;
if (inkPath != null) {
ArrayList<Point> inkPoints = new ArrayList<Point>();
int cnt = inkPath.GetNodeCount();

while (index < cnt) {
int op = inkPath.GetNode(index, pt1);
switch (op) {
case 1: //line to
inkPoints.add(new Point(op, pt1[0], pt1[1]));
index++;
break;
case 2: //curve to
inkPath.GetNode(index + 1, pt2);
float pt3[] = new float[2];
inkPath.GetNode(index + 2, pt3);
inkPoints.add(new Point(op, pt1[0], pt1[1], pt2[0], pt2[1], pt3[0], pt3[1]));
index += 3;
break;
default: //move to
inkPoints.add(new Point(op, pt1[0], pt1[1]));
index++;
break;
}
}
inkPath.Destroy();

return inkPoints;
}
}
return null;
}

private void createInk(ArrayList<Point> inkPoints) {
if(inkPoints != null) {
Ink mInk = new Ink(Global.inkWidth / m_layout.vGetScale());

for(int i = 0 ; i < inkPoints.size() ; i++) {
Point point = inkPoints.get(i);
switch(point.type) {
case 1: //line to
mInk.OnMove(point.x, point.y);
break;
case 0: //move to
mInk.OnDown(point.x, point.y);
break;
}
}

Page page = m_doc.GetPage(m_pageno); //TODO set pageno according to requirements
if (page != null) {
page.ObjsStart();
page.AddAnnotInk(mInk);
page.Close();
}
mInk.Destroy();
//m_layout.vRenderSync(m_layout.vGetPage(m_pageno));
}
}

Point:

public class Point {

private int type;

private float x;
private float x2;
private float x3;

private float y;
private float y2;
private float y3;

public Point(int type, float x, float y) {
this.type = type;
this.x = x;
this.y = y;
}

public Point(int type, float x, float y, float x2, float y2, float x3, float y3) {
this.type = type;
this.x = x;
this.x2 = x2;
this.x3 = x3;
this.y = y;
this.y2 = y2;
this.y3 = y3;
}

public int getType() {
return type;
}

public void setType(int type) {
this.type = type;
}

public float getX() {
return x;
}

public void setX(float x) {
this.x = x;
}

public float getY() {
return y;
}

public void setY(float y) {
this.y = y;
}
} 
Applies To

RadaeePDF SDK for Android

Details

Created : 2017-01-05 12:30:15, Last Modified : 2017-02-27 08:24:23