WindowingTransformation.st
author claus
Fri, 05 Aug 1994 03:16:44 +0200
changeset 54 29a6b2f8e042
parent 46 7b331e9012fd
child 72 3e84121988c3
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     1
"
48194c26a46c Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1992 by Claus Gittinger
48194c26a46c Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
48194c26a46c Initial revision
claus
parents:
diff changeset
     4
48194c26a46c Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
48194c26a46c Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
48194c26a46c Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
48194c26a46c Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
48194c26a46c Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
48194c26a46c Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
48194c26a46c Initial revision
claus
parents:
diff changeset
    11
"
48194c26a46c Initial revision
claus
parents:
diff changeset
    12
48194c26a46c Initial revision
claus
parents:
diff changeset
    13
Object subclass: #WindowingTransformation
48194c26a46c Initial revision
claus
parents:
diff changeset
    14
        instanceVariableNames: 'scale translation'
48194c26a46c Initial revision
claus
parents:
diff changeset
    15
        classVariableNames: ''
48194c26a46c Initial revision
claus
parents:
diff changeset
    16
        poolDictionaries: ''
48194c26a46c Initial revision
claus
parents:
diff changeset
    17
        category: 'Graphics-Support'!
48194c26a46c Initial revision
claus
parents:
diff changeset
    18
48194c26a46c Initial revision
claus
parents:
diff changeset
    19
WindowingTransformation comment:'
48194c26a46c Initial revision
claus
parents:
diff changeset
    20
COPYRIGHT (c) 1992 by Claus Gittinger
48194c26a46c Initial revision
claus
parents:
diff changeset
    21
              All Rights Reserved
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
    22
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
    23
$Header: /cvs/stx/stx/libview/WindowingTransformation.st,v 1.5 1994-08-05 01:16:22 claus Exp $
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    24
'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    25
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    26
!WindowingTransformation class methodsFor: 'documentation'!
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    27
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    28
copyright
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    29
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    30
 COPYRIGHT (c) 1992 by Claus Gittinger
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    31
              All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    32
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    33
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    34
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    35
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    36
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    37
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    38
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    39
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    40
!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    41
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    42
version
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    43
"
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
    44
$Header: /cvs/stx/stx/libview/WindowingTransformation.st,v 1.5 1994-08-05 01:16:22 claus Exp $
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    45
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    46
!
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    47
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    48
documentation
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    49
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    50
    I represent the ability to perform transformations in 2-D space.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    51
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    52
    Instance variables are:
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    53
        scale           <Number> or <Point> representing a linear scaling factor.
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    54
        translation     <Number> or <Point> representing a translation in 2-D.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    55
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    56
    All 2-D objects are supposed to be able to be transformed using
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    57
    instances of me.  Instances of me can also be combined to form a
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    58
    single composite transformation.
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    59
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    60
! !
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    61
48194c26a46c Initial revision
claus
parents:
diff changeset
    62
!WindowingTransformation methodsFor: 'accessing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
    63
48194c26a46c Initial revision
claus
parents:
diff changeset
    64
scale
48194c26a46c Initial revision
claus
parents:
diff changeset
    65
    "return a copy of the Point that represents the
48194c26a46c Initial revision
claus
parents:
diff changeset
    66
     current scale of the receiver."
48194c26a46c Initial revision
claus
parents:
diff changeset
    67
48194c26a46c Initial revision
claus
parents:
diff changeset
    68
    scale == nil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
    69
        ^ Point x:1 y:1
48194c26a46c Initial revision
claus
parents:
diff changeset
    70
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
    71
    ^ scale copy
48194c26a46c Initial revision
claus
parents:
diff changeset
    72
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    73
48194c26a46c Initial revision
claus
parents:
diff changeset
    74
scaleOfOne
48194c26a46c Initial revision
claus
parents:
diff changeset
    75
    "Set the scale of the receiver to the identity scale"
48194c26a46c Initial revision
claus
parents:
diff changeset
    76
48194c26a46c Initial revision
claus
parents:
diff changeset
    77
    scale := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
    78
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    79
48194c26a46c Initial revision
claus
parents:
diff changeset
    80
translation
48194c26a46c Initial revision
claus
parents:
diff changeset
    81
    "return a copy of the receiver's translation."
48194c26a46c Initial revision
claus
parents:
diff changeset
    82
48194c26a46c Initial revision
claus
parents:
diff changeset
    83
    ^ translation copy
