How To > Develop a Bitmap Painting Tool- Brush Size and Color |
In this step of the Bitmap Painting tool development, we will add brush color and size controls.
NATURAL LANGUAGE |
We will extend the existing MacroScript by adding new UI controls to the rollout to define the Ink color and the Brush Size. |
The paintbrush function will be changed to use the color defined by the UI color picker. |
The drawStroke function will be enhanced to draw a large rectangle based on the defined size. |
SCRIPT: |
macroScript MicroPaint category:"HowTo" ( global MicroPaint_CanvasRollout try(destroyDialog MicroPaint_CanvasRollout)catch() local isDrawing = false local bitmapX = bitmapY = 512 local theCanvasBitmap = bitmap bitmapX bitmapY color:white local currentPos = lastPos = [0,0] rollout MicroPaint_CanvasRollout "MicroPaint" ( bitmap theCanvas pos:[0,0] width:bitmapX height:bitmapY bitmap:theCanvasBitmap colorpicker inkColor height:16 modal:false color:black across:2 spinner BrushSize"Size"range:[1,50,10] type:#integer fieldwidth:40 fn paintBrush pos = (setPixels theCanvasBitmap pos #(inkColor.color)) fn drawStroke lastPos pos = ( currentPos = lastPos deltaX = pos.x - lastPos.x deltaY = pos.y - lastPos.y maxSteps = amax #(abs(deltaX),abs(deltaY)) deltaStepX = deltaX / maxSteps deltaStepY = deltaY / maxSteps for i = 0 to maxSteps do ( for b = -BrushSize.value/2 to BrushSize.value/2 do for c = -BrushSize.value/2 to BrushSize.value/2 do paintBrush (currentPos + [c,b]) currentPos += [deltaStepX, deltaStepY] ) theCanvas.bitmap = theCanvasBitmap ) on MicroPaint_CanvasRollout lbuttondown pos do ( lastPos = pos isDrawing = true drawStroke lastPos pos ) on MicroPaint_CanvasRollout lbuttonup pos do isDrawing = false on MicroPaint_CanvasRollout mousemove pos do ( if isDrawing do drawStroke lastPos pos lastPos = pos ) ) createDialog MicroPaint_CanvasRollout bitmapX (bitmapY+30) ) |
--Code in italic has no changes since the previous version. macroScript MicroPaint category:"HowTo" ( global MicroPaint_CanvasRollout try(destroyDialog CanvasRollout)catch() local isDrawing = false local bitmapX = bitmapY = 512 local theCanvasBitmap = bitmap bitmapX bitmapY color:white rollout MicroPaint_CanvasRollout "MicroPaint" ( bitmap theCanvas pos:[0,0] width:bitmapX height:bitmapY bitmap:theCanvasBitmap colorpicker inkColor height:16 modal:false color:black across:2
This is the color picker which will be used to define the color of the paintbrush.
spinner BrushSize "Size" range:[1,50,10] type:#integer fieldwidth:40
This spinner will define the size of the paintbrush.
fn paintBrush pos = (setPixels theCanvasBitmap pos) fn drawAPoint lastPos pos = ( currentPos = lastPos deltaX = pos.x - lastPos.x deltaY = pos.y - lastPos.y maxSteps = amax #(abs(deltaX),abs(deltaY)) deltaStepX = deltaX / maxSteps deltaStepY = deltaY / maxSteps for i = 0 to maxSteps do ( for b = -BrushSize.value/2 to BrushSize.value/2 do (
This new loop will define the vertical size of the brush. It counts from minus half the size to plus half the size, full size altogether.
for c = -BrushSize.value/2 to BrushSize.value/2 do
This second loop defines the width of the paintbrush. It also loops from minus half the size to plus half the size, full size altogether.
paintBrush (currentPos + [c,b])
After each iteration of the c loop, we call our paint Brush function, passing the current position in the stroke plus the offset based on half the size of the brush and the b loop.
) currentPos += [deltaStepX, deltaStepY] ) theCanvas.bitmap = theCanvasBitmap ) on MicroPaint_CanvasRollout lbuttondown pos do ( lastPos = pos isDrawing = true drawAPoint lastPos pos ) on MicroPaint_CanvasRollout lbuttonup pos do isDrawing = false on MicroPaint_CanvasRollout mousemove pos do ( if isDrawing do drawAPoint lastPos pos lastPos = pos ) createDialog MicroPaint_CanvasRollout bitmapX (bitmapY+30)
To accommodate the new User Interface controls for the color and brush size, we have to increase the vertical size of the dialog by 30 pixels.
)
Previous Tutorial:
How To ... Develop a Bitmap Painting Tool - Strokes Support
Next Tutorial:
How To ... Develop a Bitmap Painting Tool - Airbrush and Shapes