Jump to content
You must now use your email address to sign in [click for more info] ×

Recommended Posts

Hi,

 

what are the chances to receive the option to export Vector shapes into Shapes for Apple Motion?

This is a option I would love to see, which would push me away further from Adobe Illustrator.

 

We create most of our Logos in Illustrator and run a script to export the vector shapes for Apple Motion.

 

 

This would be a great feature for motion graphic artist that use Apple Motion!

 

Thanks

Link to comment
Share on other sites

We're definitely not averse to considering things... I thought that some of our users had already got their data into Motion though? What file formats does it accept? Is there not an SVG or EPS import option?

 

Thanks! :)

Matt

 

Unfortunately Motion accepts only PDF data, and cannot be edited.

You need a .MOTN file to properly use node key framing, strokes, fills, etc...

With AI CS6 I used this script found somewhere... Probably the same used by Scrubelicious.

 

It basically translates Adobe XML to Apple XML (I suppose...)

Not tried with CC 2014 yet...

function newFile(msg) {
	var filename = prompt(msg, "Untitled", "Name Your Shape");
	if (filename != null) {
		motn_file = new File("~/Desktop/" + filename + ".motn");
		if (motn_file.exists) {
			motn_file = newFile("There is already a file by that name on your Desktop.  Please try another name.");
		}
		return motn_file;
	}
	else {
		return null;
	}		
}