48194c26a46c Initial revision
claus
parents:
diff changeset
    84
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    85
48194c26a46c Initial revision
claus
parents:
diff changeset
    86
translation: aValue
48194c26a46c Initial revision
claus
parents:
diff changeset
    87
    "Set the receiver's translation to aValue."
48194c26a46c Initial revision
claus
parents:
diff changeset
    88
48194c26a46c Initial revision
claus
parents:
diff changeset
    89
    translation := aValue
48194c26a46c Initial revision
claus
parents:
diff changeset
    90
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
    91
48194c26a46c Initial revision
claus
parents:
diff changeset
    92
!WindowingTransformation methodsFor: 'testing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
    93
48194c26a46c Initial revision
claus
parents:
diff changeset
    94
noScale
48194c26a46c Initial revision
claus
parents:
diff changeset
    95
    "return true if the identity scale is in effect;
48194c26a46c Initial revision
claus
parents:
diff changeset
    96
         answer false, otherwise."
48194c26a46c Initial revision
claus
parents:
diff changeset
    97
48194c26a46c Initial revision
claus
parents:
diff changeset
    98
    ^ scale == nil
48194c26a46c Initial revision
claus
parents:
diff changeset
    99
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   100
48194c26a46c Initial revision
claus
parents:
diff changeset
   101
!WindowingTransformation methodsFor: 'applying transform'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   102
48194c26a46c Initial revision
claus
parents:
diff changeset
   103
applyInverseTo:anObject 
48194c26a46c Initial revision
claus
parents:
diff changeset
   104
    "Apply the inverse of the receiver to anObject
48194c26a46c Initial revision
claus
parents:
diff changeset
   105
     and answer the result."
48194c26a46c Initial revision
claus
parents:
diff changeset
   106
48194c26a46c Initial revision
claus
parents:
diff changeset
   107
    |transformedObject|
