~hilaire-fernandes/drgeo/trunk

« back to all changes in this revision

Viewing changes to src/DrGeoII-Core/Rectangle.extension.st

  • Committer: Hilaire Fernandes
  • Date: 2017-11-15 13:17:03 UTC
  • Revision ID: hilaire.fernandes@gmail.com-20171115131703-pz09obavthi53ebt
DrGeo code under Tonel file format

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Extension { #name : #Rectangle }
 
2
 
 
3
{ #category : #'*DrGeoII-Core-intersection' }
 
4
Rectangle >> intersectionWith: aLineSeg [ 
 
5
        | intersections |
 
6
        intersections := Set new.
 
7
        (aLineSeg
 
8
                intersectionWith: (LineSegment from: self origin to: self bottomLeft))
 
9
                ifNotNil: [:inter | intersections add: inter].
 
10
        (aLineSeg
 
11
                intersectionWith: (LineSegment from: self origin to: self topRight))
 
12
                ifNotNil: [:inter | intersections add: inter].
 
13
        (aLineSeg
 
14
                intersectionWith: (LineSegment from: self corner to: self bottomLeft))
 
15
                ifNotNil: [:inter | intersections add: inter].
 
16
        (aLineSeg
 
17
                intersectionWith: (LineSegment from: self corner to: self topRight))
 
18
                ifNotNil: [:inter | intersections add: inter].
 
19
                intersections := intersections asOrderedCollection.
 
20
        intersections size = 2
 
21
                ifTrue: [^ LineSegment from: intersections first to: intersections second].
 
22
        intersections size = 0 
 
23
                ifTrue: 
 
24
                        [(self containsPoint: aLineSeg start) 
 
25
                                ifTrue: [(self containsPoint: aLineSeg end) ifTrue: [^aLineSeg ]]
 
26
                                ifFalse: [(self containsPoint: aLineSeg end) ifFalse: [^nil]]].
 
27
 
 
28
        (self containsPoint: aLineSeg start) 
 
29
                ifTrue: [
 
30
                        (self containsPoint: aLineSeg start) 
 
31
                                ifTrue: [^aLineSeg]
 
32
                                ifFalse: [^LineSegment from: aLineSeg start to: intersections first]].
 
33
        (self containsPoint: aLineSeg end) 
 
34
                ifTrue: [^LineSegment from: aLineSeg end to: intersections first].
 
35
        ^nil
 
36
]