(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