48194c26a46c Initial revision
claus
parents:
diff changeset
   108
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   109
    transformedObject := anObject translatedBy:(self inverseTranslation).
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   110
    scale == nil ifFalse:[
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   111
        transformedObject scaleBy:(self inverseScale)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   112
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   113
    ^ transformedObject
48194c26a46c Initial revision
claus
parents:
diff changeset
   114
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   115
48194c26a46c Initial revision
claus
parents:
diff changeset
   116
applyTo:anObject 
48194c26a46c Initial revision
claus
parents:
diff changeset
   117
    "Apply the receiver to anObject and answer the result."
48194c26a46c Initial revision
claus
parents:
diff changeset
   118
48194c26a46c Initial revision
claus
parents:
diff changeset
   119
    |transformedObject|
48194c26a46c Initial revision
claus
parents:
diff changeset
   120
48194c26a46c Initial revision
claus
parents:
diff changeset
   121
    scale == nil ifTrue:[
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   122
        ^ anObject translateBy:translation.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   123
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   124
    transformedObject := anObject scaledBy:scale
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   125
    transformedObject translateBy:translation.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   126
    ^ transformedObject
48194c26a46c Initial revision
claus
parents:
diff changeset
   127
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   128
48194c26a46c Initial revision
claus
parents:
diff changeset
   129
compose:aTransformation 
48194c26a46c Initial revision
claus
parents:
diff changeset
   130
    "return a new WindowingTransformation that is the
48194c26a46c Initial revision
claus
parents:
diff changeset
   131
     composition of the receiver and aTransformation.
48194c26a46c Initial revision
claus
parents:
diff changeset
   132
     The effect of applying the resulting WindowingTransformation
48194c26a46c Initial revision
claus
parents:
diff changeset
   133
     to an object is the same as that of first applying
48194c26a46c Initial revision
claus
parents:
diff changeset
   134
     aTransformation to the object and then applying the 
48194c26a46c Initial revision
claus
parents:
diff changeset
   135
     receiver to its result."
48194c26a46c Initial revision
claus
parents:
diff changeset
   136
48194c26a46c Initial revision
claus
parents:
diff changeset
   137
    |aTransformationScale newScale newTranslation|
48194c26a46c Initial revision
claus
parents:
diff changeset
   138
48194c26a46c Initial revision
claus
parents:
diff changeset
   139
    aTransformationScale := aTransformation scale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   140
    scale == nil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   141
        aTransformation noScale ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   142
            newScale := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   143
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   144
            newScale := aTransformationScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   145
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   146
        newTranslation := translation + aTransformation translation
48194c26a46c Initial revision
claus
parents:
diff changeset
   147
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   148
        aTransformation noScale ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   149
            newScale := scale
48194c26a46c Initial revision
claus
parents:
diff changeset
   150
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   151
            newScale := scale * aTransformationScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   152
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   153
        newTranslation := translation
48194c26a46c Initial revision
claus
parents:
diff changeset
   154
                          + (scale * aTransformation translation)
48194c26a46c Initial revision
claus
parents:
diff changeset
   155
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   156
    ^ WindowingTransformation scale:newScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   157
                        translation:newTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   158
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   159
48194c26a46c Initial revision
claus
parents:
diff changeset
   160
!WindowingTransformation methodsFor: 'transforming'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   161
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   162
scaledBy:aScale 
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   163
    "return a new WindowingTransformation with the scale and translation of 
48194c26a46c Initial revision
claus
parents:
diff changeset
   164
     the receiver both scaled by aScale."
48194c26a46c Initial revision
claus
parents:
diff changeset
   165
48194c26a46c Initial revision
claus
parents:
diff changeset
   166
    |checkedScale newScale newTranslation|
48194c26a46c Initial revision
claus
parents:
diff changeset
   167
48194c26a46c Initial revision
claus
parents:
diff changeset
   168
    aScale == nil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   169
        newScale := scale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   170
        newTranslation := translation
48194c26a46c Initial revision
claus
parents:
diff changeset
   171
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   172
        checkedScale := self checkScale:aScale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   173
        scale == nil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   174
            newScale := checkedScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   175
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   176
            newScale := scale * checkedScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   177
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   178
        newTranslation := checkedScale * translation
48194c26a46c Initial revision
claus
parents:
diff changeset
   179
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   180
    ^ WindowingTransformation scale:newScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   181
                        translation:newTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   182
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   183
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   184
translatedBy:aPoint 
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   185
    "return a new WindowingTransformation with the same scale and 
48194c26a46c Initial revision
claus
parents:
diff changeset
   186
     rotations as the receiver and with a translation of the current 
48194c26a46c Initial revision
claus
parents:
diff changeset
   187
     translation plus aPoint."
48194c26a46c Initial revision
claus
parents:
diff changeset
   188
48194c26a46c Initial revision
claus
parents:
diff changeset
   189
    ^ WindowingTransformation scale:scale
48194c26a46c Initial revision
claus
parents:
diff changeset
   190
                        translation:(translation + aPoint)
48194c26a46c Initial revision
claus
parents:
diff changeset
   191
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   192
48194c26a46c Initial revision
claus
parents:
diff changeset
   193
!WindowingTransformation methodsFor: 'printing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   194
48194c26a46c Initial revision
claus
parents:
diff changeset
   195
printString
48194c26a46c Initial revision
claus
parents:
diff changeset
   196
    ^ (self class name, ' scale: ', scale printString,
48194c26a46c Initial revision
claus
parents:
diff changeset
   197
                  ' translation: ', translation printString)
48194c26a46c Initial revision
claus
parents:
diff changeset
   198
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   199
48194c26a46c Initial revision
claus
parents:
diff changeset
   200
!WindowingTransformation methodsFor: 'private'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   201
48194c26a46c Initial revision
claus
parents:
diff changeset
   202
checkScale:aScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   203
    "Converts aScale to the internal format of a floating-point Point."
48194c26a46c Initial revision
claus
parents:
diff changeset
   204
48194c26a46c Initial revision
claus
parents:
diff changeset
   205
    |checkedScale|
48194c26a46c Initial revision
claus
parents:
diff changeset
   206
48194c26a46c Initial revision
claus
parents:
diff changeset
   207
    checkedScale := aScale asPoint.
48194c26a46c Initial revision
claus
parents:
diff changeset
   208
    ^ Point x:checkedScale x asFloat
48194c26a46c Initial revision
claus
parents:
diff changeset
   209
            y:checkedScale y asFloat
48194c26a46c Initial revision
claus
parents:
diff changeset
   210
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   211
48194c26a46c Initial revision
claus
parents:
diff changeset
   212
inverseScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   213
    "return with a Point representing the inverse of my
48194c26a46c Initial revision
claus
parents:
diff changeset
   214
     scale."
48194c26a46c Initial revision
claus
parents:
diff changeset
   215
48194c26a46c Initial revision
claus
parents:
diff changeset
   216
    |newScale|
48194c26a46c Initial revision
claus
parents:
diff changeset
   217
48194c26a46c Initial revision
claus
parents:
diff changeset
   218
    newScale := self checkScale:scale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   219
    ^ Point x:(1.0 / newScale x)
48194c26a46c Initial revision
claus
parents:
diff changeset
   220
            y:(1.0 / newScale y)
48194c26a46c Initial revision
claus
parents:
diff changeset
   221
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   222
48194c26a46c Initial revision
claus
parents:
diff changeset
   223
inverseTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   224
    "return with a Point representing the inverse of my
48194c26a46c Initial revision
claus
parents:
diff changeset
   225
     translation."
48194c26a46c Initial revision
claus
parents:
diff changeset
   226
48194c26a46c Initial revision
claus
parents:
diff changeset
   227
    |trans|
48194c26a46c Initial revision
claus
parents:
diff changeset
   228
48194c26a46c Initial revision
claus
parents:
diff changeset
   229
    trans := translation asPoint.
48194c26a46c Initial revision
claus
parents:
diff changeset
   230
    ^ Point x:trans x negated
48194c26a46c Initial revision
claus
parents:
diff changeset
   231
            y:trans y negated
48194c26a46c Initial revision
claus
parents:
diff changeset
   232
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   233
48194c26a46c Initial revision
claus
parents:
diff changeset
   234
setScale:aScale translation:aTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   235
    "Sets the scale to aScale and the translation to aTranslation."
48194c26a46c Initial revision
claus
parents:
diff changeset
   236
48194c26a46c Initial revision
claus
parents:
diff changeset
   237
    scale := aScale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   238
    translation := aTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   239
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   240
48194c26a46c Initial revision
claus
parents:
diff changeset
   241
!WindowingTransformation class methodsFor: 'instance creation'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   242
48194c26a46c Initial revision
claus
parents:
diff changeset
   243
identity
48194c26a46c Initial revision
claus
parents:
diff changeset
   244
    "returns a windowing transformation with no scaling (nil) 
48194c26a46c Initial revision
claus
parents:
diff changeset
   245
     and no translation (0@0)."
48194c26a46c Initial revision
claus
parents:
diff changeset
   246
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   247
    ^ self new setScale:nil translation:(Point x:0.0 y:0.0)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   248
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   249
48194c26a46c Initial revision
claus
parents:
diff changeset
   250
scale:aScale translation:aTranslation 
48194c26a46c Initial revision
claus
parents:
diff changeset
   251
    "returns a windowing transformation with a scale factor of  
48194c26a46c Initial revision
claus
parents:
diff changeset
   252
     aScale and a translation offset of aTranslation."
48194c26a46c Initial revision
claus
parents:
diff changeset
   253
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   254
    ^ self new setScale:aScale translation:aTranslation
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   255
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   256
48194c26a46c Initial revision
claus
parents:
diff changeset
   257
window:sourceRectangle viewport:destinationRectangle 
48194c26a46c Initial revision
claus
parents:
diff changeset
   258
    "returns a windowing transformation with a scale and
48194c26a46c Initial revision
claus
parents:
diff changeset
   259
     translation computed from sourceRectangle and destinationRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
   260
     The scale and transformation are computed such that sourceRectangle
48194c26a46c Initial revision
claus
parents:
diff changeset
   261
     is transformed to destinationRectangle."
48194c26a46c Initial revision
claus
parents:
diff changeset
   262
48194c26a46c Initial revision
claus
parents:
diff changeset
   263
    |sX sY tX tY newScale|
48194c26a46c Initial revision
claus
parents:
diff changeset
   264
    sX := destinationRectangle width / sourceRectangle width.
48194c26a46c Initial revision
claus
parents:
diff changeset
   265
    sY := destinationRectangle height / sourceRectangle height.
48194c26a46c Initial revision
claus
parents:
diff changeset
   266
    tX := destinationRectangle left - sourceRectangle left.
48194c26a46c Initial revision
claus
parents:
diff changeset
   267
    tY := destinationRectangle top - sourceRectangle top.
48194c26a46c Initial revision
claus
parents:
diff changeset
   268
    ((sX = 1.0) and:[sY = 1.0]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   269
        newScale := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   270
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   271
        newScale := Point x:sX y:sY
48194c26a46c Initial revision
claus
parents:
diff changeset
   272
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   273
    ^ self new setScale:newScale translation:(Point x:tX y:tY)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   274
! !