mySelection = app.activeDocument.selection;
 if (mySelection instanceof Array) {
 	if (mySelection.length > 1) {
 		alert("Multiple Selection\nYou have more than one item selected.  Only the first object will be exported.");
 	}
 	else {
		theObject = mySelection[0];
		if (theObject.typename != "PathItem") {
			if (theObject.typename == "GroupItem") {
				alert("Type Error\nThe selected item is a group.  This script can only export path items.  Please ungroup and try again.");
			}
			else if (theObject.typename == "CompoundPathItem") {
				alert("Type Error\nThe selected item is a compound path.  This script can only export path items.  Please release to layers, select the resultant path and try again.");
			}
			else {
				alert("Type Error\nThe selected item is a " + theObject.typename + ", not a path item.  Please select a path item and try again.");
			}
		}
		else {
			if (theObject.closed == true) {
				closedFlag = 1;
			}
			else {
				closedFlag = 0;
			}
			if (theObject.filled == true) {
				fillFlag = 135248;
				if (theObject.fillColor.typename == "CMYKColor") {
					fillRed = 1 - ((theObject.fillColor.cyan/100) * (1 - theObject.fillColor.black/100) + theObject.fillColor.black/100);
					fillGreen = 1 - ((theObject.fillColor.magenta/100) * (1 - theObject.fillColor.black/100) + theObject.fillColor.black/100);
					fillBlue = 1 - ((theObject.fillColor.yellow/100) * (1 - theObject.fillColor.black/100) + theObject.fillColor.black/100);
				}
				else {
					fillRed = theObject.fillColor.red / 255;
					fillGreen = theObject.fillColor.green / 255;
					fillBlue = theObject.fillColor.blue / 255;
				}
			}
			else {
				fillFlag = 168016;
				fillRed = 1;
				fillGreen = 1;
				fillBlue = 1;
			}
			if (theObject.stroked == true) {
				strokeFlag = 135248;
				if (theObject.strokeColor.typename == "CMYKColor") {
					strokeRed = 1 - ((theObject.strokeColor.cyan/100) * (1 - theObject.strokeColor.black/100) + theObject.strokeColor.black/100);
					strokeGreen = 1 - ((theObject.strokeColor.magenta/100) * (1 - theObject.strokeColor.black/100) + theObject.strokeColor.black/100);
					strokeBlue = 1 - ((theObject.strokeColor.yellow/100) * (1 - theObject.strokeColor.black/100) + theObject.strokeColor.black/100);
				}
				else {
					strokeRed = theObject.strokeColor.red / 255;
					strokeGreen = theObject.strokeColor.green / 255;
					strokeBlue = theObject.strokeColor.blue / 255;
				}
				strokeWidth = theObject.strokeWidth + 1;
			}
			else {
				strokeFlag = 168016;
				strokeWidth = 1;
				strokeRed = 1;
				strokeGreen = 1;
				strokeBlue = 1;
			}
			if (theObject.strokeJoin == "StrokeJoin.MITERENDJOIN") {
				strokeType = 0;
			}
			else if (theObject.strokeJoin == "StrokeJoin.ROUNDENDJOIN") {
				strokeType = 1;
			}
			else if (theObject.strokeJoin == "StrokeJoin.BEVELENDJOIN") {
				strokeType = 2;
			}
			xrange = new Array;
			yrange = new Array;
			for (i = 0; i < theObject.pathPoints.length; i++) {
				xrange[i] = theObject.pathPoints[i].anchor[0];
				yrange[i] = theObject.pathPoints[i].anchor[1];
			}
			xrange.sort();
			xmin = xrange[0];
			xmax = xrange.pop();
			xcenter = xmin + (xmax-xmin)/2;
			yrange.sort();
			ymin = yrange[0];
			ymax = yrange.pop();
			ycenter = ymin + (ymax-ymin)/2;
			xlist = new Array();
			ylist = new Array();
			for (i = 0; i < theObject.pathPoints.length; i++) {
				xitem = new Array();
				yitem = new Array();
				xitem[0] = theObject.pathPoints[i].anchor[0] - xcenter;
				xitem[1] = theObject.pathPoints[i].leftDirection[0] - theObject.pathPoints[i].anchor[0];
				xitem[2] = theObject.pathPoints[i].rightDirection[0] - theObject.pathPoints[i].anchor[0];
				xlist[i] = xitem;
				yitem[0] = theObject.pathPoints[i].anchor[1] - ycenter;
				yitem[1] = theObject.pathPoints[i].leftDirection[1] - theObject.pathPoints[i].anchor[1];
				yitem[2] = theObject.pathPoints[i].rightDirection[1] - theObject.pathPoints[i].anchor[1];
				ylist[i] = yitem;
			}
			output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\
<!DOCTYPE ozxmlscene>\n\
<ozml version=\"1.0\">\n\
<factory id=\"1\" uuid=\"712462a4323911d78f8400039389b702\">\n\
	<description>Shape</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"2\" uuid=\"27f3ee8b229211d7925a00039389b702\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"3\" uuid=\"878a64bd193011d8bac3000a95af9f7e\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"4\" uuid=\"69f1e0a52e7911d8b19a000a95b0025a\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"5\" uuid=\"7644521e2e7911d891a6000a95b0025a\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"6\" uuid=\"10405f52139811d8b4db000a95af9f7e\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\
</factory>\n\
<factory id=\"7\" uuid=\"0e8d443513b611d89395000a95af9f7e\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<primaryObjects>\n\
	<id>10002</id>\n\
</primaryObjects>\n\
<primaryFactories>\n\
	<id>1</id>\n\
</primaryFactories>\n\
<scenenode name=\"Shape\" id=\"10002\" factoryID=\"1\">\n\
	<curve_X>\n";
			for (i = 0; i < xlist.length; i++) {
				output = output + "<vertex index=\"" + i + "\" flags=\"40\">\n\
				<vertex_folder name=\"Vertex\" id=\"" + (i+10) + "\" flags=\"69712\">\n\
					<parameter name=\"Enabled\" id=\"1\" flags=\"65616\" value=\"1\"/>\n\
					<parameter name=\"Value\" id=\"2\" flags=\"65616\" value=\"" + xlist[i][0] + "\"/>\n\
					<parameter name=\"Bias\" id=\"3\" flags=\"65616\" value=\"1\"/>\n\
					<parameter name=\"Input Tangent\" id=\"4\" flags=\"65616\" value=\"" + xlist[i][1] + "\"/>\n\
					<parameter name=\"Output Tangent\" id=\"5\" flags=\"65616\" value=\"" + xlist[i][2] + "\"/>\n\
				</vertex_folder>\n\
			</vertex>\n";
			}
			output = output + "</curve_X>\n\
			<curve_Y>\n";
			for (i = 0; i < ylist.length; i++) {
				output = output + " \
				<vertex index=\"" + i + "\" flags=\"40\">\n\
				<vertex_folder name=\"Vertex\" id=\"" + (i+20) + "\" flags=\"69712\">\n\
					<parameter name=\"Enabled\" id=\"1\" flags=\"65616\" value=\"1\"/>\n\
					<parameter name=\"Value\" id=\"2\" flags=\"65616\" value=\"" + ylist[i][0] + "\"/>\n\
					<parameter name=\"Bias\" id=\"3\" flags=\"65616\" value=\"1\"/>\n\
					<parameter name=\"Input Tangent\" id=\"4\" flags=\"65616\" value=\"" + ylist[i][1] + "\"/>\n\
					<parameter name=\"Output Tangent\" id=\"5\" flags=\"65616\" value=\"" + ylist[i][2] + "\"/>\n\
				</vertex_folder>\n\
			</vertex>\n";
			}
			output = output + "	</curve_Y>\n\
	<override>0</override>\n\
	<aspectRatio>0.9</aspectRatio>\n\
	<ignoreBehaviorsBeforeID>0</ignoreBehaviorsBeforeID>\n\
	<flags>0</flags>\n\
	<timing in=\"0\" out=\"299\" offset=\"0\"/>\n\
	<foldFlags>0</foldFlags>\n\
	<baseFlags>524369</baseFlags>\n\
	<parameter name=\"Object\" id=\"2\" flags=\"4176\">\n\
		<parameter name=\"Shape Animation\" id=\"317\" flags=\"80\" value=\"0\"/>\n\
		<parameter name=\"Shape Type\" id=\"300\" flags=\"65616\" value=\"1\"/>\n\
		<parameter name=\"Closed\" id=\"316\" flags=\"65616\" value=\"" + closedFlag + "\"/>\n\
		<parameter name=\"Fill\" id=\"313\" flags=\"" + fillFlag + "\">\n\
			<parameter name=\"Fill Mode\" id=\"314\" flags=\"65616\" value=\"0\"/>\n\
			<parameter name=\"Fill Color\" id=\"311\" flags=\"4176\">\n\
				<parameter name=\"Red\" id=\"1\" flags=\"80\" value=\"" + fillRed + "\"/>\n\
				<parameter name=\"Green\" id=\"2\" flags=\"80\" value=\"" + fillGreen + "\"/>\n\
				<parameter name=\"Blue\" id=\"3\" flags=\"80\" value=\"" + fillBlue + "\"/>\n\
			</parameter>\n\
		</parameter>\n\
		<parameter name=\"Outline\" id=\"308\" flags=\"" + strokeFlag + "\">\n\
			<parameter name=\"Outline Color\" id=\"307\" flags=\"4176\">\n\
				<parameter name=\"Red\" id=\"1\" flags=\"80\" value=\"" + strokeRed + "\"/>\n\
				<parameter name=\"Green\" id=\"2\" flags=\"80\" value=\"" + strokeGreen + "\"/>\n\
				<parameter name=\"Blue\" id=\"3\" flags=\"80\" value=\"" + strokeBlue + "\"/>\n\
			</parameter>\n\
			<parameter name=\"Width\" id=\"305\" flags=\"80\" value=\"" + strokeWidth + "\"/>\n\
			<parameter name=\"Joint\" id=\"312\" flags=\"65616\" value=\"" + strokeType + "\"/>\n\
			<parameter name=\"Joint\" id=\"319\" flags=\"65618\" value=\"1\"/>\n\
			<parameter name=\"Order\" id=\"306\" flags=\"65616\" value=\"0\"/>\n\
		</parameter>\n\
	</parameter>\n\
</scenenode>\n\
</ozml>";
		//motn_file = File.saveDialog("Select where to save the Motion file");
		motn_file = newFile("Please enter a name for the shape file.  It will be placed on your Desktop.");
		if (motn_file != null) {
			motn_file.open("w", "mofo", "motn");
			motn_file.write(output);
			foo = motn_file.close();
			if (foo == true) {
				alert("Export Successful\nAll done!");
			}
		}
	}
	}
 }      
 else {          
 	alert("You do not have a path object selected.");
 }

