TOP PAGE > 記事閲覧
定型文字を入力(lisp)
投稿日 : 2016/01/11(Mon) 18:26
投稿者 アルサポ
参照先
あらかじめ用意してある文字列から文字を入力、編集するlispを紹介しようと思います。

仕組みは、あらかじめよく使う文字をテキストファイルに入力しておき、
CAD上でコマンドを実行した時に一覧として表示され、選択すると文字を入力、編集、追記
いずれかが出来るlispになっています。

余談ですが、LISPを開発する時は、AutoCAD、JDrafどちらでも利用できるLISPを目指していつも開発しています。
しかし、AutoCADでは処理が出来るのに、JDrafでは出来なかったということがよくあります。
なので、この掲示板で掲載する事をあきらめてしまう事が度々あるのですが、
今回は珍しく、JDrafでは処理ができて、AutoCADでは使う事が出来なかったので注意して下さい。


それでは、まずよく使う文字をテキストファイルで作成して下さい。
例えば、「定型文字.txt」という名前のテキストエディタでファイルを作って下さい。
内容は、よく使う文字を一行ずつ改行して準備して下さい。


-------下記の行を内容としてテキストファイルに保存して下さい(例題として作成していますが、下記の内容はよく使う文字ならば何でもいいです)-------
○○〇工事
平成 27 年 〇 月 〇 日
〇〇 葉之内
Gr-A-4E -
Ds-PuL-0.30-0.30-
Ds-PuL-0.40-0.40-
Ds-PuL-0.50-0.50-
記事編集 編集
Re: 定型文字を入力(lisp)
投稿日 : 2016/01/11(Mon) 18:32
投稿者 アルサポ
参照先
ダイアログボックスを使ったlispになりますので、DCLファイルを作成します。
テキストエディタで、「fixedForm.dcl」のファイルを作成して、内容をコピー貼付で作成して下さい。


fixedForm:dialog
{
label="定型文字入力";

:list_box
{
key="List1";
multiple_select=false;
width = 35;
height = 30;
}

:row
{
:button
{
label="入力";
is_default=true;
key="writeTxt";
width=5;
fixed_width=true;
}
:button
{
label="変更";
is_default=true;
key="rewriteTxt";
width=5;
fixed_width=true;
}
:button
{
label="追記(前)";
is_default=true;
key="addFront";
width=5;
fixed_width=true;
}
:button
{
label="追記(後)";
is_default=true;
key="addAfter";
width=5;
fixed_width=true;
}
:button
{
label="キャンセル";
is_default=true;
key="cancel";
width=5;
fixed_width=true;
}
}
}
記事編集 編集
Re: 定型文字を入力(lisp)
投稿日 : 2016/01/11(Mon) 18:43
投稿者 アルサポ
参照先
下記の内容がLISPになります。
テキストエディタで、「fixedForm.lsp」のファイルを作成して、内容をコピー貼付で作成して下さい。
最初に作成した、よく使う文字のファイル「定型文字.txt」を参照しなければいけないので、
そのファイルパスを入力する必要があります。今回は、Cドライブ直下に保存している事にしていますが、
テキストファイルを好きな場所に保存してもいいです。その場合ファイルパスを書きなおす必要がありますので
その点は、ご注意下さい。


