TOP PAGE > 記事閲覧
文字、寸法に任意の文字を追記する(lisp)
投稿日 | : 2016/06/30(Thu) 14:01 |
投稿者 | : アルサポ |
参照先 | : http://r-support.org/bbs/tmp/sample05.zip |
ある日、「100個以上ある数字に丸括弧を簡単に追記する事が出来ないか?」と
知人から相談されたのですが、知人の使っていたCADが「AutoCAD LT」だったので、
VBAやLISPを使えない為に解決する事が出来ませんでした。
これをきっかけに作成した、追記したい文字を既存の文字または、寸法値の
先頭または末尾に追記するLISPを今回は投稿したいと思います。
(きっかけはAutoCADでしたが、AutoCAD、JDraf両方に対応して使えます)
先頭に追記する文字と末尾に追記する文字をそれぞれ入力(必要がない場合は未入力)
する為にダイアログ(DCL)を使って作成しました。
DCLファイルの内容は、次に投稿し、その次にLISPファイルの内容を投稿します。
今回のDCLファイルとLISPファイルは、参照先に圧縮ファイルで添付していますので、
実際のファイルで内容を確認してみてもいいと思います。
Re: (ファイル名)addTextEdit.DCL
投稿日 | : 2016/06/30(Thu) 14:02 |
投稿者 | : アルサポ |
参照先 | : |
addTextEdit : dialog
{
label = "文字列に追記";
: boxed_column
{
label = "追加文字";
: edit_box
{
label = "先頭の追加文字:";
key = "top_eb";
width = 30;
value = "";
}
: edit_box
{
label = "末尾の追加文字:";
key = "bottom_eb";
width = 30;
value = "";
}
}
/* OK or CANCEL */
ok_cancel;
}
Re: (ファイル名)addTextEdit.LSP
投稿日 | : 2016/06/30(Thu) 14:03 |
投稿者 | : アルサポ |
参照先 | : |
(setq topTxt "") ;先頭文字の初期設定
(setq bottomTxt "") ;末尾文字の初期設定
(defun C:addTextEdit( / dcl_id dialog_form pstTxt entpstTxt value)
;ダイアログ表示
(setq dcl_id (load_dialog "addTextEdit.DCL"))
(if (not (new_dialog "addTextEdit" dcl_id))
(progn
(alert "addTextEditer.DCL ファイルが見つかりません!")
(exit)
);progn
);if
;前回の追記文字を入力
(set_tile "top_eb" topTxt)
(set_tile "bottom_eb" bottomTxt)
(defun TxtEdit()
;テキストボックスから追記文字を取得
(setq topTxt (get_tile "top_eb"))
(setq bottomTxt (get_tile "bottom_eb"))
);defun
(action_tile "accept" "(TxtEdit)(done_dialog 1)") ;OKボタン
(action_tile "cancel" "(done_dialog 0)") ;Cancelボタン
(setq dialog_form (start_dialog))
;ダイアログを終了する
(unload_dialog dcl_id)
;OKボタンを押された時の処理
(if(= dialog_form 1)
(while (/= (setq pstTxt (entsel "\n追記する文字列を選択:")) nill)
(setq entpstTxt (entget (car pstTxt)))
(if (= (cdr (assoc 0 entpstTxt)) "DIMENSION")
(progn ;寸法用
;寸法値のみの場合、初期値は未入力になっている(assoc 1 entpstTxt)
(if (= (cdr (assoc 1 entpstTxt)) "")
(setq value (strcat topTxt "<>" bottomTxt)) ;寸法値のみの場合
(setq value (strcat topTxt (cdr (assoc 1 entpstTxt)) bottomTxt))
);if
);progn
(progn ;テキスト、マルチテキスト用
(setq value (strcat topTxt (cdr (assoc 1 entpstTxt)) bottomTxt))
);progn
)
(setq entpstTxt (subst (cons 1 value) (assoc 1 entpstTxt) entpstTxt))
(entmod entpstTxt)
);while
);if
(princ)
)
Re: 文字、寸法に任意の文字を追記する(lisp)
投稿日 | : 2016/06/30(Thu) 14:06 |
投稿者 | : アルサポ |
参照先 | : |
使い方は、コマンドに「addTextEdit」と入力すると先頭と末尾の文字を入力するダイアログが表示されます。
追記したい文字を入力後、OKボタンを押すとダイアログが閉じられ、追記したい文字(寸法)を選択します。
選択後は文字(寸法)に追記され、再び選択表示になり繰り返されます。
終わりたい時には、「Esc」キーまたは、何も選択していない(右クリックや空クリック)と終わる事が出来ます。
これでこのLISPの説明は終わりなのですが、きっかけになった出来事から言えば
問題が「AutoCAD LT」なのでLISPを使う事が出来ないので解決していない事が、知人に対して申し訳ないです。
DIESELマクロで出来ないだろうかと色々と調べては見たのですが、私の力不足でわからなかった事を知人に
話したところ「LISPとか使える互換性の高いJDrafのような安価なCADがあると便利だよね」という話題になったのですが、
「でも、教えてもらえる人が近くにいないとわかんないよね」とJDraf購入までは心が動かなかったようです
JDrafは便利なんだけど、私の周辺でも持っている方が少なく、JDrafの情報が少なくて困る事があるので、
私にとっても、どんどん普及する事を願ってやみません
Re: 文字、寸法に任意の文字を追記する(lisp)