The white dog, making tools for artists, illustrators and doodlers

Link to comment
Share on other sites

Great topic! I'm using Motion and Blender and have my head stuck into HitFilm, Natron, and AD. Was thinking that I'd just export PNGs from AD and bring them into Motion or HitFilm OR bring exported SVG files into Blender in order to make AD part of my burgeoning Motion Graphics/Animation workflow. If all else fails, I'm running Freehand MX in wine on one of my Macs and on my PC (using the Windows version to keep parity going back and forth)...

 

Affinity, I know it's wishful thinking at this point with as much as you guys have in front of you, BUT in about 3 years down the line...I hope you might be thinking about a Motion Graphics tool. I know it's a lot to ask (and I've never used MoviePlus) but, looking at how well you've implemented Designer, I think you could knock it out of the park with a Motion Graphics tool that could directly import AD and APhoto files.

 

Or maybe you could talk to FXHome (HitFilm) about devising an importer for AD files.

 

Just a thought...

Link to comment
Share on other sites

  • Staff

Hmmm, interesting to see that script Paolo, thanks :) I'm sure we could get a very basic support quite easily - but people would expect it to be far more than basic if we officially tried to support it, and that may prove to be very time-consuming... Perhaps it's something we can consider for the future...

Link to comment
Share on other sites