(defun C:fixedForm (/ value txtLoad txt txtList dcl_id chk)
;定型文のテキストデータを読み込む
;テキストファイルのパスを記入。今回はCドライブ直下"C:\\定型文字.txt"。好きな場所でもよいがパスを書きかえる必要がある。
(setq txtLoad(open "C:\\定型文字.txt" "r"));ファイルを開く
(setq txt(read-line txtLoad))
(setq txtList(list txt));リスト作成
(while (/= txt nil)
(setq txt(read-line txtLoad))
(setq txtList(append txtList(list txt)));リストに追加
);while
(close txtLoad);ファイルを閉じる

(setq dcl_id(load_dialog"fixedForm.dcl"))
(new_dialog "fixedForm" dcl_id)
;txtListをリストボックスに追加
(start_list "List1" 3)
(setq i 0)
(while (/= (nth i txtList) nil)
(add_list (nth i txtList))
(setq i (+ i 1))
);while
(end_list)

;文字列を入力する
(defun writTxtCode(/ pt txtHeight)
;未選択時の処理
(if (= value nil) (setq value (getstring "\n 文字列の内容を入力:")))
(setq pt (getpoint "\n 挿入位置を指示:"))
(setq txtHeight (getreal "\n 文字の高さを指示:"))
(command "text" pt txtHeight "" value);文字列を入力
);defun
;文字列を変更する
(defun rewritTxtCode(/ pstTxt entpstTxt)
;未選択時の処理
(if (= value nil) (setq value (getstring "\n 文字列の内容を入力:")))
(setq pstTxt (entsel "\n変更する文字列を選択:"))
(setq entpstTxt (entget (car pstTxt)))
(setq entpstTxt (subst (cons 1 value) (assoc 1 entpstTxt) entpstTxt))
(entmod entpstTxt)
);defun
;文字の前に追記する
(defun addFrontCode(/ pstTxt entpstTxt)
;未選択時の処理
(if (= value nil) (setq value (getstring "\n 追記する内容を入力:")))
(setq pstTxt (entsel "\n変更する文字列を選択:"))
(setq entpstTxt (entget (car pstTxt)))
(setq value (strcat value (cdr (assoc 1 entpstTxt))))
(setq entpstTxt (subst (cons 1 value) (assoc 1 entpstTxt) entpstTxt))
(entmod entpstTxt)
);defun
;文字の後ろに追記する
(defun addAfterCode(/ pstTxt entpstTxt)
;未選択時の処理
(if (= value nil) (setq value (getstring "\n 追記する内容を入力:")))
(setq pstTxt (entsel "\n変更する文字列を選択:"))
(setq entpstTxt (entget (car pstTxt)))
(setq value (strcat (cdr (assoc 1 entpstTxt)) value))
(setq entpstTxt (subst (cons 1 value) (assoc 1 entpstTxt) entpstTxt))
(entmod entpstTxt)
);defun

;リストを選択した時の処理
(action_tile "List1" "(setq value(nth (atoi(get_tile \"List1\")) txtList))")
;ボタンを押された時の処理
(action_tile "writeTxt" "(done_dialog 1)(writTxtCode)");入力ボタン
(action_tile "rewriteTxt" "(done_dialog 1)(rewritTxtCode)");変更ボタン
(action_tile "addFront" "(done_dialog 1)(addFrontCode)");追記(前)ボタン
(action_tile "addAfter" "(done_dialog 1)(addAfterCode)");追記(後)ボタン
(action_tile "cancel" "(done_dialog 0)");キャンセルボタン

(setq chk (start_dialog))
(unload_dialog dcl_id)
(princ)
)
記事編集 編集
Re: 定型文字を入力(lisp)
投稿日 : 2020/05/28(Thu) 10:10
投稿者 なべ(nave)
参照先
定型文を入力するプログラムを探して、ここにたどり着きました。
ただ、autocad ユーザーなので少し改造させていただきました。
2004を使っていたときは、acadremocon を使っていたのですが、
2014−64ビットになって使いづらくなり諦めていたのですが、
一念発起、取り敢えず最小限のものを作ってみました。

動作確認は、AutoCAD Mechanical 2014 - 日本語 (Japanese)です。

------------------------
mojiset:dialog
{
label="定型文字入力";

: column
{
: boxed_column
{
:list_box
{
key="List1";
multiple_select=false;
width = 60;
height = 30;
}

}
}

/* OK or CANCEL */
ok_cancel;

}

------------------------------

(defun C:mojiset (/ value txtLoad txt txtList dcl_id chk)
(setq txtLoad(open "C:\\mojiset.txt" "r"));開く
(setq txt(read-line txtLoad))
(setq txtList(list txt));リスト作成
(while (/= txt nil)
(setq txt(read-line txtLoad))
(setq txtList(append txtList(list txt)));リストに追加
);while
(close txtLoad);ファイルを閉じる

(setq dcl_id(load_dialog"mojiset.dcl"))
(new_dialog "mojiset" dcl_id)

(start_list "List1" 3)
(setq i 0)
(while (/= (nth i txtList) nil)
(add_list (nth i txtList))
(setq i (+ i 1))
);while
(end_list)

(action_tile "List1" "(setq readlist (get_tile \"List1\"))")

(setq chk (start_dialog))
(unload_dialog dcl_id)
(if(= (getvar "DIASTAT") 1) (writTxtCode))
(princ)
)

;文字列を入力する
(defun writTxtCode(/ pt )

(setq item (read readlist))
(setq value (nth item txtList))

(setq pt (getpoint "\n 挿入位置を指示:"))
(command "text" pt (* 3.5 (getvar "DIMSCALE")) "" value);文字列を入力

);defun

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


- WEB PATIO -