1-7 suggestion for future of Pixelmator Pro

What features would you like to see in Pixelmator Pro?
User avatar

2020-10-22 18:47:28

In the process of building a AppleScript library of Pixelmator Pro I find some features I was missing in current Pixelmator Pro 1.8.

1. To be able to script curveTo, moveTo and lineTo for bezier path.
2. To be able to swap colors from 1 layer to other layer.
3. To be able to swap position from 1 layer to other layer.
4. To import PDF with multipage (5 pages PDF of 1 vector object per page become 5 layers in a group) (why not store vectors in PDF)
5. Convert selection to shape to be able to reduce points without changing the shape.
6. Position shapes on a path.
7. Measure point in coordinate x, y with accurate results like a true cad application does.
8. Feature 1-7 should be scriptable :)

Regards.
Fredrik
User avatar

2020-10-23 09:46:34

Thanks for the suggestions Fredrik! I have to be honest and say a lot of them aren't likely to make it into Pixelmator Pro in the near future, but we do appreciate the feedback and we'll keep it in mind!

I do have a question about your number 3 – what do you mean exactly by swap position? Because it seems to me like you should be able to do this, though I may be misunderstanding something.
User avatar

2020-10-23 13:34:51

Swap position: I have done that in AppleScript so you are right its possible... and I did that with 3 repeat loops

Lets say you like to swap 100 objects... its will be very slow... with AppleScript.

There is a reason why some function should be coded in a programming language in stead of scripting language.
User avatar

2020-10-27 15:40:03

by Fredrik71 2020-10-23 10:34:51 Swap position: I have done that in AppleScript so you are right its possible... and I did that with 3 repeat loops.
It sounds to me like you're doing the same thing I did when I first started trying to swap layers using AppleScript, but I don't think it's necessary. The basic command you can use is this:
tell application "Pixelmator Pro"
	tell the front document
		move layer 1 to after layer 2	
	end tell