I know its not like importing a vector shape layer but you can import a PSD inside of motion Unfortunately, the layer import that it speaks of does not seem to work with AD PSD export.

 

Add a layered Photoshop file using the drop menu
  1. Drag a layered Photoshop file from the File Browser into the Canvas, Layers list, or Timeline.

  2. Before releasing the mouse button, pause until the Canvas drop menu appears and the pointer becomes curved.

    This menu presents commands for importing the layered file.

  3. Continuing to hold down the mouse button, drag the curved pointer over a command in the drop menu, and when the menu item is highlighted, release the mouse button.

    The layers of the Photoshop file are added using the command you choose.

    The Canvas drop menu has the following options:

    • Import Merged Layers: All layers of the Photoshop file are collapsed into a single Motion layer.

    • Import All Layers: A group is created, and each layer of the Photoshop file is preserved as a separate Motion layer in this new group.

    • [individual layers]: Each layer in the Photoshop file appears as a separate item in the drop menu. Selecting a layer adds only that layer to the project, where it appears as a single Motion layer.

Note:   When a Photoshop file contains more layers than can be displayed in the drop menu, the Choose Layer option appears in the drop menu. After you click the Choose Layer option, the Pick Layer to Import dialog appears.
Link to comment
Share on other sites

  • Staff

AD PSD export has been improved and fixed in the last Beta.  There were a couple of problems that only affected certain importers.

 

As a baseline, I'm only testing whether PSDs exported form AD will load into PS.  Beyond that, it will depend upon the quality of the PSD importer for the other apps.  The PSD file format is hideous, so I can imagine that other developers had similar trouble trying to decide how to handle some of the more recent features.  There are still a couple of poorly documented bits that I am trying to decipher.

SerifLabs team - Affinity Developer
  • Software engineer  -  Photographer  -  Guitarist  -  Philosopher
  • iMac 27" Retina 5K (Late 2015), 4.0GHz i7, AMD Radeon R9 M395
  • MacBook (Early 2015), 1.3GHz Core M, Intel HD 5300
  • iPad Pro 10.5", 256GB
