Revision Log
Revision: 1.1 - (view) (download)
| 1 : | ktanaka | 1.1 | ;; |
| 2 : | ;; nolink.l | ||
| 3 : | ;; $Revision: 1.2 $ | ||
| 4 : | ;; | ||
| 5 : | |||
| 6 : | (defun toggle-skeleton-link (win code x y prim) | ||
| 7 : | (lets ((ret nil) | ||
| 8 : | (points (get-points prim)) | ||
| 9 : | (lines (get-lines prim)) | ||
| 10 : | (aux-info (get-aux-info prim)) | ||
| 11 : | (now (list x y))) | ||
| 12 : | (if points | ||
| 13 : | (lets ((nth-nearest (nth-of-nearest-point now points)) | ||
| 14 : | (nearest (nth nth-nearest points)) | ||
| 15 : | (ret nil)) | ||
| 16 : | (cond ((< (distance-points now nearest) *near-range*) | ||
| 17 : | (lets ((l-info (cl:first (get-info nearest 'link-ok)))) | ||
| 18 : | (put-info nearest 'link-ok (ncons (not l-info))))) | ||
| 19 : | (t (beep win)))) | ||
| 20 : | (beep win)) | ||
| 21 : | (setq ret (cons points (cons lines aux-info))) | ||
| 22 : | (clear-win win) | ||
| 23 : | (if grid (grid-win win)) | ||
| 24 : | (draw-skeleton-win win ret) | ||
| 25 : | (redraw-win win) | ||
| 26 : | ret)) | ||
| 27 : | |||
| 28 : | (defun recursive-copy (s) | ||
| 29 : | (cond ((listp s) (cons (recursive-copy (car s)) | ||
| 30 : | (recursive-copy (cdr s)))) | ||
| 31 : | ((vectorp s) (let* ((len (vector-length s)) | ||
| 32 : | (ret (vector len))) | ||
| 33 : | (do ((i 0 (1+ i))) | ||
| 34 : | ((>= i len)) | ||
| 35 : | (vset ret i (recursive-copy (vref s i)))) | ||
| 36 : | (comment print (list 'vector s ret)) | ||
| 37 : | ret)) | ||
| 38 : | |||
| 39 : | ((stringp s) (string-append "" s)) | ||
| 40 : | ((atom s) s) | ||
| 41 : | (t | ||
| 42 : | (print (list 'hatena s)) | ||
| 43 : | s))) | ||
| 44 : | |||
| 45 : | (defun shapeup-skeleton (prim (leave nil)) | ||
| 46 : | (cond ((null prim) '(nil nil)) | ||
| 47 : | ((and (listp prim) (eq (car prim) 'joint)) | ||
| 48 : | (recursive-copy prim)) | ||
| 49 : | ((and (listp prim) (symbolp (car prim))) | ||
| 50 : | (recursive-copy prim)) | ||
| 51 : | (t | ||
| 52 : | (lets ((prrrrr (recursive-copy prim)) | ||
| 53 : | (points (get-points prrrrr)) | ||
| 54 : | (lines (get-lines prrrrr)) | ||
| 55 : | (aux-info (get-aux-info prrrrr)) | ||
| 56 : | (reference nil)) | ||
| 57 : | |||
| 58 : | ;; referenced ? | ||
| 59 : | (setq reference (vector (length points) 0)) | ||
| 60 : | (mapcar lines | ||
| 61 : | (function | ||
| 62 : | (lambda (l) | ||
| 63 : | (mapc (second l) | ||
| 64 : | (function (lambda (x) | ||
| 65 : | (vset reference x 1))))))) | ||
| 66 : | (do ((i 0 (1+ i)) | ||
| 67 : | (next 0)) | ||
| 68 : | ((>= i (vector-length reference))) | ||
| 69 : | (if (0= (vref reference i)) | ||
| 70 : | (vset reference i -1) | ||
| 71 : | (vset reference i next) | ||
| 72 : | (incr next 1))) | ||
| 73 : | |||
| 74 : | ;; delete no referenced points | ||
| 75 : | (setq points | ||
| 76 : | (do ((i 0 (1+ i)) | ||
| 77 : | (ret nil) | ||
| 78 : | (rest points (cdr rest))) | ||
| 79 : | ((null rest) ret) | ||
| 80 : | (if (>= (vref reference i) 0) | ||
| 81 : | (setq ret (append ret (ncons (first rest))))))) | ||
| 82 : | |||
| 83 : | ;; change point-reference in elements | ||
| 84 : | (setq lines | ||
| 85 : | (mapcar lines | ||
| 86 : | (function | ||
| 87 : | (lambda (l) | ||
| 88 : | (let ((top (first l)) | ||
| 89 : | (pos (second l)) | ||
| 90 : | (line-info (nthcdr 2 l))) | ||
| 91 : | (cons top | ||
| 92 : | (cons (mapcar pos | ||
| 93 : | (function | ||
| 94 : | (lambda (x) | ||
| 95 : | (vref reference x)))) | ||
| 96 : | line-info))))))) | ||
| 97 : | |||
| 98 : | ;; delete (link-ok nil) | ||
| 99 : | ;; and float -> fix | ||
| 100 : | (setq points (mapcar points | ||
| 101 : | #'(lambda (p) | ||
| 102 : | (setf (car p) (fix (car p))) | ||
| 103 : | (setf (cadr p) (fix (cadr p))) | ||
| 104 : | (unless (cl:first (get-info p 'link-ok)) | ||
| 105 : | (rem-info p 'link-ok)) | ||
| 106 : | p))) | ||
| 107 : | |||
| 108 : | ;; make skeleton link | ||
| 109 : | (setq | ||
| 110 : | lines | ||
| 111 : | (mapcar lines | ||
| 112 : | #'(lambda (l) | ||
| 113 : | ; changed by tanaka 1993/9/18 | ||
| 114 : | (cond ((memq (car l) '(outline stroke)) | ||
| 115 : | (lets ((epoints (cadr l)) | ||
| 116 : | (apoints | ||
| 117 : | (do ((i 0 (1+ i)) | ||
| 118 : | (ll epoints (cdr ll))(ret)) | ||
| 119 : | ((atom ll)(nreverse ret)) | ||
| 120 : | (and (assq 'link-ok (cddr (nth (car ll) points))) | ||
| 121 : | (push i ret))))) | ||
| 122 : | ; (prind apoints) | ||
| 123 : | (if apoints (put-info l 'curve apoints) nil) | ||
| 124 : | ; (prind l) | ||
| 125 : | l)) | ||
| 126 : | (t | ||
| 127 : | (let ((old-links (if leave | ||
| 128 : | (get-info l 'link) | ||
| 129 : | nil)) | ||
| 130 : | (links | ||
| 131 : | (do ((ret nil) | ||
| 132 : | (i 0 (1+ i)) | ||
| 133 : | (rest points (cdr rest))) | ||
| 134 : | ((null rest) ret) | ||
| 135 : | (let ((now (car rest))) | ||
| 136 : | (when (and | ||
| 137 : | (cl:first (get-info now 'link-ok)) | ||
| 138 : | (not (memq i (second l))) | ||
| 139 : | (< (distance-point-element | ||
| 140 : | now points l) | ||
| 141 : | *link-near-range*)) | ||
| 142 : | (push i ret)))))) | ||
| 143 : | (setq links (append old-links links)) | ||
| 144 : | (if links | ||
| 145 : | (put-info l 'link links) | ||
| 146 : | (rem-info l 'link)) | ||
| 147 : | (mapcar links | ||
| 148 : | #'(lambda (n) | ||
| 149 : | (put-info (nth n points) | ||
| 150 : | 'link-ok (ncons t))))) | ||
| 151 : | l))))) | ||
| 152 : | |||
| 153 : | ;; result | ||
| 154 : | (cons points (cons lines aux-info)))))) | ||
| 155 : | |||
| 156 : | (defun make-link-ok-from-old-version (prim) | ||
| 157 : | (lets ((points (get-points prim)) | ||
| 158 : | (lines (get-lines prim)) | ||
| 159 : | (aux-info (get-aux-info prim)) | ||
| 160 : | (link-ok-points nil)) | ||
| 161 : | (mapcar lines | ||
| 162 : | #'(lambda (now) | ||
| 163 : | ; changed by tanaka 1993/9/18 | ||
| 164 : | (let ((ps (or (get-info now 'link) | ||
| 165 : | (and (memq (car now) '(outline stroke)) | ||
| 166 : | (mapcar (get-info now 'curve) | ||
| 167 : | #'(lambda (x) (nth x (cadr now)))))))) | ||
| 168 : | (if ps | ||
| 169 : | (setq link-ok-points | ||
| 170 : | (append ps link-ok-points)))))) | ||
| 171 : | |||
| 172 : | (let ((i 0)) | ||
| 173 : | (mapcar points | ||
| 174 : | #'(lambda (np) | ||
| 175 : | (if (memq i link-ok-points) | ||
| 176 : | (put-info np 'link-ok '(t))) | ||
| 177 : | (setq i (1+ i))))) | ||
| 178 : | (cons points (cons lines aux-info)))) | ||
| 179 : | |||
| 180 : | |||
| 181 : | |||
| 182 : |
|
ktanaka Powered by ViewCVS 1.0-dev |
ViewCVS and CVS Help |