この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

LISPへの変更
明けましておめでとうございます。

早速ですが、この度AutoCad LT 2014を使用していましたが、IJCad 2024(スタンダード)にCadを変更することになりまして
マクロ(主にディゼル関数使用の)をIJCadでは使用出来ないとの事なので
LISPに変換して使用する方法をとる必要があります。
ただ、LISPはまったくの素人(ディゼルも自分では作成不可)なので、こちらの方々にお願い出来ないものかと投稿しています。

色々と今までに、こちらのサイトで紹介されているマクロを使わせて頂いていまして。

一つ目は、切替ありの構築線(水平と垂直)

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),-Layer;n;XLine;P;N;XLine;;setenv;to;1,,)$(nth,$(getenv,to),,XLine;h;または[垂直(右クリック)] ^X\"""$M=$(if,$(getvar,CMDACTIVE),;Change;L;;P;LA;XLine;C;5;;setenv;to;1,setenv;to;2)""",)$(nth,$(getenv,to),,,XLine;v;または[水平(右クリック)] ^X\"""$M=$(if,$(getvar,CMDACTIVE),;Change;L;;P;LA;XLine;C;5;;setenv;to;2,setenv;to;1)""")^M

二つ目は、選択ありのミラー(移動とコピー)

*^C^Cselect;$M=$(if,$(getvar,cmdactive),\)mirrtext;0;mirror;p;;\\'offsetdist;^X元のオブジェクトを削除しますか?[Yes(左クリック)/No(右クリック)]^X\$M="$(if,$(getvar,cmdactive),;y,n)"^M

など沢山あるのですが、取り合えずこちらの変更をして頂ければ、自分でも確認して勉強してみようかなと思います。
60歳を超えてなかなか新しいことに挑戦するのは難しいとは思いますが、頑張ってみたく思います。

何卒宜しくお願いします。
情報が不足している場合は、都度教えて頂ければ随時こちらに追加して参ります。
  • アンクルのお願い
  • MAIL
  • 2024/01/04 (Thu) 11:20:19
Re: LISPへの変更
昨日、投稿した件で報告があります。
現在、IJCadを購入前に色々と体験版にて実証しています。
購入する事は確定しているのですが、諸事情で購入自体はもう少し後になると思います。

ちょっと前までは30日間の体験版使用が可能だったのですが、現在は14日程度らしいです。
投稿する前に確認しておけば良かったのですが、確認不足でした。

CADを導入したら、すぐにでも実証しますので宜しくお願いします。
  • アンクルのお願い
  • MAIL
  • 2024/01/05 (Fri) 09:57:11
Re: LISPへの変更
1つ目 切替ありの構築線(水平と垂直)はこんな感じでしょうか・。
右クリックの切り替えではなく、HとVで切り替えです。
コマンド名はswxl

(defun c:swxl (/ inp pt kwd HV msg)
(command "-Layer" "n" "XLine" "P" "N" "XLine" "")

(setq kwd "H"
HV "水平")

(while (/= kwd nil)
(initget "H V")
(setq pt (getpoint (strcat"\nXLINE(" HV ") 通過点を指定 または水平(H)・垂直(V)変更[H/V]:")))
(if (and (/= pt "H")(/= pt "V"))
(progn
(command "XLINE" kwd pt "")
(command "Change" "L" "" "P" "LA" "XLine" "C" "5" "")
)
(progn
(if (= pt "H")
(setq kwd "H"
HV "水平")
)
(if (= pt "V")
(setq kwd "V"
HV "垂直")
)
)
)
)

(princ)
)
  • LUNE
  • 2024/01/05 (Fri) 11:57:57
Re: LISPへの変更
右クリックバージョン
コマンド名は同じくswxlなので、お好きなほうをどうぞ。

(defun c:swxl (/ inp kwd HV)
(command "-Layer" "n" "XLine" "P" "N" "XLine" "")

(setq kwd "H"
HV "垂直")

(while (/= kwd nil)

(prompt (strcat "\nXLINE 通過点を指定 または" HV "(右クリック):"))
(setq inp (grread))

(if (equal (car inp) 25)
(if (= kwd "V")
(setq kwd "H"
HV "垂直")
(setq kwd "V"
HV "水平")
)
)

(if (equal (car inp) 3)
(progn
(command "XLINE" kwd (cadr inp) "")
(command "Change" "L" "" "P" "LA" "XLine" "C" "5" "")
)
)
)

(princ)
)
  • LUNE
  • 2024/01/05 (Fri) 13:28:19