Link to comment
Share on other sites

Thx Znak. This very interesting.I did not know this existed. i going to have to give this a try.

Link to comment
Share on other sites

  • 2 months later...

Hello,

 
It would be wonderful AD and AP could work with Apple Motion 5. Same After Effect with Illustrator.
 
Currently on the website of Mark Spencer, there is a plugin to convert Illustrator vectors into an editable format for Motion 5.
 
 
(Sorry, no English. I used Google Translate)
 
Castellano:
 
Hola,
 
Sería maravilloso que AD y AP pudieran trabajar con Apple Motion 5. Igual que After Effect con Illustrator.
 
Actualmente en la pagina web de Mark Spencer, existe un plugin para convertir los vectores de Illustrator en un formato editable para Motion 5.
Link to comment
Share on other sites

  • 4 weeks later...

 

Unfortunately Motion accepts only PDF data, and cannot be edited.

You need a .MOTN file to properly use node key framing, strokes, fills, etc...

With AI CS6 I used this script found somewhere... Probably the same used by Scrubelicious.

 

It basically translates Adobe XML to Apple XML (I suppose...)

Not tried with CC 2014 yet...

function newFile(msg) {
	var filename = prompt(msg, "Untitled", "Name Your Shape");
	if (filename != null) {
		motn_file = new File("~/Desktop/" + filename + ".motn");
		if (motn_file.exists) {
			motn_file = newFile("There is already a file by that name on your Desktop.  Please try another name.");
		}
		return motn_file;
	}
	else {
		return null;
	}		
}

