LineSegment.st
author Claus Gittinger <cg@exept.de>
Wed, 08 May 1996 21:32:21 +0200
changeset 284 1b272ff61339
parent 282 f2f29344e676
child 286 09da374b5438
permissions -rw-r--r--
checkin from browser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 1996 by Claus Gittinger
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    15
Geometric subclass:#Curve
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    16
	instanceVariableNames:'startPoint middlePoint endPoint'
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	classVariableNames:''
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	poolDictionaries:''
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	category:'Graphics-Geometry'
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    22
!Curve class methodsFor:'documentation'!
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
copyright
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
"
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
 COPYRIGHT (c) 1996 by Claus Gittinger
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
              All Rights Reserved
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
 This software is furnished under a license and may be used
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 only in accordance with the terms of that license and with the
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 be provided or otherwise made available to, or used by, any
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 other person.  No title to or ownership of the software is
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
 hereby transferred.
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
"
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
documentation
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
"
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    42
    A Curve is a conic section determined by three points
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    43
    that interpolates the first and the third and is tangent to the angle formed
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    44
    by the three points at the first and third points.
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    [author:]
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
        Claus Gittinger
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    [see also:]
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    50
        Rectangle Polygon EllipticalArc Circle Spline Point LineSegment
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
        GraphicsContext
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
"
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
!
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    56
examples
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    57
"
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    58
  filled & unfilled:
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    59
                                                                        [exBegin]
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    60
    |v c|
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    61
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    62
    v := (View extent:100@100) openAndWait.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    63
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    64
    c := Curve start:(20@20) middle:(80@80) end:(20@80).
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    65
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    66
    v paint:Color blue.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    67
    c displayFilledOn:v.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    68
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    69
    v paint:Color red.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    70
    c displayStrokedOn:v.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    71
                                                                        [exEnd]
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    72
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    73
  with a grid (for demonstration):
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    74
                                                                        [exBegin]
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    75
    |v c|
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    76
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    77
    v := (View extent:200@100) openAndWait.
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    79
    v lineStyle:#dashed.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    80
    v displayLineFrom:(20@0) to:(20@200).
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    81
    v displayLineFrom:(180@0) to:(180@200).
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    82
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    83
    v displayLineFrom:(0@20) to:(200@20).
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    84
    v displayLineFrom:(0@80) to:(200@80).
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    85
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    86
    v lineStyle:#solid.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    87
    c := Curve start:(20@20) middle:(180@80) end:(20@80).
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    89
    v paint:Color blue.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    90
    c displayFilledOn:v.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    91
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    92
    v paint:Color red.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    93
    c displayStrokedOn:v.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    94
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    95
    v paint:(Color black).
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    96
    v displayLineFrom:(20@20) to:(180@80).
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    97
    v displayLineFrom:(20@80) to:(180@80).
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    98
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
    99
                                                                        [exEnd]
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   100
"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
! !
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   103
!Curve class methodsFor:'instance creation'!
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   104
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   105
from:startPoint to:endPoint through:middlePoint
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   106
    "return a new curve, passing through the three given points"
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   107
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   108
    ^ self new start:startPoint middle:middlePoint end:endPoint
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   109
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   110
    "Created: 8.5.1996 / 21:16:39 / cg"
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   111
!
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   112
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   113
start:startPoint middle:middlePoint end:endPoint
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   114
    "return a new curve, passing through the three given points"
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   115
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   116
    ^ self new start:startPoint middle:middlePoint end:endPoint
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   117
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   118
    "Created: 8.5.1996 / 21:19:30 / cg"
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   119
! !
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   120
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   121
!Curve methodsFor:'accessing'!
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
end
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    "return the endPoint"
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    ^ endPoint
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   128
    "Created: 8.5.1996 / 21:08:35 / cg"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
!
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
start
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    "return the startPoint"
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    ^ startPoint
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   136
    "Created: 8.5.1996 / 21:08:44 / cg"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
!
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   139
start:p1 middle:p2 end:p3
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   140
    "set the startPoint, middlePoint and the endPoint"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    startPoint := p1.
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   143
    middlePoint := p2.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   144
    endPoint := p3.
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   146
    "Created: 8.5.1996 / 21:09:40 / cg"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
! !
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   149
!Curve methodsFor:'displaying'!
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
displayFilledOn:aGC
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   152
    "draw the receiver as a filled curve in a graphicsContext, aGC"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   154
    aGC fillPolygon:self computeLines
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   156
    "Created: 8.5.1996 / 21:24:15 / cg"
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   157
    "Modified: 8.5.1996 / 21:25:33 / cg"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
!
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
displayStrokedOn:aGC
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   161
    "draw the receiver as a unfilled curve in a graphicsContext, aGC"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   163
    aGC displayPolygon:self computeLines
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   165
    "Modified: 8.5.1996 / 21:25:35 / cg"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
! !
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   168
!Curve methodsFor:'helpers'!
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   169
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   170
computeLines
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   171
    "compute the lines which approxiamte this curve"
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   172
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   173
    |lines pa pb 
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   174
     numberOfSegments "{ Class: SmallInteger }"|
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   175
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   176
    lines := OrderedCollection new.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   177
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   178
    "/ Compute the number of line segments used to approximate the curve.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   179
    pa := middlePoint - startPoint.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   180
    pb := endPoint - middlePoint.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   181
    numberOfSegments := 5 max:pa x abs + pa y abs + pb x abs + pb y abs // 20.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   182
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   183
    "/ Add all of the points necessary for the path.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   184
    lines add:startPoint.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   185
    1 to:numberOfSegments do:[:seg | 
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   186
        lines add:
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   187
                ((pa * seg // numberOfSegments + startPoint) * (numberOfSegments - seg)
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   188
                + ((pb * (seg - 1) // numberOfSegments + middlePoint) * (seg - 1)))
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   189
                // (numberOfSegments - 1)
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   190
    ].
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   191
    lines add:endPoint.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   192
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   193
    ^ lines
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   194
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   195
    "Created: 8.5.1996 / 21:23:29 / cg"
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   196
! !
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   197
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   198
!Curve methodsFor:'queries'!
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
bounds
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
    "return the smallest enclosing rectangle"
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   203
    |min max|
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   205
    min := (startPoint min: endPoint) min: middlePoint.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   206
    max := (startPoint max: endPoint) max: middlePoint.
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   207
    ^ min corner:max
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
    "
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   210
     (Curve from:10@10 to:50@100 through:50@50) bounds   
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   211
     (Curve from:10@10 to:50@100 through:100@50) bounds 
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
    "
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   214
    "Modified: 8.5.1996 / 21:18:50 / cg"
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
! !
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   217
!Curve class methodsFor:'documentation'!
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
version
284
1b272ff61339 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 282
diff changeset
   220
    ^ '$Header: /cvs/stx/stx/libbasic2/LineSegment.st,v 1.2 1996-05-08 19:32:21 cg Exp $'
282
f2f29344e676 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
! !