end tell
If you wanted to send a layer backward four times (simulating the Send Backward command of the Arrange menu), you could use this:
move layer 1 to after layer 5
You could also use System Events to simulate key presses like this (note how you'll need to make sure the app is active for this to work):
tell application "Pixelmator Pro Beta"
	tell the front document
		activate
		tell application "System Events"
			-- Send Backward
			keystroke "[" using {command down}
			-- Send Forward
			keystroke "]" using {command down}
		end tell
	end tell
end tell
Also, if you need to keep absolute references to layers in a script after you've moved them, you could give layers names and use something like this:
move layer named "First Layer" to after layer named "Second Layer"
Something like this might be useful too:
set originalLayerIDList to id of layers 1 thru (count layers)
move layer id (item 1 of originalLayerIDList) to after layer id (item 5 of originalLayerIDList)
But it does have the potential to be very confusing once you lose track of which layers was originally in which position. I think named layers is probably the way to go. But maybe you'll think of some use for it! Also, if you could let me know how exactly you're trying to rearrange layers, I'd possibly be able to share some more ideas.
User avatar

2020-10-27 20:23:54

Thanks, maybe I was not clear enough what I meant with swap position of layers. (position (x,y) on the screen)
So your solution doesn't apply to that.

I have made in AS with 3 repeat loop to take a object position (x,y) to swap with other objects position (x,y)

Sometimes we want random position of a object and sometimes we use placeholder objects to swap objects with.

And it would also be very easy to swap with a list of different objects or random objects to specific position on the screen.

ex. Lets say you have 20 different flowers you like to place on the screen... you have setup the colors and every things
but you do not know the design... it would be very easy to run random function change the order of the list
and to swap the position with the placeholders.
User avatar

2020-10-28 10:04:02

Duh, I was way off on that one! I don't know why I immediately assumed you'd like to change the position in the layer stack. Anyway, I'm sure you've worked out a good solution. I guess you've got something like this, right:
tell application "Pixelmator Pro"
	tell the front document
		set randomLayerPositions to {}
		repeat (number of layers) times
			-- Take away a certain number from the width and height depending on how large the layers are
			set randomX to random number from 0 to (width - 350) as integer
			set randomY to random number from 0 to (height - 400) as integer
			copy {randomX, randomY} to end of randomLayerPositions
		end repeat
		repeat with a from 1 to (number of randomLayerPositions)
			set position of layer a to item a of randomLayerPositions
		end repeat
	end tell
end tell
If it's something else, feel free to share it here and I'll see if I have any other suggestions!
User avatar

2020-10-28 10:44:27

I store x,y position in a list {{x1,y1},{x2,y2}....}
I use the framework GameKit to random the value in the list.
https://developer.apple.com/documentati ... guage=objc

1. Its faster
2. I only need to set the value of positions of placeholders (this is custom and never change).
3. I could change objects to any placeholder.
4. I could also include random objects.

I will make a script when I have time to show you if you like.
User avatar

2020-10-28 10:47:12

I mean, I don't need the script personally, but I'm definitely curious, so it's totally up to you if you want to spend time writing it up. :smile:
User avatar

2020-10-28 11:27:59

To be honest the reason is... so Pixelmator team or you... could get ideas to make Pixelmator Pro a better product.
My approach is... there is core function a application should have to make it possible to do better things.

ex. Di you know its not possible to know x,y position when you edit a point on shape.

Sure you could setup a grid to snap... but lets say I like my point to be the average distance between 2 points... how do I know...
I miss many functions in Pixelmator Pro...
User avatar

2020-10-28 11:58:16

by Fredrik71 2020-10-28 08:29:12 To be honest the reason is... so Pixelmator team or you... could get ideas to make Pixelmator Pro a better product.
My approach is... there is core function a application should have to make it possible to do better things.

ex. Di you know its not possible to know x,y position when you edit a point on shape.

Sure you could setup a grid to snap... but lets say I like my point to be the average distance between 2 points... how do I know...
I miss many functions in Pixelmator Pro...
Well, if that's the reason, it's a great one and you're in the right place to have your feedback heard and implemented! We can't always promise a quick turnaround, but pretty much everything posted here gets seen and considered. If we feel a suggestion makes sense, we always do our best to find the time to add it to the app. And well-thought-out, well-reasoned suggestions have a great chance of being added eventually. :pray:
User avatar

2020-10-28 13:41:27

To be little ironic...
Marketing speaks to the customers, the product designer owns the idea/vision and core developers own the project.

What marketing people say could be very difference from a designers perspective. But its the core developer and manager
of that project that build the standard, innovations and set the quality.

Designers have the vision and marketing follow the trend.

Any person could innovate if the environment allow for fails, only then better ideas will come.

Innovation is to making something people thought they didn't need... to think I couldn't live without it and that is not easy.
User avatar

2020-10-28 19:42:03

Here is simple example.
The list has 6 items with 2 values (position x,y) this use shuffle function from framework GameKit
I make a repeat loop to set the values for the items positions.

The value in the list is not random values... instead it use random shuffle index...
use framework "Foundation"
use framework "GameplayKit"
use scripting additions

set theList to {{80, 100}, {275, 300}, {600, 190}, {260, 450}, {100, 430}, {500, 300}}
set theValue to my randomSourceList:theList

tell application "Pixelmator Pro"
	repeat with i from 1 to 6
		tell front document to tell layer i
			set position to (item i of theValue)
		end tell
	end repeat
end tell

on randomSourceList:_inputList
	set theArray to current application's NSArray's arrayWithArray:_inputList
	set randomSource to current application's GKRandomSource's alloc()'s init()
	set shuffled to randomSource's arrayByShufflingObjectsInArray:theArray
	return shuffled as list
end randomSourceList:
User avatar

2020-10-29 10:00:47

by Fredrik71 To be little ironic...
Marketing speaks to the customers, the product designer owns the idea/vision and core developers own the project.

What marketing people say could be very difference from a designers perspective. But its the core developer and manager
of that project that build the standard, innovations and set the quality.

Designers have the vision and marketing follow the trend.

Any person could innovate if the environment allow for fails, only then better ideas will come.

Innovation is to making something people thought they didn't need... to think I couldn't live without it and that is not easy.
To be honest, I'm not really sure what you mean by this. :smile: My point was — if you want to share suggestions, the forum is a good place for that. I can't quite work out whether you're saying that the forum is, in fact, not a good place for this because it's just a place for marketing? Or something else?
by Fredrik71 Here is simple example.
The list has 6 items with 2 values (position x,y) this use shuffle function from framework GameKit
I make a repeat loop to set the values for the items positions.

The value in the list is not random values... instead it use random shuffle index...
Nice, another useful script — thanks for sharing. :wink:
User avatar

2020-10-29 11:59:08

Any forum is good if people who suggestion features, ideas or workflows have a vision and could express it. Many times we forget its the people who innovate things in life who see things differently. To innovate is difficult, the process is slow and the first ideas will never work.

So if I give you a idea or a feature it could be you do not understand it or maybe you only see the hard part to execute it.

From ideas we discover new ideas, and by trying something we learn to make better things.
User avatar

2020-10-29 14:13:08

Here is other example to show how to use shuffle to visible of a layer... it could be like a dice... if you have 6 layers...
You run the script and 2 layer has true and 4 layer have false. Only 2 layer will be visible on the layout.

We could demo a approach
Lets say you have 6 object with mask you have position this correctly... it could give the effect less object is more in the scene.

The experiment of size, color, shape and amount in layout could be very easy to do with AppleScript this way...
use framework "GameKit"

tell application "Pixelmator Pro"
	tell front document to set theName to its name of every layer
	repeat with i from 1 to 5
		set theBoolean to (my shuffledObjects:{"true", "false"})
		tell front document to tell layer i to set visible to item 1 of theBoolean
	end repeat
end tell

-- my shuffledObjects:{"true","false"}
on shuffledObjects:_theArray
	set theArray to current application's NSArray's arrayWithArray:_theArray
	set randomSource to current application's GKRandomSource's alloc()'s init()
	set shuffled to randomSource's arrayByShufflingObjectsInArray:theArray
	return shuffled as list
end shuffledObjects: