TOP PAGE > 記事閲覧
座標値取得〜SIMAファイル作成 LISP
投稿日 : 2018/05/28(Mon) 18:02
投稿者 だい
参照先
他スレッドで測量座標の取得について書き込みましたが、そこから発展させてSIMAファイル出力
までできるLISPを作成しました。

3,72,74,129行目にファイルパスが記述してありますが、使用環境に合わせて適宜書き換えてください。
自分の場合は、Cドライブに"LISP"というフォルダを作って運用しています。
また、ARESの[ツール]メニュー [オプション]の"ファイルの場所"タブで"システム"の中の
"サポートファイルの検索パス"に、使用するフォルダを登録して下さい。


↓こちらをzahyou_sima.lspとして下さい。

(defun C:zahyou_sima ( / dcl_id ZLS)

(setq ZLS (open "C:\\lisp\\zahyou_sima.txt" "r"));使用環境に合わせて正しくファイルパスを記述する事
(if (= ZLS nil)
(setq set_lst (list "P-" "1" "0" "4" "8"));初回 zahyou_sima.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_sima.dcl"))
(new_dialog "zahyou_sima" 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_sima


(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.sim" "w"));書き込み用にファイルを消去して開く
(if (= ZL nil)
(setq ZL (open "C:\\lisp\\zl.sim" "a"));ファイルが存在しないときは作成して開く
);if
(write-line "G00,01,," ZL)
(write-line "Z00,// ARES座標読み取りデータ//," ZL)
(write-line "A00," ZL)

(setq tenban "0")
(setq pt "0")
(setq pt2 "0")
(while (/= pt nil)
(initget 1)
(setq pt (getpoint "座標取得位置を指示:(Escで終了)"))
(setq X (cadr pt))
(setq Y (car pt))

(setvar "OSMODE" 0)
(command "_leader" "@" )
(setq pt2 (getpoint pt "記入位置を指示:(右クリックで座標取得位置の再指示)"))
(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 "@" "" str1 "")
(command "@" "" str1 str2 str3 "")
)
(princ)

(if (/= pt2 nil)
(progn
(setq tenban (itoa (+ (atoi tenban) 1)))
(setq txy (strcat "A01," 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_sima.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)
(write-line "A99," ZL)
(close ZL)
(setvar "CMDECHO" 1)
(setvar "OSMODE" Osm);オブジェクトスナップモードを元に戻す
(princ msg)
(princ)
);*error*

(princ)
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2018/05/28(Mon) 18:05
投稿者 だい
参照先
ダイアログを使うので、↓こちらを zahyou_sima.dcl として下さい。


/* zahyou_sima.dcl - dcl file for zahyou_sima.lsp program */

zahyou_sima :dialog
{
label = "座標値取得";
: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;
}
}
}
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2018/07/13(Fri) 17:25
投稿者 だい
参照先
ARESのバージョンを 2018.2 (build 18.2.1.3108) にアップデートしたら
うまく動かなくなったので、zahyou_sima.lspを修正しました。


(defun C:zahyou_sima ( / dcl_id ZLS)

(setq ZLS (open "C:\\lisp\\zahyou_sima.txt" "r"));使用環境に合わせて正しくファイルパスを記述する事
(if (= ZLS nil)
(setq set_lst (list "P-" "1" "0" "4" "8"));初回 zahyou_sima.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_sima.dcl"))
(new_dialog "zahyou_sima" 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.sim" "w"));書き込み用にファイルを消去して開く
(if (= ZL nil)
(setq ZL (open "C:\\lisp\\zl.sim" "a"));ファイルが存在しないときは作成して開く
);if
(write-line "G00,01,," ZL)
(write-line "Z00,// ARES座標読み取りデータ//," ZL)
(write-line "A00," ZL)

(setq tenban "0")
(setq pt "0")
(setq pt2 "0")
(while (/= pt nil)
(initget 1)
(command "_GETXY" 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 "@" "" str1 "")
(command "@" "" str1 str2 str3 "")
)
(command "_ucs" "p")
(princ)

(if (/= pt2 nil)
(progn
(setq tenban (itoa (+ (atoi tenban) 1)))
(setq txy (strcat "A01," 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_sima.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)
(write-line "A99," ZL)
(close ZL)
(setvar "CMDECHO" 1)
(setvar "OSMODE" Osm);オブジェクトスナップモードを元に戻す
(princ msg)
(princ)
);*error*

(princ)
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/19(Tue) 15:43
投稿者 十六夜
参照先
面白いlispをありがとうございます。
測量座標系って機械図面などと違い、XYが逆転しているんですね。
はじめは、??って思いましたが、そういえば測量座標系って水平方向をyって読むんだったかな?と思いだしたらすんなりいきました。
・・・これって構造物のXY座標位置求めるにも使える面白いlispですね。

機械図面や建築にも応用できるように、XYを数学座標系で示してみたいのですが、このような事ってできるものなのでしょうか?
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/22(Fri) 10:35
投稿者 だい
参照先
十六夜さん、こんにちは。
2018/07/13に投稿したLISPの87行目と88行目を下記のように書き換えて下さい。

87行目 (setq X (cadr pt)) → (setq X (car pt))
88行目 (setq Y (car pt)) → (setq Y (cadr pt))

リストになった座標値の、どの数値をX,Yとして取り込むかという事です。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/22(Fri) 12:04
投稿者 十六夜
参照先
だい さま
こちら十六夜です。
どこがどうなっているのかなと読み解いていましたが、なかなか理解が進んでいないところに、助け舟というか、答えを教えて頂き、ありがとうございます。
このLispすごいですね。
今度は読み解きながら、Z座標も取得出来ないものかと試しています。うまくいけば投稿したいですが、難しそう。
機械図面ではあまり3次元座標はいらないのですが、土木系の図面を書くと、この等高線の高さはなんだろうってときにZ座標まで取得できると非常にうれしかったりする。
(最近は等高線が3Dで書くようになっているため結構欲しかったり。)

ちょっと違う話になりますが、Ares_commander含むDWG互換CADはQGISというオープンソースのGISとも絶対座標系を使うという観点ですごく相性がいいのでCAD図面の相互やり取りがすごくしやすく、3D図の複雑な等高線図面がサクサク作れます。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/22(Fri) 14:29
投稿者 だい
参照先
86行目の (setq pt (getvar "lastpoint")) は、

ARESのシステム変数"lastpoint"は、CADで最後に指定された点の座標を保持しているので、
その値を変数の"pt"にリスト(X座標値,Y座標値,Z座標値)として代入しています。

87行目と88行目ではリストから1番目(X)と2番目(Y)の値を取り出しています。
3番目(Z)の値を取り出すのはcarやcadrをcddrに変えれば良いです。

ARESのLisp リファレンスの、car,caaaar ... cddddr,cdrを見るだけではちょっとわかりにくいですね。
私はネットで検索して調べましたが、どうも混乱していまいち理解できていません。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/22(Fri) 14:35
投稿者 十六夜
参照先
当初予定していた通り、Z座標までを数学座標系で入手する事ができるようになりました。
画面上にも、Z座標が書かれているようには見えます。
しかし、図面を傾けると、ちょっと残念なことに、引き出し線がZ=0の平面に書かれてしまいます。
どのようにしたらZ座標と等しい部分に引き出し線を書いてもらえるのでしょうか?
コードは「だい 様」の物に追記しただけのもので申し訳ありませんが、投稿いたします。
(だい 様のコードで3行目に
setq ZLS (open "C:\\lisp\\zahyou_sima.txt" "r"));使用環境に合わせて正しくファイルパスを記述する事
という部分があったのですが、ここが何を表しているのかが良く分からず、一時ファイル扱いにしてあります。)
__________________________________________

(defun C:commonZ ( / dcl_id ZLS)

(setq ZLS (open "C:\\Lisp\\座標値_数学座標系Z_一時ファイル.txt" "r"));使用環境に合わせて正しくファイルパスを記述する事
(if (= ZLS nil)
(setq set_lst (list "P-" "1" "0" "4" "8"));初回 座標値_数学座標系.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_sima.dcl"))
(new_dialog "zahyou_sima" 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\\座標値_数学座標系Z.csv" "a"));書き込み用にファイルを消去して開く
(if (= ZL nil)
(setq ZL (open "C:\\Lisp\\座標値_数学座標系Z.csv" "a"));ファイルが存在しないときは作成して開く
);if
(write-line "G00,01,," ZL)
(write-line "Z00,// ARES座標読み取りデータ//," ZL)
(write-line "A00," ZL)

(setq tenban "0")
(setq pt "0")
(setq pt2 "0")
(while (/= pt nil)
(initget 1)
(command "_GETXY" pause)
(setq pt (getvar "lastpoint"))
(setq X (car pt))
(setq Y (cadr pt))
(setq Z (caddr 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 zcoord (rtos Z 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 ))
(setq str4 (strcat "Z= " zcoord ))
(if (= kinyuu_val 0)
(command "@" "" str1 "")
(command "@" "" str1 str2 str3 str4"")
)
(command "_ucs" "p")
(princ)

(if (/= pt2 nil)
(progn
(setq tenban (itoa (+ (atoi tenban) 1)))
(setq txy (strcat "A01," tenban "," str1 "," (rtos X 2 y_keta_val) "," (rtos Y 2 y_keta_val)"," (rtos Z 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\\座標値_数学座標系Z_一時ファイル.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)
(write-line "A99," ZL)
(close ZL)
(setvar "CMDECHO" 1)
(setvar "OSMODE" Osm);オブジェクトスナップモードを元に戻す
(princ msg)
(princ)
);*error*

(princ)
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/22(Fri) 15:01
投稿者 十六夜
参照先
だい 様
書きこんでいる途中に投稿いただいたようでありがとうございます。
まだまだ勉強中でコードをサンプルコードとしながら解析中です。
結構分かりにくいですね。

このコードってAutocadでも動くのだろうか?
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/22(Fri) 18:42
投稿者 だい
参照先
setq ZLS (open "C:\\lisp\\zahyou_sima.txt" "r"));使用環境に合わせて正しくファイルパスを記述する事

これは、ダイアログの状態をテキストファイルに記憶させておく為です。
次回使うときに前回の設定や点名などを復元させるため。


ARESのleaderコマンドで引出線を記入する時に、マウスで指示せずX,Y,Z座標値を入力してもZ値は0で描かれてしまいますね。
95行目のpt2の値(X,Y,Z)のZ値を書き換えればいいかなと思ったんですが、ダメですね。

書き込んだ引出線を移動コマンドで移動すればうまくいくかな?
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/27(Wed) 10:01
投稿者 十六夜
参照先
だい 様
ご説明ありがとうございます。そういう意味合いのテキストファイルでしたか。

あれからちょっと調べてやってみたのですが、Z座標の位置与えられませんでした。
う〜ん。どこどういじれば引き出し線にZ座標与えれるんだろう?
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/27(Wed) 16:57
投稿者 だい
参照先
投稿日 	: 2019/02/22(Fri) 14:35 の十六夜さんのコードで、

(if (= kinyuu_val 0)
(command "@" "" str1 "")
(command "@" "" str1 str2 str3 str4"")
)

の下、119行目に
(setq SP (strcat (rtos X) "," (rtos Y) ",0" ))
(setq MP (strcat (rtos X) "," (rtos Y) "," (rtos Z) ))
(command "move" "l" "" SP MP)

を挿入すれば、引出線は移動できます。
でも文字が移動できない、、、
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/02/28(Thu) 11:23
投稿者 十六夜
参照先
だい 様
すごいです。私にはなんでこれで移動できるのかが分からない。けど、この構文でSPという部分に引いてある引き出し線をMPの位置に移動させろという意味になっているのだろうか。
参考に、文字の部分もいじってみましたが、今度は文字の表示ができなくなったため、上記の構文を入れた状態までロールバック。
う〜ん。文字を記載する部分のコードの理解ができていない。もっというならなんとなくで改造させてもらっているため、
X
Y
Z
のように三段になるように改行してくれる指示が読み解けていないです。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/02(Sat) 09:57
投稿者 ジュンコ
参照先


まさに、探していたものなのですが私はAutocad2018LTからIJCAD2015を使うように会社からの指令で移行しているのですが
このLISPファイルはIJCADでも動作可能でしょうか?

私は、「XY座標」だけです。

その場合の最新版は、どれになるのか教えてください。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/04(Mon) 14:43
投稿者 だい
参照先
十六夜さんこんにちは。

(setq SP (strcat (rtos X) "," (rtos Y) ",0" ))
(setq MP (strcat (rtos X) "," (rtos Y) "," (rtos Z) ))
(command "move" "l" "" SP MP)
で、

command はARESにコマンドを実行させる関数で、ここでは move(オブジェクトの移動)を命じています。
setq は変数に値を記憶させる関数です。SPに始点を、MPに目的点を記憶させています。
上の3行は以下でも代用できます。

(command "move" "l" "" "0,0,0" (strcat "0,0," (rtos Z) ))

ARESのコマンドラインに move と書き込むと "エンティティを指定"と表示されます。
そこで、最後に作成されたエンティティを選ばせるために、
"l"(最後の(Last)オプションは、最後に作図されたエンティティを選択リストに追加します。)
で選択、次の "" は空打ちで選択リストを決定するエンターです。
"0,0,0" は移動の始点のX,Y,Z座標値です。
(strcat "0,0," (rtos Z) ) は目的点の座標値で、X,Y座標値は0,0でZ座標値が読み取らせた値です。
(要はZ軸方向にだけ動かせれば良いので、XとYは0のままとしました。)
strcat 関数は複数の文字列を連結して返します。ここでは"0,0,"とZ座標値を連結しています。
その際、rtos 関数でZ座標値を実数 value から文字列に変換しています。


>X
>Y
>Z
>のように三段になるように改行

これは、(command "@" "" str1 str2 str3 str4"")の時に、点名 X座標 Y座標 Z座標ごとに勝手に改行されるみたい?
最後の "" は文字入力終了の為のEnterです。


ジュンコさんこんにちは。

投稿日 : 2018/07/13(Fri) 17:25 に記述した物を zahyou_sima.lsp として、
投稿日 : 2018/05/28(Mon) 18:05 を zahyou_sima.dcl にして下さい。

ARESの位置情報取得コマンドを85行目で使用しているので、(command "_GETXY" pause)を(command "_ID" pause)に変更して下さい。
ただ、この変更だけでIJCADで使用できるかどうかは分かりません。

これは、測量関係で使うSIMAファイルを作成しますが、必要なのはCSVファイルですか?
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/04(Mon) 21:23
投稿者 ジュンコ
参照先
だい さん
こんばんは
返信ありがとうございます。
はい、私も測量座標で使用します。
そうてすね、最終的にcsvファイルで取り出しが出来れば
嬉しいです。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/05(Tue) 00:19
投稿者 だい
参照先
ジュンコさん、こんばんは。
↓こちらを zahyou_csv.lsp として下さい。

(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)
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/05(Tue) 00:23
投稿者 だい
参照先
↓こちらを zahyou_csv.dcl で保存



/* 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;
}
}
}
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/05(Tue) 07:07
投稿者 ジュンコ
参照先
だい さん
ありがとうございます。
新しくコードも、作成頂きありがとうございます。
LISP初心者なので設定方法も知りたいです。
設定してから、コマンドか何かで実行出来るのでしょうか?
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/05(Tue) 10:43
投稿者 だい
参照先
ARESの場合ですが、ARESの[ツールメニュー]-[インタフェースのカスタマイズ]でコマンドの追加。

追加したコマンドの[コマンド文字列]に
^C^C(load "zahyou_csv");zahyou_csv;
と記述。そのコマンドをツールバーにボタン追加して運用しています。

私の場合は、CドライブにLISPというフォルダを作って、その中にLISPファイルを入れています。
なので、ツールメニューのオプションで[ファイルの場所]-[システム]-[サポートファイルの検索パス]に
C:\LISP\ を新規追加しています。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/05(Tue) 12:36
投稿者 ジュンコ
参照先
だい さん

ありがとうございます。

ちなみに、IJCADやAUTOCADでも動作しますか?

会社のパソコンがAUTOCADLTなので動作確認ができないものですいません。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/05(Tue) 13:06
投稿者 だい
参照先
AUTOCADは多分大丈夫かなと思いますが、IJCADは使った事がないので分かりません。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/05(Tue) 20:49
投稿者 十六夜
参照先
だい様
こちら十六夜です。
色々とありがとうございます。そうなっているんだという事が良く分かりました。

そしてLISPをアイコンとして表示させる事できたんですね。
今まで知らずにいちいちロードしてコマンド打ち込んでいました。

^C^C(load "zahyou_csv");zahyou_csv;

ですが、最初のzahyou_csvでzahyou_csv.lspを読み込んで、その次のzahyou_csvでコマンド名でしょうか?
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/06(Wed) 17:37
投稿者 だい
参照先
十六夜さん こんにちは。

そうです、LISPの1行目 "(defun C:zahyou_csv..." はユーザー関数の宣言で、"zahyou_csv"が関数名(コマンド名)です。

ところで懸案の引出線文字のZ座標値への移動ですが、まだ思案中です。
(Last)オプションで最後に作成したエンティティの選択では引出線しか選択できないので、他の手を考えないとダメですね。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/09(Sat) 11:58
投稿者 ジュンコ
参照先
だい さん

家のパソコン(Autocad2019)で動かして見ました。

フォルダを、作成してその中にcsvファイルは出来るのですが

「// ARES座標読み取りデータ//」が、A1セルに入っているのですが座標の書きだしが
出来ません。

何か違うのでしょうか?

十六夜 さん

割り込み質問すいません・・・。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/09(Sat) 12:25
投稿者 十六夜
参照先
ジュンコさま
うちはAutoが無いので試せませんが、そのうち職場に用意するみたいなので情報共有できるとうれしいです。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/03/10(Sun) 14:11
投稿者 だい
参照先
ジュンコさん、こんにちは。

ARESでは思った通りに動きますが、CADの違いが原因だと思われます。
ネットや本に記載されているLISPがARESでは動かない事があるので、、、
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/08/19(Mon) 10:06
投稿者 だい
参照先
(defun C:zahyou_sima ( / fpt dcl_id ZLS set_lst set_val settougo_str kaishi_str kinyuu_val h_keta_val y_keta_val kinyuu_data
h_keta_data y_keta_data dcl_id shinki_val tsuika_val ddiag)

(setq fpt (strcat (vl-string-right-trim "lsp" (findfile "zahyou_sima.lsp")) "txt"));ダイアログ項目の保存用テキストファイルのフルパス
(setq ZLS (open fpt "r"))
(if (= ZLS nil)
(setq set_lst (list "P-" "1" "0" "4" "8"));初回 zahyou_sima.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_sima.dcl"))
(new_dialog "zahyou_sima" dcl_id "" '(1650 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)");キャンセルボタンの場合

(defun SaveTileVal ( / kaishi0 ZLT set_v set_l tenban)
(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")))
(setq shinki_val (atoi (get_tile "shinki")))
(setq tsuika_val (atoi (get_tile "tsuika")))

(setq ZLS (open fpt "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)

(if (= shinki_val tsuika_val)
(alert "出力条件を [新規] か [追加] か選択して下さい" "条件選択" "imformation")
);if

(setq ZLT (open fpt "r"))
(if (/= ZLT nil)
(progn
(setq set_v (read-line ZLT))
(setq set_l (list set_v))
(while (/= set_v nil)
(setq set_v (read-line ZLT))
(setq set_l (append set_l (list set_v)))
);while
(setq tenban (itoa (- (length set_l) 4)))
(close ZLT)
);progn
);if
);SaveTileVal



(setq ddiag (start_dialog))
(unload_dialog dcl_id)

(if (= (getvar "DIASTAT") 1);最後に使用したダイアログ ボックスの終了方法が"OK"で閉じたら
(if (/= shinki_val tsuika_val)
(kaishi shinki_val fpt kaishi_str settougo_str h_keta_val kinyuu_val y_keta_val)
(C:zahyou_sima)
)
)
(princ)
);zahyou_sima

(defun kaishi (shinki_val fpt kaishi_str settougo_str h_keta_val kinyuu_val y_keta_val / ZLT kakikomi fps ZL tenban fs pt pt2 X Y Z pt1 zero_kosuu str1 xcoord ycoord sa str2 str3 txy moto kaishi_str ato ZLS)
(setq osm (getvar "OSMODE"))
(setvar "CMDECHO" 0)
(setq tenban "0")
(if (= shinki_val 1)
(setq kakikomi "w");新規書き込み用
(setq kakikomi "a");追加書き込み用
)

(setq fs (findfile "zl.sim"))

(setq fps (strcat (vl-filename-directory (findfile "zahyou_sima.lsp")) "\\zl.sim"))
(setq ZL (open fps kakikomi));書き込み条件に応じてファイルを開く

(setq ZLT nil)
(setq fpt (strcat (vl-string-right-trim "lsp" (findfile "zahyou_sima.lsp")) "txt"));ダイアログ項目の保存用テキストファイルのフルパス
(setq ZLT (open fpt "r"))

(if (= shinki_val 1)
(progn
(write-line "G00,01,," ZL)
(write-line "Z00,// ARES座標読み取りデータ//," ZL)
(write-line "A00," ZL)
(setq tenban "0")
)
(if (= fs nil)
(progn
(write-line "G00,01,," ZL)
(write-line "Z00,// ARES座標読み取りデータ//," ZL)
(write-line "A00," ZL)
(setq tenban "0")
)
)
)
(close ZLT)

;(princ)
(setq pt "0")
(setq pt2 "0")
(while (/= pt nil)
(initget 1)
(princ "座標取得位置を指示:(Escで終了)")
(princ)
(command "_id" pause)
(setq pt (getvar "lastpoint"))
(setq X (cadr pt))
(setq Y (car pt))
(setq Z (caddr pt))

(setvar "OSMODE" 0)
(setq pt1 (trans pt 1 0))
(command "_ucs" "w")
(command "_leader" pt1)
(setq pt2 (getpoint pt1 "記入位置を指示:(右クリックで座標取得位置の再指示、Escで終了)"))
(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 "A01," tenban "," str1 "," (rtos X 2 y_keta_val) "," (rtos Y 2 y_keta_val) "," (rtos Z 2 y_keta_val) ","));文字列 [点名,X座標,Y座標,Z座標]
(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 fpt "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
(close ZL)
);kaishi

(defun *error* (msg)
(setvar "CMDECHO" 1)
(setvar "OSMODE" osm);オブジェクトスナップモードを元に戻す
(setq osm nil)
(princ msg)
(princ)
);*error*
(princ)
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/08/19(Mon) 10:08
投稿者 だい
参照先
↑こちらをzahyou_sima.lspとして下さい。

改良しました。
座標値を拾う際、新規書込みするかこのLISPで作った既存のSIMAファイルに追加書込みするか選択できるようにしました。

このLISPを保存したフォルダに、ダイアログ記入項目の保存用のテキストファイルが作られます。
以前はLISPの中でテキストファイルのファイルパスを記入しなければなりませんでしたが、
今回はLISPファイル自身のファイルパスを読み取って、同じフォルダに勝手に作るようにしました。
記事編集 編集
Re: 座標値取得〜SIMAファイル作成 LISP
投稿日 : 2019/08/19(Mon) 10:09
投稿者 だい
参照先
ダイアログも変更したので、↓こちらを zahyou_sima.dcl として zahyou_sima.lsp と同じフォルダに保存して下さい。


/* zahyou_sima.dcl - dcl file for zahyou_sima.lsp program */

zahyou_sima :dialog
{
label = "座標値取得 SIMA出力";
: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;
}
:boxed_radio_row
{
label = "出力条件";
:radio_button
{
label = "新規書込み";
key = "shinki";
}
:radio_button
{
label = "追加書込み";
key = "tsuika";
}
}
}

/* 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;
}
}
}
記事編集 編集
ページの上に移動
件名 スレッドをトップへソート
名前
メールアドレス
URL
暗証キー
画像認証 (右画像の数字を入力) 投稿キー
コメント


- WEB PATIO -