jw_cad 外部変形 - (1128) clispで曲線データを確認する(pl) -

外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。

 

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)
  )

)
)