1
2(PUT '|TUBE;getCurve;$Curve;1| '|SPADreplace| '(XLAM (|plot|) (QVELT |plot| 0)))
3
4(SDEFUN |TUBE;getCurve;$Curve;1| ((|plot| $) ($ |Curve|)) (QVELT |plot| 0))
5
6(PUT '|TUBE;listLoops;$L;2| '|SPADreplace| '(XLAM (|plot|) (QVELT |plot| 1)))
7
8(SDEFUN |TUBE;listLoops;$L;2|
9        ((|plot| $) ($ |List| (|List| (|Point| (|DoubleFloat|)))))
10        (QVELT |plot| 1))
11
12(PUT '|TUBE;closed?;$B;3| '|SPADreplace| '(XLAM (|plot|) (QVELT |plot| 2)))
13
14(SDEFUN |TUBE;closed?;$B;3| ((|plot| $) ($ |Boolean|)) (QVELT |plot| 2))
15
16(SDEFUN |TUBE;open?;$B;4| ((|plot| $) ($ |Boolean|)) (NULL (QVELT |plot| 2)))
17
18(PUT '|TUBE;setClosed;$2B;5| '|SPADreplace|
19     '(XLAM (|plot| |flag|) (QSETVELT |plot| 2 |flag|)))
20
21(SDEFUN |TUBE;setClosed;$2B;5| ((|plot| $) (|flag| |Boolean|) ($ |Boolean|))
22        (QSETVELT |plot| 2 |flag|))
23
24(PUT '|TUBE;tube;CurveLB$;6| '|SPADreplace| 'VECTOR)
25
26(SDEFUN |TUBE;tube;CurveLB$;6|
27        ((|curve| |Curve|) (|ll| |List| (|List| (|Point| (|DoubleFloat|))))
28         (|b| |Boolean|) ($ $))
29        (VECTOR |curve| |ll| |b|))
30
31(DECLAIM (NOTINLINE |TubePlot;|))
32
33(DEFUN |TubePlot| (#1=#:G410)
34  (SPROG NIL
35         (PROG (#2=#:G411)
36           (RETURN
37            (COND
38             ((LETT #2#
39                    (|lassocShiftWithFunction| (LIST (|devaluate| #1#))
40                                               (HGET |$ConstructorCache|
41                                                     '|TubePlot|)
42                                               '|domainEqualList|))
43              (|CDRwithIncrement| #2#))
44             ('T
45              (UNWIND-PROTECT (PROG1 (|TubePlot;| #1#) (LETT #2# T))
46                (COND ((NOT #2#) (HREM |$ConstructorCache| '|TubePlot|))))))))))
47
48(DEFUN |TubePlot;| (|#1|)
49  (SPROG ((|pv$| NIL) ($ NIL) (|dv$| NIL) (DV$1 NIL))
50         (PROGN
51          (LETT DV$1 (|devaluate| |#1|))
52          (LETT |dv$| (LIST '|TubePlot| DV$1))
53          (LETT $ (GETREFV 16))
54          (QSETREFV $ 0 |dv$|)
55          (QSETREFV $ 3 (LETT |pv$| (|buildPredVector| 0 0 NIL)))
56          (|haddProp| |$ConstructorCache| '|TubePlot| (LIST DV$1) (CONS 1 $))
57          (|stuffDomainSlots| $)
58          (QSETREFV $ 6 |#1|)
59          (SETF |pv$| (QREFELT $ 3))
60          (QSETREFV $ 7
61                    (|Record| (|:| |parCurve| |#1|)
62                              (|:| |loops|
63                                   (|List| (|List| (|Point| (|DoubleFloat|)))))
64                              (|:| |closedTube?| (|Boolean|))))
65          $)))
66
67(MAKEPROP '|TubePlot| '|infovec|
68          (LIST
69           '#(NIL NIL NIL NIL NIL NIL (|local| |#1|) '|Rep|
70              |TUBE;getCurve;$Curve;1|
71              (|List| (|List| (|Point| (|DoubleFloat|)))) |TUBE;listLoops;$L;2|
72              (|Boolean|) |TUBE;closed?;$B;3| |TUBE;open?;$B;4|
73              |TUBE;setClosed;$2B;5| |TUBE;tube;CurveLB$;6|)
74           '#(|tube| 0 |setClosed| 7 |open?| 13 |listLoops| 18 |getCurve| 23
75              |closed?| 28)
76           'NIL
77           (CONS (|makeByteWordVec2| 1 '(0))
78                 (CONS '#(NIL)
79                       (CONS
80                        '#((|Join|
81                            (|mkCategory|
82                             (LIST '((|getCurve| (|#1| $$)) T)
83                                   '((|listLoops|
84                                      ((|List|
85                                        (|List| (|Point| (|DoubleFloat|))))
86                                       $$))
87                                     T)
88                                   '((|closed?| ((|Boolean|) $$)) T)
89                                   '((|open?| ((|Boolean|) $$)) T)
90                                   '((|setClosed| ((|Boolean|) $$ (|Boolean|)))
91                                     T)
92                                   '((|tube|
93                                      ($$ |#1|
94                                       (|List|
95                                        (|List| (|Point| (|DoubleFloat|))))
96                                       (|Boolean|)))
97                                     T))
98                             (LIST) NIL NIL)))
99                        (|makeByteWordVec2| 15
100                                            '(3 0 0 6 9 11 15 2 0 11 0 11 14 1
101                                              0 11 0 13 1 0 9 0 10 1 0 6 0 8 1
102                                              0 11 0 12)))))
103           '|lookupComplete|))
104