mySelection = app.activeDocument.selection;
 if (mySelection instanceof Array) {
 	if (mySelection.length > 1) {
 		alert("Multiple Selection\nYou have more than one item selected.  Only the first object will be exported.");
 	}
 	else {
		theObject = mySelection[0];
		if (theObject.typename != "PathItem") {
			if (theObject.typename == "GroupItem") {
				alert("Type Error\nThe selected item is a group.  This script can only export path items.  Please ungroup and try again.");
			}
			else if (theObject.typename == "CompoundPathItem") {
				alert("Type Error\nThe selected item is a compound path.  This script can only export path items.  Please release to layers, select the resultant path and try again.");
			}
			else {
				alert("Type Error\nThe selected item is a " + theObject.typename + ", not a path item.  Please select a path item and try again.");
			}
		}
		else {
			if (theObject.closed == true) {
				closedFlag = 1;
			}
			else {
				closedFlag = 0;
			}
			if (theObject.filled == true) {
				fillFlag = 135248;
				if (theObject.fillColor.typename == "CMYKColor") {
					fillRed = 1 - ((theObject.fillColor.cyan/100) * (1 - theObject.fillColor.black/100) + theObject.fillColor.black/100);
					fillGreen = 1 - ((theObject.fillColor.magenta/100) * (1 - theObject.fillColor.black/100) + theObject.fillColor.black/100);
					fillBlue = 1 - ((theObject.fillColor.yellow/100) * (1 - theObject.fillColor.black/100) + theObject.fillColor.black/100);
				}
				else {
					fillRed = theObject.fillColor.red / 255;
					fillGreen = theObject.fillColor.green / 255;
					fillBlue = theObject.fillColor.blue / 255;
				}
			}
			else {
				fillFlag = 168016;
				fillRed = 1;
				fillGreen = 1;
				fillBlue = 1;
			}
			if (theObject.stroked == true) {
				strokeFlag = 135248;
				if (theObject.strokeColor.typename == "CMYKColor") {
					strokeRed = 1 - ((theObject.strokeColor.cyan/100) * (1 - theObject.strokeColor.black/100) + theObject.strokeColor.black/100);
					strokeGreen = 1 - ((theObject.strokeColor.magenta/100) * (1 - theObject.strokeColor.black/100) + theObject.strokeColor.black/100);
					strokeBlue = 1 - ((theObject.strokeColor.yellow/100) * (1 - theObject.strokeColor.black/100) + theObject.strokeColor.black/100);
				}
				else {
					strokeRed = theObject.strokeColor.red / 255;
					strokeGreen = theObject.strokeColor.green / 255;
					strokeBlue = theObject.strokeColor.blue / 255;
				}
				strokeWidth = theObject.strokeWidth + 1;
			}
			else {
				strokeFlag = 168016;
				strokeWidth = 1;
				strokeRed = 1;
				strokeGreen = 1;
				strokeBlue = 1;
			}
			if (theObject.strokeJoin == "StrokeJoin.MITERENDJOIN") {
				strokeType = 0;
			}
			else if (theObject.strokeJoin == "StrokeJoin.ROUNDENDJOIN") {
				strokeType = 1;
			}
			else if (theObject.strokeJoin == "StrokeJoin.BEVELENDJOIN") {
				strokeType = 2;
			}
			xrange = new Array;
			yrange = new Array;
			for (i = 0; i < theObject.pathPoints.length; i++) {
				xrange[i] = theObject.pathPoints[i].anchor[0];
				yrange[i] = theObject.pathPoints[i].anchor[1];
			}
			xrange.sort();
			xmin = xrange[0];
			xmax = xrange.pop();
			xcenter = xmin + (xmax-xmin)/2;
			yrange.sort();
			ymin = yrange[0];
			ymax = yrange.pop();
			ycenter = ymin + (ymax-ymin)/2;
			xlist = new Array();
			ylist = new Array();
			for (i = 0; i < theObject.pathPoints.length; i++) {
				xitem = new Array();
				yitem = new Array();
				xitem[0] = theObject.pathPoints[i].anchor[0] - xcenter;
				xitem[1] = theObject.pathPoints[i].leftDirection[0] - theObject.pathPoints[i].anchor[0];
				xitem[2] = theObject.pathPoints[i].rightDirection[0] - theObject.pathPoints[i].anchor[0];
				xlist[i] = xitem;
				yitem[0] = theObject.pathPoints[i].anchor[1] - ycenter;
				yitem[1] = theObject.pathPoints[i].leftDirection[1] - theObject.pathPoints[i].anchor[1];
				yitem[2] = theObject.pathPoints[i].rightDirection[1] - theObject.pathPoints[i].anchor[1];
				ylist[i] = yitem;
			}
			output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\
<!DOCTYPE ozxmlscene>\n\
<ozml version=\"1.0\">\n\
<factory id=\"1\" uuid=\"712462a4323911d78f8400039389b702\">\n\
	<description>Shape</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"2\" uuid=\"27f3ee8b229211d7925a00039389b702\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"3\" uuid=\"878a64bd193011d8bac3000a95af9f7e\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"4\" uuid=\"69f1e0a52e7911d8b19a000a95b0025a\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"5\" uuid=\"7644521e2e7911d891a6000a95b0025a\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<factory id=\"6\" uuid=\"10405f52139811d8b4db000a95af9f7e\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\
</factory>\n\
<factory id=\"7\" uuid=\"0e8d443513b611d89395000a95af9f7e\">\n\
	<description>Channel</description>\n\
	<manufacturer>Apple</manufacturer>\n\
	<version>1</version>\n\
</factory>\n\
<primaryObjects>\n\
	<id>10002</id>\n\
</primaryObjects>\n\
<primaryFactories>\n\
	<id>1</id>\n\
</primaryFactories>\n\
<scenenode name=\"Shape\" id=\"10002\" factoryID=\"1\">\n\
	<curve_X>\n";
			for (i = 0; i < xlist.length; i++) {
				output = output + "<vertex index=\"" + i + "\" flags=\"40\">\n\
				<vertex_folder name=\"Vertex\" id=\"" + (i+10) + "\" flags=\"69712\">\n\
					<parameter name=\"Enabled\" id=\"1\" flags=\"65616\" value=\"1\"/>\n\
					<parameter name=\"Value\" id=\"2\" flags=\"65616\" value=\"" + xlist[i][0] + "\"/>\n\
					<parameter name=\"Bias\" id=\"3\" flags=\"65616\" value=\"1\"/>\n\
					<parameter name=\"Input Tangent\" id=\"4\" flags=\"65616\" value=\"" + xlist[i][1] + "\"/>\n\
					<parameter name=\"Output Tangent\" id=\"5\" flags=\"65616\" value=\"" + xlist[i][2] + "\"/>\n\
				</vertex_folder>\n\
			</vertex>\n";
			}
			output = output + "</curve_X>\n\
			<curve_Y>\n";
			for (i = 0; i < ylist.length; i++) {
				output = output + " \
				<vertex index=\"" + i + "\" flags=\"40\">\n\
				<vertex_folder name=\"Vertex\" id=\"" + (i+20) + "\" flags=\"69712\">\n\
					<parameter name=\"Enabled\" id=\"1\" flags=\"65616\" value=\"1\"/>\n\
					<parameter name=\"Value\" id=\"2\" flags=\"65616\" value=\"" + ylist[i][0] + "\"/>\n\
					<parameter name=\"Bias\" id=\"3\" flags=\"65616\" value=\"1\"/>\n\
					<parameter name=\"Input Tangent\" id=\"4\" flags=\"65616\" value=\"" + ylist[i][1] + "\"/>\n\
					<parameter name=\"Output Tangent\" id=\"5\" flags=\"65616\" value=\"" + ylist[i][2] + "\"/>\n\
				</vertex_folder>\n\
			</vertex>\n";
			}
			output = output + "	</curve_Y>\n\
	<override>0</override>\n\
	<aspectRatio>0.9</aspectRatio>\n\
	<ignoreBehaviorsBeforeID>0</ignoreBehaviorsBeforeID>\n\
	<flags>0</flags>\n\
	<timing in=\"0\" out=\"299\" offset=\"0\"/>\n\
	<foldFlags>0</foldFlags>\n\
	<baseFlags>524369</baseFlags>\n\
	<parameter name=\"Object\" id=\"2\" flags=\"4176\">\n\
		<parameter name=\"Shape Animation\" id=\"317\" flags=\"80\" value=\"0\"/>\n\
		<parameter name=\"Shape Type\" id=\"300\" flags=\"65616\" value=\"1\"/>\n\
		<parameter name=\"Closed\" id=\"316\" flags=\"65616\" value=\"" + closedFlag + "\"/>\n\
		<parameter name=\"Fill\" id=\"313\" flags=\"" + fillFlag + "\">\n\
			<parameter name=\"Fill Mode\" id=\"314\" flags=\"65616\" value=\"0\"/>\n\
			<parameter name=\"Fill Color\" id=\"311\" flags=\"4176\">\n\
				<parameter name=\"Red\" id=\"1\" flags=\"80\" value=\"" + fillRed + "\"/>\n\
				<parameter name=\"Green\" id=\"2\" flags=\"80\" value=\"" + fillGreen + "\"/>\n\
				<parameter name=\"Blue\" id=\"3\" flags=\"80\" value=\"" + fillBlue + "\"/>\n\
			</parameter>\n\
		</parameter>\n\
		<parameter name=\"Outline\" id=\"308\" flags=\"" + strokeFlag + "\">\n\
			<parameter name=\"Outline Color\" id=\"307\" flags=\"4176\">\n\
				<parameter name=\"Red\" id=\"1\" flags=\"80\" value=\"" + strokeRed + "\"/>\n\
				<parameter name=\"Green\" id=\"2\" flags=\"80\" value=\"" + strokeGreen + "\"/>\n\
				<parameter name=\"Blue\" id=\"3\" flags=\"80\" value=\"" + strokeBlue + "\"/>\n\
			</parameter>\n\
			<parameter name=\"Width\" id=\"305\" flags=\"80\" value=\"" + strokeWidth + "\"/>\n\
			<parameter name=\"Joint\" id=\"312\" flags=\"65616\" value=\"" + strokeType + "\"/>\n\
			<parameter name=\"Joint\" id=\"319\" flags=\"65618\" value=\"1\"/>\n\
			<parameter name=\"Order\" id=\"306\" flags=\"65616\" value=\"0\"/>\n\
		</parameter>\n\
	</parameter>\n\
</scenenode>\n\
</ozml>";
		//motn_file = File.saveDialog("Select where to save the Motion file");
		motn_file = newFile("Please enter a name for the shape file.  It will be placed on your Desktop.");
		if (motn_file != null) {
			motn_file.open("w", "mofo", "motn");
			motn_file.write(output);
			foo = motn_file.close();
			if (foo == true) {
				alert("Export Successful\nAll done!");
			}
		}
	}
	}
 }      
 else {          
 	alert("You do not have a path object selected.");
 }

