User Tools

Site Tools


transformationexamples

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

transformationexamples [2016/09/24 07:54] (current)
christian created
Line 1: Line 1:
 +====== Coordinate Transformations ======
  
 +By default, PDF uses a conventional graph coordinate system, with the origin in the lower left corner. These examples create a 200x200 page with the origin in the middle, a vertical line at x=0, a horizontal lines at y = 0 and text in each quadrant.
 +
 +
 +
 +===== no transformation =====
 +
 +<code smalltalk>​
 +page := Graphics.PDF.Page
 +  newInBounds:​ (-100 @ -100 corner: 100 @ 100)
 +  colorspace: DeviceRGB new
 +  render: [:renderer ¦
 +    renderer moveTo: -100 @ 0; lineTo: 100 @ 0; stroke. ​ "line at y = 0"
 +    renderer moveTo: 0 @ -100; lineTo: 0 @ 100; stroke. ​ "line at x = 0"
 +    renderer textObjectDo:​ [
 +      renderer setFont: #Helvetica size: 1.
 +      renderer textMatrix: #(4 0 0 4 50 50); showString: '(50 50)'.
 +      renderer textMatrix: #(2 0 0 2 -50 50); showString: '(-50 50)'.
 +      renderer textMatrix: #(2 0 0 2 50 -50); showString: '(50 -50)'.
 +      renderer textMatrix: #(2 0 0 2 -50 -50); showString: '(-50 -50)'​]].
 +page saveAndShowAs:​ '​demo10_transformationsNone.pdf'​
 +</​code>​
 +
 +{{demo10_transformationsnone.pdf}}
 +
 +===== flip vertically =====
 +
 +<code smalltalk>​
 +"x -> x  ,  y -> -y
 +In this example the matrix is coded manually. ​
 +It can also be coded as Matrix scale: 4 @ -4 to get '[4 0 0 -4 0 0]' ​
 +and (Matrix scale: 4 @ -4) translate: 50 @ 50 to get '[4 0 0 -4 50 50]'"​
 +
 +page := Graphics.PDF.Page
 +  newInBounds:​ (-100 @ -100 corner: 100 @ 100)
 +  colorspace: DeviceRGB new
 +  render: [:renderer ¦
 +    renderer concat: (Matrix scale: 1 @ -1).
 +    renderer moveTo: -100 @ 0; lineTo: 100 @ 0; stroke. ​ "line at y = 0"
 +    renderer moveTo: 0 @ -100; lineTo: 0 @ 100; stroke. ​ "line at x = 0"
 +    renderer textObjectDo:​ [
 +      renderer setFont: #Helvetica size: 1.
 +      renderer textMatrix: #(4 0 0 -4 50 50); showString: '(50 50)'.
 +      renderer textMatrix: #(2 0 0 -2 -50 50); showString: '(-50 50)'.
 +      renderer textMatrix: #(2 0 0 -2 50 -50); showString: '(50 -50)'.
 +      renderer textMatrix: #(2 0 0 -2 -50 -50); showString: '(-50 -50)'​]].
 +page saveAndShowAs:​ '​demo10a_transformationsFlipVertically.pdf'​
 +</​code>​
 +
 +{{demo10a_transformationsflipvertically.pdf}}
 +===== flip horizontally =====
 +
 +<code smalltalk>​
 +"x -> -x  ,  y -> y"
 +page := Graphics.PDF.Page
 +  newInBounds:​ (-100 @ -100 corner: 100 @ 100)
 +  colorspace: DeviceRGB new
 +  render: [:renderer ¦
 +    renderer concat: (Matrix scale: -1 @ 1).
 +    renderer moveTo: -100 @ 0; lineTo: 100 @ 0; stroke. ​ "line at y = 0"
 +    renderer moveTo: 0 @ -100; lineTo: 0 @ 100; stroke. ​ "line at x = 0"
 +    renderer textObjectDo:​ [
 +      renderer setFont: #Helvetica size: 1.
 +      renderer textMatrix: #(-4 0 0 4 50 50); showString: '(50 50)'.
 +      renderer textMatrix: #(-2 0 0 2 -50 50); showString: '(-50 50)'.
 +      renderer textMatrix: #(-2 0 0 2 50 -50); showString: '(50 -50)'.
 +      renderer textMatrix: #(-2 0 0 2 -50 -50); showString: '(-50 -50)'​]].
 +page saveAndShowAs:​ '​demo10b_transformationsFlipHorizontally.pdf'​
 +</​code>​
 +{{demo10b_transformationsfliphorizontally.pdf}}
 +
 +===== flip diagonally =====
 +
 +<code smalltalk>​
 +"x -> -x  ,  y -> -y"
 +page := Graphics.PDF.Page
 +  newInBounds:​ (-100 @ -100 corner: 100 @ 100)
 +  colorspace: DeviceRGB new
 +  render: [:renderer ¦
 +    renderer concat: (Matrix scale: -1 @ -1).
 +    renderer moveTo: -100 @ 0; lineTo: 100 @ 0; stroke. ​ "line at y = 0"
 +    renderer moveTo: 0 @ -100; lineTo: 0 @ 100; stroke. ​ "line at x = 0"
 +    renderer textObjectDo:​ [
 +      renderer setFont: #Helvetica size: 1.
 +      renderer textMatrix: #(-4 0 0 -4 50 50); showString: '(50 50)'.
 +      renderer textMatrix: #(-2 0 0 -2 -50 50); showString: '(-50 50)'.
 +      renderer textMatrix: #(-2 0 0 -2 50 -50); showString: '(50 -50)'.
 +      renderer textMatrix: #(-2 0 0 -2 -50 -50); showString: '(-50 -50)'​]].
 +page saveAndShowAs:​ '​demo10c_transformationsFlipDiagonal.pdf'​
 +</​code>​
 +{{demo10c_transformationsflipdiagonal.pdf}}
 +
 +===== flip vertically and located origin in upper left corner =====
 +
 +<code smalltalk>​
 +"This is the more common layout used for reports"​
 +page := Graphics.PDF.Page
 +  newInBounds:​ (0 @ 0 corner: 100 @ -100)
 +  colorspace: DeviceRGB new
 +  render: [:renderer ¦
 +    renderer concat: (Matrix scale: 1 @ -1).
 +    renderer textObjectDo:​ [
 +      renderer setFont: #Helvetica size: 1.
 +      renderer textMatrix: #(2 0 0 -2 10 10); showString: '(10 10)'​. ​
 +      renderer textMatrix: #(2 0 0 -2 10 20); showString: '(10 20)'.
 +      renderer textMatrix: #(2 0 0 -2 10 30); showString: '(10 30)'.
 +      renderer textMatrix: #(2 0 0 -2 10 40); showString: '(10 40)'.
 +      renderer textMatrix: #(2 0 0 -2 20 10); showString: '(20 10)'​. ​
 +      renderer textMatrix: #(2 0 0 -2 20 20); showString: '(20 20)'.
 +      renderer textMatrix: #(2 0 0 -2 20 30); showString: '(20 30)'.
 +      renderer textMatrix: #(2 0 0 -2 20 40); showString: '(20 40)'​]].
 +page saveAndShowAs:​ '​demo10d_transformationsFlipVerticallyTranslateOrigin.pdf'​
 +</​code>​
 +{{demo10d_transformationsflipverticallytranslateorigin.pdf}}
transformationexamples.txt · Last modified: 2016/09/24 07:54 by christian