# Paint Program

This forum is currently in read-only mode.
0 Favourites
• 25 posts
• can i make application like paint in construct

• It's technically possible. Canvas object allows to do basic painting operations, and Image Manipulator object can save/load images to files.

• yes you can, easily.

just use lerp for line drawing operations, sin cos for ellipse drawing, boxes are just using line drawings, same for polygons. and beziers can be done using Qarp.

im not sure of how to do fill

• thanks

but could you please make a smaaall paint.cap so that i can play with it

• thanks

but could you please make a smaaall paint.cap so that i can play with it

This is my old Paint example (works good with 0.98):

• thanks

but i could not understand lerp and Qarp

thanks patryk for paint.cap

• ## Try Construct 3

Develop games in your browser. Powerful, performant & highly capable.

Construct 3 users don't see these ads
• Lerp and Qarp are explained in System Expressions.

• http://en.wikipedia.org/wiki/Bezier_curves

this is what they do: lerp does this

Qarp does this

could you implement something for cubic curves, they're the most difficult, and the most confusing to set up (i know you can just do lerps but still)

• Any plans for a future pressure sensitive support for Wacom tablets?

• this is what they do: lerp does this

Qarp does this

could you implement something for cubic curves, they're the most difficult, and the most confusing to set up (i know you can just do lerps but still)

Theyre either lerp(qarp(a,b,x), quarp(a,b,x), x) or quarp (lerp(a,b,x), lerp(a,b,x), x)... And I'm not exactly sure if those two are the same thing, I won't bother to solve the equations now X)... But you could make your own function with function object, unless the cubic equation gets implemented.

• thanks

but can there be a method of adding line, square, circle, pen, eraser, bezier curve etc to be added under GRAPHIC category of INSERT OBJECT. because if we have to lern the programmin a lot then its quite difficult and canvas object only appears when we open bank game application. i think the purpose of construct is to help in making application easier. thanks ashlay

• No, those features are not objects, they're canvas capabilities, so they would have to go in the canvas object.

What's the formula for cubic interpolation?

• Oops, I had an error in my previous post. Of course, when the number of order rises, the amount of parameters rises too. If I'm not mistaken, it's

``````lerp(lerp(lerp(a,b,x),lerp(b,c,x),x),lerp(lerp(b,c,x),lerp(c,d,x),x),x)[/code:1w0nt6ri]

And it can be shortened to [code:1w0nt6ri]lerp(qarp(a,b,c,x), quarp(b,c,d,x), x)[/code:1w0nt6ri]

Fortunately cubic curve is the curve of highest order needed in practical computing :D...``````
• No, those features are not objects, they're canvas capabilities, so they would have to go in the canvas object.

What's the formula for cubic interpolation?

well i have it in my game, one sec

this is what i use for x

(((Sprite15.x+((Sprite14.x-Sprite15.x)* ('t')))+(((Sprite14.x+((Sprite.ImagePointX(5)-Sprite14.x)* ('t')))-(Sprite15.x+((Sprite14.x-Sprite15.x)* ('t'))))* ('t')))+((((Sprite14.x+((Sprite.ImagePointX(5)-Sprite14.x)* ('t')))+(((Sprite.ImagePointX(5)+((Sprite.ImagePointX(4)-Sprite.ImagePointX(5))* ('t')))-(Sprite14.x+((Sprite.ImagePointX(5)-Sprite14.x)* ('t'))))* ('t')))-((Sprite15.x+((Sprite14.x-Sprite15.x)* ('t')))+(((Sprite14.x+((Sprite.ImagePointX(5)-Sprite14.x)* ('t')))-(Sprite15.x+((Sprite14.x-Sprite15.x)* ('t'))))* ('t'))))* ('t')))

for y

(((Sprite15.y+((Sprite14.y-Sprite15.y)* ('t')))+(((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))-(Sprite15.y+((Sprite14.y-Sprite15.y)* ('t'))))* ('t')))+((((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))+(((Sprite.ImagePointY(5)+((Sprite.ImagePointY(4)-Sprite.ImagePointY(5))* ('t')))-(Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t'))))* ('t')))-((Sprite15.y+((Sprite14.y-Sprite15.y)* ('t')))+(((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))-(Sprite15.y+((Sprite14.y-Sprite15.y)* ('t'))))* ('t'))))* ('t')))

as you can see, its a B**** to set up, and its very confusing, having a Carp(a,b,c,d,x) would be very usefull, as drasa said, thankfully cubic is the highest order needed.

for a 5 order thing youd need something like

((((Sprite15.y+((Sprite14.y-Sprite15.y)* ('t')))+(((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))-(Sprite15.y+((Sprite14.y-Sprite15.y)* ('t'))))* ('t')))+((((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))+(((Sprite.ImagePointY(5)+((Sprite.ImagePointY(4)-Sprite.ImagePointY(5))* ('t')))-(Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t'))))* ('t')))-((Sprite15.y+((Sprite14.y-Sprite15.y)* ('t')))+(((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))-(Sprite15.y+((Sprite14.y-Sprite15.y)* ('t'))))* ('t'))))* ('t'))))+(((((Sprite15.y+((Sprite14.y-Sprite15.y)* ('t')))+(((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))-(Sprite15.y+((Sprite14.y-Sprite15.y)* ('t'))))* ('t')))+((((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))+(((Sprite.ImagePointY(5)+((Sprite.ImagePointY(4)-Sprite.ImagePointY(5))* ('t')))-(Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t'))))* ('t')))-((Sprite15.y+((Sprite14.y-Sprite15.y)* ('t')))+(((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))-(Sprite15.y+((Sprite14.y-Sprite15.y)* ('t'))))* ('t'))))* ('t'))))-((((((Sprite15.y+((Sprite14.y-Sprite15.y)* ('t')))+(((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))-(Sprite15.y+((Sprite14.y-Sprite15.y)* ('t'))))* ('t')))+((((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))+(((Sprite.ImagePointY(5)+((Sprite.ImagePointY(4)-Sprite.ImagePointY(5))* ('t')))-(Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t'))))* ('t')))-((Sprite15.y+((Sprite14.y-Sprite15.y)* ('t')))+(((Sprite14.y+((Sprite.ImagePointY(5)-Sprite14.y)* ('t')))-(Sprite15.y+((Sprite14.y-Sprite15.y)* ('t'))))* ('t'))))* ('t'))))+)*('t'))

yea, something like that.

the wikipedia article explains it very well

• OK, got a cubic expression in the next build!