Re: LISPへの変更
2つ目 選択ありのミラー(移動とコピー)はこんな感じでしょうか・。
コマンド名はswmir

(defun c:swmir (/ inp kwd ss pt1 pt2)
(setq kwd "Y")

(while (/= kwd nil)
(setq ss (ssget))
(setq pt1 (getpoint "\n対称軸の 1 点目を指定:"))
(setq pt2 (getpoint pt1 "\n対称軸の 2 点目を指定:"))

(initget "Yes No")
(prompt "\n元のオブジェクトを削除しますか?[Yes(左クリック)/No(右クリック)]:")

(setq inp (grread))

(command "mirrtext" "0")
(if (or (equal (car inp) 25)(equal inp (list 2 89))(equal inp (list 2 121)))
(command "mirror" ss "" pt1 pt2 "N")
(command "mirror" ss "" pt1 pt2 "Y")
)
)

(princ)
)
  • LUNE
  • 2024/01/05 (Fri) 13:49:44
Re: LISPへの変更
お世話になります。
早速の対応有難う御座います。

確認する前に、本当に今日までの体験期間だったので、まず実証してみます。

作って頂いたLISP(右クリックバージョン)をメモ帳にコピペしてswxl.lspとして保存(文字コードはANSI)し
スタートアップに登録してIJCadを再起動した上でコマンド「swxl」とコマンドラインに打ち込みました。

コマンド: SWXL
; エラー: 関数定義がありません:COMMAND-S

と、この様になりました。

何か、手順が間違っているのでしょうか?
もしくは、設定?などが違うのでしょうか?

すみませんが、教えて頂けると助かります。
宜しくお願いします。
  • アンクルのお願い
  • MAIL
  • 2024/01/05 (Fri) 14:11:34
Re: LISPへの変更
IJCadにはcommand-s関数がないようです。

上記のLispのcommand-sをcommandに書き換えましたので、そちらでお試しください。
  • LUNE
  • 2024/01/05 (Fri) 14:30:07
Re: LISPへの変更
すみませんが続けざまに追記投稿します。

色々調べていたら「COMMAND-S」の部分が読み取れないとの事のようで
「COMMAND」に変更したら使える様になりました。

有難う御座います。

ミラーの方も実証してやってみます。

後、このあと作って頂いた内容を一つ一つ確認して自分なりに把握するつもりですが
わからない事がありましたら、又、相談させて下さい。

宜しくお願いします。
  • アンクルのお願い
  • MAIL
  • 2024/01/05 (Fri) 14:37:22
Re: LISPへの変更
対応して頂いていましたね、有難う御座います。

なんとか、調べてたどり着きましたので、書き換えてやってみました。^^

また、何かありましたら宜しくお願いします。

本当に有難う御座いました。
  • アンクルのお願い
  • MAIL
  • 2024/01/05 (Fri) 14:40:30
Re: LISPへの変更
今回のマクロ→LISPについては、メインどころはcommand関数でマクロと同じことをしているだけです。
構築線については、点の指定or垂直・水平の切り替え、ミラーについては、オブジェクトの選択、対象軸の指定、オブジェクトを残すかどうかをLISPのコードで取得し、その取得した内容をcommand関数にて、XLINEやMIRRORを使って作図しています。
  • LUNE
  • 2024/01/05 (Fri) 14:54:08
Re: LISPへの変更
度々申し訳ありませんが、一つだけ聞いて宜しいですか?

構築線(切替)を使っている時、点(端点・交点など)のマーカーが出ないのは何かあるのでしょうか?

通常のラインコマンドなどでは出ているのですが、このコマンドを使うと出てこないようです。

一応、端点などをひろってはいるようです。

IJCadの事なのかもしれませんが、もし解るようなら教えて頂けると助かります。

