外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
clispで曲線データを確認する(pl)
:clispで曲線データを確認する(pl)
@echo off
for /f "delims=:" %%n in ('findstr /n "^#!" %0') do (
copy jwc_temp.txt myfiles > nul
more +%%n %0 | clisp -q > nul
)
goto:eof
REM #jww
REM #h1
REM #hc 曲線を選択してください
REM #e
#!この次の行からプログラムを書いてください
;ユーザ定義関数
( ;文字列 "x" を 数値 xd0 (倍精度 double-float) に変換
defun to_f (x)
(if (equal x nil) (setq x "0"))
(if (listp x)
(mapcar #'to_f x)
(progn
(if (typep x 'double-float)
x
(progn
(if (stringp x) nil (setq x (write-to-string x)))
(if (search "e" x)
(progn
(setq s (search "e" x))
(read-from-string
(concatenate 'string (subseq x 0 s) "d" (subseq x (+ 1 s) (length x)))
)
) ;progn (search "e" x)
(if (search "d" x)
x
(read-from-string
(concatenate 'string x "d0")
)
)
)
) ;progn (typep x 'double-float)
)
) ;progn (listp x)
)
)
(defun pl (i &optional j)
(if (equal j "x1") (setq j 0))
(if (equal j "y1") (setq j 1))
(if (equal j "x2") (setq j 2))
(if (equal j "y2") (setq j 3))
(if j (if (> (abs j) 3) (setq j nil)))
(if j (elt (elt pl i) j) (elt pl i))
)
;本文
(setq pl '( (0 0 0 0)))
(setq pln 0)
(setq plno '(0))
(setq plnno 0)
(setq plflg 0)
( ;jwc_temp.txt へ 出力
with-open-file (g "jwc_temp.txt" :direction :output)
( ;myfiles から 入力
with-open-file (f "myfiles" :direction :input)
(loop for line = (read-line f nil) while line do
(setq a (regexp:regexp-split " \\+" line))
(if (regexp:match "^hq" line)
(write-line "hd" g)
)
;曲線データ
(if (regexp:match "^pl" line)
(setq plflg 1)
)
(if (regexp:match "^ " line)
(if (equal plflg 1)
(progn
(if (>= (- pln (length pl)) 0)
(loop for i to (- pln (length pl)) do
(setq pl (append pl '( (0 0 0 0))))
)
)
(setf (elt pl pln) (cdr a))
(setq pln (+ pln 1))
)
)
)
(if (regexp:match "^#" line)
(if (equal plflg 1)
(progn
(if (>= (- plnno (length plno)) 0)
(loop for i to (- plnno (length plno)) do
(setq plno (append plno '(0)))
)
)
(setf (elt plno plnno) (length pl))
;(setf (elt plno plnno) pln)
(setq plnno (+ plnno 1))
(setq plflg 0)
)
)
)
)
(loop for i from 1 to plnno do
(write-line "pl" g)
(format g "lc~d~%" (+ 6 i))
(if (= i 1)
(setq k 0)
(setq k (nth (- i 2) plno))
)
(loop for j from k to (- (nth (- i 1) plno) 1) do
(setq x1 (to_f (nth 0 (pl j))))
(setq y1 (to_f (nth 1 (pl j))))
(setq x2 (to_f (nth 2 (pl j))))
(setq y2 (to_f (nth 3 (pl j))))
(format g "~f ~f ~f ~f~%" x1 y1 x2 y2)
)
(write-line "#" g)
)
)
)