[Cuis-dev] [Changeset] Some fixes for the samples and examples in vector graphics
Douglas Brebner
kirtai+st at gmail.com
Mon Jun 15 06:12:37 PDT 2020
Also make the examples and samples for Vector Graphics work.
-------------- next part --------------
'From Cuis 5.0 [latest update: #4219] on 15 June 2020 at 2:05:15 pm'!
!VectorEngineAbstract class methodsFor: 'experiments' stamp: 'db 6/15/2020 14:02:01'!
experLinesAndShapesx2
"
VectorEngineSubPixel experLinesAndShapesx2
"
| engine y1 dy y2 |
engine _ self onForm: Display.
y1 _ 10.
dy _ 3.
y2 _ 0.1.
y2 print.
"Solo fill. w =0"
engine strokeWidth: 0.5 color: Color black fillColor: Color black do: [
engine
abs_MoveToX: 10 y: y1+dy+dy; abs_LineToX: 200 y: y1+dy+dy+dy;
abs_LineToX: 200 y: y1+y2+dy+dy+dy; abs_LineToX: 10 y: y1+y2+dy+dy;
do_ClosePath.
engine
abs_MoveToX: y1+dy+dy y: 10; abs_LineToX: y1+dy+dy+dy y: 200;
abs_LineToX: y1+y2+dy+dy+dy y: 200; abs_LineToX: y1+y2+dy+dy y: 10;
do_ClosePath ].
Display forceToScreen.
! !
!VectorEngineAbstract class methodsFor: 'samples' stamp: 'db 6/15/2020 14:02:28'!
experiment1
"
No perfecto aun, pero se puede empezar a comparar con
http://www.hpl.hp.com/research/mmsl/projects/graphics/antialiasing/figure21.htm
Ni que hablar que es mucho mas rapido...
VectorEngineSubPixel experiment1
"
| engine h bottom centerX w0 hf y delta prevDelta prevY color x1p x2p x1 x2 e f |
engine _ self onForm: Display.
h _ 300.
h _ 490.
h _ 280.
bottom _ 200.
bottom _ 0.
centerX _ 400.
centerX _ 250.
w0 _ 120.0.
hf _ 1.0.
hf _ 1.73.
hf _ 1.71.
y _ nil.
delta _ nil.
e _ 500 at 500.
f _ Form extent: e depth: 32.
f fillColor: Color transparent..
" canvas _ self on: f.
canvas useComponentAlphas."
1 to: "400" 150 do: [ :i |
i print.
prevDelta _ delta.
delta _ h / (w0 * i + h).
prevY _ y.
y _ bottom + (delta * hf * h).
prevY ifNotNil: [
" -40 to: 40 do: [ :ii |"
-3 // delta to: 3 // delta do: [ :ii |
x1p _ centerX - (prevDelta * w0 * (ii-1)).
x2p _ centerX - (prevDelta * w0 * ii).
x1 _ centerX - (delta * w0 * (ii-1)).
x2 _ centerX - (delta * w0 * ii).
color _ i + ii \\ 2 = 0 ifTrue: [ Color black ] ifFalse: [ Color white ].
" color _ color alpha: (((prevY-y) min: (x1-x2)) min: 1)."
" color _ color alpha: 0.5."
engine fillColor: color do: [
engine
abs_MoveToX: x1 y: y;
abs_LineToX: x2 y: y;
abs_LineToX: x2p y: prevY;
abs_LineToX: x1p y: prevY;
do_ClosePath ]
].
].
Display forceToScreen.
].
Display forceToScreen.
"
canvas removeSpuriousTranslucencyFloatAndBlendOver: Color red.
f writePNGfileNamed: 'pp17.png'
"! !
!VectorEngineAbstract class methodsFor: 'samples' stamp: 'db 6/15/2020 14:02:47'!
experiment2
"
VectorEngineSubPixel experiment2
"
| engine h bottom centerX w0 hf y delta prevDelta prevY color x1p x2p x1 x2 |
engine _ self onForm: Display.
h _ 300.
h _ 600.
bottom _ 200.
centerX _ 400.
w0 _ 60.0.
hf _ 1.0.
y _ nil.
delta _ nil.
1 to: 400 do: [ :i |
i print.
prevDelta _ delta.
delta _ h / (w0 * i + h).
prevY _ y.
y _ bottom + (delta * hf * h).
prevY ifNotNil: [
" -40 to: 40 do: [ :ii |"
-6 // delta to: 6 // delta do: [ :ii |
x1p _ centerX - (prevDelta * w0 * (ii-1)).
x2p _ centerX - (prevDelta * w0 * ii).
x1 _ centerX - (delta * w0 * (ii-1)).
x2 _ centerX - (delta * w0 * ii).
color _ i + ii \\ 2 = 0 ifTrue: [ Color white ] ifFalse: [ Color black ].
color _ color alpha: (((prevY-y) min: (x1-x2)) "* 0.3" min: 1).
" color _ color alpha: 0.5."
engine fillColor: color do: [
engine
abs_MoveToX: x1 y: y;
abs_LineToX: x2 y: y;
abs_LineToX: x2p y: prevY;
abs_LineToX: x1p y: prevY;
do_ClosePath ]
].
].
Display forceToScreen.
].
Display forceToScreen.
! !
!VectorEngineAbstract class methodsFor: 'samples' stamp: 'db 6/15/2020 14:02:58'!
experiment3
"
VectorEngineSubPixel experiment3
"
| engine w r |
engine _ self onForm: Display.
w _ 10.
r _ 15.
100 timesRepeat: [
engine strokeWidth: w color: Color black do: [
engine abs_CircleCenterX: 300 y: 300 radius: r ].
r _ r + w.
w _ w * 0.8.
r _ r + w.
Display forceToScreen.
].
Display forceToScreen! !
!VectorEngineAbstract class methodsFor: 'samples' stamp: 'db 6/15/2020 14:03:02'!
experiment4
"
VectorEngineSubPixel experiment4
"
| engine w r |
engine _ self onForm: Display.
w _ 10.
r _ 15.
1 to: 100 do: [ :i |
r _ r + w.
w _ 20.0 / i.
r _ r + w.
engine strokeWidth: w color: Color black do: [
engine abs_CircleCenterX: 300 y: 300 radius: r ].
Display forceToScreen.
].
Display forceToScreen! !
!VectorEngineAbstract class methodsFor: 'samples' stamp: 'db 6/15/2020 14:03:08'!
siemensStar
"
VectorEngineSubPixel siemensStar display
"
| angle backColor canvas count extent foreColor form location offsetFromCenter |
count _ 32.
angle _ Float twoPi / count / 2.
extent _ 512.
offsetFromCenter _ 0.
backColor _ `Color gray: 50/255`.
foreColor _ `Color gray: 200/255`.
form _ Form extent: extent asPoint depth: 32.
form fillColor: backColor.
canvas _ VectorCanvas onForm: form.
1 to: count do: [ :i |
location _ AffineTransformation withRadians: i * angle * 2+0.02 scale: extent*0.45 position: extent-1/2.0 + offsetFromCenter.
canvas engine geometryTransformation: location.
canvas fillColor: foreColor do: [
canvas
moveToX: 0 y: 0;
lineToX: 1 y: 0;
lineToX: angle cos y: angle sin;
lineToX: 0 y: 0.
].
].
^form! !
More information about the Cuis-dev
mailing list