一応、もっと自分でも探してみます。
  • アンクルのお願い
  • MAIL
  • 2024/01/05 (Fri) 15:02:24
Re: LISPへの変更
横から失礼します。こちらもお試し下さい。

(defun C:swx(/ hv)
(setq hv "h")
(command "-Layer" "n" "XLine" "P" "N" "XLine" "")
(while T
(command "xline" hv pause)
(if (eq 1 (getvar "CMDACTIVE"))
(command "" "CHPROP" "L" "" "LA" "XLine" "C" "5" "")
(setq hv (if (= hv "h") "v" "h"))
)
)
(princ)
)
  • 通りすがりの人
  • 2024/01/05 (Fri) 15:23:09
Re: LISPへの変更
通りすがりの人さん、重ねて感謝します。

実証してみました。こちらの方はマーカーも出ています。

今の私には、何がどう違うのかはサッパリ解りませんが合わせて一つ一つ確認して参ります。(時間はかかりそうですが・・・

本当に有難う御座いました。

色んな方の掲示板も参考に勉強させて頂きますので宜しくお願いします。
  • アンクルのお願い
  • MAIL
  • 2024/01/05 (Fri) 15:43:55
Re: LISPへの変更
LUNEさん 通りすがりの人さん 有難う御座いました。

厚かましいいお願いとは思いますが、LISPへの道の第一歩と思って頂いてご教授下さい。

まず、通りすがりの人さんのLISPを確認していました。

下記が私なりに解釈したものになりますが不明な点も多々あります。

宜しければ教えて頂けると有難いです。



① (defun C:swx(/ hv)        ・・・・・・・・・・・・・マクロ名を「swx」とする。←←ここの(/ hv)が不明です。

② (setq hv "h")            ・・・・・・・・・・・・「hv」という名の変数に文字「h」を与える

③ (command "-Layer" "n" "XLine" "P" "N" "XLine" "")   ・・・通常のコマンド「XLine」という名前の画層を作成

④ (while T                  ・・・・・・・・whileで T の条件まで続ける? ←←ここの「T」の意味が解りません。

⑤ (command "xline" hv pause)         ・・・・・・・・コマンド「xline」(構築線)「hv」内の変数「H or V」ユーザー入力待ち:構築線を引く

⑥ (if (eq 1 (getvar "CMDACTIVE"))       ・・・・・・・・if文の始まり、eq で比較 getver で取得した CMDACTIVE(システム変数) の値が 1 かどうか。

                              ・・「1」 は通常コマンドがアクティブ(コマンド進行中?)の意

⑦ (command "" "CHPROP" "L" "" "LA" "XLine" "C" "5" "")  ・・上記の eq が同一(1)ならば、先ほど引いた構築線の画層と色のプロパティを変更

⑧ (setq hv (if (= hv "h") "v" "h"))            ・・そうでない場合(eq が同一でない)「hv」の値を切り替える

                             ・・・この場合⑥が右クリックの動作と言う事になるのでしょうか?

                             ・・・また、(= hv "h") は、「hv」が h と同じ場合「v」を代入する式と考えればいいのでしょうか?

⑨ )                           ・・・ここまでが if文 となる

⑩ )                           ・・・ここまでが while文 となり → ④に戻って繰り返す。

⑪ (princ)                        ・・・コマンドラインに式を表示とありましたが、どういう意味があるのでしょうか?

⑫ )

この様な解釈でいいのか、また、不明な点を素人にも解るように教えて下さい。

今日、調べた内容ではここまでが精一杯でした、宜しくお願いします。
  • アンクルのお願い
  • MAIL
  • 2024/01/05 (Fri) 18:27:02
Re: LISPへの変更
①変数「hv」を使用します。って宣言しています。
この宣言が無くてもこのLISPを単独で使用する場合は問題ありません。
問題が発生するのは、他のLISPルーチンと連携する場合。
(難しいことが判らないのでしたら、何も考えずに無条件で使用する変数を宣言しておけば良いです)

このルーチンはメインルーチンなので、スラッシュの後ろにしか変数の宣言は行いません。
サブルーチンの場合は、スラッシュの前にも変数を宣言する事があります。(他のルーチンとデータを受け渡しするための変数を記入します)

②OK
③OK

④(while 条件式   とすれば、条件式がTrueの間繰り返しなさい。って事になります。
「T」はTrueの事なので、条件式が常にTrueという事になり、
無条件で繰り返せ。って命令になります。

⑤OK
⑥OK
⑦OK

⑧OK ⑤の「PAUSE」で左クリックすれば、XLINEコマンドが継続しているので、CMDACTIVE=1
   ⑤の「PAUSE」で右クリックすれば、XLINEコマンドが終了するので、CMDACTIVE=0

⑨OK
⑩OK

⑪(princ) は無くても機能的には問題ありません。
 これを付けないと、最後の命令の結果がコマンドラインに表示されてしまいます。
 表示されても気にしない人なら、(princ)を付けなくても良いですが、
 「この表示は何だろう?」って疑問に思ってしまう人も居るかもしれないので、
 付けるのが慣例(?)になっています。

 ※(princ)は「最後の命令の結果を非表示にする機能」ではありません。
 ※最後の命令を(princ)で終わらせることで、最後の命令の結果を「文字列のない文字」になるようにしているだけです。
⑫OK
  • 通りすがりの人
  • 2024/01/07 (Sun) 22:22:05
Re: LISPへの変更
お返事有難うございました。

細かい説明など感謝しています。色々と解らない事だらけで解釈が合っているのかも不安でしたので

非常に有難いです。

ただ、思ったのはこのLISPが解ると色々なものに応用も出来るのかなって思えました。

再度、理解し直して新たなLISPを自分でも作れるように頑張りたいという意気込みが出ました。

本当にお二人には感謝しています。今後とも宜しくお願い致します。
  • アンクルのお願い
  • 2024/01/09 (Tue) 08:47:48
Re: LISPへの変更
いま気付いたのですが、
私の方のLISPは、最後の(princ)は不要です。

私は付けるのが慣例(?)になっているので、何も考えずに付けていました。
付けていても問題は無いので、そのままでも良いです。

今回のLISPでは不要である理由は、
(while T により無限ループになっています。
つまり、ループから出る事は無いので、次の(princ)へ進む事は有り得ないからです。

LISPを終了するには、ESCを押すしかありません。

ちなみにESCを押すと、エラー表示と共に終了します。
このエラー表示は、「ESCが押された為、処理が中断しましたよ」って事なので、
特に気にする事は無いのですが、これが気になるならエラー表示を出さない方法も有ります。
その分、プログラムが長くなるので、私はそこまでの処理はしていません。
  • 通りすがりの人
  • 2024/01/09 (Tue) 09:00:08
Re: LISPへの変更
LUNE様へ

お忙しい中申し訳ございません。
本LISPをBricsCAD PRO V24 (x64)で使用してみましたが(右クリの構築線)、右クリックしても
垂直線に変更できない為、大変申し訳ございませんがご修正していただけないでしょうか。



: swxl
: -Layer
画層 [? で一覧表示/新規画層 (N)/作成 (M)/カレントの画層にセット (S)/名前変更 (R)/色 (C)/線種 (L)/線の太さ (LW)/透過性 (TR)/マテリアル (MAT)/印刷 (P)/状態 (A)/画層オン (ON)/画層オフ (OF)/フリーズ (F)/フリーズ解除 (T)/ロック (LO)/ロック解除 (U)/説明 (D)/調整 (E)/外部参照 (X)]: n
新規画層名: XLine
画層 XLine は既に存在しています。
画層 [? で一覧表示/新規画層 (N)/作成 (M)/カレントの画層にセット (S)/名前変更 (R)/色 (C)/線種 (L)/線の太さ (LW)/透過性 (TR)/マテリアル (MAT)/印刷 (P)/状態 (A)/画層オン (ON)/画層オフ (OF)/フリーズ (F)/フリーズ解除 (T)/ロック (LO)/ロック解除 (U)/説明 (D)/調整 (E)/外部参照 (X)]: P
印刷設定を入力 [印刷 (P)/印刷しない (N)] <印刷 (P)>: N
設定する画層名を入力 <0>: XLine
画層 [? で一覧表示/新規画層 (N)/作成 (M)/カレントの画層にセット (S)/名前変更 (R)/色 (C)/線種 (L)/線の太さ (LW)/透過性 (TR)/マテリアル (MAT)/印刷 (P)/状態 (A)/画層オン (ON)/画層オフ (OF)/フリーズ (F)/フリーズ解除 (T)/ロック (LO)/ロック解除 (U)/説明 (D)/調整 (E)/外部参照 (X)]:
XLINE 通過点を指定 または垂直(右クリック):
: XLINE
構築線: 線分に沿ったポイントをセット、または [水平 (H)/垂直 (V)/角度 (A)/2分割 (B)/平行 (P)]: H
位置:
位置:
: Change
変更する図形を選択 [選択オプション (?)]: L
セット内の図形: 1
変更する図形を選択 [選択オプション (?)]:
点を変更 [図形 (E)/プロパティ... (P)]: P
変更するプロパティ [色 (C)/高度 (E)/画層 (LA)/線種 (LT)/線種尺度 (S)/線の太さ (LW)/厚さ (T)/透過性 (TR)/マテリアル (M)/異尺度対応 (A)]: LA
新規画層 <0>: XLine
変更するプロパティ [色 (C)/高度 (E)/画層 (LA)/線種 (LT)/線種尺度 (S)/線の太さ (LW)/厚さ (T)/透過性 (TR)/マテリアル (M)/異尺度対応 (A)]: C
新しい色 [トゥルーカラー (T)/カラーブック (CO)] <ByLayer>: 5
変更するプロパティ [色 (C)/高度 (E)/画層 (LA)/線種 (LT)/線種尺度 (S)/線の太さ (LW)/厚さ (T)/透過性 (TR)/マテリアル (M)/異尺度対応 (A)]:
XLINE 通過点を指定 または垂直(右クリック):
: XLINE
構築線: 線分に沿ったポイントをセット、または [水平 (H)/垂直 (V)/角度 (A)/2分割 (B)/平行 (P)]: H
位置:
位置:
: Change
変更する図形を選択 [選択オプション (?)]: L
セット内の図形: 1
変更する図形を選択 [選択オプション (?)]:
点を変更 [図形 (E)/プロパティ... (P)]: P
変更するプロパティ [色 (C)/高度 (E)/画層 (LA)/線種 (LT)/線種尺度 (S)/線の太さ (LW)/厚さ (T)/透過性 (TR)/マテリアル (M)/異尺度対応 (A)]: LA
新規画層 <0>: XLine
変更するプロパティ [色 (C)/高度 (E)/画層 (LA)/線種 (LT)/線種尺度 (S)/線の太さ (LW)/厚さ (T)/透過性 (TR)/マテリアル (M)/異尺度対応 (A)]: C
新しい色 [トゥルーカラー (T)/カラーブック (CO)] <ByLayer>: 5
変更するプロパティ [色 (C)/高度 (E)/画層 (LA)/線種 (LT)/線種尺度 (S)/線の太さ (LW)/厚さ (T)/透過性 (TR)/マテリアル (M)/異尺度対応 (A)]:
XLINE 通過点を指定 または垂直(右クリック):
XLINE 通過点を指定 または垂直(右クリック):
XLINE 通過点を指定 または垂直(右クリック):
キャンセル Application ERROR: Console break

; error : Function cancelled
  • masa
  • 2025/03/04 (Tue) 08:59:26
Re: LISPへの変更
右クリックの判定ができてないようです。
BricksCADの(grread)では、右クリックの25は取得できないっぽいので、HとVの入力で切り替える方を使ってみてもらえますか?
あるいは、通りすがりさんの方をお使いください。
  • LUNE
  • 2025/03/04 (Tue) 09:23:02
Re: Re: LISPへの変更
LUNE様へ

お忙しい中、ご回答ありがとうございました!
明日、試してみます!
  • masa
  • 2025/03/04 (Tue) 19:45:35
Re: Re: LISPへの変更
LUNE様へ

教えていただきましたLISPは問題なく動作しました!
ありがとうございました!
  • masa
  • 2025/03/05 (Wed) 19:31:17

返信フォーム






プレビュー (投稿前に内容を確認)