Anyone able to do this in HTML and JavaScript?

Link to comment
Share on other sites

  • 3 months later...
  • 1 month later...
  • 1 month later...
  • Staff

I've recently made some fixes to PSD export that should improve import to FCP X and Motion.  They should be in the current Beta for Designer and Photo.

 

Aside from that - I know FCP X only handles raster layers from a PSD.  What can Motion handle?  We export vector shapes and masks to PSD where possible.

SerifLabs team - Affinity Developer
  • Software engineer  -  Photographer  -  Guitarist  -  Philosopher
  • iMac 27" Retina 5K (Late 2015), 4.0GHz i7, AMD Radeon R9 M395
  • MacBook (Early 2015), 1.3GHz Core M, Intel HD 5300
  • iPad Pro 10.5", 256GB
Link to comment
Share on other sites

  • Staff

Right - that makes more sense. Thought I was missing something. I had a feeling that Motion and FCP X each would only support raster content.  Our PSD support should be the same for both then.

 

As far as MOTN files - not sure we can do anything without a full file description.  And then, it would be subject to the rest of our roadmap which is pretty full right now.

SerifLabs team - Affinity Developer
  • Software engineer  -  Photographer  -  Guitarist  -  Philosopher
  • iMac 27" Retina 5K (Late 2015), 4.0GHz i7, AMD Radeon R9 M395
  • MacBook (Early 2015), 1.3GHz Core M, Intel HD 5300
  • iPad Pro 10.5", 256GB
