(defun C:zahyou_csv ( / dcl_id ZLS)
        
        (setq ZLS (open "C:\\lisp\\zahyou_csv.txt" "r"));使用環境に合わせて正しくファイルパスを記述する事
        (if (= ZLS nil)
            (setq set_lst (list "P-" "1" "0" "4" "8"));初回 zahyou_csv.txt が存在しない場合
            (progn
                (setq set_val (read-line ZLS))
                (setq set_lst (list set_val))
                (while (/= set_val nil)
                    (setq set_val (read-line ZLS))
                    (setq set_lst (append set_lst (list set_val)))
                );while
                (close ZLS)
            );progn
        );if
        
        (setq settougo_str (nth 0 set_lst))
        (setq kaishi_str (nth 1 set_lst))
        (setq kinyuu_val (nth 2 set_lst))
        (setq h_keta_val (nth 3 set_lst))
        (setq y_keta_val (nth 4 set_lst))
        
        (setq kinyuu_data (list "点名のみ" "+座標"))
        (setq h_keta_data (list "0" "0.0" "0.00" "0.000" "0.0000" "0.00000" "0.000000" "0.0000000" "0.00000000"))
        (setq y_keta_data (list "0" "0.0" "0.00" "0.000" "0.0000" "0.00000" "0.000000" "0.0000000" "0.00000000"))
        
        (setq dcl_id (load_dialog "zahyou_csv.dcl"))
        (new_dialog "zahyou_csv" dcl_id "" '(1220 120))
        
        (start_list "kinyuu" 3)
        (mapcar 'add_list kinyuu_data)
        (end_list)
        
        (start_list "h_keta" 3)
        (mapcar 'add_list h_keta_data)
        (end_list)
        
        (start_list "y_keta" 3)
        (mapcar 'add_list y_keta_data)
        (end_list)
        
        (set_tile "settougo" settougo_str)
        (set_tile "kaishi" kaishi_str)
        (set_tile "kinyuu" kinyuu_val)
        (set_tile "h_keta" h_keta_val)
        (set_tile "y_keta" y_keta_val)
        
        (action_tile "accept"  "(SaveTileVal)(done_dialog 1)");OKボタンの場合
        (action_tile "cancel"  "(done_dialog 0)");キャンセルボタンの場合
        
        (setq ddiag (start_dialog))
        (unload_dialog dcl_id)
        
        (if (= (getvar "DIASTAT") 1)(kaishi));最後に使用したダイアログ ボックスの終了方法が"OK"で閉じたら
        (princ)
    );zahyou_list
    (defun SaveTileVal ()
        (setq settougo_str (get_tile "settougo"))
        (setq kaishi_str (get_tile "kaishi"))
        (setq kaishi0 kaishi_str)
        (setq kinyuu_val (atoi (get_tile "kinyuu")))
        (setq h_keta_val (atoi (get_tile "h_keta")))
        (setq y_keta_val (atoi (get_tile "y_keta")))
    );SaveTileVal
    (defun kaishi ( / dcl2_id ZLS tenban pt X Y pt2 zero_kosuu xcoord ycoord sa str1 str2 str3 txy moto ato)
        (setq osm (getvar "OSMODE"))
        (setvar "CMDECHO" 0)
        (setq ZL (open "C:\\lisp\\zl.csv" "w"));書き込み用にファイルを消去して開く
        (if (= ZL nil)
            (setq ZL (open "C:\\lisp\\zl.csv" "a"));ファイルが存在しないときは作成して開く
        );if
        (write-line "// ARES座標読み取りデータ//" ZL)
        
        (setq tenban "0")
        (setq pt "0")
        (setq pt2 "0")
        (while (/= pt nil)
            (initget 1)
            (command "_ID" pause)
            (setq pt (getvar "lastpoint"))
            (setq X (cadr pt))
            (setq Y (car pt))
            
            (setvar "OSMODE" 0)
            (setq pt1 (trans pt 1 0))
            (command "_ucs" "w")
            (command "_leader" pt1)
            (setq pt2 (getpoint pt1 "記入位置を指示:(右クリックで座標取得位置の再指示)"))
            (setvar "OSMODE" osm)
            
            
            (setq zero_kosuu(- (strlen kaishi_str)(strlen (itoa (atoi kaishi_str)))))
            
            (setq str1 (strcat settougo_str kaishi_str))
            
            (setq xcoord (rtos X 2 h_keta_val))
            (setq ycoord (rtos Y 2 h_keta_val))
            (setq sa (abs (- (strlen xcoord)(strlen ycoord))));文字数の差
            (cond ;xcoordとycoordの文字数を揃えるため、文字数が少ない方にその数だけスペースを追加する
                ((< (strlen xcoord)(strlen ycoord))(repeat sa (setq xcoord (strcat " " xcoord ))))
                ((> (strlen xcoord)(strlen ycoord))(repeat sa (setq ycoord (strcat " " ycoord ))))
            );cond
            
            (setq str2 (strcat "X= " xcoord ))
            (setq str3 (strcat "Y= " ycoord ))
            
            (if (= kinyuu_val 0)
                (command pt2 "" str1 "")
                (command pt2 "" str1 str2 str3 "")
            )
            (command "_ucs" "p")
            (princ)
            
            (if (/= pt2 nil)
                (progn
                    (setq tenban (itoa (+ (atoi tenban) 1)))
                    (setq txy (strcat tenban "," str1 "," (rtos X 2 y_keta_val) "," (rtos Y 2 y_keta_val)));文字列 [点番,点名,X座標,Y座標]
                    (write-line txy ZL)
                    (setq moto (strlen (itoa (atoi kaishi_str))));開始値の数値としての文字数
                    (setq kaishi_str (itoa (+ (atoi kaishi_str) 1)))
                    (setq ato (strlen kaishi_str));開始値を1増やした時の数値としての文字数
                    (setq zero_kosuu (- zero_kosuu (- ato moto)));開始値が1桁繰り上がっても全体文字数を変えない為
                    (repeat zero_kosuu (setq kaishi_str (strcat "0" kaishi_str)))
                )
            )
            
            (setq ZLS (open "C:\\lisp\\zahyou_csv.txt" "w"));使用環境に合わせて正しくファイルパスを記述する事!
                (write-line settougo_str ZLS)
                (write-line kaishi_str ZLS)
                (write-line (itoa kinyuu_val) ZLS)
                (write-line (itoa h_keta_val) ZLS)
                (write-line (itoa y_keta_val) ZLS)
            (close ZLS)
        );while
        
        
    );kaishi
    (defun *error* (msg)
        (close ZL)
        (setvar "CMDECHO" 1)
        (setvar "OSMODE" Osm);オブジェクトスナップモードを元に戻す
        (princ msg)
        (princ)
    );*error*
    (princ)
--------------
/* zahyou_csv.dcl - dcl file for zahyou_csv.lsp program */
zahyou_csv :dialog
{
    label = "座標値取得CSV出力";
    :column
    {
        :edit_box
        {
            label = "接頭語   ";
            key = "settougo";
            width = 8;
        }
        
        :edit_box
        {
            label = "開始値   ";
            key = "kaishi";
            width = 8;
        }
        
        :popup_list
        {
            label = "記入項目";
            key = "kinyuu";
            width = 10;
        }
        
        :popup_list
        {
            label = "表示桁";
            key = "h_keta";
            width = 10;
        }
        
        :popup_list
        {
            label = "有効桁";
            key = "y_keta";
            width = 10;
        }
        
    }
    
    /* OK or CANCEL */
    spacer;
    //ok_cancel;
    :row
    {
        :button
        {
            label = "開始";
            is_default = true;
            key = "accept";
            width = 4;
            fixed_width = true;
        }
    //:spacer { width = 1; }
        :button
        {
            label = "終了";
            is_cancel = true;
            key = "cancel";
            width = 4;
            fixed_width = true;
        }
    }
}
-----------
AutoLispで、書かれたコードなのですがCADの種類が違っていて正常に動きません。
Autocadで、動作出来る様に修正してほしいです。
宜しくお願い致します。
autocadだと動かない
- たー
- 2019/03/10 (Sun) 21:24:10