Link to comment
Share on other sites

  • 4 weeks later...
  • 1 month later...

THAT WOULD BE AMAZING!

 

"Designer and Motion are both so intense! Put'em together, it just makes sense..."

 

:-P

 

Couldn't agree with you more. Adobe has no financial incentive to support Apple Motion because of all their Creative Cloud but if Affinity where to step up here and deliver something better in terms of export this would help sell a lot of licenses and get press no doubt. I hope you will prioritize this in your roadmap.

 

I'm trying to build a non Adobe workflow which of course includes Motion so am keeping my fingers crossed that you guys listed to all of us asking for better support and make this happen.

Link to comment
Share on other sites

  • 2 weeks later...

Currently on the website of Mark Spencer, there is a plugin to convert Illustrator vectors into an editable format for Motion 5.

 

 

That plugin is age old and not anywhere near as useful as "Motionize" from Scott Ash. In fact I don't think it even works anymore.

 

Speaking of which, couldn't one simply reverse-engineer what either plugins i.e. scripts are doing and simply make a Designer compatible version of it. That is, assuming Designer even HAS any type of plugin API to cater to, I don't even know. Or is that notion just too naive?

 

Whatever is doable, I'd most certainly +1 it and it would eliminate one of the very last reasons I have for still keeping Illustrator on my machine.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use | Privacy Policy | Guidelines | We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.